Exemple #1
0
        public async Task <IActionResult> update(int BancoCuenta, [Bind("BancoCuenta,SaldoInicial,Fecha")] ProcesoBanco procesoBanco)
        {
            var user = this.GetServiceUser();
            var procesoBancoSesrvices = new ProcesoBancoServices(db);

            var Existe = procesoBancoSesrvices.ExistSaldoIncial(BancoCuenta);

            if (Existe)
            {
                var oldProcesoBanco = db.ProcesoBanco.Where(b => b.BancoCuenta == BancoCuenta && b.TipoProcesoId == (int)TipoProcesos.SaldoInicial).FirstOrDefault();
                if (procesoBanco.SaldoInicial != 0)
                {
                    oldProcesoBanco.SaldoInicial = procesoBanco.SaldoInicial;
                }

                if (procesoBanco.Fecha > DateTime.MinValue)
                {
                    oldProcesoBanco.Fecha = new DateTime(procesoBanco.Fecha.Year, procesoBanco.Fecha.Month, 1);
                }

                db.SaveChanges();
            }
            else
            {
                var newProcesoBanco = new ProcesoBanco
                {
                    BancoCuenta     = BancoCuenta,
                    SaldoInicial    = procesoBanco.SaldoInicial,
                    SaldoFinal      = 0,
                    Fecha           = procesoBanco.Fecha,
                    Username        = user.username,
                    FechaRegistrado = DateTime.Now,
                    TipoProcesoId   = (int)TipoProcesos.SaldoInicial
                };

                db.ProcesoBanco.Add(newProcesoBanco);
                db.SaveChanges();
            }

            return(Ok());
        }
        public IActionResult SaveAuxiliarAndIngresosEgresos(ConciliacionViewModel conciliacionViewModel)
        {
            var usr = this.GetServiceUser();

            var info = DbIpsa.BancosCuentas.Include(b => b.Banco).Where(bc => bc.BancoCuenta == conciliacionViewModel.BancoCuenta).ToList();

            if (info == null)
            {
                return(BadRequest("No se encontró el banco"));
            }

            var accountInfo = from i in info
                              join m in db.TipoMoneda on i.Moneda equals m.Id
                              select new AccountDescription
            {
                BancoId     = i.Bancoid,
                Banco       = i.Banco.Descripcion,
                MonedaId    = i.Moneda.Value,
                Moneda      = m.Descripcion,
                Sucursal    = i.NombreSucursal,
                Cuenta      = i.CtaContable,
                Descripcion = i.Descripcion,
                BancoCuenta = i.BancoCuenta
            };

            var _BancosCuentas = accountInfo.FirstOrDefault();

            var procesoBancoServices = new ProcesoBancoServices(db);

            var existeSaldoInicial = procesoBancoServices.ExistSaldoIncial(conciliacionViewModel.BancoCuenta);

            if (!existeSaldoInicial)
            {
                return(BadRequest($"No se encontró el proceso inicial para el banco {conciliacionViewModel.BancoCuenta} del año {conciliacionViewModel.Year} y mes {conciliacionViewModel.Month}"));
            }

            var procesoBanco = procesoBancoServices.Find(conciliacionViewModel.BancoCuenta, conciliacionViewModel.Year, conciliacionViewModel.Month);

            if (procesoBanco.Exist() && !procesoBanco.IsInitialBalance())
            {
                return(BadRequest($"Ya se concilio el mes de {HelperExtensions.NombreDelMes(conciliacionViewModel.Month)} para el año {conciliacionViewModel.Year} de la cuenta {conciliacionViewModel.BancoCuenta}"));
            }

            //Verificar que existe un preceso en el mes anterior
            var validate = procesoBancoServices.VerificarProcesoAnterio(_BancosCuentas, conciliacionViewModel.Year, conciliacionViewModel.Month);

            if (!validate.successed)
            {
                return(BadRequest(validate.Error));
            }

            decimal saldoAnterior = validate.saldoAnterior;

            var auxs = new List <ConciliacionBancariaAux>();

            foreach (var aux in conciliacionViewModel.conciliacionBancariaAux)
            {
                auxs.Add(new ConciliacionBancariaAux
                {
                    Fecha            = aux.Fecha,
                    Referencia       = aux.Referencia,
                    TipoMovimientoId = aux.TipoMovimientoId,
                    Debito           = aux.Debito,
                    Credito          = aux.Credito,
                    EstadoId         = aux.EstadoId,
                    Uuid             = aux.Uuid,
                    Conciliado       = string.IsNullOrEmpty(aux.Uuid) ? false : true,
                    TableInfo        = aux.TableInfo,
                    IdOrigen         = aux.IdOrigen,
                    IdRef            = aux.IdRef
                });
            }

            var ecs = new List <ConciliacionBancaria>();

            foreach (var ec in conciliacionViewModel.conciliacionBancaria)
            {
                ecs.Add(new ConciliacionBancaria
                {
                    Fecha            = ec.Fecha,
                    Referencia       = ec.Referencia,
                    TipoMovimientoId = ec.TipoMovimientoId,
                    Debito           = ec.Debito,
                    Credito          = ec.Credito,
                    EstadoId         = ec.EstadoId,
                    Uuid             = ec.Uuid,
                    Conciliado       = string.IsNullOrEmpty(ec.Uuid) ? false : true
                });
            }

            if (procesoBanco.Exist() && procesoBanco.IsInitialBalance())
            {
                procesoBanco.ConciliacionBancaria    = ecs;
                procesoBanco.ConciliacionBancariaAux = auxs;
                procesoBanco.SaldoFinal = procesoBanco.SaldoInicial + ecs.Sum(x => x.Credito) - ecs.Sum(x => x.Debito);
            }
            else if (!procesoBanco.Exist())
            {
                var newProcesoBanco = new ProcesoBanco
                {
                    BancoCuenta             = conciliacionViewModel.BancoCuenta,
                    Fecha                   = new DateTime(conciliacionViewModel.Year, conciliacionViewModel.Month, 1),
                    SaldoInicial            = saldoAnterior,
                    SaldoFinal              = saldoAnterior + ecs.Sum(x => x.Credito) - ecs.Sum(x => x.Debito),
                    Username                = usr.username,
                    FechaRegistrado         = DateTime.Now,
                    TipoProcesoId           = (int)TipoProcesos.Movimientos,
                    ConciliacionBancaria    = ecs,
                    ConciliacionBancariaAux = auxs
                };
            }
            var iecData = conciliacionViewModel.conciliacionBancariaAux.Where(x => x.TableInfo == 1).Select(x => x.IdOrigen).ToArray();
            var ingresosCajaReferencias = db.IngresosEgresosCajaReferencias.Where(f => iecData.Contains(f.Id)).ToList();

            if (ingresosCajaReferencias.Count > 0)
            {
                ingresosCajaReferencias.ForEach(a => a.Procesado = string.IsNullOrEmpty(conciliacionViewModel.conciliacionBancariaAux.Where(x => x.IdOrigen == a.Id && x.TableInfo == 1).FirstOrDefault().Uuid) ? false : true);
            }

            var iebData       = conciliacionViewModel.conciliacionBancariaAux.Where(x => x.TableInfo == 2).Select(x => x.IdOrigen).ToArray();
            var ingresosBanco = db.IngresosEgresosBanco.Where(f => iebData.Contains(f.Id)).ToList();

            if (ingresosBanco.Count > 0)
            {
                ingresosBanco.ForEach(a => a.Procesado = string.IsNullOrEmpty(conciliacionViewModel.conciliacionBancariaAux.Where(x => x.IdOrigen == a.Id && x.TableInfo == 2).FirstOrDefault().Uuid) ? false : true);
            }

            db.SaveChanges();

            return(Ok());
        }
 /// <summary>
 /// Verifica si es saldo inicial el proceso
 /// </summary>
 /// <param name="procesoBanco"></param>
 /// <returns></returns>
 internal static bool IsInitialBalance(this ProcesoBanco procesoBanco)
 {
     return(procesoBanco.TipoProcesoId == 1);
 }
 /// <summary>
 /// Verifica si tiene saldo final el proceso
 /// </summary>
 /// <param name="procesoBanco"></param>
 /// <returns></returns>
 internal static bool IsClosed(this ProcesoBanco procesoBanco)
 {
     return(procesoBanco.SaldoFinal > 0);
 }
 internal static bool Exist(this ProcesoBanco procesoBanco)
 {
     return(procesoBanco.BancoCuenta > 0);
 }