public SystemValidationModel Confirmar(RecibosEditViewModel viewModel)
        {
            var recibo = GetById(viewModel.Id);

            recibo.Estado = Constants.EstadoRecibo.Pagado;
            if (viewModel.PagoRecibo.Cambio != 0)
            {
                recibo.Cambio = viewModel.PagoRecibo.Cambio;
            }
            _context.Entry(recibo).State = EntityState.Modified;
            var reciboCuotaIds    = recibo.Cuotas.Select(x => x.Id);
            var cuotasIds         = viewModel.Cuotas.Select(x => x.CuotaId).ToList();
            var cuotasToDeleteIds = reciboCuotaIds.Except(cuotasIds).ToList();
            var cuotasToAdd       = cuotasIds.Except(reciboCuotaIds).ToList();
            var cuotas            = _context.Set <Cuota>().Where(x => x.Active && x.VentaId == viewModel.Venta.VentaId).ToList();
            var cuotasToConfirm   = cuotas.Where(x => x.Active && (cuotasToAdd.Contains(x.Id) || (x.ReciboId == viewModel.Id && !cuotasToDeleteIds.Contains(x.Id)))).ToList();

            SaveDetalleCaja(recibo, viewModel);
            DisminuirSaldoCliente(recibo);
            var cuotasToDelete = _context.Set <Cuota>().Where(x => x.Active && cuotasToDeleteIds.Contains(x.Id)).ToList();

            foreach (var cuota in cuotasToConfirm)
            {
                cuota.Estado = Constants.EstadoCuota.Pagado;
                if (cuota.ReciboId == null)
                {
                    recibo.Cuotas.Add(cuota);
                }
                _context.Entry(cuota).State = EntityState.Modified;
            }

            foreach (var cuota in cuotasToDelete)
            {
                cuota.Recibo = null;
                _context.Entry(cuota).State = EntityState.Modified;
            }

            var venta       = _context.Set <Venta>().FirstOrDefault(x => x.Id == viewModel.Venta.VentaId);
            var totalCuotas = cuotas.Where(x => x.Estado == Constants.EstadoCuota.Pagado).Sum(x => x.Monto);

            if (venta.MontoTotal == totalCuotas)
            {
                venta.Estado = Constants.EstadoVenta.Pagado;
                _context.Entry(venta).State = EntityState.Modified;
            }

            var success    = _context.SaveChanges() > 0;
            var validation = new SystemValidationModel()
            {
                Id      = recibo.Id,
                Message = success ? "Se ha confirmado correctamente el recibo" : "No se pudo confirmado el recibo",
                Success = success
            };

            return(validation);
        }
        private void SaveDetalleCaja(Recibo recibo, RecibosEditViewModel viewModel)
        {
            var cajaAperturaCierreDetalle = new DetalleCajaAperturaCierre()
            {
                CajaAperturaCierreId = viewModel.CajaAperturaCierreId,
                Monto         = recibo.MontoTotal,
                Cambio        = recibo.Cambio,
                TipoOperacion = Constants.TipoCajaAperturaCierreOperacion.Recibo
            };

            _context.Entry(cajaAperturaCierreDetalle).State = EntityState.Added;
        }