public JsonResult ObtenerListadoCartolas()
        {
            string                 UserID     = User.Identity.GetUserId();
            FacturaPoliContext     db         = ParseExtensions.GetDatabaseContext(UserID);
            ClientesContablesModel objCliente = PerfilamientoModule.GetClienteContableSeleccionado(Session, UserID, db);

            var ListaCartola = CartolaBancariaMacroModel.GetListaCartola(db, objCliente);

            StringBuilder optionSelect = new StringBuilder();

            bool Result = false;

            if (ListaCartola.Count() > 0)
            {
                optionSelect.Append("<option> Selecciona </option>");
                foreach (var itemCartola in ListaCartola)
                {
                    optionSelect.Append("<option value=\"" + itemCartola.CartolaBancariaMacroModelID + "\">" + "<b>Numero:</b> " + itemCartola.NumeroCartola + " " + "<b>Fecha:</b>  " + ParseExtensions.ToDD_MM_AAAA(itemCartola.FechaCartola) + "</option>");
                }
            }
            else
            {
                optionSelect.Append("<option>No existen cartolas importadas</option>");
            }


            return(Json(new
            {
                ok = Result,
                selectInput = optionSelect.ToString()
            }, JsonRequestBehavior.AllowGet));
        }
    //public static List<ObjCartolaYVouchers> ConvertirAObjetoCartola(List<string[]> Cartola/*, string NombreCtaCont*/)
    //{
    //    List<ObjCartolaYVouchers> LstObjCartolaAutomatica = new List<ObjCartolaYVouchers>();

    //    if(Cartola.Count() > 1)
    //    {
    //        Cartola.RemoveAt(0);
    //        foreach (var itemCartola in Cartola)
    //        {
    //            if (itemCartola.All(x => string.IsNullOrWhiteSpace(x)))
    //            {
    //                continue;
    //            }
    //            else
    //            {
    //                //Datos Cartola
    //                ObjCartolaYVouchers ObjCartolaAutomatica = new ObjCartolaYVouchers();
    //                ObjCartolaAutomatica.Fecha = ParseExtensions.ToDD_MM_AAAA_Multi(itemCartola[0]);
    //                ObjCartolaAutomatica.Docum = Convert.ToInt32(itemCartola[1]);
    //                ObjCartolaAutomatica.Detalle = itemCartola[2];
    //                ObjCartolaAutomatica.Debe = Convert.ToDecimal(itemCartola[3]);
    //                ObjCartolaAutomatica.Haber = Convert.ToDecimal(itemCartola[4]);
    //                ObjCartolaAutomatica.Saldo = Convert.ToDecimal(itemCartola[5]);

    //                //Datos Voucher
    //                ObjCartolaAutomatica.CodigoInterno = itemCartola[6];
    //                ObjCartolaAutomatica.Rut = itemCartola[7];
    //                ObjCartolaAutomatica.Glosa = itemCartola[8];

    //                LstObjCartolaAutomatica.Add(ObjCartolaAutomatica);
    //            }

    //        }
    //    }


    //    return LstObjCartolaAutomatica;
    //}

    public static CartolaBancariaMacroModel GetCartolaById(FacturaPoliContext db, ClientesContablesModel ObjCliente, int id)
    {
        CartolaBancariaMacroModel ReturnValues = new CartolaBancariaMacroModel();

        ReturnValues = db.DBCartolaBMacro.Include("CartolaDetalle").Where(x => x.ClientesContablesModelID.ClientesContablesModelID == ObjCliente.ClientesContablesModelID).FirstOrDefault();

        return(ReturnValues);
    }
        public ActionResult ListaCartolaBancaria()
        {
            string                 UserID     = User.Identity.GetUserId();
            FacturaPoliContext     db         = ParseExtensions.GetDatabaseContext(UserID);
            ClientesContablesModel objCliente = PerfilamientoModule.GetClienteContableSeleccionado(Session, UserID, db);

            var ListaCartola = CartolaBancariaMacroModel.GetListaCartola(db, objCliente);

            return(View(ListaCartola));
        }
        public ActionResult EjecutarConciliacion(ComparacionConciliacionBancariaViewModel DatosConciliacion)
        {
            string                 UserID     = User.Identity.GetUserId();
            FacturaPoliContext     db         = ParseExtensions.GetDatabaseContext(UserID);
            ClientesContablesModel objCliente = PerfilamientoModule.GetClienteContableSeleccionado(Session, UserID, db);

            CuentaContableModel CuentaConsultada = ParseExtensions.ObtenerCuentaDesdeId(DatosConciliacion.IdCuentaContable, objCliente);

            var Reporte = new ReporteResultadoConciliacion();
            var DatosConciliacionActualizados = CartolaBancariaModel.ConciliarSiSePuede(DatosConciliacion, db, objCliente);
            var ActualizarTablas    = CartolaBancariaMacroModel.ActualizarEstadosConciliacion(db, objCliente, DatosConciliacionActualizados.Item2, CuentaConsultada, DatosConciliacionActualizados.Item1.IdCartola);
            var ReporteConciliacion = CartolaBancariaModel.calcularReporteConciliacionManual(DatosConciliacionActualizados.Item1.lstCartola, DatosConciliacionActualizados.Item1.lstLibroMayor);

            return(View(ReporteConciliacion));
        }
    public static bool GuardarCartolaBancariaManual(List <CartolaBancariaModel> LstCartolaAGuardar, string FechaCartola, int NumeroCartola, ClientesContablesModel ObjCliente, FacturaPoliContext db)
    {
        bool Result = false;

        decimal TotalCartola = Math.Abs(LstCartolaAGuardar.Sum(x => x.Haber) - LstCartolaAGuardar.Sum(x => x.Debe));

        CartolaBancariaMacroModel CartolaBancariaMacro = new CartolaBancariaMacroModel();

        CartolaBancariaMacro.FechaCartola             = ParseExtensions.ToDD_MM_AAAA_Multi(FechaCartola);
        CartolaBancariaMacro.ClientesContablesModelID = ObjCliente;
        CartolaBancariaMacro.NumeroCartola            = NumeroCartola;
        CartolaBancariaMacro.TotalCartola             = TotalCartola;
        CartolaBancariaMacro.CartolaDetalle           = LstCartolaAGuardar;

        db.DBCartolaBMacro.Add(CartolaBancariaMacro);
        db.SaveChanges();
        Result = true;

        return(Result);
    }
        public ActionResult ImportarCartolaBancariaManual(ObjCartolaMacro DataCartola)
        {
            string                 UserID     = User.Identity.GetUserId();
            FacturaPoliContext     db         = ParseExtensions.GetDatabaseContext(UserID);
            ClientesContablesModel objCliente = PerfilamientoModule.GetClienteContableSeleccionado(Session, UserID, db);

            CartolaBancariaMacroModel   CartolaMacro      = new CartolaBancariaMacroModel();
            List <CartolaBancariaModel> LstDetalleCartola = new List <CartolaBancariaModel>();
            bool Result = false;

            bool SiExiste = CartolaBancariaMacroModel.ExistenRepetidos(ParseExtensions.ToDD_MM_AAAA_Multi(DataCartola.FechaCartola), DataCartola.NumeroCartola, db, objCliente);

            if (SiExiste)
            {
                TempData["Error"] = "La cartola que se intenta importar ya existe.";
                RedirectToAction("ConciliacionBancaria", "ContabilidadConciliacionBancaria");
            }
            if (DataCartola.files != null && DataCartola.files.ContentLength > 0)
            {
                var CartolaPura = CartolaBancariaMacroModel.DeExcelAObjetoCartolaYVoucher(DataCartola.files);
                //var CartolaPura = CartolaBancariaModel.DeExcelACartolaBancaria(DataCartola.files, db);
                LstDetalleCartola = CartolaBancariaModel.ObtenerCartolaBancariaManual(CartolaPura, objCliente);
                Result            = CartolaBancariaMacroModel.GuardarCartolaBancariaManual(LstDetalleCartola, DataCartola.FechaCartola, DataCartola.NumeroCartola, objCliente, db);

                if (Result == true)
                {
                    TempData["Correcto"] = "Cartola Importada con éxito.";
                }
                else
                {
                    TempData["Error"] = "Hubo un error al importar la cartola.";
                }
            }
            else
            {
                TempData["Error"] = "No hay datos para importar";
            }

            return(RedirectToAction("ConciliacionBancaria", "ContabilidadConciliacionBancaria"));
        }
    public static bool GuardarCartolaBancaria(List <CartolaBancariaModel> LstCartolaConInfo /*, List<CartolaBancariaModel> LstCartolaSinInfo*/, string FechaCartola, int NumeroCartola, CuentaContableModel CuentaConsultada, ClientesContablesModel ObjCliente, FacturaPoliContext db)
    {
        bool Result = false;

        List <CartolaBancariaModel> CartolaBancariaCompleta = new List <CartolaBancariaModel>();

        CartolaBancariaCompleta.AddRange(LstCartolaConInfo);

        CartolaBancariaMacroModel CartolaBancariaMacro = new CartolaBancariaMacroModel();

        CartolaBancariaMacro.FechaCartola             = ParseExtensions.ToDD_MM_AAAA_Multi(FechaCartola);
        CartolaBancariaMacro.ClientesContablesModelID = ObjCliente;
        CartolaBancariaMacro.CuentaContableModelID    = CuentaConsultada;
        CartolaBancariaMacro.NumeroCartola            = NumeroCartola;
        CartolaBancariaMacro.CartolaDetalle           = CartolaBancariaCompleta;

        db.DBCartolaBMacro.Add(CartolaBancariaMacro);
        db.SaveChanges();
        Result = true;

        return(Result);
    }
    public static bool ActualizarEstadosConciliacion(FacturaPoliContext db, ClientesContablesModel ObjCliente, List <RelacionadosYConciliados> DatosConciliacion, CuentaContableModel CuentaConsultada, int IdCartola)
    {
        //Se actualiza la tabla DetalleVoucher && CartolaBancaria.
        bool       Result = false;
        List <int> IdsDetalleAactualizar = DatosConciliacion.Select(x => x.IdDetalle).ToList();

        List <DetalleVoucherModel> DetalleEncontrados = db.DBDetalleVoucher.Where(x => IdsDetalleAactualizar.Contains(x.DetalleVoucherModelID)).ToList();
        var ActualizaEncontrados = DetalleEncontrados.Select(x =>
        {
            x.Conciliado = true;
            return(x);
        }).ToList();

        db.DBDetalleVoucher.AddOrUpdate(ActualizaEncontrados.ToArray());

        CartolaBancariaMacroModel CartolaAactualizar = db.DBCartolaBMacro.Include("CartolaDetalle").SingleOrDefault(x => x.CartolaBancariaMacroModelID == IdCartola);

        foreach (CartolaBancariaModel itemCArtola in CartolaAactualizar.CartolaDetalle)
        {
            RelacionadosYConciliados RelacionCartolaYLibroMayor = new RelacionadosYConciliados();
            RelacionCartolaYLibroMayor = DatosConciliacion.FirstOrDefault(x => x.IdCartolaDetalle == itemCArtola.CartolaBancariaModelId);

            if (RelacionCartolaYLibroMayor != null)
            {
                itemCArtola.VoucherModelID           = RelacionCartolaYLibroMayor.VoucherId;
                itemCArtola.CuentaContableModelID    = CuentaConsultada;
                itemCArtola.EstaConciliado           = true;
                itemCArtola.ClientesContablesModelID = ObjCliente;
            }
        }

        db.DBCartolaBMacro.AddOrUpdate(CartolaAactualizar);
        db.SaveChanges();
        Result = true;

        return(Result);
    }
    public static void SiExisteReemplazala(DateTime FechaCartola, int NumeroCartola, FacturaPoliContext db, ClientesContablesModel objCliente)
    {
        //crear otra funcion que lo que haga sea insertar las que no existen en  la cartola -> definir como diferenciar los campos
        CartolaBancariaMacroModel CartolaEncontrada = db.DBCartolaBMacro.Include("CartolaDetalle")
                                                      .Where(x => x.ClientesContablesModelID.ClientesContablesModelID == objCliente.ClientesContablesModelID &&
                                                             x.FechaCartola.Month == FechaCartola.Month &&
                                                             x.FechaCartola.Year == FechaCartola.Year &&
                                                             x.NumeroCartola == NumeroCartola).FirstOrDefault();
        List <int> lstVouchersId = new List <int>();

        if (CartolaEncontrada != null)
        {
            lstVouchersId = CartolaEncontrada.CartolaDetalle.Select(x => x.VoucherModelID).ToList();
        }

        List <VoucherModel> VouchersADarDeBaja = new List <VoucherModel>();

        if (lstVouchersId.Any())
        {
            VouchersADarDeBaja = db.DBVoucher.Where(x => lstVouchersId.Contains(x.VoucherModelID)).ToList();
        }

        if (VouchersADarDeBaja.Any())
        {
            VouchersADarDeBaja = VouchersADarDeBaja.Select(x => { x.DadoDeBaja = true; return(x); }).ToList();
            foreach (VoucherModel itemVoucher in VouchersADarDeBaja)
            {
                db.Entry(itemVoucher).State = System.Data.Entity.EntityState.Modified;
            }
        }

        if (CartolaEncontrada != null)
        {
            db.DBCartolaBMacro.Remove(CartolaEncontrada);
        }
    }
        public ActionResult ImportarExcelConciliacionBancaria(ObjCartolaMacro DataCartola)
        {
            string                 UserID     = User.Identity.GetUserId();
            FacturaPoliContext     db         = ParseExtensions.GetDatabaseContext(UserID);
            ClientesContablesModel objCliente = PerfilamientoModule.GetClienteContableSeleccionado(Session, UserID, db);

            Session["CartolaImportada"] = null;

            using (var dbContextTransaction = db.Database.BeginTransaction())
            {
                try
                {
                    if (DataCartola.files != null && DataCartola.files.ContentLength > 0)
                    {
                        string fileExtension = Path.GetExtension(DataCartola.files.FileName);

                        if (fileExtension == ".xlsx" || fileExtension == ".xls")
                        {
                            List <string[]> MayorConsultado = Session["LibroMayorTwo"] as List <string[]>;
                            List <LibroMayorConciliacion> MayorConsultadoLista = CartolaBancariaModel.getListaLibroMayor(MayorConsultado);

                            string NombreCtaCont = MayorConsultado[0][9];
                            ViewBag.NombreCuentaContable = NombreCtaCont;

                            int CuentaConsultadaID = (int)Session["ObjetoCuentaContableConsultada"];
                            CuentaContableModel CuentaConsultada = UtilesContabilidad.CuentaContableDesdeID(CuentaConsultadaID, objCliente);
                            //DeExcelAObjetoCartolaYVoucher

                            var ObjCartolaCompleto = CartolaBancariaMacroModel.ConvertirAObjetoCartola(DataCartola.files /*NombreCtaCont*/);
                            var ResultadoInsercion = CartolaBancariaMacroModel.ConvertirAVoucher(ObjCartolaCompleto, objCliente, db, CuentaConsultada, DataCartola.FechaCartola, DataCartola.NumeroCartola);

                            //Usar para el reporte de conciliacion bancaria
                            var NoInsertados = ResultadoInsercion.Item2;

                            Session["ReporteNoInsertados"] = NoInsertados;

                            if (ResultadoInsercion.Item1 == false)
                            {
                                TempData["Error"] = "Esta cartola ya existe.";
                                return(RedirectToAction("ConciliacionBAutomatica", "ContabilidadConciliacionBancaria"));
                            }
                        }
                    }
                    else
                    {
                        TempData["Error"] = "No existen registros en el fichero.";
                        return(RedirectToAction("ConciliacionBAutomatica", "ContabilidadConciliacionBancaria"));
                    }

                    dbContextTransaction.Commit();

                    TempData["Correcto"] = "Cartola y Vouchers creados con éxito.";
                    return(RedirectToAction("ResultadoConciliacion", "ContabilidadConciliacionBancaria"));
                }
                catch (Exception ex)
                {
                    dbContextTransaction.Rollback();
                    TempData["Error"] = $"Error al realizar esta acción. Mensaje de error: {ex.Message}. En caso de necesitarlo informar este error.";
                    db.DBErrores.Add(new ErrorMensajeMonitoreo {
                        Mensaje = ex.Message
                    });
                    db.SaveChanges();
                    return(RedirectToAction("ConciliacionBAutomatica", "ContabilidadConciliacionBancaria"));
                }
            }
        }
    public static bool GuardarCartolaBancaria(CartolaBancariaMacroModel Cartola, FacturaPoliContext db)
    {
        bool Result = false;

        return(Result);
    }