Example #1
0
        public void Update(EventViewModel currentEventViewModel)
        {
            Event target = new Event();

            target = entities.Events.Where(p => p.Id == currentEventViewModel.Id).FirstOrDefault();

            if (target != null)
            {
                target.date        = currentEventViewModel.date;
                target.description = currentEventViewModel.description;
                target.isOpen      = currentEventViewModel.isOpen;
                target.createdBy   = currentEventViewModel.createdBy;

                ProductionUnit currentProductionUnit = new ProductionUnit();
                currentProductionUnit = entities.ProductionUnits.Where(p => p.Id == currentEventViewModel.productionUnitId).FirstOrDefault();

                EventType currentEventType = new EventType();
                currentEventType = entities.EventTypes.Where(p => p.Id == currentEventViewModel.eventTypeId).FirstOrDefault();

                target.productionUnit = currentProductionUnit;
                target.eventType      = currentEventType;

                target.details = currentEventViewModel.details;
                target.picture = currentEventViewModel.picture;
            }

            entities.SaveChanges();
        }
Example #2
0
        public static void PioneerUnitIssueMessage(ProductionUnit currentProductionUnit, string note, string details)
        {
            var dbLog = new ApplicationDbContext();

            try
            {
                var client = new SendGridClient(MailSendGridAPIKey);
                var from   = new EmailAddress("*****@*****.**", "Myfood Hub Bot");

                var pioneerName = string.Format("{0} #{1}", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber);

                List <EmailAddress> tos = new List <EmailAddress>
                {
                    new EmailAddress("*****@*****.**", pioneerName)
                };

                var subject     = string.Empty;
                var htmlContent = string.Empty;

                if (currentProductionUnit.owner != null && currentProductionUnit.owner.language != null)
                {
                    switch (currentProductionUnit.owner.language.description)
                    {
                    case "fr":
                        subject     = string.Format("[myfood] Incident enregistré chez {0} #{1}", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber);
                        htmlContent = string.Format("Bonjour, </br></br>" +
                                                    "La serre {0} #{1} vient d'enregistrer un incident critique.</br>" +
                                                    "Detail : {2} {3}</br></br>" +
                                                    "Bien à vous,", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber, note, details);
                        break;

                    default:
                        subject     = string.Format("[myfood] Issue recorded at {0} #{1}", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber);
                        htmlContent = string.Format("Hi {0}, </br></br>" +
                                                    "The greenhouse {0} #{1} has met a critical issue.</br>" +
                                                    "Detail : {2} {3}</br></br>" +
                                                    "Have a nice day,", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber, note, details);
                        break;
                    }
                }
                else
                {
                    subject     = string.Format("[myfood] Issue recorded at {0} #{1}", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber);
                    htmlContent = string.Format("Hi {0}, </br></br>" +
                                                "The greenhouse {0} #{1} has met a critical issue.</br>" +
                                                "Detail : {2} {3}</br></br>" +
                                                "Have a nice day,", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber, note, details);
                }

                var msg = MailHelper.CreateSingleEmailToMultipleRecipients(from, tos, subject, "", htmlContent, false);
                msg.AddCc("*****@*****.**");

                var response = client.SendEmailAsync(msg);
            }
            catch (Exception ex)
            {
                dbLog.Logs.Add(Log.CreateErrorLog(String.Format("Error with Mail Notification"), ex));
                dbLog.SaveChanges();
            }
        }
        private void Produce(ProductionUnit productionUnit, IList <MineableResource> activeMineableResources)
        {
            var random = new Random();

            activeMineableResources[random.Next(0, activeMineableResources.Count())].Amount--;
            var product = _entityBuilder.BuildProduct(CreateEntity(), ProductType.IronOre);

            productionUnit.OutputBuffer.Add(product.Id);
        }
Example #4
0
        private static void CreateProductionUnitModes(ProductionUnit pu, int count)
        {
            Console.WriteLine("Inserting ProductionUnitModes...");
            for (var i = 0; i < count; i++)
            {
                var pum = new ProductionUnitMode()
                {
                    ProductionUnit = pu,
                    Name           = $"ProductionUnit Mode {i + 1}",
                    Description    = "ProductionUnit Mode"
                };
                pu.ProductionUnitModes.Add(pum);

                CreateEfficiencyProfileDetails(pum, 2000);
            }
            Console.WriteLine("Inserted ProductionUnitModes");
        }
Example #5
0
        private static void CreateProductionUnits(CapacityPlan cp, int count)
        {
            Console.WriteLine("Inserting ProductionUnits...");
            for (var i = 0; i < count; i++)
            {
                var pu = new ProductionUnit()
                {
                    CapacityPlan = cp,
                    Name         = $"Production Unit {i + 1}"
                };
                cp.ProductionUnits.Add(pu);

                CreateProductionUnitModes(pu, 2);
            }

            Console.WriteLine("Inserted ProductionUnits");
        }
Example #6
0
        public void Create(ProductionUnitViewModel productionUnit)
        {
            var entity = new ProductionUnit();

            entity.Id                = productionUnit.Id;
            entity.startDate         = productionUnit.startDate.Value;
            entity.locationLatitude  = productionUnit.locationLatitude;
            entity.locationLongitude = productionUnit.locationLongitude;
            entity.version           = productionUnit.version;
            entity.info              = productionUnit.info;
            //entity.options = productionUnit.options;
            entity.reference           = productionUnit.reference;
            entity.picturePath         = productionUnit.picturePath;
            entity.lastMeasureReceived = productionUnit.lastMeasureReceived;

            if (entity.productionUnitType == null)
            {
                var productionUnitType = entities.ProductionUnitTypes.Where(p => p.Id == productionUnit.productionUnitTypeId).FirstOrDefault();
                entity.productionUnitType = productionUnitType;
            }

            if (entity.hydroponicType == null)
            {
                var hydroponicType = entities.HydroponicTypes.Where(p => p.Id == productionUnit.hydroponicTypeId).FirstOrDefault();
                entity.hydroponicType = hydroponicType;
            }

            if (entity.productionUnitStatus == null)
            {
                var productionUnitStatus = entities.ProductionUnitStatus.Where(p => p.Id == productionUnit.productionUnitStatusId).FirstOrDefault();
                entity.productionUnitStatus = productionUnitStatus;
            }

            if (entity.owner == null)
            {
                var owner = entities.ProductionUnitOwners.Where(p => p.Id == productionUnit.ownerId).FirstOrDefault();
                entity.owner = owner;
            }

            entities.ProductionUnits.Add(entity);

            entities.SaveChanges();

            productionUnit.Id = entity.Id;
        }
Example #7
0
        public void Update(ProductionUnitViewModel productionUnit)
        {
            ProductionUnit target = new ProductionUnit();

            target = entities.ProductionUnits.Where(p => p.Id == productionUnit.Id).Include(m => m.productionUnitType)
                     .Include(m => m.productionUnitStatus)
                     .Include(m => m.owner)
                     .Include(m => m.hydroponicType).FirstOrDefault();

            if (target != null)
            {
                target.startDate         = productionUnit.startDate.Value;
                target.locationLatitude  = productionUnit.locationLatitude;
                target.locationLongitude = productionUnit.locationLongitude;
                target.version           = productionUnit.version;
                target.info = productionUnit.info;
                // target.options = productionUnit.options;
                target.reference           = productionUnit.reference;
                target.picturePath         = productionUnit.picturePath;
                target.lastMeasureReceived = productionUnit.lastMeasureReceived;

                ProductionUnitType currentProductionUnitType = new ProductionUnitType();
                currentProductionUnitType = entities.ProductionUnitTypes.Where(p => p.Id == productionUnit.productionUnitTypeId).FirstOrDefault();

                target.productionUnitType = currentProductionUnitType;

                HydroponicType currentHydroponicType = new HydroponicType();
                currentHydroponicType = entities.HydroponicTypes.Where(p => p.Id == productionUnit.hydroponicTypeId).FirstOrDefault();

                target.hydroponicType = currentHydroponicType;

                ProductionUnitStatus currentProductionUnitStatus = new ProductionUnitStatus();
                currentProductionUnitStatus = entities.ProductionUnitStatus.Where(p => p.Id == productionUnit.productionUnitStatusId).FirstOrDefault();

                target.productionUnitStatus = currentProductionUnitStatus;

                ProductionUnitOwner currentProductionUnitOwner = new ProductionUnitOwner();
                currentProductionUnitOwner = entities.ProductionUnitOwners.Where(p => p.Id == productionUnit.ownerId).FirstOrDefault();

                target.owner = currentProductionUnitOwner;
            }

            entities.SaveChanges();
        }
Example #8
0
        public void Create(ProductionUnitViewModel productionUnit)
        {
            var entity = new ProductionUnit();

            entity.Id                = productionUnit.Id;
            entity.startDate         = productionUnit.startDate;
            entity.locationLatitude  = productionUnit.locationLatitude;
            entity.locationLongitude = productionUnit.locationLongitude;
            entity.version           = productionUnit.version;
            entity.info              = productionUnit.info;
            entity.options           = productionUnit.options;
            entity.reference         = productionUnit.reference;
            entity.picturePath       = productionUnit.picturePath;

            if (entity.productionUnitType == null)
            {
                entity.productionUnitType    = new ProductionUnitType();
                entity.productionUnitType.Id = productionUnit.productionUnitTypeId;
            }

            if (entity.hydroponicType == null)
            {
                entity.hydroponicType    = new HydroponicType();
                entity.hydroponicType.Id = productionUnit.hydroponicTypeId;
            }

            if (entity.productionUnitStatus == null)
            {
                entity.productionUnitStatus    = new ProductionUnitStatus();
                entity.productionUnitStatus.Id = productionUnit.productionUnitStatusId;
            }

            if (entity.owner == null)
            {
                entity.owner    = new ProductionUnitOwner();
                entity.owner.Id = productionUnit.ownerId;
            }

            entities.ProductionUnits.Add(entity);
            entities.SaveChanges();

            productionUnit.Id = entity.Id;
        }
        public ActionResult CreatePost(Factory factory)
        {
            var vault = unitOfWork.Safes.GetSafe();

            if (!vault.MoneySuffice(ProductionUnit.CreateCost))
            {
                var errorMessage = Message.ErrorMessage;
                return(RedirectToAction("Index", "Factory", new { id = factory.ID, errorMessage }));
            }

            ProductionUnit productionUnit = new ProductionUnit {
                FactoryID = factory.ID
            };

            unitOfWork.ProductionUnits.Add(productionUnit);
            vault.WithdrawAmount(ProductionUnit.CreateCost);
            unitOfWork.Complete();

            return(RedirectToAction("Index", "Factory", new { id = factory.ID }));
        }
Example #10
0
        public void Update(MeasureViewModel measure)
        {
            Measure target = new Measure();

            target = entities.Measures.Where(m => m.Id == measure.Id).Include(m => m.sensor).FirstOrDefault();

            if (target != null)
            {
                target.captureDate = measure.captureDate;
                target.value       = measure.value;

                SensorType currentSensorType = new SensorType();
                currentSensorType = entities.SensorTypes.Where(m => m.Id == measure.sensorId).FirstOrDefault();

                target.sensor = currentSensorType;

                ProductionUnit currentProductionUnit = new ProductionUnit();
                currentProductionUnit = entities.ProductionUnits.Where(m => m.Id == measure.productionUnitId).FirstOrDefault();

                target.productionUnit = currentProductionUnit;
            }

            entities.SaveChanges();
        }
        public static void PioneerUnitOnlineMessage(ProductionUnit currentProductionUnit)
        {
            var dbLog   = new ApplicationDbContext();
            var request = WebRequest.Create("https://onesignal.com/api/v1/notifications") as HttpWebRequest;

            request.KeepAlive   = true;
            request.Method      = "POST";
            request.ContentType = "application/json; charset=utf-8";

            request.Headers.Add("authorization", String.Format("Basic {0}", OneSignalAPIKey));

            var serializer = new JavaScriptSerializer();

            var obj = new object();

            if (currentProductionUnit.owner != null && currentProductionUnit.owner.language != null)
            {
                switch (currentProductionUnit.owner.language.description)
                {
                case "fr":
                    obj = new
                    {
                        app_id             = OneSignalAPIId,
                        headings           = new { en = String.Format("Message reçu à l'instant {0}", currentProductionUnit.info) },
                        contents           = new { en = "envoyé depuis votre Unité de Prod. | Serre Connectée" },
                        include_player_ids = new string[] { currentProductionUnit.owner.notificationPushKey },
                        url             = WebAppUrl + "&_osp=do_not_open",
                        chrome_web_icon = WebAppUrl + "Content/favicon.ico"
                    };
                    break;

                default:
                    obj = new
                    {
                        app_id             = OneSignalAPIId,
                        headings           = new { en = String.Format("Message received just now {0}", currentProductionUnit.info) },
                        contents           = new { en = "from your Production Unit | Smart Greenhouse" },
                        include_player_ids = new string[] { currentProductionUnit.owner.notificationPushKey },
                        url             = WebAppUrl + "&_osp=do_not_open",
                        chrome_web_icon = WebAppUrl + "Content/favicon.ico"
                    };
                    break;
                }
            }

            var param = serializer.Serialize(obj);

            byte[] byteArray = Encoding.UTF8.GetBytes(param);

            string responseContent = null;

            try
            {
                using (var writer = request.GetRequestStream())
                {
                    writer.Write(byteArray, 0, byteArray.Length);
                }

                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        responseContent = reader.ReadToEnd();
                    }
                }
            }
            catch (WebException ex)
            {
                dbLog.Logs.Add(Log.CreateErrorLog(String.Format("Error with Onesignal Push Notification"), ex));
                dbLog.SaveChanges();
            }
        }
Example #12
0
        public static void PioneerUnitOfflineMessage(ProductionUnit currentProductionUnit)
        {
            var dbLog = new ApplicationDbContext();

            try
            {
                var client = new SendGridClient(MailSendGridAPIKey);
                var from   = new EmailAddress("*****@*****.**", "Myfood Hub Bot");

                MailTemplateObject obj = new MailTemplateObject();
                var currentTemplate    = string.Empty;

                if (currentProductionUnit.owner == null || currentProductionUnit.owner.contactMail == null || currentProductionUnit.owner.contactMail == string.Empty)
                {
                    dbLog.Logs.Add(Log.CreateLog(String.Format("Error with Mail Notification - Mail is missing for {0}", currentProductionUnit.info), Log.LogType.Information));
                    dbLog.SaveChanges();

                    return;
                }

                var pioneerName = string.Format("{0} #{1}", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber);

                obj.firstName     = currentProductionUnit.owner.pioneerCitizenName;
                obj.pioneerNumber = currentProductionUnit.owner.pioneerCitizenNumber.ToString();
                obj.info          = currentProductionUnit.info;

                if (currentProductionUnit.productionUnitType.name.ToString().Contains("Family"))
                {
                    obj.isFamily = true;
                }
                else if (currentProductionUnit.productionUnitType.name.ToString().Contains("City"))
                {
                    obj.isFamily = false;
                }
                else
                {
                    obj.isFamily = true;
                }

                List <EmailAddress> tos = new List <EmailAddress>
                {
                    new EmailAddress(currentProductionUnit.owner.contactMail, pioneerName)
                };

                var subject     = string.Empty;
                var htmlContent = string.Empty;

                if (currentProductionUnit.owner != null && currentProductionUnit.owner.language != null)
                {
                    switch (currentProductionUnit.owner.language.description)
                    {
                    case "fr":
                        currentTemplate = TemplateGreehouseOfflineFR;
                        break;

                    case "en":
                        currentTemplate = TemplateGreehouseOfflineEN;
                        break;

                    case "de":
                        currentTemplate = TemplateGreehouseOfflineDE;
                        break;

                    default:
                        currentTemplate = TemplateGreehouseOfflineEN;
                        break;
                    }
                }
                else
                {
                    currentTemplate = TemplateGreehouseOfflineEN;
                }

                var msg = MailHelper.CreateSingleTemplateEmailToMultipleRecipients(from, tos, currentTemplate, obj);
                //msg.AddCc("*****@*****.**");
                var response = client.SendEmailAsync(msg);
            }
            catch (Exception ex)
            {
                dbLog.Logs.Add(Log.CreateErrorLog(String.Format("Error with Mail Notification"), ex));
                dbLog.SaveChanges();
            }
        }
Example #13
0
        public static void PioneerUnitWeeklyMessage(ProductionUnit currentProductionUnit, List <RecommandationTemplaceObject> reco)
        {
            var db    = new ApplicationDbContext();
            var dbLog = new ApplicationDbContext();

            var infoEventType = db.EventTypes.Where(p => p.Id == 8).FirstOrDefault();

            try
            {
                var client = new SendGridClient(MailSendGridAPIKey);
                var from   = new EmailAddress("*****@*****.**", "Myfood Hub Bot");

                MailTemplateObject obj = new MailTemplateObject();
                var currentTemplate    = string.Empty;

                if (currentProductionUnit.owner == null || currentProductionUnit.owner.contactMail == null || currentProductionUnit.owner.contactMail == string.Empty)
                {
                    dbLog.Logs.Add(Log.CreateLog(String.Format("Error with Mail Notification - Mail is missing for {0}", currentProductionUnit.info), Log.LogType.Information));
                    dbLog.SaveChanges();

                    return;
                }

                var pioneerName = string.Format("{0} #{1}", currentProductionUnit.owner.pioneerCitizenName, currentProductionUnit.owner.pioneerCitizenNumber);

                obj.firstName     = currentProductionUnit.owner.pioneerCitizenName;
                obj.pioneerNumber = currentProductionUnit.owner.pioneerCitizenNumber.ToString();
                obj.info          = currentProductionUnit.info;

                if (currentProductionUnit.productionUnitType.name.ToString().Contains("Family"))
                {
                    obj.isFamily = true;
                }
                else
                {
                    obj.isFamily = false;
                }

                obj.recommandations = reco.OrderBy(r => r.order).ToList();

                if (obj.recommandations.Count > 0)
                {
                    obj.hasRecommandation = true;
                }
                else
                {
                    obj.hasRecommandation = false;

                    //var content = String.Format("",null);

                    //db.Events.Add(new Event() { date = DateTime.Now, description = content, isOpen = false, productionUnit = currentProductionUnit, eventType = infoEventType, createdBy = "MyFood Bot" });
                    //db.SaveChanges();
                }


                List <EmailAddress> tos = new List <EmailAddress>
                {
                    new EmailAddress(currentProductionUnit.owner.contactMail, pioneerName)
                };

                var subject     = string.Empty;
                var htmlContent = string.Empty;

                if (currentProductionUnit.owner != null && currentProductionUnit.owner.language != null)
                {
                    switch (currentProductionUnit.owner.language.description)
                    {
                    case "fr":
                        currentTemplate = TemplateWeeklyMessageFR;
                        break;

                    case "en":
                        currentTemplate = TemplateWeeklyMessageEN;
                        break;

                    case "de":
                        currentTemplate = TemplateWeeklyMessageDE;
                        break;

                    default:
                        currentTemplate = TemplateWeeklyMessageEN;
                        break;
                    }
                }
                else
                {
                    currentTemplate = TemplateGreehouseOfflineEN;
                }

                var msg = MailHelper.CreateSingleTemplateEmailToMultipleRecipients(from, tos, currentTemplate, obj);
                //msg.AddCc("*****@*****.**");
                var response = client.SendEmailAsync(msg);
            }
            catch (Exception ex)
            {
                dbLog.Logs.Add(Log.CreateErrorLog(String.Format("Error with Mail Notification"), ex));
                dbLog.SaveChanges();
            }
        }
 private void SetProductionUnitActive(ProductionUnit productionUnit, IEnumerable <MineableResource> activeMineableResources)
 {
     productionUnit.ProductionActive = productionUnit.OutputBuffer.Count < productionUnit.OutputBufferSize && activeMineableResources.Any();
 }
Example #15
0
 public void Add(ProductionUnit productionUnit)
 {
     _db.ProductionUnits.Add(productionUnit);
 }
Example #16
0
 private void Awake()
 {
     _barrackEntity = GetComponent <Entity>();
     _production    = FindObjectOfType <ProductionUnit>();
 }
        public static GroupedMeasure MeasuresProcessor(int productionUnitId)
        {
            var db    = new ApplicationDbContext();
            var dbLog = new ApplicationDbContext();

            ProductionUnit currentProductionUnit = db.ProductionUnits.Include(p => p.hydroponicType)
                                                   .Where(p => p.Id == productionUnitId).FirstOrDefault();

            var phSensor = db.SensorTypes.Where(s => s.Id == 1).FirstOrDefault();
            var waterTemperatureSensor = db.SensorTypes.Where(s => s.Id == 2).FirstOrDefault();
            var dissolvedOxySensor     = db.SensorTypes.Where(s => s.Id == 3).FirstOrDefault();
            var ORPSensor            = db.SensorTypes.Where(s => s.Id == 4).FirstOrDefault();
            var airTemperatureSensor = db.SensorTypes.Where(s => s.Id == 5).FirstOrDefault();
            var airHumidity          = db.SensorTypes.Where(s => s.Id == 6).FirstOrDefault();

            DateTime thisDay      = DateTime.Now;
            DateTime lastDay      = thisDay.AddDays(-1);
            DateTime twoDaysAgo   = thisDay.AddDays(-2);
            DateTime threeDaysAgo = thisDay.AddDays(-3);
            DateTime aWeekAgo     = thisDay.AddDays(-7);

            GroupedMeasure currentMeasures = new GroupedMeasure();

            currentMeasures.hydroponicTypeName = currentProductionUnit.hydroponicType.name;

            try
            {
                var currentLastDayPHValueMax = db.Measures.Where(m => m.captureDate > lastDay &&
                                                                 m.productionUnit.Id == currentProductionUnit.Id &&
                                                                 m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => t.value);

                var currentLastDayPHValueMin = db.Measures.Where(m => m.captureDate > lastDay &&
                                                                 m.productionUnit.Id == currentProductionUnit.Id &&
                                                                 m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => t.value);

                var currentTwoDaysPHValueMax = db.Measures.Where(m => m.captureDate > twoDaysAgo && m.captureDate < lastDay &&
                                                                 m.productionUnit.Id == currentProductionUnit.Id &&
                                                                 m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => t.value);

                var currentTwoDaysPHValueMin = db.Measures.Where(m => m.captureDate > twoDaysAgo && m.captureDate < lastDay &&
                                                                 m.productionUnit.Id == currentProductionUnit.Id &&
                                                                 m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => t.value);

                var currentThreeDaysPHValueMax = db.Measures.Where(m => m.captureDate > threeDaysAgo && m.captureDate < twoDaysAgo &&
                                                                   m.productionUnit.Id == currentProductionUnit.Id &&
                                                                   m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => t.value);

                var currentThreeDaysPHValueMin = db.Measures.Where(m => m.captureDate > threeDaysAgo && m.captureDate < twoDaysAgo &&
                                                                   m.productionUnit.Id == currentProductionUnit.Id &&
                                                                   m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => t.value);

                var currentLastWeekPHValueMean = db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                   m.productionUnit.Id == currentProductionUnit.Id &&
                                                                   m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Average(t => t.value);


                currentMeasures.lastDayPHvariation = Math.Round(Math.Abs(currentLastDayPHValueMax - currentLastDayPHValueMin), 1);

                currentMeasures.threeLastDayPHvariation = Math.Round((Math.Abs(currentLastDayPHValueMax - currentLastDayPHValueMin) + Math.Abs(currentTwoDaysPHValueMax - currentTwoDaysPHValueMin) + Math.Abs(currentThreeDaysPHValueMax - currentThreeDaysPHValueMin)) / 3, 1);

                currentMeasures.lastWeekPHmean = Math.Round(currentLastWeekPHValueMean, 1);

                var currentTwoDaysAirTempValueMax = db.Measures.Where(m => m.captureDate > lastDay &&
                                                                      m.productionUnit.Id == currentProductionUnit.Id &&
                                                                      m.sensor.Id == airTemperatureSensor.Id).OrderBy(m => m.Id).Max(t => t.value);

                var currentLastDayAirTempValueMin = db.Measures.Where(m => m.captureDate > lastDay &&
                                                                      m.productionUnit.Id == currentProductionUnit.Id &&
                                                                      m.sensor.Id == airTemperatureSensor.Id).OrderBy(m => m.Id).Min(t => t.value);

                var currentLastDayAirTempValueMean = db.Measures.Where(m => m.captureDate > lastDay &&
                                                                       m.productionUnit.Id == currentProductionUnit.Id &&
                                                                       m.sensor.Id == airTemperatureSensor.Id).OrderBy(m => m.Id).Sum(t => t.value) / (6 * 24);

                currentMeasures.lastDayMaxAirTempvalue  = Math.Round(currentTwoDaysAirTempValueMax, 1);
                currentMeasures.lastDayMinAirTempvalue  = Math.Round(currentLastDayAirTempValueMin, 1);
                currentMeasures.lastDayMeanAirTempvalue = Math.Round(currentLastDayAirTempValueMean, 1);

                var currentTwoDaysWaterTempValueMax = db.Measures.Where(m => m.captureDate > lastDay &&
                                                                        m.productionUnit.Id == currentProductionUnit.Id &&
                                                                        m.sensor.Id == waterTemperatureSensor.Id).OrderBy(m => m.Id).Max(t => t.value);

                var currentLastDayWaterTempValueMin = db.Measures.Where(m => m.captureDate > lastDay &&
                                                                        m.productionUnit.Id == currentProductionUnit.Id &&
                                                                        m.sensor.Id == waterTemperatureSensor.Id).OrderBy(m => m.Id).Min(t => t.value);

                currentMeasures.lastDayMaxWaterTempvalue = Math.Round(currentTwoDaysWaterTempValueMax, 1);
                currentMeasures.lastDayMinWaterTempvalue = Math.Round(currentLastDayWaterTempValueMin, 1);

                var currentTwoDaysHumidityValueMax = db.Measures.Where(m => m.captureDate > lastDay &&
                                                                       m.productionUnit.Id == currentProductionUnit.Id &&
                                                                       m.sensor.Id == airHumidity.Id).OrderBy(m => m.Id).Max(t => t.value);

                currentMeasures.lastDayMaxHumidityvalue = Math.Round(currentTwoDaysHumidityValueMax, 1);
            }
            catch (Exception ex)
            {
                dbLog.Logs.Add(Log.CreateErrorLog("Error on Measures Processing", ex));
                dbLog.SaveChanges();
            }

            return(currentMeasures);
        }
        public ActionResult UserUnit(int?id)
        {
            ViewBag.DisplayManagementBtn    = "None";
            ViewBag.DisplayProdUnitSelector = "None";
            ViewBag.Title = "Production Unit Detail Page";

            var currentUser = this.User.Identity.GetUserName();
            var userId      = UserManager.FindByName(currentUser).Id;
            var isAdmin     = this.UserManager.IsInRole(userId, "Admin");

            if (isAdmin)
            {
                ViewBag.DisplayManagementBtn = "All";
                return(RedirectToAction("Details", "ProductionUnits", new { Id = id }));
            }
            else
            {
                ApplicationDbContext db = new ApplicationDbContext();
                ViewBag.HasFahrenheitSetting = db.ProductionUnitOwners.FirstOrDefault(o => o.user.UserName == currentUser).hasFahrenheitSetting == true;

                var currentUserProductionUnit = new ProductionUnit();

                var userProductionUnit = db.ProductionUnits.Include(p => p.owner.user).Where(p => p.owner.user.UserName == currentUser).ToList();

                if (userProductionUnit.Count > 1)
                {
                    ViewBag.DisplayProdUnitSelector = "All";

                    var selectList = new SelectList(userProductionUnit.ToList(), "Id", "info", userProductionUnit.FirstOrDefault());

                    if (id != null && id != 0)
                    {
                        //var selected = selectList.FirstOrDefault(x => x.Value == id.ToString()).Value;

                        var selected = id;

                        selectList = new SelectList(userProductionUnit.ToList(), "Id", "info", selected);
                        currentUserProductionUnit = userProductionUnit.FirstOrDefault(p => p.Id == id);
                    }
                    ViewBag.ProdUnitList = selectList;
                }
                else
                {
                    currentUserProductionUnit = userProductionUnit.FirstOrDefault();
                }

                ViewBag.CurrentUser             = currentUserProductionUnit.Id;
                ViewBag.SignalStrenghtImagePath = Signal.GetSignalStrenghtName(currentUserProductionUnit.lastSignalStrenghtReceived);

                if (currentUserProductionUnit.lastSignalStrenghtReceived != null)
                {
                    ViewBag.SignalStrenghtText = currentUserProductionUnit.lastSignalStrenghtReceived;
                }
                else
                {
                    ViewBag.SignalStrenghtText = String.Empty;
                }

                if (currentUserProductionUnit != null && currentUserProductionUnit.owner != null && currentUserProductionUnit.owner.user.UserName == currentUser)
                {
                    ViewBag.DisplayManagementBtn = "All";
                }
            }

            return(View());
        }
        public static void PioneerUnitOwnerFeelingMessage(ProductionUnit currentProductionUnit)
        {
            var dbLog   = new ApplicationDbContext();
            var request = WebRequest.Create("https://onesignal.com/api/v1/notifications") as HttpWebRequest;

            request.KeepAlive   = true;
            request.Method      = "POST";
            request.ContentType = "application/json; charset=utf-8";

            request.Headers.Add("authorization", String.Format("Basic {0}", OneSignalAPIKey));

            var serializer = new JavaScriptSerializer();

            var obj = new object();

            var happyLinkActionUrl = WebAppUrl + String.Format("api/push?productionUnitId={0}&eventTypeId=7&eventTypeItemId=51", currentProductionUnit.Id);
            var needHelpActionUrl  = WebAppUrl + String.Format("api/push?productionUnitId={0}&eventTypeId=7&eventTypeItemId=55", currentProductionUnit.Id);

            if (currentProductionUnit.owner != null && currentProductionUnit.owner.language != null)
            {
                switch (currentProductionUnit.owner.language.description)
                {
                case "fr":
                    obj = new
                    {
                        app_id             = OneSignalAPIId,
                        headings           = new { en = "Alors, comment ça va aujourd'hui ?" },
                        contents           = new { en = "envoyé depuis votre Unité de Prod. | Serre Connectée" },
                        chrome_web_icon    = WebAppUrl + "Content/favicon.ico",
                        chrome_web_image   = WebAppUrl + String.Format("Content/Pictures/Sites/{0}", currentProductionUnit.picturePath),
                        include_player_ids = new string[] { currentProductionUnit.owner.notificationPushKey },
                        url = WebAppUrl + "&_osp=do_not_open",
                        android_background_layout = new { image = WebAppUrl + "Content/miniLogoWhite.jpg", headings_color = "FFFF0000", contents_color = "FF00FF00" },
                        web_buttons = new[] {
                            new { id = "happy-button", text = "Heureux", icon = WebAppUrl + "Content/Pictures/Feelings/happy.png", url = happyLinkActionUrl },
                            new { id = "needHelp-button", text = "Besoin d'Aide", icon = WebAppUrl + "Content/Pictures/Feelings/needHelp.png", url = needHelpActionUrl }
                        }
                    };
                    break;

                default:
                    obj = new
                    {
                        app_id             = OneSignalAPIId,
                        headings           = new { en = "Tell me, how do you feel today?" },
                        contents           = new { en = "from your Production Unit | Smart Greenhouse" },
                        chrome_web_icon    = WebAppUrl + "Content/favicon.ico",
                        chrome_web_image   = WebAppUrl + String.Format("Content/Pictures/Sites/{0}", currentProductionUnit.picturePath),
                        include_player_ids = new string[] { currentProductionUnit.owner.notificationPushKey },
                        url = WebAppUrl + "&_osp=do_not_open",
                        android_background_layout = new { image = WebAppUrl + "Content/miniLogoWhite.jpg", headings_color = "FFFF0000", contents_color = "FF00FF00" },
                        web_buttons = new[] {
                            new { id = "happy-button", text = "Happy", icon = WebAppUrl + "Content/Pictures/Feelings/happy.png", url = happyLinkActionUrl },
                            new { id = "needHelp-button", text = "Need help", icon = WebAppUrl + "Content/Pictures/Feelings/needHelp.png", url = needHelpActionUrl }
                        }
                    };
                    break;
                }
            }

            var param = serializer.Serialize(obj);

            byte[] byteArray = Encoding.UTF8.GetBytes(param);

            string responseContent = null;

            try
            {
                using (var writer = request.GetRequestStream())
                {
                    writer.Write(byteArray, 0, byteArray.Length);
                }

                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        responseContent = reader.ReadToEnd();
                    }
                }
            }
            catch (WebException ex)
            {
                dbLog.Logs.Add(Log.CreateErrorLog(String.Format("Error with Onesignal Push Notification"), ex));
                dbLog.SaveChanges();
            }
        }
Example #20
0
        public static GroupedMeasure MeasuresProcessor(int productionUnitId)
        {
            var db    = new ApplicationDbContext();
            var dbLog = new ApplicationDbContext();

            ProductionUnit currentProductionUnit = db.ProductionUnits.Include(p => p.hydroponicType)
                                                   .Where(p => p.Id == productionUnitId).FirstOrDefault();

            var phSensor = db.SensorTypes.Where(s => s.Id == 1).FirstOrDefault();
            var waterTemperatureSensor = db.SensorTypes.Where(s => s.Id == 2).FirstOrDefault();
            var dissolvedOxySensor     = db.SensorTypes.Where(s => s.Id == 3).FirstOrDefault();
            var ORPSensor            = db.SensorTypes.Where(s => s.Id == 4).FirstOrDefault();
            var airTemperatureSensor = db.SensorTypes.Where(s => s.Id == 5).FirstOrDefault();
            var airHumidity          = db.SensorTypes.Where(s => s.Id == 6).FirstOrDefault();

            DateTime thisDay      = DateTime.Now;
            DateTime lastDay      = thisDay.AddDays(-1);
            DateTime twoDaysAgo   = thisDay.AddDays(-2);
            DateTime threeDaysAgo = thisDay.AddDays(-3);
            DateTime fourDaysAgo  = thisDay.AddDays(-4);
            DateTime fiveDaysAgo  = thisDay.AddDays(-5);
            DateTime aWeekAgo     = thisDay.AddDays(-7);

            GroupedMeasure currentMeasures = new GroupedMeasure();

            currentMeasures.hydroponicTypeName = currentProductionUnit.hydroponicType.name;

            try
            {
                var currentLastDayMaxPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > lastDay &&
                                                                            m.productionUnit.Id == currentProductionUnit.Id &&
                                                                            m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => (decimal?)t.value)).GetValueOrDefault();

                var currentLastDayMinPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > lastDay &&
                                                                            m.productionUnit.Id == currentProductionUnit.Id &&
                                                                            m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => (decimal?)t.value)).GetValueOrDefault();

                var currentTwoDaysMaxPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > twoDaysAgo && m.captureDate < lastDay &&
                                                                            m.productionUnit.Id == currentProductionUnit.Id &&
                                                                            m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => (decimal?)t.value)).GetValueOrDefault();

                var currentTwoDaysMinPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > twoDaysAgo && m.captureDate < lastDay &&
                                                                            m.productionUnit.Id == currentProductionUnit.Id &&
                                                                            m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => (decimal?)t.value)).GetValueOrDefault();

                var currentThreeDaysMaxPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > threeDaysAgo && m.captureDate < twoDaysAgo &&
                                                                              m.productionUnit.Id == currentProductionUnit.Id &&
                                                                              m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => (decimal?)t.value)).GetValueOrDefault();

                var currentThreeDaysMinPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > threeDaysAgo && m.captureDate < twoDaysAgo &&
                                                                              m.productionUnit.Id == currentProductionUnit.Id &&
                                                                              m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => (decimal?)t.value)).GetValueOrDefault();

                var currentFourDaysMaxPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > fourDaysAgo && m.captureDate < threeDaysAgo &&
                                                                             m.productionUnit.Id == currentProductionUnit.Id &&
                                                                             m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => (decimal?)t.value)).GetValueOrDefault();

                var currentFourDaysMinPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > fourDaysAgo && m.captureDate < threeDaysAgo &&
                                                                             m.productionUnit.Id == currentProductionUnit.Id &&
                                                                             m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => (decimal?)t.value)).GetValueOrDefault();

                var currentFiveDaysMaxPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > fiveDaysAgo && m.captureDate < fourDaysAgo &&
                                                                             m.productionUnit.Id == currentProductionUnit.Id &&
                                                                             m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => (decimal?)t.value)).GetValueOrDefault();

                var currentFiveDaysMinPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > fiveDaysAgo && m.captureDate < fourDaysAgo &&
                                                                             m.productionUnit.Id == currentProductionUnit.Id &&
                                                                             m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => (decimal?)t.value)).GetValueOrDefault();

                var currentLastWeekMaxPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                             m.productionUnit.Id == currentProductionUnit.Id &&
                                                                             m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => (decimal?)t.value)).GetValueOrDefault();

                var currentLastWeekMinPHValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                             m.productionUnit.Id == currentProductionUnit.Id &&
                                                                             m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => (decimal?)t.value)).GetValueOrDefault();

                var currentLastWeekMaxPHDate = ((DateTime?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                             m.productionUnit.Id == currentProductionUnit.Id &&
                                                                             m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Max(t => (DateTime?)t.captureDate)).GetValueOrDefault();

                var currentLastWeekMinPHDate = ((DateTime?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                             m.productionUnit.Id == currentProductionUnit.Id &&
                                                                             m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Min(t => (DateTime?)t.captureDate)).GetValueOrDefault();

                currentMeasures.lastWeekMaxPHValue = currentLastWeekMaxPHValue;
                currentMeasures.lastWeekMinPHValue = currentLastWeekMinPHValue;

                if (currentLastWeekMinPHDate < currentLastWeekMaxPHDate)
                {
                    currentMeasures.lastWeekPHRise = true;
                }
                else
                {
                    currentMeasures.lastWeekPHFall = false;
                }

                if (currentLastWeekMinPHDate > currentLastWeekMaxPHDate)
                {
                    currentMeasures.lastWeekPHFall = true;
                }
                else
                {
                    currentMeasures.lastWeekPHRise = false;
                }

                var currentLastWeekAveragePHValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                                 m.productionUnit.Id == currentProductionUnit.Id &&
                                                                                 m.sensor.Id == phSensor.Id).OrderBy(m => m.Id).Average(t => t.value)).GetValueOrDefault();

                currentMeasures.lastWeekPHVariation    = Math.Round(Math.Abs(currentLastWeekMaxPHValue - currentLastWeekMinPHValue), 1);
                currentMeasures.fiveLastDayPHVariation = Math.Round((Math.Abs(currentLastDayMaxPHValue - currentLastDayMinPHValue) + Math.Abs(currentTwoDaysMaxPHValue - currentTwoDaysMinPHValue) + Math.Abs(currentThreeDaysMaxPHValue - currentThreeDaysMinPHValue) + Math.Abs(currentFourDaysMaxPHValue - currentFourDaysMinPHValue) + Math.Abs(currentFiveDaysMaxPHValue - currentFiveDaysMinPHValue)) / 5, 1);
                currentMeasures.lastWeekAveragePHValue = Math.Round(currentLastWeekAveragePHValue, 1);

                var currentLastWeekMaxAirTempValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                                  m.productionUnit.Id == currentProductionUnit.Id &&
                                                                                  m.sensor.Id == airTemperatureSensor.Id).OrderBy(m => m.Id).Max(t => (decimal?)t.value)).GetValueOrDefault();

                var currentLastWeekMinAirTempValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                                  m.productionUnit.Id == currentProductionUnit.Id &&
                                                                                  m.sensor.Id == airTemperatureSensor.Id).OrderBy(m => m.Id).Min(t => (decimal?)t.value)).GetValueOrDefault();

                var currentLastWeekAverageAirTempValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                                      m.productionUnit.Id == currentProductionUnit.Id &&
                                                                                      m.sensor.Id == airTemperatureSensor.Id).OrderBy(m => m.Id).Sum(t => (decimal?)t.value) / (6 * 24)).GetValueOrDefault();

                currentMeasures.lastWeekMaxAirTempValue     = Math.Round(currentLastWeekMaxAirTempValue, 1);
                currentMeasures.lastWeekMinAirTempValue     = Math.Round(currentLastWeekMinAirTempValue, 1);
                currentMeasures.lastWeekAverageAirTempValue = Math.Round(currentLastWeekAverageAirTempValue, 1);

                var currentLastWeekMaxWaterTempValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                                    m.productionUnit.Id == currentProductionUnit.Id &&
                                                                                    m.sensor.Id == waterTemperatureSensor.Id).OrderBy(m => m.Id).Max(t => (decimal?)t.value)).GetValueOrDefault();

                var currentLastWeekMinWaterTempValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                                    m.productionUnit.Id == currentProductionUnit.Id &&
                                                                                    m.sensor.Id == waterTemperatureSensor.Id).OrderBy(m => m.Id).Min(t => (decimal?)t.value)).GetValueOrDefault();

                currentMeasures.lastWeekMaxWaterTempValue = Math.Round(currentLastWeekMaxWaterTempValue, 1);
                currentMeasures.lastWeekMinWaterTempValue = Math.Round(currentLastWeekMinWaterTempValue, 1);

                var currentLastWeekAverageHumidityValue = ((decimal?)db.Measures.Where(m => m.captureDate > aWeekAgo &&
                                                                                       m.productionUnit.Id == currentProductionUnit.Id &&
                                                                                       m.sensor.Id == airHumidity.Id).OrderBy(m => m.Id).Average(t => (decimal?)t.value)).GetValueOrDefault();

                currentMeasures.lastWeekAverageHumidityValue = Math.Round(currentLastWeekAverageHumidityValue, 1);

                var warningEventType = db.EventTypes.Where(p => p.Id == 1).FirstOrDefault();

                var lostSignal = db.Events.Include(ev => ev.eventType).Where(ev => ev.date > aWeekAgo && ev.eventType.Id == warningEventType.Id && ev.createdBy == "MyFood Bot" &&
                                                                             ev.productionUnit.Id == currentProductionUnit.Id &&
                                                                             (ev.description.Contains("Déconnectée") || ev.description.Contains("Offine"))).Count();

                currentMeasures.lastWeekLostSignal = lostSignal;

                if (currentProductionUnit.lastMeasureReceived != null)
                {
                    currentMeasures.daysSinceLastSignal = (DateTime.Now - currentProductionUnit.lastMeasureReceived).Value.Days;
                }

                currentMeasures.lastSignalStrenghtReceived = currentProductionUnit.lastSignalStrenghtReceived;
            }
            catch (Exception ex)
            {
                dbLog.Logs.Add(Log.CreateErrorLog("Error on Measures Processing", ex));
                dbLog.SaveChanges();
            }

            return(currentMeasures);
        }
Example #21
0
        public bool init()
        {
            IMyBlockGroup group = GridTerminalSystem.GetBlockGroupWithName(groupName_);

            if (group != null)
            {
                pistons_.Clear();
                drills_.Clear();

                group.GetBlocksOfType <IMyTerminalBlock>(null, (block) =>
                {
                    IMyPistonBase piston = block as IMyPistonBase;
                    if (piston != null)
                    {
                        PistonController controller = new PistonController(this, piston);
                        pistons_.Add(controller);
                        return(false);
                    }

                    IMyMotorStator stator = block as IMyMotorStator;
                    if (stator != null)
                    {
                        drillRotor_ = new RotorController(this, stator);
                        return(false);
                    }

                    IMyShipDrill drill = block as IMyShipDrill;
                    if (drill != null)
                    {
                        drills_.Add(drill);
                        return(false);
                    }

                    // production block
                    IMyProductionBlock pu = block as IMyProductionBlock;
                    if (pu != null)
                    {
                        production_ = new ProductionUnit(this, pu);
                        return(false);
                    }

                    IMyCargoContainer container = block as IMyCargoContainer;
                    if (container != null)
                    {
                        containers_.Add(container);
                        return(false);
                    }

                    return(false);
                });
            }
            else
            {
                addMessageLine("Error: Minig Group not found!");
                return(false);
            }

            // check drills
            if (drills_.Count == 0)
            {
                addMessageLine("Error: No drills found!");
                return(false);
            }

            // read config
            miningDepth_ = GetConfigMiningDepth();

            return(true);
        }