/// <summary>
            /// Updates the tax overrides for cart.
            /// </summary>
            /// <param name="context">The context.</param>
            /// <param name="transaction">Transaction to calculate taxes for.</param>
            internal static void CalculateTaxOverrides(RequestContext context, SalesTransaction transaction)
            {
                // apply cart level
                if (!string.IsNullOrWhiteSpace(transaction.TaxOverrideCode))
                {
                    context.Execute <NullResponse>(new CheckAccessServiceRequest(RetailOperation.OverrideTaxTransactionList));

                    GetTaxOverrideDetailsDataRequest dataServiceRequest = new GetTaxOverrideDetailsDataRequest(transaction.TaxOverrideCode);
                    dataServiceRequest.QueryResultSettings = QueryResultSettings.AllRecords;
                    SingleEntityDataServiceResponse <TaxOverride> response = context.Runtime.Execute <SingleEntityDataServiceResponse <TaxOverride> >(dataServiceRequest, context);

                    ApplyTransactionLevelOverride(transaction, response.Entity);
                }

                // apply linelevel
                // note: it is not a meaningful business case to have both cart and line level overrides, but technically it is still possible
                // on the off chance, this happens, line's will override cart-inherited overrides
                if (transaction.SalesLines != null &&
                    transaction.SalesLines.Any())
                {
                    foreach (var line in transaction.SalesLines)
                    {
                        if (!string.IsNullOrWhiteSpace(line.TaxOverrideCode) &&
                            string.CompareOrdinal(line.TaxOverrideCode, transaction.TaxOverrideCode) != 0)
                        {
                            context.Execute <NullResponse>(new CheckAccessServiceRequest(RetailOperation.OverrideTaxLineList));

                            GetTaxOverrideDetailsDataRequest dataServiceRequest = new GetTaxOverrideDetailsDataRequest(line.TaxOverrideCode);
                            dataServiceRequest.QueryResultSettings = QueryResultSettings.AllRecords;
                            SingleEntityDataServiceResponse <TaxOverride> response = context.Runtime.Execute <SingleEntityDataServiceResponse <TaxOverride> >(dataServiceRequest, context);

                            ApplyLineLevelOverride(transaction, response.Entity, line.LineId);
                        }
                    }
                }
            }
예제 #2
0
            /// <summary>
            /// The data service method to execute the data manager to get tax override details.
            /// </summary>
            /// <param name="request">The data service request.</param>
            /// <returns>The data service response.</returns>
            private SingleEntityDataServiceResponse <TaxOverride> GetTaxOverrideDetails(GetTaxOverrideDetailsDataRequest request)
            {
                var taxOverride = new TaxDataManager(request.RequestContext).GetTaxOverrideDetails(request.TaxOverrideCode, request.QueryResultSettings.ColumnSet);

                return(new SingleEntityDataServiceResponse <TaxOverride>(taxOverride));
            }