/// <summary>
        /// Prepara un BO para la Busqueda en su respectivo catalogo
        /// </summary>
        /// <param name="catalogo">catalogo donde se realizara la busqueda</param>
        /// <returns></returns>
        public object PrepararBOBuscador(string catalogo)
        {
            object obj = null;

            switch (catalogo)
            {
            case "CuentaClienteIdealease":
                var cliente = new CuentaClienteIdealeaseBOF {
                    Nombre = vista.NombreCuentaCliente, UnidadOperativa = vista.UnidadOperativa, Cliente = new ClienteBO(), Activo = true
                };
                obj = cliente;
                break;

            case "DireccionCliente":
                var bo = new CuentaClienteIdealeaseBO {
                    UnidadOperativa = vista.UnidadOperativa, Cliente = new ClienteBO {
                        Id = vista.ClienteID
                    }, Id = vista.CuentaClienteID
                };
                var bof = new DireccionCuentaClienteBOF {
                    Cuenta = bo, Direccion = new DireccionClienteBO {
                        Facturable = true
                    }
                };
                obj = bof;
                break;
            }

            return(obj);
        }
Esempio n. 2
0
        private CuentaClienteIdealeaseBO PrepararListasAMostrar(CuentaClienteIdealeaseBO cliente)
        {
            List <RepresentanteLegalBO> representantes = new List <RepresentanteLegalBO>();

            foreach (RepresentanteLegalBO r in cliente.RepresentantesLegales)
            {
                if (r.Activo == true)
                {
                    representantes.Add(r);
                }
            }
            cliente.RepresentantesLegales = representantes.ConvertAll(r => (PersonaBO)r);
            List <ObligadoSolidarioBO> obligados = new List <ObligadoSolidarioBO>();

            foreach (ObligadoSolidarioBO o in cliente.ObligadosSolidarios)
            {
                if (o.Activo == true)
                {
                    obligados.Add(o);
                }
            }
            cliente.ObligadosSolidarios = obligados.ConvertAll(o => (PersonaBO)o);

            return(cliente);
        }
        public bool ExisteCliente(CuentaClienteIdealeaseBO cliente)
        {
            if (cliente == null)
            {
                throw new Exception("Se esperaba un Cliente");
            }
            if (cliente.Id == null)
            {
                throw new Exception("se esperaba un Cliente");
            }
            if (cliente.Cliente == null)
            {
                throw new Exception("se esperaba un Cliente");
            }
            if (cliente.Cliente.Id == null)
            {
                throw new Exception("se esperaba un Cliente");
            }

            List <CuentaClienteIdealeaseBO> lst = this.clienteBR.Consultar(this.dctx, cliente);

            if (lst.Count > 0)
            {
                return(true);
            }

            return(false);
        }
        public object PrepararBOBuscador(string catalogo)
        {
            object obj = null;

            switch (catalogo)
            {
            case "Sucursal":
                SucursalBOF sucursal = new SucursalBOF();
                sucursal.UnidadOperativa    = new UnidadOperativaBO();
                sucursal.UnidadOperativa.Id = this.vista.UnidadOperativaId;
                sucursal.Nombre             = this.vista.SucursalNombre;
                sucursal.Usuario            = new UsuarioBO()
                {
                    Id = this.vista.UsuarioAutenticado
                };
                obj = sucursal;
                break;

            case "CuentaClienteIdealease":
                CuentaClienteIdealeaseBO cliente = new CuentaClienteIdealeaseBO();
                cliente.Nombre             = this.vista.Cliente;
                cliente.UnidadOperativa    = new UnidadOperativaBO();
                cliente.UnidadOperativa.Id = this.vista.UnidadOperativaId;
                cliente.Activo             = true;
                obj = cliente;
                break;
            }

            return(obj);
        }
        public void Inicializar()
        {
            if (this.ValidarDatosNavegacion() == true)
            {
                this.PrepararNuevo();
                CuentaClienteIdealeaseBO cliente = (CuentaClienteIdealeaseBO)this.ObtenerDatosNavegacion();
                this.vista.Cliente = cliente;
                List <CuentaClienteIdealeaseBO> LastCliente = (List <CuentaClienteIdealeaseBO>)clienteBR.ConsultarCompleto(dctx, cliente);
                if (LastCliente.Count < 1)
                {
                    throw new Exception("No se encontró al cliente que desea editar");
                }
                if (LastCliente.Count > 1)
                {
                    throw new Exception("Se encontró mas de un registro del cliente que desea editar");
                }

                this.vista.ClienteAnterior = LastCliente[0];
                this.vista.Representantes  = cliente.RepresentantesLegales.ConvertAll(r => (RepresentanteLegalBO)r);
                this.vista.Obligados       = cliente.ObligadosSolidarios.ConvertAll(o => (ObligadoSolidarioBO)o);
                this.vista.ListaTelefonos  = cliente.Telefonos.ConvertAll(t => (TelefonoClienteBO)t);
                this.PrepararNuevo();
                this.DatoAInterfazUsuarioCliente();
                this.ActualizarVistaObligadosSolidarios();
                this.ActualizarVistaRepresentantesLegales();
                this.EstablecerSeguridad();
            }
            else
            {
                this.MostrarMensaje("Se esperaba un cliente Idealease", ETipoMensajeIU.ADVERTENCIA);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Actualiza la información de los datos del cliente con la información de oracle
        /// </summary>
        public void ActualizarClienteOracle()
        {
            InterfazUsuarioADato();
            CuentaClienteIdealeaseBO        clientes    = (CuentaClienteIdealeaseBO)this.ObtenerDatosNavegacion();
            List <CuentaClienteIdealeaseBO> LastCliente = (List <CuentaClienteIdealeaseBO>)clienteBR.ConsultarCompleto(dctx, clientes);

            this.vista.ClienteAnterior = LastCliente[0];
            this.vista.Cliente.Activo  = clientes.Cliente.Activo;
            #region SC0008
            SeguridadBO seguridad = new SeguridadBO(Guid.Empty, new UsuarioBO()
            {
                Id = this.vista.UC
            },
                                                    new AdscripcionBO()
            {
                UnidadOperativa = new UnidadOperativaBO()
                {
                    Id = this.vista.UnidadOperativaId
                }
            });
            clienteBR.ActualizarCompleto(dctx, vista.Cliente, vista.ClienteAnterior, seguridad);
            #endregion

            vista.EstablecerPaquete(this.vista.ClienteAnterior);
            DatoAInterfazUsuario(this.vista.ClienteAnterior);
            vista.EstablecerAcciones();
        }
Esempio n. 7
0
        public void Editar()
        {
            CuentaClienteIdealeaseBO cliente = (CuentaClienteIdealeaseBO)this.vista.ObtenerDatos();

            this.LimpiarSesion();
            this.vista.EstablecerDatosNavegacion("DatosCuentaClienteIdealeaseBO", cliente);

            this.vista.RedirigirAEdicion();
        }
        /// <summary>
        /// Obtiene la lista de Contactos Cliente Idealease de acuerdo al Cliente Idealease de la Unidad, la Sucursal de la
        /// Unidad Idealease y si recibe correo. En caso de no encontrar Contactos Cliente Idealease se toma el Correo configurado
        /// del Cliente Idealease, en caso de no tener un correo configurado despliega un mensaje de error.
        /// </summary>
        private void CargarDatosContactoCliente()
        {
            ClienteBO cliente = mantenimientoSeleccionado.IngresoUnidad.Unidad.Cliente;
            CuentaClienteIdealeaseBR ctrlCuentaIdealease = new CuentaClienteIdealeaseBR();
            CuentaClienteIdealeaseBO cuentaIdealease     = ctrlCuentaIdealease.Consultar(dataContext, getFiltroCuentaClienteIdealease(cliente)).FirstOrDefault();
            string nombreCliente = cliente.NombreCompleto != null ? (" " + cliente.NombreCompleto) : "";

            if (cuentaIdealease != null && cuentaIdealease.Id != null)
            {
                ContactoClienteBR        ctrlContactoCliente = new ContactoClienteBR();
                List <ContactoClienteBO> contactos           = ctrlContactoCliente.Consultar(dataContext, getFiltroContactoCliente(cuentaIdealease, mantenimientoSeleccionado.IngresoUnidad.Unidad.Sucursal));
                if (contactos.Count > 0)
                {
                    List <DetalleContactoClienteBO> detalles = new List <DetalleContactoClienteBO>();
                    foreach (ContactoClienteBO contacto in contactos)
                    {
                        ContactoClienteBO c = ctrlContactoCliente.ConsultarCompleto(dataContext, contacto).FirstOrDefault();
                        foreach (DetalleContactoClienteBO detalle in c.Detalles)
                        {
                            if (detalle.RecibeCorreoElectronico.Value)
                            {
                                detalles.Add(detalle);
                            }
                        }
                    }
                    if (detalles.Count == 0)
                    {
                        vista.MostrarMensaje("El Cliente Idealease " + nombreCliente + " no tiene algún contacto cliente para recibir correos electronicos.", ETipoMensajeIU.ADVERTENCIA);
                    }
                    else
                    {
                        vista.ContactoClienteSeleccionado = detalles.First();
                    }
                    vista.ContactosCliente = detalles;
                }
                else
                {
                    if (cuentaIdealease.Correo == null || cuentaIdealease.Correo.Trim() == null || cuentaIdealease.Correo.Equals(""))
                    {
                        vista.MostrarMensaje("El Cliente Idealease" + nombreCliente + " no tiene un Correo configurado.", ETipoMensajeIU.ADVERTENCIA);
                    }
                    DetalleContactoClienteBO contacto = new DetalleContactoClienteBO()
                    {
                        Nombre = cuentaIdealease.Nombre != null ? cuentaIdealease.Nombre : "",
                        Correo = cuentaIdealease.Correo,
                    };
                    vista.ContactoClienteSeleccionado = contacto;
                }
                vista.CargarDatosContactoCliente();
            }
            else
            {
                vista.ContactoClienteSeleccionado = null;
                vista.MostrarMensaje("El Cliente" + nombreCliente + " no tiene una Cuenta Cliente Idealease.", ETipoMensajeIU.ADVERTENCIA);
            }
        }
Esempio n. 9
0
        public void DatoAInterfazUsuario(CuentaClienteIdealeaseBO bo)
        {
            if (bo.ActaConstitutiva != null)
            {
                this.vista.FechaEscritura   = bo.ActaConstitutiva.FechaEscritura;
                this.vista.LocalidadNotaria = bo.ActaConstitutiva.LocalidadNotaria;
                this.vista.LocalidadRPPC    = bo.ActaConstitutiva.LocalidadRPPC;
                this.vista.NombreNotario    = bo.ActaConstitutiva.NombreNotario;
                this.vista.NumeroEscritura  = bo.ActaConstitutiva.NumeroEscritura;
                this.vista.NumeroFolio      = bo.ActaConstitutiva.NumeroRPPC;
                this.vista.NumeroNotaria    = bo.ActaConstitutiva.NumeroNotaria;
                this.vista.FechaRPPC        = bo.ActaConstitutiva.FechaRPPC;
            }

            this.vista.FechaRegistro = bo.FechaRegistroHacienda;
            this.vista.GiroEmpresa   = bo.GiroEmpresa;

            this.vista.Fisica = bo.Cliente.Fisica;

            this.vista.Nombre    = bo.Nombre;
            this.vista.ClienteID = bo.Id;

            if (bo.ObligadosSolidarios != null)
            {
                this.vista.Obligados = bo.ObligadosSolidarios.ConvertAll(o => (ObligadoSolidarioBO)o);
            }
            if (bo.RepresentantesLegales != null)
            {
                this.vista.Representantes = bo.RepresentantesLegales.ConvertAll(r => (RepresentanteLegalBO)r);
            }

            if (bo.Telefonos != null)
            {
                this.vista.ListaTelefonos = bo.Telefonos.ConvertAll(t => (TelefonoClienteBO)t);
            }


            this.vista.RFC        = bo.Cliente.RFC;
            this.vista.TipoCuenta = bo.TipoCuenta;
            this.vista.CURP       = bo.CURP;
            #region SC0001
            this.vista.Correo         = bo.Correo;
            this.vista.DiasUsoUnidad  = bo.DiasUsoUnidad;
            this.vista.HorasUsoUnidad = bo.HorasUsoUnidad;
            #endregion
            this.vista.NumeroCuentaOracle = bo.Numero;
            if (bo.Observaciones != null || bo.Observaciones != string.Empty)
            {
                this.vista.Observaciones = bo.Observaciones;
            }
            if (bo.SectorCliente != null)
            {
                this.vista.SectorCliente = bo.SectorCliente;
            }
        }
        /// <summary>
        /// Crea y obtiene un nuevo Filtro de Contacto Cliente Idealease, para realizar la búsqueda de la Contacto Cliente Idealease.
        /// </summary>
        /// <param name="cuentaIdealease">El filtro Cuenta Cliente Idealease para obtener el Contacto Cliente Idealease.</param>
        /// <param name="sucursal">El filtro Sucursal para obtener el Contacto Cliente Idealease.</param>
        /// <returns>Objeto de tipo ContactoClienteBO.</returns>
        private ContactoClienteBO getFiltroContactoCliente(CuentaClienteIdealeaseBO cuentaIdealease, SucursalBO sucursal)
        {
            ContactoClienteBO filtroContactoCliente = new ContactoClienteBO()
            {
                CuentaClienteIdealease = cuentaIdealease,
                Sucursal = sucursal,
                Activo   = true
            };

            return(filtroContactoCliente);
        }
        public void VerDetalles(int index)
        {
            if (index >= this.vista.ListaClientes.Count || index < 0)
            {
                throw new Exception("No se encontró el cliente seleccionado.");
            }
            CuentaClienteIdealeaseBO bo = this.vista.ListaClientes[index];

            this.LimpiarSesion();
            this.vista.EstablecerPaqueteNavegacion("DatosCuentaClienteIdealeaseBO", bo);
            this.vista.RedirigirADetalles();
        }
        public void ActualizarCliente()
        {
            string s;

            if (String.IsNullOrEmpty(s = ValidarDatos()))
            {
                try
                {
                    InterfazUsuarioADato();

                    #region SC0008
                    SeguridadBO seguridad = new SeguridadBO(Guid.Empty, new UsuarioBO()
                    {
                        Id = this.vista.UC
                    },
                                                            new AdscripcionBO()
                    {
                        UnidadOperativa = new UnidadOperativaBO()
                        {
                            Id = this.vista.UnidadOperativa.Id
                        }
                    });

                    clienteBR.ActualizarCompleto(dctx, vista.Cliente, vista.ClienteAnterior, seguridad);
                    #endregion

                    CuentaClienteIdealeaseBO cliente = new CuentaClienteIdealeaseBO();
                    cliente.Cliente    = new ClienteBO();
                    cliente.Cliente.Id = vista.Cliente.Cliente.Id;
                    cliente.Id         = vista.Cliente.Id;

                    cliente.Cliente.Fisica     = vista.Fisica;
                    cliente.Cliente.RFC        = vista.RFC;
                    cliente.UnidadOperativa    = new UnidadOperativaBO();
                    cliente.UnidadOperativa.Id = vista.Cliente.UnidadOperativa.Id;

                    cliente.Observaciones = vista.Observaciones;
                    cliente.SectorCliente = vista.SectorCliente;

                    vista.EstablecerPaquete(cliente);
                    vista.LimpiarSesion();
                    vista.RedirigirADetalle();
                }
                catch (Exception ex)
                {
                    this.MostrarMensaje("Error al intentar actualizar el cliente", ETipoMensajeIU.ERROR, this.nombreClase + ".ActualizarCliente: " + ex.Message);
                }
            }
            else
            {
                this.MostrarMensaje("Los siguientes campos no deben estar vacíos: " + s.Substring(2), ETipoMensajeIU.ADVERTENCIA);
            }
        }
        /// <summary>
        /// Crea y obtiene un nuevo Filtro de Cuenta Cliente Idealease, para realizar la búsqueda de la Cuenta Cliente Idealease.
        /// </summary>
        /// <param name="cliente">El filtro para obtener la Cuenta Cliente Idealease.</param>
        /// <returns>Objeto de tipo CuentaClienteIdealeaseBO.</returns>
        private CuentaClienteIdealeaseBO getFiltroCuentaClienteIdealease(ClienteBO cliente)
        {
            CuentaClienteIdealeaseBO filtroCuentaIdealease = new CuentaClienteIdealeaseBO()
            {
                UnidadOperativa = new UnidadOperativaBO()
                {
                    Id = vista.UnidadOperativaID
                },
                Cliente = cliente
            };

            return(filtroCuentaIdealease);
        }
        public CuentaClienteIdealeaseBO PrepararBO()
        {
            CuentaClienteIdealeaseBO cliente = new CuentaClienteIdealeaseBO
            {
                Id = this.vista.CuentaClienteID,
                UnidadOperativa = this.vista.UnidadOperativa,
                Nombre          = this.vista.Nombre,
                Cliente         = new ClienteBO {
                    Fisica = this.vista.Fisica, RFC = this.vista.RFC, Id = this.vista.ClienteID
                }
            };

            return(cliente);
        }
Esempio n. 15
0
        public void ConsultarCliente(object oBo)
        {
            try
            {
                if (oBo == null)
                {
                    throw new Exception(this.nombreClase + ".ConsultarCliente: se esperaba un objeto en la navegación. No se puede identificar qué cliente se desea consultar.");
                }
                if (!(oBo is CuentaClienteIdealeaseBO))
                {
                    throw new Exception(this.nombreClase + ".ConsultarCliente: Se esperaba un cliente de Idealease.");
                }

                CuentaClienteIdealeaseBO        bo          = (CuentaClienteIdealeaseBO)oBo;
                List <CuentaClienteIdealeaseBO> lstClientes = new List <CuentaClienteIdealeaseBO>();

                lstClientes = this.clienteBR.ConsultarCompleto(dctx, bo);
                if (lstClientes.Count < 1)
                {
                    throw new Exception("No se encontró ningún registro que corresponda a la información proporcionada.");
                }
                if (lstClientes.Count > 1)
                {
                    throw new Exception("La consulta devolvió más de un registro.");
                }

                if (bo.Cliente.Fisica == true)
                {
                    this.vista.OcultarActaConstitutiva(); this.vista.MostrarHacienda();
                }
                if (bo.Cliente.Fisica == false)
                {
                    this.vista.OcultarHacienda(); this.vista.MostrarActaConstitutiva();
                }
                lstClientes[0].Cliente.RFC       = bo.Cliente.RFC;
                lstClientes[0].Cliente.Fisica    = bo.Cliente.Fisica;
                lstClientes[0].UnidadOperativaId = bo.UnidadOperativaId;
                lstClientes[0].Cliente.Id        = bo.Cliente.Id;
                lstClientes[0].SectorCliente     = bo.SectorCliente;
                this.PrepararListasAMostrar(lstClientes[0]);
                CuentaClienteIdealeaseBO cliente = this.PrepararListasAMostrar(lstClientes[0]);
                this.ObtenerCreditosCliente(cliente.Id);
                this.vista.EstablecerDatosNavegacion("DatosCuentaClienteIdealeaseBO", cliente);
                this.DatoAInterfazUsuario(cliente);
            }
            catch (Exception ex)
            {
                throw new Exception(this.nombreClase + ".ConsultarCliente: " + ex.Message);
            }
        }
        public void DesplegarResultadoBuscador(string catalogo, object selecto)
        {
            switch (catalogo)
            {
            case "Sucursal":
                SucursalBO sucursal = (SucursalBO)selecto;
                if (sucursal != null && sucursal.Id != null)
                {
                    this.vista.SucursalId = sucursal.Id;
                }
                else
                {
                    this.vista.SucursalId = null;
                }

                if (sucursal != null && sucursal.Nombre != null)
                {
                    this.vista.SucursalNombre = sucursal.Nombre;
                }
                else
                {
                    this.vista.SucursalNombre = null;
                }
                break;

            case "CuentaClienteIdealease":
                CuentaClienteIdealeaseBO cliente = (CuentaClienteIdealeaseBO)selecto;

                if (cliente != null && cliente.Id != null)
                {
                    this.vista.ClienteId = cliente.Id;
                }
                else
                {
                    this.vista.ClienteId = null;
                }

                if (cliente != null && cliente.Nombre != null)
                {
                    this.vista.Cliente = cliente.Nombre;
                }
                else
                {
                    this.vista.Cliente = null;
                }
                break;
            }
        }
 /// <summary>
 /// Despliega el Resultado del Buscador
 /// </summary>
 /// <param name="catalogo">Catalogo en el que se realizo la busqueda</param>
 /// <param name="selecto">Objeto Resultante</param>
 public void DesplegarResultadoBuscador(string catalogo, object selecto)
 {
     switch (catalogo)
     {
     case "Cliente":
         CuentaClienteBO cliente = (CuentaClienteBO)selecto ??
                                   new CuentaClienteBO();
         if (cliente.Cliente == null)
         {
             cliente.Cliente = new ClienteBO();
         }
         CuentaClienteIdealeaseBO vistaCliente = new CuentaClienteIdealeaseBO();
         vistaCliente.UnidadOperativa = new UnidadOperativaBO();
         vistaCliente.Cliente         = new ClienteBO();
         vistaCliente.UnidadOperativa = this.vista.UnidadOperativa;
         vistaCliente.Id         = cliente.Id;
         vistaCliente.Cliente.Id = cliente.Cliente.Id;
         vistaCliente.Activo     = true;
         vistaCliente.Numero     = cliente.Numero;
         if (vistaCliente.Id != null)
         {
             if (this.ExisteCliente(vistaCliente) != true)
             {
                 vista.NombreCliente      = !string.IsNullOrEmpty(cliente.Nombre) ? cliente.Nombre : string.Empty;
                 vista.RFC                = cliente.Cliente.RFC;
                 vista.Fisica             = cliente.Cliente.Fisica;
                 vista.NombreCliente      = cliente.Nombre;
                 vista.Cliente            = vistaCliente;
                 vista.NumeroCuentaOracle = vistaCliente.Numero;
                 Inicializar(true);
             }
             else
             {
                 this.vista.DeshabilitarCampos();
                 this.vistaObligado.HabilitarCampos(false);
                 this.vistaRepresentante.HabilitarCampos(true);
                 vistaRepresentante.HabilitarCampos(false);
                 this.vista.MostrarMensaje("La información del Cliente que proporcionó ya se encuentra registrado en el sistema. Favor de verificar.", ETipoMensajeIU.ADVERTENCIA, null);
             }
         }
         break;
     }
 }
        public void ConsultarClientes()
        {
            try
            {
                CuentaClienteIdealeaseBO        cliente     = this.PrepararBO();
                List <CuentaClienteIdealeaseBO> lstClientes = clienteBR.Consultar(dctx, cliente);
                this.vista.ListaClientes = lstClientes;
                this.MostrarDatos();

                if (lstClientes.Count == 0)
                {
                    this.vista.MostrarMensaje("La búsqueda no produjo resultados", ETipoMensajeIU.INFORMACION,
                                              "No se encontraron coincidencias con los criterios ingresados. Verifique sus datos");
                }
            }
            catch (Exception ex)
            {
                this.MostrarMensaje("Error al intentar consultar los clientes", ETipoMensajeIU.ERROR, nombreClase + ".ConsultarClientes:" + ex.Message);
            }
        }
        public object InterfazUsuarioADatoTelefonos()
        {
            List <TelefonoClienteBO> lstTelefonos = new List <TelefonoClienteBO>();
            TelefonoClienteBO        telefonos;
            CuentaClienteIdealeaseBO Cliente;

            foreach (TelefonoClienteBO TelefonoBO in this.vista.ListaTelefonos)
            {
                telefonos                 = new TelefonoClienteBO();
                Cliente                   = new CuentaClienteIdealeaseBO();
                telefonos.Telefono        = TelefonoBO.Telefono;
                telefonos.CuentaClienteID = this.vista.Cliente.Id;
                telefonos.Auditoria       = new AuditoriaBO
                {
                    FC  = this.vista.FC,
                    FUA = this.vista.FUA,
                    UC  = this.vista.UC,
                    UUA = this.vista.UUA
                };
                telefonos.Activo = true;
                lstTelefonos.Add(telefonos);
            }
            return(lstTelefonos);
        }
Esempio n. 20
0
        protected void ImprimirReporte(Dictionary <string, Object> datos, XmlDocument documento)
        {
            try
            {
                #region Obtener Formato del XML
                string leyendaCondiciones      = string.Empty;
                string leyendaCargoCombustible = string.Empty;
                string leyendaBitacora         = string.Empty;
                string leyendaSeguro           = string.Empty;
                string leyendaArrendatarios    = string.Empty;
                string leyendaOperacion        = string.Empty;
                string leyendaInspeccion       = string.Empty;
                string leyendaTitulo           = string.Empty;
                string numeroPlaca             = string.Empty;
                string direccionSuc            = string.Empty;
                string telefonoUO  = string.Empty;
                string direccionUO = string.Empty;

                XmlNodeList textoCondiciones = documento.GetElementsByTagName("condiciones");
                if (textoCondiciones.Count < 1)
                {
                    throw new Exception("el formato del archivo XML es incorrecto");
                }
                leyendaCondiciones = textoCondiciones[0].InnerText;
                XmlNodeList textoCargoCombustible = documento.GetElementsByTagName("cargoCombustible");
                if (textoCargoCombustible.Count < 1)
                {
                    throw new Exception("El formato del archivo XML es incorrecto");
                }
                leyendaCargoCombustible = textoCargoCombustible[0].InnerText;
                XmlNodeList textoBitacora = documento.GetElementsByTagName("bitacora");
                if (textoBitacora.Count < 1)
                {
                    throw new Exception("El formato del archivo XML es incorrecto");
                }
                leyendaBitacora = textoBitacora[0].InnerText;
                XmlNodeList textoSeguro = documento.GetElementsByTagName("seguro");
                if (textoSeguro.Count < 1)
                {
                    throw new Exception("El formato del archivo XML es incorrecto");
                }
                leyendaSeguro = textoSeguro[0].InnerText;
                XmlNodeList textoArrendatarios = documento.GetElementsByTagName("arrendatarios");
                if (textoArrendatarios.Count < 1)
                {
                    throw new Exception("El formato del archivo XML es incorrecto");
                }
                leyendaArrendatarios = textoArrendatarios[0].InnerText;
                XmlNodeList textoOperacion = documento.GetElementsByTagName("operacion");
                if (textoOperacion.Count < 1)
                {
                    throw new Exception("El formato del archivo XML es incorrecto");
                }
                leyendaOperacion = textoOperacion[0].InnerText;
                XmlNodeList textoInspeccion = documento.GetElementsByTagName("inspeccion");
                if (textoInspeccion.Count < 1)
                {
                    throw new Exception("El formato del archivo XML es incorrecto");
                }
                leyendaInspeccion = textoInspeccion[0].InnerText;
                XmlNodeList textoTitulo = documento.GetElementsByTagName("Titulo");
                if (textoTitulo.Count < 1)
                {
                    throw new Exception("El formato del archivo XML es incorrecto");
                }
                leyendaTitulo = textoTitulo[0].InnerText;
                #endregion
                #region Iniciar Variables

                if (datos["Contrato"] == null)
                {
                    throw new Exception("Se esperaba un contrato");
                }
                if (datos["Firmantes"] == null)
                {
                    throw new Exception("Se esperaba Firmantes");
                }
                if (datos["Modulo"] == null)
                {
                    throw new Exception("Se esperaba una configuración de módulo");
                }
                if (!(datos["Contrato"] is ContratoRDBO))
                {
                    throw new Exception("Se esperaba un contrato de Renta Diaria");
                }

                // Contrato
                ContratoRDBO contrato = (ContratoRDBO)datos["Contrato"];
                if (contrato == null)
                {
                    contrato = new ContratoRDBO();
                }
                if (contrato.Sucursal == null)
                {
                    contrato.Sucursal = new SucursalBO();
                }
                if (contrato.Sucursal.DireccionesSucursal == null)
                {
                    direccionSuc = string.Empty;
                }
                else
                {
                    var direcUO = contrato.Sucursal.DireccionesSucursal.Find(x => x.Primaria != null && x.Primaria.Value == true);
                    if (direcUO != null)
                    {
                        if (!string.IsNullOrEmpty(direcUO.Calle) &&
                            !string.IsNullOrWhiteSpace(direcUO.Calle))
                        {
                            direccionSuc = direcUO.Calle;
                        }
                    }
                }
                if (contrato.Cliente == null)
                {
                    contrato.Cliente = new CuentaClienteIdealeaseBO();
                }
                if (contrato.Cliente.Cliente == null)
                {
                    contrato.Cliente.Cliente = new ClienteBO();
                }
                if (contrato.Cliente.Direcciones == null)
                {
                    DireccionClienteBO direccion = new DireccionClienteBO();
                    contrato.Cliente.Agregar(direccion);
                }
                if (contrato.Operador == null)
                {
                    contrato.Operador = new OperadorBO();
                }
                if (contrato.Operador.Direccion == null)
                {
                    contrato.Operador.Direccion = new DireccionPersonaBO();
                }
                if (contrato.Operador.Licencia == null)
                {
                    contrato.Operador.Licencia = new LicenciaBO();
                }
                if (contrato.Operador.Direccion.Ubicacion == null)
                {
                    contrato.Operador.Direccion.Ubicacion = new UbicacionBO();
                }
                if (contrato.Operador.Direccion.Ubicacion.Ciudad == null)
                {
                    contrato.Operador.Direccion.Ubicacion.Ciudad = new CiudadBO();
                }
                if (contrato.Operador.Direccion.Ubicacion.Estado == null)
                {
                    contrato.Operador.Direccion.Ubicacion.Estado = new EstadoBO();
                }

                LineaContratoRDBO linea = contrato.ObtenerLineaContrato();
                if (linea == null)
                {
                    linea = new LineaContratoRDBO();
                }
                if (linea.Equipo == null)
                {
                    linea.Equipo = new UnidadBO();
                }
                if (linea.Equipo.TipoEquipoServicio == null)
                {
                    linea.Equipo.TipoEquipoServicio = new TipoUnidadBO();
                }
                if (linea.Equipo.ActivoFijo == null)
                {
                    linea.Equipo.ActivoFijo = new ActivoFijoBO();
                }
                if (linea.Equipo.Modelo == null)
                {
                    linea.Equipo.Modelo = new ModeloBO();
                }
                if (((UnidadBO)linea.Equipo).CaracteristicasUnidad == null)
                {
                    ((UnidadBO)linea.Equipo).CaracteristicasUnidad = new CaracteristicasUnidadBO();
                }
                if (linea.Equipo.TipoEquipoServicio == null)
                {
                    linea.Equipo.TipoEquipoServicio = new TipoUnidadBO();
                }
                if (linea.Cobrable == null)
                {
                    linea.Cobrable = new TarifaContratoRDBO();
                }
                contrato.LineasContrato = new List <ILineaContrato>();
                contrato.AgregarLineaContrato(linea);
                if (linea.ListadosVerificacion == null)
                {
                    linea.ListadosVerificacion = new List <ListadoVerificacionBO>();
                }

                // Configuración del Modulo

                ModuloBO modulo = (ModuloBO)datos["Modulo"];
                ConfiguracionUnidadOperativaBO unidadOperativaConfiguracion;
                if (modulo == null)
                {
                    modulo = new ModuloBO();
                }
                if (modulo.Configuracion == null)
                {
                    modulo.Configuracion = new ConfiguracionModuloBO();
                }
                if (contrato.Sucursal.UnidadOperativa.Id == null)
                {
                    unidadOperativaConfiguracion = new ConfiguracionUnidadOperativaBO();
                }
                else
                {
                    unidadOperativaConfiguracion = modulo.ObtenerConfiguracionUO(new UnidadOperativaBO {
                        Id = contrato.Sucursal.UnidadOperativa.Id
                    });
                }
                if (unidadOperativaConfiguracion == null)
                {
                    unidadOperativaConfiguracion = new ConfiguracionUnidadOperativaBO();
                }
                if (unidadOperativaConfiguracion.ConfiguracionModulo == null)
                {
                    unidadOperativaConfiguracion.ConfiguracionModulo = new ConfiguracionModuloBO();
                }
                //Tramites
                List <TramiteBO> tramites = (List <TramiteBO>)datos["Tramites"];
                if (tramites == null)
                {
                    tramites = new List <TramiteBO>();
                }

                PlacaEstatalBO placaEstatal = (PlacaEstatalBO)tramites.Find(t => t.Tipo == ETipoTramite.PLACA_ESTATAL);
                if (placaEstatal != null)
                {
                    numeroPlaca = placaEstatal.Resultado;
                }
                PlacaFederalBO placaFederal = (PlacaFederalBO)tramites.Find(t => t.Tipo == ETipoTramite.PLACA_FEDERAL);
                if (placaFederal != null)
                {
                    numeroPlaca = placaFederal.Resultado;
                }
                //Firmantes

                Tuple <IConstituible, List <PersonaBO>, List <IConstituible> > firmantes =
                    (Tuple <IConstituible, List <PersonaBO>, List <IConstituible> >)datos["Firmantes"];
                if (firmantes == null)
                {
                    IConstituible        cliente        = new CuentaClienteIdealeaseBO();
                    List <PersonaBO>     representantes = new List <PersonaBO>();
                    List <IConstituible> depositarios   = new List <IConstituible>();
                    firmantes = new Tuple <IConstituible, List <PersonaBO>, List <IConstituible> >(cliente, representantes,
                                                                                                   depositarios);
                }

                //Usuarios
                UsuarioBO usuarioCreacion = (UsuarioBO)datos["UsuarioCreacion"];
                if (usuarioCreacion == null)
                {
                    usuarioCreacion = new UsuarioBO();
                }

                UsuarioBO usuarioCierre = (UsuarioBO)datos["UsuarioCierre"];
                if (usuarioCierre == null)
                {
                    usuarioCierre = new UsuarioBO();
                }

                //Sucursal Matriz
                SucursalBO matriz = (SucursalBO)datos["SucursalMatriz"];
                if (matriz == null)
                {
                    matriz = new SucursalBO();
                }
                if (matriz.UnidadOperativa == null)
                {
                    matriz.UnidadOperativa = new UnidadOperativaBO();
                }
                if (matriz.DireccionesSucursal == null)
                {
                    direccionUO = string.Empty;
                }
                else
                {
                    var direcUO = matriz.DireccionesSucursal.Find(x => x.Primaria != null && x.Primaria.Value == true);
                    if (direcUO != null)
                    {
                        if (!string.IsNullOrEmpty(direcUO.Telefono) &&
                            !string.IsNullOrWhiteSpace(direcUO.Telefono))
                        {
                            telefonoUO = direcUO.Telefono;
                            if (!string.IsNullOrEmpty(direcUO.Calle) &&
                                !string.IsNullOrWhiteSpace(direcUO.Calle))
                            {
                                direccionUO = direcUO.Calle;
                            }
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(direcUO.Calle) &&
                                !string.IsNullOrWhiteSpace(direcUO.Calle))
                            {
                                direccionUO = direcUO.Calle;
                            }
                        }
                    }
                }

                #endregion
                #region Asignar valores al Reporte
                #region Encabezado
                xrlblTitulo.Html = leyendaTitulo;
                if (String.IsNullOrEmpty(unidadOperativaConfiguracion.ConfiguracionModulo.URLLogoEmpresa))
                {
                    xrLogo.ImageUrl = modulo.Configuracion.URLLogoEmpresa;
                }
                else
                {
                    xrLogo.ImageUrl = unidadOperativaConfiguracion.ConfiguracionModulo.URLLogoEmpresa;
                }
                xrlblFormatoNumero.Text = contrato.NumeroContrato ?? String.Empty;
                if (contrato.Estatus == EEstatusContrato.Borrador || contrato.Estatus == EEstatusContrato.EnPausa)
                {
                    Watermark.Text = "BORRADOR";
                }

                #endregion
                #region Seccion Izquierda

                xrlblUnidadOperativa.Text = matriz.UnidadOperativa.Nombre ?? String.Empty;
                xrlblCliente.Text         = contrato.Cliente.Nombre ?? String.Empty;
                xrlblRFC.Text             = contrato.Cliente.Cliente.RFC ?? String.Empty;
                xrtblCellDireccion.Text   = contrato.Cliente.Direccion ?? String.Empty;

                DireccionClienteBO direccionCliente = contrato.Cliente.Direcciones.Find(c => c.Primaria != null && c.Primaria.Value) ??
                                                      new DireccionClienteBO();

                if (direccionCliente.Ubicacion == null)
                {
                    direccionCliente.Ubicacion = new UbicacionBO();
                }
                if (direccionCliente.Ubicacion.Ciudad == null)
                {
                    direccionCliente.Ubicacion.Ciudad = new CiudadBO();
                }
                if (direccionCliente.Ubicacion.Estado == null)
                {
                    direccionCliente.Ubicacion.Estado = new EstadoBO();
                }

                xrtblCellCiudad.Text = direccionCliente.Ubicacion.Ciudad.Codigo ?? String.Empty;
                xrtblCellEstado.Text = direccionCliente.Ubicacion.Estado.Codigo ?? String.Empty;
                xrtblCellCP.Text     = direccionCliente.CodigoPostal ?? String.Empty;



                xrtblCellNumeroCuenta.Text = contrato.Cliente.Id != null?contrato.Cliente.Id.ToString() : String.Empty;

                //SC0021 orden de compra con N/A
                if (contrato.FormaPago == null)
                {
                    xrtblCellOrdenCompra.Text = String.Empty;
                }
                if (contrato.FormaPago == null && contrato.TipoConfirmacion == null)
                {
                    xrtblCellOrdenCompra.Text = String.Empty;
                }
                else
                {
                    if (contrato.FormaPago != null && contrato.TipoConfirmacion != null &&
                        contrato.FormaPago == EFormaPago.CREDITO &&
                        contrato.TipoConfirmacion == ETipoConfirmacion.ORDEN_DE_COMPRA)
                    {
                        xrtblCellOrdenCompra.Text = contrato.AutorizadorOrdenCompra;
                    }
                    else
                    {
                        xrtblCellOrdenCompra.Text = "N/A";
                    }
                }
                xrtblCellNombreOperador.Text      = contrato.Operador.Nombre ?? String.Empty;
                xrtblCellExperienciaOperador.Text = contrato.Operador.AñosExperiencia != null
                                                        ? contrato.Operador.AñosExperiencia.ToString()
                                                        : String.Empty;

                xrtblCellCalleOperador.Text  = contrato.Operador.Direccion.Calle ?? String.Empty;
                xrtblCellCiudadOperador.Text = contrato.Operador.Direccion.Ubicacion.Ciudad.Nombre ?? String.Empty;
                xrtblCellEstadoOperador.Text = contrato.Operador.Direccion.Ubicacion.Estado.Nombre ?? String.Empty;
                xrtblCellCPOperador.Text     = contrato.Operador.Direccion.CodigoPostal ?? String.Empty;
                if (contrato.Operador.Licencia.Tipo == ETipoLicencia.ESTATAL)
                {
                    xrchkEstatal.Checked = true;
                }
                if (contrato.Operador.Licencia.Tipo == ETipoLicencia.FEDERAL)
                {
                    xrchkFederal.Checked = true;
                }
                xrTableCell20.Controls.Add(xrchkEstatal);
                xrTableCell21.Controls.Add(xrchkFederal);
                xrtblCellNumeroLicencia.Text  = contrato.Operador.Licencia.Numero ?? String.Empty;
                xrtblCellEstadoLicencia.Text  = contrato.Operador.Licencia.Estado ?? String.Empty;
                xrtblCellFechaExpiracion.Text = contrato.Operador.Licencia.FechaExpiracion != null
                                                    ? contrato.Operador.Licencia.FechaExpiracion.Value.ToString("dd/MM/yyyy")
                                                    : String.Empty;

                xrtblCellFechaNacimiento.Text = contrato.Operador.FechaNacimiento != null
                                                    ? contrato.Operador.FechaNacimiento.Value.ToString("dd/MM/yyyy")
                                                    : String.Empty;

                xrlblLeyendaCondiciones.Html      = leyendaCondiciones;
                xrtblCellAreaOperacion.Text       = contrato.DestinoAreaOperacion ?? String.Empty;
                xrtblCellVehiculoDevuelto.Text    = direccionSuc ?? String.Empty;
                xrtblCellMercanciaTrasportar.Text = contrato.MercanciaTransportar ?? String.Empty;

                if (contrato.MotivoRenta == EMotivoRenta.DEMOSTRACION)
                {
                    xrchkDemostracion.Checked = true;
                }
                if (contrato.MotivoRenta == EMotivoRenta.MATERIAL_PELIGROSO)
                {
                    xrchkMaterialPeligroso.Checked = true;
                }
                if (contrato.MotivoRenta == EMotivoRenta.SUSTITUCION_TEMPORAL)
                {
                    xrchkSustitucionTemporal.Checked = true;
                }
                if (contrato.MotivoRenta == EMotivoRenta.UNIDAD_EXTRA)
                {
                    xrchkUnidadExtra.Checked = true;
                }
                xrlblLeyendaCargosCombustible.Html = leyendaCargoCombustible;
                xrlblLeyendaBitacoraViaje.Html     = leyendaBitacora;
                if (contrato.BitacoraViajeConductor == true)
                {
                    xrchkBitacora.Checked = true;
                }

                SeguroBO seguro = (SeguroBO)tramites.Find(t => t.Tipo == ETipoTramite.SEGURO);
                if (seguro != null)
                {
                    string aseguradoraTelefono = string.Empty;
                    aseguradoraTelefono = !String.IsNullOrEmpty(seguro.Aseguradora) ? seguro.Aseguradora : string.Empty;

                    aseguradoraTelefono = !String.IsNullOrEmpty(seguro.Contacto)
                                              ? (!String.IsNullOrEmpty(aseguradoraTelefono)
                                                     ? aseguradoraTelefono + " - " + seguro.Contacto
                                                     : aseguradoraTelefono)
                                              : aseguradoraTelefono;

                    xrtblCellCompaniaAseguradora.Text = !String.IsNullOrEmpty(aseguradoraTelefono)
                                                            ? aseguradoraTelefono
                                                            : String.Empty;
                    xrlblNumeroPoliza.Text = seguro.NumeroPoliza ?? String.Empty;
                    xrlblCompania.Text     = seguro.Aseguradora ?? String.Empty;
                }

                LineaContratoRDBO lineaTemp = contrato.ObtenerLineaContrato();
                if (lineaTemp.Equipo.ActivoFijo.CostoSinIva == null)
                {
                    leyendaSeguro = leyendaSeguro.Replace("{MONTODEDUCIBLE}", "__________");
                }
                else
                {
                    Decimal?montoDeducibleCalcuado = 0;
                    montoDeducibleCalcuado = lineaTemp.Equipo.ActivoFijo.CostoSinIva;
                    var unidad = (UnidadBO)lineaTemp.Equipo;
                    if (unidad.EquiposAliados.Count > 0)
                    {
                        montoDeducibleCalcuado = unidad.EquiposAliados.Aggregate(montoDeducibleCalcuado, (monto, equipoAliado) => equipoAliado.ActivoFijo != null ? equipoAliado.ActivoFijo.CostoSinIva != null ? monto + equipoAliado.ActivoFijo.CostoSinIva : monto : monto);
                    }
                    //SC0021 formato de decimales
                    leyendaSeguro = leyendaSeguro.Replace("{MONTODEDUCIBLE}", String.Format("{0:#,##0.00##}", contrato.CalcularMontoDeducible((Decimal)montoDeducibleCalcuado).Value));
                }
                xrlblLeyendaSeguro.Html = leyendaSeguro;

                xrlblFirmaUnidadOperativa.Text         = matriz.UnidadOperativa.Nombre;
                xrlblRepresentanteUnidadOperativa.Text = unidadOperativaConfiguracion.Representante;
                xrlblTelefonoUnidadOperativa.Text      = telefonoUO;
                xrlblDireccionUnidadOperativa.Text     = direccionUO;
                if (contrato.Cliente.EsFisico == null || contrato.Cliente.EsFisico == true)
                {
                    RepresentanteLegalBO representante;
                    if (firmantes.Item2 == null)
                    {
                        representante = new RepresentanteLegalBO();
                    }
                    else
                    {
                        representante = (RepresentanteLegalBO)firmantes.Item2[0];
                    }
                    string cliente = representante.Nombre;
                    cliente = !String.IsNullOrEmpty(representante.Telefono)
                                  ? cliente + "/n" + representante.Telefono
                                  : cliente;
                    cliente = !String.IsNullOrEmpty(representante.Direccion)
                                  ? cliente + "/n" + representante.Direccion
                                  : cliente;
                    xrlblDatosClienteMoral.Text = cliente;

                    xrSubreport3.Visible = false;
                }
                if (contrato.Cliente.EsFisico == false)
                {
                    xrlblDatosClienteMoral.BorderWidth = 0;
                    string clienteMoral = contrato.Cliente.Nombre;
                    var    direccion    = contrato.Cliente.Direcciones.Find(p => p.Primaria != null && p.Primaria.Value);

                    if (direccion != null)
                    {
                        if (!String.IsNullOrWhiteSpace(direccion.Telefono) && !String.IsNullOrEmpty(direccion.Telefono))
                        {
                            clienteMoral = clienteMoral + "\n" + direccion.Telefono;
                        }
                    }
                    clienteMoral = clienteMoral + "\n" + contrato.Cliente.Direccion;
                    xrlblDatosClienteMoral.Text = clienteMoral;
                    if (firmantes.Item2 != null)
                    {
                        firmantes.Item2.ForEach(r => r.Telefono = null);
                        xrSubreport3.ReportSource.DataSource    = firmantes.Item2.ConvertAll(r => (RepresentanteLegalBO)r);
                    }
                    else
                    {
                        xrSubreport3.Visible = false;
                    }
                }

                #endregion
                #region Seccion Derecha

                xrlblFecha.Text = contrato.FechaContrato != null
                                      ? contrato.FechaContrato.Value.ToShortDateString()
                                      : String.Empty;

                xrlblFechaPromesaDevolucion.Text = contrato.FechaPromesaDevolucion != null
                                                       ? contrato.FechaPromesaDevolucion.Value.ToShortDateString()
                                                       : String.Empty;

                xrlblModelo.Text = lineaTemp.Equipo.Modelo.Nombre ?? String.Empty;
                xrtblCellNumeroEconomico.Text = ((UnidadBO)lineaTemp.Equipo).NumeroEconomico ?? String.Empty;
                xrtblCellNumeroSerie.Text     = lineaTemp.Equipo.NumeroSerie ?? String.Empty;
                xrtblCellNumeroPlaca.Text     = numeroPlaca;
                //SC0021 formato de decimales
                xrtblCellPBC.Text = ((UnidadBO)lineaTemp.Equipo).CaracteristicasUnidad.PBCMaximoRecomendado != null
                                        ? String.Format("{0:#,##0.00##}", ((UnidadBO)lineaTemp.Equipo).CaracteristicasUnidad.PBCMaximoRecomendado)
                                        : String.Empty;

                xrlblTipo.Text = lineaTemp.Equipo.TipoEquipoServicio.Nombre ?? String.Empty;
                xrSubreport1.ReportSource.DataSource = ((UnidadBO)linea.Equipo).EquiposAliados;
                //xrlblModeloEquipoAliado.DataBindings.Add(new XRBinding("Text", (((UnidadBO)linea.Equipo).EquiposAliados), "Modelo.Nombre"));
                //xrlblSerieEquipoAliado.DataBindings.Add(new XRBinding("Text", (((UnidadBO)linea.Equipo).EquiposAliados), "NumeroSerie"));


                if (lineaTemp.Equipo.EquipoID != null)
                {
                    xrtblCellFechaDevolucion.Text = contrato.ObtenerFechaDevolucion((UnidadBO)lineaTemp.Equipo) != null
                                                        ? contrato.ObtenerFechaDevolucion((UnidadBO)lineaTemp.Equipo)
                                                    .Value.ToString()
                                                        : String.Empty;

                    xrtblCellFechaSalida.Text = contrato.ObtenerFechaEntrega((UnidadBO)lineaTemp.Equipo) != null
                                                    ? contrato.ObtenerFechaEntrega((UnidadBO)lineaTemp.Equipo)
                                                .Value.ToString()
                                                    : String.Empty;

                    xrtblCellKmTotal.Text = contrato.CalcularKilometrajeRecorrido((UnidadBO)lineaTemp.Equipo) != null
                                            ? String.Format("{0:#,##0}", contrato.CalcularKilometrajeRecorrido((UnidadBO)lineaTemp.Equipo))
                                            : String.Empty;

                    xrlblCargoKilometro.Text =
                        ((TarifaContratoRDBO)lineaTemp.Cobrable).RangoTarifas.First().CargoKm != null
                                              ? "$ " + String.Format("{0:#,##0.00##}", ((TarifaContratoRDBO)lineaTemp.Cobrable).RangoTarifas.First().CargoKm)
                                              : "$";


                    xrtblCellTotalEquipoAliado.Text = contrato.CalcularHorasConsumidas((UnidadBO)lineaTemp.Equipo) != null
                                                          ? String.Format("{0:#,##0}", contrato.CalcularHorasConsumidas((UnidadBO)lineaTemp.Equipo))
                                                          : String.Empty;
                }
                else
                {
                    xrtblCellFechaDevolucion.Text   = String.Empty;
                    xrtblCellFechaSalida.Text       = String.Empty;
                    xrtblCellKmTotal.Text           = String.Empty;
                    xrlblCargoKilometro.Text        = "$";
                    xrtblCellTotalEquipoAliado.Text = String.Empty;
                }
                xrtblCellDias.Text = contrato.CalcularDiasTranscurridosRenta() != null
                                         ? String.Format("{0:#,##0}", contrato.CalcularDiasTranscurridosRenta())
                                         : String.Empty;

                xrtblCellHoras.Text = contrato.CalcularHorasTranscurridasRenta() != null
                                          ? String.Format("{0:#,##0.00##}", contrato.CalcularHorasTranscurridasRenta())
                                          : String.Empty;

                if (contrato.LectorKilometraje == ELectorKilometraje.HUBODOMETRO)
                {
                    xrchkHubodometro.Checked = true;
                }
                if (contrato.LectorKilometraje == ELectorKilometraje.ODOMETRO)
                {
                    xrchkOdometro.Checked = true;
                }
                ListadoVerificacionBO listadoEntrada =
                    lineaTemp.ListadosVerificacion.Find(l => l.Tipo == ETipoListadoVerificacion.RECEPCION);
                if (listadoEntrada == null)
                {
                    xrtblCellKmEntrada.Text = String.Empty;
                    xrtblCellHrEntrada.Text = String.Empty;
                }
                else
                {
                    xrtblCellKmEntrada.Text = listadoEntrada.Kilometraje != null
                                                  ? String.Format("{0:#,##0}", listadoEntrada.Kilometraje)
                                                  : String.Empty;

                    xrtblCellHrEntrada.Text = listadoEntrada.Horometro != null
                                                  ? String.Format("{0:#,##0}", listadoEntrada.Horometro)
                                                  : String.Empty;
                }
                ListadoVerificacionBO listadoSalida =
                    lineaTemp.ListadosVerificacion.Find(l => l.Tipo == ETipoListadoVerificacion.ENTREGA);
                if (listadoSalida == null)
                {
                    xrtblCellKmSalida.Text = String.Empty;
                    xrtblCellHrSalida.Text = String.Empty;
                }
                else
                {
                    xrtblCellKmSalida.Text = listadoSalida.Kilometraje != null
                                                 ? String.Format("{0:#,##0}", listadoSalida.Kilometraje)
                                                 : String.Empty;

                    xrtblCellHrSalida.Text = listadoSalida.Horometro != null
                                                 ? String.Format("{0:#,##0}", listadoSalida.Horometro)
                                                 : String.Empty;
                }

                //SC0021 formato de decimales
                var tarifaContrato = lineaTemp.Cobrable != null ? lineaTemp.Cobrable as TarifaContratoRDBO : new TarifaContratoRDBO();
                xrlblTarifaDiaria.Text = tarifaContrato.TarifaDiaria != null
                                                 ? "$ " + String.Format("{0:#,##0.00##}", tarifaContrato.TarifaDiaria)
                                                 : "$";

                xrlblTarifaHora.Text = tarifaContrato.RangoTarifas != null && tarifaContrato.RangoTarifas.Any() && tarifaContrato.RangoTarifas.First().CargoHr != null
                                               ? "$ " + String.Format("{0:#,##0.00##}", tarifaContrato.RangoTarifas.First().CargoHr)
                                               : "$";
                if (unidadOperativaConfiguracion.PrecioUnidadCombustible == null)
                {
                    xrtblCellLitro.Text = "";
                }

                xrtblCellPrecioLitro.Text = unidadOperativaConfiguracion.PrecioUnidadCombustible != null
                                                ? "$ " + String.Format("{0:#,##0.00##}", unidadOperativaConfiguracion.PrecioUnidadCombustible)
                                                : "$";

                string descripcion = string.Empty;
                if (contrato.FormaPago != null)
                {
                    FieldInfo fi = contrato.FormaPago.GetType().GetField(contrato.FormaPago.ToString());

                    DescriptionAttribute[] attributes =
                        (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

                    if (attributes != null &&
                        attributes.Length > 0)
                    {
                        descripcion = attributes[0].Description;
                    }
                    else
                    {
                        descripcion = contrato.FormaPago.ToString();
                    }
                }
                if (contrato.TipoConfirmacion != null)
                {
                    FieldInfo fi = contrato.TipoConfirmacion.GetType().GetField(contrato.TipoConfirmacion.ToString());

                    DescriptionAttribute[] attributes =
                        (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);

                    if (attributes != null &&
                        attributes.Length > 0)
                    {
                        descripcion = !String.IsNullOrEmpty(descripcion)
                                          ? descripcion + " - " + attributes[0].Description
                                          : attributes[0].Description;
                    }
                    else
                    {
                        descripcion = !String.IsNullOrEmpty(descripcion)
                                          ? descripcion + " - " + contrato.TipoConfirmacion.ToString()
                                          : contrato.TipoConfirmacion.ToString();
                    }
                }

                this.xrtblCellCreditoAprobadoPor.Text = !string.IsNullOrEmpty(contrato.AutorizadorTipoConfirmacion) &&
                                                        !string.IsNullOrWhiteSpace(contrato.AutorizadorTipoConfirmacion)
                                                            ? contrato.AutorizadorTipoConfirmacion.Trim().ToUpper()
                                                            : string.Empty;

                xrtblCellTipoConfirmacion.Text = descripcion;

                if (contrato.FormaPago != null)
                {
                    xrchkDeposito.Checked = true;
                    if (lineaTemp.Equipo.ActivoFijo.CostoSinIva == null)
                    {
                        xrtblCellDepositoRecibido.Text = "$";
                    }
                    else
                    {
                        Decimal?montoDeducibleCalcuado = 0;
                        montoDeducibleCalcuado = lineaTemp.Equipo.ActivoFijo.CostoSinIva;
                        var unidad = (UnidadBO)lineaTemp.Equipo;
                        if (unidad.EquiposAliados.Count > 0)
                        {
                            montoDeducibleCalcuado = unidad.EquiposAliados.Aggregate(montoDeducibleCalcuado, (monto, equipoAliado) => equipoAliado.ActivoFijo != null ? equipoAliado.ActivoFijo.CostoSinIva != null ? monto + equipoAliado.ActivoFijo.CostoSinIva : monto : monto);
                        }
                        //SC0021 formato de decimales
                        xrtblCellDepositoRecibido.Text =
                            contrato.CalcularMontoDeposito((Decimal)montoDeducibleCalcuado) != null
                                ? "$" +
                            String.Format("{0:#,##0.00##}", contrato.CalcularMontoDeposito((Decimal)montoDeducibleCalcuado))
                                : "$";
                    }
                }
                if (contrato.TipoConfirmacion != null && contrato.TipoConfirmacion == ETipoConfirmacion.ORDEN_DE_COMPRA)
                {
                    xrchkDeposito.Checked          = false;
                    xrtblCellDepositoRecibido.Text = "$0.00";
                }
                xrtblCellPreparadoPor.Text  = usuarioCreacion.Nombre ?? String.Empty;
                xrtblCellCompletadoPor.Text = usuarioCierre.Nombre ?? String.Empty;

                #region CU011 – Imprimir Cierre de Contrato de Renta Diaria

                //se obtiene los datos de finalizacion del contrato
                object             finalizacion   = contrato.ObtenerFinalizacionContratoRD();
                CierreContratoRDBO cierreContrato = null;
                if (finalizacion != null && typeof(CierreContratoRDBO) == finalizacion.GetType() && lineaTemp != null)
                {
                    cierreContrato = (CierreContratoRDBO)finalizacion;
                }

                if (cierreContrato != null)
                {
                    // se realizan los calculos
                    decimal?importeRenta       = contrato.CalcularDiasTranscurridosRenta() * ((TarifaContratoRDBO)lineaTemp.Cobrable).TarifaDiaria;
                    decimal?importeKmAdicional = contrato.CalcularMontoPorKilometrosExcedidos((UnidadBO)lineaTemp.Equipo);
                    decimal?importeHrAdicional = contrato.CalcularMontoPorHorasExcedidas((UnidadBO)lineaTemp.Equipo);
                    decimal?subtotalTarifa     = importeRenta + importeKmAdicional + importeHrAdicional;
                    int?    litrosUnidad       = contrato.CalcularDiferenciaCombustible();
                    decimal?importeLitros      = contrato.CalcularMontoPorCombustible(unidadOperativaConfiguracion.PrecioUnidadCombustible);
                    decimal?subtotalCargos     = unidadOperativaConfiguracion.PrecioUnidadCombustible.HasValue ? contrato.CalcularSubTotalCargos(unidadOperativaConfiguracion.PrecioUnidadCombustible.Value) : null;
                    decimal?importeSinIva      = subtotalTarifa + subtotalCargos;
                    decimal?importeDelIva      = (importeSinIva * (contrato.Sucursal.Impuesto != null ? contrato.Sucursal.Impuesto.PorcentajeImpuesto : null)) / 100;
                    decimal?cargoNeto          = importeSinIva + importeDelIva;
                    //decimal? montoDeposito = contrato.CalcularMontoDeposito(lineaTemp.Equipo.ActivoFijo.CostoSinIva.Value);
                    decimal?totalPagar = cargoNeto;

                    // se asignan valores a los campos del reporte
                    xrtblCellTarifaDiaria.Text   = importeRenta != null ? "$ " + String.Format("{0:#,##0.00##}", importeRenta) : string.Empty;
                    xrtblCellCargoKilometro.Text = importeKmAdicional != null ? "$ " + String.Format("{0:#,##0.00##}", importeKmAdicional) : string.Empty;
                    xrtblCellTarifaHora.Text     = importeHrAdicional != null ? "$ " + String.Format("{0:#,##0.00##}", importeHrAdicional) : string.Empty;
                    xrtblCellSubtotalTarifa.Text = subtotalTarifa != null ? "$ " + String.Format("{0:#,##0.00##}", subtotalTarifa) : string.Empty;
                    xrtblCellLitros.Text         = litrosUnidad != null?String.Format("{0:#,##0.00##}", litrosUnidad) : string.Empty;

                    xrtblCellImporteLitros.Text       = importeLitros != null ? "$ " + String.Format("{0:#,##0.00##}", importeLitros) : string.Empty;
                    xrtblCellCargoAbuso.Text          = cierreContrato.CargoAbusoOperacion != null ? "$ " + String.Format("{0:#,##0.00##}", cierreContrato.CargoAbusoOperacion) : string.Empty;
                    xrtblCellCargoBasura.Text         = cierreContrato.CargoDisposicionBasura != null ? "$ " + String.Format("{0:#,##0.00##}", cierreContrato.CargoDisposicionBasura) : string.Empty;
                    xrtblCellSubtotalCargos.Text      = subtotalCargos != null ? "$ " + String.Format("{0:#,##0.00##}", subtotalCargos) : string.Empty;
                    xrtblCellPorcentajeIva.Text       = contrato.Sucursal.Impuesto.PorcentajeImpuesto.HasValue ? contrato.Sucursal.Impuesto.PorcentajeImpuesto.Value.ToString() + " %" : string.Empty;
                    xrtblCellCargoNeto.Text           = cargoNeto != null ? "$ " + String.Format("{0:#,##0.00##}", cargoNeto) : string.Empty;
                    xrtblCellRembolso.Text            = cierreContrato.ImporteReembolso != null ? "$ " + String.Format("{0:#,##0.00##}", cierreContrato.ImporteReembolso) : string.Empty;
                    xrtblCellTotalPagar.Text          = totalPagar != null ? "$ " + String.Format("{0:#,##0.00##}", totalPagar) : string.Empty;
                    xrtblCellRembolsoRecibidoPor.Text = cierreContrato.PersonaRecibeReembolso;
                    xrtblCellImporteIVA.Text          = importeDelIva != null ? "$ " + String.Format("{0:#,##0.00##}", importeDelIva) : string.Empty;
                }
                #endregion
                #endregion
                #region Pie de Reporte
                xrlblLeyendaArrendatarios.Html = leyendaArrendatarios;
                xrlblLeyendaOperacion.Html     = leyendaOperacion;
                xrlblLeyendaInspeccion.Html    = leyendaInspeccion;
                xrlblNumeroCheckList.Text      = contrato.CalcularNumeroListadoVerificacion() ?? String.Empty;
                #endregion
                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception("ContratoRentaDiariaRPT.ImprimirReporte:Error al intentar generar el reporte." + ex.Message);
            }
        }
        /// <summary>
        /// Agrega un Representante Legal al Contrato al Contrato
        /// </summary>
        /// <param name="representante">Representante Lega a agregar</param>
        public void AgregarRepresentanteLegalContrato(RepresentanteLegalBO representante)
        {
            try
            {
                if (representante != null && representante.Id != null)
                {
                    if (vista.RepresentantesLegalesContrato.Find(obl => representante.Id == obl.Id) == null)
                    {
                        var Representantes = new List <RepresentanteLegalBO>(vista.RepresentantesLegalesContrato);

                        var cliente = new CuentaClienteIdealeaseBO
                        {
                            Id      = vista.CuentaClienteID,
                            Cliente =
                                new ClienteBO
                            {
                                Id = vista.ClienteID
                            }
                        };

                        var cciBR = new CuentaClienteIdealeaseBR();
                        representante = cciBR.ConsultarRepresentantesLegales(dataContext, new RepresentanteLegalBO {
                            Id = representante.Id
                        }, cliente
                                                                             )
                                        .Find(rep => rep.Id == representante.Id);

                        // Si es Depositario
                        if (representante.EsDepositario == true)
                        {
                            // Reestablece el valor de es depositario en los representantes legales.
                            foreach (var item in vista.ListadoRepresentantesLegales)
                            {
                                var replegal = Representantes.Find(rep => rep.Id == item.Id);

                                if (replegal != null)
                                {
                                    replegal.EsDepositario = item.EsDepositario;
                                }
                            }
                        }


                        Representantes.Add(representante);

                        vista.RepresentantesLegalesContrato = Representantes;
                    }
                    else
                    {
                        vista.MostrarMensaje("El Representante Legal seleccionado ya se encuentra asignado al contrato.", ETipoMensajeIU.ADVERTENCIA);
                    }
                }
                else
                {
                    vista.MostrarMensaje("Se requiere de un Representante Legal seleccionado valido para agregar al contrato.", ETipoMensajeIU.ADVERTENCIA);
                }
            }
            catch (Exception ex)
            {
                vista.MostrarMensaje("Inconsistencias al intertar agregar un Representante Legal al Contrato", ETipoMensajeIU.ERROR, NombreClase + ".AgregarRepresentanteLegalContrato: " + ex.Message);
            }
        }
        /// <summary>
        /// Obtiene y Muesta el listado de Representantes Legales y Obligados Solidarios
        /// </summary>
        private void DesplegarPersonasCliente()
        {
            try
            {
                // Variables
                var cciBR = new CuentaClienteIdealeaseBR();
                vista.ListadoObligadosSolidarios   = null;
                vista.ListadoRepresentantesLegales = null;
                //Inicializa los Representantes Legales del Contrato
                vista.RepresentantesLegalesContrato = null;
                //Inicializa los Obligados Solidarios del Contrato
                vista.ObligadosSolidariosContrato = null;
                //Inicializar los avales
                vista.AvalesTotales       = null;
                vista.AvalesSeleccionados = null;
                vista.ActualizarAvales();
                if (vista.UnidadOperativa == null)
                {
                    throw new Exception("Se requiere de la unidad operativa para realizar la operación");
                }

                // Se consultan y obtiene el  Cliente Completo
                if (vista.CuentaClienteID != null)
                {
                    var cliente = new CuentaClienteIdealeaseBO {
                        Id = vista.CuentaClienteID, Cliente = new ClienteBO {
                            Id = vista.ClienteID
                        }, UnidadOperativa = vista.UnidadOperativa
                    };
                    List <CuentaClienteIdealeaseBO> listado = cciBR.ConsultarCompleto(dataContext, cliente);
                    cliente = listado.Find(cli => cli.Id == vista.CuentaClienteID);

                    if (cliente != null)
                    {
                        var representantesActivos = new List <PersonaBO>(cliente.RepresentantesLegales.Where(
                                                                             persona => persona.Activo == true)).ConvertAll(s => (RepresentanteLegalBO)s);

                        foreach (var representantesActivo in representantesActivos.Where(representantesActivo => representantesActivo.EsDepositario == true))
                        {
                            representantesActivo.Nombre = "(D) " + representantesActivo.Nombre;
                        }

                        vista.HabilitarListadoRepresentantesLegales(representantesActivos.Count > 0);
                        vista.HabilitarAgregarRepresentanteLegal(representantesActivos.Count > 0);
                        vista.ListadoRepresentantesLegales = representantesActivos;


                        var obligadosActivos = new List <PersonaBO>(cliente.ObligadosSolidarios.Where(persona => persona.Activo == true)).ConvertAll(s => (ObligadoSolidarioBO)s);
                        vista.HabilitarListadoObligadosSolidarios(obligadosActivos.Count > 0);
                        vista.HabilitarAgregarObligadoSolidario(obligadosActivos.Count > 0);
                        vista.ListadoObligadosSolidarios = obligadosActivos.ConvertAll(s => (ObligadoSolidarioBO)s);
                        vista.HabilitarObligadosComoAvales(obligadosActivos.Count > 0);
                        //Mostrar Avales
                        List <AvalBO> lstAvales = null;
                        if (obligadosActivos != null)
                        {
                            lstAvales = obligadosActivos.ConvertAll(s => this.ObligadoAAval(s));
                        }
                        this.vista.AvalesTotales       = lstAvales;
                        this.vista.AvalesSeleccionados = null;

                        //Sólo permite seleccionar avales si el cliente ha sido seleccionado
                        this.vista.PermitirSeleccionarAvales(this.vista.ModoEditar && this.vista.CuentaClienteID != null);
                        //Sólo permite agregar avales si el cliente ha sido seleccionado y tiene obligados solidarios configurados
                        this.vista.PermitirAgregarAvales(this.vista.ModoEditar && this.vista.AvalesTotales != null && this.vista.AvalesTotales.Count > 0);

                        vista.ActualizarAvales();
                        if (vista.SoloRepresentantes != null && vista.SoloRepresentantes == false)
                        {
                            if (vista.ObligadosComoAvales != null && vista.ObligadosComoAvales == false)
                            {
                                vista.MostrarAvales(true);
                            }
                        }
                    }
                    else
                    {
                        throw new Exception("El cliente seleccionado no es valido en el sistema.");
                    }
                }
                else
                {
                    throw new Exception("Se requiere seleccionar un Cliente para obtener los listados de Representantes Legales y Obligados Solidarios.");
                }
            }
            catch (Exception ex)
            {
                vista.MostrarMensaje("Inconsistencias al presentar la información", ETipoMensajeIU.ERROR, NombreClase + ".MostrarPersonasCliente : " + ex.Message);
            }
        }
        public void RegistrarCliente()
        {
            string s;

            if (!String.IsNullOrEmpty((s = this.ValidarDatos())))
            {
                this.vista.MostrarMensaje("Los siguientes datos no pueden estar vacíos " + s.Substring(2), ETipoMensajeIU.ADVERTENCIA, null);
                return;
            }

            try
            {
                ETipoEmpresa empresa = (ETipoEmpresa)vista.UnidadOperativa.Id;

                CuentaClienteIdealeaseBO cliente = (CuentaClienteIdealeaseBO)this.InterfazUsuarioADato();
                if (this.ExisteCliente(cliente) == true)
                {
                    this.vista.MostrarMensaje("La información del Cliente que proporcionó ya se encuentra registrado en el sistema. Favor de verificar.", ETipoMensajeIU.INFORMACION, null);
                }
                #region SC0008
                SeguridadBO seguridad = new SeguridadBO(Guid.Empty, new UsuarioBO()
                {
                    Id = this.vista.UC
                },
                                                        new AdscripcionBO()
                {
                    UnidadOperativa = new UnidadOperativaBO()
                    {
                        Id = this.vista.UnidadOperativa.Id
                    }
                });

                this.clienteBR.InsertarCompleto(dctx, cliente, seguridad);
                #endregion SC0008


                List <CuentaClienteIdealeaseBO> lst = this.clienteBR.ConsultarCompleto(dctx, cliente);
                if (lst.Count <= 0)
                {
                    throw new Exception("Al consultar lo insertado no se encontraron coincidencias.");
                }
                if (lst.Count > 1)
                {
                    throw new Exception("Al consultar lo insertado se encontró más de una coincidencia.");
                }


                this.vista.RepresentantesLegales =
                    lst[0].RepresentantesLegales.ConvertAll(r => (RepresentanteLegalBO)r);
                this.vista.ObligadosSolidarios =
                    lst[0].ObligadosSolidarios.ConvertAll(o => (ObligadoSolidarioBO)o);
                CuentaClienteIdealeaseBO clienteTemp = new CuentaClienteIdealeaseBO();
                clienteTemp = lst[0];
                clienteTemp.UnidadOperativa = this.vista.UnidadOperativa;

                //this.vista.Cliente = lst[0];
                List <CuentaClienteIdealeaseBO> lstTemp = this.clienteBR.Consultar(dctx, clienteTemp);
                if (lstTemp.Count == 1)
                {
                    this.vista.Cliente = lstTemp[0];
                    this.RedirigirADetalle();
                }
                else
                {
                    throw new Exception("Error al recuperar los datos del cliente");
                }
            }
            catch (Exception ex)
            {
                this.vista.MostrarMensaje("Error al Registrar los datos del Cliente", ETipoMensajeIU.ERROR, nombreClase + ".RegistrarCliente: " + ex.Message);
            }
        }