Exemple #1
0
        public Sale Create(ShopContext db, SaleCreateVM obj, int userId)
        {
            var shop = _shopService.ShopByUserId(db, userId);

            if (shop == null)
            {
                throw new Exception("Текущий пользователь не привязан к магазину");
            }

            if (obj.CashlessSum > 0 && obj.MoneyWorkerId == null)
            {
                throw new Exception("Вы не выбрали счет для безналичного перевода, проведите продажу заново");
            }

            var sum = obj.CashSum + obj.CashlessSum;

            var sale = db.Sales.Add(new Sale()
            {
                Date = DateTime.Now.AddHours(3),
                AdditionalComment = obj.AdditionalComment,
                Comment           = obj.Comment,
                ShopId            = shop.Id,
                PartnerId         = obj.PartnerId,
                Sum         = sum,
                CashSum     = obj.CashSum,
                CashlessSum = obj.CashlessSum,
                Discount    = obj.Discount,
                Payment     = obj.Payment,
                SaleType    = obj.Payment != true ? SaleType.DefferedSale : SaleType.Sale,
                ForRussian  = obj.ForRussian
            }).Entity;

            db.SaveChanges();

            if (obj.Payment)
            {
                _moneyOperationService.SalePayment(db, obj.CashSum, obj.CashlessSum,
                                                   sale, shop.Id, obj.MoneyWorkerId);
            }
            else
            {
                if (obj.CashlessSum > 0)
                {
                    db.SaleInformations.Add(new SaleInformation()
                    {
                        MoneyWorkerForIncomeId = obj.MoneyWorkerId ?? throw new Exception(""),
                        SaleId   = sale.Id,
                        SaleType = SaleType.DefferedSale
                    });
        public IActionResult RealizationPost([FromBody] RealizationVM json)
        {
            try
            {
                var managerId = _postgresContext.Managers.FirstOrDefault(x => x.Name == json.Manager)?.Id ??
                                throw new Exception("Не указан менеджен");

                SaleCreateVM saleCreate = new SaleCreateVM()
                {
                    UserId            = json.UserId,
                    MoneyWorkerId     = json.MoneyWorkerId,
                    Discount          = json.Discount,
                    AdditionalComment = json.AdditionalComment,
                    Comment           = json.Comment,
                    PaymentType       = json.Cashless
                        ? PaymentType.Cashless
                        : PaymentType.Cash,
                    CashSum     = json.CashSum,
                    CashlessSum = json.CashlessSum,
                    Sum         = json.Sum,
                    Products    = json.Products,
                    PartnerId   = json.Buyer == "Обычный покупатель"
                        ? null
                        : _db.Partners.First(p => p.Title == json.Buyer)?.Id,
                    Payment    = json.Payment,
                    ForRussian = json.ForRussian
                };

                var createdSale = _saleService.Create(_db, saleCreate, json.UserId);


                _postgresContext.SaleManagersOld.Add(
                    new SaleManagerOld(managerId, createdSale.Id, DateTime.Now.AddHours(3)));
                _postgresContext.SaveChanges();


                return(RedirectToAction("CheckPrint",
                                        new { saleId = createdSale.Id, operationSum = json.CashSum + json.CashlessSum }));
            }
            catch (Exception e)
            {
                return(BadRequest(new { message = e.Message }));
            }
        }
        public IActionResult DefferedSaleFromStock([FromBody] DefferedSaleFromStockVM sale)
        {
            try
            {
                var supplierId = _db.Suppliers.FirstOrDefault(x => x.Title == sale.Supplier)?.Id
                                 ?? throw new Exception("Не указан поставщик");

                var managerId = _postgresContext.Managers.FirstOrDefault(x => x.Name == sale.Manager)?.Id
                                ?? throw new Exception("Не указан менеджер");

                var user = _userService.All().FirstOrDefault(x => x.Id == sale.UserId);

                SaleCreateVM saleCreate = new SaleCreateVM()
                {
                    UserId      = sale.UserId,
                    Discount    = sale.Discount,
                    CashSum     = sale.CashSum,
                    CashlessSum = sale.CashlessSum,
                    Comment     = sale.Comment,
                    Sum         = sale.Sum,
                    Products    = sale.Products,
                    PartnerId   = sale.Buyer == "Обычный покупатель"
                        ? null
                        : _partnerService.All().First(p => p.Title == sale.Buyer)?.Id,
                    SaleType   = SaleType.DefferedSaleFromStock,
                    ForRussian = sale.ForRussian
                };

                var createdSale = _saleService.CreatePostPayment(_db, saleCreate, sale.UserId);

                _db.SaleInformations.Add(new SaleInformation()
                {
                    Sale     = createdSale,
                    SaleType = SaleType.DefferedSaleFromStock
                });

                if (sale.CashSum > 0)
                {
                    _infoMoneyService.Create(new InfoMoney()
                    {
                        MoneyWorkerId      = _shopService.All().FirstOrDefault(x => x.Id == user.ShopId).Id,
                        Sum                = sale.CashSum,
                        Sale               = createdSale,
                        PaymentType        = PaymentType.Cash,
                        MoneyOperationType = MoneyOperationType.Sale
                    });
                }

                if (sale.CashlessSum > 0)
                {
                    _infoMoneyService.Create(new InfoMoney()
                    {
                        MoneyWorkerId      = sale.MoneyWorkerId,
                        Sum                = sale.CashlessSum,
                        Sale               = createdSale,
                        PaymentType        = PaymentType.Cashless,
                        MoneyOperationType = MoneyOperationType.Sale
                    });
                }

                _db.SaveChanges();


                var saleFromStockOld = new SaleFromStockOld()
                {
                    SaleId     = createdSale.Id,
                    SupplierId = supplierId,
                    Products   = sale.Products.Select(x =>
                                                      new SoldProductFromStockOld()
                    {
                        ProcurementCost = x.ProcurementCost,
                        ProductId       = x.Id
                    }).ToList()
                };


                _postgresContext.SalesFromStockOld.Add(saleFromStockOld);

                _postgresContext.SaleManagersOld.Add(
                    new SaleManagerOld(managerId, createdSale.Id, DateTime.Now.AddHours(3)));

                _postgresContext.SaveChanges();


                return(RedirectToAction("CheckPrint",
                                        new { saleId = createdSale.Id, operationSum = sale.CashSum + sale.CashlessSum }));
            }
            catch (Exception e)
            {
                return(BadRequest(new { message = e.Message }));
            }
        }
        public IActionResult SaleFromStock([FromBody] SaleFromStockVM json)
        {
            try
            {
                var supplierId = _db.Suppliers.FirstOrDefault(x => x.Title == json.Supplier)?.Id
                                 ?? throw new Exception("Не указан поставщик");

                var managerId = _postgresContext.Managers.FirstOrDefault(x => x.Name == json.Manager)?.Id
                                ?? throw new Exception("Не указан менеджер");

                SaleCreateVM saleCreate = new SaleCreateVM()
                {
                    UserId            = json.UserId,
                    Discount          = json.Discount,
                    AdditionalComment = json.AdditionalComment,
                    Comment           = json.Comment,
                    Sum         = json.Sum,
                    CashSum     = json.Cash,
                    CashlessSum = json.Cashless,
                    Products    = json.Products,
                    PartnerId   = json.Buyer == "Обычный покупатель"
                        ? null
                        : _partnerService.All().First(p => p.Title == json.Buyer)?.Id,
                    SaleType   = SaleType.SaleFromStock,
                    ForRussian = json.ForRussian
                };

                var createdSale = _saleService.CreatePostPayment(_db, saleCreate, json.UserId);
                var shop        = _shopService.ShopByUserId(_db, json.UserId);

                _db.SaleInformations.Add(new SaleInformation()
                {
                    Sale = createdSale,
                    MoneyWorkerForIncomeId         = shop.Id,
                    MoneyWorkerForCashlessIncomeId = json.MoneyWorkerIdForCashlessIncome == 0
                        ? null
                        : json.MoneyWorkerIdForCashlessIncome,
                    SaleType = SaleType.SaleFromStock
                });

                _db.SaveChanges();


                var saleFromStockOld = new SaleFromStockOld()
                {
                    SaleId     = createdSale.Id,
                    SupplierId = supplierId,
                    Products   = json.Products.Select(x =>
                                                      new SoldProductFromStockOld()
                    {
                        ProcurementCost = x.ProcurementCost,
                        ProductId       = x.Id
                    }).ToList()
                };


                _postgresContext.SalesFromStockOld.Add(saleFromStockOld);

                _postgresContext.SaleManagersOld.Add(
                    new SaleManagerOld(managerId, createdSale.Id, DateTime.Now.AddHours(3)));

                _postgresContext.SaveChanges();


                return(RedirectToAction("CheckPrint", new { saleId = createdSale.Id, operationSum = json.Cash + json.Cashless }));
            }
            catch (Exception e)
            {
                return(BadRequest(new { message = e.Message }));
            }
        }