public void CalculateTaxBuckets(PXResultset <TaxHistory> taxLines) { if (aggregatesTable == null || linesWithRelatedAggregatesTable == null) { return; } netHistoryByBranchID.Clear(); roundedNetAmtByBranchID.Clear(); foreach (PXResult <TaxHistory, TaxReportLine> rec in taxLines) { TaxReportLine line = rec; TaxHistory record = rec; if (line.LineType != taxType || record.BranchID == null) { continue; } int branchID = record.BranchID.Value; int lineNbr = record.LineNbr.Value; if (aggregatesTable.ContainsKey(lineNbr)) { if (!netHistoryByBranchID.ContainsKey(branchID)) { netHistoryByBranchID[branchID] = new TaxLinesWithHistoryPerBranch(); } netHistoryByBranchID[branchID][lineNbr] = rec; } else { decimal?roundedAmount = roundingManager.Round(record.ReportFiledAmt); ProcessTaxRecord(record, line, roundedAmount); } } foreach (KeyValuePair <int, TaxLinesWithRoundAmountsPerBranch> branchIdWithLinesAndNetAmountsTable in roundedNetAmtByBranchID) { TaxLinesWithHistoryPerBranch branchTaxLinesAndHistory = netHistoryByBranchID[branchIdWithLinesAndNetAmountsTable.Key]; TaxLinesWithRoundAmountsPerBranch branchTaxLinesWithRoundedAmounts = branchIdWithLinesAndNetAmountsTable.Value; var aggregateLinesInBranch = aggregatesTable.Keys.Where(aggrLineNumber => branchTaxLinesAndHistory.ContainsTaxLine(aggrLineNumber)); foreach (int aggregateLineNumber in aggregateLinesInBranch) { TaxHistory aggrLineRecord = branchTaxLinesAndHistory[aggregateLineNumber]; TaxReportLine aggrLine = branchTaxLinesAndHistory[aggregateLineNumber]; decimal? roundedAmount = branchTaxLinesWithRoundedAmounts[aggregateLineNumber]; ProcessTaxRecord(aggrLineRecord, aggrLine, roundedAmount); } } }
private void AddTaxAmountToAggregateLine(int branchID, int aggrLineNumber, decimal amount) { if (!roundedNetAmtByBranchID.ContainsKey(branchID)) { roundedNetAmtByBranchID[branchID] = new TaxLinesWithRoundAmountsPerBranch(); } decimal oldAmount = roundedNetAmtByBranchID[branchID].TryGetTaxAmount(aggrLineNumber) ?? 0m; roundedNetAmtByBranchID[branchID][aggrLineNumber] = oldAmount + amount; }