Beispiel #1
0
        public ActionResult AddEditOutputNote(Int32?OutputNoteId, Int32?FatherId)
        {
            var model = new AddEditOutputNoteViewModel();

            model.Fill(CargarDatosContext(), OutputNoteId, FatherId);
            return(View(model));
        }
Beispiel #2
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));
            }
        }