public Order GetBasketOrder(int clientLegalPersonId, int priceId) { // Ищем бизнес юнит заказа корзины var businessUnitId = _basketBusinessUnitIdProvider.GetByValue( new Tuple <int, int>(clientLegalPersonId, priceId)); // Ищем ПЗ заказ клиента с примечанием "Корзина_ЛК" var order = _context.Orders .Include(o => o.OrderPositions).ThenInclude(op => op.GraphicPositions).ThenInclude(gp => gp.Graphic) .Where( o => o.ClientLegalPersonId == clientLegalPersonId && o.ActivityTypeId == 20 && o.BusinessUnitId == businessUnitId && o.Description == _basketOrderDescription) .FirstOrDefault(); return(order); }
public string GetByValue(string clientName) { var transliterateClientName = clientName.Front(); var clientNameWithoutBadSymbols = _stringWithoutBadSymbolsProvider.GetByValue(transliterateClientName); var clientNameForVerstkaFile = _maxLength == 0 ? clientNameWithoutBadSymbols : clientNameWithoutBadSymbols.Substring(0, _maxLength); return(clientNameForVerstkaFile); }
public string Build(OrderPosition orderPosition) { var clientName = ClientNameProvider.GetByValue(orderPosition.Order.ClientCompany.Name); var pricePositionName = PricePositionNameProvider.GetByValue(orderPosition.PricePosition.Name); var rubricNumber = RubricNumberProvider.GetByValue(orderPosition.RubricPositions.First().Rubric.Number); var positionImIdString = VerstkaIdProvider.GetByValue(orderPosition.Id); var fileName = string.Format("{0}{1}{2}-{3}", //<клиент><формат><рубрика>-<id> clientName, pricePositionName, rubricNumber, positionImIdString); return(fileName); }
public int GetByValue(Tuple <int, int> value) { var clientLegalPersonId = value.Item1; var priceId = value.Item2; // Ищем бизнес юнит заказ в настройках счёта юр. лица клиента var businessUnitId = _interactionBusinessUnitIdProvider.GetByValue(clientLegalPersonId); // Если бизнес юнит не задан - используем бизнес юнит цены if (businessUnitId == 0) { businessUnitId = _businessUnitByPriceIdProvider.GetByValue(priceId); } return(businessUnitId); }
public void ApplyPaymentInTimeDiscount(int accountId) { var account = _context.Accounts .Include(ac => ac.AccountPositions) .Include(ac => ac.AccountOrders).ThenInclude(ao => ao.Order) .Single(ac => ac.Id == accountId); var discount = _paymentInTimeDiscountProvider.GetByValue(account.BusinessUnitId); if (discount == 0) { return; } var description = string.Format("Доп. скидка {0}%.", discount); using (var сontextTransaction = _context.Database.BeginTransaction()) { var dbTran = сontextTransaction.GetDbTransaction(); // Удаляем старые позиции счёта foreach (var accountPosition in account.AccountPositions) { _clientAccountProcessor.DeleteAccountPosition(accountPosition, dbTran); } foreach (var accountOrder in account.AccountOrders) { var order = accountOrder.Order; var orderPositions = _context.OrderPositions .Include(op => op.Supplier).ThenInclude(op => op.Company) .Include(op => op.Supplier).ThenInclude(op => op.City) .Include(op => op.PricePosition).ThenInclude(pp => pp.PricePositionEx) .Include(op => op.PricePosition).ThenInclude(pp => pp.PricePositionType) .Include(op => op.PricePosition).ThenInclude(pp => pp.Unit) .Where(op => op.OrderId == order.Id) .ToList(); foreach (var orderPosition in orderPositions) { orderPosition.Discount += discount; // Сохраняем позицию заказа _orderPositionProcessor.UpdateOrderPosition(orderPosition, order.Id, dbTran); // Если позиция заказа - не часть пакета if (orderPosition.ParentOrderPositionId == null) { // находим её пакетные позиции var packagePositions = orderPositions .Where(op => op.ParentOrderPositionId == orderPosition.Id) .ToList(); // Создаём позицию счёта var accountPosition = _clientAccountProcessor .CreateAccountPosition(account.Id, orderPosition, packagePositions, dbTran); } } // Пересчитываем сумму заказа order.Sum = (float)Math.Round( orderPositions .Sum( op => op.Price.Value * op.GraphicPositions .Where( gp => gp.ParenGraphicPositiontId == gp.Id && op.ParentOrderPositionId == null) .Sum(gp => gp.Count) * (1 - op.Discount / 100)), 2); order.AccountDescription = description; _orderProcessor.UpdateOrder(order, dbTran); } // Пересчитываем сумму счёта account.Sum = (float)Math.Round(account.AccountOrders.Sum(o => o.Order.Sum), 2); account.Description = description; _clientAccountProcessor.UpdateClientAccout(account, dbTran); _context.SaveChanges(); dbTran.Commit(); } }