Пример #1
0
        public async Task PagaInteres(double pagoIntereses, bool print = true)
        {
            empeño = await _context.Empenos.FindAsync(empeñoId);

            if (pagoIntereses > 0)
            {
                var pago = new Pago
                {
                    EmpenoId    = empeño.EmpenoId,
                    Consecutivo = GetConsecutivo(),
                    Comentario  = txtComentario.Text,
                    EmpleadoId  = Program.EmpleadoId,
                    Fecha       = DateTime.Now,
                    Monto       = pagoIntereses,
                    TipoPago    = TipoPago.Interes,
                };

                _context.Pago.Add(pago);
                await _context.SaveChangesAsync();

                await funciones.SaveBitacora(new ValorBitacora
                {
                    Valor  = JsonConvert.SerializeObject(pago),
                    Modulo = "Pagos",
                    Accion = "Crear"
                });

                List <Intereses> intereses = new List <Intereses>();
                var sobrante    = pago.Monto;
                var listInteres = await _context.Intereses.Where(i => i.EmpenoId == pago.EmpenoId && i.Pagado < i.Monto).ToListAsync();

                foreach (var item in listInteres)
                {
                    if ((item.Monto - item.Pagado) > sobrante && sobrante > 0)
                    {
                        item.Pagado += sobrante;
                        if (item.Pagado >= Math.Truncate(item.Monto))
                        {
                            empeño.FechaVencimiento = empeño.FechaVencimiento.AddMonths(1);
                            item.Monto     = item.Pagado;
                            item.FechaPago = DateTime.Now;
                        }
                        item.PagoId = pago.PagoId;
                        _context.Entry(item).State = EntityState.Modified;
                        await _context.SaveChangesAsync();

                        Intereses valorTemp = new Intereses
                        {
                            EmpenoId         = item.EmpenoId,
                            FechaCreacion    = item.FechaCreacion,
                            FechaVencimiento = item.FechaVencimiento,
                            FechaPago        = item.FechaPago,
                            InteresesId      = item.InteresesId,
                            Monto            = item.Monto,
                            Pagado           = sobrante,
                            PagoId           = item.PagoId
                        };

                        intereses.Add(valorTemp);
                        break;
                    }
                    else if (sobrante > 0)
                    {
                        double paga = (item.Monto - item.Pagado);
                        item.Pagado += paga;
                        if (item.Pagado >= Math.Truncate(item.Monto))
                        {
                            empeño.FechaVencimiento = empeño.FechaVencimiento.AddMonths(1);
                            item.Monto     = item.Pagado;
                            item.FechaPago = DateTime.Now;
                        }
                        item.PagoId = pago.PagoId;
                        sobrante   -= paga;
                        _context.Entry(item).State = EntityState.Modified;
                        await _context.SaveChangesAsync();

                        Intereses valorTemp = new Intereses {
                            EmpenoId         = item.EmpenoId,
                            FechaCreacion    = item.FechaCreacion,
                            FechaVencimiento = item.FechaVencimiento,
                            FechaPago        = item.FechaPago,
                            InteresesId      = item.InteresesId,
                            Monto            = item.Monto,
                            MontoBodega      = item.MontoBodega,
                            MontoInteres     = item.MontoInteres,
                            Pagado           = paga,
                            PagoId           = item.PagoId
                        };
                        intereses.Add(valorTemp);
                    }
                }

                await funciones.SaveBitacora(new ValorBitacora
                {
                    Valor  = JsonConvert.SerializeObject(intereses),
                    Modulo = "Intereses",
                    Accion = "Crear"
                });

                var id = empeño.EmpenoId;
                await funciones.ReviewEmpeño(id);

                empeño = null;
                using (DataContext contextTemp = new DataContext())
                {
                    empeño = await contextTemp.Empenos.FindAsync(id);

                    if (print)
                    {
                        await PrintInteres(empeño, intereses, pago);
                    }
                }
            }
        }