Merge branch 'release/1.7.0' into develop
This commit is contained in:
commit
d06669e943
@ -5008,7 +5008,7 @@ namespace BreCalClient.misc.Client
|
|||||||
{
|
{
|
||||||
Proxy = null;
|
Proxy = null;
|
||||||
UserAgent = WebUtility.UrlEncode("OpenAPI-Generator/1.0.0/csharp");
|
UserAgent = WebUtility.UrlEncode("OpenAPI-Generator/1.0.0/csharp");
|
||||||
BasePath = "https://brecaldevel.bsmd-emswe.eu";
|
BasePath = "https://brecaltest.bsmd-emswe.eu";
|
||||||
DefaultHeaders = new ConcurrentDictionary<string, string>();
|
DefaultHeaders = new ConcurrentDictionary<string, string>();
|
||||||
ApiKey = new ConcurrentDictionary<string, string>();
|
ApiKey = new ConcurrentDictionary<string, string>();
|
||||||
ApiKeyPrefix = new ConcurrentDictionary<string, string>();
|
ApiKeyPrefix = new ConcurrentDictionary<string, string>();
|
||||||
@ -5016,7 +5016,7 @@ namespace BreCalClient.misc.Client
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
new Dictionary<string, object> {
|
new Dictionary<string, object> {
|
||||||
{"url", "https://brecaldevel.bsmd-emswe.eu"},
|
{"url", "https://brecaltest.bsmd-emswe.eu"},
|
||||||
{"description", "Development server hosted on vcup"},
|
{"description", "Development server hosted on vcup"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5035,7 +5035,7 @@ namespace BreCalClient.misc.Client
|
|||||||
IDictionary<string, string> defaultHeaders,
|
IDictionary<string, string> defaultHeaders,
|
||||||
IDictionary<string, string> apiKey,
|
IDictionary<string, string> apiKey,
|
||||||
IDictionary<string, string> apiKeyPrefix,
|
IDictionary<string, string> apiKeyPrefix,
|
||||||
string basePath = "https://brecaldevel.bsmd-emswe.eu") : this()
|
string basePath = "https://brecaltest.bsmd-emswe.eu") : this()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(basePath))
|
if (string.IsNullOrWhiteSpace(basePath))
|
||||||
throw new ArgumentException("The provided basePath is invalid.", "basePath");
|
throw new ArgumentException("The provided basePath is invalid.", "basePath");
|
||||||
|
|||||||
@ -14,7 +14,7 @@ info:
|
|||||||
name: Use at your own risk
|
name: Use at your own risk
|
||||||
url: 'https://www.bsmd.de/license'
|
url: 'https://www.bsmd.de/license'
|
||||||
servers:
|
servers:
|
||||||
- url: 'https://brecaldevel.bsmd-emswe.eu'
|
- url: 'https://brecaltest.bsmd-emswe.eu'
|
||||||
description: Development server hosted on vcup
|
description: Development server hosted on vcup
|
||||||
tags:
|
tags:
|
||||||
- name: user
|
- name: user
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
1.8.0.0
|
1.8.0.0
|
||||||
|
|||||||
@ -29,7 +29,7 @@
|
|||||||
<applicationSettings>
|
<applicationSettings>
|
||||||
<BreCalClient.Properties.Settings>
|
<BreCalClient.Properties.Settings>
|
||||||
<setting name="BG_COLOR" serializeAs="String">
|
<setting name="BG_COLOR" serializeAs="String">
|
||||||
<value>#1D751F</value>
|
<value>#751D1F</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="APP_TITLE" serializeAs="String">
|
<setting name="APP_TITLE" serializeAs="String">
|
||||||
<value>!!Bremen calling Entwicklungsversion!!</value>
|
<value>!!Bremen calling Entwicklungsversion!!</value>
|
||||||
@ -38,7 +38,7 @@
|
|||||||
<value>https://www.textbausteine.net/</value>
|
<value>https://www.textbausteine.net/</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="API_URL" serializeAs="String">
|
<setting name="API_URL" serializeAs="String">
|
||||||
<value>https://brecaldevel.bsmd-emswe.eu</value>
|
<value>https://brecaltest.bsmd-emswe.eu</value>
|
||||||
</setting>
|
</setting>
|
||||||
</BreCalClient.Properties.Settings>
|
</BreCalClient.Properties.Settings>
|
||||||
</applicationSettings>
|
</applicationSettings>
|
||||||
|
|||||||
@ -35,7 +35,7 @@ namespace BreCalClient
|
|||||||
this.ContentWrapper.Background = Brushes.Gray;
|
this.ContentWrapper.Background = Brushes.Gray;
|
||||||
break;
|
break;
|
||||||
case "MissingData":
|
case "MissingData":
|
||||||
this.ContentWrapper.Background= Brushes.Yellow;
|
this.ContentWrapper.Background = Brushes.DarkKhaki;
|
||||||
break;
|
break;
|
||||||
case "Cancelled":
|
case "Cancelled":
|
||||||
this.ContentWrapper.Background = Brushes.DarkGray;
|
this.ContentWrapper.Background = Brushes.DarkGray;
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
<Title>Bremen calling client</Title>
|
<Title>Bremen calling client</Title>
|
||||||
<Description>A Windows WPF client for the Bremen calling API.</Description>
|
<Description>A Windows WPF client for the Bremen calling API.</Description>
|
||||||
<ApplicationIcon>containership.ico</ApplicationIcon>
|
<ApplicationIcon>containership.ico</ApplicationIcon>
|
||||||
<AssemblyName>BreCalDevelClient</AssemblyName>
|
<AssemblyName>BreCalTestClient</AssemblyName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -4,8 +4,8 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
|||||||
-->
|
-->
|
||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ApplicationRevision>0</ApplicationRevision>
|
<ApplicationRevision>5</ApplicationRevision>
|
||||||
<ApplicationVersion>1.6.0.3</ApplicationVersion>
|
<ApplicationVersion>1.7.0.7</ApplicationVersion>
|
||||||
<BootstrapperEnabled>True</BootstrapperEnabled>
|
<BootstrapperEnabled>True</BootstrapperEnabled>
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<CreateDesktopShortcut>True</CreateDesktopShortcut>
|
<CreateDesktopShortcut>True</CreateDesktopShortcut>
|
||||||
@ -27,10 +27,10 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
|||||||
<SelfContained>True</SelfContained>
|
<SelfContained>True</SelfContained>
|
||||||
<SignatureAlgorithm>(none)</SignatureAlgorithm>
|
<SignatureAlgorithm>(none)</SignatureAlgorithm>
|
||||||
<SignManifests>False</SignManifests>
|
<SignManifests>False</SignManifests>
|
||||||
<TargetFramework>net6.0-windows</TargetFramework>
|
<TargetFramework>net8.0-windows7.0</TargetFramework>
|
||||||
<UpdateEnabled>True</UpdateEnabled>
|
<UpdateEnabled>True</UpdateEnabled>
|
||||||
<UpdateMode>Foreground</UpdateMode>
|
<UpdateMode>Foreground</UpdateMode>
|
||||||
<UpdateRequired>False</UpdateRequired>
|
<UpdateRequired>True</UpdateRequired>
|
||||||
<WebPageFileName>Publish.html</WebPageFileName>
|
<WebPageFileName>Publish.html</WebPageFileName>
|
||||||
<CreateDesktopShortcut>True</CreateDesktopShortcut>
|
<CreateDesktopShortcut>True</CreateDesktopShortcut>
|
||||||
<ErrorReportUrl>https://www.bsmd-emswe.eu/</ErrorReportUrl>
|
<ErrorReportUrl>https://www.bsmd-emswe.eu/</ErrorReportUrl>
|
||||||
@ -38,8 +38,10 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
|||||||
<PublisherName>Informatikbüro Daniel Schick</PublisherName>
|
<PublisherName>Informatikbüro Daniel Schick</PublisherName>
|
||||||
<SuiteName>Bremen Calling</SuiteName>
|
<SuiteName>Bremen Calling</SuiteName>
|
||||||
<SupportUrl>http://www.textbausteine.net/</SupportUrl>
|
<SupportUrl>http://www.textbausteine.net/</SupportUrl>
|
||||||
<PublishDir>bin\Debug\net6.0-windows\win-x64\app.publish\</PublishDir>
|
<PublishDir>bin\Debug\net8.0-windows7.0\win-x64\app.publish\</PublishDir>
|
||||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||||
|
<SkipPublishVerification>false</SkipPublishVerification>
|
||||||
|
<MinimumRequiredVersion>1.7.0.7</MinimumRequiredVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PublishFile Include="containership.ico">
|
<PublishFile Include="containership.ico">
|
||||||
|
|||||||
54
src/BreCalClient/Properties/Settings.Designer.cs
generated
54
src/BreCalClient/Properties/Settings.Designer.cs
generated
@ -9,29 +9,29 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
namespace BreCalClient.Properties {
|
namespace BreCalClient.Properties {
|
||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
public static Settings Default {
|
public static Settings Default {
|
||||||
get {
|
get {
|
||||||
return defaultInstance;
|
return defaultInstance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("#1D751F")]
|
[global::System.Configuration.DefaultSettingValueAttribute("#751D1F")]
|
||||||
public string BG_COLOR {
|
public string BG_COLOR {
|
||||||
get {
|
get {
|
||||||
return ((string)(this["BG_COLOR"]));
|
return ((string)(this["BG_COLOR"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("!!Bremen calling Entwicklungsversion!!")]
|
[global::System.Configuration.DefaultSettingValueAttribute("!!Bremen calling Entwicklungsversion!!")]
|
||||||
@ -40,7 +40,7 @@ namespace BreCalClient.Properties {
|
|||||||
return ((string)(this["APP_TITLE"]));
|
return ((string)(this["APP_TITLE"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("https://www.textbausteine.net/")]
|
[global::System.Configuration.DefaultSettingValueAttribute("https://www.textbausteine.net/")]
|
||||||
@ -49,7 +49,7 @@ namespace BreCalClient.Properties {
|
|||||||
return ((string)(this["LOGO_IMAGE_URL"]));
|
return ((string)(this["LOGO_IMAGE_URL"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
@ -61,16 +61,16 @@ namespace BreCalClient.Properties {
|
|||||||
this["FilterCriteria"] = value;
|
this["FilterCriteria"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("https://brecaldevel.bsmd-emswe.eu")]
|
[global::System.Configuration.DefaultSettingValueAttribute("https://brecaltest.bsmd-emswe.eu")]
|
||||||
public string API_URL {
|
public string API_URL {
|
||||||
get {
|
get {
|
||||||
return ((string)(this["API_URL"]));
|
return ((string)(this["API_URL"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("800")]
|
[global::System.Configuration.DefaultSettingValueAttribute("800")]
|
||||||
@ -82,7 +82,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["Width"] = value;
|
this["Width"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("450")]
|
[global::System.Configuration.DefaultSettingValueAttribute("450")]
|
||||||
@ -94,7 +94,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["Height"] = value;
|
this["Height"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -106,7 +106,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["Left"] = value;
|
this["Left"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -118,7 +118,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["Top"] = value;
|
this["Top"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -130,7 +130,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W1Left"] = value;
|
this["W1Left"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -142,7 +142,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W1Top"] = value;
|
this["W1Top"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -154,7 +154,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W2Left"] = value;
|
this["W2Left"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -166,7 +166,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W2Top"] = value;
|
this["W2Top"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -178,7 +178,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W3Left"] = value;
|
this["W3Left"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -190,7 +190,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W3Top"] = value;
|
this["W3Top"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -202,7 +202,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W4Left"] = value;
|
this["W4Left"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -214,7 +214,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W4Top"] = value;
|
this["W4Top"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
@ -226,7 +226,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["FilterCriteriaMap"] = value;
|
this["FilterCriteriaMap"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
public global::System.Collections.Specialized.StringCollection Notifications {
|
public global::System.Collections.Specialized.StringCollection Notifications {
|
||||||
@ -237,7 +237,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["Notifications"] = value;
|
this["Notifications"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
@ -249,7 +249,7 @@ namespace BreCalClient.Properties {
|
|||||||
this["W5Top"] = value;
|
this["W5Top"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<Profiles />
|
<Profiles />
|
||||||
<Settings>
|
<Settings>
|
||||||
<Setting Name="BG_COLOR" Type="System.String" Scope="Application">
|
<Setting Name="BG_COLOR" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">#1D751F</Value>
|
<Value Profile="(Default)">#751D1F</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="APP_TITLE" Type="System.String" Scope="Application">
|
<Setting Name="APP_TITLE" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">!!Bremen calling Entwicklungsversion!!</Value>
|
<Value Profile="(Default)">!!Bremen calling Entwicklungsversion!!</Value>
|
||||||
@ -15,7 +15,7 @@
|
|||||||
<Value Profile="(Default)" />
|
<Value Profile="(Default)" />
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="API_URL" Type="System.String" Scope="Application">
|
<Setting Name="API_URL" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">https://brecaldevel.bsmd-emswe.eu</Value>
|
<Value Profile="(Default)">https://brecaltest.bsmd-emswe.eu</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="Width" Type="System.Double" Scope="User">
|
<Setting Name="Width" Type="System.Double" Scope="User">
|
||||||
<Value Profile="(Default)">800</Value>
|
<Value Profile="(Default)">800</Value>
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:p = "clr-namespace:BreCalClient.Resources"
|
xmlns:p = "clr-namespace:BreCalClient.Resources"
|
||||||
xmlns:sets="clr-namespace:BreCalClient.Properties"
|
xmlns:sets="clr-namespace:BreCalClient.Properties"
|
||||||
xmlns:db="clr-namespace:BreCalClient;assembly=BreCalDevelClient"
|
xmlns:db="clr-namespace:BreCalClient;assembly=BreCalTestClient"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DesignHeight="135" d:DesignWidth="800">
|
d:DesignHeight="135" d:DesignWidth="800">
|
||||||
<Border BorderBrush="LightGray" Margin="1" BorderThickness="1">
|
<Border BorderBrush="LightGray" Margin="1" BorderThickness="1">
|
||||||
|
|||||||
@ -215,13 +215,13 @@ namespace BreCalClient
|
|||||||
switch (this.ShipcallControlModel?.Shipcall?.Type)
|
switch (this.ShipcallControlModel?.Shipcall?.Type)
|
||||||
{
|
{
|
||||||
case ShipcallType.Arrival: // incoming
|
case ShipcallType.Arrival: // incoming
|
||||||
this.imageShipcallType.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalDevelClient;component/Resources/arrow_down_red.png"));
|
this.imageShipcallType.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalTestClient;component/Resources/arrow_down_red.png"));
|
||||||
break;
|
break;
|
||||||
case ShipcallType.Departure: // outgoing
|
case ShipcallType.Departure: // outgoing
|
||||||
this.imageShipcallType.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalDevelClient;component/Resources/arrow_up_blue.png"));
|
this.imageShipcallType.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalTestClient;component/Resources/arrow_up_blue.png"));
|
||||||
break;
|
break;
|
||||||
case ShipcallType.Shifting: // shifting
|
case ShipcallType.Shifting: // shifting
|
||||||
this.imageShipcallType.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalDevelClient;component/Resources/arrow_right_green.png"));
|
this.imageShipcallType.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalTestClient;component/Resources/arrow_right_green.png"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -230,13 +230,13 @@ namespace BreCalClient
|
|||||||
switch(this.ShipcallControlModel?.LightMode)
|
switch(this.ShipcallControlModel?.LightMode)
|
||||||
{
|
{
|
||||||
case EvaluationType.Green:
|
case EvaluationType.Green:
|
||||||
this.imageEvaluation.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalDevelClient;component/Resources/check.png"));
|
this.imageEvaluation.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalTestClient;component/Resources/check.png"));
|
||||||
break;
|
break;
|
||||||
case EvaluationType.Yellow:
|
case EvaluationType.Yellow:
|
||||||
this.imageEvaluation.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalDevelClient;component/Resources/sign_warning.png"));
|
this.imageEvaluation.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalTestClient;component/Resources/sign_warning.png"));
|
||||||
break;
|
break;
|
||||||
case EvaluationType.Red:
|
case EvaluationType.Red:
|
||||||
this.imageEvaluation.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalDevelClient;component/Resources/delete2.png"));
|
this.imageEvaluation.Source = new BitmapImage(new Uri("pack://application:,,,/BreCalTestClient;component/Resources/delete2.png"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
<applicationSettings>
|
<applicationSettings>
|
||||||
<RoleEditor.Properties.Settings>
|
<RoleEditor.Properties.Settings>
|
||||||
<setting name="ConnectionString" serializeAs="String">
|
<setting name="ConnectionString" serializeAs="String">
|
||||||
<value>Server=localhost;User ID=ds;Password=HalloWach_2323XXL!!;Database=bremen_calling_devel;Port=33306</value>
|
<value>Server=localhost;User ID=ds;Password=HalloWach_2323XXL!!;Database=bremen_calling_test;Port=33306</value>
|
||||||
</setting>
|
</setting>
|
||||||
</RoleEditor.Properties.Settings>
|
</RoleEditor.Properties.Settings>
|
||||||
</applicationSettings>
|
</applicationSettings>
|
||||||
|
|||||||
12
src/RoleEditor/Properties/Settings.Designer.cs
generated
12
src/RoleEditor/Properties/Settings.Designer.cs
generated
@ -9,24 +9,24 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
namespace RoleEditor.Properties {
|
namespace RoleEditor.Properties {
|
||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
public static Settings Default {
|
public static Settings Default {
|
||||||
get {
|
get {
|
||||||
return defaultInstance;
|
return defaultInstance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("Server=localhost;User ID=ds;Password=HalloWach_2323XXL!!;Database=bremen_calling_" +
|
[global::System.Configuration.DefaultSettingValueAttribute("Server=localhost;User ID=ds;Password=HalloWach_2323XXL!!;Database=bremen_calling_" +
|
||||||
"devel;Port=33306")]
|
"test;Port=33306")]
|
||||||
public string ConnectionString {
|
public string ConnectionString {
|
||||||
get {
|
get {
|
||||||
return ((string)(this["ConnectionString"]));
|
return ((string)(this["ConnectionString"]));
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<Profiles />
|
<Profiles />
|
||||||
<Settings>
|
<Settings>
|
||||||
<Setting Name="ConnectionString" Type="System.String" Scope="Application">
|
<Setting Name="ConnectionString" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">Server=localhost;User ID=ds;Password=HalloWach_2323XXL!!;Database=bremen_calling_devel;Port=33306</Value>
|
<Value Profile="(Default)">Server=localhost;User ID=ds;Password=HalloWach_2323XXL!!;Database=bremen_calling_test;Port=33306</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
||||||
@ -69,7 +69,7 @@ def create_app(test_config=None, instance_path=None):
|
|||||||
app.register_blueprint(history.bp)
|
app.register_blueprint(history.bp)
|
||||||
app.register_blueprint(ports.bp)
|
app.register_blueprint(ports.bp)
|
||||||
|
|
||||||
logging.basicConfig(filename='brecal.log', level=logging.WARNING, format='%(asctime)s | %(name)s | %(levelname)s | %(message)s')
|
logging.basicConfig(filename='brecaltest.log', level=logging.DEBUG, format='%(asctime)s | %(name)s | %(levelname)s | %(message)s')
|
||||||
local_db.initPool(os.path.dirname(app.instance_path))
|
local_db.initPool(os.path.dirname(app.instance_path))
|
||||||
logging.info('App started')
|
logging.info('App started')
|
||||||
|
|
||||||
|
|||||||
@ -281,10 +281,8 @@ class SQLQuery():
|
|||||||
|
|
||||||
def get_next24hrs_shipcalls()->str:
|
def get_next24hrs_shipcalls()->str:
|
||||||
query = ("SELECT s.id as id, ship.name as name FROM shipcall s INNER JOIN ship ON s.ship_id = ship.id LEFT JOIN times t on t.shipcall_id = s.id AND t.participant_type = 8 " + \
|
query = ("SELECT s.id as id, ship.name as name FROM shipcall s INNER JOIN ship ON s.ship_id = ship.id LEFT JOIN times t on t.shipcall_id = s.id AND t.participant_type = 8 " + \
|
||||||
"WHERE (type = 1 AND ((t.id IS NOT NULL AND t.eta_berth >= NOW() AND t.eta_berth < (NOW() + INTERVAL 1 DAY))" + \
|
"WHERE (type = 1 AND (COALESCE(t.eta_berth, eta) >= NOW() AND COALESCE(t.eta_berth, eta) < (NOW() + INTERVAL 1 DAY)))" + \
|
||||||
"OR (eta >= NOW() AND eta < (NOW() + INTERVAL 1 DAY)))) OR " + \
|
"OR ((type = 2 OR type = 3) AND (COALESCE(t.etd_berth, etd) >= NOW() AND COALESCE(t.etd_berth, etd) < (NOW() + INTERVAL 1 DAY)))"
|
||||||
"((type = 2 OR type = 3) AND ((t.id IS NOT NULL AND t.etd_berth >= NOW() AND " + \
|
|
||||||
"t.etd_berth < (NOW() + INTERVAL 1 DAY)) OR (etd >= NOW() AND etd < (NOW() + INTERVAL 1 DAY))))" + \
|
|
||||||
"AND s.canceled = 0")
|
"AND s.canceled = 0")
|
||||||
return query
|
return query
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@ from .. import local_db
|
|||||||
from ..services import jwt_handler
|
from ..services import jwt_handler
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def GetUser(options):
|
def GetUser(options):
|
||||||
|
|
||||||
pooledConnection = None
|
pooledConnection = None
|
||||||
|
|||||||
@ -56,8 +56,8 @@ def initPool(instancePath, connection_filename="connection_data_prod.json",
|
|||||||
|
|
||||||
credentials_file = "email_credentials_test.json"
|
credentials_file = "email_credentials_test.json"
|
||||||
credentials_path = os.path.join(instancePath, f'../../../secure/{credentials_file}')
|
credentials_path = os.path.join(instancePath, f'../../../secure/{credentials_file}')
|
||||||
|
|
||||||
# credentials_path = 'C:\\temp\\email_credentials_test.json'
|
# credentials_path = "E:/temp/email_credentials_devel.json"
|
||||||
|
|
||||||
if not os.path.exists(credentials_path):
|
if not os.path.exists(credentials_path):
|
||||||
print('cannot find ' + os.path.abspath(credentials_path))
|
print('cannot find ' + os.path.abspath(credentials_path))
|
||||||
|
|||||||
@ -15,13 +15,13 @@ from email.mime.application import MIMEApplication
|
|||||||
|
|
||||||
class EmailHandler():
|
class EmailHandler():
|
||||||
"""
|
"""
|
||||||
Creates an EmailHandler, which is capable of connecting to a mail server at a respective port,
|
Creates an EmailHandler, which is capable of connecting to a mail server at a respective port,
|
||||||
as well as logging into a specific user's mail address.
|
as well as logging into a specific user's mail address.
|
||||||
Upon creating messages, these can be sent via this handler.
|
Upon creating messages, these can be sent via this handler.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
mail_server: address of the server, such as 'smtp.gmail.com' or 'w01d5503.kasserver.com
|
mail_server: address of the server, such as 'smtp.gmail.com' or 'w01d5503.kasserver.com
|
||||||
mail_port:
|
mail_port:
|
||||||
25 - SMTP Port, to send emails
|
25 - SMTP Port, to send emails
|
||||||
110 - POP3 Port, to receive emails
|
110 - POP3 Port, to receive emails
|
||||||
143 - IMAP Port, to receive from IMAP
|
143 - IMAP Port, to receive from IMAP
|
||||||
@ -38,6 +38,9 @@ class EmailHandler():
|
|||||||
|
|
||||||
self.server = smtplib.SMTP_SSL(self.mail_server, self.mail_port) # alternatively, SMTP
|
self.server = smtplib.SMTP_SSL(self.mail_server, self.mail_port) # alternatively, SMTP
|
||||||
|
|
||||||
|
# set the following to 0 to avoid log spamming
|
||||||
|
self.server.set_debuglevel(1) # 0: no debug, 1: debug
|
||||||
|
|
||||||
def check_state(self):
|
def check_state(self):
|
||||||
"""check, whether the server login took place and is open."""
|
"""check, whether the server login took place and is open."""
|
||||||
try:
|
try:
|
||||||
@ -45,7 +48,7 @@ class EmailHandler():
|
|||||||
return status_code==250 # 250: b'2.0.0 Ok'
|
return status_code==250 # 250: b'2.0.0 Ok'
|
||||||
except smtplib.SMTPServerDisconnected:
|
except smtplib.SMTPServerDisconnected:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def check_connection(self):
|
def check_connection(self):
|
||||||
"""check, whether the server object is connected to the server. If not, connect it. """
|
"""check, whether the server object is connected to the server. If not, connect it. """
|
||||||
try:
|
try:
|
||||||
@ -53,7 +56,7 @@ class EmailHandler():
|
|||||||
except smtplib.SMTPServerDisconnected:
|
except smtplib.SMTPServerDisconnected:
|
||||||
self.server.connect(self.mail_server, self.mail_port)
|
self.server.connect(self.mail_server, self.mail_port)
|
||||||
return
|
return
|
||||||
|
|
||||||
def check_login(self)->bool:
|
def check_login(self)->bool:
|
||||||
"""check, whether the server object is logged in as a user"""
|
"""check, whether the server object is logged in as a user"""
|
||||||
user = self.server.__dict__.get("user",None)
|
user = self.server.__dict__.get("user",None)
|
||||||
@ -61,8 +64,8 @@ class EmailHandler():
|
|||||||
|
|
||||||
def login(self, interactive:bool=True):
|
def login(self, interactive:bool=True):
|
||||||
"""
|
"""
|
||||||
login on the determined mail server's mail address. By default, this function opens an interactive window to
|
login on the determined mail server's mail address. By default, this function opens an interactive window to
|
||||||
type the password without echoing (printing '*******' instead of readable characters).
|
type the password without echoing (printing '*******' instead of readable characters).
|
||||||
|
|
||||||
returns (status_code, status_msg)
|
returns (status_code, status_msg)
|
||||||
"""
|
"""
|
||||||
@ -77,7 +80,7 @@ class EmailHandler():
|
|||||||
def create_email(self, subject:str, message_body:str)->EmailMessage:
|
def create_email(self, subject:str, message_body:str)->EmailMessage:
|
||||||
"""
|
"""
|
||||||
Create an EmailMessage object, which contains the Email's header ("Subject"), content ("Message Body") and the sender's address ("From").
|
Create an EmailMessage object, which contains the Email's header ("Subject"), content ("Message Body") and the sender's address ("From").
|
||||||
The EmailMessage object does not contain the recipients yet, as these will be defined upon sending the Email.
|
The EmailMessage object does not contain the recipients yet, as these will be defined upon sending the Email.
|
||||||
"""
|
"""
|
||||||
msg = EmailMessage()
|
msg = EmailMessage()
|
||||||
msg["Subject"] = subject
|
msg["Subject"] = subject
|
||||||
@ -85,16 +88,16 @@ class EmailHandler():
|
|||||||
#msg["To"] = email_tgts # will be defined in self.send_email
|
#msg["To"] = email_tgts # will be defined in self.send_email
|
||||||
msg.set_content(message_body)
|
msg.set_content(message_body)
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
def build_recipients(self, email_tgts:list[str]):
|
def build_recipients(self, email_tgts:list[str]):
|
||||||
"""
|
"""
|
||||||
email formatting does not support lists. Instead, items are joined into a comma-space-separated string.
|
email formatting does not support lists. Instead, items are joined into a comma-space-separated string.
|
||||||
Example:
|
Example:
|
||||||
[mail1@mail.com, mail2@mail.com] becomes
|
[mail1@mail.com, mail2@mail.com] becomes
|
||||||
'mail1@mail.com, mail2@mail.com'
|
'mail1@mail.com, mail2@mail.com'
|
||||||
"""
|
"""
|
||||||
return ', '.join(email_tgts)
|
return ', '.join(email_tgts)
|
||||||
|
|
||||||
def open_mime_application(self, path:str)->MIMEApplication:
|
def open_mime_application(self, path:str)->MIMEApplication:
|
||||||
"""open a local file, read the bytes into a MIMEApplication object, which is built with the proper subtype (based on the file extension)"""
|
"""open a local file, read the bytes into a MIMEApplication object, which is built with the proper subtype (based on the file extension)"""
|
||||||
with open(path, 'rb') as file:
|
with open(path, 'rb') as file:
|
||||||
@ -102,24 +105,24 @@ class EmailHandler():
|
|||||||
|
|
||||||
attachment.add_header('Content-Disposition','attachment',filename=str(os.path.basename(path)))
|
attachment.add_header('Content-Disposition','attachment',filename=str(os.path.basename(path)))
|
||||||
return attachment
|
return attachment
|
||||||
|
|
||||||
def attach_file(self, path:str, msg:email.mime.multipart.MIMEMultipart)->None:
|
def attach_file(self, path:str, msg:email.mime.multipart.MIMEMultipart)->None:
|
||||||
"""
|
"""
|
||||||
attach a file to the message. This function opens the file, reads its bytes, defines the mime type by the
|
attach a file to the message. This function opens the file, reads its bytes, defines the mime type by the
|
||||||
path extension. The filename is appended as the header.
|
path extension. The filename is appended as the header.
|
||||||
|
|
||||||
mimetypes: # https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
|
mimetypes: # https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
|
||||||
"""
|
"""
|
||||||
attachment = self.open_mime_application(path)
|
attachment = self.open_mime_application(path)
|
||||||
msg.attach(attachment)
|
msg.attach(attachment)
|
||||||
return
|
return
|
||||||
|
|
||||||
def send_email(self, msg:EmailMessage, email_tgts:list[str], cc_tgts:typing.Optional[list[str]]=None, bcc_tgts:typing.Optional[list[str]]=None, debug:bool=False)->typing.Union[dict,EmailMessage]:
|
def send_email(self, msg:EmailMessage, email_tgts:list[str], cc_tgts:typing.Optional[list[str]]=None, bcc_tgts:typing.Optional[list[str]]=None, debug:bool=False)->typing.Union[dict,EmailMessage]:
|
||||||
"""
|
"""
|
||||||
send a prepared email message to recipients (email_tgts), copy (cc_tgts) and blind copy (bcc_tgts).
|
send a prepared email message to recipients (email_tgts), copy (cc_tgts) and blind copy (bcc_tgts).
|
||||||
Returns a dictionary of feedback, which is commonly empty and the EmailMessage.
|
Returns a dictionary of feedback, which is commonly empty and the EmailMessage.
|
||||||
|
|
||||||
When failing, this function returns an SMTP error instead of returning the default outputs.
|
When failing, this function returns an SMTP error instead of returning the default outputs.
|
||||||
"""
|
"""
|
||||||
# Set the Recipients
|
# Set the Recipients
|
||||||
msg["To"] = self.build_recipients(email_tgts)
|
msg["To"] = self.build_recipients(email_tgts)
|
||||||
@ -130,15 +133,15 @@ class EmailHandler():
|
|||||||
if bcc_tgts is not None:
|
if bcc_tgts is not None:
|
||||||
msg["Bcc"] = self.build_recipients(bcc_tgts)
|
msg["Bcc"] = self.build_recipients(bcc_tgts)
|
||||||
|
|
||||||
# when debugging, do not send the Email, but return the EmailMessage.
|
# when debugging, do not send the Email, but return the EmailMessage.
|
||||||
if debug:
|
if debug:
|
||||||
return {}, msg
|
return {}, msg
|
||||||
|
|
||||||
assert self.check_login(), f"currently not logged in. Cannot send an Email. Make sure to properly use self.login first. "
|
assert self.check_login(), f"currently not logged in. Cannot send an Email. Make sure to properly use self.login first. "
|
||||||
# send the prepared EmailMessage via the server.
|
# send the prepared EmailMessage via the server.
|
||||||
feedback = self.server.send_message(msg)
|
feedback = self.server.send_message(msg)
|
||||||
return feedback, msg
|
return feedback, msg
|
||||||
|
|
||||||
def translate_mail_to_multipart(self, msg:EmailMessage):
|
def translate_mail_to_multipart(self, msg:EmailMessage):
|
||||||
"""EmailMessage does not support HTML and attachments. Hence, one can convert an EmailMessage object."""
|
"""EmailMessage does not support HTML and attachments. Hence, one can convert an EmailMessage object."""
|
||||||
if msg.is_multipart():
|
if msg.is_multipart():
|
||||||
@ -159,11 +162,11 @@ class EmailHandler():
|
|||||||
# attach the remainder of the msg, such as the body, to the MIMEMultipart
|
# attach the remainder of the msg, such as the body, to the MIMEMultipart
|
||||||
msg_new.attach(msg)
|
msg_new.attach(msg)
|
||||||
return msg_new
|
return msg_new
|
||||||
|
|
||||||
def print_email_attachments(self, msg:MIMEMultipart)->list[str]:
|
def print_email_attachments(self, msg:MIMEMultipart)->list[str]:
|
||||||
"""return a list of lines of an Email, which contain 'filename=' as a list. """
|
"""return a list of lines of an Email, which contain 'filename=' as a list. """
|
||||||
return [line_ for line_ in msg.as_string().split("\n") if "filename=" in line_]
|
return [line_ for line_ in msg.as_string().split("\n") if "filename=" in line_]
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
self.server.__dict__.pop("user",None)
|
self.server.__dict__.pop("user",None)
|
||||||
self.server.__dict__.pop("password",None)
|
self.server.__dict__.pop("password",None)
|
||||||
|
|||||||
@ -124,11 +124,11 @@ def SendEmails(email_dict):
|
|||||||
defs.message_types = json.load(f)
|
defs.message_types = json.load(f)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
for user, notifications in email_dict.items():
|
for user_email, notifications in email_dict.items():
|
||||||
msg = EmailMessage()
|
msg = EmailMessage()
|
||||||
msg["Subject"] = '[Bremen calling] Notification'
|
msg["Subject"] = '[Bremen calling] Notification'
|
||||||
msg["From"] = defs.email_credentials["sender"]
|
msg["From"] = defs.email_credentials["sender"]
|
||||||
msg["To"] = user.user_email
|
msg["To"] = user_email
|
||||||
|
|
||||||
with open(os.path.join(current_path,'../msg/notification_template.html'), mode="r", encoding="utf-8") as file:
|
with open(os.path.join(current_path,'../msg/notification_template.html'), mode="r", encoding="utf-8") as file:
|
||||||
body = file.read()
|
body = file.read()
|
||||||
@ -180,7 +180,7 @@ def SendEmails(email_dict):
|
|||||||
body = body.replace("[[NOTIFICATION_ELEMENTS]]", replacement)
|
body = body.replace("[[NOTIFICATION_ELEMENTS]]", replacement)
|
||||||
msg.set_content(body, subtype='html', charset='utf-8', cte='8bit')
|
msg.set_content(body, subtype='html', charset='utf-8', cte='8bit')
|
||||||
|
|
||||||
conn.sendmail(defs.email_credentials["sender"], user.user_email, msg.as_string())
|
conn.sendmail(defs.email_credentials["sender"], user_email, msg.as_string())
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
logging.error(ex)
|
logging.error(ex)
|
||||||
@ -210,10 +210,10 @@ def SendNotifications():
|
|||||||
email_dict = dict()
|
email_dict = dict()
|
||||||
users_dict = dict()
|
users_dict = dict()
|
||||||
user_query = "SELECT * from user"
|
user_query = "SELECT * from user"
|
||||||
users = commands.query(user_query, model=model.User)
|
users = commands.query(user_query)
|
||||||
for participant in participants:
|
for participant in participants:
|
||||||
for user in users:
|
for user in users:
|
||||||
if user.participant_id == participant.id:
|
if user["participant_id"] == participant.id:
|
||||||
if not participant.id in users_dict:
|
if not participant.id in users_dict:
|
||||||
users_dict[participant.id] = []
|
users_dict[participant.id] = []
|
||||||
users_dict[participant.id].append(user)
|
users_dict[participant.id].append(user)
|
||||||
@ -225,33 +225,39 @@ def SendNotifications():
|
|||||||
p_query = "SELECT * from shipcall_participant_map where shipcall_id = ?id?"
|
p_query = "SELECT * from shipcall_participant_map where shipcall_id = ?id?"
|
||||||
assigned_participants = commands.query(p_query, model=model.ShipcallParticipantMap, param={"id":notification.shipcall_id})
|
assigned_participants = commands.query(p_query, model=model.ShipcallParticipantMap, param={"id":notification.shipcall_id})
|
||||||
for assigned_participant in assigned_participants:
|
for assigned_participant in assigned_participants:
|
||||||
|
if not assigned_participant.participant_id in users_dict:
|
||||||
|
continue
|
||||||
users = users_dict[assigned_participant.participant_id]
|
users = users_dict[assigned_participant.participant_id]
|
||||||
for user in users:
|
for user in users:
|
||||||
# send notification to user
|
# send notification to user
|
||||||
if user.notify_email:
|
if user["notify_email"]:
|
||||||
if user not in email_dict:
|
if user["user_email"] not in email_dict:
|
||||||
email_dict[user] = []
|
email_dict[user["user_email"]] = []
|
||||||
email_dict[user].append(notification)
|
if notification not in email_dict[user["user_email"]]:
|
||||||
if user.notify_whatsapp:
|
email_dict[user["user_email"]].append(notification)
|
||||||
|
if user["notify_whatsapp"]:
|
||||||
# TBD
|
# TBD
|
||||||
pass
|
pass
|
||||||
if user.notify_signal:
|
if user["notify_signal"]:
|
||||||
# TBD
|
# TBD
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
users = users_dict[notification.participant_id]
|
if notification.participant_id in users_dict:
|
||||||
for user in users:
|
users = users_dict[notification.participant_id]
|
||||||
# send notification to user
|
for user in users:
|
||||||
if user.notify_email and user.wants_notifications(notification.type):
|
user_notifications = model.bitflag_to_list(user["notify_event"])
|
||||||
if user not in email_dict:
|
# send notification to user
|
||||||
email_dict[user] = []
|
if user["notify_email"] and notification.type in user_notifications:
|
||||||
email_dict[user].append(notification)
|
if user["user_email"] not in email_dict:
|
||||||
if user.notify_whatsapp and user.wants_notifications(notification.type):
|
email_dict[user["user_email"]] = []
|
||||||
# TBD
|
if notification not in email_dict[user["user_email"]]:
|
||||||
pass
|
email_dict[user["user_email"]].append(notification)
|
||||||
if user.notify_signal and user.wants_notifications(notification.type):
|
if user["notify_whatsapp"] and notification.type in user_notifications:
|
||||||
# TBD
|
# TBD
|
||||||
pass
|
pass
|
||||||
|
if user["notify_signal"] and notification.type in user_notifications:
|
||||||
|
# TBD
|
||||||
|
pass
|
||||||
|
|
||||||
# mark as sent
|
# mark as sent
|
||||||
commands.execute("UPDATE notification SET level = 2 WHERE id = ?id?", param={"id":notification.id})
|
commands.execute("UPDATE notification SET level = 2 WHERE id = ?id?", param={"id":notification.id})
|
||||||
|
|||||||
@ -59,7 +59,7 @@ def create_validation_error_response(ex:ValidationError, status_code:int=400, cr
|
|||||||
|
|
||||||
if create_log:
|
if create_log:
|
||||||
logging.warning(ex) if ex is not None else logging.warning(message)
|
logging.warning(ex) if ex is not None else logging.warning(message)
|
||||||
print(ex) if ex is not None else print(message)
|
# print(ex) if ex is not None else print(message)
|
||||||
return (serialized_response, status_code)
|
return (serialized_response, status_code)
|
||||||
|
|
||||||
def create_werkzeug_error_response(ex:Forbidden, status_code:int=403, create_log:bool=True)->typing.Tuple[str,int]:
|
def create_werkzeug_error_response(ex:Forbidden, status_code:int=403, create_log:bool=True)->typing.Tuple[str,int]:
|
||||||
@ -71,7 +71,7 @@ def create_werkzeug_error_response(ex:Forbidden, status_code:int=403, create_log
|
|||||||
|
|
||||||
if create_log:
|
if create_log:
|
||||||
logging.warning(ex) if ex is not None else logging.warning(message)
|
logging.warning(ex) if ex is not None else logging.warning(message)
|
||||||
print(ex) if ex is not None else print(message)
|
# print(ex) if ex is not None else print(message)
|
||||||
return serialized_response, status_code
|
return serialized_response, status_code
|
||||||
|
|
||||||
def create_dynamic_exception_response(ex, status_code:int=400, message:typing.Optional[str]=None, create_log:bool=True):
|
def create_dynamic_exception_response(ex, status_code:int=400, message:typing.Optional[str]=None, create_log:bool=True):
|
||||||
@ -83,5 +83,5 @@ def create_dynamic_exception_response(ex, status_code:int=400, message:typing.Op
|
|||||||
|
|
||||||
if create_log:
|
if create_log:
|
||||||
logging.warning(ex) if ex is not None else logging.warning(message)
|
logging.warning(ex) if ex is not None else logging.warning(message)
|
||||||
print(ex) if ex is not None else print(message)
|
# print(ex) if ex is not None else print(message)
|
||||||
return (serialized_response, status_code)
|
return (serialized_response, status_code)
|
||||||
|
|||||||
@ -52,7 +52,8 @@ class ValidationRules(ValidationRuleFunctions):
|
|||||||
# 'translate' all error codes into readable, human-understandable format.
|
# 'translate' all error codes into readable, human-understandable format.
|
||||||
evaluation_results = [(state, self.describe_error_message(msg)) for (state, msg) in evaluation_results]
|
evaluation_results = [(state, self.describe_error_message(msg)) for (state, msg) in evaluation_results]
|
||||||
|
|
||||||
logging.info(f"Validation results for shipcall {shipcall.id}: {evaluation_results}")
|
if evaluation_results:
|
||||||
|
logging.info(f"Validation results for shipcall {shipcall.id}: {evaluation_results}")
|
||||||
|
|
||||||
# check, what the maximum state flag is and return it
|
# check, what the maximum state flag is and return it
|
||||||
evaluation_state = np.max(np.array([result[0].value for result in evaluation_results])) if len(evaluation_results)>0 else StatusFlags.GREEN.value
|
evaluation_state = np.max(np.array([result[0].value for result in evaluation_results])) if len(evaluation_results)>0 else StatusFlags.GREEN.value
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
sys.path.insert(0, '/var/www/brecal/src/server')
|
sys.path.insert(0, '/var/www/brecal_test/src/server')
|
||||||
sys.path.insert(0, '/var/www/venv/lib/python3.12/site-packages/')
|
sys.path.insert(0, '/var/www/venv/lib/python3.12/site-packages/')
|
||||||
|
|
||||||
import schedule
|
import schedule
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user