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; }