private StatisticItem CalculateStatisticItemData(PartnerNode partnerNode) { var statisticItem = CalculateDescendantData(partnerNode); foreach (var childrenPartnerNodeID in partnerNode.Children) { var childPartnerNode = PartnerNodeList[childrenPartnerNodeID]; if (childPartnerNode.FeePercent < partnerNode.FeePercent) { var childData = CalculateDescendantData(childPartnerNode); statisticItem.TotalComission += childData.TotalPurchase * (partnerNode.FeePercent - childPartnerNode.FeePercent) / 100; } } return(statisticItem); }
private StatisticItem CalculateDescendantData(PartnerNode partnerNode) { var statisticItem = new StatisticItem { PartnerName = partnerNode.PartnerName }; var financialItemsOfPartner = _financialItemsRepository.GetFinancialItems(partnerNode.PartnerID); var partnerPurchase = financialItemsOfPartner.Sum(x => x.Amount); decimal descendantPurchase = 0; foreach (var descendantPartnerNodeID in partnerNode.Descendants) { var descendantPartnerFeePercent = PartnerNodeList[descendantPartnerNodeID].FeePercent; var financialItemsOfDescendant = _financialItemsRepository.GetFinancialItems(descendantPartnerNodeID); descendantPurchase = financialItemsOfDescendant.Sum(x => x.Amount); statisticItem.TeamPurchase += descendantPurchase; } statisticItem.TotalPurchase = statisticItem.TeamPurchase + partnerPurchase; statisticItem.TotalComission = statisticItem.TotalPurchase * partnerNode.FeePercent / 100; return(statisticItem); }
private void CollectPartnerNodeDescendants(IList <decimal> ancestorPartnerIDs, PartnerNode partnerNode) { if (partnerNode.Children.Count > 0) { var newAncestorPartnerIDs = ancestorPartnerIDs.ToList(); newAncestorPartnerIDs.Add(partnerNode.PartnerID); foreach (var ancestorPartnerID in newAncestorPartnerIDs) { foreach (var childPartnerID in partnerNode.Children) { if (!PartnerNodeList[ancestorPartnerID].Descendants.Contains(childPartnerID)) { PartnerNodeList[ancestorPartnerID].Descendants.Add(childPartnerID); } CollectPartnerNodeDescendants(newAncestorPartnerIDs, PartnerNodeList[childPartnerID]); } } } }