/// <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); } } } }
/// <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)); }