private ClientContract GetById(short id, User user, Permission permission) { var type = user.GetPermissionDistributionType(permission); // если права нет - то сразу возвращаем null if (type == PermissionDistributionType.None) { return(null); } else { var contract = clientContractRepository.GetById(id); if (type == PermissionDistributionType.All) { return(contract); } else { // один договор может быть связан с несколькими сделками var dealsByContract = clientContractRepository.GetDeals(contract).Select(x => x.Id); var deals = user.Teams.SelectMany(x => x.Deals).Where(x => dealsByContract.Contains(x.Id)); var contains = (deals.Count() > 0); if ((type == PermissionDistributionType.Personal && deals.Any(x => x.Curator == user) && contains) || (type == PermissionDistributionType.Teams && contains)) { return(contract); } } return(null); } }
/// <summary> /// Расчет суммы текущих взаиморасчетов за наличный расчет по договору /// </summary> /// <param name="clientContract">Договор с клиентом.</param> public decimal CalculateClientContractCashPaymentSum(ClientContract clientContract) { decimal totalCashPaymentSum = 0; var deals = clientContractRepository.GetDeals(clientContract); foreach (var deal in deals) { totalCashPaymentSum += deal.CashDealPaymentSum; } return(totalCashPaymentSum); }