public static void DeliverProduct(ScheduledProductDelivery deliveredProduct, SupplyHistory supplyHistory,
                                          PostgresContext postgresContext, ShopContext shopContext)
        {
            var product = GetProduct(deliveredProduct.ProductId, deliveredProduct.ShopId, shopContext);

            shopContext.InfoProducts.Add(new InfoProduct()
            {
                Amount        = deliveredProduct.Amount,
                Date          = DateTime.Now.AddHours(3),
                Product       = product,
                SupplierId    = deliveredProduct.SupplierId,
                Type          = InfoProductType.Supply,
                ShopId        = deliveredProduct.ShopId,
                SupplyHistory = supplyHistory
            });

            var supplyProduct = shopContext.SupplyProducts.Add(new SupplyProduct()
            {
                Product           = product,
                SupplierId        = deliveredProduct.SupplierId,
                RealizationAmount = 0,
                TotalAmount       = deliveredProduct.Amount,
                AdditionalCost    = 0,
                ProcurementCost   = deliveredProduct.ProcurementCost,
                FinalCost         = deliveredProduct.ProcurementCost,
                StockAmount       = deliveredProduct.Amount,
                SupplyHistory     = supplyHistory
            });

            shopContext.SaveChanges();

            deliveredProduct.SupplyProductId = supplyProduct.Entity.Id;

            postgresContext.ProductOperations.Add(new ProductOperation(
                                                      supplyProduct.Entity.Id,
                                                      deliveredProduct.Amount,
                                                      DateTime.Now.AddHours(3),
                                                      deliveredProduct.ProcurementCost,
                                                      false,
                                                      deliveredProduct.SupplierId,
                                                      StorageType.Shop));
        }
예제 #2
0
        public IActionResult Create([FromBody] CreateScheduledDeliveryVM scheduledDelivery)
        {
            try
            {
                var products = new List <ScheduledProductDelivery>();

                foreach (var product in scheduledDelivery.Products)
                {
                    ScheduledProductDelivery productDelivery;

                    if (product.ProductId != 0)
                    {
                        productDelivery = new ScheduledProductDelivery(product.ProductId, product.Amount,
                                                                       scheduledDelivery.SupplierId, product.ProcurementCost);
                    }
                    else
                    {
                        var existingProduct = _shopContext.Products
                                              .FirstOrDefault(x => x.Title == product.Title);

                        if (existingProduct == null)
                        {
                            var newProduct = _shopContext.Products.Add(new Product()
                            {
                                Title      = product.Title,
                                Code       = product.Code,
                                ShopId     = 1,
                                CategoryId = scheduledDelivery.CategoryId,
                                Cost       = product.ProcurementCost
                            });
                            _shopContext.SaveChanges();

                            productDelivery = new ScheduledProductDelivery(newProduct.Entity.Id, product.Amount,
                                                                           scheduledDelivery.SupplierId, product.ProcurementCost);
                        }
                        else
                        {
                            productDelivery = new ScheduledProductDelivery(existingProduct.Id, product.Amount,
                                                                           scheduledDelivery.SupplierId, product.ProcurementCost);
                        }
                    }

                    if (scheduledDelivery.ShopId > 0)
                    {
                        productDelivery.ShopId = scheduledDelivery.ShopId;
                    }

                    products.Add(productDelivery);
                }

                var createdSchedulerDelivery = _postgresContext.ScheduledDeliveries
                                               .Add(new ScheduledDelivery(
                                                        scheduledDelivery.SupplierId,
                                                        scheduledDelivery.DepositedSum,
                                                        products));

                var supplier = _shopContext.Suppliers.FirstOrDefault(x => x.Id == scheduledDelivery.SupplierId);

                var infoMoney = _shopContext.InfoMonies.Add(new InfoMoney()
                {
                    Sum                = -scheduledDelivery.DepositedSum,
                    PaymentType        = PaymentType.Cashless,
                    MoneyWorkerId      = scheduledDelivery.MoneyWorkerId,
                    MoneyOperationType = MoneyOperationType.Expense,
                    Date               = DateTime.Now.AddHours(3),
                    Comment            = supplier?.Title ?? ""
                }).Entity;

                var expense = _shopContext.Expenses.Add(new Expense()
                {
                    InfoMoney         = infoMoney,
                    ExpenseCategoryId = 4
                });

                _shopContext.SaveChanges();

                _postgresContext.SupplierPayments.Add(
                    new SupplierPayment(
                        scheduledDelivery.DepositedSum,
                        scheduledDelivery.SupplierId,
                        DateTime.Now.AddHours(3)));

                _postgresContext.ExpensesOld.Add(
                    new ExpenseOld(
                        expense.Entity.Id,
                        scheduledDelivery.ShopId > 0 ? scheduledDelivery.ShopId : 1));

                _postgresContext.SaveChanges();

                _postgresContext.ScheduledDeliveryPayments.Add(new ScheduledDeliveryPayment()
                {
                    InfoMoneyId         = infoMoney.Id,
                    ScheduledDeliveryId = createdSchedulerDelivery.Entity.Id,
                    MoneyWorkerId       = scheduledDelivery.MoneyWorkerId
                });

                _postgresContext.SaveChanges();

                return(RedirectToAction("List"));
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }