public Payout CalculateCommissionsPayout(DateTime startDate, DateTime endDate, Distributor distributor) { var volume = distributor.CalculateVolume(startDate, endDate); var highestTier = _qualificationsService.GetHighestQualifiedTier(Tiers, distributor, volume); if (highestTier == null) { return(null); } distributor.Status.CommissionTier = highestTier; var commissions = volume.PersonalCommissionableVolume * highestTier.CommissionPercentage; var totalQualifiedIncentive = _incentivesService .GetQualifiedIncentiveTotal( distributor.Status.CommissionTier.Incentives, distributor, volume); var totalImplicitIncentive = _incentivesService .GetImplicitIncentiveTotal( distributor.Status.CommissionTier.Incentives, distributor, volume); return(new Payout { CommissionablePayoutAmout = commissions, IncentivePayoutAmount = totalQualifiedIncentive + totalImplicitIncentive }); }
public virtual bool IsQualified(Distributor distributor) { var day30total = distributor.CalculateVolume(distributor.ActivationDate, distributor.ActivationDate.AddDays(30)) .PersonalRetailVolume; var day60total = distributor.CalculateVolume(distributor.ActivationDate, distributor.ActivationDate.AddDays(60)) .PersonalRetailVolume; //TODO: Configurable Properties return(!distributor.Status.IsDeactivated && distributor.ActivationDate >= DateTime.UtcNow.AddDays(-60) && day30total >= 450 && day60total >= 900); //distributor.CalculateVolume(distributor.ActivationDate, distributor.ActivationDate.AddDays(30)) // .PersonalRetailVolume >= 450 //&& //distributor.CalculateVolume(distributor.ActivationDate, distributor.ActivationDate.AddDays(60)) // .PersonalRetailVolume >= 900; }