public cp_proveedor_Info get_info(int IdEmpresa, decimal IdProveedor)
        {
            try
            {
                cp_proveedor_Info          info      = new cp_proveedor_Info();
                Entities_cuentas_por_pagar Context_p = new Entities_cuentas_por_pagar();
                Entities_general           Context_g = new Entities_general();

                cp_proveedor Entity = Context_p.cp_proveedor.FirstOrDefault(q => q.IdEmpresa == IdEmpresa && q.IdProveedor == IdProveedor);
                if (Entity == null)
                {
                    return(null);
                }
                info = new cp_proveedor_Info
                {
                    IdEmpresa                     = Entity.IdEmpresa,
                    IdProveedor                   = Entity.IdProveedor,
                    IdPersona                     = Entity.IdPersona,
                    IdClaseProveedor              = Entity.IdClaseProveedor,
                    IdCiudad                      = Entity.IdCiudad,
                    IdBanco_acreditacion          = Entity.IdBanco_acreditacion,
                    IdCtaCble_CXP                 = Entity.IdCtaCble_CXP,
                    IdCtaCble_Gasto               = Entity.IdCtaCble_Gasto,
                    IdTipoCta_acreditacion_cat    = Entity.IdTipoCta_acreditacion_cat,
                    pr_contribuyenteEspecial_bool = Entity.pr_contribuyenteEspecial == "S" ? true : false,
                    es_empresa_relacionada        = Entity.es_empresa_relacionada,
                    num_cta_acreditacion          = Entity.num_cta_acreditacion,
                    pr_codigo                     = Entity.pr_codigo,
                    pr_plazo                      = Entity.pr_plazo,
                    pr_estado                     = Entity.pr_estado,
                    pr_correo                     = Entity.pr_correo,
                    pr_direccion                  = Entity.pr_direccion,
                    pr_telefonos                  = Entity.pr_telefonos,
                    pr_celular                    = Entity.pr_celular,
                    IdCtaCble_Anticipo            = Entity.IdCtaCble_Anticipo
                };
                tb_persona Entity_p = Context_g.tb_persona.Where(q => q.IdPersona == info.IdPersona).FirstOrDefault();
                info.info_persona = new Info.General.tb_persona_Info
                {
                    IdPersona         = Entity_p.IdPersona,
                    pe_apellido       = Entity_p.pe_apellido,
                    pe_nombre         = Entity_p.pe_nombre,
                    pe_cedulaRuc      = Entity_p.pe_cedulaRuc,
                    pe_nombreCompleto = Entity_p.pe_nombreCompleto,
                    pe_razonSocial    = Entity_p.pe_razonSocial,
                    pe_Naturaleza     = Entity_p.pe_Naturaleza,
                    IdTipoDocumento   = Entity_p.IdTipoDocumento
                };

                Context_p.Dispose();
                Context_g.Dispose();
                return(info);
            }
            catch (Exception)
            {
                throw;
            }
        }
        public List <cp_proveedor_Info> get_list(int IdEmpresa, int skip, int take, string filter)
        {
            try
            {
                List <cp_proveedor_Info> Lista = new List <cp_proveedor_Info>();

                Entities_cuentas_por_pagar Context = new Entities_cuentas_por_pagar();

                var lst = (from
                           p in Context.vwcp_proveedor_consulta

                           where
                           p.IdEmpresa == IdEmpresa

                           && (p.IdProveedor.ToString() + " " + p.pe_nombreCompleto).Contains(filter)
                           select new
                {
                    p.IdEmpresa,
                    p.IdPersona,
                    p.IdProveedor,
                    p.pe_cedulaRuc,
                    p.pr_codigo,
                    p.pe_nombreCompleto
                })
                          .OrderBy(p => p.IdProveedor)
                          .Skip(skip)
                          .Take(take)
                          .ToList();


                foreach (var q in lst)
                {
                    Lista.Add(new cp_proveedor_Info
                    {
                        IdEmpresa    = q.IdEmpresa,
                        IdPersona    = q.IdPersona,
                        IdProveedor  = q.IdProveedor,
                        pr_codigo    = q.pr_codigo,
                        info_persona = new Info.General.tb_persona_Info
                        {
                            pe_cedulaRuc      = q.pe_cedulaRuc,
                            pe_nombreCompleto = q.pe_nombreCompleto,
                        }
                    });
                }

                Context.Dispose();
                return(Lista);
            }
            catch (Exception)
            {
                throw;
            }
        }
        public bool anularDB(ba_Cbte_Ban_Info info)
        {
            Entities_cuentas_por_pagar Context_cxp = new Entities_cuentas_por_pagar();
            Entities_banco             Context     = new Entities_banco();

            try
            {
                ba_Cbte_Ban Entity = Context.ba_Cbte_Ban.Where(q => q.IdEmpresa == info.IdEmpresa && q.IdTipocbte == info.IdTipocbte && q.IdCbteCble == info.IdCbteCble).FirstOrDefault();
                if (Entity == null)
                {
                    return(false);
                }
                Entity.MotivoAnulacion     = info.MotivoAnulacion;
                Entity.IdUsuario_Anu       = info.IdUsuario_Anu;
                Entity.FechaAnulacion      = DateTime.Now;
                Entity.IdEstado_cheque_cat = "ESTCBANU";
                Entity.Estado = "I";

                var lst_ing = Context.ba_Caja_Movimiento_x_Cbte_Ban_x_Deposito.Where(q => q.mba_IdEmpresa == info.IdEmpresa && q.mba_IdTipocbte == info.IdTipocbte && q.mba_IdCbteCble == info.IdCbteCble).ToList();
                Context.ba_Caja_Movimiento_x_Cbte_Ban_x_Deposito.RemoveRange(lst_ing);

                var lst_cance = Context_cxp.cp_orden_pago_cancelaciones.Where(q => q.IdEmpresa_pago == info.IdEmpresa && q.IdTipoCbte_pago == info.IdTipocbte && q.IdCbteCble_pago == info.IdCbteCble).ToList();
                Context_cxp.cp_orden_pago_cancelaciones.RemoveRange(lst_cance);

                Context_cxp.SaveChanges();
                Context.SaveChanges();


                Context_cxp.Dispose();
                Context.Dispose();
                return(true);
            }
            catch (Exception)
            {
                Context_cxp.Dispose();
                Context.Dispose();
                throw;
            }
        }
        public cp_proveedor_Info get_info_x_num_cedula(int IdEmpresa, string pe_cedulaRuc)
        {
            try
            {
                cp_proveedor_Info info = new cp_proveedor_Info
                {
                    info_persona = new Info.General.tb_persona_Info()
                };

                Entities_general Context_general = new Entities_general();
                tb_persona       Entity_p        = Context_general.tb_persona.Where(q => q.pe_cedulaRuc == pe_cedulaRuc).FirstOrDefault();
                if (Entity_p == null)
                {
                    Context_general.Dispose();
                    return(info);
                }
                Entities_cuentas_por_pagar Context_cxp = new Entities_cuentas_por_pagar();
                cp_proveedor Entity_c = Context_cxp.cp_proveedor.Where(q => q.IdEmpresa == IdEmpresa && q.IdPersona == Entity_p.IdPersona).FirstOrDefault();
                if (Entity_c == null)
                {
                    info.IdPersona    = Entity_p.IdPersona;
                    info.info_persona = new Info.General.tb_persona_Info
                    {
                        IdPersona           = Entity_p.IdPersona,
                        pe_apellido         = Entity_p.pe_apellido,
                        pe_nombre           = Entity_p.pe_nombre,
                        pe_cedulaRuc        = Entity_p.pe_cedulaRuc,
                        pe_nombreCompleto   = Entity_p.pe_nombreCompleto,
                        pe_razonSocial      = Entity_p.pe_razonSocial,
                        pe_celular          = Entity_p.pe_celular,
                        pe_telfono_Contacto = Entity_p.pe_telfono_Contacto,
                        pe_correo           = Entity_p.pe_correo,
                        pe_direccion        = Entity_p.pe_direccion
                    };
                    Context_general.Dispose();
                    Context_cxp.Dispose();
                    return(info);
                }
                info = new cp_proveedor_Info
                {
                    IdEmpresa    = Entity_c.IdEmpresa,
                    IdProveedor  = Entity_c.IdProveedor,
                    IdPersona    = Entity_p.IdPersona,
                    info_persona = new Info.General.tb_persona_Info
                    {
                        IdPersona           = Entity_p.IdPersona,
                        pe_apellido         = Entity_p.pe_apellido,
                        pe_nombre           = Entity_p.pe_nombre,
                        pe_cedulaRuc        = Entity_p.pe_cedulaRuc,
                        pe_nombreCompleto   = Entity_p.pe_nombreCompleto,
                        pe_razonSocial      = Entity_p.pe_razonSocial,
                        pe_celular          = Entity_p.pe_celular,
                        pe_telfono_Contacto = Entity_p.pe_telfono_Contacto,
                        pe_correo           = Entity_p.pe_correo,
                        pe_direccion        = Entity_p.pe_direccion
                    }
                };

                return(info);
            }
            catch (Exception)
            {
                throw;
            }
        }
        public bool aprobar_prestamo(int IdEmpresa, string[] Lista, string IdUsuarioAprueba)
        {
            Entities_rrhh Context = new Entities_rrhh();
            Entities_cuentas_por_pagar Context_cxp = new Entities_cuentas_por_pagar();
            Entities_contabilidad      Context_ct  = new Entities_contabilidad();

            try
            {
                ro_Parametros Entity_ro_parametros          = Context.ro_Parametros.Where(q => q.IdEmpresa == IdEmpresa).FirstOrDefault();
                cp_orden_pago_tipo_x_empresa Entity_op_tipo = Context_cxp.cp_orden_pago_tipo_x_empresa.Where(q => q.IdEmpresa == IdEmpresa && q.IdTipo_op == Entity_ro_parametros.IdTipo_op_prestamos).FirstOrDefault();


                decimal IdOrdenPago   = 1;
                decimal IdCbteCble_OP = 1;

                foreach (var item in Lista)
                {
                    var         IdPrestamo      = Convert.ToDecimal(item);
                    ro_prestamo Entity_Prestamo = Context.ro_prestamo.FirstOrDefault(q => q.IdEmpresa == IdEmpresa && q.IdPrestamo == IdPrestamo);
                    if (Entity_Prestamo != null)
                    {
                        Entity_Prestamo.IdUsuarioAprueba = IdUsuarioAprueba;
                        Entity_Prestamo.EstadoAprob      = "APROB";
                    }

                    if (Entity_Prestamo.GeneraOP)
                    {
                        IdOrdenPago   = data_op.get_id(Entity_Prestamo.IdEmpresa);
                        IdCbteCble_OP = data_ct.get_id(Entity_Prestamo.IdEmpresa, Convert.ToInt32(Entity_op_tipo.IdTipoCbte_OP));
                        ro_empleado Entity_Empleado = Context.ro_empleado.Where(q => q.IdEmpresa == Entity_Prestamo.IdEmpresa && q.IdEmpleado == Entity_Prestamo.IdEmpleado).FirstOrDefault();
                        var         cuenta_x_rubro  = Context.ro_rubro_tipo.Where(q => q.IdEmpresa == Entity_Prestamo.IdEmpresa && q.IdRubro == Entity_Prestamo.IdRubro).FirstOrDefault();

                        if (
                            Entity_Empleado.IdCtaCble_x_pagar_empleado != null &&
                            Entity_Empleado.IdCtaCble_Emplea != null
                            )
                        {
                            cp_orden_pago op = new cp_orden_pago
                            {
                                IdEmpresa          = IdEmpresa,
                                IdSucursal         = Entity_Empleado.IdSucursal,
                                IdOrdenPago        = IdOrdenPago,
                                Observacion        = "Prestamo #" + Entity_Prestamo.IdPrestamo,
                                IdTipo_op          = Entity_ro_parametros.IdTipo_op_prestamos,
                                IdTipo_Persona     = cl_enumeradores.eTipoPersona.EMPLEA.ToString(),
                                IdPersona          = Entity_Empleado.IdPersona,
                                IdEntidad          = Entity_Prestamo.IdEmpleado,
                                Fecha              = DateTime.Now.Date,
                                IdEstadoAprobacion = Entity_op_tipo.IdEstadoAprobacion,
                                IdFormaPago        = cl_enumeradores.eFormaPagoOrdenPago.CHEQUE.ToString(),
                                Estado             = "A"
                            };

                            Entity_Prestamo.IdEmpresa_op = op.IdEmpresa;
                            Entity_Prestamo.IdOrdenPago  = op.IdOrdenPago;

                            Context_cxp.cp_orden_pago.Add(op);

                            ct_cbtecble diario = new ct_cbtecble
                            {
                                IdEmpresa       = IdEmpresa,
                                IdTipoCbte      = Convert.ToInt32(Entity_op_tipo.IdTipoCbte_OP),
                                IdCbteCble      = IdCbteCble_OP,
                                cb_Fecha        = DateTime.Now.Date,
                                cb_Observacion  = op.Observacion,
                                IdPeriodo       = Convert.ToInt32(DateTime.Now.Date.ToString("yyyyMM")),
                                IdSucursal      = Entity_Empleado.IdSucursal,
                                cb_FechaTransac = DateTime.Now,
                                cb_Estado       = "A"
                            };

                            Entity_Prestamo.IdEmpresa_dc = diario.IdEmpresa;
                            Entity_Prestamo.IdTipoCbte   = diario.IdTipoCbte;
                            Entity_Prestamo.IdCbteCble   = diario.IdCbteCble;

                            Context_ct.ct_cbtecble.Add(diario);

                            ct_cbtecble_det diario_det = new ct_cbtecble_det
                            {
                                IdEmpresa  = diario.IdEmpresa,
                                IdTipoCbte = diario.IdTipoCbte,
                                IdCbteCble = diario.IdCbteCble,
                                secuencia  = 1,
                                IdCtaCble  = Entity_Empleado.IdCtaCble_Emplea,
                                dc_Valor   = Math.Round(Convert.ToDouble(Entity_Prestamo.MontoSol), 2, MidpointRounding.AwayFromZero),
                            };

                            Context_ct.ct_cbtecble_det.Add(diario_det);

                            ct_cbtecble_det diario_det_ = new ct_cbtecble_det
                            {
                                IdEmpresa  = diario.IdEmpresa,
                                IdTipoCbte = diario.IdTipoCbte,
                                IdCbteCble = diario.IdCbteCble,
                                secuencia  = 2,
                                IdCtaCble  = Entity_Empleado.IdCtaCble_x_pagar_empleado,
                                dc_Valor   = Math.Round(Convert.ToDouble(Entity_Prestamo.MontoSol), 2, MidpointRounding.AwayFromZero) * -1
                            };

                            Context_ct.ct_cbtecble_det.Add(diario_det_);

                            cp_orden_pago_det op_det = new cp_orden_pago_det
                            {
                                IdEmpresa   = op.IdEmpresa,
                                IdOrdenPago = op.IdOrdenPago,
                                Secuencia   = 1,

                                IdEmpresa_cxp  = diario.IdEmpresa,
                                IdTipoCbte_cxp = diario.IdTipoCbte,
                                IdCbteCble_cxp = diario.IdCbteCble,

                                Valor_a_pagar      = Convert.ToDouble(Entity_Prestamo.MontoSol),
                                IdEstadoAprobacion = Entity_op_tipo.IdEstadoAprobacion,
                                IdFormaPago        = cl_enumeradores.eFormaPagoOrdenPago.CHEQUE.ToString(),
                                Fecha_Pago         = op.Fecha
                            };

                            Context_cxp.cp_orden_pago_det.Add(op_det);
                        }
                    }
                    Context_ct.SaveChanges();
                    Context_cxp.SaveChanges();
                    Context.SaveChanges();
                }

                Context_ct.Dispose();
                Context_cxp.Dispose();
                Context.Dispose();

                return(true);
            }
            catch (Exception)
            {
                throw;
            }
        }
        public tb_persona_Info get_info(int IdEmpresa, string IdTipoPersona, decimal IdEntidad)
        {
            tb_persona_Info info = new tb_persona_Info();

            Entities_general context_g = new Entities_general();

            switch (IdTipoPersona)
            {
            case "PERSONA":
                info = (from q in context_g.tb_persona
                        where q.pe_estado == "A" &&
                        q.IdPersona == IdEntidad
                        select new tb_persona_Info
                {
                    IdPersona = q.IdPersona,
                    pe_nombreCompleto = q.pe_nombreCompleto,
                    pe_cedulaRuc = q.pe_cedulaRuc,
                    IdEntidad = q.IdPersona
                }).FirstOrDefault();
                break;

            case "CLIENTE":
                Entities_facturacion context_f = new Entities_facturacion();
                info = (from q in context_f.vwfa_cliente_consulta
                        where q.Estado == "A" &&
                        q.IdEmpresa == IdEmpresa &&
                        q.IdCliente == IdEntidad
                        select new tb_persona_Info
                {
                    IdPersona = q.IdPersona,
                    pe_nombreCompleto = q.pe_nombreCompleto,
                    pe_cedulaRuc = q.pe_cedulaRuc,
                    IdEntidad = q.IdCliente
                }).FirstOrDefault();
                context_f.Dispose();
                break;

            case "EMPLEA":
                Entities_rrhh context_e = new Entities_rrhh();
                info = (from q in context_e.vwro_empleados_consulta
                        where q.em_estado == "A" &&
                        q.IdEmpresa == IdEmpresa &&
                        q.IdEmpleado == IdEntidad
                        select new tb_persona_Info
                {
                    IdPersona = q.IdPersona,
                    pe_nombreCompleto = q.Empleado,
                    pe_cedulaRuc = q.pe_cedulaRuc,
                    IdEntidad = q.IdEmpleado
                }).FirstOrDefault();
                context_e.Dispose();
                break;

            case "PROVEE":
                Entities_cuentas_por_pagar context_p = new Entities_cuentas_por_pagar();
                info = (from q in context_p.vwcp_proveedor_consulta
                        where q.pr_estado == "A" &&
                        q.IdEmpresa == IdEmpresa &&
                        q.IdProveedor == IdEntidad
                        select new tb_persona_Info
                {
                    IdPersona = q.IdPersona,
                    pe_nombreCompleto = q.pe_nombreCompleto,
                    pe_cedulaRuc = q.pe_cedulaRuc,
                    IdEntidad = q.IdProveedor
                }).FirstOrDefault();
                context_p.Dispose();
                break;
            }

            context_g.Dispose();

            return(info);
        }
        public List <tb_persona_Info> get_list(int IdEmpresa, string IdTipo_persona, int skip, int take, string filter)
        {
            try
            {
                List <tb_persona_Info> Lista = new List <tb_persona_Info>();

                Entities_general context_g = new Entities_general();
                switch (IdTipo_persona)
                {
                case "PERSONA":
                    var lstg = context_g.tb_persona.Where(q => q.pe_estado == "A" && (q.IdPersona.ToString() + " " + q.pe_cedulaRuc + " " + q.pe_nombreCompleto).Contains(filter)).OrderBy(q => q.IdPersona).Skip(skip).Take(take);
                    foreach (var q in lstg)
                    {
                        Lista.Add(new tb_persona_Info
                        {
                            IdPersona         = q.IdPersona,
                            pe_nombreCompleto = q.pe_nombreCompleto,
                            pe_cedulaRuc      = q.pe_cedulaRuc,
                            IdEntidad         = q.IdPersona
                        });
                    }
                    break;

                case "CLIENTE":
                    Entities_facturacion context_f = new Entities_facturacion();
                    var lstf = context_f.vwfa_cliente_consulta.Where(q => q.IdEmpresa == IdEmpresa && q.Estado == "A" && (q.IdCliente.ToString() + " " + q.pe_cedulaRuc + " " + q.pe_nombreCompleto).Contains(filter)).OrderBy(q => q.IdCliente).Skip(skip).Take(take);
                    foreach (var q in lstf)
                    {
                        Lista.Add(new tb_persona_Info
                        {
                            IdPersona         = q.IdPersona,
                            pe_nombreCompleto = q.pe_nombreCompleto,
                            pe_cedulaRuc      = q.pe_cedulaRuc,
                            IdEntidad         = q.IdCliente,
                            CodPersona        = q.Descripcion_tip_cliente
                        });
                    }
                    context_f.Dispose();
                    break;

                case "EMPLEA":
                    Entities_rrhh context_e = new Entities_rrhh();
                    var           lstr      = context_e.vwro_empleados_consulta.Where(q => q.IdEmpresa == IdEmpresa && q.em_estado == "A" && (q.IdEmpleado.ToString() + " " + q.pe_cedulaRuc + " " + q.Empleado).Contains(filter)).OrderBy(q => q.IdEmpleado).Skip(skip).Take(take);
                    foreach (var q in lstr)
                    {
                        Lista.Add(new tb_persona_Info
                        {
                            IdPersona         = q.IdPersona,
                            pe_nombreCompleto = q.Empleado,
                            pe_cedulaRuc      = q.pe_cedulaRuc,
                            IdEntidad         = q.IdEmpleado
                        });
                    }
                    context_e.Dispose();
                    break;

                case "PROVEE":
                    Entities_cuentas_por_pagar context_p = new Entities_cuentas_por_pagar();
                    var lstp = context_p.vwcp_proveedor_consulta.Where(q => q.IdEmpresa == IdEmpresa && q.pr_estado == "A" && (q.IdProveedor.ToString() + " " + q.pe_cedulaRuc + " " + q.pe_nombreCompleto).Contains(filter)).OrderBy(q => q.IdProveedor).Skip(skip).Take(take);
                    foreach (var q in lstp)
                    {
                        Lista.Add(new tb_persona_Info
                        {
                            IdPersona         = q.IdPersona,
                            pe_nombreCompleto = q.pe_nombreCompleto,
                            pe_cedulaRuc      = q.pe_cedulaRuc,
                            IdEntidad         = q.IdProveedor
                        });
                    }
                    context_p.Dispose();
                    break;
                }

                context_g.Dispose();
                return(Lista);
            }
            catch (Exception)
            {
                throw;
            }
        }
        public bool modificarDB(ba_Cbte_Ban_Info info, cl_enumeradores.eTipoCbteBancario TipoCbteBanco)
        {
            Entities_banco             Context_b   = new Entities_banco();
            Entities_contabilidad      Context_ct  = new Entities_contabilidad();
            Entities_cuentas_por_pagar Context_cxp = new Entities_cuentas_por_pagar();

            try
            {
                #region Variables
                string  TipoCbteBancoS = TipoCbteBanco.ToString();
                int     secuencia      = 1;
                decimal Idcancelacion  = 0;
                #endregion

                #region Diario
                var diario = Context_ct.ct_cbtecble.Where(q => q.IdEmpresa == info.IdEmpresa && q.IdTipoCbte == info.IdTipocbte && q.IdCbteCble == info.IdCbteCble).FirstOrDefault();
                if (diario == null)
                {
                    return(false);
                }

                diario.cb_Fecha         = info.cb_Fecha.Date;
                diario.cb_Observacion   = info.cb_Observacion;
                diario.IdPeriodo        = info.IdPeriodo = Convert.ToInt32(info.cb_Fecha.Date.ToString("yyyyMM"));
                diario.IdSucursal       = info.IdSucursal;
                diario.cb_Valor         = info.cb_Valor;
                diario.cb_FechaUltModi  = DateTime.Now;
                diario.IdUsuarioUltModi = info.IdUsuario;

                var lst_diario_det = Context_ct.ct_cbtecble_det.Where(q => q.IdEmpresa == info.IdEmpresa && q.IdTipoCbte == info.IdTipocbte && q.IdCbteCble == info.IdCbteCble).ToList();
                Context_ct.ct_cbtecble_det.RemoveRange(lst_diario_det);
                foreach (var item in info.lst_det_ct)
                {
                    Context_ct.ct_cbtecble_det.Add(new ct_cbtecble_det
                    {
                        IdEmpresa           = info.IdEmpresa,
                        IdTipoCbte          = info.IdTipocbte,
                        IdCbteCble          = info.IdCbteCble,
                        secuencia           = secuencia++,
                        IdCtaCble           = item.IdCtaCble,
                        dc_Valor            = Math.Round(item.dc_Valor, 2, MidpointRounding.AwayFromZero),
                        dc_para_conciliar   = item.dc_para_conciliar,
                        IdPunto_cargo       = item.IdPunto_cargo,
                        IdPunto_cargo_grupo = item.IdPunto_cargo_grupo,
                        IdCentroCosto       = item.IdCentroCosto,
                        dc_Observacion      = item.dc_Observacion
                    });
                }
                #endregion
                var list_det = Context_b.ba_Cbte_Ban_x_ba_TipoFlujo.Where(q => q.IdEmpresa == info.IdEmpresa && q.IdTipocbte == info.IdTipocbte && q.IdCbteCble == info.IdCbteCble).ToList();
                Context_b.ba_Cbte_Ban_x_ba_TipoFlujo.RemoveRange(list_det);
                info.list_det = info.list_det == null ? new List <ba_Cbte_Ban_x_ba_TipoFlujo_Info>() : info.list_det;
                if (info.list_det.Count > 0)
                {
                    foreach (var item in info.list_det)
                    {
                        Context_b.ba_Cbte_Ban_x_ba_TipoFlujo.Add(new ba_Cbte_Ban_x_ba_TipoFlujo
                        {
                            IdEmpresa   = info.IdEmpresa,
                            IdTipocbte  = info.IdTipocbte,
                            IdCbteCble  = info.IdCbteCble,
                            IdTipoFlujo = item.IdTipoFlujo,
                            Valor       = item.Valor,
                            Porcentaje  = item.Porcentaje,
                            Secuencia   = item.Secuencia
                        });
                    }
                }

                #region Cbte bancario
                var mov_ban = Context_b.ba_Cbte_Ban.Where(q => q.IdEmpresa == info.IdEmpresa && q.IdTipocbte == info.IdTipocbte && q.IdCbteCble == info.IdCbteCble).FirstOrDefault();
                if (mov_ban == null)
                {
                    Context_b.ba_Cbte_Ban.Add(new ba_Cbte_Ban
                    {
                        IdEmpresa                = info.IdEmpresa,
                        IdCbteCble               = info.IdCbteCble,
                        IdTipocbte               = info.IdTipocbte,
                        Cod_Cbtecble             = info.Cod_Cbtecble,
                        IdPeriodo                = info.IdPeriodo,
                        IdBanco                  = info.IdBanco,
                        cb_Fecha                 = info.cb_Fecha,
                        cb_Observacion           = info.cb_Observacion,
                        cb_Valor                 = info.cb_Valor,
                        cb_Cheque                = info.cb_Cheque,
                        Estado                   = "A",
                        IdPersona_Girado_a       = info.IdPersona_Girado_a,
                        cb_giradoA               = info.cb_giradoA,
                        cb_ciudadChq             = info.cb_ciudadChq,
                        IdTipoFlujo              = info.IdTipoFlujo,
                        IdTipoNota               = info.IdTipoNota,
                        ValorEnLetras            = info.ValorEnLetras,
                        IdSucursal               = info.IdSucursal,
                        IdEstado_Cbte_Ban_cat    = info.IdEstado_Cbte_Ban_cat,
                        IdEstado_Preaviso_ch_cat = info.IdEstado_Preaviso_ch_cat,
                        IdEstado_cheque_cat      = info.IdEstado_cheque_cat,
                        IdPersona                = info.IdPersona,
                        IdEntidad                = info.IdEntidad,
                        IdTipo_Persona           = info.IdTipo_Persona,
                        IdSolicitudPago          = info.IdSolicitudPago,
                        IdUsuarioUltMod          = info.IdUsuarioUltMod,
                        Fecha_UltMod             = DateTime.Now,
                        cb_FechaCheque           = info.cb_FechaCheque,
                    });
                }
                else
                {
                    mov_ban.Cod_Cbtecble             = info.Cod_Cbtecble;
                    mov_ban.IdPeriodo                = info.IdPeriodo;
                    mov_ban.IdBanco                  = info.IdBanco;
                    mov_ban.cb_Fecha                 = info.cb_Fecha;
                    mov_ban.cb_Observacion           = info.cb_Observacion;
                    mov_ban.cb_Valor                 = info.cb_Valor;
                    mov_ban.cb_Cheque                = info.cb_Cheque;
                    mov_ban.IdPersona_Girado_a       = info.IdPersona_Girado_a;
                    mov_ban.cb_giradoA               = info.cb_giradoA;
                    mov_ban.cb_ciudadChq             = info.cb_ciudadChq;
                    mov_ban.IdTipoFlujo              = info.IdTipoFlujo;
                    mov_ban.IdTipoNota               = info.IdTipoNota;
                    mov_ban.ValorEnLetras            = info.ValorEnLetras;
                    mov_ban.IdSucursal               = info.IdSucursal;
                    mov_ban.IdEstado_Cbte_Ban_cat    = info.IdEstado_Cbte_Ban_cat;
                    mov_ban.IdEstado_Preaviso_ch_cat = info.IdEstado_Preaviso_ch_cat;
                    mov_ban.IdEstado_cheque_cat      = info.IdEstado_cheque_cat;
                    mov_ban.IdPersona                = info.IdPersona;
                    mov_ban.IdEntidad                = info.IdEntidad;
                    mov_ban.IdTipo_Persona           = info.IdTipo_Persona;
                    mov_ban.IdUsuarioUltMod          = info.IdUsuarioUltMod;
                    mov_ban.Fecha_UltMod             = DateTime.Now;
                    mov_ban.IdSolicitudPago          = info.IdSolicitudPago;
                }
                #endregion

                switch (TipoCbteBanco)
                {
                case cl_enumeradores.eTipoCbteBancario.CHEQ:
                    #region Guardo cancelaciones
                    var lst_cancelaciones = Context_cxp.cp_orden_pago_cancelaciones.Where(q => q.IdEmpresa_pago == info.IdEmpresa && q.IdTipoCbte_pago == info.IdTipocbte && q.IdCbteCble_pago == info.IdCbteCble).ToList();
                    Context_cxp.cp_orden_pago_cancelaciones.RemoveRange(lst_cancelaciones);
                    Idcancelacion = odata_can.get_id(info.IdEmpresa);
                    secuencia     = 1;
                    foreach (var item in info.lst_det_canc_op)
                    {
                        Context_cxp.cp_orden_pago_cancelaciones.Add(new cp_orden_pago_cancelaciones
                        {
                            IdEmpresa     = info.IdEmpresa,
                            Idcancelacion = Idcancelacion,
                            Secuencia     = secuencia++,

                            IdEmpresa_op   = item.IdEmpresa_op,
                            IdOrdenPago_op = item.IdOrdenPago_op,
                            Secuencia_op   = item.Secuencia_op,

                            IdEmpresa_cxp  = item.IdEmpresa_cxp,
                            IdTipoCbte_cxp = item.IdTipoCbte_cxp,
                            IdCbteCble_cxp = item.IdCbteCble_cxp,

                            IdEmpresa_pago  = info.IdEmpresa,
                            IdTipoCbte_pago = info.IdTipocbte,
                            IdCbteCble_pago = info.IdCbteCble,

                            MontoAplicado    = item.MontoAplicado,
                            SaldoActual      = 0,
                            SaldoAnterior    = 0,
                            fechaTransaccion = DateTime.Now,
                            Observacion      = item.Observacion
                        });
                    }
                    #endregion
                    break;

                case cl_enumeradores.eTipoCbteBancario.DEPO:
                    #region Guardo ingresos
                    var lst_ing = Context_b.ba_Caja_Movimiento_x_Cbte_Ban_x_Deposito.Where(q => q.mba_IdEmpresa == info.IdEmpresa && q.mba_IdTipocbte == info.IdTipocbte && q.mba_IdCbteCble == info.IdCbteCble).ToList();
                    Context_b.ba_Caja_Movimiento_x_Cbte_Ban_x_Deposito.RemoveRange(lst_ing);
                    foreach (var item in info.lst_det_ing)
                    {
                        Context_b.ba_Caja_Movimiento_x_Cbte_Ban_x_Deposito.Add(new ba_Caja_Movimiento_x_Cbte_Ban_x_Deposito
                        {
                            mba_IdEmpresa  = info.IdEmpresa,
                            mba_IdTipocbte = info.IdTipocbte,
                            mba_IdCbteCble = info.IdCbteCble,

                            mcj_IdEmpresa  = item.mcj_IdEmpresa,
                            mcj_IdTipocbte = item.mcj_IdTipocbte,
                            mcj_IdCbteCble = item.mcj_IdCbteCble,
                            mcj_Secuencia  = item.mcj_Secuencia
                        });
                    }
                    #endregion
                    break;

                case cl_enumeradores.eTipoCbteBancario.NCBA:
                    break;

                case cl_enumeradores.eTipoCbteBancario.NDBA:
                    #region Guardo cancelaciones
                    var lst_cancelaciones_ndba = Context_cxp.cp_orden_pago_cancelaciones.Where(q => q.IdEmpresa_pago == info.IdEmpresa && q.IdTipoCbte_pago == info.IdTipocbte && q.IdCbteCble_pago == info.IdCbteCble).ToList();
                    Context_cxp.cp_orden_pago_cancelaciones.RemoveRange(lst_cancelaciones_ndba);
                    Idcancelacion = odata_can.get_id(info.IdEmpresa);
                    secuencia     = 1;
                    foreach (var item in info.lst_det_canc_op)
                    {
                        Context_cxp.cp_orden_pago_cancelaciones.Add(new cp_orden_pago_cancelaciones
                        {
                            IdEmpresa     = info.IdEmpresa,
                            Idcancelacion = Idcancelacion,
                            Secuencia     = secuencia++,

                            IdEmpresa_op   = item.IdEmpresa_op,
                            IdOrdenPago_op = item.IdOrdenPago_op,
                            Secuencia_op   = item.Secuencia_op,

                            IdEmpresa_cxp  = item.IdEmpresa_cxp,
                            IdTipoCbte_cxp = item.IdTipoCbte_cxp,
                            IdCbteCble_cxp = item.IdCbteCble_cxp,

                            IdEmpresa_pago  = info.IdEmpresa,
                            IdTipoCbte_pago = info.IdTipocbte,
                            IdCbteCble_pago = info.IdCbteCble,

                            MontoAplicado    = item.MontoAplicado,
                            SaldoActual      = 0,
                            SaldoAnterior    = 0,
                            fechaTransaccion = DateTime.Now,
                            Observacion      = item.Observacion
                        });
                    }
                    #endregion
                    break;
                }

                Context_ct.SaveChanges();
                Context_b.SaveChanges();
                Context_cxp.SaveChanges();

                Context_ct.Dispose();
                Context_b.Dispose();
                Context_cxp.Dispose();
                return(true);
            }
            catch (Exception ex)
            {
                Context_ct.Dispose();
                Context_b.Dispose();
                Context_cxp.Dispose();
                tb_LogError_Data LogData = new tb_LogError_Data();
                LogData.GuardarDB(new tb_LogError_Info {
                    Descripcion = ex.Message, InnerException = ex.InnerException == null ? null : ex.InnerException.Message, Clase = "ba_Cbte_Ban_Data", Metodo = "modificarDB", IdUsuario = info.IdUsuario
                });
                return(false);
            }
        }
        public bool guardarDB(ba_Cbte_Ban_Info info, cl_enumeradores.eTipoCbteBancario TipoCbteBanco)
        {
            Entities_banco             Context_b   = new Entities_banco();
            Entities_contabilidad      Context_ct  = new Entities_contabilidad();
            Entities_cuentas_por_pagar Context_cxp = new Entities_cuentas_por_pagar();

            try
            {
                #region Variables
                string  TipoCbteBancoS = TipoCbteBanco.ToString();
                int     secuencia      = 1;
                decimal Idcancelacion  = 0;
                #endregion

                #region Datos para el diario
                var e_TipoCbteBan = Context_b.ba_Cbte_Ban_tipo_x_ct_CbteCble_tipo.Where(q => q.CodTipoCbteBan == TipoCbteBancoS && q.IdEmpresa == info.IdEmpresa).FirstOrDefault();
                if (e_TipoCbteBan == null)
                {
                    return(false);
                }
                info.IdTipocbte = e_TipoCbteBan.IdTipoCbteCble;
                info.IdCbteCble = odata_ct.get_id(info.IdEmpresa, info.IdTipocbte);
                #endregion

                #region Diario
                Context_ct.ct_cbtecble.Add(new ct_cbtecble
                {
                    IdEmpresa      = info.IdEmpresa,
                    IdTipoCbte     = info.IdTipocbte,
                    IdCbteCble     = info.IdCbteCble,
                    cb_Fecha       = info.cb_Fecha.Date,
                    cb_Observacion = info.cb_Observacion,
                    IdPeriodo      = info.IdPeriodo = Convert.ToInt32(info.cb_Fecha.Date.ToString("yyyyMM")),
                    IdSucursal     = info.IdSucursal,

                    cb_FechaTransac = DateTime.Now,
                    cb_Estado       = "A",
                    cb_Valor        = Math.Round(info.lst_det_ct.Where(q => q.dc_Valor > 0).Sum(q => q.dc_Valor), 2, MidpointRounding.AwayFromZero),
                    IdUsuario       = info.IdUsuario
                });

                foreach (var item in info.lst_det_ct)
                {
                    Context_ct.ct_cbtecble_det.Add(new ct_cbtecble_det
                    {
                        IdEmpresa           = info.IdEmpresa,
                        IdTipoCbte          = info.IdTipocbte,
                        IdCbteCble          = info.IdCbteCble,
                        secuencia           = secuencia++,
                        IdCtaCble           = item.IdCtaCble,
                        dc_Valor            = Math.Round(item.dc_Valor, 2, MidpointRounding.AwayFromZero),
                        dc_para_conciliar   = item.dc_para_conciliar,
                        IdPunto_cargo       = item.IdPunto_cargo,
                        IdPunto_cargo_grupo = item.IdPunto_cargo_grupo,
                        IdCentroCosto       = item.IdCentroCosto,
                        dc_Observacion      = item.dc_Observacion
                    });
                }
                #endregion

                #region Cbte bancario
                Context_b.ba_Cbte_Ban.Add(new ba_Cbte_Ban
                {
                    IdEmpresa                = info.IdEmpresa,
                    IdCbteCble               = info.IdCbteCble,
                    IdTipocbte               = info.IdTipocbte,
                    Cod_Cbtecble             = info.Cod_Cbtecble,
                    IdPeriodo                = info.IdPeriodo,
                    IdBanco                  = info.IdBanco,
                    cb_Fecha                 = info.cb_Fecha,
                    cb_Observacion           = info.cb_Observacion,
                    cb_Valor                 = info.cb_Valor = Math.Round(info.lst_det_ct.Where(q => q.dc_Valor > 0).Sum(q => q.dc_Valor), 2, MidpointRounding.AwayFromZero),
                    cb_Cheque                = info.cb_Cheque,
                    Estado                   = "A",
                    IdPersona_Girado_a       = info.IdPersona_Girado_a,
                    cb_giradoA               = info.cb_giradoA,
                    cb_ciudadChq             = info.cb_ciudadChq,
                    IdTipoFlujo              = info.IdTipoFlujo,
                    IdTipoNota               = info.IdTipoNota,
                    ValorEnLetras            = info.ValorEnLetras,
                    IdSucursal               = info.IdSucursal,
                    IdEstado_Cbte_Ban_cat    = info.IdEstado_Cbte_Ban_cat,
                    IdEstado_Preaviso_ch_cat = info.IdEstado_Preaviso_ch_cat,
                    IdEstado_cheque_cat      = info.IdEstado_cheque_cat = "ESTCBEMI",
                    IdPersona                = info.IdPersona,
                    IdEntidad                = info.IdEntidad,
                    IdTipo_Persona           = info.IdTipo_Persona,
                    IdSolicitudPago          = info.IdSolicitudPago,
                    cb_FechaCheque           = info.cb_FechaCheque,

                    IdUsuario     = info.IdUsuario,
                    Fecha_Transac = DateTime.Now,
                });
                #endregion

                #region Flujo
                info.list_det = info.list_det == null ? new List <ba_Cbte_Ban_x_ba_TipoFlujo_Info>() : info.list_det;
                if (info.list_det.Count > 0)
                {
                    int Secuencia = 1;
                    foreach (var item in info.list_det)
                    {
                        Context_b.ba_Cbte_Ban_x_ba_TipoFlujo.Add(new ba_Cbte_Ban_x_ba_TipoFlujo
                        {
                            IdEmpresa   = info.IdEmpresa,
                            IdTipocbte  = info.IdTipocbte,
                            IdCbteCble  = info.IdCbteCble,
                            IdTipoFlujo = item.IdTipoFlujo,
                            Valor       = item.Valor,
                            Porcentaje  = item.Porcentaje,
                            Secuencia   = Secuencia++
                        });
                    }
                }
                #endregion
                switch (TipoCbteBanco)
                {
                case cl_enumeradores.eTipoCbteBancario.CHEQ:
                    #region Guardo cancelaciones
                    Idcancelacion = odata_can.get_id(info.IdEmpresa);
                    secuencia     = 1;
                    foreach (var item in info.lst_det_canc_op)
                    {
                        Context_cxp.cp_orden_pago_cancelaciones.Add(new cp_orden_pago_cancelaciones
                        {
                            IdEmpresa     = info.IdEmpresa,
                            Idcancelacion = Idcancelacion,
                            Secuencia     = secuencia++,

                            IdEmpresa_op   = item.IdEmpresa_op,
                            IdOrdenPago_op = item.IdOrdenPago_op,
                            Secuencia_op   = item.Secuencia_op,

                            IdEmpresa_cxp  = item.IdEmpresa_cxp,
                            IdTipoCbte_cxp = item.IdTipoCbte_cxp,
                            IdCbteCble_cxp = item.IdCbteCble_cxp,

                            IdEmpresa_pago  = info.IdEmpresa,
                            IdTipoCbte_pago = info.IdTipocbte,
                            IdCbteCble_pago = info.IdCbteCble,

                            MontoAplicado    = item.MontoAplicado,
                            SaldoActual      = 0,
                            SaldoAnterior    = 0,
                            fechaTransaccion = DateTime.Now,
                            Observacion      = item.Observacion
                        });
                    }
                    #endregion

                    var cheque = Context_b.ba_Talonario_cheques_x_banco.Where(q => q.IdEmpresa == info.IdEmpresa && q.IdBanco == info.IdBanco && q.Num_cheque == info.cb_Cheque).FirstOrDefault();
                    if (cheque != null)
                    {
                        cheque.IdEmpresa_cbtecble_Usado  = info.IdEmpresa;
                        cheque.IdTipoCbte_cbtecble_Usado = info.IdTipocbte;
                        cheque.IdCbteCble_cbtecble_Usado = info.IdCbteCble;
                        cheque.Usado = true;
                    }
                    break;

                case cl_enumeradores.eTipoCbteBancario.DEPO:
                    #region Guardo ingresos
                    foreach (var item in info.lst_det_ing)
                    {
                        Context_b.ba_Caja_Movimiento_x_Cbte_Ban_x_Deposito.Add(new ba_Caja_Movimiento_x_Cbte_Ban_x_Deposito
                        {
                            mba_IdEmpresa  = info.IdEmpresa,
                            mba_IdTipocbte = info.IdTipocbte,
                            mba_IdCbteCble = info.IdCbteCble,

                            mcj_IdEmpresa  = item.mcj_IdEmpresa,
                            mcj_IdTipocbte = item.mcj_IdTipocbte,
                            mcj_IdCbteCble = item.mcj_IdCbteCble,
                            mcj_Secuencia  = item.mcj_Secuencia
                        });
                    }
                    #endregion
                    break;

                case cl_enumeradores.eTipoCbteBancario.NCBA:
                    break;

                case cl_enumeradores.eTipoCbteBancario.NDBA:
                    #region Guardo cancelaciones
                    Idcancelacion = odata_can.get_id(info.IdEmpresa);
                    secuencia     = 1;
                    foreach (var item in info.lst_det_canc_op)
                    {
                        Context_cxp.cp_orden_pago_cancelaciones.Add(new cp_orden_pago_cancelaciones
                        {
                            IdEmpresa     = info.IdEmpresa,
                            Idcancelacion = Idcancelacion,
                            Secuencia     = secuencia++,

                            IdEmpresa_op   = item.IdEmpresa_op,
                            IdOrdenPago_op = item.IdOrdenPago_op,
                            Secuencia_op   = item.Secuencia_op,

                            IdEmpresa_cxp  = item.IdEmpresa_cxp,
                            IdTipoCbte_cxp = item.IdTipoCbte_cxp,
                            IdCbteCble_cxp = item.IdCbteCble_cxp,

                            IdEmpresa_pago  = info.IdEmpresa,
                            IdTipoCbte_pago = info.IdTipocbte,
                            IdCbteCble_pago = info.IdCbteCble,

                            MontoAplicado    = item.MontoAplicado,
                            SaldoActual      = 0,
                            SaldoAnterior    = 0,
                            fechaTransaccion = DateTime.Now,
                            Observacion      = item.Observacion
                        });
                    }
                    #endregion
                    break;
                }

                Context_ct.SaveChanges();
                Context_b.SaveChanges();
                Context_cxp.SaveChanges();

                Context_ct.Dispose();
                Context_b.Dispose();
                Context_cxp.Dispose();
                return(true);
            }
            catch (Exception ex)
            {
                Context_ct.Dispose();
                Context_b.Dispose();
                Context_cxp.Dispose();
                tb_LogError_Data LogData = new tb_LogError_Data();
                LogData.GuardarDB(new tb_LogError_Info {
                    Descripcion = ex.Message, InnerException = ex.InnerException == null ? null : ex.InnerException.Message, Clase = "ba_Cbte_Ban_Data", Metodo = "guardarDB", IdUsuario = info.IdUsuario
                });
                return(false);
            }
        }