Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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();
            }
        }