예제 #1
0
        public IActionResult CreateFromOrder(int?id)
        {
            var order = _dataContext.Orders
                        .Include(o => o.House)
                        .Include(o => o.Warehouse)
                        .Include(o => o.Collector)
                        .ThenInclude(c => c.User)
                        .Include(o => o.TypePayment)
                        .Include(o => o.DayPayment)
                        .Include(o => o.Seller)
                        .ThenInclude(s => s.User)
                        .Include(s => s.Helper)
                        .Include(o => o.Customer)
                        .Include(o => o.State)
                        .Include(o => o.OrderDetails)
                        .ThenInclude(od => od.Product)
                        .FirstOrDefault(o => o.Id == id);

            var model = new SaleFromOrderViewModel
            {
                Houses        = _combosHelper.GetComboHouses(),
                HouseId       = order.House.Id,
                TypePayments  = _combosHelper.GetComboTypePayments(),
                TypePaymentId = order.TypePayment.Id,
                DayPayments   = _combosHelper.GetComboDayPayments(),
                DayPaymentId  = order.DayPayment.Id,
                Sellers       = _combosHelper.GetComboSellers(),
                SellerId      = order.Seller.Id,
                Helpers       = _combosHelper.GetComboHelpers(),
                HelperId      = order.Helper.Id,
                Warehouses    = _combosHelper.GetComboWarehouses(),
                WarehouseId   = order.Warehouse.Id,
                CustomerId    = order.Customer.Id,
                CollectorId   = order.Collector.Id,
                StateId       = 1,
                StartDate     = order.StartDate.Date,
                EndDate       = order.EndDate.Date,
                Deposit       = order.Deposit,
                Payment       = order.Payment,
                Remarks       = order.Remarks,
                Pending       = order.Pending,
                Details2      = _dataContext.Orders.Include(o => o.Customer).Where(o => o.Id == id).ToList(),
                Details       = _dataContext.OrderDetails.Include(od => od.Product).Where(sd => sd.Order.Id == id).ToList(),
            };

            return(View(model));
        }
예제 #2
0
        public async Task <IActionResult> CreateFromOrder(int?id, SaleFromOrderViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                using (var transaction = new CommittableTransaction(new TransactionOptions {
                    IsolationLevel = IsolationLevel.ReadCommitted
                }))
                {
                    var user = await _dataContext.Users.Where(u => u.UserName == User.Identity.Name).FirstOrDefaultAsync();

                    try
                    {
                        var sale = new Sale
                        {
                            StartDate   = viewModel.StartDate.ToUniversalTime(),
                            EndDate     = viewModel.EndDate.ToUniversalTime(),
                            Payment     = viewModel.Payment,
                            Deposit     = viewModel.Deposit,
                            Remarks     = viewModel.Remarks,
                            Pending     = viewModel.Pending,
                            Customer    = await _dataContext.Customers.FindAsync(viewModel.CustomerId),
                            Warehouse   = await _dataContext.Warehouses.FindAsync(viewModel.WarehouseId),
                            House       = await _dataContext.Houses.FindAsync(viewModel.HouseId),
                            DayPayment  = await _dataContext.DayPayments.FindAsync(viewModel.DayPaymentId),
                            TypePayment = await _dataContext.TypePayments.FindAsync(viewModel.TypePaymentId),
                            Seller      = await _dataContext.Sellers.FindAsync(viewModel.SellerId),
                            Collector   = await _dataContext.Collectors.FindAsync(viewModel.CollectorId),
                            Helper      = await _dataContext.Helpers.FindAsync(viewModel.HelperId),
                            State       = await _dataContext.States.FindAsync(viewModel.StateId),
                        };

                        _dataContext.Sales.Add(sale);
                        await _dataContext.SaveChangesAsync();

                        var payment = new Payment
                        {
                            Sale      = await _dataContext.Sales.FindAsync(sale.Id),
                            Customer  = await _dataContext.Customers.FindAsync(sale.Customer.Id),
                            Date      = sale.StartDate,
                            Deposit   = sale.Deposit,
                            Type      = "Efectivo",
                            Collector = await _dataContext.Collectors.FindAsync(sale.Customer.Collector.Id),
                            Concept   = await _dataContext.Concepts.FindAsync(8),
                        };

                        _dataContext.Payments.Add(payment);
                        await _dataContext.SaveChangesAsync();

                        var order = await _dataContext.Orders.FindAsync(id);

                        order.State = await _dataContext.States.FindAsync(viewModel.StateId);

                        _dataContext.Entry(order).State = EntityState.Modified;

                        var details = _dataContext.OrderDetails.Include(od => od.Product).Where(sd => sd.Order.Id == id).ToList();

                        foreach (var detail in details)
                        {
                            var saleDetail = new SaleDetail
                            {
                                Name     = detail.Name,
                                Price    = detail.Price,
                                Quantity = detail.Quantity,
                                Sale     = await _dataContext.Sales.FindAsync(sale.Id),
                                Product  = await _dataContext.Products.FindAsync(detail.Product.Id),
                            };
                            _dataContext.SaleDetails.Add(saleDetail);

                            var inventory = _dataContext.Inventories.Where(i => i.Product.Id == saleDetail.Product.Id).FirstOrDefault();
                            inventory.Stock -= (decimal)saleDetail.Quantity;
                            _dataContext.Entry(inventory).State = EntityState.Modified;
                        }
                        await _dataContext.SaveChangesAsync();

                        transaction.Commit();
                    }
                    catch (Exception)
                    {
                        transaction.Rollback();
                    }
                }

                return(RedirectToAction(nameof(Index)));
            }
            viewModel.Houses       = _combosHelper.GetComboHouses();
            viewModel.TypePayments = _combosHelper.GetComboTypePayments();
            viewModel.DayPayments  = _combosHelper.GetComboDayPayments();
            viewModel.Sellers      = _combosHelper.GetComboSellers();
            viewModel.Helpers      = _combosHelper.GetComboHelpers();
            viewModel.Warehouses   = _combosHelper.GetComboWarehouses();
            viewModel.Details2     = _dataContext.Orders.Include(o => o.Customer).Where(o => o.Id == id).ToList();
            viewModel.Details      = _dataContext.OrderDetails.Include(od => od.Product).Where(sd => sd.Order.Id == id).ToList();
            return(View(viewModel));
        }