Skip to content
Code-Schnipsel Gruppen Projekte
Commit bf653b29 erstellt von Henning Leutz's avatar Henning Leutz :martial_arts_uniform:
Dateien durchsuchen

fix: quiqqer/order#145

Übergeordneter 24f9c438
Keine zugehörigen Branchen gefunden
Keine zugehörigen Tags gefunden
1 Merge Request!3fix: quiqqer/order#145
......@@ -171,14 +171,14 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
$this->Currency = $List->getCurrency();
$articles = $List->getArticles();
$isNetto = QUI\ERP\Utils\User::isNettoUser($this->getUser());
$articles = $List->getArticles();
$isNetto = QUI\ERP\Utils\User::isNettoUser($this->getUser());
$isEuVatUser = QUI\ERP\Tax\Utils::isUserEuVatUser($this->getUser());
$Currency = $this->getCurrency();
$Currency = $this->getCurrency();
$precision = $Currency->getPrecision();
$subSum = 0;
$subSum = 0;
$nettoSum = 0;
$vatArray = [];
......@@ -196,20 +196,20 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
$this->calcArticlePrice($Article);
$articleAttributes = $Article->toArray();
$calculated = $articleAttributes['calculated'];
$calculated = $articleAttributes['calculated'];
$subSum = $subSum + $calculated['sum'];
$subSum = $subSum + $calculated['sum'];
$nettoSum = $nettoSum + $calculated['nettoSum'];
$articleVatArray = $calculated['vatArray'];
$vat = $articleAttributes['vat'];
$vat = $articleAttributes['vat'];
if ($articleVatArray['text'] === '') {
continue;
}
if (!isset($vatArray[$vat])) {
$vatArray[$vat] = $articleVatArray;
$vatArray[$vat] = $articleVatArray;
$vatArray[$vat]['sum'] = 0;
}
......@@ -231,7 +231,7 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
/**
* Calc price factors
*/
$priceFactors = $List->getPriceFactors();
$priceFactors = $List->getPriceFactors();
$priceFactorSum = 0;
// nur wenn wir welche benötigen, für ERP Artikel ist dies im Moment nicht wirklich nötig
......@@ -247,9 +247,9 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
// percent - Prozent Angabe
if ($PriceFactor->getCalculation() === self::CALCULATION_PERCENTAGE) {
$calcBasis = $PriceFactor->getCalculationBasis();
$calcBasis = $PriceFactor->getCalculationBasis();
$priceFactorValue = $PriceFactor->getValue();
$vatValue = $PriceFactor->getVat();
$vatValue = $PriceFactor->getVat();
if ($vatValue === null) {
$vatValue = QUI\ERP\Tax\Utils::getTaxByUser($this->getUser())->getValue();
......@@ -269,7 +269,7 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
case self::CALCULATION_BASIS_VAT_BRUTTO:
if ($isNetto) {
$bruttoSubSum = $subSum * ($vatValue / 100 + 1);
$percentage = $priceFactorValue / 100 * $bruttoSubSum;
$percentage = $priceFactorValue / 100 * $bruttoSubSum;
} else {
$percentage = $priceFactorValue / 100 * $subSum;
}
......@@ -281,7 +281,7 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
}
$percentage = \round($percentage, $precision);
$vatSum = \round($PriceFactor->getVatSum(), $precision);
$vatSum = \round($PriceFactor->getVatSum(), $precision);
// set netto sum
$PriceFactor->setNettoSum($percentage);
......@@ -300,14 +300,14 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
$PriceFactor->setSumFormatted($Currency->format($PriceFactor->getSum()));
}
$nettoSum = $nettoSum + $PriceFactor->getNettoSum();
$nettoSum = $nettoSum + $PriceFactor->getNettoSum();
$priceFactorSum = $priceFactorSum + $PriceFactor->getNettoSum();
if ($isEuVatUser) {
$PriceFactor->setEuVatStatus(true);
}
$vat = $PriceFactor->getVat();
$vat = $PriceFactor->getVat();
$vatSum = \round($PriceFactor->getVatSum(), $precision);
if (!isset($vatArray[$vat])) {
......@@ -328,17 +328,17 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
// vat text
$vatLists = [];
$vatText = [];
$vatText = [];
$nettoSum = \round($nettoSum, $precision);
$nettoSum = \round($nettoSum, $precision);
$nettoSubSum = \round($nettoSubSum, $precision);
$subSum = \round($subSum, $precision);
$bruttoSum = $nettoSum;
$subSum = \round($subSum, $precision);
$bruttoSum = $nettoSum;
foreach ($vatArray as $vatEntry) {
$vat = $vatEntry['vat'];
$vatLists[$vat] = true; // liste für MWST texte
$vatLists[$vat] = true; // liste für MWST texte
$vatArray[$vat]['sum'] = \round($vatEntry['sum'], $precision);
$bruttoSum = $bruttoSum + $vatArray[$vat]['sum'];
......@@ -388,7 +388,7 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
if ($Factor instanceof QUI\ERP\Products\Interfaces\PriceFactorWithVatInterface) {
$Factor->setSum(\round($Factor->getSum() - $diff, $precision));
$bruttoSum = \round($bruttoSum, $precision);
$added = true;
$added = true;
break;
}
}
......@@ -402,12 +402,12 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
// counterbalance - gegenrechnung
// works only for one vat entry
if (\count($vatArray) === 1) {
$vat = \key($vatArray);
$vat = \key($vatArray);
$netto = $bruttoSum / ($vat / 100 + 1);
$vatSum = $bruttoSum - $netto;
$vatSum = \round($vatSum, $Currency->getPrecision());
$diff = abs($vatArray[$vat]['sum'] - $vatSum);
$diff = abs($vatArray[$vat]['sum'] - $vatSum);
if ($diff <= 0.019) {
$vatArray[$vat]['sum'] = $vatSum;
......@@ -417,7 +417,7 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
if ($bruttoSum === 0 || $nettoSum === 0) {
$bruttoSum = 0;
$nettoSum = 0;
$nettoSum = 0;
foreach ($vatArray as $vat => $entry) {
$vatArray[$vat]['sum'] = 0;
......@@ -429,7 +429,7 @@ public function calcArticleList(ArticleList $List, $callback = false): ArticleLi
foreach ($priceFactors as $Factor) {
if ($Factor->getCalculationBasis() === self::CALCULATION_GRAND_TOTAL) {
$value = $Factor->getValue();
$value = $Factor->getValue();
$bruttoSum = $bruttoSum + $value;
if ($bruttoSum < 0) {
......@@ -470,45 +470,45 @@ public function calcArticlePrice(Article $Article, $callback = false)
return $Article->getPrice();
}
$isNetto = QUI\ERP\Utils\User::isNettoUser($this->getUser());
$isNetto = QUI\ERP\Utils\User::isNettoUser($this->getUser());
$isEuVatUser = QUI\ERP\Tax\Utils::isUserEuVatUser($this->getUser());
$Currency = $Article->getCurrency();
$Currency = $Article->getCurrency();
if (!$Currency) {
$Currency = $this->getCurrency();
}
$nettoPrice = $Article->getUnitPrice()->value();
$vat = $Article->getVat();
$nettoPrice = $Article->getUnitPrice()->value();
$vat = $Article->getVat();
$basisNettoPrice = $nettoPrice;
$nettoSubSum = $this->round($nettoPrice * $Article->getQuantity());
$nettoSubSum = $this->round($nettoPrice * $Article->getQuantity());
if ($isEuVatUser) {
$vat = 0;
}
// discounts
$Discount = $Article->getDiscount();
$Discount = $Article->getDiscount();
$nettoPriceNotRounded = $Article->getUnitPriceUnRounded()->getValue();
if ($Discount) {
switch ($Discount->getCalculation()) {
// einfache Zahl, Währung --- kein Prozent
case Calc::CALCULATION_COMPLEMENT:
$nettoPrice = $nettoPrice - ($Discount->getValue() / $Article->getQuantity());
$nettoPrice = $nettoPrice - ($Discount->getValue() / $Article->getQuantity());
$nettoPriceNotRounded = $nettoPriceNotRounded - ($Discount->getValue() / $Article->getQuantity());
break;
// Prozent Angabe
case Calc::CALCULATION_PERCENTAGE:
$percentage = $Discount->getValue() / 100 * $nettoPrice;
$nettoPrice = $nettoPrice - $percentage;
$percentage = $Discount->getValue() / 100 * $nettoPrice;
$nettoPrice = $nettoPrice - $percentage;
$nettoPriceNotRounded = $nettoPriceNotRounded - $percentage;
break;
}
}
$vatSum = $nettoPrice * ($vat / 100);
$vatSum = $nettoPrice * ($vat / 100);
$bruttoPrice = \round($nettoPrice + $vatSum, $Currency->getPrecision());
if (!$isNetto) {
......@@ -521,12 +521,12 @@ public function calcArticlePrice(Article $Article, $callback = false)
// sum
$nettoSum = $this->round($nettoPrice * $Article->getQuantity());
$vatSum = $nettoSum * ($vat / 100);
$vatSum = $nettoSum * ($vat / 100);
// korrektur rechnung / 1 cent problem
if ($checkBrutto !== $bruttoPrice) {
$bruttoPrice = $checkBrutto;
$vatSum = $checkVat;
$vatSum = $checkVat;
}
// if the user is brutto
......@@ -537,13 +537,13 @@ public function calcArticlePrice(Article $Article, $callback = false)
} else {
// sum
$nettoSum = $this->round($nettoPrice * $Article->getQuantity());
$vatSum = $nettoSum * ($vat / 100);
$vatSum = $nettoSum * ($vat / 100);
$bruttoSum = $this->round($nettoSum + $vatSum);
}
$price = $isNetto ? $nettoPrice : $bruttoPrice;
$sum = $isNetto ? $nettoSum : $bruttoSum;
$price = $isNetto ? $nettoPrice : $bruttoPrice;
$sum = $isNetto ? $nettoSum : $bruttoSum;
$basisPrice = $isNetto ? $basisNettoPrice : $basisNettoPrice + ($basisNettoPrice * $vat / 100);
$vatArray = [
......@@ -553,7 +553,7 @@ public function calcArticlePrice(Article $Article, $callback = false)
];
QUI\ERP\Debug::getInstance()->log(
'Kalkulierter Artikel Preis '.$Article->getId(),
'Kalkulierter Artikel Preis ' . $Article->getId(),
'quiqqer/erp'
);
......@@ -589,9 +589,9 @@ public function calcArticlePrice(Article $Article, $callback = false)
*/
public function round($value): float
{
$decimalSeparator = $this->getUser()->getLocale()->getDecimalSeparator();
$decimalSeparator = $this->getUser()->getLocale()->getDecimalSeparator();
$groupingSeparator = $this->getUser()->getLocale()->getGroupingSeparator();
$precision = QUI\ERP\Defaults::getPrecision();
$precision = QUI\ERP\Defaults::getPrecision();
if (\strpos($value, $decimalSeparator) && $decimalSeparator != '.') {
$value = \str_replace($groupingSeparator, '', $value);
......@@ -704,7 +704,7 @@ public static function calculatePayments($ToCalculate): array
{
if (self::isAllowedForCalculation($ToCalculate) === false) {
QUI\ERP\Debug::getInstance()->log(
'Calc->calculatePayments(); Object is not allowed to calculate '.\get_class($ToCalculate)
'Calc->calculatePayments(); Object is not allowed to calculate ' . \get_class($ToCalculate)
);
throw new QUI\ERP\Exception('Object is not allowed to calculate');
......@@ -717,7 +717,7 @@ public static function calculatePayments($ToCalculate): array
// if payment status is paid, take it immediately and do not query any transactions
if ($ToCalculate->getAttribute('paid_status') === QUI\ERP\Constants::PAYMENT_STATUS_PAID) {
$paidData = $ToCalculate->getAttribute('paid_data');
$paid = 0;
$paid = 0;
if (!\is_array($paidData)) {
$paidData = \json_decode($paidData, true);
......@@ -765,16 +765,16 @@ public static function calculatePayments($ToCalculate): array
$paidData = [];
$paidDate = 0;
$sum = 0;
$total = $calculations['sum'];
$sum = 0;
$total = $calculations['sum'];
QUI\ERP\Debug::getInstance()->log(
'Calc->calculatePayments(); total: '.$total
'Calc->calculatePayments(); total: ' . $total
);
$isValidTimeStamp = function ($timestamp) {
try {
new \DateTime('@'.$timestamp);
new \DateTime('@' . $timestamp);
} catch (\Exception $e) {
return false;
}
......@@ -827,7 +827,7 @@ public static function calculatePayments($ToCalculate): array
];
}
$paid = Price::validatePrice($sum);
$paid = Price::validatePrice($sum);
$toPay = Price::validatePrice($calculations['sum']);
// workaround fix
......@@ -857,8 +857,8 @@ public static function calculatePayments($ToCalculate): array
&& $ToCalculate->getAttribute('paid_status') === QUI\ERP\Constants::PAYMENT_STATUS_PLAN) {
// Leave everything as it is because a subscription plan order can never be set to "paid"
} elseif ($ToCalculate->getAttribute('paid_status') === QUI\ERP\Constants::TYPE_INVOICE_REVERSAL
|| $ToCalculate->getAttribute('paid_status') === QUI\ERP\Constants::TYPE_INVOICE_CANCEL
|| $ToCalculate->getAttribute('paid_status') === QUI\ERP\Constants::PAYMENT_STATUS_DEBIT
|| $ToCalculate->getAttribute('paid_status') === QUI\ERP\Constants::TYPE_INVOICE_CANCEL
|| $ToCalculate->getAttribute('paid_status') === QUI\ERP\Constants::PAYMENT_STATUS_DEBIT
) {
// Leave everything as it is
} elseif ((float)$ToCalculate->getAttribute('toPay') == 0) {
......@@ -866,7 +866,7 @@ public static function calculatePayments($ToCalculate): array
} elseif ($ToCalculate->getAttribute('paid') == 0) {
$ToCalculate->setAttribute('paid_status', QUI\ERP\Constants::PAYMENT_STATUS_OPEN);
} elseif ($ToCalculate->getAttribute('toPay')
&& $calculations['sum'] != $ToCalculate->getAttribute('paid')
&& $calculations['sum'] != $ToCalculate->getAttribute('paid')
) {
$ToCalculate->setAttribute('paid_status', QUI\ERP\Constants::PAYMENT_STATUS_PART);
}
......@@ -962,13 +962,13 @@ public static function calculateTotal(array $invoiceList, $Currency = null): arr
}
$nettoTotal = 0;
$vatTotal = 0;
$vatTotal = 0;
$bruttoToPay = 0;
$bruttoPaid = 0;
$bruttoPaid = 0;
$bruttoTotal = 0;
$vatPaid = 0;
$nettoToPay = 0;
$vatPaid = 0;
$nettoToPay = 0;
foreach ($invoiceList as $invoice) {
// if (isset($invoice['type']) && (int)$invoice['type'] === Handler::TYPE_INVOICE_CANCEL ||
......@@ -978,29 +978,33 @@ public static function calculateTotal(array $invoiceList, $Currency = null): arr
// }
// soll doch mit berechnet werden
$invBruttoSum = floatval($invoice['calculated_sum']);
$invVatSum = floatval($invoice['calculated_vatsum']);
$invPaid = floatval($invoice['calculated_paid']);
$invToPay = floatval($invoice['calculated_toPay']);
$invBruttoSum = floatval($invoice['calculated_sum']);
$invVatSum = floatval($invoice['calculated_vatsum']);
$invPaid = floatval($invoice['calculated_paid']);
$invToPay = floatval($invoice['calculated_toPay']);
$invNettoTotal = floatval($invoice['calculated_nettosum']);
$invVatSumPC = QUI\Utils\Math::percent($invVatSum, $invBruttoSum);
$invVatSumPC = QUI\Utils\Math::percent($invVatSum, $invBruttoSum);
if ($invVatSumPC) {
$invVatPaid = $invPaid * $invVatSumPC / 100;
if ($invToPay === 0.0) {
$invVatPaid = $invVatSum;
} else {
$invVatPaid = $invPaid * $invVatSumPC / 100;
}
} else {
$invVatPaid = 0;
}
$invNettoPaid = $invPaid - $invVatPaid;
$invNettoPaid = $invPaid - $invVatPaid;
$invNettoToPay = $invNettoTotal - $invNettoPaid;
// complete + addition
$vatPaid = $vatPaid + $invVatPaid;
$vatPaid = $vatPaid + $invVatPaid;
$bruttoTotal = $bruttoTotal + $invBruttoSum;
$bruttoPaid = $bruttoPaid + $invPaid;
$bruttoPaid = $bruttoPaid + $invPaid;
//$bruttoToPay = $bruttoToPay + $invToPay;
$nettoToPay = $nettoToPay + $invNettoToPay;
$vatTotal = $vatTotal + $invVatSum;
$vatTotal = $vatTotal + $invVatSum;
$nettoTotal = $nettoTotal + $invNettoTotal;
}
......@@ -1010,7 +1014,7 @@ public static function calculateTotal(array $invoiceList, $Currency = null): arr
$nettoPaid = $bruttoPaid - $vatPaid;
// vat calculation
$vatToPay = $vatTotal - $vatPaid;
$vatToPay = $vatTotal - $vatPaid;
$bruttoToPay = $bruttoTotal - $bruttoPaid;
return [
......
0% Lade oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren