private decimal CalcularHorasDeUso(List <Activacion> lista)
        {
            int        horas = 0;
            bool       flag  = false;
            Activacion activacionAnterior = null;

            foreach (Activacion registro in lista)
            {
                if (registro.Estado != EstadoDispositivo.Apagado)
                {
                    activacionAnterior = registro;
                    flag = true;
                }
                else if (registro.Estado == EstadoDispositivo.Apagado && flag)
                {
                    horas += Math.Abs(registro.FechaDeRegistro.Subtract(activacionAnterior.FechaDeRegistro).Hours);
                    flag   = false;
                }
            }

            if (activacionAnterior != null && activacionAnterior.Estado != EstadoDispositivo.Apagado && flag)
            {
                horas += Math.Abs(Convert.ToInt32(activacionAnterior.FechaDeRegistro.Subtract(DateTime.Now).TotalHours));
            }

            return(horas);
        }
        public List <string> ObtenerIntervalosEncendidoPorPeriodo(DateTime fechaDesde, DateTime fechaHasta)
        {
            List <string> intervalosEncendido = new List <string>();

            List <Activacion> activacionesDentroPeriodo = this.RegistroDeActivaciones.Where(a => a.FechaDeRegistro >= fechaDesde && a.FechaDeRegistro <= fechaHasta).ToList();
            Activacion        activacion = null;

            for (var i = 0; i < activacionesDentroPeriodo.Count; i++)
            {
                activacion = activacionesDentroPeriodo[i];

                if (activacion.Estado == EstadoDispositivo.Encendido)
                {
                    //Busco la posicion siguiente para saber cuando se apagó, si no la encuentro asumo que nunca se apagó, por lo que asumo que sigue encendido hasta la fecha máxima indicada
                    if (activacionesDentroPeriodo.ElementAtOrDefault(i + 1) != null)
                    {
                        intervalosEncendido.Add("Encendido desde '" + activacion.FechaDeRegistro + "' hasta '" + activacionesDentroPeriodo[i + 1].FechaDeRegistro + "' Consumo en hs: '" + Math.Truncate((activacionesDentroPeriodo[i + 1].FechaDeRegistro - activacion.FechaDeRegistro).TotalHours));
                    }
                    else
                    {
                        intervalosEncendido.Add("Encendido desde '" + activacion.FechaDeRegistro + "' hasta (al menos) '" + fechaHasta + "' Consumo en hs: '" + Math.Truncate((fechaHasta - activacion.FechaDeRegistro).TotalHours));
                    }
                }
            }

            return(intervalosEncendido);
        }
        /// <summary>
        /// Coloca el dispositivo en modo ahorro energía
        /// </summary>
        public void ColocarEnAhorroEnergia()
        {
            this.Estado = EstadoDispositivo.AhorroEnergia;
            //this.Driver.PonerEnModoAhorroEnergia();

            Activacion activacion = new Activacion(this.Estado)
            {
                Inteligente     = this,
                FechaDeRegistro = DateTime.Now,
                InteligenteId   = this.Id
            };

            //BaseRepositorio<Activacion> repoActivacion = new BaseRepositorio<Activacion>(Context);
            //repoActivacion.Create(activacion);

            this.RegistroDeActivaciones.Add(activacion);
        }
        /// <summary>
        /// Apaga el equipo
        /// </summary>
        public void Apagar()
        {
            if (this.Estado != EstadoDispositivo.Apagado && this.Estado != EstadoDispositivo.AhorroEnergia)
            {
                this.Estado = EstadoDispositivo.Apagado;
                //this.Driver.Apagar();

                Activacion activacion = new Activacion(this.Estado)
                {
                    Inteligente     = this,
                    FechaDeRegistro = DateTime.Now,
                    InteligenteId   = this.Id
                };

                //BaseRepositorio<Activacion> repoActivacion = new BaseRepositorio<Activacion>(Context);
                //repoActivacion.Create(activacion);

                this.RegistroDeActivaciones.Add(activacion);
            }
        }
        /// <summary>
        /// Enciendo el equipo
        /// </summary>
        public void Encender()
        {
            if (this.Estado != EstadoDispositivo.Encendido)
            {
                this.Estado = EstadoDispositivo.Encendido;

                Activacion activacion = new Activacion()
                {
                    Estado          = this.Estado,
                    Inteligente     = this,
                    FechaDeRegistro = DateTime.Now,
                    InteligenteId   = this.Id
                };

                //BaseRepositorio<Activacion> repoActivacion = new BaseRepositorio<Activacion>(Context);
                //repoActivacion.Create(activacion);

                this.RegistroDeActivaciones.Add(activacion);
            }
        }
 public decimal ObtenerHorasPeriodo(DateTime fechaDesde, DateTime fechaHasta)
 {
     if (this.RegistroDeActivaciones != null && this.RegistroDeActivaciones.Count > 0)
     {
         List <Activacion> lista = this.RegistroDeActivaciones.Where(x => x.FechaDeRegistro >= fechaDesde && x.FechaDeRegistro <= fechaHasta).ToList <Activacion>();
         if (lista == null || lista.Count == 0)
         {
             Activacion ultimaActivacion = this.RegistroDeActivaciones.Where(x => x.FechaDeRegistro == (this.RegistroDeActivaciones.Max(y => y.FechaDeRegistro))).Single();
             if (ultimaActivacion.Estado == EstadoDispositivo.Encendido)
             {
                 lista.Add(new Activacion()
                 {
                     Estado          = EstadoDispositivo.Encendido,
                     Inteligente     = this,
                     FechaDeRegistro = fechaDesde,
                     InteligenteId   = this.Id
                 });
             }
         }
         return(this.CalcularHorasDeUso(lista));
     }
     return(0);
 }