Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- using Impeltech.Bank.Models;
- public double? GetAveradgeDiscont(ISubjectMSP subject)
- {
- return subject.PurchasesOfParticipant
- .Where(c => c.Participants.Any(f => f.IsWinner && f.INN == subject.INN))//победители по инн
- .Select(c => c.StartSum > 0 ? (c.StartSum - c.ContractSum) / c.StartSum : 0) // доля снижения
- .Average(); // среднее
- }
- public double? GetShareContr(ISubjectMSP subject)
- {
- //год назад
- var lastYear = DateTime.Today.AddYears(-1);
- //контракты за последний год
- var lastYearContracts = subject.StateContracts.Where(c => c.Date >= lastYear).ToList();
- //уникальные заказчики более года назад
- var moreLastYearCustomers = subject.StateContracts.Where(c => c.Date < lastYear).Select(c => c.CustomerINN + c.CustomerOGRN).Distinct();
- // контракты за последний год с заказчиками более года назад
- var longContracts = lastYearContracts.Where(c => moreLastYearCustomers.Contains(c.CustomerINN + c.CustomerOGRN));
- //сумма за последний год всего
- var lastYearSum = lastYearContracts.Sum(c => c.Sum);
- // сумма по долгосрочному сотрудничеству
- var longContractsSum = longContracts.Sum(c => c.Sum);
- //если всего за последний год больше 0
- if (lastYearSum > 0)
- {
- // доля долгосрочных контрактов
- return longContractsSum / lastYearSum;
- }
- return 0;
- }
- public double? GetMaximumShareBenContr(ISubjectMSP subject)
- {
- //год назад
- var lastYear = DateTime.Today.AddYears(-1);
- //контракты за последний год
- var lastYearContracts = subject.StateContracts.Where(c => c.Date >= lastYear).ToList();
- return GetMaximumShareBen(lastYearContracts);
- }
- public double? MaximumShareOneBen(ISubjectMSP subject)
- {
- return GetMaximumShareBen(subject.StateContracts.ToList());
- }
- private static double? GetMaximumShareBen(System.Collections.Generic.List<IStateContract> сontracts)
- {
- var lastYearCustomerAndSums = сontracts
- .Select(c => new { contract = c, customer = c.CustomerINN + c.CustomerOGRN })
- .GroupBy(c => c.customer)
- .Select(c => new { customer = c.Key, sum = c.Sum(l => l.contract.Sum) }).ToList();
- var lastYearSum = сontracts.Sum(c => c.Sum);
- var maxCustomerSum = lastYearCustomerAndSums.Max(c => c.sum);
- if (lastYearSum > 0)
- {
- // доля долгосрочных контрактов
- return maxCustomerSum / lastYearSum;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement