Example #1
0
        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);
            }
        }
Example #2
0
        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
            }
                        ));
        }
Example #3
0
        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
            }
                        ));
        }