/// <summary>
        /// Obtiene la unidad que deseas editar
        /// </summary>
        /// <param name="unidadAnterior">Unidad que se desea editar</param>
        /// <returns>Unidad Completa para su edicion</returns>
        private UnidadBO ObtenerUnidad(UnidadBO unidadAnterior)
        {
            var      obj      = unidadAnterior;
            UnidadBR unidadBR = new UnidadBR();

            //Consultamos el objeto
            var unidades = unidadBR.ConsultarCompleto(dctx, obj, true);

            //Limpiamso la instancia del objeto
            obj = null;

            //Validamos que realmente hay una unidad para su edición
            if (!ReferenceEquals(unidades, null))
            {
                if (unidades.Count > 0)
                {
                    obj = unidades[0];
                }
            }

            //Retornamos el objeto
            return(obj);
        }
Example #2
0
        public void SeleccionarUnidad(Equipos.BO.UnidadBO unidad)
        {
            try {
                #region Se obtiene la información completa de la unidad y sus trámites
                List <TramiteBO> lstTramites = new List <TramiteBO>();

                if (unidad != null && (unidad.UnidadID != null || unidad.EquipoID != null))
                {
                    List <Equipos.BO.UnidadBO> lst = new UnidadBR().ConsultarCompleto(this.dctx, new Equipos.BO.UnidadBO()
                    {
                        UnidadID = unidad.UnidadID, EquipoID = unidad.EquipoID
                    }, true);
                    if (lst.Count <= 0)
                    {
                        throw new Exception("No se encontró la información completa de la unidad seleccionada.");
                    }

                    unidad = lst[0];

                    lstTramites = new TramiteBR().ConsultarCompleto(this.dctx, new TramiteProxyBO()
                    {
                        Activo = true, Tramitable = unidad
                    }, false);

                    bool esValido = ((EAreaConstruccion)unidad.Area == EAreaConstruccion.RO || (EAreaConstruccion)unidad.Area == EAreaConstruccion.ROC);

                    if (this.vista.UnidadOperativaID == (int)ETipoEmpresa.Construccion && esValido)
                    {
                        CatalogoBaseBO catalogoBase = unidad.TipoEquipoServicio;
                        unidad.TipoEquipoServicio = FacadeBR.ConsultarTipoUnidad(dctx, catalogoBase).FirstOrDefault();

                        ContratoPSLBR Contratobr = new ContratoPSLBR();
                        ETipoUnidad?  tipo       = Contratobr.ObtenerTipoUnidadPorClave(dctx, unidad.TipoEquipoServicio.NombreCorto, null);

                        if (tipo == null)
                        {
                            this.vista.HabilitarBotonTerminar(false);
                            this.vista.MostrarMensaje(this.nombreClase + ".SeleccionarUnidad: " + "No es posible seleccionar la unidad " + unidad.NumeroSerie + " debido a que no existe un checklist para su tipo (" + unidad.TipoEquipoServicio.NombreCorto + ")", ETipoMensajeIU.ADVERTENCIA, null);
                            return;
                        }
                        else
                        {
                            this.vista.HabilitarBotonTerminar(true);
                        }
                    }
                    else
                    {
                        this.vista.HabilitarBotonTerminar(true);
                    }
                }
                #endregion

                #region Dato a Interfaz de Usuario
                //Información de la Unidad
                if (unidad == null)
                {
                    unidad = new Equipos.BO.UnidadBO();
                }
                if (unidad.Modelo == null)
                {
                    unidad.Modelo = new BPMO.Servicio.Catalogos.BO.ModeloBO();
                }
                if (unidad.Modelo.Marca == null)
                {
                    unidad.Modelo.Marca = new BPMO.Servicio.Catalogos.BO.MarcaBO();
                }
                if (unidad.Sucursal == null)
                {
                    unidad.Sucursal = new SucursalBO();
                }
                if (unidad.CaracteristicasUnidad == null)
                {
                    unidad.CaracteristicasUnidad = new CaracteristicasUnidadBO();
                }

                #endregion
            } catch (Exception ex) {
                throw new Exception(this.nombreClase + ".SeleccionarUnidad: " + ex.Message);
            }
        }
        private void EstablecerLineaContrato(LineaContratoManttoBO linea, bool edicion = false)
        {
            try
            {
                if (linea == null)
                {
                    linea = new LineaContratoManttoBO();
                }
                if (linea.Equipo == null)
                {
                    linea.Equipo = new Equipos.BO.UnidadBO();
                }
                if (!(linea.Equipo is Equipos.BO.UnidadBO))
                {
                    throw new Exception("El equipo de la línea de contrato no es una unidad.");
                }

                List <TramiteBO> lstTramites = new List <TramiteBO>();

                #region Se obtiene la información completa de la unidad y sus trámites
                if (((Equipos.BO.UnidadBO)linea.Equipo).UnidadID != null)
                {
                    Equipos.BO.UnidadBO bo = (Equipos.BO.UnidadBO)linea.Equipo;
                    //SC_0051: cambie de consultar completo a consultar detalle
                    List <Equipos.BO.UnidadBO> lst = new UnidadBR().ConsultarDetalle(this.dctx, new Equipos.BO.UnidadBO()
                    {
                        UnidadID = bo.UnidadID, EquipoID = bo.EquipoID
                    }, true);
                    if (lst.Count <= 0)
                    {
                        throw new Exception("No se encontró la información completa de la unidad seleccionada.");
                    }
                    if (!edicion)
                    {
                        bo = lst[0];
                    }

                    if (bo.Sucursal != null)//SC_0051
                    {
                        if (bo.Sucursal.Id.HasValue)
                        {
                            var lstUnis = FacadeBR.ConsultarSucursal(dctx, bo.Sucursal);
                            var sucUni  = lstUnis.FirstOrDefault(x => x.Id == bo.Sucursal.Id);

                            if (sucUni != null)
                            {
                                bo.Sucursal = sucUni;
                            }
                        }
                    }

                    lstTramites = new TramiteBR().ConsultarCompleto(this.dctx, new TramiteProxyBO()
                    {
                        Activo = true, Tramitable = bo
                    }, false);

                    linea.Equipo = bo;
                }
                #endregion

                #region Se completa la información de la sub-línea de contrato con los equipos aliados de la unidad
                if (linea.SubLineasContrato != null)
                {
                    foreach (SubLineaContratoManttoBO sublinea in linea.SubLineasContrato)
                    {
                        if (sublinea.EquipoAliado == null)
                        {
                            sublinea.EquipoAliado = new EquipoAliadoBO();
                        }

                        if (sublinea.EquipoAliado.EquipoAliadoID != null && ((Equipos.BO.UnidadBO)linea.Equipo).EquiposAliados != null)
                        {
                            EquipoAliadoBO eaTemp = ((Equipos.BO.UnidadBO)linea.Equipo).EquiposAliados.Find(p => p.EquipoAliadoID == sublinea.EquipoAliado.EquipoAliadoID);
                            if (eaTemp != null)
                            {
                                sublinea.EquipoAliado = eaTemp;
                            }
                        }
                    }
                }
                else
                {
                    if (linea.Equipo != null && linea.Equipo is Equipos.BO.UnidadBO && ((Equipos.BO.UnidadBO)linea.Equipo).EquiposAliados != null)
                    {
                        linea.SubLineasContrato = new List <SubLineaContratoManttoBO>();
                        foreach (EquipoAliadoBO ea in ((Equipos.BO.UnidadBO)linea.Equipo).EquiposAliados)
                        {
                            SubLineaContratoManttoBO subLinea = new SubLineaContratoManttoBO();
                            subLinea.EquipoAliado  = ea;
                            subLinea.Mantenimiento = false;
                            linea.SubLineasContrato.Add(subLinea);
                        }
                    }
                }
                #endregion

                this.DatoAInterfazUsuario(lstTramites);
                this.DatoAInterfazUsuario(linea);
            }
            catch (Exception ex)
            {
                throw new Exception(this.nombreClase + ".EstablecerLineaContrato: " + 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);
        }
        /// <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");
            }
        }
        /// <summary>
        /// Consulta los mantenimientos programados
        /// </summary>
        public void ConsultarMantenimientosProgramados()
        {
            try
            {
                int AnoActual   = DateTime.Now.Year;
                int MesActual   = DateTime.Now.Month;
                int MesAnterior = 1;

                if (MesActual > 1)
                {
                    MesAnterior = MesActual - 1;
                }
                else if (MesActual == 1)
                {
                    MesAnterior = 12;
                    AnoActual   = AnoActual - 1;
                }

                var fecha      = new DateTime(AnoActual, MesAnterior, 1);
                var fechaFinal = fecha.AddMonths(3).AddDays(-1).AddHours(23).AddMinutes(59).AddSeconds(59);
                var mantenimientoProgramadoBR = new ConsultarMantenimientoProgramadoBR();
                var mantenimientoBOF          = new MantenimientoProgramadoBOF()
                {
                    Auditoria  = new AuditoriaBO(),
                    Fecha      = fecha,
                    FechaFinal = fechaFinal,
                    EsUnidad   = true,
                    Sucursal   = new SucursalBO()
                    {
                        Id = this.vista.SucursalID
                    }
                };

                SucursalBO sucursal = new SucursalBO()
                {
                    Id = this.vista.SucursalID
                };

                List <DateTime> diasInhabiles = new List <DateTime>();
                if (this.vista.SucursalID != null)
                {
                    diasInhabiles.AddRange(FacadeBR.ConsultarDiasInhabiles(dctx, fecha, fechaFinal, sucursal));
                }

                var listadoMantenimientos = mantenimientoProgramadoBR.ConsultarPreventivosSinRealizar(this.dctx, mantenimientoBOF);
                var listaCitas            = new List <CitaMantenimientoBO>();
                var unidadBR = new UnidadBR();
                if (listadoMantenimientos != null && listadoMantenimientos.Count > 0)
                {
                    foreach (var mantenimientoProgramado in listadoMantenimientos)
                    {
                        var agregar           = true;
                        var citaMantenimiento = new CitaMantenimientoBO()
                        {
                            MantenimientoProgramado = new MantenimientoProgramadoUnidadBO(), Auditoria = new AuditoriaBO()
                        };
                        var citasUnidad = controlador.Consultar(dctx, new CitaMantenimientoBO()
                        {
                            MantenimientoProgramado = new MantenimientoProgramadoBO()
                            {
                                MantenimientoProgramadoID = mantenimientoProgramado.MantenimientoProgramadoID
                            }
                        });
                        if (citasUnidad != null && citasUnidad.Any())
                        {
                            citaMantenimiento = citasUnidad.FirstOrDefault();
                            citaMantenimiento.MantenimientoProgramado = new MantenimientoProgramadoUnidadBO()
                            {
                                MantenimientoProgramadoID = mantenimientoProgramado.MantenimientoProgramadoID,
                                Activo   = mantenimientoProgramado.Activo,
                                EquipoID = mantenimientoProgramado.EquipoID,
                                EstatusMantenimientoProgramado = mantenimientoProgramado.EstatusMantenimientoProgramado,
                                EsUnidad          = mantenimientoProgramado.EsUnidad,
                                Fecha             = mantenimientoProgramado.Fecha,
                                Horas             = mantenimientoProgramado.Horas,
                                Km                = mantenimientoProgramado.Km,
                                TipoMantenimiento = mantenimientoProgramado.TipoMantenimiento,
                            };

                            if (this.vista.SucursalID != null && this.vista.TallerID != null)
                            //if (this.vista.TallerID != null)
                            {
                                if (citaMantenimiento.Sucursal.Id != this.vista.SucursalID && citaMantenimiento.TallerInterno.Id != this.vista.TallerID)
                                {
                                    //if (citaMantenimiento.TallerInterno.Id != this.vista.TallerID)
                                    agregar = false;
                                }
                                else
                                {
                                    (citaMantenimiento.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad = this.ObtenerUnidad(mantenimientoProgramado.EquipoID, null);
                                }
                            }
                            else
                            {
                                if (this.vista.SucursalID != null && this.vista.TallerID == null)
                                {
                                    if (citaMantenimiento.Sucursal.Id != this.vista.SucursalID)
                                    {
                                        agregar = false;
                                    }
                                    else
                                    {
                                        (citaMantenimiento.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad = this.ObtenerUnidad(mantenimientoProgramado.EquipoID, null);
                                    }
                                }
                                else
                                {
                                    (citaMantenimiento.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad = this.ObtenerUnidad(mantenimientoProgramado.EquipoID, null);
                                }
                            }
                        }
                        else
                        {
                            citaMantenimiento.MantenimientoProgramado = new MantenimientoProgramadoUnidadBO()
                            {
                                MantenimientoProgramadoID = mantenimientoProgramado.MantenimientoProgramadoID,
                                Activo   = mantenimientoProgramado.Activo,
                                EquipoID = mantenimientoProgramado.EquipoID,
                                EstatusMantenimientoProgramado = mantenimientoProgramado.EstatusMantenimientoProgramado,
                                EsUnidad          = mantenimientoProgramado.EsUnidad,
                                Fecha             = mantenimientoProgramado.Fecha,
                                Horas             = mantenimientoProgramado.Horas,
                                Km                = mantenimientoProgramado.Km,
                                TipoMantenimiento = mantenimientoProgramado.TipoMantenimiento,
                            };
                            (citaMantenimiento.MantenimientoProgramado as MantenimientoProgramadoUnidadBO).Unidad = this.ObtenerUnidad(mantenimientoProgramado.EquipoID, null);
                        }

                        if (agregar)
                        {
                            if (listaCitas.Count(x => x.MantenimientoProgramado.EquipoID == mantenimientoProgramado.EquipoID && x.MantenimientoProgramado.Fecha == mantenimientoProgramado.Fecha) > 0)
                            {
                            }
                            else
                            {
                                listaCitas.Add(citaMantenimiento);
                            }
                        }
                    }
                }
                else
                {
                    this.vista.MostrarMensaje("No se encontro ningun mantenimiento programado para este mes", Primitivos.Enumeradores.ETipoMensajeIU.INFORMACION);
                }

                this.vista.EstablecerMantenimientos(listaCitas, diasInhabiles);
            }
            catch (Exception ex)
            {
                throw new Exception(nombreClase + ": " + ex.Message);
            }
        }