Beispiel #1
0
            private static void UpdateTotalAmounts(SalesTransaction salesTransaction, SalesLine salesLine)
            {
                // Total amounts
                salesTransaction.NetAmountWithNoTax     += salesLine.NetAmountWithNoTax();
                salesTransaction.NetAmountWithTax       += salesLine.NetAmountWithTax();
                salesTransaction.GrossAmount            += salesLine.GrossAmount;
                salesTransaction.LineDiscount           += salesLine.LineDiscount;
                salesTransaction.PeriodicDiscountAmount += salesLine.PeriodicDiscount;
                salesTransaction.TotalDiscount          += salesLine.TotalDiscount;
                salesTransaction.TaxAmount          += salesLine.TaxAmount;
                salesTransaction.TaxAmountExclusive += salesLine.TaxAmountExclusive;
                salesTransaction.TaxAmountInclusive += salesLine.TaxAmountInclusive;

                AddToTaxItems(salesTransaction, salesLine);
            }
            private static void CalculateLine(DateTimeOffset transactionBeginDateTime, LineDiscountCalculationType lineDiscountCalculationType, SalesLine salesLine, RoundingRule salesRoundingRule, bool compareDiscounts)
            {
                if (salesLine == null)
                {
                    throw new ArgumentNullException("salesLine");
                }

                if (salesRoundingRule == null)
                {
                    throw new ArgumentNullException("salesRoundingRule");
                }

                decimal discountAmount = decimal.Zero;

                SalesLineTotaller.CalculateTax(salesLine);

                if ((salesLine.Blocked == false) && (salesLine.DateToActivateItem <= transactionBeginDateTime))
                {
                    salesLine.GrossAmount = salesRoundingRule(salesLine.Price * salesLine.Quantity);

                    if (!salesLine.IsPriceLocked || salesLine.QuantityOrdered != salesLine.Quantity)
                    {
                        salesLine.LineDiscount               = 0;
                        salesLine.LinePercentageDiscount     = 0;
                        salesLine.PeriodicDiscount           = 0;
                        salesLine.PeriodicPercentageDiscount = 0;
                        salesLine.TotalDiscount              = decimal.Zero;
                        salesLine.TotalPercentageDiscount    = decimal.Zero;
                        salesLine.LoyaltyDiscountAmount      = decimal.Zero;
                        salesLine.LoyaltyPercentageDiscount  = decimal.Zero;

                        if (salesLine.IsVoided || salesLine.IsPriceOverridden)
                        {
                            salesLine.DiscountLines.Clear();
                        }

                        if (compareDiscounts)
                        {
                            ComparingDiscounts(transactionBeginDateTime, lineDiscountCalculationType, salesLine, salesRoundingRule);
                        }

                        AllocateDiscountAmountToDiscountLines(salesLine, lineDiscountCalculationType, salesRoundingRule);
                    }
                    else
                    {
                        FixDiscountAmountsOnSalesLine(salesLine, salesRoundingRule);
                    }

                    discountAmount = salesLine.PeriodicDiscount + salesLine.LineDiscount + salesLine.TotalDiscount + salesLine.LoyaltyDiscountAmount;

                    salesLine.NetAmountWithAllInclusiveTax = salesLine.GrossAmount - discountAmount;

                    // Removing exempt inclusive taxes.
                    // Update - Bug 938614, - not deducting anymore. If PM's later decide to deduct this inclusive tax then uncomment line below.
                    salesLine.NetAmount = salesLine.NetAmountWithAllInclusiveTax; // -salesLine.TaxAmountExemptInclusive;

                    if (salesLine.Quantity != 0)
                    {
                        salesLine.NetAmountPerUnit = salesLine.NetAmountWithNoTax() / salesLine.Quantity;
                    }

                    salesLine.UnitQuantity = salesLine.UnitOfMeasureConversion.Convert(salesLine.Quantity);

                    salesLine.DiscountAmount = discountAmount;

                    salesLine.TotalAmount         = salesLine.NetAmountWithTax();
                    salesLine.NetAmountWithoutTax = salesLine.NetAmount - salesLine.TaxAmountInclusive;
                }
            }