/// <summary>
        /// Consulta la unidad en la bd de idealease
        /// </summary>
        /// <param name="equipoId">Identificador del equipo</param>
        /// <param name="unidadId">identificador de la unidad</param>
        /// <returns>Objeto UnidadBO</returns>
        public BPMO.SDNI.Equipos.BO.UnidadBO ObtenerUnidad(int?equipoId, int?unidadId)
        {
            var unidadBR = new UnidadBR();

            return(unidadBR.Consultar(dctx, new BPMO.SDNI.Equipos.BO.UnidadBO()
            {
                EquipoID = equipoId, UnidadID = unidadId
            }).FirstOrDefault());
        }
        public void Consultar()
        {
            try
            {
                UnidadBOF bo = (UnidadBOF)this.InterfazUsuarioADato();

                List <BO.UnidadBO> lst = controlador.Consultar(dataContext, bo).ConvertAll(s => (BO.UnidadBO)s);

                this.vista.Resultado = this.ComplementarDatos(lst);
                this.vista.ActualizarResultado();

                if (lst.Count < 1)
                {
                    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)
            {
                throw new Exception(this.nombreClase + ".Consultar:" + ex.Message);
            }
        }
        private void ConsultarTramites()
        {
            try
            {
                UnidadBO unidadTemp = new UnidadBO
                {
                    UnidadID    = this.vista.Tramitable.TramitableID,
                    NumeroSerie = this.vista.Tramitable.DescripcionTramitable
                };
                List <UnidadBO> lstunidad = unidadBR.Consultar(dctx, unidadTemp);
                if (lstunidad.Count != 0)
                {
                    if (lstunidad.Count == 1)
                    {
                        UnidadBO unidad = lstunidad[0];
                        if (unidad.UnidadID != null)
                        {
                            if (unidad.Modelo != null)
                            {
                                this.vista.Modelo = unidad.Modelo.Nombre;
                                if (unidad.Modelo.Marca != null)
                                {
                                    this.vista.Marca = unidad.Modelo.Marca.Nombre;
                                }
                            }
                            this.vista.NumeroSerie = unidad.NumeroSerie;
                            #region Tramites
                            //Consulta de Trámites
                            List <TenenciaBO> lstTenencia = tenenciaBR.ConsultarCompleto(dctx, new TenenciaBO {
                                Activo = true, Tramitable = this.vista.Tramitable
                            });
                            if (lstTenencia.Count == 1)
                            {
                                this.vista.Tenencia = lstTenencia[0];
                            }
                            if (lstTenencia.Count > 1)
                            {
                                throw new Exception("Inconsistencia en el tramites de tenencias, la consulta devolvió mas de una tenencia activa");
                            }

                            List <VerificacionBO> lstVerificacionAmbiental = verificacionBR.ConsultarCompleto(dctx, new VerificacionBO {
                                Activo = true, Tipo = ETipoTramite.VERIFICACION_AMBIENTAL, Tramitable = this.vista.Tramitable
                            });
                            if (lstVerificacionAmbiental.Count == 1)
                            {
                                this.vista.VerificacionAmbiental = lstVerificacionAmbiental[0];
                            }
                            if (lstVerificacionAmbiental.Count > 1)
                            {
                                throw new Exception("Inconsistencia en el tramites de Verificacion Ambiental, la consulta devolvió mas de una Verificación Ambiental activa");
                            }

                            List <VerificacionBO> lstVerificacionMecanico = verificacionBR.ConsultarCompleto(dctx, new VerificacionBO {
                                Activo = true, Tipo = ETipoTramite.VERIFICACION_FISICO_MECANICA, Tramitable = this.vista.Tramitable
                            });
                            if (lstVerificacionMecanico.Count == 1)
                            {
                                this.vista.VerificacionMecanica = lstVerificacionMecanico[0];
                            }
                            if (lstVerificacionMecanico.Count > 1)
                            {
                                throw new Exception("Inconsistencia en el tramites de Verificación Físico - Mecánico, la consulta devolvió mas de una Verificación Fisico- Mecánica activa");
                            }

                            List <PlacaEstatalBO> lstPlacaEstatal = placaBR.Consultar(dctx, new PlacaEstatalBO {
                                Activo = true, Tramitable = this.vista.Tramitable, Tipo = ETipoTramite.PLACA_ESTATAL
                            });
                            if (lstPlacaEstatal.Count == 1)
                            {
                                this.vista.PlacaEstatal = lstPlacaEstatal[0];
                            }
                            if (lstPlacaEstatal.Count > 1)
                            {
                                throw new Exception("Inconsistencia en el tramites de Placa Estatal, la consulta devolvió mas de una Placa Estatal activa");
                            }
                            List <PlacaFederalBO> lstPlacaFederal = placaBR.Consultar(dctx, new PlacaFederalBO {
                                Tramitable = this.vista.Tramitable, Tipo = ETipoTramite.PLACA_FEDERAL
                            });
                            if (lstPlacaFederal != null && lstPlacaFederal.Count > 0)
                            {
                                var lstPlacasFederalesActivas = lstPlacaFederal.Where(p => p.Activo == true).ToList();
                                if (lstPlacasFederalesActivas.Count > 1)
                                {
                                    throw new Exception("Inconsistencia en el tramites de Placa Federal, la consulta devolvió mas de una Placa Federal activa");
                                }
                                if (lstPlacasFederalesActivas.Count == 1)
                                {
                                    this.vista.PlacaFederal = lstPlacasFederalesActivas[0];
                                }
                                else
                                {
                                    this.vista.PlacaFederal = lstPlacaFederal.FirstOrDefault(p => p.FechaRecepcion.Value == lstPlacaFederal.Max(p1 => p1.FechaRecepcion).Value);
                                }
                            }

                            List <GPSBO> lstGPS = gpsBR.Consultar(dctx, new GPSBO {
                                Tramitable = this.vista.Tramitable, Activo = true
                            });
                            if (lstGPS.Count == 1)
                            {
                                this.vista.GPS = lstGPS[0];
                            }
                            if (lstGPS.Count > 1)
                            {
                                throw new Exception("Inconsistencia en el tramites de GPS, la consulta devolvió mas de un GPS activo");
                            }
                            List <FiltroAKBO> lstFiltro = filtroBR.Consultar(dctx, new FiltroAKBO {
                                Tramitable = this.vista.Tramitable, Activo = true
                            });
                            if (lstFiltro.Count == 1)
                            {
                                this.vista.FiltroAK = lstFiltro[0];
                            }
                            if (lstFiltro.Count > 1)
                            {
                                throw new Exception("Inconsistencia en el tramites de Filtro AK, la consulta devolvió mas de un Filtro AK  activo");
                            }

                            List <SeguroBO> lstSeguros = seguroBR.ConsultarCompleto(dctx, new SeguroBO {
                                Tramitable = this.vista.Tramitable, Tipo = ETipoTramite.SEGURO, Activo = true
                            });
                            if (lstSeguros != null)
                            {
                                if (lstSeguros.Count == 1)
                                {
                                    this.vista.Poliza       = lstSeguros[0].NumeroPoliza;
                                    this.vista.Aseguradora  = lstSeguros[0].Aseguradora;
                                    this.vista.FechaInicial = lstSeguros[0].VigenciaInicial;
                                    this.vista.FechaFinal   = lstSeguros[0].VigenciaFinal;
                                    this.vista.Seguro       = lstSeguros[0];
                                }
                                if (lstSeguros.Count > 1)
                                {
                                    throw new Exception("Inconsistencia en el tramites de Seguro, la consulta devolvió mas de un Seguro  activo");
                                }
                            }
                            #endregion
                            this.DatoAInterfazUsuario();
                        }
                        else
                        {
                            this.MostrarMensaje("Error al intentar obtener los datos de la unidad", ETipoMensajeIU.ERROR, nombreClase + ".ConsultarTramites(): La unidad es nulo");
                        }
                    }
                    else
                    {
                        this.MostrarMensaje("Error al intentar obtener los datos de la unidad ", ETipoMensajeIU.ERROR, nombreClase + ".ConsultarTramites(): La consulta devolvió más de una unidad");
                    }
                }
                else
                {
                    this.MostrarMensaje("Error al intentar obtener los datos de la unidad ", ETipoMensajeIU.ERROR, nombreClase + "ConsultarTramites(): La consulta no devolvió ningún resultado");
                }
            }

            catch (Exception ex)
            {
                this.MostrarMensaje("Error al intentar consultar los trámites", ETipoMensajeIU.ERROR, nombreClase + ".ConsultarTramites: " + ex.Message);
            }
        }
        /// <summary>
        /// Determina de acuerdo a la capacidad del taller si el limite ya se ha superado
        /// </summary>
        /// <param name="fecha"></param>
        /// <returns></returns>
        public bool LimiteTallerSuperado(DateTime?fecha)
        {
            var tipoMantto   = (ETipoMantenimiento)Enum.Parse(typeof(ETipoMantenimiento), this.vista.TipoMantenimiento);
            var fechaInicial = new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day);
            var fechaFinal   = new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day, 23, 59, 59);

            do
            {
                if (fechaInicial.DayOfWeek != DayOfWeek.Monday)
                {
                    fechaInicial = fechaInicial.AddDays(-1);
                }
            } while (fechaInicial.DayOfWeek != DayOfWeek.Monday);
            do
            {
                if (fechaFinal.DayOfWeek != DayOfWeek.Sunday)
                {
                    fechaFinal = fechaFinal.AddDays(1);
                }
            } while (fechaFinal.DayOfWeek != DayOfWeek.Sunday);

            decimal tiempoPorDia = FacadeBR.ConsultarTiempoDisponibleTaller(dctx, this.vista.TallerID, this.vista.SucursalID, this.vista.UnidadOperativaID, fechaInicial, fechaFinal, fecha.Value.DayOfWeek == DayOfWeek.Saturday);

            CitaMantenimientoBR citaMantenimientoBR = new CitaMantenimientoBR();
            var citas = new List <CitaMantenimientoBO>();

            citas.AddRange(citaMantenimientoBR.ConsultarPorRangoFechas(dctx, new CitaMantenimientoBOF()
            {
                FechaInicio = new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day),
                FechaFin    = new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day, 23, 59, 59),
                Estatus     = EEstatusCita.CALENDARIZADA
            }));
            citas.AddRange(citaMantenimientoBR.ConsultarPorRangoFechas(dctx, new CitaMantenimientoBOF()
            {
                FechaInicio = new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day),
                FechaFin    = new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day, 23, 59, 59),
                Estatus     = EEstatusCita.RECALENDARIZADA
            }));
            citas.AddRange(citaMantenimientoBR.ConsultarPorRangoFechas(dctx, new CitaMantenimientoBOF()
            {
                FechaInicio = new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day),
                FechaFin    = new DateTime(fecha.Value.Year, fecha.Value.Month, fecha.Value.Day, 23, 59, 59),
                Estatus     = EEstatusCita.INICIADA
            }));

            UnidadBR unidadBR = new UnidadBR();
            ConsultarMantenimientoProgramadoBR mantenimientoProgramadoBR = new ConsultarMantenimientoProgramadoBR();

            decimal tiempoConsumido = 0;

            foreach (var cita in citas.Where(x => (x.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.UnidadID != this.vista.UnidadID).ToList())
            {
                var manttoProgramado = mantenimientoProgramadoBR.Consultar(dctx, new MantenimientoProgramadoUnidadBO()
                {
                    MantenimientoProgramadoID = cita.MantenimientoProgramado.MantenimientoProgramadoID
                }).FirstOrDefault();
                (manttoProgramado as MantenimientoProgramadoUnidadBO).Unidad = unidadBR.Consultar(dctx, new Equipos.BO.UnidadBO()
                {
                    EquipoID = (manttoProgramado as MantenimientoProgramadoUnidadBO).EquipoID
                }).FirstOrDefault();
                var equiposAliados = unidadBR.ConsultarEquipoAliado(dctx, (manttoProgramado as MantenimientoProgramadoUnidadBO).Unidad, false);
                List <MantenimientoProgramadoEquipoAliadoBO> manttoEquiposAliados = new List <MantenimientoProgramadoEquipoAliadoBO>();
                foreach (var equipoAliado in equiposAliados)
                {
                    var manttoEA = mantenimientoProgramadoBR.Consultar(dctx, new MantenimientoProgramadoEquipoAliadoBO()
                    {
                        EquipoID = equipoAliado.EquipoID, Activo = true, EstatusMantenimientoProgramado = EEstatusMantenimientoProgramado.PROGRAMADO
                    }).FirstOrDefault();
                    if (manttoEA != null)
                    {
                        manttoEquiposAliados.Add(manttoEA as MantenimientoProgramadoEquipoAliadoBO);
                    }
                }

                var tiempoMantto = this.ObtenerTiempoMantenimiento(manttoProgramado as MantenimientoProgramadoUnidadBO, manttoEquiposAliados);

                tiempoConsumido = tiempoConsumido + tiempoMantto != null ? tiempoMantto.Value : 0;
            }

            BPMO.SDNI.Equipos.BO.UnidadBO unidad;

            if (citas.Any(x => (x.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.UnidadID == this.vista.UnidadID))
            {
                var cita = citas.FirstOrDefault(x => (x.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad.UnidadID == this.vista.UnidadID);
                unidad = (cita.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad;
            }
            else
            {
                unidad = unidadBR.Consultar(dctx, new BPMO.SDNI.Equipos.BO.UnidadBO()
                {
                    UnidadID = this.vista.UnidadID
                }).FirstOrDefault();
            }

            decimal?tiempo = 0;
            var     configuracionPosicionTrabajo = new ConfiguracionPosicionTrabajoBO()
            {
                ConfiguracionModeloMotorizacion = new ConfiguracionModeloMotorizacionBO()
                {
                    Modelo = unidad.Modelo
                },
                DescriptorTrabajo = new DescriptorTrabajoBO
                {
                    Nombre = tipoMantto.ToString()
                }
            };

            var configPosicion = FacadeBR.ConsultarConfiguracionPosicionTrabajoDetalle(dctx, configuracionPosicionTrabajo);

            configPosicion.ForEach(x => { tiempo = tiempo + x.TiempoSRT; });

            return(tiempo + tiempoConsumido > tiempoPorDia);
        }