From 0213e298420653821e71d9958106520527c51cfb Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Wed, 2 Nov 2022 07:41:21 +0100 Subject: [PATCH 01/21] updated deployment info --- misc/info_deployment.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/misc/info_deployment.txt b/misc/info_deployment.txt index 9f3364b7..37c08100 100644 --- a/misc/info_deployment.txt +++ b/misc/info_deployment.txt @@ -2,7 +2,8 @@ 2) Prüfen ob das ENI App logo richtig ist 3) VS: Publish: Folder Location und Url richtig auswählen 4) Signing: "Sign the ClickOnce manifests": Hier für Prod das Zertifikat -auswählen, das am 15.7.22 abläuft. Das Test Zertifikat läuft am 12.11.22 ab. +Schiffsmelder CA auswählen, das am 02/24 abläuft. Auswahl über "Select from Store.." -5) komplett neu bauen (clean!) -6) In Description bei Product name "ENI" statt "ENI Testversion" +5) Release Build einstellen +6) komplett neu bauen (clean!) +7) In Description bei Product name "ENI" statt "ENI Testversion" From 8711a8468642a515dd310404fa47b1fdd8954c75 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sat, 5 Nov 2022 13:29:10 +0100 Subject: [PATCH 02/21] =?UTF-8?q?CSR=20Request=20f=C3=BCr=20VServer:=20bsm?= =?UTF-8?q?d-emswe.eu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- misc/bsmd-emswe_eu.csr | 17 +++++++++++++++++ misc/bsmd-emswe_eu.key | 28 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 misc/bsmd-emswe_eu.csr create mode 100644 misc/bsmd-emswe_eu.key diff --git a/misc/bsmd-emswe_eu.csr b/misc/bsmd-emswe_eu.csr new file mode 100644 index 00000000..97a5d2f7 --- /dev/null +++ b/misc/bsmd-emswe_eu.csr @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICsDCCAZgCAQAwazELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJyZW1lbjEPMA0G +A1UEBwwGQnJlbWVuMSIwIAYDVQQKDBlCcmVtZXIgU2NoaWZmc21lbGRlZGllbnN0 +MRYwFAYDVQQDDA1ic21kLWVtc3dlLmV1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEApvboTA8dRaz1hBcv3y6v+CBIdE3jUPNqOsZAjGuD9+gpCFv9F/ve +r+kQGvfRCPTPTPk7FM4hC2TKGk6PwmshkWdru4c4S7mYJW3KGe7t0wIgv/g1FkUV +eR5sXl4zvHnBXuV+ciuqb8RVW7izuNHVVUFAVhUlGROBb2ERqW5Cq7JCUM68H6l6 +ZAW0yltrO0BSEV6UTxja3f9K4Sz1AcvXXxFeJGUoUZ9J83n3kS5vGyyjeqA3mz7j +NrkYxvXgRJHw4qBxnNtj0YkmwNPg/KFtNslsbUjvdA83s1dYIJA2YaoJPu+b/Nj0 +guUaNbxUcFXP7VxU9P1sj5/Nwu4yef2a9wIDAQABoAAwDQYJKoZIhvcNAQELBQAD +ggEBADXDUI9c6GI1hv4AB//E0RBD0aJzuM8hLCI5GDEkgwfhdTI/QOHTZI6G+TT5 +mq6AJgha67ZcOGnP7tr38YxNxGWmLOo+pRS9qTBc3A7ynuvvhKiaZtbhLSpDBgs1 +JQtMYOnvSOzmYSsUhwZl/ugvrTnA5oe453O8cRhFR4/IUzm2wjWrUhiY15fUtJq9 +MtBRmGHZ3P92e9K1KBvTtsmbmU1/YidVnTvjmItQKkg3Ga9M/Bech19IEQLFdNET +wA3Tn18anNSdB22Gzj6eyZYaEtSnpmfjaxZFJixF4r8h/sZY9KD93arRV5vWjKHX +tcUl76Jw2skPpMfG94Xd0sc9DrI= +-----END CERTIFICATE REQUEST----- diff --git a/misc/bsmd-emswe_eu.key b/misc/bsmd-emswe_eu.key new file mode 100644 index 00000000..2d6af019 --- /dev/null +++ b/misc/bsmd-emswe_eu.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCm9uhMDx1FrPWE +Fy/fLq/4IEh0TeNQ82o6xkCMa4P36CkIW/0X+96v6RAa99EI9M9M+TsUziELZMoa +To/CayGRZ2u7hzhLuZglbcoZ7u3TAiC/+DUWRRV5HmxeXjO8ecFe5X5yK6pvxFVb +uLO40dVVQUBWFSUZE4FvYRGpbkKrskJQzrwfqXpkBbTKW2s7QFIRXpRPGNrd/0rh +LPUBy9dfEV4kZShRn0nzefeRLm8bLKN6oDebPuM2uRjG9eBEkfDioHGc22PRiSbA +0+D8oW02yWxtSO90DzezV1ggkDZhqgk+75v82PSC5Ro1vFRwVc/tXFT0/WyPn83C +7jJ5/Zr3AgMBAAECggEAfEGCbaBN852ddflfmiP/t5Qm989DXepZY3ZJcXdOVj/D +0cHL4H6Eoru7TaaiPZ0bbbiJnJkvBHC069ENse3SpIioJ36hidGMhkZnwtcKzR9n +ShapQ3KUYXgfxDctH5YpL7txV/xhMh6WO9WAgwo+Tt1pyOahnkDi8gX2g/ZXzbh+ +3+LuY7QHUQSdmb/8IjAiY9e0uh7rscTiPOb3fH6Fucs5iCsyOMu20/Vri50WGNAK +c367ijMl5zSf0rAOXAdV7kQ6zOQ2FESRlRtGjeMhEEdty9ONgkrdGlyAuR878Kn3 +LR9TDBVmgrDUV1tGjUpq6pfePphIh2DNQ/EnKzF5OQKBgQDa/8Zq6zY6knzHXd/a +QfhAa46+ulztA9gG+qm9LU7PjF1yKgbaXLFuarRdKVd6JXCHk0aItWYz1ptuTKEV +AbN19hJViSRlZp2rMyRAxW44q6mH7Fd0zkEDcM/c489gULRDeEWcr5m0KJciLCXt +/epzS90pxGmWcUYbpEBIbOCjkwKBgQDDLIMnT5LmRLRbqZoZZlms9xl/kIFiiOTB +8O4tHAuaS2js1jSdz+eGM24lGDpMGznuloSLdVBMr4BVNEFLX6UFjr4L8mEtDlfg +Yn02fPKj05TuGN+VixpUq4n1WPXoE0/f2KziGxJGyDUgSiD6ySVDUNhAljJkRLuw +BuO6zLZRjQKBgQCY4cvrYg52b0MKjr8yB7G9jxiUj1dF4tQRczXBqfqFq3CkvTAR +inoXIgiNrMmzrKVVD/xCfZg+ggf5xScCmjBlHgaIjffJjgxtsoMRcIJUr4nnKJeZ +JE+AjmWdx69ChrSBEVpPWssLWPbA1V8ZOJROLtzTRpmLe8I8k7qIlPFxXwKBgQCb +FUSFuQIF/LO/Xg23fw9kk9fr9/wHOrVisbnfmDhT+vW9sxuOBkR262jrCsxP6xZm +Ua2yTp5mwNFdYq87YB11RA4Y2hiDP7Ft93R9Fl2K9bWSV6tZXXWnr8JodK65IJdI +TBhbdZ1ZJv6n0J9SBwCX86ZR88bIy6DDZ0YPCVkZhQKBgQCNX2wtDbkNHefJzvng +gf8lwSirsmbb+lKRH55bdvcC2T4JiyZnyUzQ4hc8UWYtpzL9uXGo0NMNe6rHHOM7 +fM66OcZDjM8jy5TZxj9qdKrghvGzKhDMl8dZK4V4njUVvFmERZ6QKkojswA660YN +uyCANbdzyFO0K6/8kP5Ms48BfA== +-----END PRIVATE KEY----- From db27fc2eb099fa4cc016eda7ae6d7ac84785c2ba Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sat, 5 Nov 2022 13:38:33 +0100 Subject: [PATCH 03/21] DigiCert signed Certificates for (www.)bsmd-emswe.eu --- misc/cert_bsmd-emswe.eu.crt | 35 +++++++++++++++++++++++++++++ misc/intermediate_bsmd-emswe.eu.crt | 27 ++++++++++++++++++++++ misc/root_bsmd-emswe.eu.crt | 22 ++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 misc/cert_bsmd-emswe.eu.crt create mode 100644 misc/intermediate_bsmd-emswe.eu.crt create mode 100644 misc/root_bsmd-emswe.eu.crt diff --git a/misc/cert_bsmd-emswe.eu.crt b/misc/cert_bsmd-emswe.eu.crt new file mode 100644 index 00000000..75da3c3a --- /dev/null +++ b/misc/cert_bsmd-emswe.eu.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGAzCCBOugAwIBAgIQBjhqmobDgXwAAkDwc4TUnDANBgkqhkiG9w0BAQsFADBu +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg +RFYgVExTIENBIC0gRzEwHhcNMjIxMTA1MDAwMDAwWhcNMjMxMTA1MjM1OTU5WjAY +MRYwFAYDVQQDEw1ic21kLWVtc3dlLmV1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEApvboTA8dRaz1hBcv3y6v+CBIdE3jUPNqOsZAjGuD9+gpCFv9F/ve +r+kQGvfRCPTPTPk7FM4hC2TKGk6PwmshkWdru4c4S7mYJW3KGe7t0wIgv/g1FkUV +eR5sXl4zvHnBXuV+ciuqb8RVW7izuNHVVUFAVhUlGROBb2ERqW5Cq7JCUM68H6l6 +ZAW0yltrO0BSEV6UTxja3f9K4Sz1AcvXXxFeJGUoUZ9J83n3kS5vGyyjeqA3mz7j +NrkYxvXgRJHw4qBxnNtj0YkmwNPg/KFtNslsbUjvdA83s1dYIJA2YaoJPu+b/Nj0 +guUaNbxUcFXP7VxU9P1sj5/Nwu4yef2a9wIDAQABo4IC8TCCAu0wHwYDVR0jBBgw +FoAUVXRPsnJP9WC6UNHX5lFcmgGHGtcwHQYDVR0OBBYEFBziyqorVnL5UZ+MmdHi +B2dRT2b3MCsGA1UdEQQkMCKCDWJzbWQtZW1zd2UuZXWCEXd3dy5ic21kLWVtc3dl +LmV1MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH +AwIwPgYDVR0gBDcwNTAzBgZngQwBAgEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3 +dy5kaWdpY2VydC5jb20vQ1BTMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGG +GGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2Nh +Y2VydHMuZGlnaWNlcnQuY29tL0VuY3J5cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1H +MS5jcnQwCQYDVR0TBAIwADCCAX8GCisGAQQB1nkCBAIEggFvBIIBawFpAHcA6D7Q +2j71BjUy51covIlryQPTy9ERa+zraeF3fW0GvW4AAAGER8N2hQAABAMASDBGAiEA +jFJjUH0ypQ2CZysGcxDsuQGWiXKC2YLwcdDi/TRVUmQCIQCQ8Z8eTutA7+z5GQeZ +sTDcWliMWwg0opagw6jGYeEJrwB1ALNzdwfhhFD4Y4bWBancEQlKeS2xZwwLh9zw +Aw55NqWaAAABhEfDdqkAAAQDAEYwRAIgfq4ILA3L781Wpl9MzwuZ4QwYfs9PXAcf +mwwVWIdp6M8CIF8mK3ze6v6Qomtw7Yyah1VdHKW2G6X0EVbMlb6iG1o1AHcAtz77 +JN+cTbp18jnFulj0bF38Qs96nzXEnh0JgSXttJkAAAGER8N2YAAABAMASDBGAiEA +lIYSvWBcBkpB++CkL+9DzhNl51hUgDYGupKgipq7gkkCIQDfwVzxkg9mJlpVpaGA +rQmVs8gtAJTa5Ko72522DGbjxzANBgkqhkiG9w0BAQsFAAOCAQEALOEtbhcB4kB9 +1rkD0hoTzmy2lOZ/EuBXnrKzqTxtgDcCX7WUY6shIZYKqD1mjsUNwsd4LuAsZ18X +1+dR2ynhfe0P2HFjrHFF29E5Vn8MWDuzmfW8OglJdz2uckh2VW0Q/ydjpEvBGyZe +Tzms0HnyLPJrCRM7T3hSlTff2DF5SZCOsDg53rex6bcg5jS9tZjcs17wZzm5Hw6J ++39eSN7nwnl5DxJ5sFd0lRaQ7UnDSB1/HWKQA9NEHuuE93sMb/yfWfxAcnFJQ8pn +mj1rVqoyAgB/jQT5Q/fXIfDM0IwaZcWWc4lu70nzbpqgXzPXrC0IdkuRtfMoDI88 +6u/DhTWwmA== +-----END CERTIFICATE----- diff --git a/misc/intermediate_bsmd-emswe.eu.crt b/misc/intermediate_bsmd-emswe.eu.crt new file mode 100644 index 00000000..a19e1487 --- /dev/null +++ b/misc/intermediate_bsmd-emswe.eu.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH +MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc +oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo +lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj +pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h +yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n +wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M +pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf +BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C +AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu +Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG +/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT +MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B +SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW +M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV +4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ +sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy +rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg== +-----END CERTIFICATE----- diff --git a/misc/root_bsmd-emswe.eu.crt b/misc/root_bsmd-emswe.eu.crt new file mode 100644 index 00000000..8f3aea9d --- /dev/null +++ b/misc/root_bsmd-emswe.eu.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- \ No newline at end of file From 9266fa90b4bea5997a667ec0447d3c3fa9309eae Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 5 Dec 2022 09:30:11 +0100 Subject: [PATCH 04/21] version increment --- bsmd.database/Properties/AssemblyProductInfo.cs | 2 +- bsmd.database/Properties/AssemblyProjectInfo.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bsmd.database/Properties/AssemblyProductInfo.cs b/bsmd.database/Properties/AssemblyProductInfo.cs index b432045f..500e1f5c 100644 --- a/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("schick Informatik")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("7.6.0")] +[assembly: AssemblyInformationalVersion("7.7.0")] [assembly: AssemblyCopyright("Copyright © 2014-2022 schick Informatik")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/bsmd.database/Properties/AssemblyProjectInfo.cs b/bsmd.database/Properties/AssemblyProjectInfo.cs index 61f6ea94..771af8fe 100644 --- a/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("7.6.0.*")] +[assembly: AssemblyVersion("7.7.0.*")] From 2522ec34616b5e9ee388eff506e18efecb9115db Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 5 Dec 2022 09:46:37 +0100 Subject: [PATCH 05/21] fixed validation for Canal transits (NOA_NOD) --- bsmd.database/NOA_NOD.cs | 63 ++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/bsmd.database/NOA_NOD.cs b/bsmd.database/NOA_NOD.cs index 1a348db2..5969dec3 100644 --- a/bsmd.database/NOA_NOD.cs +++ b/bsmd.database/NOA_NOD.cs @@ -256,34 +256,26 @@ namespace bsmd.database public override void Validate(List errors, List violations) { - if (this.GetValidationBlock() == ValidationBlock.BLOCK1) + if (this.GetValidationBlock() == ValidationBlock.BLOCK1) // VISIT { - if(this.ETDFromPortOfCall.HasValue && this.ETAToPortOfCall.HasValue && - (this.ETDFromPortOfCall < this.ETAToPortOfCall)) + if(this.ETDFromPortOfCall.HasValue && this.ETAToPortOfCall.HasValue && (this.ETDFromPortOfCall < this.ETAToPortOfCall)) errors.Add(RuleEngine.CreateError(ValidationCode.E121, "ETDFromPortOfCall implausible", this.ETDFromPortOfCall?.ToLocalTime().ToString(), this.Title, null, this.Tablename)); // 8.11.20 Validierung gegen ETA /ETD in der Vergangenheit if((this.ETAToPortOfCall < DateTime.Now) || (this.ETAToPortOfCall.HasValue && this.ETAToPortOfCall.Value.ToLocalTime().IsTimeEmpty())) { violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETAToPortOfCall: might be implausible", this.ETAToPortOfCall.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); - } - // NSW 7.1 ETDFromLastPort Pflichtfeld, wenn LastPort != ZZUKN - if(!this.LastPort.IsNullOrEmpty() && !this.LastPort.Equals("ZZUKN") && !this.ETDFromLastPort.HasValue) - { - errors.Add(RuleEngine.CreateError(ValidationCode.E125, "ETDFromLastPort must be provided for a given last port", "", this.Title, null, this.Tablename)); } - if((this.ETDFromLastPort < DateTime.Now.AddDays(-14)) || (this.ETDFromLastPort.HasValue && this.ETDFromLastPort.Value.ToLocalTime().IsTimeEmpty())) - { - violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETDFromLastPort: might be implausible", this.ETDFromLastPort.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); - } if ((this.ETDFromPortOfCall < DateTime.Now.AddDays(-14)) || (this.ETDFromPortOfCall > DateTime.Now.AddDays(14)) || (this.ETDFromPortOfCall.HasValue && this.ETDFromPortOfCall.Value.ToLocalTime().IsTimeEmpty())) { violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETDFromPortOfCall: might be implausible", this.ETDFromPortOfCall.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); } - if ((this.ETAToNextPort < DateTime.Now) || (this.ETAToNextPort > DateTime.Now.AddDays(14)) || (this.ETAToNextPort.HasValue && this.ETAToNextPort.Value.ToLocalTime().IsTimeEmpty())) - { - violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETAToNextPort: might be implausible", this.ETAToNextPort.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); - } + + if (this.ETDFromPortOfCall.HasValue && this.ETAToNextPort.HasValue && (this.NextPort?.Equals("ZZUKN") == false) && (this.ETAToNextPort <= ETDFromPortOfCall)) + errors.Add(RuleEngine.CreateError(ValidationCode.E122, "ETAToNextPort", null, this.Title, null, this.Tablename)); + + if (this.ETDFromLastPort.HasValue && this.ETAToPortOfCall.HasValue && (this.ETDFromLastPort >= this.ETAToPortOfCall)) + errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "ETDFromLastPort", null, this.Title, null, this.Tablename)); if (this.CallPurposes.IsNullOrEmpty()) { @@ -300,34 +292,47 @@ namespace bsmd.database } } } - else + else // TRANSIT { if (this.ETDFromKielCanal.HasValue && this.ETAToKielCanal.HasValue && (this.ETDFromKielCanal < this.ETAToKielCanal)) errors.Add(RuleEngine.CreateError(ValidationCode.E121, "ETDFromKielCanal implausible", this.ETDFromKielCanal.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); - if(this.ETDFromKielCanal.HasValue && this.ETDFromKielCanal.Value.ToLocalTime().IsTimeEmpty()) + if ((this.ETAToKielCanal < DateTime.Now) || (this.ETAToKielCanal.HasValue && this.ETAToKielCanal.Value.ToLocalTime().IsTimeEmpty())) + violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETAToKielCanal: might be implausible", this.ETAToKielCanal.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); + + if ((this.ETDFromKielCanal < DateTime.Now.AddDays(-14)) || (this.ETDFromKielCanal > DateTime.Now.AddDays(14)) || (this.ETDFromKielCanal.HasValue && this.ETDFromKielCanal.Value.ToLocalTime().IsTimeEmpty())) violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETDFromKielCanal: might be implausible", this.ETDFromKielCanal.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); - if(this.ETAToKielCanal.HasValue && this.ETAToKielCanal.Value.ToLocalTime().IsTimeEmpty()) - violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETAToKielCanal: might be implausible", this.ETAToKielCanal.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); + if (this.ETDFromKielCanal.HasValue && this.ETAToNextPort.HasValue && (this.NextPort?.Equals("ZZUKN") == false) && (this.ETAToNextPort <= ETDFromKielCanal)) + errors.Add(RuleEngine.CreateError(ValidationCode.E122, "ETAToNextPort", null, this.Title, null, this.Tablename)); + + if (this.ETDFromLastPort.HasValue && this.ETAToKielCanal.HasValue && (this.ETDFromLastPort >= this.ETAToKielCanal)) + errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "ETDFromLastPort", null, this.Title, null, this.Tablename)); } - if((this.LastPort?.Equals("ZZUKN") == true) && this.ETDFromLastPort.HasValue) - errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE_ZZUKN, "ETDFromLastPort cannot be set if ZZUKN", null, this.Title, null, this.Tablename)); + // NSW 7.1 ETDFromLastPort Pflichtfeld, wenn LastPort != ZZUKN + if (!this.LastPort.IsNullOrEmpty() && !this.LastPort.Equals("ZZUKN") && !this.ETDFromLastPort.HasValue) + { + errors.Add(RuleEngine.CreateError(ValidationCode.E125, "ETDFromLastPort must be provided for a given last port", "", this.Title, null, this.Tablename)); + } + if ((this.ETDFromLastPort < DateTime.Now.AddDays(-14)) || (this.ETDFromLastPort.HasValue && this.ETDFromLastPort.Value.ToLocalTime().IsTimeEmpty())) + { + violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETDFromLastPort: might be implausible", this.ETDFromLastPort.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); + } + if ((this.ETAToNextPort < DateTime.Now) || (this.ETAToNextPort > DateTime.Now.AddDays(14)) || (this.ETAToNextPort.HasValue && this.ETAToNextPort.Value.ToLocalTime().IsTimeEmpty())) + { + violations.Add(RuleEngine.CreateViolation(ValidationCode.TIME_IMPLAUSIBLE, "Check ETAToNextPort: might be implausible", this.ETAToNextPort.Value.ToLocalTime().ToString(), this.Title, null, this.Tablename)); + } - if (this.ETDFromPortOfCall.HasValue && this.ETAToNextPort.HasValue && (this.NextPort?.Equals("ZZUKN") == false) && - (this.ETAToNextPort <= ETDFromPortOfCall)) - errors.Add(RuleEngine.CreateError(ValidationCode.E122, "ETAToNextPort", null, this.Title, null, this.Tablename)); + if ((this.LastPort?.Equals("ZZUKN") == true) && this.ETDFromLastPort.HasValue) + errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE_ZZUKN, "ETDFromLastPort cannot be set if ZZUKN", null, this.Title, null, this.Tablename)); if ((this.NextPort?.Equals("ZZUKN") == false) && !this.ETAToNextPort.HasValue) errors.Add(RuleEngine.CreateError(ValidationCode.NOT_NULL, "ETAToNextPort missing", null, this.Title, null, this.Tablename)); if((this.NextPort?.Equals("ZZUKN") == true) && this.ETAToNextPort.HasValue) errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE_ZZUKN, "ETAToNextPort cannot be set if ZZUKN", null, this.Title, null, this.Tablename)); - - if (this.ETDFromLastPort.HasValue && this.ETAToPortOfCall.HasValue && (this.ETDFromLastPort >= this.ETAToPortOfCall)) - errors.Add(RuleEngine.CreateError(ValidationCode.IMPLAUSIBLE, "ETDFromLastPort", null, this.Title, null, this.Tablename)); - + } public override DatabaseEntity.ValidationBlock GetValidationBlock() From 32ede83fd26bf8d92cce8a97dc3754504dc98f23 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 9 Dec 2022 07:39:27 +0100 Subject: [PATCH 06/21] wrong formatting leads to DateTime Now in EditWasteReceiptDialog --- ENI2/Controls/EditWindowBase.cs | 4 +++- ENI2/ENI2.csproj | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ENI2/Controls/EditWindowBase.cs b/ENI2/Controls/EditWindowBase.cs index 0f287dcb..4512d3c1 100644 --- a/ENI2/Controls/EditWindowBase.cs +++ b/ENI2/Controls/EditWindowBase.cs @@ -109,6 +109,7 @@ namespace ENI2.Controls thePicker.Value = new DateTime(year, month, day, hour, minute, 0); } catch (FormatException) { } + catch (ArgumentOutOfRangeException) { thePicker.Value = DateTime.Now; } } } @@ -121,10 +122,11 @@ namespace ENI2.Controls string timevalText = rd.Match(thePicker.Text).Captures[0].Value; int day = Int32.Parse(timevalText.Substring(0, 2)); int month = Int32.Parse(timevalText.Substring(2, 2)); - int year = Int32.Parse(timevalText.Substring(4, 4)); + int year = Int32.Parse(timevalText.Substring(4, 4)); thePicker.SelectedDate = new DateTime(year, month, day, 0, 0, 0); } catch (FormatException) { } + catch (ArgumentOutOfRangeException) { thePicker.SelectedDate = DateTime.Now; } } } diff --git a/ENI2/ENI2.csproj b/ENI2/ENI2.csproj index 7e7fdc1a..d04528a1 100644 --- a/ENI2/ENI2.csproj +++ b/ENI2/ENI2.csproj @@ -84,7 +84,7 @@ - 94D98790E3B6C4CC9F4B57C8FD305E3225894DF8 + F2C2D0164244EC89955EF50201EE24C2A300FF0B true From 652644bcb073fe8d24353918540a4e116f3d1da3 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 9 Dec 2022 07:51:36 +0100 Subject: [PATCH 07/21] Abfangen und null setzen falls falsche Tastatureingabe (Datum, Datetime) --- ENI2/Controls/EditWindowBase.cs | 4 ++-- ENI2/DetailBaseControl.cs | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ENI2/Controls/EditWindowBase.cs b/ENI2/Controls/EditWindowBase.cs index 4512d3c1..29790786 100644 --- a/ENI2/Controls/EditWindowBase.cs +++ b/ENI2/Controls/EditWindowBase.cs @@ -109,7 +109,7 @@ namespace ENI2.Controls thePicker.Value = new DateTime(year, month, day, hour, minute, 0); } catch (FormatException) { } - catch (ArgumentOutOfRangeException) { thePicker.Value = DateTime.Now; } + catch (ArgumentOutOfRangeException) { thePicker.Value = null; } } } @@ -126,7 +126,7 @@ namespace ENI2.Controls thePicker.SelectedDate = new DateTime(year, month, day, 0, 0, 0); } catch (FormatException) { } - catch (ArgumentOutOfRangeException) { thePicker.SelectedDate = DateTime.Now; } + catch (ArgumentOutOfRangeException) { thePicker.SelectedDate = null; } } } diff --git a/ENI2/DetailBaseControl.cs b/ENI2/DetailBaseControl.cs index 70ecc986..1414ff28 100644 --- a/ENI2/DetailBaseControl.cs +++ b/ENI2/DetailBaseControl.cs @@ -298,7 +298,9 @@ namespace ENI2 int year = Int32.Parse(timevalText.Substring(4, 4)); thePicker.SelectedDate = new DateTime(year, month, day, 0, 0, 0); } - catch (FormatException) { } + catch (Exception) { + thePicker.SelectedDate = null; + } } } From 177835440cb6a392ae5369d06a6da86efec115ef Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 9 Dec 2022 08:02:52 +0100 Subject: [PATCH 08/21] =?UTF-8?q?defaults=20f=C3=BCr=20POBA/POBD=20beim=20?= =?UTF-8?q?Excel=20import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ENI2/Excel/ExcelUtil.cs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/ENI2/Excel/ExcelUtil.cs b/ENI2/Excel/ExcelUtil.cs index 70f27daf..c9d186fd 100644 --- a/ENI2/Excel/ExcelUtil.cs +++ b/ENI2/Excel/ExcelUtil.cs @@ -274,7 +274,7 @@ namespace ENI2.Excel { POBA poba = pobaMessage.Elements[0] as POBA; bpol.StowawaysOnBoard = (poba.TotalStowawaysOnBoardUponArrival ?? 0) > 0; - } + } bpol.DeleteElements(); @@ -331,6 +331,9 @@ namespace ENI2.Excel if (((poba.TotalPersonsOnBoardUponArrival ?? 0) == 0) && poba.IsNew) return false; + if (!poba.TotalPassengersOnBoardUponArrival.HasValue) poba.TotalPassengersOnBoardUponArrival = 0; + if (!poba.TotalStowawaysOnBoardUponArrival.HasValue) poba.TotalStowawaysOnBoardUponArrival = 0; + return true; } @@ -339,7 +342,7 @@ namespace ENI2.Excel #region POBD private static bool ScanPOBD(Message pobdMessage, ExcelReader reader) - { + { if(pobdMessage.Elements.Count == 0) { POBD newPobd = new POBD(); @@ -352,6 +355,9 @@ namespace ENI2.Excel if (((pobd.TotalPersonsOnBoardUponDeparture ?? 0) == 0) && pobd.IsNew) return false; + if (!pobd.TotalPassengersOnBoardUponDeparture.HasValue) pobd.TotalPassengersOnBoardUponDeparture = 0; + if (!pobd.TotalStowawaysOnBoardUponDeparture.HasValue) pobd.TotalStowawaysOnBoardUponDeparture = 0; + return true; } @@ -373,15 +379,15 @@ namespace ENI2.Excel haza.NoDPGOnBoardOnArrival = !reader.ReadBoolean("HAZA.DGOnBoard"); haza.DPGManifestOnBoardOnArrival = reader.ReadBoolean("HAZA.DPGManifestOnBoardOnArrival"); - haza.DPGContactFamilyName = reader.ReadText("HAZA.DPGContactFamilyName"); + haza.DPGContactFamilyName = reader.ReadText("HAZA.DPGContactFamilyName"); haza.DPGContactPhone = reader.ReadText("HAZA.DPGContactPhone"); haza.MOUBaltic = reader.ReadBoolean("HAZA.MOUBaltic"); string shipClass = reader.ReadText("HAZA.INFShipClass"); if(!shipClass.IsNullOrEmpty()) - { + { if (shipClass.Contains('1')) haza.INFShipClass = 0; if (shipClass.Contains('2')) haza.INFShipClass = 1; - if (shipClass.Contains('3')) haza.INFShipClass = 2; + if (shipClass.Contains('3')) haza.INFShipClass = 2; } #region IMDG @@ -1140,7 +1146,7 @@ namespace ENI2.Excel #region WAS private static bool ScanWAS(Message wasMessage, ExcelReader reader, bool isOldVersion) - { + { if (wasMessage.Elements.Count == 0) { WAS newWAS = new WAS(); @@ -1198,7 +1204,7 @@ namespace ENI2.Excel if (waste.WasteDescription.IsNullOrEmpty()) { if ((reader.Mode == ExcelReader.CountryMode.DE) && waste.IsDashWasteCode) - { + { waste.WasteDescription = "-"; } else if (reader.Mode == ExcelReader.CountryMode.DK) From bd93f984606051321953ecb1bf7c5f67d3f9e954 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 9 Dec 2022 09:07:15 +0100 Subject: [PATCH 09/21] =?UTF-8?q?neue=20Datumsformate=20(DE=20+=20EN)=20hi?= =?UTF-8?q?nzugef=C3=BCgt=20inkl.=20kurze=20Monatsnamen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ENI2/Excel/ExcelReader.cs | 40 +++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/ENI2/Excel/ExcelReader.cs b/ENI2/Excel/ExcelReader.cs index 55b7ed09..cfe44970 100644 --- a/ENI2/Excel/ExcelReader.cs +++ b/ENI2/Excel/ExcelReader.cs @@ -420,7 +420,7 @@ namespace ENI2.Excel { var val = _nameDict[lookup].RefersToRange.Value; if (val is DateTime) - { + { date = val; } else if (val is double) @@ -446,22 +446,37 @@ namespace ENI2.Excel date = tmpDate; } + if (date == null) + { + string[] formats = { "d/M/yyyy", "dd/M/yyyy", "d/MM/yyyy", "dd/MM/yyyy", "d/MMM/yyyy", "dd/MMM/yyyy" }; + if (DateTime.TryParseExact(val, formats, NumberFormatInfo.InvariantInfo, DateTimeStyles.None, out DateTime tmpDate)) + date = tmpDate; + } + + if (date == null) + { + CultureInfo en = CultureInfo.CreateSpecificCulture("en-US"); + string[] formats = { "d/M/yyyy", "dd/M/yyyy", "d/MM/yyyy", "dd/MM/yyyy", "d/MMM/yyyy", "dd/MMM/yyyy" }; + if (DateTime.TryParseExact(val, formats, en, DateTimeStyles.None, out DateTime tmpDate)) + return tmpDate; + } + if (date != null) { if ((date.Value < new DateTime(1899, 1, 1)) || (date.Value > new DateTime(2130, 1, 1))) { date = null; // this can't be right - } + } } } return date; } catch (Exception) - { + { _log.WarnFormat("error parsing datetime for lookup {0}", lookup); return null; - } + } } internal DateTime? ReadDateTime(string dateField, string timeField) @@ -690,19 +705,16 @@ namespace ENI2.Excel string dateString = ReadCellAsText(sheetName, range); if (dateString != null) { - CultureInfo provider = CultureInfo.InvariantCulture; - const string dateTimeFormat = "yyyy/MM/dd HH:mm"; - if (DateTime.TryParseExact(dateString, dateTimeFormat, provider, DateTimeStyles.None, out DateTime tmpDate)) - return tmpDate.ToUniversalTime(); - const string dateFormat = "yyyy/MM/dd"; - if (DateTime.TryParseExact(dateString, dateFormat, provider, DateTimeStyles.None, out DateTime tmpDate2)) + string[] formats = { "yyyy/MM/dd HH:mm", "yyyy/MM/dd", "dd.MM.yyyy", "d/M/yyyy", "dd/M/yyyy", "d/MM/yyyy", "dd/MM/yyyy", "d/MMM/yyyy", "dd/MMM/yyyy" }; + if (DateTime.TryParseExact(dateString, formats, NumberFormatInfo.InvariantInfo, DateTimeStyles.None, out DateTime tmpDate)) + return tmpDate; + CultureInfo en = CultureInfo.CreateSpecificCulture("en-US"); + if (DateTime.TryParseExact(dateString, formats, en, DateTimeStyles.None, out DateTime tmpDate2)) return tmpDate2; - const string dateFormat2 = "dd.MM.yyyy"; - if (DateTime.TryParseExact(dateString, dateFormat2, provider, DateTimeStyles.None, out DateTime tmpDate3)) - return tmpDate3; return null; } - else return null; + else + return null; } From c29a936fa2e1f2e8f07151f043914f8531732e79 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 9 Dec 2022 09:32:13 +0100 Subject: [PATCH 10/21] Neue Benutzerberechtigung 'Editor', die dazu verwendet wird, den Speichern Knopf der Templates freizuschalten (IsEnabled) --- .../PortCallDetailControl.xaml.cs | 16 +++++++++------- ENI2/EditControls/EditReportingPartyDialog.xaml | 2 ++ .../EditReportingPartyDialog.xaml.cs | 4 +++- ENI2/Properties/Resources.Designer.cs | 9 +++++++++ ENI2/Properties/Resources.resx | 3 +++ bsmd.database/ReportingParty.cs | 12 +++++++++++- 6 files changed, 37 insertions(+), 9 deletions(-) diff --git a/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs b/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs index 69190627..1d646158 100644 --- a/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs +++ b/ENI2/DetailViewControls/PortCallDetailControl.xaml.cs @@ -67,6 +67,8 @@ namespace ENI2.DetailViewControls this.RegisterTextboxChange(this.textBox_AgentPostalCode, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentStreetAndNumber, Message.NotificationClass.AGNT); this.RegisterTextboxChange(this.textBox_AgentCountry, Message.NotificationClass.AGNT); + + this.buttonSaveTemplate.IsEnabled = DBManager.Instance.GetReportingPartyDict()[App.UserId.Value].IsEditor; } public override void Initialize() @@ -308,21 +310,21 @@ namespace ENI2.DetailViewControls { if (MessageBox.Show("A template with this name already exists, overwrite?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.No) return; - } - + } + this._currentTemplate = createFromCurrentText(title, existingTemplate); - DBManager.Instance.Save(this._currentTemplate); - + DBManager.Instance.Save(this._currentTemplate); + if(existingTemplate == null) { comboBox_AgentTemplate.ItemsSource = null; _agntTemplates.Add(this._currentTemplate); _agntTemplates.Sort(); comboBox_AgentTemplate.ItemsSource = _agntTemplates; - } + } MessageBox.Show("Template saved", "OK", MessageBoxButton.OK, MessageBoxImage.Information); - } + } private void buttonUndoTemplate_Click(object sender, RoutedEventArgs e) { @@ -349,7 +351,7 @@ namespace ENI2.DetailViewControls this.textBox_AgentStreetAndNumber.GetBindingExpression(TextBox.TextProperty).UpdateSource(); this.buttonUndoTemplate.IsEnabled = false; // can't undo after undo - } + } private void buttonSetTemplate_Click(object sender, RoutedEventArgs e) { diff --git a/ENI2/EditControls/EditReportingPartyDialog.xaml b/ENI2/EditControls/EditReportingPartyDialog.xaml index 8944d277..2867e0b2 100644 --- a/ENI2/EditControls/EditReportingPartyDialog.xaml +++ b/ENI2/EditControls/EditReportingPartyDialog.xaml @@ -48,6 +48,7 @@