make inesco energy as the default naming

This commit is contained in:
Yinyin Liu 2026-03-26 09:33:35 +01:00
parent fd35248b72
commit 1683ab9b9a
15 changed files with 62 additions and 60 deletions

View File

@ -243,22 +243,22 @@ public static class UserMethods
var (subject, body) = (user.Language ?? "en") switch var (subject, body) = (user.Language ?? "en") switch
{ {
"de" => ( "de" => (
"Passwort Ihres Inesco Energy Kontos zurücksetzen", "Passwort Ihres inesco energy Kontos zurücksetzen",
$"Sehr geehrte/r {user.Name}\n" + $"Sehr geehrte/r {user.Name}\n" +
$"Um Ihr Passwort zurückzusetzen, öffnen Sie bitte diesen Link: {resetLink}?token={encodedToken}" $"Um Ihr Passwort zurückzusetzen, öffnen Sie bitte diesen Link: {resetLink}?token={encodedToken}"
), ),
"fr" => ( "fr" => (
"Réinitialisation du mot de passe de votre compte Inesco Energy", "Réinitialisation du mot de passe de votre compte inesco energy",
$"Cher/Chère {user.Name}\n" + $"Cher/Chère {user.Name}\n" +
$"Pour réinitialiser votre mot de passe, veuillez ouvrir ce lien : {resetLink}?token={encodedToken}" $"Pour réinitialiser votre mot de passe, veuillez ouvrir ce lien : {resetLink}?token={encodedToken}"
), ),
"it" => ( "it" => (
"Reimposta la password del tuo account Inesco Energy", "Reimposta la password del tuo account inesco energy",
$"Gentile {user.Name}\n" + $"Gentile {user.Name}\n" +
$"Per reimpostare la password, apra questo link: {resetLink}?token={encodedToken}" $"Per reimpostare la password, apra questo link: {resetLink}?token={encodedToken}"
), ),
_ => ( _ => (
"Reset the password of your Inesco Energy Account", "Reset the password of your inesco energy Account",
$"Dear {user.Name}\n" + $"Dear {user.Name}\n" +
$"To reset your password please open this link: {resetLink}?token={encodedToken}" $"To reset your password please open this link: {resetLink}?token={encodedToken}"
) )
@ -274,24 +274,24 @@ public static class UserMethods
var (subject, body) = (user.Language ?? "en") switch var (subject, body) = (user.Language ?? "en") switch
{ {
"de" => ( "de" => (
"Ihr neues Inesco Energy Konto", "Ihr neues inesco energy Konto",
$"Sehr geehrte/r {user.Name}\n" + $"Sehr geehrte/r {user.Name}\n" +
$"Um Ihr Passwort festzulegen und sich bei Ihrem Inesco Energy Konto anzumelden, öffnen Sie bitte diesen Link: {resetLink}" $"Um Ihr Passwort festzulegen und sich bei Ihrem inesco energy Konto anzumelden, öffnen Sie bitte diesen Link: {resetLink}"
), ),
"fr" => ( "fr" => (
"Votre nouveau compte Inesco Energy", "Votre nouveau compte inesco energy",
$"Cher/Chère {user.Name}\n" + $"Cher/Chère {user.Name}\n" +
$"Pour définir votre mot de passe et vous connecter à votre compte Inesco Energy, veuillez ouvrir ce lien : {resetLink}" $"Pour définir votre mot de passe et vous connecter à votre compte inesco energy, veuillez ouvrir ce lien : {resetLink}"
), ),
"it" => ( "it" => (
"Il tuo nuovo account Inesco Energy", "Il tuo nuovo account inesco energy",
$"Gentile {user.Name}\n" + $"Gentile {user.Name}\n" +
$"Per impostare la password e accedere al suo account Inesco Energy, apra questo link: {resetLink}" $"Per impostare la password e accedere al suo account inesco energy, apra questo link: {resetLink}"
), ),
_ => ( _ => (
"Your new Inesco Energy Account", "Your new inesco energy Account",
$"Dear {user.Name}\n" + $"Dear {user.Name}\n" +
$"To set your password and log in to your Inesco Energy Account open this link: {resetLink}" $"To set your password and log in to your inesco energy Account open this link: {resetLink}"
) )
}; };
@ -307,7 +307,7 @@ public static class UserMethods
var (subject, body) = (user.Language ?? "en") switch var (subject, body) = (user.Language ?? "en") switch
{ {
"de" => ( "de" => (
$"inesco Energy Ticket #{ticket.Id} wurde Ihnen zugewiesen", $"inesco energy Ticket #{ticket.Id} wurde Ihnen zugewiesen",
$"Sehr geehrte/r {user.Name},\n\n" + $"Sehr geehrte/r {user.Name},\n\n" +
$"Ein Ticket wurde Ihnen zugewiesen:\n\n" + $"Ein Ticket wurde Ihnen zugewiesen:\n\n" +
$"Ticket: #{ticket.Id}\n" + $"Ticket: #{ticket.Id}\n" +
@ -316,10 +316,10 @@ public static class UserMethods
$"Kategorie: {category}\n\n" + $"Kategorie: {category}\n\n" +
$"Beschreibung:\n{ticket.Description}\n\n" + $"Beschreibung:\n{ticket.Description}\n\n" +
$"Öffnen Sie das Ticket hier: {ticketLink}\n\n" + $"Öffnen Sie das Ticket hier: {ticketLink}\n\n" +
"Mit freundlichen Grüssen\ninesco Energy Monitor" "Mit freundlichen Grüssen\ninesco energy Monitor"
), ),
"fr" => ( "fr" => (
$"inesco Energy Le ticket #{ticket.Id} vous a été attribué", $"inesco energy Le ticket #{ticket.Id} vous a été attribué",
$"Cher/Chère {user.Name},\n\n" + $"Cher/Chère {user.Name},\n\n" +
$"Un ticket vous a été attribué :\n\n" + $"Un ticket vous a été attribué :\n\n" +
$"Ticket : #{ticket.Id}\n" + $"Ticket : #{ticket.Id}\n" +
@ -328,10 +328,10 @@ public static class UserMethods
$"Catégorie : {category}\n\n" + $"Catégorie : {category}\n\n" +
$"Description :\n{ticket.Description}\n\n" + $"Description :\n{ticket.Description}\n\n" +
$"Ouvrir le ticket : {ticketLink}\n\n" + $"Ouvrir le ticket : {ticketLink}\n\n" +
"Cordialement,\ninesco Energy Monitor" "Cordialement,\ninesco energy Monitor"
), ),
"it" => ( "it" => (
$"inesco Energy Il ticket #{ticket.Id} le è stato assegnato", $"inesco energy Il ticket #{ticket.Id} le è stato assegnato",
$"Gentile {user.Name},\n\n" + $"Gentile {user.Name},\n\n" +
$"Le è stato assegnato un ticket:\n\n" + $"Le è stato assegnato un ticket:\n\n" +
$"Ticket: #{ticket.Id}\n" + $"Ticket: #{ticket.Id}\n" +
@ -340,10 +340,10 @@ public static class UserMethods
$"Categoria: {category}\n\n" + $"Categoria: {category}\n\n" +
$"Descrizione:\n{ticket.Description}\n\n" + $"Descrizione:\n{ticket.Description}\n\n" +
$"Aprire il ticket: {ticketLink}\n\n" + $"Aprire il ticket: {ticketLink}\n\n" +
"Cordiali saluti,\ninesco Energy Monitor" "Cordiali saluti,\ninesco energy Monitor"
), ),
_ => ( _ => (
$"inesco Energy Ticket #{ticket.Id} has been assigned to you", $"inesco energy Ticket #{ticket.Id} has been assigned to you",
$"Dear {user.Name},\n\n" + $"Dear {user.Name},\n\n" +
$"A ticket has been assigned to you:\n\n" + $"A ticket has been assigned to you:\n\n" +
$"Ticket: #{ticket.Id}\n" + $"Ticket: #{ticket.Id}\n" +
@ -352,7 +352,7 @@ public static class UserMethods
$"Category: {category}\n\n" + $"Category: {category}\n\n" +
$"Description:\n{ticket.Description}\n\n" + $"Description:\n{ticket.Description}\n\n" +
$"Open the ticket: {ticketLink}\n\n" + $"Open the ticket: {ticketLink}\n\n" +
"Best regards,\ninesco Energy Monitor" "Best regards,\ninesco energy Monitor"
) )
}; };

View File

@ -83,10 +83,12 @@ public static partial class Db
Connection.Execute("UPDATE User SET Language = 'fr' WHERE Language = 'french'"); Connection.Execute("UPDATE User SET Language = 'fr' WHERE Language = 'french'");
Connection.Execute("UPDATE User SET Language = 'it' WHERE Language = 'italian'"); Connection.Execute("UPDATE User SET Language = 'it' WHERE Language = 'italian'");
// One-time migration: rebrand to inesco Energy // One-time migration: rebrand to inesco energy
Connection.Execute("UPDATE Folder SET Name = 'inesco Energy' WHERE Name = 'InnovEnergy'"); Connection.Execute("UPDATE Folder SET Name = 'inesco energy' WHERE Name = 'InnovEnergy'");
Connection.Execute("UPDATE Folder SET Name = 'inesco energy' WHERE Name = 'inesco Energy'");
Connection.Execute("UPDATE Folder SET Name = 'Sodistore Max Installations' WHERE Name = 'SodistoreMax Installations'"); Connection.Execute("UPDATE Folder SET Name = 'Sodistore Max Installations' WHERE Name = 'SodistoreMax Installations'");
Connection.Execute("UPDATE User SET Name = 'inesco Energy Master Admin' WHERE Name = 'InnovEnergy Master Admin'"); Connection.Execute("UPDATE User SET Name = 'inesco energy Master Admin' WHERE Name = 'InnovEnergy Master Admin'");
Connection.Execute("UPDATE User SET Name = 'inesco energy Master Admin' WHERE Name = 'inesco Energy Master Admin'");
//UpdateKeys(); //UpdateKeys();
CleanupSessions().SupressAwaitWarning(); CleanupSessions().SupressAwaitWarning();

View File

@ -3,6 +3,6 @@
"SmtpUsername" : "no-reply@inesco.ch", "SmtpUsername" : "no-reply@inesco.ch",
"SmtpPassword" : "1ci4vi%+bfccIp", "SmtpPassword" : "1ci4vi%+bfccIp",
"SmtpPort" : 587, "SmtpPort" : 587,
"SenderName" : "Inesco Energy", "SenderName" : "inesco energy",
"SenderAddress" : "no-reply@inesco.ch" "SenderAddress" : "no-reply@inesco.ch"
} }

View File

@ -1223,7 +1223,7 @@ textarea:focus{outline:none;border-color:#3498db}
<div id="app"></div> <div id="app"></div>
<div class="nav" id="nav"></div> <div class="nav" id="nav"></div>
<div class="thankyou">Vielen Dank für Ihre Zeit Ihr Beitrag macht einen echten Unterschied für unsere Kunden. 🙏</div> <div class="thankyou">Vielen Dank für Ihre Zeit Ihr Beitrag macht einen echten Unterschied für unsere Kunden. 🙏</div>
<div style="text-align:center;padding-bottom:24px;font-size:11px;color:#bbb">inesco Energy Monitor</div> <div style="text-align:center;padding-bottom:24px;font-size:11px;color:#bbb">inesco energy Monitor</div>
<script> <script>
var ALARMS = %%ALARMS_JSON%%; var ALARMS = %%ALARMS_JSON%%;
var SUBMIT_URL = "%%SUBMIT_URL%%"; var SUBMIT_URL = "%%SUBMIT_URL%%";
@ -1473,7 +1473,7 @@ render();
<p style="margin-bottom:0;font-size:13px;color:#555">Vielen Dank für Ihre Zeit Ihr Beitrag macht einen echten Unterschied für unsere Kunden. 🙏</p> <p style="margin-bottom:0;font-size:13px;color:#555">Vielen Dank für Ihre Zeit Ihr Beitrag macht einen echten Unterschied für unsere Kunden. 🙏</p>
</td></tr> </td></tr>
<tr><td style="background:#ecf0f1;padding:12px 28px;text-align:center;font-size:11px;color:#888;border-top:1px solid #ddd"> <tr><td style="background:#ecf0f1;padding:12px 28px;text-align:center;font-size:11px;color:#888;border-top:1px solid #ddd">
inesco Energy Monitor inesco energy Monitor
</td></tr> </td></tr>
</table></td></tr></table></body></html> </table></td></tr></table></body></html>
"""; """;
@ -1545,7 +1545,7 @@ render();
<p>Hallo <strong>{name}</strong>,</p> <p>Hallo <strong>{name}</strong>,</p>
<p style="margin-top:12px">Kurze Erinnerung die heutige Alarmprüfung <strong>(Stapel {batch.BatchNumber})</strong> schließt um <strong>8:00 Uhr morgen früh</strong>. Es dauert nur 10 Minuten!</p> <p style="margin-top:12px">Kurze Erinnerung die heutige Alarmprüfung <strong>(Stapel {batch.BatchNumber})</strong> schließt um <strong>8:00 Uhr morgen früh</strong>. Es dauert nur 10 Minuten!</p>
<p style="margin:20px 0"><a href="{reviewUrl}" style="background:#3498db;color:#fff;text-decoration:none;padding:10px 24px;border-radius:6px;font-size:13px;display:inline-block">Überprüfung abschließen </a></p> <p style="margin:20px 0"><a href="{reviewUrl}" style="background:#3498db;color:#fff;text-decoration:none;padding:10px 24px;border-radius:6px;font-size:13px;display:inline-block">Überprüfung abschließen </a></p>
<p style="font-size:11px;color:#bbb">inesco Energy Monitor</p> <p style="font-size:11px;color:#bbb">inesco energy Monitor</p>
</body></html> </body></html>
"""; """;
await SendEmailAsync(email, subject, html); await SendEmailAsync(email, subject, html);
@ -1645,7 +1645,7 @@ render();
<table style="border-collapse:collapse;width:100%"> <table style="border-collapse:collapse;width:100%">
{beforeAfterRows} {beforeAfterRows}
</table> </table>
<p style="margin-top:18px;font-size:11px;color:#bbb">inesco Energy Monitor</p> <p style="margin-top:18px;font-size:11px;color:#bbb">inesco energy Monitor</p>
</body></html> </body></html>
"""; """;

View File

@ -120,7 +120,7 @@ public static class ReportEmailService
GridIn: "Netz Ein", GridIn: "Netz Ein",
GridOut: "Netz Aus", GridOut: "Netz Aus",
BattInOut: "Batt. Laden/Entl.", BattInOut: "Batt. Laden/Entl.",
Footer: "Erstellt von <strong style=\"color:#666\">inesco Energy Monitor</strong>", Footer: "Erstellt von <strong style=\"color:#666\">inesco energy Monitor</strong>",
FooterLink: "Detaillierte Berichte ansehen auf monitor.inesco.energy" FooterLink: "Detaillierte Berichte ansehen auf monitor.inesco.energy"
), ),
"fr" => new EmailStrings( "fr" => new EmailStrings(
@ -151,7 +151,7 @@ public static class ReportEmailService
GridIn: "Réseau Ent.", GridIn: "Réseau Ent.",
GridOut: "Réseau Sor.", GridOut: "Réseau Sor.",
BattInOut: "Batt. Ch./Déch.", BattInOut: "Batt. Ch./Déch.",
Footer: "Généré par <strong style=\"color:#666\">inesco Energy Monitor</strong>", Footer: "Généré par <strong style=\"color:#666\">inesco energy Monitor</strong>",
FooterLink: "Consultez vos rapports détaillés sur monitor.inesco.energy" FooterLink: "Consultez vos rapports détaillés sur monitor.inesco.energy"
), ),
"it" => new EmailStrings( "it" => new EmailStrings(
@ -182,7 +182,7 @@ public static class ReportEmailService
GridIn: "Rete Ent.", GridIn: "Rete Ent.",
GridOut: "Rete Usc.", GridOut: "Rete Usc.",
BattInOut: "Batt. Car./Sc.", BattInOut: "Batt. Car./Sc.",
Footer: "Generato da <strong style=\"color:#666\">inesco Energy Monitor</strong>", Footer: "Generato da <strong style=\"color:#666\">inesco energy Monitor</strong>",
FooterLink: "Visualizza i tuoi report dettagliati su monitor.inesco.energy" FooterLink: "Visualizza i tuoi report dettagliati su monitor.inesco.energy"
), ),
_ => new EmailStrings( _ => new EmailStrings(
@ -213,7 +213,7 @@ public static class ReportEmailService
GridIn: "Grid In", GridIn: "Grid In",
GridOut: "Grid Out", GridOut: "Grid Out",
BattInOut: "Batt. Ch./Dis.", BattInOut: "Batt. Ch./Dis.",
Footer: "Generated by <strong style=\"color:#666\">inesco Energy Monitor</strong>", Footer: "Generated by <strong style=\"color:#666\">inesco energy Monitor</strong>",
FooterLink: "View your detailed reports at monitor.inesco.energy" FooterLink: "View your detailed reports at monitor.inesco.energy"
) )
}; };
@ -340,7 +340,7 @@ public static class ReportEmailService
<!-- Header --> <!-- Header -->
<tr> <tr>
<td style=""background:#2c3e50;padding:24px 30px;color:#ffffff""> <td style=""background:#2c3e50;padding:24px 30px;color:#ffffff"">
<img src=""{LogoBase64}"" alt=""inesco Energy"" style=""height:36px;margin-bottom:12px"" /> <img src=""{LogoBase64}"" alt=""inesco energy"" style=""height:36px;margin-bottom:12px"" />
<div style=""font-size:20px;font-weight:bold"">{s.Title}</div> <div style=""font-size:20px;font-weight:bold"">{s.Title}</div>
<div style=""font-size:14px;margin-top:6px;opacity:0.9"">{r.InstallationName}</div> <div style=""font-size:14px;margin-top:6px;opacity:0.9"">{r.InstallationName}</div>
<div style=""font-size:13px;margin-top:2px;opacity:0.7"">{r.PeriodStart} {r.PeriodEnd}</div> <div style=""font-size:13px;margin-top:2px;opacity:0.7"">{r.PeriodStart} {r.PeriodEnd}</div>
@ -546,56 +546,56 @@ public static class ReportEmailService
"Kennzahl", "Gesamt", "PV-Produktion", "Verbrauch", "Netzbezug", "Netzeinspeisung", "Batterie Laden / Entladen", "Kennzahl", "Gesamt", "PV-Produktion", "Verbrauch", "Netzbezug", "Netzeinspeisung", "Batterie Laden / Entladen",
"Energie gespart", "Solar + Batterie, nicht vom Netz", "Geschätzte Ersparnis", "bei 0.39 CHF/kWh", "Energie gespart", "Solar + Batterie, nicht vom Netz", "Geschätzte Ersparnis", "bei 0.39 CHF/kWh",
"Energieunabhängigkeit", "aus eigenem Solar + Batterie System", "Batterie-Eff.", "Entladung vs. Ladung", "Energieunabhängigkeit", "aus eigenem Solar + Batterie System", "Batterie-Eff.", "Entladung vs. Ladung",
"Tage aggregiert", "Erstellt von <strong style=\"color:#666\">inesco Energy Monitor</strong>", "Tage aggregiert", "Erstellt von <strong style=\"color:#666\">inesco energy Monitor</strong>",
"Detaillierte Berichte ansehen auf monitor.inesco.energy"), "Detaillierte Berichte ansehen auf monitor.inesco.energy"),
("de", "yearly") => new AggregatedEmailStrings( ("de", "yearly") => new AggregatedEmailStrings(
"Jährlicher Leistungsbericht", "Jährliche Erkenntnisse", "Jährliche Zusammenfassung", "Ihre Ersparnisse dieses Jahr", "Jährlicher Leistungsbericht", "Jährliche Erkenntnisse", "Jährliche Zusammenfassung", "Ihre Ersparnisse dieses Jahr",
"Kennzahl", "Gesamt", "PV-Produktion", "Verbrauch", "Netzbezug", "Netzeinspeisung", "Batterie Laden / Entladen", "Kennzahl", "Gesamt", "PV-Produktion", "Verbrauch", "Netzbezug", "Netzeinspeisung", "Batterie Laden / Entladen",
"Energie gespart", "Solar + Batterie, nicht vom Netz", "Geschätzte Ersparnis", "bei 0.39 CHF/kWh", "Energie gespart", "Solar + Batterie, nicht vom Netz", "Geschätzte Ersparnis", "bei 0.39 CHF/kWh",
"Energieunabhängigkeit", "aus eigenem Solar + Batterie System", "Batterie-Eff.", "Entladung vs. Ladung", "Energieunabhängigkeit", "aus eigenem Solar + Batterie System", "Batterie-Eff.", "Entladung vs. Ladung",
"Monate aggregiert", "Erstellt von <strong style=\"color:#666\">inesco Energy Monitor</strong>", "Monate aggregiert", "Erstellt von <strong style=\"color:#666\">inesco energy Monitor</strong>",
"Detaillierte Berichte ansehen auf monitor.inesco.energy"), "Detaillierte Berichte ansehen auf monitor.inesco.energy"),
("fr", "monthly") => new AggregatedEmailStrings( ("fr", "monthly") => new AggregatedEmailStrings(
"Rapport de performance mensuel", "Aperçus du mois", "Résumé du mois", "Vos économies ce mois", "Rapport de performance mensuel", "Aperçus du mois", "Résumé du mois", "Vos économies ce mois",
"Indicateur", "Total", "Production PV", "Consommation", "Import réseau", "Export réseau", "Batterie Charge / Décharge", "Indicateur", "Total", "Production PV", "Consommation", "Import réseau", "Export réseau", "Batterie Charge / Décharge",
"Énergie économisée", "solaire + batterie, non achetée au réseau", "Économies estimées", "à 0.39 CHF/kWh", "Énergie économisée", "solaire + batterie, non achetée au réseau", "Économies estimées", "à 0.39 CHF/kWh",
"Indépendance énergétique", "de votre système solaire + batterie", "Eff. batterie", "décharge vs charge", "Indépendance énergétique", "de votre système solaire + batterie", "Eff. batterie", "décharge vs charge",
"jours agrégés", "Généré par <strong style=\"color:#666\">inesco Energy Monitor</strong>", "jours agrégés", "Généré par <strong style=\"color:#666\">inesco energy Monitor</strong>",
"Consultez vos rapports détaillés sur monitor.inesco.energy"), "Consultez vos rapports détaillés sur monitor.inesco.energy"),
("fr", "yearly") => new AggregatedEmailStrings( ("fr", "yearly") => new AggregatedEmailStrings(
"Rapport de performance annuel", "Aperçus de l'année", "Résumé de l'année", "Vos économies cette année", "Rapport de performance annuel", "Aperçus de l'année", "Résumé de l'année", "Vos économies cette année",
"Indicateur", "Total", "Production PV", "Consommation", "Import réseau", "Export réseau", "Batterie Charge / Décharge", "Indicateur", "Total", "Production PV", "Consommation", "Import réseau", "Export réseau", "Batterie Charge / Décharge",
"Énergie économisée", "solaire + batterie, non achetée au réseau", "Économies estimées", "à 0.39 CHF/kWh", "Énergie économisée", "solaire + batterie, non achetée au réseau", "Économies estimées", "à 0.39 CHF/kWh",
"Indépendance énergétique", "de votre système solaire + batterie", "Eff. batterie", "décharge vs charge", "Indépendance énergétique", "de votre système solaire + batterie", "Eff. batterie", "décharge vs charge",
"mois agrégés", "Généré par <strong style=\"color:#666\">inesco Energy Monitor</strong>", "mois agrégés", "Généré par <strong style=\"color:#666\">inesco energy Monitor</strong>",
"Consultez vos rapports détaillés sur monitor.inesco.energy"), "Consultez vos rapports détaillés sur monitor.inesco.energy"),
("it", "monthly") => new AggregatedEmailStrings( ("it", "monthly") => new AggregatedEmailStrings(
"Rapporto mensile delle prestazioni", "Approfondimenti mensili", "Riepilogo mensile", "I tuoi risparmi questo mese", "Rapporto mensile delle prestazioni", "Approfondimenti mensili", "Riepilogo mensile", "I tuoi risparmi questo mese",
"Metrica", "Totale", "Produzione PV", "Consumo", "Import dalla rete", "Export nella rete", "Batteria Carica / Scarica", "Metrica", "Totale", "Produzione PV", "Consumo", "Import dalla rete", "Export nella rete", "Batteria Carica / Scarica",
"Energia risparmiata", "solare + batteria, non acquistata dalla rete", "Risparmio stimato", "a 0.39 CHF/kWh", "Energia risparmiata", "solare + batteria, non acquistata dalla rete", "Risparmio stimato", "a 0.39 CHF/kWh",
"Indipendenza energetica", "dal proprio impianto solare + batteria", "Eff. batteria", "scarica vs carica", "Indipendenza energetica", "dal proprio impianto solare + batteria", "Eff. batteria", "scarica vs carica",
"giorni aggregati", "Generato da <strong style=\"color:#666\">inesco Energy Monitor</strong>", "giorni aggregati", "Generato da <strong style=\"color:#666\">inesco energy Monitor</strong>",
"Visualizza i tuoi report dettagliati su monitor.inesco.energy"), "Visualizza i tuoi report dettagliati su monitor.inesco.energy"),
("it", "yearly") => new AggregatedEmailStrings( ("it", "yearly") => new AggregatedEmailStrings(
"Rapporto annuale delle prestazioni", "Approfondimenti annuali", "Riepilogo annuale", "I tuoi risparmi quest'anno", "Rapporto annuale delle prestazioni", "Approfondimenti annuali", "Riepilogo annuale", "I tuoi risparmi quest'anno",
"Metrica", "Totale", "Produzione PV", "Consumo", "Import dalla rete", "Export nella rete", "Batteria Carica / Scarica", "Metrica", "Totale", "Produzione PV", "Consumo", "Import dalla rete", "Export nella rete", "Batteria Carica / Scarica",
"Energia risparmiata", "solare + batteria, non acquistata dalla rete", "Risparmio stimato", "a 0.39 CHF/kWh", "Energia risparmiata", "solare + batteria, non acquistata dalla rete", "Risparmio stimato", "a 0.39 CHF/kWh",
"Indipendenza energetica", "dal proprio impianto solare + batteria", "Eff. batteria", "scarica vs carica", "Indipendenza energetica", "dal proprio impianto solare + batteria", "Eff. batteria", "scarica vs carica",
"mesi aggregati", "Generato da <strong style=\"color:#666\">inesco Energy Monitor</strong>", "mesi aggregati", "Generato da <strong style=\"color:#666\">inesco energy Monitor</strong>",
"Visualizza i tuoi report dettagliati su monitor.inesco.energy"), "Visualizza i tuoi report dettagliati su monitor.inesco.energy"),
(_, "monthly") => new AggregatedEmailStrings( (_, "monthly") => new AggregatedEmailStrings(
"Monthly Performance Report", "Monthly Insights", "Monthly Summary", "Your Savings This Month", "Monthly Performance Report", "Monthly Insights", "Monthly Summary", "Your Savings This Month",
"Metric", "Total", "PV Production", "Consumption", "Grid Import", "Grid Export", "Battery Charge / Discharge", "Metric", "Total", "PV Production", "Consumption", "Grid Import", "Grid Export", "Battery Charge / Discharge",
"Energy Saved", "solar + battery, not bought from grid", "Est. Money Saved", "at 0.39 CHF/kWh", "Energy Saved", "solar + battery, not bought from grid", "Est. Money Saved", "at 0.39 CHF/kWh",
"Energy Independence", "from your own solar + battery system", "Battery Eff.", "discharge vs charge", "Energy Independence", "from your own solar + battery system", "Battery Eff.", "discharge vs charge",
"days aggregated", "Generated by <strong style=\"color:#666\">inesco Energy Monitor</strong>", "days aggregated", "Generated by <strong style=\"color:#666\">inesco energy Monitor</strong>",
"View your detailed reports at monitor.inesco.energy"), "View your detailed reports at monitor.inesco.energy"),
_ => new AggregatedEmailStrings( _ => new AggregatedEmailStrings(
"Annual Performance Report", "Annual Insights", "Annual Summary", "Your Savings This Year", "Annual Performance Report", "Annual Insights", "Annual Summary", "Your Savings This Year",
"Metric", "Total", "PV Production", "Consumption", "Grid Import", "Grid Export", "Battery Charge / Discharge", "Metric", "Total", "PV Production", "Consumption", "Grid Import", "Grid Export", "Battery Charge / Discharge",
"Energy Saved", "solar + battery, not bought from grid", "Est. Money Saved", "at 0.39 CHF/kWh", "Energy Saved", "solar + battery, not bought from grid", "Est. Money Saved", "at 0.39 CHF/kWh",
"Energy Independence", "from your own solar + battery system", "Battery Eff.", "discharge vs charge", "Energy Independence", "from your own solar + battery system", "Battery Eff.", "discharge vs charge",
"months aggregated", "Generated by <strong style=\"color:#666\">inesco Energy Monitor</strong>", "months aggregated", "Generated by <strong style=\"color:#666\">inesco energy Monitor</strong>",
"View your detailed reports at monitor.inesco.energy") "View your detailed reports at monitor.inesco.energy")
}; };
@ -637,7 +637,7 @@ public static class ReportEmailService
<!-- Header --> <!-- Header -->
<tr> <tr>
<td style=""background:#2c3e50;padding:24px 30px;color:#ffffff""> <td style=""background:#2c3e50;padding:24px 30px;color:#ffffff"">
<img src=""{LogoBase64}"" alt=""inesco Energy"" style=""height:36px;margin-bottom:12px"" /> <img src=""{LogoBase64}"" alt=""inesco energy"" style=""height:36px;margin-bottom:12px"" />
<div style=""font-size:20px;font-weight:bold"">{dailyTitle}</div> <div style=""font-size:20px;font-weight:bold"">{dailyTitle}</div>
<div style=""font-size:14px;margin-top:6px;opacity:0.9"">{installationName}</div> <div style=""font-size:14px;margin-top:6px;opacity:0.9"">{installationName}</div>
<div style=""font-size:13px;margin-top:2px;opacity:0.7"">{record.Date}</div> <div style=""font-size:13px;margin-top:2px;opacity:0.7"">{record.Date}</div>
@ -723,7 +723,7 @@ public static class ReportEmailService
<!-- Header --> <!-- Header -->
<tr> <tr>
<td style=""background:#2c3e50;padding:24px 30px;color:#ffffff""> <td style=""background:#2c3e50;padding:24px 30px;color:#ffffff"">
<img src=""{LogoBase64}"" alt=""inesco Energy"" style=""height:36px;margin-bottom:12px"" /> <img src=""{LogoBase64}"" alt=""inesco energy"" style=""height:36px;margin-bottom:12px"" />
<div style=""font-size:20px;font-weight:bold"">{s.Title}</div> <div style=""font-size:20px;font-weight:bold"">{s.Title}</div>
<div style=""font-size:14px;margin-top:6px;opacity:0.9"">{installationName}</div> <div style=""font-size:14px;margin-top:6px;opacity:0.9"">{installationName}</div>
<div style=""font-size:13px;margin-top:2px;opacity:0.7"">{periodStart} {periodEnd}</div> <div style=""font-size:13px;margin-top:2px;opacity:0.7"">{periodStart} {periodEnd}</div>

View File

@ -136,7 +136,7 @@ public static class RabbitMqManager
Console.WriteLine("Send replace battery email to the support team for installation "+installationId); Console.WriteLine("Send replace battery email to the support team for installation "+installationId);
string recipient = "support@innov.energy"; string recipient = "support@innov.energy";
string subject = $"Battery Alarm from {installation.Name}: 2 or more strings broken"; string subject = $"Battery Alarm from {installation.Name}: 2 or more strings broken";
string text = $"Dear inesco Energy Support Team,\n" + string text = $"Dear inesco energy Support Team,\n" +
$"\n"+ $"\n"+
$"Installation Name: {installation.Name}\n"+ $"Installation Name: {installation.Name}\n"+
$"\n"+ $"\n"+
@ -148,7 +148,7 @@ public static class RabbitMqManager
$"\n"+ $"\n"+
$"Thank you for your great support:)"; $"Thank you for your great support:)";
//Disable this function now //Disable this function now
//Mailer.Send("inesco Energy Support Team", recipient, subject, text); //Mailer.Send("inesco energy Support Team", recipient, subject, text);
} }
//Create a new error and add it to the database //Create a new error and add it to the database
Db.HandleError(newError, installationId); Db.HandleError(newError, installationId);

View File

@ -13,7 +13,7 @@
href="https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400&display=swap" href="https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,400&display=swap"
rel="stylesheet" rel="stylesheet"
/> />
<title>Inesco Energy</title> <title>inesco energy</title>
</head> </head>
<body> <body>

View File

@ -27,7 +27,7 @@ const AcknowledgementDialog: React.FC<AcknowledgementDialogProps> = ({
<DialogTitle> <DialogTitle>
<FormattedMessage <FormattedMessage
id="terms_dialog_title" id="terms_dialog_title"
defaultMessage="Welcome to inesco Energy" defaultMessage="Welcome to inesco energy"
/> />
</DialogTitle> </DialogTitle>
<DialogContent dividers> <DialogContent dividers>
@ -75,7 +75,7 @@ const AcknowledgementDialog: React.FC<AcknowledgementDialogProps> = ({
<Typography variant="body2"> <Typography variant="body2">
<FormattedMessage <FormattedMessage
id="terms_usage_body" id="terms_usage_body"
defaultMessage="By using this platform, you acknowledge the general terms of use of inesco Energy. For questions, please contact your system administrator." defaultMessage="By using this platform, you acknowledge the general terms of use of inesco energy. For questions, please contact your system administrator."
/> />
</Typography> </Typography>
</Box> </Box>

View File

@ -18,7 +18,7 @@ function Footer() {
> >
<Box> <Box>
<Typography variant="subtitle1"> <Typography variant="subtitle1">
&copy; 2025 - Inesco Energy AG &copy; 2025 - inesco energy AG
</Typography> </Typography>
</Box> </Box>
<Typography <Typography
@ -33,7 +33,7 @@ function Footer() {
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
> >
Inesco Energy AG inesco energy AG
</Link> </Link>
</Typography> </Typography>
</Box> </Box>

View File

@ -98,7 +98,7 @@ function Logo() {
const theme = useTheme(); const theme = useTheme();
return ( return (
<TooltipWrapper title="inesco Energy" arrow> <TooltipWrapper title="inesco energy" arrow>
<LogoWrapper to="/overview"> <LogoWrapper to="/overview">
<Badge <Badge
sx={{ sx={{

View File

@ -115,7 +115,7 @@ function Status500() {
<Container maxWidth="sm"> <Container maxWidth="sm">
<Box textAlign="center"> <Box textAlign="center">
<TypographyPrimary variant="h1" sx={{ my: 2 }}> <TypographyPrimary variant="h1" sx={{ my: 2 }}>
inesco Energy{' '} inesco energy{' '}
</TypographyPrimary> </TypographyPrimary>
<TypographySecondary <TypographySecondary
variant="h4" variant="h4"

View File

@ -644,13 +644,13 @@
"timelineAiDiagnosisFailedDesc": "KI-Diagnose fehlgeschlagen.", "timelineAiDiagnosisFailedDesc": "KI-Diagnose fehlgeschlagen.",
"timelineEscalatedDesc": "Ticket eskaliert.", "timelineEscalatedDesc": "Ticket eskaliert.",
"timelineResolutionAddedDesc": "Lösung hinzugefügt von {name}.", "timelineResolutionAddedDesc": "Lösung hinzugefügt von {name}.",
"terms_dialog_title": "Willkommen bei inesco Energy", "terms_dialog_title": "Willkommen bei inesco energy",
"terms_ai_heading": "KI-gestützte Funktionen", "terms_ai_heading": "KI-gestützte Funktionen",
"terms_ai_body": "Diese Plattform nutzt KI für Diagnosen und automatisierte Analysen. KI-generierte Ergebnisse sind beratend und sollten von qualifiziertem Personal überprüft werden.", "terms_ai_body": "Diese Plattform nutzt KI für Diagnosen und automatisierte Analysen. KI-generierte Ergebnisse sind beratend und sollten von qualifiziertem Personal überprüft werden.",
"terms_cookies_heading": "Cookies und Sitzungsspeicher", "terms_cookies_heading": "Cookies und Sitzungsspeicher",
"terms_cookies_body": "Browser-Speicher wird für Anmeldesitzungen und Benutzereinstellungen verwendet. Dies ist für die korrekte Funktion der Plattform erforderlich.", "terms_cookies_body": "Browser-Speicher wird für Anmeldesitzungen und Benutzereinstellungen verwendet. Dies ist für die korrekte Funktion der Plattform erforderlich.",
"terms_usage_heading": "Nutzungsbedingungen", "terms_usage_heading": "Nutzungsbedingungen",
"terms_usage_body": "Durch die Nutzung dieser Plattform erkennen Sie die allgemeinen Nutzungsbedingungen von inesco Energy an. Bei Fragen wenden Sie sich bitte an Ihren Systemadministrator.", "terms_usage_body": "Durch die Nutzung dieser Plattform erkennen Sie die allgemeinen Nutzungsbedingungen von inesco energy an. Bei Fragen wenden Sie sich bitte an Ihren Systemadministrator.",
"terms_acknowledge_button": "Ich verstehe", "terms_acknowledge_button": "Ich verstehe",
"sodistorepro": "Sodistore Pro", "sodistorepro": "Sodistore Pro",
"numberOfInverters": "Anzahl der Wechselrichter" "numberOfInverters": "Anzahl der Wechselrichter"

View File

@ -392,13 +392,13 @@
"timelineAiDiagnosisFailedDesc": "AI diagnosis failed.", "timelineAiDiagnosisFailedDesc": "AI diagnosis failed.",
"timelineEscalatedDesc": "Ticket escalated.", "timelineEscalatedDesc": "Ticket escalated.",
"timelineResolutionAddedDesc": "Resolution added by {name}.", "timelineResolutionAddedDesc": "Resolution added by {name}.",
"terms_dialog_title": "Welcome to inesco Energy", "terms_dialog_title": "Welcome to inesco energy",
"terms_ai_heading": "AI-Powered Features", "terms_ai_heading": "AI-Powered Features",
"terms_ai_body": "This platform uses AI for diagnostics and automated analysis. AI-generated results are advisory and should be verified by qualified personnel.", "terms_ai_body": "This platform uses AI for diagnostics and automated analysis. AI-generated results are advisory and should be verified by qualified personnel.",
"terms_cookies_heading": "Cookies and Session Storage", "terms_cookies_heading": "Cookies and Session Storage",
"terms_cookies_body": "Browser storage is used for login sessions and user preferences. This is required for the platform to function correctly.", "terms_cookies_body": "Browser storage is used for login sessions and user preferences. This is required for the platform to function correctly.",
"terms_usage_heading": "Terms of Use", "terms_usage_heading": "Terms of Use",
"terms_usage_body": "By using this platform, you acknowledge the general terms of use of inesco Energy. For questions, please contact your system administrator.", "terms_usage_body": "By using this platform, you acknowledge the general terms of use of inesco energy. For questions, please contact your system administrator.",
"terms_acknowledge_button": "I understand", "terms_acknowledge_button": "I understand",
"sodistorepro": "Sodistore Pro", "sodistorepro": "Sodistore Pro",
"numberOfInverters": "Number of Inverters" "numberOfInverters": "Number of Inverters"

View File

@ -644,13 +644,13 @@
"timelineAiDiagnosisFailedDesc": "Diagnostic IA échoué.", "timelineAiDiagnosisFailedDesc": "Diagnostic IA échoué.",
"timelineEscalatedDesc": "Ticket escaladé.", "timelineEscalatedDesc": "Ticket escaladé.",
"timelineResolutionAddedDesc": "Résolution ajoutée par {name}.", "timelineResolutionAddedDesc": "Résolution ajoutée par {name}.",
"terms_dialog_title": "Bienvenue chez inesco Energy", "terms_dialog_title": "Bienvenue chez inesco energy",
"terms_ai_heading": "Fonctionnalités basées sur l'IA", "terms_ai_heading": "Fonctionnalités basées sur l'IA",
"terms_ai_body": "Cette plateforme utilise l'IA pour les diagnostics et l'analyse automatisée. Les résultats générés par l'IA sont consultatifs et doivent être vérifiés par du personnel qualifié.", "terms_ai_body": "Cette plateforme utilise l'IA pour les diagnostics et l'analyse automatisée. Les résultats générés par l'IA sont consultatifs et doivent être vérifiés par du personnel qualifié.",
"terms_cookies_heading": "Cookies et stockage de session", "terms_cookies_heading": "Cookies et stockage de session",
"terms_cookies_body": "Le stockage du navigateur est utilisé pour les sessions de connexion et les préférences utilisateur. Ceci est nécessaire au bon fonctionnement de la plateforme.", "terms_cookies_body": "Le stockage du navigateur est utilisé pour les sessions de connexion et les préférences utilisateur. Ceci est nécessaire au bon fonctionnement de la plateforme.",
"terms_usage_heading": "Conditions d'utilisation", "terms_usage_heading": "Conditions d'utilisation",
"terms_usage_body": "En utilisant cette plateforme, vous reconnaissez les conditions générales d'utilisation d'inesco Energy. Pour toute question, veuillez contacter votre administrateur système.", "terms_usage_body": "En utilisant cette plateforme, vous reconnaissez les conditions générales d'utilisation d'inesco energy. Pour toute question, veuillez contacter votre administrateur système.",
"terms_acknowledge_button": "Je comprends", "terms_acknowledge_button": "Je comprends",
"sodistorepro": "Sodistore Pro", "sodistorepro": "Sodistore Pro",
"numberOfInverters": "Nombre d'onduleurs" "numberOfInverters": "Nombre d'onduleurs"

View File

@ -644,13 +644,13 @@
"timelineAiDiagnosisFailedDesc": "Diagnosi IA fallita.", "timelineAiDiagnosisFailedDesc": "Diagnosi IA fallita.",
"timelineEscalatedDesc": "Ticket escalato.", "timelineEscalatedDesc": "Ticket escalato.",
"timelineResolutionAddedDesc": "Risoluzione aggiunta da {name}.", "timelineResolutionAddedDesc": "Risoluzione aggiunta da {name}.",
"terms_dialog_title": "Benvenuto su inesco Energy", "terms_dialog_title": "Benvenuto su inesco energy",
"terms_ai_heading": "Funzionalità basate sull'IA", "terms_ai_heading": "Funzionalità basate sull'IA",
"terms_ai_body": "Questa piattaforma utilizza l'IA per la diagnostica e l'analisi automatizzata. I risultati generati dall'IA sono a scopo consultivo e devono essere verificati da personale qualificato.", "terms_ai_body": "Questa piattaforma utilizza l'IA per la diagnostica e l'analisi automatizzata. I risultati generati dall'IA sono a scopo consultivo e devono essere verificati da personale qualificato.",
"terms_cookies_heading": "Cookie e archiviazione sessione", "terms_cookies_heading": "Cookie e archiviazione sessione",
"terms_cookies_body": "L'archiviazione del browser viene utilizzata per le sessioni di accesso e le preferenze utente. Questo è necessario per il corretto funzionamento della piattaforma.", "terms_cookies_body": "L'archiviazione del browser viene utilizzata per le sessioni di accesso e le preferenze utente. Questo è necessario per il corretto funzionamento della piattaforma.",
"terms_usage_heading": "Condizioni d'uso", "terms_usage_heading": "Condizioni d'uso",
"terms_usage_body": "Utilizzando questa piattaforma, si riconoscono le condizioni generali d'uso di inesco Energy. Per domande, contattare l'amministratore di sistema.", "terms_usage_body": "Utilizzando questa piattaforma, si riconoscono le condizioni generali d'uso di inesco energy. Per domande, contattare l'amministratore di sistema.",
"terms_acknowledge_button": "Ho capito", "terms_acknowledge_button": "Ho capito",
"sodistorepro": "Sodistore Pro", "sodistorepro": "Sodistore Pro",
"numberOfInverters": "Numero di inverter" "numberOfInverters": "Numero di inverter"