public RegistrarCuentaClientePRE(IRegistrarCuentaClienteVIS vista, IucDatosObligadoSolidarioVIS vistaObligado, IucDatosRepresentanteLegalVIS vistaRepresentante, IucDatosRepresentanteLegalVIS vistaRepresentantesObligado)
        {
            try
            {
                this.vista                       = vista;
                this.vistaObligado               = vistaObligado;
                this.vistaRepresentante          = vistaRepresentante;
                this.vistaRepresentantesObligado = vistaRepresentantesObligado;

                presentadorObligado               = new ucDatosObligadoSolidarioPRE(vistaObligado);
                presentadorRepresentante          = new ucDatosRepresentanteLegalPRE(vistaRepresentante);
                presentadorRepresentantesObligado = new ucDatosRepresentanteLegalPRE(vistaRepresentantesObligado);
                if (this.vista.UnidadOperativa.Id == (int)ETipoEmpresa.Generacion || this.vista.UnidadOperativa.Id == (int)ETipoEmpresa.Equinova ||
                    this.vista.UnidadOperativa.Id == (int)ETipoEmpresa.Construccion)
                {
                    presentadorRepresentantesObligado.HabilitarCampos();
                }

                clienteBR = new CuentaClienteIdealeaseBR();
                dctx      = FacadeBR.ObtenerConexion();
            }
            catch (Exception ex)
            {
                vista.MostrarMensaje("Inconsistencias en los parámetros de configuración", ETipoMensajeIU.ERROR, nombreClase + ".RegistrarClientePRE: " + ex.Message);
            }
        }
        /// <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);
            }
        }
        /// <summary>
        /// Agrega un Obligados Solidario al Contrato
        /// </summary>
        /// <param name="obligado">Obligado Solidario a Agregar al Contrato</param>
        /// <param name="representantes">Representantes Legales del Obligado Solidario</param>
        public void AgregarObligadoSolidarioContrato(ObligadoSolidarioBO obligado, List <RepresentanteLegalBO> representantes)
        {
            try
            {
                if (representantes == null)
                {
                    vista.MostrarMensaje("Es necesario seleccionar al menos un representante legal, para el obligado solidarío.", ETipoMensajeIU.ADVERTENCIA);
                }
                if (representantes.Count <= 0)
                {
                    vista.MostrarMensaje("Es necesario seleccionar al menos un representante legal, para el obligado solidarío.", ETipoMensajeIU.ADVERTENCIA);
                }

                if (obligado != null && obligado.Id != null)
                {
                    if (vista.ObligadosSolidariosContrato.Find(obl => obligado.Id == obl.Id) == null)
                    {
                        if (obligado.DireccionPersona == null || string.IsNullOrEmpty(obligado.DireccionPersona.Calle))
                        {
                            var cciBR = new CuentaClienteIdealeaseBR();
                            List <ObligadoSolidarioBO> obls = cciBR.ConsultarObligadosSolidarios(dataContext, obligado, new CuentaClienteIdealeaseBO());

                            ObligadoSolidarioBO encontrado = obls.Find(ob => ob.Id == obligado.Id);

                            if (encontrado != null)
                            {
                                obligado = encontrado;
                            }
                        }
                        //SC0005
                        ((ObligadoSolidarioMoralBO)obligado).Representantes = representantes;

                        var Obligados = new List <ObligadoSolidarioBO>(vista.ObligadosSolidariosContrato)
                        {
                            obligado
                        };
                        vista.ObligadosSolidariosContrato = Obligados;
                    }
                    else
                    {
                        vista.MostrarMensaje("El Obligado Solidario seleccionado ya se encuentra asignado al contrato.", ETipoMensajeIU.ADVERTENCIA);
                    }
                }
                else
                {
                    vista.MostrarMensaje("Se requiere de un Obligado Solidario seleccionado valido para agregar al contrato.", ETipoMensajeIU.ADVERTENCIA);
                }
            }
            catch (Exception ex)
            {
                vista.MostrarMensaje("Inconsistencias al intentar agregar un Obligado Solidario al contrato.", ETipoMensajeIU.ERROR, NombreClase + ".AgregarObligadoSolidarioContrato :" + ex.Message);
            }
        }
        /// <summary>
        /// Obtiene nuevamente el cliente de la unidad y consulta los contactos del cliente
        /// </summary>
        public void ActualizarContactosCliente()
        {
            int?clienteId = this.vista.ClienteID;

            if (clienteId != null)
            {
                List <ContactoClienteBO> contactosCliente = new List <ContactoClienteBO>();
                var clienteIdealeaseBR = new CuentaClienteIdealeaseBR();
                var cliente            = clienteIdealeaseBR.Consultar(dctx, new CuentaClienteIdealeaseBO()
                {
                    Cliente = new ClienteBO()
                    {
                        Id = clienteId
                    },
                    UnidadOperativa = new UnidadOperativaBO()
                    {
                        Id = this.vista.UnidadOperativaID
                    }
                }).FirstOrDefault();

                if (cliente != null)
                {
                    bool?activo    = this.vista.CitaMantenimientoID != null ? null : (bool?)true;
                    var  contactos = new ContactoClienteBR().ConsultarCompleto(dctx, new ContactoClienteBO()
                    {
                        CuentaClienteIdealease = cliente, Activo = activo, Sucursal = new SucursalBO()
                        {
                            Id = this.vista.SucursalID
                        }
                    });
                    if (contactos != null && contactos.Any())
                    {
                        contactos.ForEach(contacto =>
                        {
                            contacto.Detalles.ForEach(detail =>
                            {
                                detail.ContactoCliente.Sucursal = new SucursalBO()
                                {
                                    Id = contacto.Sucursal.Id, Nombre = contacto.Sucursal.Nombre
                                };
                                detail.ContactoCliente.Direccion = contacto.Direccion;
                            });
                        });

                        contactosCliente.AddRange(contactos);
                    }
                }

                this.vista.ListadoContactosCliente = contactosCliente;
                this.vista.EstablecerContactosCliente();
            }
        }
 public ConsultarCuentaClientePRE(IConsultarCuentaClienteVIS vista)
 {
     try
     {
         this.vista = vista;
         dctx       = FacadeBR.ObtenerConexion();
         clienteBR  = new CuentaClienteIdealeaseBR();
     }
     catch (Exception ex)
     {
         this.MostrarMensaje("Inconsistencias en la configuracion", ETipoMensajeIU.ERROR, nombreClase + ex.Message);
     }
 }
Ejemplo n.º 6
0
 public DetalleCuentaClientePRE(IDetalleCuentaClienteVIS vista, IucDatosRepresentanteLegalVIS vistaRepresentante)
 {
     try
     {
         this.vista = vista;
         this.vistaRepresentante = vistaRepresentante;
         dctx      = FacadeBR.ObtenerConexion();
         clienteBR = new CuentaClienteIdealeaseBR();
         presentadorRepresentante = new ucDatosRepresentanteLegalPRE(vistaRepresentante);
     }
     catch (Exception ex)
     {
         this.MostrarMensaje("Inconsistencias en la configuración", ETipoMensajeIU.ERROR, nombreClase + ex.Message);
     }
 }
        public void ObtenerRepresentanteOS(ObligadoSolidarioBO obligado)
        {
            var cuentaBR = new CuentaClienteIdealeaseBR();

            try
            {
                if (obligado != null && obligado.Id != null)
                {
                    List <ObligadoSolidarioBO> obligs = cuentaBR.ConsultarObligadosSolidarios(dataContext, obligado, new CuentaClienteIdealeaseBO {
                        Id = vista.CuentaClienteID
                    });

                    if (obligs == null)
                    {
                        return;
                    }
                    if (obligs.Count <= 0)
                    {
                        return;
                    }
                    if (obligs.Count > 1)
                    {
                        throw new Exception("La consulta ha devuelto más de un valor, esto podría significar un conflicto en el sistema, verifique su información por favor");
                    }

                    ObligadoSolidarioBO oblig = obligs[0];
                    if (oblig.TipoObligado == ETipoObligadoSolidario.Moral)
                    {
                        vista.RepresentantesObligado = cuentaBR.ConsultarRepresentantesLegales(dataContext, new CuentaClienteIdealeaseBO {
                            Id = vista.CuentaClienteID
                        }, obligado, new RepresentanteLegalBO {
                            Activo = true
                        });
                        vista.MostrarRepresentantesObligados(true);
                    }
                    else
                    {
                        vista.RepresentantesObligado = new List <RepresentanteLegalBO>();
                    }
                }
            }
            catch (Exception ex)
            {
                vista.MostrarMensaje("Inconsistencias al intentar agregar un Obligado Solidario al contrato.", ETipoMensajeIU.ERROR, NombreClase + ".ObtenerRepresentanteOS :" + ex.Message);
            }
        }
        public ObligadoSolidarioBO ConsultarObligadoSolidario(ObligadoSolidarioBO obligado)
        {
            ObligadoSolidarioBO obligadoa = null;

            try
            {
                if (obligado != null && obligado.Id != null)
                {
                    if (vista.ObligadosSolidariosContrato.Find(obl => obligado.Id == obl.Id) == null)
                    {
                        if (obligado.DireccionPersona == null || string.IsNullOrEmpty(obligado.DireccionPersona.Calle))
                        {
                            var cciBR = new CuentaClienteIdealeaseBR();
                            List <ObligadoSolidarioBO> obls = cciBR.ConsultarObligadosSolidarios(dataContext, obligado, new CuentaClienteIdealeaseBO());

                            ObligadoSolidarioBO encontrado = obls.Find(ob => ob.Id == obligado.Id);

                            if (encontrado != null)
                            {
                                obligadoa = encontrado;
                            }
                        }
                    }
                    else
                    {
                        vista.MostrarMensaje("El Obligado Solidario seleccionado ya se encuentra asignado al contrato.", ETipoMensajeIU.ADVERTENCIA);
                    }
                }
                else
                {
                    vista.MostrarMensaje("Se requiere de un Obligado Solidario seleccionado valido para agregar al contrato.", ETipoMensajeIU.ADVERTENCIA);
                }

                return(obligadoa);
            }
            catch (Exception ex)
            {
                throw new Exception("Inconsistencias al intentar consultar un Obligado Solidario al contrato." + 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);
            }
        }
        /// <summary>
        /// Consulta los Contratos de RD en CURSO segun los filtros
        /// </summary>
        public void Consultar()
        {
            try
            {
                var contratoBo = (ContratoRDBO)this.InterfazUsuarioDato();
                contratoBo.Estatus = EEstatusContrato.EnCurso;
                var listaContratos = controlador.Consultar(this.dataContext, contratoBo);
                if (!listaContratos.Any())
                {
                    this.vista.PresentarResultadoConsulta(listaContratos);
                    this.vista.MostrarMensaje("La búsqueda no produjo resultados", ETipoMensajeIU.INFORMACION, "No se encontraron coincidencias con los criterios ingresados. Verifique sus datos");
                    return;
                }

                String sucursalesNoEncontradas = String.Empty;
                String clientesNoEncontrados   = String.Empty;

                var listaClientes = new List <CuentaClienteIdealeaseBO>();
                CuentaClienteIdealeaseBR cuentaClienteBr = new CuentaClienteIdealeaseBR();

                var listaSucursales = new List <SucursalBO>();
                foreach (ContratoRDBO bo in listaContratos)
                {
                    if (listaSucursales.Any(x => x.Id == bo.Sucursal.Id))
                    {
                        bo.Sucursal = listaSucursales.First(x => x.Id == bo.Sucursal.Id);
                    }
                    else
                    {
                        var listaTempSucursal = FacadeBR.ConsultarSucursal(this.dataContext, new SucursalBO()
                        {
                            Id = bo.Sucursal.Id, UnidadOperativa = new UnidadOperativaBO {
                                Id = this.vista.UnidadOperativa.Id
                            }
                        });
                        if (listaTempSucursal.Any())
                        {
                            listaSucursales.Add(listaTempSucursal.First());
                            bo.Sucursal = listaTempSucursal.First();
                        }
                        else
                        {
                            sucursalesNoEncontradas = String.IsNullOrEmpty(sucursalesNoEncontradas) ? bo.Sucursal.Id.Value.ToString() : sucursalesNoEncontradas + ", " + bo.Sucursal.Id.Value.ToString();
                        }
                    }

                    if (listaClientes.Any(x => x.Id == bo.Cliente.Id))
                    {
                        bo.Cliente = listaClientes.First(x => x.Id == bo.Cliente.Id);
                    }
                    else
                    {
                        var listaTempClientes = cuentaClienteBr.Consultar(this.dataContext, new CuentaClienteIdealeaseBO()
                        {
                            Id = bo.Cliente.Id, UnidadOperativa = new UnidadOperativaBO()
                            {
                                Id = this.vista.UnidadOperativa.Id
                            }
                        });
                        if (listaTempClientes.Any())
                        {
                            listaClientes.Add(listaTempClientes.First());
                            bo.Cliente = listaTempClientes.First();
                        }
                        else
                        {
                            clientesNoEncontrados = String.IsNullOrEmpty(clientesNoEncontrados) ? bo.Cliente.Id.Value.ToString() : clientesNoEncontrados + ", " + bo.Cliente.Id.Value.ToString();
                        }
                    }
                }

                listaContratos = listaContratos.OrderBy(y => y.NumeroContrato).ToList();

                this.vista.PresentarResultadoConsulta(listaContratos);

                string mensaje = String.Empty;
                if (!String.IsNullOrEmpty(sucursalesNoEncontradas))
                {
                    mensaje += "No se encontraron las Sucursales con los siguientes identificadores: " + sucursalesNoEncontradas;
                }
                if (!String.IsNullOrEmpty(clientesNoEncontrados))
                {
                    mensaje += "No se encontraron los Clientes con los siguientes identificadores (CuentaClienteId): " + clientesNoEncontrados;
                }

                if (!String.IsNullOrEmpty(mensaje))
                {
                    this.vista.MostrarMensaje(mensaje, ETipoMensajeIU.INFORMACION);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(nombreClase + ".Consultar: " + ex.Message);
            }
        }
        /// <summary>
        /// Presenta el detalle de una Cita de Mantenimiento Seleccionada
        /// </summary>
        /// <param name="id">Identificador de la cita o el mantenimiento programado</param>
        /// <param name="esCita">Determina si el ID es para una Cita de Mantenimiento</param>
        public void PresentarDetalles(CitaMantenimientoBO citaMantenimiento)
        {
            if (citaMantenimiento != null)
            {
                CitaMantenimientoBO cita = citaMantenimiento;

                BPMO.SDNI.Equipos.BO.UnidadBO unidad = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad;
                UnidadBR unidadBR = new UnidadBR();

                TramiteProxyBO filter = new TramiteProxyBO()
                {
                    Activo = true, Tramitable = new BPMO.SDNI.Equipos.BO.UnidadBO {
                        UnidadID = unidad.UnidadID
                    }
                };
                TramiteBR        tramiteBR           = new TramiteBR();
                List <TramiteBO> lstTramites         = tramiteBR.ConsultarCompleto(dctx, filter, false);
                TramiteBO        tramitePlacaFederal = lstTramites.Find(p => p.Tipo != null && p.Tipo == ETipoTramite.PLACA_FEDERAL && p.Activo != null && p.Activo == true);
                TramiteBO        tramitePlacaEstatal = lstTramites.Find(p => p.Tipo != null && p.Tipo == ETipoTramite.PLACA_ESTATAL && p.Activo != null && p.Activo == true);
                String           placas = tramitePlacaFederal != null && !String.IsNullOrEmpty(tramitePlacaFederal.Resultado)
                                    ? tramitePlacaFederal.Resultado :
                                          (tramitePlacaEstatal != null && !String.IsNullOrEmpty(tramitePlacaEstatal.Resultado) ? tramitePlacaEstatal.Resultado : null);

                var equiposAliados = unidadBR.ConsultarEquipoAliado(dctx, unidad, true);
                List <MantenimientoProgramadoEquipoAliadoBO> mantenimientosEA = new List <MantenimientoProgramadoEquipoAliadoBO>();
                var mantenimientoProgramadoBR = new ConsultarMantenimientoProgramadoBR();

                foreach (EquipoAliadoBO equipoAliado in equiposAliados)
                {
                    var manttosEA = mantenimientoProgramadoBR.Consultar(dctx, new MantenimientoProgramadoBOF()
                    {
                        EsUnidad = false, EquipoID = equipoAliado.EquipoID, Activo = true, EstatusMantenimientoProgramado = EEstatusMantenimientoProgramado.PROGRAMADO
                    });
                    if (manttosEA != null && manttosEA.Any())
                    {
                        var manttoEA = manttosEA.FirstOrDefault() as MantenimientoProgramadoEquipoAliadoBO;
                        manttoEA.EquipoAliado = equipoAliado;

                        mantenimientosEA.Add(manttoEA);
                    }
                    else
                    {
                        mantenimientosEA.Add(new MantenimientoProgramadoEquipoAliadoBO()
                        {
                            EquipoAliado = equipoAliado
                        });
                    }
                }

                List <ContactoClienteBO> contactosCliente = new List <ContactoClienteBO>();

                if ((cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente != null &&
                    (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente.Id != null)
                {
                    var clienteIdealeaseBR = new CuentaClienteIdealeaseBR();
                    var cliente            = clienteIdealeaseBR.Consultar(dctx, new CuentaClienteIdealeaseBO()
                    {
                        Cliente = new ClienteBO()
                        {
                            Id = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente.Id
                        },
                        UnidadOperativa = new UnidadOperativaBO()
                        {
                            Id = this.vista.UnidadOperativaID
                        }
                    }).FirstOrDefault();

                    if (cliente != null)
                    {
                        bool?activo    = cita.CitaMantenimientoID != null ? null : (bool?)true;
                        var  contactos = new ContactoClienteBR().ConsultarCompleto(dctx, new ContactoClienteBO()
                        {
                            CuentaClienteIdealease = cliente, Activo = activo, Sucursal = cita.Sucursal
                        });
                        if (contactos != null && contactos.Any())
                        {
                            contactos.ForEach(contacto =>
                            {
                                contacto.Detalles.ForEach(detail =>
                                {
                                    detail.ContactoCliente.Sucursal = new SucursalBO()
                                    {
                                        Id = contacto.Sucursal.Id, Nombre = contacto.Sucursal.Nombre
                                    };
                                    detail.ContactoCliente.Direccion = contacto.Direccion;
                                });
                            });

                            contactosCliente.AddRange(contactos);
                        }

                        (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente.NombreCompleto = cliente.Cliente.NombreCompleto;
                    }
                    else
                    {
                        var clienteServicio = FacadeBR.ConsultarCliente(dctx, new ClienteBO()
                        {
                            Id = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente.Id
                        }).FirstOrDefault();
                        if (clienteServicio != null)
                        {
                            (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente.NombreCompleto = clienteServicio.NombreCompleto;
                        }
                    }
                }

                this.ObjetoAInterfazUsuario(cita, mantenimientosEA, contactosCliente,
                                            tramitePlacaFederal != null && !String.IsNullOrEmpty(tramitePlacaFederal.Resultado) ? tramitePlacaFederal.Resultado : String.Empty,
                                            tramitePlacaEstatal != null && !String.IsNullOrEmpty(tramitePlacaEstatal.Resultado) ? tramitePlacaEstatal.Resultado : String.Empty);
            }
            else
            {
                throw new Exception("No hay citas de mantenimiento para presentar");
            }
        }
        /// <summary>
        /// Presenta el detalle de una Cita de Mantenimiento Seleccionada
        /// </summary>
        /// <param name="id">Identificador de la cita o el mantenimiento programado</param>
        /// <param name="esCita">Determina si el ID es para una Cita de Mantenimiento</param>
        public void PresentarDetalles(int id, bool esCita)
        {
            if (this.vista.CitasMantenimiento != null && this.vista.CitasMantenimiento.Any())
            {
                CitaMantenimientoBO cita = null;
                if (esCita)
                {
                    cita = this.vista.CitasMantenimiento.FirstOrDefault(x => x.CitaMantenimientoID == id);
                }
                else
                {
                    cita = this.vista.CitasMantenimiento.FirstOrDefault(x => x.MantenimientoProgramado.MantenimientoProgramadoID == id);
                }

                BPMO.SDNI.Equipos.BO.UnidadBO unidad = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad;
                UnidadBR unidadBR = new UnidadBR();

                TramiteProxyBO filter = new TramiteProxyBO()
                {
                    Activo = true, Tramitable = new BPMO.SDNI.Equipos.BO.UnidadBO {
                        UnidadID = unidad.UnidadID
                    }
                };
                TramiteBR        tramiteBR           = new TramiteBR();
                List <TramiteBO> lstTramites         = tramiteBR.ConsultarCompleto(dctx, filter, false);
                TramiteBO        tramitePlacaFederal = lstTramites.Find(p => p.Tipo != null && p.Tipo == ETipoTramite.PLACA_FEDERAL && p.Activo != null && p.Activo == true);
                TramiteBO        tramitePlacaEstatal = lstTramites.Find(p => p.Tipo != null && p.Tipo == ETipoTramite.PLACA_ESTATAL && p.Activo != null && p.Activo == true);
                String           placas = tramitePlacaFederal != null && !String.IsNullOrEmpty(tramitePlacaFederal.Resultado)
                                    ? tramitePlacaFederal.Resultado :
                                          (tramitePlacaEstatal != null && !String.IsNullOrEmpty(tramitePlacaEstatal.Resultado) ? tramitePlacaEstatal.Resultado : null);

                var equiposAliados = unidadBR.ConsultarEquipoAliado(dctx, unidad, true);
                List <MantenimientoProgramadoEquipoAliadoBO> mantenimientosEA = new List <MantenimientoProgramadoEquipoAliadoBO>();
                var mantenimientoProgramadoBR = new ConsultarMantenimientoProgramadoBR();

                foreach (EquipoAliadoBO equipoAliado in equiposAliados)
                {
                    var manttosEA = mantenimientoProgramadoBR.Consultar(dctx, new MantenimientoProgramadoBOF()
                    {
                        EsUnidad = false, EquipoID = equipoAliado.EquipoID, Activo = true, EstatusMantenimientoProgramado = EEstatusMantenimientoProgramado.PROGRAMADO
                    });
                    if (manttosEA != null && manttosEA.Any())
                    {
                        var manttoEA = manttosEA.FirstOrDefault() as MantenimientoProgramadoEquipoAliadoBO;
                        manttoEA.EquipoAliado = equipoAliado;

                        mantenimientosEA.Add(manttoEA);
                    }
                    else
                    {
                        mantenimientosEA.Add(new MantenimientoProgramadoEquipoAliadoBO()
                        {
                            EquipoAliado = equipoAliado
                        });
                    }
                }

                var      nombreSucursal      = "";
                var      nombreTaller        = "";
                int?     kmUltimoServicio    = null;
                DateTime?fechaUltimoServicio = null;
                string   clienteNombre       = "";
                List <ContactoClienteBO> contactosCliente = new List <ContactoClienteBO>();

                if (cita.CitaMantenimientoID != null)
                {
                    var sucursal = FacadeBR.ConsultarSucursal(dctx, new SucursalBO()
                    {
                        Id = cita.Sucursal.Id
                    }).FirstOrDefault();
                    if (sucursal != null)
                    {
                        cita.Sucursal.Nombre = sucursal.Nombre;
                        nombreSucursal       = sucursal.Nombre;
                    }

                    var taller = FacadeBR.ConsultarTaller(dctx, new TallerBO()
                    {
                        Id = cita.TallerInterno.Id
                    }).FirstOrDefault();
                    if (taller != null)
                    {
                        cita.TallerInterno.Nombre      = taller.Nombre;
                        cita.TallerInterno.NombreCorto = taller.NombreCorto;
                        nombreTaller = taller.Nombre;
                    }
                }

                var unidadManttoBR = new MantenimientoUnidadBR();
                var mantemiento    = unidadManttoBR.Consultar(dctx, new MantenimientoUnidadBO()
                {
                    IngresoUnidad = new IngresoUnidadBO()
                    {
                        Unidad = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad
                    },
                    TipoServicio = new TipoServicioBO()
                    {
                        Id = this.TipoMantenimiento
                    },
                    Activo = true
                }).Where(x => x.FechaSalida != null).OrderBy(x => x.FechaSalida).ToList().LastOrDefault();
                if (mantemiento != null)
                {
                    kmUltimoServicio    = mantemiento.KilometrajeEntrada;
                    fechaUltimoServicio = mantemiento.FechaSalida.Value;
                }

                if ((cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente != null &&
                    (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente.Id != null)
                {
                    var clienteIdealeaseBR = new CuentaClienteIdealeaseBR();
                    var cliente            = clienteIdealeaseBR.Consultar(dctx, new CuentaClienteIdealeaseBO()
                    {
                        Cliente = new ClienteBO()
                        {
                            Id = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente.Id
                        },
                        UnidadOperativa = new UnidadOperativaBO()
                        {
                            Id = this.vista.UnidadOperativaID
                        }
                    }).FirstOrDefault();

                    if (cliente != null)
                    {
                        bool?activo    = cita.CitaMantenimientoID != null ? null : (bool?)true;
                        var  contactos = new ContactoClienteBR().ConsultarCompleto(dctx, new ContactoClienteBO()
                        {
                            CuentaClienteIdealease = cliente, Activo = activo, Sucursal = cita.Sucursal
                        });
                        if (contactos != null && contactos.Any())
                        {
                            contactos.ForEach(contacto => {
                                contacto.Detalles.ForEach(detail => {
                                    detail.ContactoCliente.Sucursal = new SucursalBO()
                                    {
                                        Id = contacto.Sucursal.Id, Nombre = contacto.Sucursal.Nombre
                                    };
                                    detail.ContactoCliente.Direccion = contacto.Direccion;
                                });
                            });

                            contactosCliente.AddRange(contactos);
                        }

                        clienteNombre = cliente.Cliente.NombreCompleto;
                    }
                    else
                    {
                        var clienteServicio = FacadeBR.ConsultarCliente(dctx, new ClienteBO()
                        {
                            Id = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Cliente.Id
                        }).FirstOrDefault();
                        if (clienteServicio != null)
                        {
                            clienteNombre = clienteServicio.NombreCompleto;
                        }
                    }
                }

                var fechaInicial = new DateTime();
                if (mantemiento.FechaUltimoServicio.HasValue)
                {
                    fechaInicial = mantemiento.FechaArranque.Value > mantemiento.FechaUltimoServicio.Value &&
                                   mantemiento.FechaArranque.Value < mantemiento.FechaProximoServicio.Value ? mantemiento.FechaArranque.Value : DateTime.Today;
                }
                else
                {
                    fechaInicial = DateTime.Today;
                }

                var diasRetraso = Convert.ToInt32(Math.Round((fechaInicial - new DateTime(cita.MantenimientoProgramado.Fecha.Value.Year, cita.MantenimientoProgramado.Fecha.Value.Month, cita.MantenimientoProgramado.Fecha.Value.Day)).TotalDays, 2));
                this.vista.ClienteNombre               = clienteNombre;
                this.vista.Area                        = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.Area.ToString();
                this.vista.VINUnidad                   = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.NumeroSerie;
                this.vista.NumeroEconomico             = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.NumeroEconomico;
                this.vista.KmUltimoServicio            = kmUltimoServicio;
                this.vista.FechaUltimoServicio         = fechaUltimoServicio;
                this.vista.PlacaEstatal                = tramitePlacaEstatal != null && !String.IsNullOrEmpty(tramitePlacaEstatal.Resultado) ? tramitePlacaEstatal.Resultado : "";
                this.vista.PlacaFederal                = tramitePlacaFederal != null && !String.IsNullOrEmpty(tramitePlacaFederal.Resultado) ? tramitePlacaFederal.Resultado : "";
                this.vista.FechaSugerida               = cita.MantenimientoProgramado.Fecha;
                this.vista.TipoMantenimiento           = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).TipoMantenimientoNombre;
                this.vista.NombreSucursalDetalle       = nombreSucursal;
                this.vista.NombreTallerDetalle         = nombreTaller;
                this.vista.ListadoManttoEquiposAliados = mantenimientosEA;
                this.vista.EstatusMantenimiento        = cita.CitaMantenimientoID != null?cita.EstatusCita.ToString() : EEstatusCita.PRECALENDARIZADA.ToString();

                this.vista.DiasRetraso             = diasRetraso <= 0 ? int.Parse(diasRetraso.ToString("G")) : int.Parse(diasRetraso.ToString());
                this.vista.ListadoContactosCliente = contactosCliente;

                this.vista.EstablecerEquiposAliados();
                this.vista.EstablecerContactosCliente();
            }
            else
            {
                throw new Exception("No hay citas de mantenimiento para presentar");
            }
        }