public ActionResult Create([Bind(Include = "NOTA_ABONO_ID,USUARIO_ID,CLIENTE_ID,SERIE_DOC_ID,NRO_NOTA_ABONO,FECHA_EMISION,SUBTOTAL,TOTAL,ANULADA,CAUSA_ANULADA,ESTADO_DOC,PAGOS,FECHA_ACTUALIZADO,FECHA_VENCIMIENTO, DESCRIPCION")] NOTA_ABONO nOTA_ABONO)
        {
            if (ModelState.IsValid)
            {
                nOTA_ABONO.USUARIO_ID = 1;
                nOTA_ABONO.ANULADA    = false;
                nOTA_ABONO.ESTADO_DOC = false;
                nOTA_ABONO.SUBTOTAL   = nOTA_ABONO.TOTAL;
                db.NOTA_ABONO.Add(nOTA_ABONO);
                db.SaveChanges();

                DOCS_CC         docs_cc = new DOCS_CC();
                SERIE_DOCUMENTO sERIE   = db.SERIE_DOCUMENTO.Find(nOTA_ABONO.SERIE_DOC_ID);
                docs_cc.TIPO_DOC_ID       = sERIE.TIPO_DOC_ID;
                docs_cc.USUARIO_ID        = 1;
                docs_cc.CLIENTE_ID        = nOTA_ABONO.CLIENTE_ID;
                docs_cc.NRO_DOC           = nOTA_ABONO.NRO_NOTA_ABONO;
                docs_cc.FECHA_EMISION     = nOTA_ABONO.FECHA_EMISION;
                docs_cc.MONTO_DOC         = nOTA_ABONO.TOTAL;
                docs_cc.MONTO_PARCIAL     = nOTA_ABONO.TOTAL;
                docs_cc.FECHA_HORA        = DateTime.Now;
                docs_cc.TIPO              = "A";
                docs_cc.FECHA_VENCIMIENTO = nOTA_ABONO.FECHA_VENCIMIENTO;
                docs_cc.NRO_PAGOS         = 0;
                docs_cc.BALANCE           = nOTA_ABONO.TOTAL;
                db.DOCS_CC.Add(docs_cc);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.CLIENTE_ID   = new SelectList(db.CLIENTE, "CLIENTE_ID", "NOMBRE_CLTE", nOTA_ABONO.CLIENTE_ID);
            ViewBag.SERIE_DOC_ID = new SelectList(db.SERIE_DOCUMENTO, "SERIE_DOC_ID", "SERIE", nOTA_ABONO.SERIE_DOC_ID);
            ViewBag.USUARIO_ID   = new SelectList(db.USUARIO, "USUARIO_ID", "NOMBRE_COMPLETO", nOTA_ABONO.USUARIO_ID);
            return(View(nOTA_ABONO));
        }
        public decimal?GetMontoDocumento(int?id)
        {
            decimal?valdocumento = null;

            if (id.HasValue && id.Value > 0)
            {
                DOCS_CC dOCS = db.DOCS_CC.Find(id);
                valdocumento = dOCS.BALANCE;
            }

            return(valdocumento);
        }
        public ActionResult Create([Bind(Include = "FACTURA_ID,USUARIO_ID,CLIENTE_ID,SERIE_DOC_ID,NRO_FACTURA,FECHA_EMISION,SUBTOTAL,TOTAL,ANULADA,CAUSA_ANULADA,ESTADO_DOC,PAGOS,FECHA_ACTUALIZADO, FECHA_VENCIMIENTO")] FACTURA fACTURA)
        {
            if (ModelState.IsValid)
            {
                fACTURA.USUARIO_ID = 1;
                fACTURA.ANULADA    = false;
                fACTURA.ESTADO_DOC = false;
                fACTURA.SUBTOTAL   = fACTURA.TOTAL;
                fACTURA.PAGOS      = 0;
                db.FACTURA.Add(fACTURA);
                db.SaveChanges();

                DOCS_CC         docs_cc = new DOCS_CC();
                SERIE_DOCUMENTO sERIE   = db.SERIE_DOCUMENTO.Find(fACTURA.SERIE_DOC_ID);
                docs_cc.TIPO_DOC_ID       = sERIE.TIPO_DOC_ID;
                docs_cc.USUARIO_ID        = 1;
                docs_cc.CLIENTE_ID        = fACTURA.CLIENTE_ID;
                docs_cc.NRO_DOC           = fACTURA.NRO_FACTURA;
                docs_cc.FECHA_EMISION     = fACTURA.FECHA_EMISION;
                docs_cc.MONTO_DOC         = fACTURA.TOTAL;
                docs_cc.MONTO_PARCIAL     = fACTURA.TOTAL;
                docs_cc.FECHA_HORA        = DateTime.Now;
                docs_cc.TIPO              = "C";
                docs_cc.DESC_DOC          = "Factura No. " + fACTURA.NRO_FACTURA;
                docs_cc.FECHA_VENCIMIENTO = fACTURA.FECHA_VENCIMIENTO;
                docs_cc.NRO_PAGOS         = 0;
                docs_cc.BALANCE           = fACTURA.TOTAL;
                docs_cc.ID_ORIGEN         = db.FACTURA.Where(f => f.NRO_FACTURA == fACTURA.NRO_FACTURA).Select(f => f.FACTURA_ID).FirstOrDefault();
                db.DOCS_CC.Add(docs_cc);
                db.SaveChanges();

                return(RedirectToAction("Create"));
            }

            ViewBag.CLIENTE_ID   = new SelectList(db.CLIENTE, "CLIENTE_ID", "NOMBRE_CLTE", fACTURA.CLIENTE_ID);
            ViewBag.SERIE_DOC_ID = new SelectList(db.SERIE_DOCUMENTO, "SERIE_DOC_ID", "SERIE", fACTURA.SERIE_DOC_ID);
            ViewBag.USUARIO_ID   = new SelectList(db.USUARIO, "USUARIO_ID", "NOMBRE_COMPLETO", fACTURA.USUARIO_ID);
            return(View(fACTURA));
        }
        public ActionResult GuardarRecibo(int CLIENTE_ID, DateTime FECHA_EMISION, int FORMA_PAGO_ID, string NRO_DOC_PAGO,
                                          int NRO_RECIBO, int SERIE_DOC_ID, decimal TOTAL, RECIBO_DETALLE[] reciboDet)
        {
            string result = "Error! Recibo no completado!";

            if (NRO_RECIBO != null && CLIENTE_ID != null)
            {
                RECIBO model = new RECIBO();
                model.USUARIO_ID    = 1;
                model.CLIENTE_ID    = CLIENTE_ID;
                model.FORMA_PAGO_ID = FORMA_PAGO_ID;
                model.NRO_RECIBO    = NRO_RECIBO;
                model.FECHA_EMISION = FECHA_EMISION;
                model.SUBTOTAL      = TOTAL;
                model.TOTAL         = TOTAL;
                model.NRO_DOC_PAGO  = NRO_DOC_PAGO;
                model.SERIE_DOC_ID  = SERIE_DOC_ID;
                db.RECIBO.Add(model);
                db.SaveChanges();

                foreach (var i in reciboDet)
                {
                    SqlConnection connection = new SqlConnection(db.Database.Connection.ConnectionString);
                    using (var cmd = new SqlCommand(String.Empty, connection))
                    {
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText =
                            "insert into RECIBO_DETALLE (RECIBO_ID, FACTURA_ID, MONTO, TIPO_DOC_ID, DOC_NRO)" +
                            " values (@RECIBO_ID, @FACTURA_ID, @MONTO, @TIPO_DOC_ID, @DOC_NRO)";
                        cmd.Parameters.AddWithValue("@RECIBO_ID",
                                                    db.RECIBO.OrderByDescending(r => r.RECIBO_ID).Select(r => r.RECIBO_ID).FirstOrDefault());
                        cmd.Parameters.AddWithValue("@FACTURA_ID", db.DOCS_CC.Where(d => d.DOC_ID == i.FACTURA_ID).Select(d => d.ID_ORIGEN).FirstOrDefault());
                        cmd.Parameters.AddWithValue("@MONTO", i.MONTO);
                        cmd.Parameters.AddWithValue("@TIPO_DOC_ID", i.TIPO_DOC_ID);
                        cmd.Parameters.AddWithValue("@DOC_NRO", i.DOC_NRO);

                        try
                        {
                            connection.Open();
                            cmd.ExecuteNonQuery();
                            connection.Close();
                        }
                        catch (SqlException e)
                        {
                            result = e.ToString();
                            return(Json(result, JsonRequestBehavior.AllowGet));
                        }
                    }
                }

                foreach (var i in reciboDet)
                {
                    if (i.TIPO_DOC_ID == 1) //Si es factura lo que cancelan
                    {
                        /*Actualizo datos de factura*/
                        #region
                        FACTURA fACTURA = db.FACTURA.FirstOrDefault(f => f.NRO_FACTURA == i.DOC_NRO);
                        fACTURA.FECHA_ACTUALIZADO = DateTime.Today;
                        fACTURA.PAGOS             = fACTURA.PAGOS.HasValue ? fACTURA.PAGOS + i.MONTO : i.MONTO;
                        if (fACTURA.TOTAL - fACTURA.PAGOS == 0)
                        {
                            fACTURA.ESTADO_DOC = true;
                        }
                        else
                        {
                            fACTURA.ESTADO_DOC = false;
                        }
                        db.Entry(fACTURA).State = EntityState.Modified;
                        db.SaveChanges();
                        #endregion

                        /*Para guardar el recibo en tabla DOCS_CC */
                        #region
                        DOCS_CC dOCS = new DOCS_CC();
                        dOCS.TIPO_DOC_ID    = 2;
                        dOCS.FORMA_PAGO_ID  = FORMA_PAGO_ID;
                        dOCS.USUARIO_ID     = 1;
                        dOCS.CLIENTE_ID     = CLIENTE_ID;
                        dOCS.NRO_DOC        = NRO_RECIBO; //db.RECIBO.OrderByDescending(r => r.RECIBO_ID).Select(r => r.NRO_RECIBO).FirstOrDefault();
                        dOCS.FECHA_EMISION  = FECHA_EMISION;
                        dOCS.DESC_DOC       = "Pago de factura No. " + i.DOC_NRO;
                        dOCS.MONTO_DOC      = i.MONTO;
                        dOCS.MONTO_PARCIAL  = i.MONTO;
                        dOCS.NRO_PAGOS      = 1;
                        dOCS.BALANCE        = 0;
                        dOCS.NRO_DOC_PAGADO = db.DOCS_CC.Where(f => f.TIPO_DOC_ID == i.TIPO_DOC_ID && f.NRO_DOC == fACTURA.NRO_FACTURA).Select(f => f.NRO_DOC).FirstOrDefault();
                        dOCS.ID_PAGADO      = db.DOCS_CC.Where(f => f.TIPO_DOC_ID == i.TIPO_DOC_ID && f.NRO_DOC == fACTURA.NRO_FACTURA).Select(f => f.DOC_ID).FirstOrDefault();
                        dOCS.FECHA_HORA     = DateTime.Now;
                        dOCS.ID_BASE        = db.DOCS_CC.Where(f => f.TIPO_DOC_ID == i.TIPO_DOC_ID && f.NRO_DOC == fACTURA.NRO_FACTURA).Select(f => f.DOC_ID).FirstOrDefault();
                        dOCS.TIPO           = "A";
                        db.DOCS_CC.Add(dOCS);
                        db.SaveChanges();
                        #endregion

                        /*Para actualizar factura en DOCS_CC*/
                        #region
                        DOCS_CC dOC1 = db.DOCS_CC.Find(dOCS.ID_PAGADO);
                        dOC1.NRO_PAGOS       = dOC1.NRO_PAGOS + 1;
                        dOC1.BALANCE         = dOC1.BALANCE - i.MONTO;
                        dOC1.NRO_DOC_PAGADO  = dOCS.NRO_DOC;
                        dOC1.ID_PAGADO       = dOCS.DOC_ID;
                        dOC1.FECHA_PAGADO    = FECHA_EMISION;
                        db.Entry(dOC1).State = EntityState.Modified;
                        db.SaveChanges();
                        #endregion
                    }
                    else if (i.TIPO_DOC_ID == 3) //Si es nota de cargo lo que cancelan
                    {
                        /*Actualizo datos de nota de cargo*/
                        #region Actualizar nota de cargo
                        NOTA_CARGO nOTA_CARGO = db.NOTA_CARGO.FirstOrDefault(n => n.NRO_NOTA_CARGO == i.DOC_NRO);
                        nOTA_CARGO.FECHA_ACTUALIZADO = DateTime.Today;
                        nOTA_CARGO.PAGOS             = nOTA_CARGO.PAGOS.HasValue ? nOTA_CARGO.PAGOS + i.MONTO : i.MONTO;
                        if (nOTA_CARGO.TOTAL - nOTA_CARGO.PAGOS == 0)
                        {
                            nOTA_CARGO.ESTADO_DOC = true;
                        }
                        else
                        {
                            nOTA_CARGO.ESTADO_DOC = false;
                        }
                        db.Entry(nOTA_CARGO).State = EntityState.Modified;
                        db.SaveChanges();
                        #endregion

                        /*Para guardar el recibo en tabla DOCS_CC */
                        #region guardar recibo en DOCS_CC
                        DOCS_CC dOCS = new DOCS_CC();
                        dOCS.TIPO_DOC_ID    = 2;
                        dOCS.FORMA_PAGO_ID  = FORMA_PAGO_ID;
                        dOCS.USUARIO_ID     = 1;
                        dOCS.CLIENTE_ID     = CLIENTE_ID;
                        dOCS.NRO_DOC        = NRO_RECIBO; //db.RECIBO.OrderByDescending(r => r.RECIBO_ID).Select(r => r.NRO_RECIBO).FirstOrDefault();
                        dOCS.FECHA_EMISION  = FECHA_EMISION;
                        dOCS.DESC_DOC       = "Pago de Nota de cargo No. " + nOTA_CARGO.NRO_NOTA_CARGO;
                        dOCS.MONTO_DOC      = i.MONTO;
                        dOCS.MONTO_PARCIAL  = i.MONTO;
                        dOCS.NRO_PAGOS      = 1;
                        dOCS.BALANCE        = 0;
                        dOCS.NRO_DOC_PAGADO = db.DOCS_CC.Where(f => f.TIPO_DOC_ID == i.TIPO_DOC_ID && f.NRO_DOC == nOTA_CARGO.NRO_NOTA_CARGO).Select(f => f.NRO_DOC).FirstOrDefault();
                        dOCS.ID_PAGADO      = db.DOCS_CC.Where(f => f.TIPO_DOC_ID == i.TIPO_DOC_ID && f.NRO_DOC == nOTA_CARGO.NRO_NOTA_CARGO).Select(f => f.DOC_ID).FirstOrDefault();
                        dOCS.FECHA_HORA     = DateTime.Now;
                        dOCS.ID_BASE        = db.DOCS_CC.Where(f => f.TIPO_DOC_ID == i.TIPO_DOC_ID && f.NRO_DOC == nOTA_CARGO.NRO_NOTA_CARGO).Select(f => f.DOC_ID).FirstOrDefault();
                        dOCS.TIPO           = "A";
                        db.DOCS_CC.Add(dOCS);
                        db.SaveChanges();
                        #endregion

                        /*Para actualizar NOTA_CARGO en DOCS_CC*/
                        #region actualizar NOTA_CARGO en DOCS_CC
                        DOCS_CC dOC1 = db.DOCS_CC.Find(dOCS.ID_PAGADO);
                        dOC1.NRO_PAGOS       = dOC1.NRO_PAGOS + 1;
                        dOC1.BALANCE         = dOC1.BALANCE - i.MONTO;
                        dOC1.NRO_DOC_PAGADO  = dOCS.NRO_DOC;
                        dOC1.ID_PAGADO       = dOCS.DOC_ID;
                        dOC1.FECHA_PAGADO    = FECHA_EMISION;
                        db.Entry(dOC1).State = EntityState.Modified;
                        db.SaveChanges();
                        #endregion
                    }
                }

                result = "Recibo guardado con exito!";
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }