public void GetCurrencyAndCurrencyRate(ProductionOrderPayment productionOrderPayment, out Currency currency, out CurrencyRate currencyRate) { switch (productionOrderPayment.Type) { case ProductionOrderPaymentType.ProductionOrderProductionPayment: GetCurrencyAndCurrencyRate(productionOrderPayment.ProductionOrder, out currency, out currencyRate); currencyRate = productionOrderPayment.CurrencyRate; return; case ProductionOrderPaymentType.ProductionOrderTransportSheetPayment: GetCurrencyAndCurrencyRate(productionOrderPayment.As <ProductionOrderTransportSheetPayment>().TransportSheet, out currency, out currencyRate); currencyRate = productionOrderPayment.CurrencyRate; return; case ProductionOrderPaymentType.ProductionOrderExtraExpensesSheetPayment: GetCurrencyAndCurrencyRate(productionOrderPayment.As <ProductionOrderExtraExpensesSheetPayment>().ExtraExpensesSheet, out currency, out currencyRate); currencyRate = productionOrderPayment.CurrencyRate; return; case ProductionOrderPaymentType.ProductionOrderCustomsDeclarationPayment: currency = GetCurrentBaseCurrency(); currencyRate = null; return; default: throw new Exception("Неизвестное назначение оплаты."); } ; }
private void CheckPermissionToPerformOperation(ProductionOrderPayment productionOrderPayment, User user, Permission permission) { if (!IsPermissionToPerformOperation(productionOrderPayment, user, permission)) { throw new Exception(String.Format("Недостаточно прав для выполнения операции «{0}».", permission.GetDisplayName())); } }
private bool IsPermissionToPerformOperation(ProductionOrderPayment productionOrderPayment, User user, Permission permission) { bool result = false; switch (user.GetPermissionDistributionType(permission)) { case PermissionDistributionType.None: result = false; break; case PermissionDistributionType.Personal: result = productionOrderPayment.ProductionOrder.Curator == user && user.Teams.SelectMany(x => x.ProductionOrders).Contains(productionOrderPayment.ProductionOrder); break; case PermissionDistributionType.Teams: result = user.Teams.SelectMany(x => x.ProductionOrders).Contains(productionOrderPayment.ProductionOrder); break; case PermissionDistributionType.All: result = true; break; } return(result); }
public void CheckPossibilityToChangePaymentCurrencyRate(ProductionOrderPayment productionOrderPayment, User user) { // права CheckPermissionToPerformOperation(productionOrderPayment, user, Permission.ProductionOrderPayment_Create_Edit); // сущность productionOrderPayment.CheckPossibilityToChangeCurrencyRate(); productionOrderPayment.ProductionOrder.CheckPossibilityToEditPayment(); }
public bool IsPossibilityToChangeCurrencyRate(ProductionOrderPayment productionOrderPayment, User user) { try { CheckPossibilityToChangePaymentCurrencyRate(productionOrderPayment, user); return(true); } catch { return(false); } }
/// <summary> /// Установка нового курса валюты у оплаты по заказу /// </summary> /// <param name="productionOrderPayment">Оплата</param> /// <param name="newCurrencyRate">Новый курс валюты (null - текущий)</param> /// <param name="user">Пользователь</param> public void ChangeProductionOrderPaymentCurrencyRate(ProductionOrderPayment productionOrderPayment, CurrencyRate newCurrencyRate, User user) { CheckPossibilityToChangePaymentCurrencyRate(productionOrderPayment, user); Currency currency; CurrencyRate oldCurrencyRate; currencyService.GetCurrencyAndCurrencyRate(productionOrderPayment, out currency, out oldCurrencyRate); if (newCurrencyRate == null) { newCurrencyRate = currencyService.GetCurrentCurrencyRate(currency); ValidationUtils.NotNull(newCurrencyRate, "По выбранной валюте не существует текущего курса."); } if (newCurrencyRate != oldCurrencyRate) { productionOrderPayment.CurrencyRate = newCurrencyRate; } }