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)); }
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)); }