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(); }
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); }
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"); }
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"); }
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; }
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(); }
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 })); }
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(); } }
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(); } }
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(); }
public void Add(ProductionUnit productionUnit) { _db.ProductionUnits.Add(productionUnit); }
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(); } }
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); }
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); }