Esempio n. 1
0
        public IActionResult SaveAuxiliarAndIngresosEgresos(ConciliacionViewModel conciliacionViewModel)
        {
            var procesoBancoServices = new ProcesoBancoServices(db);
            var procesoBanco         = procesoBancoServices.Find(conciliacionViewModel.BancoCuenta, conciliacionViewModel.Year, conciliacionViewModel.Month);

            if (procesoBanco == null)
            {
                return(BadRequest($"No se encontro el proceso para el banco {conciliacionViewModel.BancoCuenta} del año {conciliacionViewModel.Year} y mes {conciliacionViewModel.Month}"));
            }

            var id = procesoBanco.Id;

            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,
                    ProcesoBancoId   = id
                });
            }

            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,
                    ProcesoBancoId   = id
                });
            }

            var oldProcesoBanco = db.ProcesoBanco.Find(id);

            oldProcesoBanco.ConciliacionBancaria    = ecs;
            oldProcesoBanco.ConciliacionBancariaAux = auxs;
            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());
        }