Exemple #1
0
        public async Task Guardar()
        {
            if (!funciones.ValidatePIN("Empeño"))
            {
                return;
            }

            double pagoIntereses  = double.Parse(txtPagaInteres.Text);
            double pagoMonto      = double.Parse(txtPagaMonto.Text);
            double montoPendiente = double.Parse(txtMontoAPagar.Text);

            if (pagoMonto < montoPendiente)
            {
                if ((pagoMonto > 0) && (empeño.Intereses.Sum(i => i.Monto) > (empeño.Intereses.Sum(i => i.Pagado) + pagoIntereses)))
                {
                    MessageBox.Show("Para abonar a la prenda debe pagar todos los intereses pendientes de " + montoMinimo.ToString("N2"), "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
            }
            var empleadoId = await funciones.GetEmpleadoIdByUser(Program.Usuario.Usuario);

            double montoIntereses = double.Parse(txtInteresAPagar.Text);



            if (pagoMonto > montoPendiente)
            {
                txtPagaMonto.Text = txtMontoAPagar.Text;
                pagoMonto         = double.Parse(txtPagaMonto.Text);
            }
            if (pagoIntereses > montoIntereses)
            {
                txtPagaInteres.Text = txtInteresAPagar.Text;
                pagoIntereses       = double.Parse(txtPagaInteres.Text);
            }

            empeño = null;
            var empeñoTemp = _context.Empenos.Find(empeñoId);

            if ((pagoMonto > 0 && pagoMonto < montoPendiente) && (pagoIntereses < montoMinimo - 1))
            {
                MessageBox.Show("Para abonar a la prenda debe pagar todos los intereses pendientes de " + montoMinimo.ToString("N2"), "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            if (pagoMonto > 0)
            {
                var pago = new Pago
                {
                    EmpenoId    = empeñoTemp.EmpenoId,
                    Consecutivo = GetConsecutivo(),
                    Comentario  = txtComentario.Text == "Comentario" ? string.Empty : txtComentario.Text,
                    EmpleadoId  = Program.EmpleadoId,
                    Fecha       = DateTime.Now,
                    Monto       = pagoMonto,
                    TipoPago    = TipoPago.Principal,
                };

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

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

                empeñoTemp.MontoPendiente -= pago.Monto;

                if (empeñoTemp.MontoPendiente < 1)
                {
                    var pagoInteres = await SetPagaInteres(pagoIntereses, false);

                    empeñoTemp.Estado      = Estado.Cancelado;
                    empeñoTemp.Retirado    = true;
                    empeñoTemp.FechaRetiro = DateTime.Today;
                    _context.Intereses.RemoveRange(_context.Intereses.Where(i => i.EmpenoId == empleadoId && i.Pagado == 0));
                    _context.Entry(empeñoTemp).State = EntityState.Modified;
                    await _context.SaveChangesAsync();

                    if (pagoInteres == null)
                    {
                        await PrintRetiro(empeñoTemp, pago);
                    }
                    else
                    {
                        await PrintRetiro(empeñoTemp, pago, pagoInteres);
                    }
                }
                else
                {
                    empeñoTemp.Estado = Estado.Vigente;
                    _context.Entry(empeñoTemp).State = EntityState.Modified;
                    await _context.SaveChangesAsync();
                    await PagaInteres(pagoIntereses, true);
                    await PrintAbono(empeñoTemp, pago);
                }
            }
            else
            {
                await PagaInteres(pagoIntereses, true);
            }

            await _context.SaveChangesAsync();

            this.Close();
        }