Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        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));
            }
        }