public ActionResult AddEditOutputNote(AddEditOutputNoteViewModel model, FormCollection frm) { try { String outputCode = String.Empty; using (var transaction = new TransactionScope()) { OutputNote outputNote = null; if (model.OutputNoteId.HasValue) { PostMessage(MessageType.Warning, "No se puede editar una nota de salida."); return(RedirectToAction("ListOutputNote", new { FatherId = model.FatherId })); //entryNote = context.EntryNote.FirstOrDefault(x => x.EntryNoteId == model.EntryNoteId); } else { outputNote = new OutputNote(); outputNote.State = ConstantHelpers.ESTADO.ACTIVO; outputNote.Date = DateTime.Now; outputNote.Time = DateTime.Now.TimeOfDay; context.OutputNote.Add(outputNote); } outputNote.MovementTypeId = model.MovementTypeId; outputNote.OriginalStoreId = model.OriginalStoreId; outputNote.DestinationStoreId = model.DestinationStoreId; if (model.DocumentTypeId.HasValue) { outputNote.DocumentCode = context.DocumentType.FirstOrDefault(x => x.DocumentTypeId == model.DocumentTypeId).Acronym; } outputNote.DocumentId = model.DocumentId; outputNote.Code = model.Code ?? String.Empty; List <StockProduct> lstStockProduct = new List <StockProduct>(); var lstQuantity = frm.AllKeys.Where(x => x.StartsWith("qreal-")).ToList(); List <StockProduct> lstStock = new List <StockProduct>(); foreach (var q in lstQuantity) { var data = q.Replace("qreal-", String.Empty).Split('-'); var productId = data[1].ToInteger(); lstStock = context.StockProduct.Where(x => x.ProductId == productId && x.StoreId == model.OriginalStoreId && x.State == ConstantHelpers.ESTADO.ACTIVO).ToList(); foreach (var stock in lstStock) { if (stock.Quantity <= 0) { PostMessage(MessageType.Warning, "Se canceló la orden debido a que no se encuentra stock de: " + stock.Product.InvoiceDescription); return(RedirectToAction("ListOutputNote", new { FatherId = model.FatherId })); } } } foreach (var q in lstQuantity) { var data = q.Replace("qreal-", String.Empty).Split('-'); var productId = data[1].ToInteger(); var index = data[0].ToInteger(); var stockProductDetail = new StockProductDetail(); context.StockProductDetail.Add(stockProductDetail); stockProductDetail.OutputNote = outputNote; stockProductDetail.State = ConstantHelpers.ESTADO.ACTIVO; stockProductDetail.Operation = ConstantHelpers.OPERATION.OUTPUT; stockProductDetail.Value = frm["qreal-" + index + "-" + productId].ToDecimal(); stockProductDetail.Date = DateTime.Now; var stock = lstStock.FirstOrDefault(x => x.ProductId == productId && x.StoreId == model.OriginalStoreId && x.State == ConstantHelpers.ESTADO.ACTIVO); if (stock != null) { stock.Quantity -= stockProductDetail.Value; } else { stock = lstStockProduct.FirstOrDefault(x => x.ProductId == productId && x.StoreId == model.OriginalStoreId && x.State == ConstantHelpers.ESTADO.ACTIVO); if (stock != null) { stock.Quantity -= stockProductDetail.Value; } } stockProductDetail.StockProduct = stock; OutputNoteDetail outputNoteDetail = new OutputNoteDetail(); outputNoteDetail.OutputNote = outputNote; outputNoteDetail.State = ConstantHelpers.ESTADO.ACTIVO; outputNoteDetail.TypePayment = (frm["typepayment-" + index + "-" + productId] ?? "TOT").ToString(); outputNoteDetail.RealQuantity = frm["qreal-" + index + "-" + productId].ToDecimal(); outputNoteDetail.RealMeasureUnit = "m"; //outputNoteDetail.ProductId = productId; outputNoteDetail.SecRealMeasureUnit = "rollos"; //outputNoteDetail.PStockQuantity = frm["pstockquantity-" + index + "-" + productId].ToDecimal(); //outputNoteDetail.SStockQuantity = frm["sstockquantity-" + index + "-" + productId].ToDecimal(); outputNoteDetail.SecRealQuantity = frm["qsreal-" + index + "-" + productId].ToDecimal(); context.OutputNoteDetail.Add(outputNoteDetail); } //context.StockProduct.AddRange(lstStockProduct); context.SaveChanges(); if (String.IsNullOrEmpty(model.Code)) { outputNote.Code = outputNote.OutputNoteId.ToString(); outputCode = outputNote.Code; context.SaveChanges(); } transaction.Complete(); } PostMessage(MessageType.Success, "Los datos se guardaron exitosamente. Nota de Salida: " + outputCode); return(RedirectToAction("ListOutputNote", new { FatherId = model.FatherId })); } catch (Exception ex) { PostMessage(MessageType.Error); model.Fill(CargarDatosContext(), model.OutputNoteId, model.FatherId); return(View(model)); } }
public ActionResult AddEditEntryNote(AddEditEntryNoteViewModel model, FormCollection frm) { try { String entryCode = String.Empty; using (var transaction = new TransactionScope()) { EntryNote entryNote = null; if (model.EntryNoteId.HasValue) { PostMessage(MessageType.Warning, "No se puede editar una nota de ingreso."); return(RedirectToAction("ListEntryNote", new { FatherId = model.FatherId })); //entryNote = context.EntryNote.FirstOrDefault(x => x.EntryNoteId == model.EntryNoteId); } else { entryNote = new EntryNote(); entryNote.State = ConstantHelpers.ESTADO.ACTIVO; entryNote.Date = DateTime.Now; entryNote.Time = DateTime.Now.TimeOfDay; context.EntryNote.Add(entryNote); } entryNote.MovementTypeId = model.MovementTypeId; entryNote.SupplierGuideNumber = model.SupplierGuideNumber; entryNote.TransportGuideNumber = model.TransportGuideNumber; entryNote.Seal = model.Seal; entryNote.TransportTime = model.TransportTime; entryNote.DestinationStoreId = model.DestinationStoreId; entryNote.SupplierId = model.SupplierId; entryNote.DocumentCode = model.DocumentCode; entryNote.DocumentId = model.DocumentId; entryNote.Code = model.Code ?? String.Empty; List <StockProduct> lstStockProduct = new List <StockProduct>(); var lstQuantity = frm.AllKeys.Where(x => x.StartsWith("qreal-")).ToList(); foreach (var q in lstQuantity) { var data = q.Replace("qreal-", String.Empty).Split('-'); var PrePurcherseOrderDetailId = data[1].ToInteger(); var index = data[0].ToInteger(); PrePurcherseOrderDetail detail = context.PrePurcherseOrderDetail.FirstOrDefault(x => x.PrePurcherseOrderDetailId == PrePurcherseOrderDetailId); var stockProductDetail = new StockProductDetail(); context.StockProductDetail.Add(stockProductDetail); stockProductDetail.EntryNote = entryNote; stockProductDetail.State = ConstantHelpers.ESTADO.ACTIVO; stockProductDetail.Operation = ConstantHelpers.OPERATION.ENTRY; stockProductDetail.Value = frm["qreal-" + index + "-" + PrePurcherseOrderDetailId].ToDecimal(); stockProductDetail.Date = DateTime.Now; //stockProductDetail.CUPrice = detail.Price; //stockProductDetail.CurrencyId = detail.PrePurcherseOrder.PurcherseOrder.FirstOrDefault(x => x.State == ConstantHelpers.ESTADO.ACTIVO).CurrencyId; var stock = context.StockProduct.FirstOrDefault(x => x.ProductId == detail.ProductId && x.StoreId == model.DestinationStoreId && x.State == ConstantHelpers.ESTADO.ACTIVO); if (stock != null) { stock.Quantity += stockProductDetail.Value; } else { stock = lstStockProduct.FirstOrDefault(x => x.ProductId == detail.ProductId && x.StoreId == model.DestinationStoreId && x.State == ConstantHelpers.ESTADO.ACTIVO); if (stock != null) { stock.Quantity += stockProductDetail.Value; } else { stock = new StockProduct(); stock.Quantity = stockProductDetail.Value; stock.State = ConstantHelpers.ESTADO.ACTIVO; stock.ProductId = detail.ProductId; stock.StoreId = model.DestinationStoreId; lstStockProduct.Add(stock); } //context.StockProduct.Add(stock); } stockProductDetail.StockProduct = stock; EntryNoteDetail entryNoteDetail = new EntryNoteDetail(); entryNoteDetail.EntryNote = entryNote; entryNoteDetail.State = ConstantHelpers.ESTADO.ACTIVO; entryNoteDetail.TypePayment = (frm["typepayment-" + index + "-" + PrePurcherseOrderDetailId] ?? "TOT").ToString(); entryNoteDetail.RealQuantity = frm["qreal-" + index + "-" + PrePurcherseOrderDetailId].ToDecimal(); entryNoteDetail.RealMeasureUnit = "m"; entryNoteDetail.PrePurcherseOrderDetailId = PrePurcherseOrderDetailId; entryNoteDetail.SecRealMeasureUnit = "rollos"; //entryNoteDetail.ProductId = detail.ProductId; entryNoteDetail.SecRealQuantity = frm["qsreal-" + index + "-" + PrePurcherseOrderDetailId].ToDecimal(); context.EntryNoteDetail.Add(entryNoteDetail); } context.StockProduct.AddRange(lstStockProduct); context.SaveChanges(); if (String.IsNullOrEmpty(model.Code)) { entryNote.Code = entryNote.EntryNoteId.ToString(); entryCode = entryNote.Code; context.SaveChanges(); } transaction.Complete(); } PostMessage(MessageType.Success, "Los datos se guardaron exitosamente. Nota de Salida: " + entryCode); return(RedirectToAction("ListEntryNote", new { FatherId = model.FatherId })); } catch (Exception ex) { PostMessage(MessageType.Error); model.Fill(CargarDatosContext(), model.EntryNoteId, model.FatherId); return(View(model)); } }