コード例 #1
0
        public ActionResult CreateDetalle(long idCab)
        {
            OrdenesPagoDetVM opvm = _repo.GetOrdenPagoCabDet(idCab);

            GetFacturas(opvm.ProfesionalId);
            GetFormasPago();
            return(View(opvm));
        }
コード例 #2
0
        public ActionResult CreateDetalle(OrdenesPagoDetVM OPvm, string submit)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    factura_proveedores fp = db.factura_proveedores.Where(x => x.id == OPvm.FacturaProveedorId).First();
                    double importeDetalle  = 0;

                    if (OPvm.PagaTotal == false) //ingresa los valores a mano, por eso controlo.
                    {
                        if (OPvm.Importe == null || OPvm.Importe == 0)
                        {
                            GetFacturas(OPvm.ProfesionalId);
                            GetFormasPago();
                            ModelState.AddModelError("", "Debe ingresar un importe mayor a 0!");
                            return(View(OPvm));
                        }
                        //Controlo que el importe a pagar sea menor al ingresado.
                        if (OPvm.Importe > fp.importe_total)
                        {
                            GetFacturas(OPvm.ProfesionalId);
                            GetFormasPago();
                            ModelState.AddModelError("", "El importe ingresado en la Orden de Pago, no puede ser mayor al saldo por pagar de la Factura que es de: " + fp.importe_total);
                            return(View(OPvm));
                        }
                        else if (fp.estado == 1) //tiene pago parcial. O sea, le queda algo por saldar pero no es todo el importe de la factura
                        {
                            //Ver en que detalle de orden de pago está para sacar el importe y hacer la diferencia.
                            double importeCargado = db.orden_pago_det.Where(x => x.factura_proveedores_id == OPvm.FacturaProveedorId).Select(x => x.importe).FirstOrDefault();
                            double diferencia     = fp.importe_total - importeCargado;
                            if (OPvm.Importe > diferencia)
                            {
                                GetFacturas(OPvm.ProfesionalId);
                                GetFormasPago();
                                ModelState.AddModelError("", "El importe ingresado en la Orden de Pago, no puede ser mayor al saldo por pagar de la Factura que es de: " + diferencia);
                                return(View(OPvm));
                            }
                        }
                        importeDetalle = (double)OPvm.Importe;
                    }
                    else
                    {
                        //tengo que controlar si ya hay algo pago de esa factura
                        if (fp.estado == 1) //pago parcial
                        {
                            double        importesSum      = 0;
                            List <double> importesCargados = db.orden_pago_det.Where(x => x.factura_proveedores_id == OPvm.FacturaProveedorId).Select(x => x.importe).ToList();
                            foreach (var l in importesCargados)
                            {
                                importesSum = importesSum + l;
                            }
                            double diferencia = fp.importe_total - importesSum;
                            importeDetalle = diferencia;
                        }
                        else //es 2, significa que no tiene nada pago
                        {
                            importeDetalle = fp.importe_total;
                        }
                    }
                    //Guardo el detalle
                    orden_pago_det opdet = new orden_pago_det
                    {
                        orden_pago_cab_id      = OPvm.idCab,
                        factura_proveedores_id = (long)OPvm.FacturaProveedorId,
                        paga_total             = OPvm.PagaTotal,
                        importe              = importeDetalle,
                        forma_pago           = OPvm.FormaPago,
                        nro_cheque           = OPvm.NroCheque,
                        nro_cuenta_corriente = OPvm.NroCtaCte,
                        banco         = OPvm.Banco,
                        observaciones = OPvm.Observaciones
                    };

                    db.orden_pago_det.Add(opdet);
                    db.SaveChanges();

                    //Actualizo el importe en la cabecera
                    orden_pago_cab orden_pago_cab = db.orden_pago_cab.Find(OPvm.idCab);
                    orden_pago_cab.importe_total   = orden_pago_cab.importe_total + importeDetalle;
                    db.Entry(orden_pago_cab).State = EntityState.Modified;
                    db.SaveChanges();

                    //actualizo el estado de la factur
                    fp.estado          = OPvm.PagaTotal == true ? 0 : 1;
                    db.Entry(fp).State = EntityState.Modified;
                    db.SaveChanges();

                    //segun el boton veo adonde lo llevo.
                    if (submit == "Guardar y Volver")
                    {
                        return(RedirectToAction("Details", new { id = OPvm.idCab, page = 1 }));
                    }
                    else
                    {
                        return(RedirectToAction("CreateDetalle", new { idCab = OPvm.idCab }));
                    }
                }
            }
            catch
            {
                ModelState.AddModelError("", "Se produjo un error, en caso de persistir, ponerse en contacto con el Administrador.");
            }
            GetFacturas(OPvm.ProfesionalId);
            GetFormasPago();
            return(View(OPvm));
        }