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

Merge branch 'next' into 'master'

fix: precision for netto price and unit price

Closes brassberg/ecoyn/tickets#93

See merge request !28
Übergeordnete 28e7efdf 455082ed
Keine zugehörigen Branchen gefunden
Keine zugehörigen Tags gefunden
2 Merge Requests!140Update 'next-4.x' with latest changes from 'main',!28fix: precision for netto price and unit price
Pipeline-Nr. 4797 bestanden
...@@ -11,14 +11,15 @@ ...@@ -11,14 +11,15 @@
*/ */
use QUI\ERP\Accounting\ArticleDiscount; use QUI\ERP\Accounting\ArticleDiscount;
use QUI\ERP\Defaults;
QUI::$Ajax->registerFunction( QUI::$Ajax->registerFunction(
'package_quiqqer_erp_ajax_products_calc', 'package_quiqqer_erp_ajax_products_calc',
function ($articles, $priceFactors, $user, $currency, $nettoInput) { function ($articles, $priceFactors, $user, $currency, $nettoInput) {
$nettoInput = (int)$nettoInput; $nettoInput = (int)$nettoInput;
$articles = json_decode($articles, true); $articles = json_decode($articles, true);
$user = json_decode($user, true); $user = json_decode($user, true);
$priceFactors = json_decode($priceFactors, true); $priceFactors = json_decode($priceFactors, true);
if (!is_array($articles)) { if (!is_array($articles)) {
...@@ -79,21 +80,23 @@ function ($articles, $priceFactors, $user, $currency, $nettoInput) { ...@@ -79,21 +80,23 @@ function ($articles, $priceFactors, $user, $currency, $nettoInput) {
$Currency = $Articles->getCurrency(); $Currency = $Articles->getCurrency();
foreach ($brutto['articles'] as $k => $article) { foreach ($brutto['articles'] as $k => $article) {
$vat = $article['vat'] / 100 + 1; $vat = $article['vat'] / 100 + 1;
$bruttoSum = $article['sum']; $bruttoSum = $article['sum'];
$quantity = $article['quantity']; $quantity = $article['quantity'];
if ($quantity) { if ($quantity) {
$unitPrice = $bruttoSum / $quantity; $unitPrice = $bruttoSum / $quantity;
$unitPrice = round($unitPrice, $Currency->getPrecision()); $unitPrice = round($unitPrice, Defaults::getPrecision());
} else { } else {
$unitPrice = $article['unitPrice'] * $vat; $unitPrice = $article['unitPrice'] * $vat;
} }
$brutto['articles'][$k]['unitPrice'] = $unitPrice;
$brutto['articles'][$k]['display_unitPrice'] = $Currency->format($unitPrice);
$brutto['articles'][$k]['display_quantity_sum'] = $brutto['articles'][$k]['display_sum']; $brutto['articles'][$k]['display_quantity_sum'] = $brutto['articles'][$k]['display_sum'];
$brutto['articles'][$k]['quantity_sum'] = $brutto['articles'][$k]['sum']; $brutto['articles'][$k]['quantity_sum'] = $brutto['articles'][$k]['sum'];
$brutto['articles'][$k]['unitPrice'] = $unitPrice;
$brutto['articles'][$k]['display_unitPrice'] = $Currency->format(
round($unitPrice, $Currency->getPrecision())
);
if (empty($article['discount'])) { if (empty($article['discount'])) {
continue; continue;
...@@ -102,30 +105,30 @@ function ($articles, $priceFactors, $user, $currency, $nettoInput) { ...@@ -102,30 +105,30 @@ function ($articles, $priceFactors, $user, $currency, $nettoInput) {
$Discount = ArticleDiscount::unserialize($article['discount']); $Discount = ArticleDiscount::unserialize($article['discount']);
if ($Discount->getCalculation() !== QUI\ERP\Accounting\Calc::CALCULATION_COMPLEMENT) { if ($Discount->getCalculation() !== QUI\ERP\Accounting\Calc::CALCULATION_COMPLEMENT) {
$bruttoUnit = $result['articles'][$k]['unitPrice'] * $vat; $bruttoUnit = $result['articles'][$k]['unitPrice'] * $vat;
$discount = $bruttoUnit * ($Discount->getValue() / 100); $discount = $bruttoUnit * ($Discount->getValue() / 100);
$uniqueDiscount = round($discount, $Currency->getPrecision()); $uniqueDiscount = round($discount, $Currency->getPrecision());
$brutto['articles'][$k]['discount'] = $Discount->getValue() . '%'; $brutto['articles'][$k]['discount'] = $Discount->getValue() . '%';
$brutto['articles'][$k]['display_discount'] = $Discount->getValue() . '%'; $brutto['articles'][$k]['display_discount'] = $Discount->getValue() . '%';
} else { } else {
$discount = $Discount->getValue() * $vat; $discount = $Discount->getValue() * $vat;
$discount = round($discount, $Currency->getPrecision()); $discount = round($discount, $Currency->getPrecision());
$uniqueDiscount = $discount / $quantity; $uniqueDiscount = $discount / $quantity;
$brutto['articles'][$k]['discount'] = $discount; $brutto['articles'][$k]['discount'] = $discount;
$brutto['articles'][$k]['display_discount'] = $Currency->format($discount); $brutto['articles'][$k]['display_discount'] = $Currency->format($discount);
} }
$unitPrice = $brutto['articles'][$k]['unitPrice']; $unitPrice = $brutto['articles'][$k]['unitPrice'];
$unitPrice = $unitPrice + $uniqueDiscount; $unitPrice = $unitPrice + $uniqueDiscount;
$brutto['articles'][$k]['display_sum'] = $Currency->format($bruttoSum); $brutto['articles'][$k]['display_sum'] = $Currency->format($bruttoSum);
$brutto['articles'][$k]['sum'] = round($bruttoSum, $Currency->getPrecision()); $brutto['articles'][$k]['sum'] = round($bruttoSum, $Currency->getPrecision());
$brutto['articles'][$k]['display_unitPrice'] = $Currency->format($unitPrice); $brutto['articles'][$k]['display_unitPrice'] = $Currency->format($unitPrice);
$brutto['articles'][$k]['unitPrice'] = round($unitPrice, $Currency->getPrecision()); $brutto['articles'][$k]['unitPrice'] = round($unitPrice, $Currency->getPrecision());
$brutto['articles'][$k]['display_quantity_sum'] = $Currency->format($unitPrice * $quantity); $brutto['articles'][$k]['display_quantity_sum'] = $Currency->format($unitPrice * $quantity);
$brutto['articles'][$k]['quantity_sum'] = $unitPrice * $quantity; $brutto['articles'][$k]['quantity_sum'] = $unitPrice * $quantity;
} }
$result['brutto'] = $brutto; $result['brutto'] = $brutto;
......
Dieser Diff ist reduziert.
...@@ -241,6 +241,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ ...@@ -241,6 +241,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
} }
this.$articles = []; this.$articles = [];
let selectedPosition = null;
if (this.$Container) {
if (this.$selectedArticle) {
selectedPosition = this.$selectedArticle.getAttribute('position');
}
this.$Container.set('html', '');
}
const controls = data.articles.map(function(ArticleInstance) { const controls = data.articles.map(function(ArticleInstance) {
if (typeof ArticleInstance.control !== 'undefined' && ArticleInstance.control !== '') { if (typeof ArticleInstance.control !== 'undefined' && ArticleInstance.control !== '') {
...@@ -269,6 +278,10 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ ...@@ -269,6 +278,10 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
} }
} }
if (selectedPosition && typeof self.$articles[selectedPosition - 1] !== 'undefined') {
self.$articles[selectedPosition - 1].select();
}
self.fireEvent('calc', [ self.fireEvent('calc', [
self, self,
self.$calculations self.$calculations
...@@ -583,7 +596,6 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [ ...@@ -583,7 +596,6 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
this.$priceFactors.splice(prio, 0, priceFactor); this.$priceFactors.splice(prio, 0, priceFactor);
}, },
/** /**
* edit a price factor * edit a price factor
* *
......
...@@ -533,7 +533,7 @@ public function calcArticlePrice(Article $Article, $callback = false) ...@@ -533,7 +533,7 @@ public function calcArticlePrice(Article $Article, $callback = false)
$Currency = $this->getCurrency(); $Currency = $this->getCurrency();
} }
$nettoPrice = $Article->getUnitPrice()->value(); $nettoPrice = $Article->getUnitPriceUnRounded()->value();
$vat = $Article->getVat(); $vat = $Article->getVat();
$basisNettoPrice = $nettoPrice; $basisNettoPrice = $nettoPrice;
$nettoSubSum = $this->round($nettoPrice * $Article->getQuantity()); $nettoSubSum = $this->round($nettoPrice * $Article->getQuantity());
...@@ -564,7 +564,9 @@ public function calcArticlePrice(Article $Article, $callback = false) ...@@ -564,7 +564,9 @@ public function calcArticlePrice(Article $Article, $callback = false)
} }
$vatSum = $nettoPrice * ($vat / 100); $vatSum = $nettoPrice * ($vat / 100);
$bruttoPrice = round($nettoPrice + $vatSum, $Currency->getPrecision()); $precision = $Currency->getPrecision();
$priceSum = $nettoPrice + $vatSum;
$bruttoPrice = round($priceSum, $precision);
if (!$isNetto) { if (!$isNetto) {
// korrektur rechnung / 1 cent problem // korrektur rechnung / 1 cent problem
......
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