private void createLogs(IngresoEgresosCajaViewModel iECajaViewModel, string action) { var detalle = "\r\n=======" + action + "=>" + DateTime.Now.ToString(); string json = JsonConvert.SerializeObject(iECajaViewModel); using (StreamWriter writer = new StreamWriter(settings.url + iECajaViewModel.master.NumRecibo + ".txt", true)){ writer.Write(detalle + "\r\n" + json); } }
public async Task <IActionResult> Edit(IngresoEgresosCajaViewModel iECajaViewModel) { if (settings.readLog) { createLogs(iECajaViewModel, "Edit"); } var user = this.GetServiceUser(); if (user.description.Contains("2017") && iECajaViewModel.master.FechaProceso.Year != 2017) { return(BadRequest("El usuario solo puede registrar información para el año 2017")); } var recibos = db.IngresosEgresosCaja.Find(iECajaViewModel.master.Id); if (recibos.EstadoId == (short)IngresosEgresosCajaEstado.Anulado) { return(BadRequest($"No se puede editar el recibo {recibos.NumRecibo.PadLeft(10, '0')} ya que está anulado")); } var ingresosEgresosCaja = iECajaViewModel.master; recibos.FechaProceso = ingresosEgresosCaja.FechaProceso; recibos.NoOrdenPago = ingresosEgresosCaja.NoOrdenPago; recibos.TipoMonedaId = ingresosEgresosCaja.TipoMonedaId; recibos.TipoIngresoId = ingresosEgresosCaja.TipoIngresoId; recibos.ClienteId = ingresosEgresosCaja.ClienteId; recibos.TipoCleinteId = ingresosEgresosCaja.TipoCleinteId; recibos.Beneficiario = ingresosEgresosCaja.Beneficiario; recibos.Muestra = ingresosEgresosCaja.Muestra; recibos.Concepto = ingresosEgresosCaja.Concepto; recibos.UsernameEditado = user.username; recibos.FechaEditado = DateTime.Now; recibos.NoSerie = ingresosEgresosCaja.NoSerie; var totalServicioDolar = iECajaViewModel.details.Sum(s => s.montodolar); var totalPagoDolar = iECajaViewModel.referencias.Sum(p => p.totalD); if (Math.Round(totalServicioDolar, 4) != Math.Round(totalPagoDolar, 4)) { return(BadRequest(string.Format($"El total cobrado por los servicios ({Math.Round(totalServicioDolar, 4)}) no conicide con el total pagado {Math.Round(totalPagoDolar, 4)}"))); } var oldDetalles = db.IngresosEgresosCajaDetalle.Where(d => d.ReciboId == recibos.Id); db.IngresosEgresosCajaDetalle.RemoveRange(oldDetalles); foreach (var item in iECajaViewModel.details) { if (item.cantidad <= 0) { return(BadRequest(string.Format($"El cantidad para el servicio de la cuenta 1000{item.cta_cuenta}, no puede ser 0"))); } if (item.precio == 0) { return(BadRequest(string.Format($"El precio para el servicio de la cuenta 1000{item.cta_cuenta}, no puede ser 0"))); } decimal _montoDolar = Convert.ToDecimal(item.precio * item.cantidad); recibos.IngresosEgresosCajaDetalle.Add(new IngresosEgresosCajaDetalle { Cantidad = item.cantidad, CtaContable = $"1000{item.cta_cuenta}", Precio = item.precio, Montodolar = _montoDolar, ReciboId = recibos.Id }); } var oldReferencias = db.IngresosEgresosCajaReferencias.Where(d => d.ReciboId == recibos.Id); if (oldReferencias.Any(x => x.Procesado)) { return(BadRequest(string.Format($"El movimiento ya tiene proceso de conciliacion, por lo tanto no se puede editar"))); } db.IngresosEgresosCajaReferencias.RemoveRange(oldReferencias); var totalPagoCordoba = iECajaViewModel.referencias.Sum(p => p.totalC); if (recibos.TipoMonedaId == (short)TipoMonedaParamFilter.Cordoba) { recibos.Total = totalPagoCordoba; } if (recibos.TipoMonedaId == (short)TipoMonedaParamFilter.Dolar) { recibos.Total = totalPagoDolar; } foreach (var referencia in iECajaViewModel.referencias) { if (settings.onlyNumber) { if (referencia.Referencia.Any(r => !char.IsNumber(r))) { return(BadRequest(string.Format($"La referencia {referencia.Referencia} debe ser númerica"))); } } if (referencia.TipoPagoId == (short)TipoPagoParamFilter.None) { return(BadRequest(string.Format("Debe seleccionar un tipo de pago válido"))); } if (referencia.TipoPagoId == (short)TipoPagoParamFilter.Minuta || referencia.TipoPagoId == (short)TipoPagoParamFilter.Transferencia || referencia.TipoPagoId == (short)TipoPagoParamFilter.Cheque) { if (referencia.Referencia.Trim().Length == 0) { return(BadRequest(string.Format("Debe de ingresar la referencia para la forma de pago cheque, minuta o transferencia"))); } if (referencia.IdBanco == null || referencia.IdBanco == 0) { return(BadRequest(string.Format("Debe de ingresar el banco para la forma de pago cheque, minuta o transferencia"))); } } var _CambioOficial = db.CambioOficial.Find(referencia.Fecha); if (_CambioOficial == null) { return(NotFound(string.Format("No se encontró la tasa de cambio para la fecha {0} de la referencia {1}", referencia.Fecha, referencia.Referencia))); } if (_CambioOficial.Dolares != referencia.TipoCambioManual && !user.roles.Contains((int)Roles.CambiarTasa)) { return(NotFound(string.Format("No tiene permisos para modificar la tasa de cambio, solicite el permiso de cambiar tasa de cambio", referencia.Fecha, referencia.Referencia))); } var tasaOficial = referencia.TipoCambioManual; recibos.IngresosEgresosCajaReferencias.Add(new IngresosEgresosCajaReferencias { ReciboId = recibos.Id, MontoEfectivo = referencia.MontoEfectivo, MontoMinu = referencia.MontoMinu, MontoCheq = referencia.MontoCheq, MontoTrans = referencia.MontoTrans, Total = (referencia.MontoEfectivo + referencia.MontoMinu + referencia.MontoCheq + referencia.MontoTrans), Fecha = referencia.Fecha, TipoCambio = tasaOficial, Referencia = referencia.Referencia, IdBanco = referencia.IdBanco, TipoPagoId = referencia.TipoPagoId, Procesado = false }); } recibos.Referencias = (short)iECajaViewModel.referencias.Count(); try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(BadRequest()); } catch (Exception ex) { return(BadRequest(ex.Message)); } return(Json(recibos, new JsonSerializerSettings { MaxDepth = 1, ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore } )); }
public async Task <IActionResult> Create(IngresoEgresosCajaViewModel iECajaViewModel) { if (settings.readLog) { createLogs(iECajaViewModel, "Create"); } var user = this.GetServiceUser(); if (user.description.Contains("2017") && iECajaViewModel.master.FechaProceso.Year != 2017) { return(BadRequest("El usuario solo puede registrar información para el año 2017")); } var ingresosEgresosCaja = iECajaViewModel.master; if (iECajaViewModel.master.FechaProceso.Year < 2016) { return(BadRequest("No se pueden registrar recibos menor a la fecha 01/01/2017")); } //Numero de recibo actual var lote = db.LoteRecibos.Where(lt => lt.CajaId == user.cajaid).FirstOrDefault(); ingresosEgresosCaja.NumRecibo = (lote.Actual + 1).ToString().PadLeft(10, '0'); lote.Actual = lote.Actual + 1; //var oldRecibo = db.IngresosEgresosCaja.Where(x=>x.NumRecibo == ingresosEgresosCaja.NumRecibo && x.CajaId == user.cajaid).FirstOrDefault(); //if(oldRecibo != null){ // return BadRequest("Ya existe un recibo con el numero " + ingresosEgresosCaja.NumRecibo + " para la caja " + user.description); //} ingresosEgresosCaja.TipoMovimientoId = 32; ingresosEgresosCaja.EstadoId = 1; ingresosEgresosCaja.FechaRegistro = DateTime.Now; ingresosEgresosCaja.CajaId = user.cajaid; ingresosEgresosCaja.Username = user.username; var totalServicioDolar = iECajaViewModel.details.Sum(s => s.montodolar); var totalPagoDolar = iECajaViewModel.referencias.Sum(p => p.totalD); if (Math.Round(totalServicioDolar, 4) != Math.Round(totalPagoDolar, 4)) { return(BadRequest(string.Format($"El total cobrado por los servicios ({Math.Round(totalServicioDolar, 4)}) no conicide con el total pagado {Math.Round(totalPagoDolar, 4)}"))); } var totalPagoCordoba = iECajaViewModel.referencias.Sum(p => p.totalC); if (iECajaViewModel.master.TipoMonedaId == (short)TipoMonedaParamFilter.Cordoba) { ingresosEgresosCaja.Total = totalPagoCordoba; } if (iECajaViewModel.master.TipoMonedaId == (short)TipoMonedaParamFilter.Dolar) { ingresosEgresosCaja.Total = totalPagoDolar; } foreach (var item in iECajaViewModel.details) { //Permitir valores en negativo if (item.cantidad <= 0) { return(BadRequest(string.Format($"El monto o la cantidad para el servicio de la cuenta 1000{item.cta_cuenta}, no puede ser 0"))); } var _montoDolar = item.precio * item.cantidad; ingresosEgresosCaja.IngresosEgresosCajaDetalle.Add(new IngresosEgresosCajaDetalle { Cantidad = item.cantidad, CtaContable = $"1000{item.cta_cuenta}", Precio = item.precio, Montodolar = _montoDolar, ReciboId = ingresosEgresosCaja.Id }); } foreach (var referencia in iECajaViewModel.referencias) { if (settings.onlyNumber) { if (referencia.Referencia.Any(r => !char.IsNumber(r))) { return(BadRequest(string.Format($"La referencia {referencia.Referencia} debe ser númerica"))); } } if (referencia.TipoPagoId == (short)TipoPagoParamFilter.None) { return(BadRequest(string.Format("Debe seleccionar un tipo de pago válido"))); } if (referencia.TipoPagoId == (short)TipoPagoParamFilter.Minuta || referencia.TipoPagoId == (short)TipoPagoParamFilter.Transferencia || referencia.TipoPagoId == (short)TipoPagoParamFilter.Cheque) { if (referencia.Referencia == null || referencia.Referencia.Trim().Length == 0) { return(BadRequest(string.Format("Debe de ingresar la referencia para la forma de pago cheque, minuta o transferencia"))); } if (referencia.IdBanco == null || referencia.IdBanco == 0) { return(BadRequest(string.Format("Debe de ingresar el banco para la forma de pago cheque, minuta o transferencia"))); } } var _CambioOficial = db.CambioOficial.Find(referencia.Fecha); if (_CambioOficial == null) { return(NotFound(string.Format("No se encontró la tasa de cambio para la fecha {0} de la referencia {1}", referencia.Fecha, referencia.Referencia))); } if (_CambioOficial.Dolares != referencia.TipoCambioManual && !user.roles.Contains((int)Roles.CambiarTasa)) { return(NotFound(string.Format("No tiene permisos para modificar la tasa de cambio, solicite el permiso de cambiar tasa de cambio", referencia.Fecha, referencia.Referencia))); } var tasaOficial = referencia.TipoCambioManual; ingresosEgresosCaja.IngresosEgresosCajaReferencias.Add(new IngresosEgresosCajaReferencias { ReciboId = ingresosEgresosCaja.Id, MontoEfectivo = referencia.MontoEfectivo, MontoMinu = referencia.MontoMinu, MontoCheq = referencia.MontoCheq, MontoTrans = referencia.MontoTrans, Total = (referencia.MontoEfectivo + referencia.MontoMinu + referencia.MontoCheq + referencia.MontoTrans), Fecha = referencia.Fecha, TipoCambio = tasaOficial, Referencia = referencia.Referencia, IdBanco = referencia.IdBanco, TipoPagoId = referencia.TipoPagoId, Procesado = false }); } ingresosEgresosCaja.Referencias = (short)ingresosEgresosCaja.IngresosEgresosCajaReferencias.Count(); db.Add(ingresosEgresosCaja); try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(BadRequest()); } return(Json(ingresosEgresosCaja, new JsonSerializerSettings { MaxDepth = 1, ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore } )); }