public async Task <IActionResult> PutEntradaContable(int id, EntradaContable entradaContable)
        {
            if (id != entradaContable.Id)
            {
                return(BadRequest());
            }

            _context.Entry(entradaContable).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!EntradaContableExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <ActionResult <EntradaContable> > PostEntradaContable(EntradaContable entradaContable)
        {
            //fecha automatica by ignacio
            entradaContable.Fecha = DateTime.Now;

            //moneda automatica
            entradaContable.MonedaId = (entradaContable.MonedaId > 0) ? entradaContable.MonedaId : 1;
            var moneda = await _context.Moneda.FindAsync(entradaContable.MonedaId);

            if (!ValidCreditsAndDebitsAmounts(entradaContable))
            {
                return(BadRequest("Esta entrada contable está descuadrada."));
            }

            if (!ValidMoveTypes(entradaContable))
            {
                return(BadRequest("Esta entrada contable le hace falta un débito o crédito."));
            }

            //monto automatica by ignacio
            entradaContable.Monto = (entradaContable.Monto > 0) ?
                                    entradaContable.Monto :
                                    entradaContable.DetalleEntradaContable.Sum(d => d.Monto) * moneda.Tasa;

            _context.EntradaContable.Add(entradaContable);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetEntradaContable", new { id = entradaContable.Id }, entradaContable));
        }
        private bool ValidMoveTypes(EntradaContable entradaContable)
        {
            if (entradaContable != null && entradaContable.DetalleEntradaContable?.Count > 0)
            {
                int?cantidadDbs = entradaContable.DetalleEntradaContable?.Where(d => d.TipoMovimiento == "DB")?.Count();
                int?cantidadCds = entradaContable.DetalleEntradaContable?.Where(d => d.TipoMovimiento == "CR")?.Count();

                if ((cantidadDbs != null && cantidadDbs >= 1) && (cantidadCds != null && cantidadCds >= 1))
                {
                    return(true);
                }

                return(false);
            }

            return(false);
        }
        private bool ValidCreditsAndDebitsAmounts(EntradaContable entrada)
        {
            if (entrada != null && entrada.DetalleEntradaContable?.Count > 0)
            {
                double?montosDbs = entrada.DetalleEntradaContable?.Where(d => d.TipoMovimiento == "DB")?.Sum(d => d.Monto);
                double?montosCrs = entrada.DetalleEntradaContable?.Where(d => d.TipoMovimiento == "CR")?.Sum(d => d.Monto);

                if (montosCrs < montosDbs)
                {
                    return(false);
                }

                return(true);
            }

            return(false);
        }