From 085a36802c08b4da5509d4ae99291e8ec4081c34 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Thu, 5 Jan 2017 07:06:31 +0000 Subject: [PATCH] NSW 3.3.4 (Korrekturen und HAZA angefangen) --- Stundensheet.xlsx | Bin 25566 -> 25645 bytes nsw/Source/SQL/Update_3.5.1_To_3.5.2.sql | 11 ++ .../bsmd.ExcelReadService/Confirmation.cs | 33 ++--- .../bsmd.ExcelReadService/ExcelReader.cs | 16 +++ nsw/Source/bsmd.ExcelReadService/Util.cs | 124 +++++++++++++++++- nsw/Source/bsmd.database/HAZ.cs | 22 +++- .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- 8 files changed, 184 insertions(+), 26 deletions(-) create mode 100644 nsw/Source/SQL/Update_3.5.1_To_3.5.2.sql diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index ac23dbbcaa5b0c8fee3526624ff78665e9091551..926b75dcb5e8146d45b35b1ba26dc53dd6f92a83 100644 GIT binary patch delta 13353 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 LAAjlpoALhujb7c| delta 13249 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 diff --git a/nsw/Source/SQL/Update_3.5.1_To_3.5.2.sql b/nsw/Source/SQL/Update_3.5.1_To_3.5.2.sql new file mode 100644 index 00000000..076701e3 --- /dev/null +++ b/nsw/Source/SQL/Update_3.5.1_To_3.5.2.sql @@ -0,0 +1,11 @@ +PRINT N'Altering [dbo].[HAZA]...'; +GO +ALTER TABLE [dbo].[HAZA] ADD [DPGContactFamilyName] NVARCHAR(64) NULL; +ALTER TABLE [dbo].[HAZA] ADD [DPGContactPhone] NVARCHAR(64) NULL; +GO + +PRINT N'Altering [dbo].[HAZD]...'; +GO +ALTER TABLE [dbo].[HAZD] ADD [DPGContactFamilyName] NVARCHAR(64) NULL; +ALTER TABLE [dbo].[HAZD] ADD [DPGContactPhone] NVARCHAR(64) NULL; +GO \ No newline at end of file diff --git a/nsw/Source/bsmd.ExcelReadService/Confirmation.cs b/nsw/Source/bsmd.ExcelReadService/Confirmation.cs index d5cee001..961bc471 100644 --- a/nsw/Source/bsmd.ExcelReadService/Confirmation.cs +++ b/nsw/Source/bsmd.ExcelReadService/Confirmation.cs @@ -25,9 +25,8 @@ namespace bsmd.ExcelReadService private int whiteColor = ColorTranslator.ToOle(Color.White); private List workbooks = new List(); - private List> nameDicts = new List>(); - private List templateNames = new List(); - private List> actualNameDict = null; + private List>> nameDicts = new List>>(); + private List templateNames = new List(); #region Construction @@ -52,7 +51,7 @@ namespace bsmd.ExcelReadService */ - Dictionary nameDict = new Dictionary(); + Dictionary> nameDict = new Dictionary>(); // hier müsste etwas hin das nur aus der eben geladenen Vorlage die Namen rauszieht.. @@ -67,7 +66,9 @@ namespace bsmd.ExcelReadService } else { - nameDict[workbookName.Name] = workbookName; + if (!nameDict.ContainsKey(workbookName.Name)) + nameDict[workbookName.Name] = new List(); + nameDict[workbookName.Name].Add(workbookName); } } @@ -150,23 +151,23 @@ namespace bsmd.ExcelReadService for(int i=0;i nameDict = this.nameDicts[i]; - - Name someName = null; + Dictionary> nameDict = this.nameDicts[i]; + if(nameDict.ContainsKey(lookup)) { try { - someName = nameDict[lookup]; - - Range range = someName.RefersToRange; - if (range != null) + foreach (Name someName in nameDict[lookup]) { - range.Interior.Color = this.ColorForState(state); - range.Value = value; + Range range = someName.RefersToRange; + if (range != null) + { + range.Interior.Color = this.ColorForState(state); + range.Value = value; + } + Marshal.ReleaseComObject(range); + _log.InfoFormat("Value {0} for lookup {1} OK", value, lookup); } - Marshal.ReleaseComObject(range); - _log.InfoFormat("Value {0} for lookup {1} OK", value, lookup); } catch(Exception ex) { diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs index fb2bcfa7..7fa18d1a 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs @@ -489,6 +489,22 @@ namespace bsmd.ExcelReadService result = tmpDouble; } } + + if ((result == null) && (val != null)) + { + try + { + { + double tmpDouble2 = val[1, 1]; + result = tmpDouble2; + } + } + catch (Exception) + { + // .. + } + } + if (result != null) { this.Conf.ConfirmNumber(lookup, result, ReadState.OK); diff --git a/nsw/Source/bsmd.ExcelReadService/Util.cs b/nsw/Source/bsmd.ExcelReadService/Util.cs index 72440ed4..46d40655 100644 --- a/nsw/Source/bsmd.ExcelReadService/Util.cs +++ b/nsw/Source/bsmd.ExcelReadService/Util.cs @@ -336,6 +336,111 @@ namespace bsmd.ExcelReadService #endregion + #region HAZA + + static void ScanHAZA(List messages, MessageCore messageCore, ExcelReader reader) + { + Message hazaMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.HAZA); + if(hazaMessage.Elements.Count == 0) + { + HAZ newHaza = new HAZ(); + newHaza.IsDeparture = false; + newHaza.MessageHeader = hazaMessage; + hazaMessage.Elements.Add(newHaza); + } + HAZ haza = hazaMessage.Elements[0] as HAZ; + + haza.DPGManifestOnBoardOnArrival = reader.ReadBoolean("HAZA.DPGManifestOnBoardOnArrival"); + haza.DPGContactFamilyName = reader.ReadText("HAZA.DPGContactFamilyName"); + reader.Conf.ConfirmText("HAZA.DPGContactFamilyName", haza.DPGContactFamilyName, haza.DPGContactFamilyName.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + haza.DPGContactPhone = reader.ReadText("HAZA.DPGContactPhone"); + reader.Conf.ConfirmText("HAZA.DPGContactPhone", haza.DPGContactPhone, haza.DPGContactPhone.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + haza.MOUBaltic = reader.ReadBoolean("HAZA.MOUBaltic"); + string shipClass = reader.ReadText("HAZA.INFShipClass"); + if(shipClass.IsNullOrEmpty()) + { + reader.Conf.ConfirmText("HAZA.INFShipClass", null, ExcelReader.ReadState.FAIL); + } + else + { + if (shipClass.Contains('1')) haza.INFShipClass = 1; + if (shipClass.Contains('2')) haza.INFShipClass = 2; + if (shipClass.Contains('3')) haza.INFShipClass = 3; + if (shipClass.Equals("none", StringComparison.OrdinalIgnoreCase)) haza.INFShipClass = 0; + reader.Conf.ConfirmText("HAZA.INFShipClass", shipClass, haza.INFShipClass.HasValue ? ExcelReader.ReadState.OK : ExcelReader.ReadState.WARN); + } + + // IMDG + + string imdg_unno = "HAZA.IMDG.UNNumber_{0}"; + string imdg_properShippingName = "HAZA.IMDG.ProperShippingName_{0}"; + string imdg_imoClass = "HAZA.IMDG.IMOClass_{0}"; + string imdg_packingGroup = "HAZA.IMDG.PackingGroup_{0}"; + string imdg_marinePollutant = "HAZA.IMDG.MarinePollutant_{0}"; + string imdg_flashpoint = "HAZA.IMDG.Flashpoint_CEL_{0}"; + string imdg_numberOfPackages = "HAZA.IMDG.NumberOfPackages_{0}"; + string imdg_packageType = "HAZA.IMDG.PackageType_{0}"; + string imdg_limitedQuantities = "HAZA.IMDG.LimitedQuantities_{0}"; + string imdg_exceptedQuantities = "HAZA.IMDG.ExceptedQuantities_{0}"; + string imdg_netQuantity = "HAZA.IMDG.NetQuantity_KGM_{0}"; + string imdg_grossQuantity = "HAZA.IMDG.GrossQuantity_KGM_{0}"; + string imdg_number = "HAZA.IMDG.Number_{0}"; + string imdg_stowagePosition = "HAZA.IMDG.StowagePosition_{0}"; + string imdg_portOfLoading = "HAZA.IMDG.PortOfLoading_{0}"; + string imdg_portOfDischarge = "HAZA.IMDG.PortOfDischarge_{0}"; + + for (int i = 1; i <= 10; i++) + { + + + } + + // IBC + for (int i = 1; i <= 5; i++) + { + + } + + // IGC + for (int i = 1; i <= 5; i++) + { + + } + + // IMSBC + for (int i = 1; i <= 5; i++) + { + + } + + // MARPOL + for (int i = 1; i <= 5; i++) + { + + } + + } + + #endregion + + #region HAZD + + static void ScanHAZD(List messages, MessageCore messageCore, ExcelReader reader) + { + Message hazdMessage = Util.GetMessageWithType(messages, messageCore, Message.NotificationClass.HAZD); + if (hazdMessage.Elements.Count == 0) + { + HAZ newHaza = new HAZ(); + newHaza.IsDeparture = true; + newHaza.MessageHeader = hazdMessage; + hazdMessage.Elements.Add(newHaza); + } + HAZ hazd = hazdMessage.Elements[0] as HAZ; + + } + + #endregion + #region INFO static void ScanINFO(List messages, MessageCore messageCore, ExcelReader reader) @@ -404,6 +509,10 @@ namespace bsmd.ExcelReadService } reader.Conf.ConfirmText("STAT.TransportMode", transportMode, stat.TransportMode.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + // Vessel Email as HerbergEmail sichern + messageCore.HerbergEmailContactReportingVessel = reader.ReadText("ShipMail"); + reader.Conf.ConfirmText("ShipMail", messageCore.HerbergEmailContactReportingVessel, messageCore.HerbergEmailContactReportingVessel.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + // wird nicht wieder entfernt (core ist auch da!) } @@ -426,7 +535,9 @@ namespace bsmd.ExcelReadService if (messageCore.IsTransit) noa_nod.ETAToKielCanal = messageCore.ETAKielCanal; else { + noa_nod.ETAToPortOfCall = messageCore.ETA; + reader.Conf.ConfirmDate("NOA_NOD.ETAToPortOfCall", noa_nod.ETAToPortOfCall, ExcelReader.ReadState.OK); for (int i = 1; i <= noa_nod.NumberOfExcelRows; i++) { @@ -502,6 +613,7 @@ namespace bsmd.ExcelReadService reader.Conf.ConfirmText("NOA_NOD.NextPort", nextPort, noa_nod.NextPort.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); noa_nod.ETDFromPortOfCall = reader.ReadDateTime("NOA_NOD.ETDDateFromPortOfCall", "NOA_NOD.ETDTimeFromPortOfCall"); + reader.Conf.ConfirmDate("NOA_NOD.ETDFromPortOfCall", noa_nod.ETDFromPortOfCall, ExcelReader.ReadState.OK); noa_nod.ETDFromLastPort = reader.ReadDateTime("NOA_NOD.ETDDateFromLastPort", "NOA_NOD.ETDTimeFromLastPort"); noa_nod.ETAToNextPort = reader.ReadDateTime("NOA_NOD.ETADateToNextPort", "NOA_NOD.ETATimeToNextPort"); // DK @@ -567,6 +679,7 @@ namespace bsmd.ExcelReadService was.WasteDisposalServiceProvider[0].WasteDisposalServiceProviderName = wastedispServProvName; was.WasteDisposalServiceProvider[0].WasteDisposalDelivery = was.WasteDisposalDelivery; } + reader.Conf.ConfirmText("WAS.WasteDisposalServiceProviderName", wastedispServProvName, wastedispServProvName.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); // Waste 1 - 15 for (int i = 1; i <= was.NumberOfExcelRows; i++) @@ -932,7 +1045,7 @@ namespace bsmd.ExcelReadService if (bkra.BunkerFuelType.IsNullOrEmpty() && !bkra.BunkerFuelQuantity_TNE.HasValue) reader.Conf.ConfirmNumber(lnQuantity, null, ExcelReader.ReadState.OK); // "WARN" Quantity falls Menge aber kein Type - if(bkra.BunkerFuelQuantity_TNE.HasValue && !bkra.BunkerFuelType.IsNullOrEmpty()) + if(bkra.BunkerFuelQuantity_TNE.HasValue && bkra.BunkerFuelType.IsNullOrEmpty()) { reader.Conf.ConfirmText(lnType, null, ExcelReader.ReadState.FAIL); reader.Conf.ConfirmNumber(lnQuantity, bkra.BunkerFuelQuantity_TNE, ExcelReader.ReadState.WARN); @@ -972,7 +1085,7 @@ namespace bsmd.ExcelReadService if (bkrd.BunkerFuelType.IsNullOrEmpty() && !bkrd.BunkerFuelQuantity_TNE.HasValue) reader.Conf.ConfirmNumber(lnQuantity, null, ExcelReader.ReadState.OK); // "WARN" Quantity falls Menge aber kein Type - if (bkrd.BunkerFuelQuantity_TNE.HasValue && !bkrd.BunkerFuelType.IsNullOrEmpty()) + if (bkrd.BunkerFuelQuantity_TNE.HasValue && bkrd.BunkerFuelType.IsNullOrEmpty()) { reader.Conf.ConfirmText(lnType, null, ExcelReader.ReadState.FAIL); reader.Conf.ConfirmNumber(lnQuantity, bkrd.BunkerFuelQuantity_TNE, ExcelReader.ReadState.WARN); @@ -1452,6 +1565,13 @@ namespace bsmd.ExcelReadService reader.SetConfirmation(Properties.Settings.Default.ConfirmationDE); reader.Conf.ConfirmText("ID", visitTransitId, ExcelReader.ReadState.OK); + + // copy poc/imo/eta to return sheet + poc = reader.ReadText("Visit.PortOfCall"); + reader.Conf.ConfirmText("Visit.PortOfCall", poc, ExcelReader.ReadState.OK); + imo = reader.ReadText("Visit.IMONumber"); + reader.Conf.ConfirmText("Visit.IMONumber", imo, ExcelReader.ReadState.OK); + eta = reader.ReadDateTime("NOA_NOD.ETADateToPortOfCall", "NOA_NOD.ETATimeToPortOfCall"); } else { diff --git a/nsw/Source/bsmd.database/HAZ.cs b/nsw/Source/bsmd.database/HAZ.cs index d05fe8c4..55f0fb80 100644 --- a/nsw/Source/bsmd.database/HAZ.cs +++ b/nsw/Source/bsmd.database/HAZ.cs @@ -57,6 +57,12 @@ namespace bsmd.database [ShowReport] public bool? DPGClassificationMARPOL_ANNEX_I { get; set; } + // DK + public string DPGContactFamilyName { get; set; } + + // DK + public string DPGContactPhone { get; set; } + public List IMDGPositions { get { return this.imdgPositions; } } public List IBCPositions { get { return this.ibcPositions; } } @@ -111,6 +117,8 @@ namespace bsmd.database scmd.Parameters.AddWithNullableValue("@P9", this.DPGClassificationMARPOL_ANNEX_I); scmd.Parameters.AddWithNullableValue("@P10", this.TransmissionType); scmd.Parameters.AddWithNullableValue("@P11", this.MOUBaltic); + scmd.Parameters.AddWithNullableValue("@P12", this.DPGContactFamilyName); + scmd.Parameters.AddWithNullableValue("@P13", this.DPGContactPhone); if (this.IsNew) { @@ -120,14 +128,14 @@ namespace bsmd.database { scmd.CommandText = string.Format("INSERT INTO {0} (Id, MessageHeaderId, NoDPGOnBoardOnDeparture, DPGManifestOnBoardOnDeparture, " + "INFShipClass, DPGClassificationIMDG, DPGClassificationIGC, DPGClassificationIBC, DPGClassificationIMSBC, " + - "DPGClassificationMARPOL_ANNEX_I, TransmissionType, MOUBaltic) VALUES (@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11)", + "DPGClassificationMARPOL_ANNEX_I, TransmissionType, MOUBaltic, DPGContactFamilyName, DPGContactPhone) VALUES (@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13)", this.Tablename); } else { scmd.CommandText = string.Format("INSERT INTO {0} (Id, MessageHeaderId, NoDPGOnBoardOnArrival, DPGManifestOnBoardOnArrival, " + "INFShipClass, DPGClassificationIMDG, DPGClassificationIGC, DPGClassificationIBC, DPGClassificationIMSBC, " + - "DPGClassificationMARPOL_ANNEX_I, TransmissionType, MOUBaltic) VALUES (@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11)", + "DPGClassificationMARPOL_ANNEX_I, TransmissionType, MOUBaltic, DPGContactFamilyName, DPGContactPhone) VALUES (@ID, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13)", this.Tablename); } } @@ -138,13 +146,13 @@ namespace bsmd.database { scmd.CommandText = string.Format("UPDATE {0} SET NODPGOnBoardOnDeparture = @P2, DPGManifestOnBoardOnDeparture = @P3, " + "INFShipClass = @P4, DPGClassificationIMDG = @P5, DPGClassificationIGC = @P6, DPGClassificationIBC = @P7, " + - "DPGClassificationIMSBC = @P8, DPGClassificationMARPOL_ANNEX_I = @P9, TransmissionType = @P10, MOUBaltic = @P11 WHERE Id = @ID", this.Tablename); + "DPGClassificationIMSBC = @P8, DPGClassificationMARPOL_ANNEX_I = @P9, TransmissionType = @P10, MOUBaltic = @P11, DPGContactFamilyName = @P12, DPGContactPhone = @P13 WHERE Id = @ID", this.Tablename); } else { scmd.CommandText = string.Format("UPDATE {0} SET NODPGOnBoardOnArrival = @P2, DPGManifestOnBoardOnArrival = @P3, " + "INFShipClass = @P4, DPGClassificationIMDG = @P5, DPGClassificationIGC = @P6, DPGClassificationIBC = @P7, " + - "DPGClassificationIMSBC = @P8, DPGClassificationMARPOL_ANNEX_I = @P9, TransmissionType = @P10, MOUBaltic = @P11 WHERE Id = @ID", this.Tablename); + "DPGClassificationIMSBC = @P8, DPGClassificationMARPOL_ANNEX_I = @P9, TransmissionType = @P10, MOUBaltic = @P11, DPGContactFamilyName = @P12, DPGContactPhone = @P13 WHERE Id = @ID", this.Tablename); } } } @@ -153,13 +161,13 @@ namespace bsmd.database { string query = string.Format("SELECT Id, NoDPGOnBoardOnArrival, DPGManifestOnBoardOnArrival, INFShipClass, " + "DPGClassificationIMDG, DPGClassificationIGC, DPGClassificationIBC, DPGClassificationIMSBC, " + - "DPGClassificationMARPOL_ANNEX_I, TransmissionType, MOUBaltic FROM {0} ", this.Tablename); + "DPGClassificationMARPOL_ANNEX_I, TransmissionType, MOUBaltic, DPGContactFamilyName, DPGContactPhone FROM {0} ", this.Tablename); if (this.IsDeparture) { query = string.Format("SELECT Id, NoDPGOnBoardOnDeparture, DPGManifestOnBoardOnDeparture, INFShipClass, " + "DPGClassificationIMDG, DPGClassificationIGC, DPGClassificationIBC, DPGClassificationIMSBC, " + - "DPGClassificationMARPOL_ANNEX_I, TransmissionType, MOUBaltic FROM {0} ", this.Tablename); + "DPGClassificationMARPOL_ANNEX_I, TransmissionType, MOUBaltic, DPGContactFamilyName, DPGContactPhone FROM {0} ", this.Tablename); } switch (filter) @@ -196,6 +204,8 @@ namespace bsmd.database if (!reader.IsDBNull(8)) haz.DPGClassificationMARPOL_ANNEX_I = reader.GetBoolean(8); if (!reader.IsDBNull(9)) haz.TransmissionType = reader.GetString(9); if (!reader.IsDBNull(10)) haz.MOUBaltic = reader.GetBoolean(10); + if (!reader.IsDBNull(11)) haz.DPGContactFamilyName = reader.GetString(11); + if (!reader.IsDBNull(12)) haz.DPGContactPhone = reader.GetString(12); result.Add(haz); } diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index e6f44653..7b32e2a6 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("Informatikbüro Daniel Schick")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("3.3.3")] +[assembly: AssemblyInformationalVersion("3.3.4")] [assembly: AssemblyCopyright("Copyright © 2014-2016 Informatikbüro Daniel Schick. All rights reserved.")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs index 1f983515..34da9674 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("3.3.3.*")] +[assembly: AssemblyVersion("3.3.4.*")]