From b4a4f1167b011dc59dd79b59b4291faf0189384e Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 6 Jan 2017 15:29:57 +0000 Subject: [PATCH] =?UTF-8?q?Version=203.3.5:=20HAZA=20/=20HAZD=20jetzt=20vo?= =?UTF-8?q?llst=C3=A4ndig.=20Und=20er=20tippte=20sich=20nen=20Wolf=20Part?= =?UTF-8?q?=20II.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Stundensheet.xlsx | Bin 25645 -> 25680 bytes nsw/Source/bsmd.ExcelReadService/Util.cs | 500 +++++++++++++++++- .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- 4 files changed, 475 insertions(+), 29 deletions(-) diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 926b75dcb5e8146d45b35b1ba26dc53dd6f92a83..0c29c6a89d1db4c30e9846c3055d0c04058e6f61 100644 GIT binary patch delta 14045 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 JjsJV%{{xBrC8huX delta 14008 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 JZtzdz{{du>5Fr2n diff --git a/nsw/Source/bsmd.ExcelReadService/Util.cs b/nsw/Source/bsmd.ExcelReadService/Util.cs index 46d40655..ab17b025 100644 --- a/nsw/Source/bsmd.ExcelReadService/Util.cs +++ b/nsw/Source/bsmd.ExcelReadService/Util.cs @@ -62,9 +62,9 @@ namespace bsmd.ExcelReadService ScanTOWA(messages, messageCore, reader); - // HAZA + ScanHAZA(messages, messageCore, reader); - // HAZD + ScanHAZD(messages, messageCore, reader); } else @@ -121,9 +121,9 @@ namespace bsmd.ExcelReadService ScanTOWD(messages, messageCore, reader); - // HAZA + ScanHAZA(messages, messageCore, reader); - // HAZD + ScanHAZD(messages, messageCore, reader); } @@ -370,55 +370,243 @@ namespace bsmd.ExcelReadService 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}"; + // IMDG + #region IMDG for (int i = 1; i <= 10; i++) { + string imdg_unno = string.Format("HAZA.IMDG.UNNumber_{0}", i); + string imdg_properShippingName = string.Format("HAZA.IMDG.ProperShippingName_{0}", i); + string imdg_imoClass = string.Format("HAZA.IMDG.IMOClass_{0}", i); + string imdg_packingGroup = string.Format("HAZA.IMDG.PackingGroup_{0}", i); + string imdg_marinePollutant = string.Format("HAZA.IMDG.MarinePollutant_{0}", i); + string imdg_flashpoint = string.Format("HAZA.IMDG.Flashpoint_CEL_{0}", i); + string imdg_numberOfPackages = string.Format("HAZA.IMDG.NumberOfPackages_{0}", i); + string imdg_packageType = string.Format("HAZA.IMDG.PackageType_{0}", i); + string imdg_limitedQuantities = string.Format("HAZA.IMDG.LimitedQuantities_{0}", i); + string imdg_exceptedQuantities = string.Format("HAZA.IMDG.ExceptedQuantities_{0}", i); + string imdg_netQuantity = string.Format("HAZA.IMDG.NetQuantity_KGM_{0}", i); + string imdg_grossQuantity = string.Format("HAZA.IMDG.GrossQuantity_KGM_{0}", i); + string imdg_number = string.Format("HAZA.IMDG.Number_{0}", i); + string imdg_stowagePosition = string.Format("HAZA.IMDG.StowagePosition_{0}", i); + string imdg_portOfLoading = string.Format("HAZA.IMDG.PortOfLoading_{0}", i); + string imdg_portOfDischarge = string.Format("HAZA.IMDG.PortOfDischarge_{0}", i); + string unNumber = reader.ReadText(imdg_unno); + if(unNumber.IsNullOrEmpty()) // if unnumber is not set ignore this row + { + reader.Conf.ConfirmText(imdg_unno, null, ExcelReader.ReadState.WARN); + continue; + } + IMDGPosition imdgPosition = haza.GetIMDGPositionWithIdentifier(i.ToString()); + if(imdgPosition == null) + { + imdgPosition = new IMDGPosition(); + imdgPosition.HAZ = haza; + imdgPosition.Identifier = i.ToString(); + haza.IMDGPositions.Add(imdgPosition); + } + + imdgPosition.UNNumber = unNumber; + reader.Conf.ConfirmText(imdg_unno, unNumber, ExcelReader.ReadState.OK); + imdgPosition.ProperShippingName = reader.ReadText(imdg_properShippingName); + reader.Conf.ConfirmText(imdg_properShippingName, imdgPosition.ProperShippingName, imdgPosition.ProperShippingName.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.IMOClass = reader.ReadText(imdg_imoClass); + reader.Conf.ConfirmText(imdg_imoClass, imdgPosition.IMOClass, imdgPosition.IMOClass.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.PackingGroup = (byte?) reader.ReadNumber(imdg_packingGroup); + imdgPosition.MarinePollutant = reader.ReadBoolean(imdg_marinePollutant); + imdgPosition.Flashpoint_CEL = reader.ReadText(imdg_flashpoint); + reader.Conf.ConfirmText(imdg_flashpoint, imdgPosition.Flashpoint_CEL, imdgPosition.Flashpoint_CEL.IsNullOrEmpty() ? ExcelReader.ReadState.NONE : ExcelReader.ReadState.OK); + imdgPosition.NumberOfPackages = (int?)reader.ReadNumber(imdg_numberOfPackages); + imdgPosition.PackageType = reader.ReadText(imdg_packageType); + reader.Conf.ConfirmText(imdg_packageType, imdgPosition.PackageType, imdgPosition.PackageType.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.LimitedQuantities = reader.ReadBoolean(imdg_limitedQuantities); + imdgPosition.ExceptedQuantities = reader.ReadBoolean(imdg_exceptedQuantities); + imdgPosition.NetQuantity_KGM = reader.ReadNumber(imdg_netQuantity); + imdgPosition.GrossQuantity_KGM = reader.ReadNumber(imdg_grossQuantity); + imdgPosition.VehicleLicenseNumber = reader.ReadText(imdg_number); + reader.Conf.ConfirmText(imdg_number, imdgPosition.VehicleLicenseNumber, imdgPosition.VehicleLicenseNumber.IsNullOrEmpty() ? ExcelReader.ReadState.NONE : ExcelReader.ReadState.OK); + imdgPosition.StowagePosition = reader.ReadText(imdg_stowagePosition); + reader.Conf.ConfirmText(imdg_stowagePosition, imdgPosition.StowagePosition, imdgPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.PortOfLoading = reader.ReadText(imdg_portOfLoading); + reader.Conf.ConfirmText(imdg_portOfLoading, imdgPosition.PortOfLoading, imdgPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.PortOfDischarge = reader.ReadText(imdg_portOfDischarge); + reader.Conf.ConfirmText(imdg_portOfDischarge, imdgPosition.PortOfDischarge, imdgPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); } + #endregion + + #region IBC // IBC for (int i = 1; i <= 5; i++) { + string ibc_productName = string.Format("HAZA.IBC.ProductName_{0}", i); + string ibc_pollutionCategory = string.Format("HAZA.IBC.PollutionCategory_{0}", i); + string ibc_flash = string.Format("HAZA.IBC.FlashpointInformation_{0}", i); + string ibc_quantity = string.Format("HAZA.IBC.Quantity_KGM_{0}", i); + string ibc_stowagePosition = string.Format("HAZA.IBC.StowagePosition_{0}", i); + string ibc_portOfLoading = string.Format("HAZA.IBC.PortOfLoading_{0}", i); + string ibc_portOfDischarge = string.Format("HAZA.IBC.PortOfDischarge_{0}", i); + string productName = reader.ReadText(ibc_productName); + if(productName.IsNullOrEmpty()) + { + reader.Conf.ConfirmText(ibc_productName, null, ExcelReader.ReadState.WARN); + continue; + } + + IBCPosition ibcPosition = haza.GetIBCPositionWithIdentifier(i.ToString()); + if(ibcPosition == null) + { + ibcPosition = new IBCPosition(); + ibcPosition.Identifier = i.ToString(); + ibcPosition.HAZ = haza; + haza.IBCPositions.Add(ibcPosition); + } + + ibcPosition.ProductName = productName; + reader.Conf.ConfirmText(ibc_productName, productName, ExcelReader.ReadState.OK); + string pollutionCategory = reader.ReadText(ibc_pollutionCategory); + if(!pollutionCategory.IsNullOrEmpty()) + { + if (pollutionCategory.Equals("X", StringComparison.OrdinalIgnoreCase)) ibcPosition.PollutionCategory = 0; + if (pollutionCategory.Equals("Y", StringComparison.OrdinalIgnoreCase)) ibcPosition.PollutionCategory = 1; + if (pollutionCategory.Equals("Z", StringComparison.OrdinalIgnoreCase)) ibcPosition.PollutionCategory = 2; + if (pollutionCategory.Equals("OS", StringComparison.OrdinalIgnoreCase)) ibcPosition.PollutionCategory = 3; + } + reader.Conf.ConfirmText(ibc_pollutionCategory, pollutionCategory, ibcPosition.PollutionCategory.HasValue ? ExcelReader.ReadState.OK : ExcelReader.ReadState.FAIL); + + ibcPosition.Flashpoint_CEL = reader.ReadText(ibc_flash); + reader.Conf.ConfirmText(ibc_flash, ibcPosition.Flashpoint_CEL, ExcelReader.ReadState.NONE); + ibcPosition.Quantity_KGM = (int ?) reader.ReadNumber(ibc_quantity); + ibcPosition.StowagePosition = reader.ReadText(ibc_stowagePosition); + reader.Conf.ConfirmText(ibc_stowagePosition, ibcPosition.StowagePosition, ibcPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + ibcPosition.PortOfLoading = reader.ReadText(ibc_portOfLoading); + reader.Conf.ConfirmText(ibc_portOfLoading, ibcPosition.PortOfLoading, ibcPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + ibcPosition.PortOfDischarge = reader.ReadText(ibc_portOfDischarge); + reader.Conf.ConfirmText(ibc_portOfDischarge, ibcPosition.PortOfDischarge, ibcPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); } + #endregion + #region IGC // IGC for (int i = 1; i <= 5; i++) { + string igc_productName = string.Format("HAZA.IGC.ProductName_{0}", i); + string igc_quantity = string.Format("HAZA.IGC.Quantity_KGM_{0}", i); + string igc_stowagePosition = string.Format("HAZA.IGC.StowagePosition_{0}", i); + string igc_portOfLoading = string.Format("HAZA.IGC.PortOfLoading_{0}", i); + string igc_portOfDischarge = string.Format("HAZA.IGC.PortOfDischarge_{0}", i); + string productName = reader.ReadText(igc_productName); + if(productName.IsNullOrEmpty()) + { + reader.Conf.ConfirmText(igc_productName, null, ExcelReader.ReadState.WARN); + continue; + } + + IGCPosition igcPosition = haza.GetIGCPositionWithIdentifier(i.ToString()); + if(igcPosition == null) + { + igcPosition = new IGCPosition(); + igcPosition.Identifier = i.ToString(); + igcPosition.HAZ = haza; + haza.IGCPositions.Add(igcPosition); + } + + igcPosition.ProductName = productName; + reader.Conf.ConfirmText(igc_productName, productName, ExcelReader.ReadState.OK); + igcPosition.Quantity_KGM = reader.ReadNumber(igc_quantity); + igcPosition.StowagePosition = reader.ReadText(igc_stowagePosition); + reader.Conf.ConfirmText(igc_stowagePosition, igcPosition.StowagePosition, igcPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + igcPosition.PortOfLoading = reader.ReadText(igc_portOfLoading); + reader.Conf.ConfirmText(igc_portOfLoading, igcPosition.PortOfLoading, igcPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + igcPosition.PortOfDischarge = reader.ReadText(igc_portOfDischarge); + reader.Conf.ConfirmText(igc_portOfDischarge, igcPosition.PortOfDischarge, igcPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); } + #endregion + #region IMSBC // IMSBC for (int i = 1; i <= 5; i++) { + string imsbc_bcsn = string.Format("HAZA.IMSBC.BulkCargoShippingName_{0}", i); + string imsbc_mhb = string.Format("HAZA.IMSBC.MHB_{0}", i); + string imsbc_quantity = string.Format("HAZA.IMSBC.Quantity_KGM_{0}", i); + string imsbc_stowagePosition = string.Format("HAZA.IMSBC.StowagePosition_{0}", i); + string imsbc_portOfLoading = string.Format("HAZA.IMSBC.PortOfLoading_{0}", i); + string imsbc_portOfDischarge = string.Format("HAZA.IMSBC.PortOfDischarge_{0}", i); + string bcsn = reader.ReadText(imsbc_bcsn); + if(bcsn.IsNullOrEmpty()) + { + reader.Conf.ConfirmText(imsbc_bcsn, null, ExcelReader.ReadState.WARN); + continue; + } + + IMSBCPosition imsbcPosition = haza.GetIMSBCPositionWithIdentifier(i.ToString()); + if(imsbcPosition == null) + { + imsbcPosition = new IMSBCPosition(); + imsbcPosition.Identifier = i.ToString(); + imsbcPosition.HAZ = haza; + haza.IMSBCPositions.Add(imsbcPosition); + } + + imsbcPosition.BulkCargoShippingName = bcsn; + reader.Conf.ConfirmText(imsbc_bcsn, bcsn, ExcelReader.ReadState.OK); + imsbcPosition.MHB = reader.ReadBoolean(imsbc_mhb); + imsbcPosition.Quantity_KGM = reader.ReadNumber(imsbc_quantity); + imsbcPosition.StowagePosition = reader.ReadText(imsbc_stowagePosition); + reader.Conf.ConfirmText(imsbc_stowagePosition, imsbcPosition.StowagePosition, imsbcPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imsbcPosition.PortOfLoading = reader.ReadText(imsbc_portOfLoading); + reader.Conf.ConfirmText(imsbc_portOfLoading, imsbcPosition.PortOfLoading, imsbcPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imsbcPosition.PortOfDischarge = reader.ReadText(imsbc_portOfDischarge); + reader.Conf.ConfirmText(imsbc_portOfDischarge, imsbcPosition.PortOfDischarge, imsbcPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); } + #endregion + #region MARPOL // MARPOL for (int i = 1; i <= 5; i++) { + string marpol_name = string.Format("HAZA.MARPOL.Name_{0}", i); + string marpol_flash = string.Format("HAZA.MARPOL.Flashpoint_CEL_{0}", i); + string marpol_quantity = string.Format("HAZA.MARPOL.Quantity_KGM_{0}", i); + string marpol_stowagePosition = string.Format("HAZA.MARPOL.StowagePosition_{0}", i); + string marpol_portOfLoading = string.Format("HAZA.MARPOL.PortOfLoading_{0}", i); + string marpol_portOfDischarge = string.Format("HAZA.MARPOL.PortOfDischarge_{0}", i); + string name = reader.ReadText(marpol_name); + if(name.IsNullOrEmpty()) + { + reader.Conf.ConfirmText(marpol_name, null, ExcelReader.ReadState.WARN); + continue; + } + + MARPOL_Annex_I_Position marpolPosition = haza.GetMARPOLPositionWithIdentifier(i.ToString()); + if(marpolPosition == null) + { + marpolPosition = new MARPOL_Annex_I_Position(); + marpolPosition.Identifier = i.ToString(); + marpolPosition.HAZ = haza; + haza.MARPOLPositions.Add(marpolPosition); + } + + marpolPosition.Name = name; + reader.Conf.ConfirmText(marpol_name, name, ExcelReader.ReadState.OK); + marpolPosition.Flashpoint_CEL = reader.ReadText(marpol_flash); + reader.Conf.ConfirmText(marpol_flash, marpolPosition.Flashpoint_CEL, marpolPosition.Flashpoint_CEL.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + marpolPosition.Quantity_KGM = reader.ReadNumber(marpol_quantity); + marpolPosition.StowagePosition = reader.ReadText(marpol_stowagePosition); + reader.Conf.ConfirmText(marpol_stowagePosition, marpolPosition.StowagePosition, marpolPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + marpolPosition.PortOfLoading = reader.ReadText(marpol_portOfLoading); + reader.Conf.ConfirmText(marpol_portOfLoading, marpolPosition.PortOfLoading, marpolPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + marpolPosition.PortOfDischarge = reader.ReadText(marpol_portOfDischarge); + reader.Conf.ConfirmText(marpol_portOfDischarge, marpolPosition.PortOfDischarge, marpolPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); } - + #endregion } #endregion @@ -430,13 +618,271 @@ namespace bsmd.ExcelReadService 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 newHazd = new HAZ(); + newHazd.IsDeparture = true; + newHazd.MessageHeader = hazdMessage; + hazdMessage.Elements.Add(newHazd); } HAZ hazd = hazdMessage.Elements[0] as HAZ; + hazd.DPGManifestOnBoardOnArrival = reader.ReadBoolean("HAZD.DPGManifestOnBoardOnDeparture"); + hazd.DPGContactFamilyName = reader.ReadText("HAZD.DPGContactFamilyName"); + reader.Conf.ConfirmText("HAZD.DPGContactFamilyName", hazd.DPGContactFamilyName, hazd.DPGContactFamilyName.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + hazd.DPGContactPhone = reader.ReadText("HAZD.DPGContactPhone"); + reader.Conf.ConfirmText("HAZD.DPGContactPhone", hazd.DPGContactPhone, hazd.DPGContactPhone.IsNullOrEmpty() ? ExcelReader.ReadState.WARN : ExcelReader.ReadState.OK); + hazd.MOUBaltic = reader.ReadBoolean("HAZD.MOUBaltic"); + string shipClass = reader.ReadText("HAZD.INFShipClass"); + if (shipClass.IsNullOrEmpty()) + { + reader.Conf.ConfirmText("HAZD.INFShipClass", null, ExcelReader.ReadState.FAIL); + } + else + { + if (shipClass.Contains('1')) hazd.INFShipClass = 1; + if (shipClass.Contains('2')) hazd.INFShipClass = 2; + if (shipClass.Contains('3')) hazd.INFShipClass = 3; + if (shipClass.Equals("none", StringComparison.OrdinalIgnoreCase)) hazd.INFShipClass = 0; + reader.Conf.ConfirmText("HAZD.INFShipClass", shipClass, hazd.INFShipClass.HasValue ? ExcelReader.ReadState.OK : ExcelReader.ReadState.WARN); + } + + // IMDG + #region IMDG + + for (int i = 1; i <= 10; i++) + { + string imdg_unno = string.Format("HAZD.IMDG.UNNumber_{0}", i); + string imdg_properShippingName = string.Format("HAZD.IMDG.ProperShippingName_{0}", i); + string imdg_imoClass = string.Format("HAZD.IMDG.IMOClass_{0}", i); + string imdg_packingGroup = string.Format("HAZD.IMDG.PackingGroup_{0}", i); + string imdg_marinePollutant = string.Format("HAZD.IMDG.MarinePollutant_{0}", i); + string imdg_flashpoint = string.Format("HAZD.IMDG.Flashpoint_CEL_{0}", i); + string imdg_numberOfPackages = string.Format("HAZD.IMDG.NumberOfPackages_{0}", i); + string imdg_packageType = string.Format("HAZD.IMDG.PackageType_{0}", i); + string imdg_limitedQuantities = string.Format("HAZD.IMDG.LimitedQuantities_{0}", i); + string imdg_exceptedQuantities = string.Format("HAZD.IMDG.ExceptedQuantities_{0}", i); + string imdg_netQuantity = string.Format("HAZD.IMDG.NetQuantity_KGM_{0}", i); + string imdg_grossQuantity = string.Format("HAZD.IMDG.GrossQuantity_KGM_{0}", i); + string imdg_number = string.Format("HAZD.IMDG.Number_{0}", i); + string imdg_stowagePosition = string.Format("HAZD.IMDG.StowagePosition_{0}", i); + string imdg_portOfLoading = string.Format("HAZD.IMDG.PortOfLoading_{0}", i); + string imdg_portOfDischarge = string.Format("HAZD.IMDG.PortOfDischarge_{0}", i); + + string unNumber = reader.ReadText(imdg_unno); + if (unNumber.IsNullOrEmpty()) // if unnumber is not set ignore this row + { + reader.Conf.ConfirmText(imdg_unno, null, ExcelReader.ReadState.WARN); + continue; + } + + IMDGPosition imdgPosition = hazd.GetIMDGPositionWithIdentifier(i.ToString()); + if (imdgPosition == null) + { + imdgPosition = new IMDGPosition(); + imdgPosition.HAZ = hazd; + imdgPosition.Identifier = i.ToString(); + hazd.IMDGPositions.Add(imdgPosition); + } + + imdgPosition.UNNumber = unNumber; + reader.Conf.ConfirmText(imdg_unno, unNumber, ExcelReader.ReadState.OK); + imdgPosition.ProperShippingName = reader.ReadText(imdg_properShippingName); + reader.Conf.ConfirmText(imdg_properShippingName, imdgPosition.ProperShippingName, imdgPosition.ProperShippingName.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.IMOClass = reader.ReadText(imdg_imoClass); + reader.Conf.ConfirmText(imdg_imoClass, imdgPosition.IMOClass, imdgPosition.IMOClass.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.PackingGroup = (byte?)reader.ReadNumber(imdg_packingGroup); + imdgPosition.MarinePollutant = reader.ReadBoolean(imdg_marinePollutant); + imdgPosition.Flashpoint_CEL = reader.ReadText(imdg_flashpoint); + reader.Conf.ConfirmText(imdg_flashpoint, imdgPosition.Flashpoint_CEL, imdgPosition.Flashpoint_CEL.IsNullOrEmpty() ? ExcelReader.ReadState.NONE : ExcelReader.ReadState.OK); + imdgPosition.NumberOfPackages = (int?)reader.ReadNumber(imdg_numberOfPackages); + imdgPosition.PackageType = reader.ReadText(imdg_packageType); + reader.Conf.ConfirmText(imdg_packageType, imdgPosition.PackageType, imdgPosition.PackageType.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.LimitedQuantities = reader.ReadBoolean(imdg_limitedQuantities); + imdgPosition.ExceptedQuantities = reader.ReadBoolean(imdg_exceptedQuantities); + imdgPosition.NetQuantity_KGM = reader.ReadNumber(imdg_netQuantity); + imdgPosition.GrossQuantity_KGM = reader.ReadNumber(imdg_grossQuantity); + imdgPosition.VehicleLicenseNumber = reader.ReadText(imdg_number); + reader.Conf.ConfirmText(imdg_number, imdgPosition.VehicleLicenseNumber, imdgPosition.VehicleLicenseNumber.IsNullOrEmpty() ? ExcelReader.ReadState.NONE : ExcelReader.ReadState.OK); + imdgPosition.StowagePosition = reader.ReadText(imdg_stowagePosition); + reader.Conf.ConfirmText(imdg_stowagePosition, imdgPosition.StowagePosition, imdgPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.PortOfLoading = reader.ReadText(imdg_portOfLoading); + reader.Conf.ConfirmText(imdg_portOfLoading, imdgPosition.PortOfLoading, imdgPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imdgPosition.PortOfDischarge = reader.ReadText(imdg_portOfDischarge); + reader.Conf.ConfirmText(imdg_portOfDischarge, imdgPosition.PortOfDischarge, imdgPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + } + + #endregion + + #region IBC + // IBC + for (int i = 1; i <= 5; i++) + { + string ibc_productName = string.Format("HAZD.IBC.ProductName_{0}", i); + string ibc_pollutionCategory = string.Format("HAZD.IBC.PollutionCategory_{0}", i); + string ibc_flash = string.Format("HAZD.IBC.FlashpointInformation_{0}", i); + string ibc_quantity = string.Format("HAZD.IBC.Quantity_KGM_{0}", i); + string ibc_stowagePosition = string.Format("HAZD.IBC.StowagePosition_{0}", i); + string ibc_portOfLoading = string.Format("HAZD.IBC.PortOfLoading_{0}", i); + string ibc_portOfDischarge = string.Format("HAZD.IBC.PortOfDischarge_{0}", i); + + string productName = reader.ReadText(ibc_productName); + if (productName.IsNullOrEmpty()) + { + reader.Conf.ConfirmText(ibc_productName, null, ExcelReader.ReadState.WARN); + continue; + } + + IBCPosition ibcPosition = hazd.GetIBCPositionWithIdentifier(i.ToString()); + if (ibcPosition == null) + { + ibcPosition = new IBCPosition(); + ibcPosition.Identifier = i.ToString(); + ibcPosition.HAZ = hazd; + hazd.IBCPositions.Add(ibcPosition); + } + + ibcPosition.ProductName = productName; + reader.Conf.ConfirmText(ibc_productName, productName, ExcelReader.ReadState.OK); + string pollutionCategory = reader.ReadText(ibc_pollutionCategory); + if (!pollutionCategory.IsNullOrEmpty()) + { + if (pollutionCategory.Equals("X", StringComparison.OrdinalIgnoreCase)) ibcPosition.PollutionCategory = 0; + if (pollutionCategory.Equals("Y", StringComparison.OrdinalIgnoreCase)) ibcPosition.PollutionCategory = 1; + if (pollutionCategory.Equals("Z", StringComparison.OrdinalIgnoreCase)) ibcPosition.PollutionCategory = 2; + if (pollutionCategory.Equals("OS", StringComparison.OrdinalIgnoreCase)) ibcPosition.PollutionCategory = 3; + } + reader.Conf.ConfirmText(ibc_pollutionCategory, pollutionCategory, ibcPosition.PollutionCategory.HasValue ? ExcelReader.ReadState.OK : ExcelReader.ReadState.FAIL); + + ibcPosition.Flashpoint_CEL = reader.ReadText(ibc_flash); + reader.Conf.ConfirmText(ibc_flash, ibcPosition.Flashpoint_CEL, ExcelReader.ReadState.NONE); + ibcPosition.Quantity_KGM = (int?)reader.ReadNumber(ibc_quantity); + ibcPosition.StowagePosition = reader.ReadText(ibc_stowagePosition); + reader.Conf.ConfirmText(ibc_stowagePosition, ibcPosition.StowagePosition, ibcPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + ibcPosition.PortOfLoading = reader.ReadText(ibc_portOfLoading); + reader.Conf.ConfirmText(ibc_portOfLoading, ibcPosition.PortOfLoading, ibcPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + ibcPosition.PortOfDischarge = reader.ReadText(ibc_portOfDischarge); + reader.Conf.ConfirmText(ibc_portOfDischarge, ibcPosition.PortOfDischarge, ibcPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + } + #endregion + + #region IGC + // IGC + for (int i = 1; i <= 5; i++) + { + string igc_productName = string.Format("HAZD.IGC.ProductName_{0}", i); + string igc_quantity = string.Format("HAZD.IGC.Quantity_KGM_{0}", i); + string igc_stowagePosition = string.Format("HAZD.IGC.StowagePosition_{0}", i); + string igc_portOfLoading = string.Format("HAZD.IGC.PortOfLoading_{0}", i); + string igc_portOfDischarge = string.Format("HAZD.IGC.PortOfDischarge_{0}", i); + + string productName = reader.ReadText(igc_productName); + if (productName.IsNullOrEmpty()) + { + reader.Conf.ConfirmText(igc_productName, null, ExcelReader.ReadState.WARN); + continue; + } + + IGCPosition igcPosition = hazd.GetIGCPositionWithIdentifier(i.ToString()); + if (igcPosition == null) + { + igcPosition = new IGCPosition(); + igcPosition.Identifier = i.ToString(); + igcPosition.HAZ = hazd; + hazd.IGCPositions.Add(igcPosition); + } + + igcPosition.ProductName = productName; + reader.Conf.ConfirmText(igc_productName, productName, ExcelReader.ReadState.OK); + igcPosition.Quantity_KGM = reader.ReadNumber(igc_quantity); + igcPosition.StowagePosition = reader.ReadText(igc_stowagePosition); + reader.Conf.ConfirmText(igc_stowagePosition, igcPosition.StowagePosition, igcPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + igcPosition.PortOfLoading = reader.ReadText(igc_portOfLoading); + reader.Conf.ConfirmText(igc_portOfLoading, igcPosition.PortOfLoading, igcPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + igcPosition.PortOfDischarge = reader.ReadText(igc_portOfDischarge); + reader.Conf.ConfirmText(igc_portOfDischarge, igcPosition.PortOfDischarge, igcPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + } + #endregion + + #region IMSBC + // IMSBC + for (int i = 1; i <= 5; i++) + { + string imsbc_bcsn = string.Format("HAZD.IMSBC.BulkCargoShippingName_{0}", i); + string imsbc_mhb = string.Format("HAZD.IMSBC.MHB_{0}", i); + string imsbc_quantity = string.Format("HAZD.IMSBC.Quantity_KGM_{0}", i); + string imsbc_stowagePosition = string.Format("HAZD.IMSBC.StowagePosition_{0}", i); + string imsbc_portOfLoading = string.Format("HAZD.IMSBC.PortOfLoading_{0}", i); + string imsbc_portOfDischarge = string.Format("HAZD.IMSBC.PortOfDischarge_{0}", i); + + string bcsn = reader.ReadText(imsbc_bcsn); + if (bcsn.IsNullOrEmpty()) + { + reader.Conf.ConfirmText(imsbc_bcsn, null, ExcelReader.ReadState.WARN); + continue; + } + + IMSBCPosition imsbcPosition = hazd.GetIMSBCPositionWithIdentifier(i.ToString()); + if (imsbcPosition == null) + { + imsbcPosition = new IMSBCPosition(); + imsbcPosition.Identifier = i.ToString(); + imsbcPosition.HAZ = hazd; + hazd.IMSBCPositions.Add(imsbcPosition); + } + + imsbcPosition.BulkCargoShippingName = bcsn; + reader.Conf.ConfirmText(imsbc_bcsn, bcsn, ExcelReader.ReadState.OK); + imsbcPosition.MHB = reader.ReadBoolean(imsbc_mhb); + imsbcPosition.Quantity_KGM = reader.ReadNumber(imsbc_quantity); + imsbcPosition.StowagePosition = reader.ReadText(imsbc_stowagePosition); + reader.Conf.ConfirmText(imsbc_stowagePosition, imsbcPosition.StowagePosition, imsbcPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imsbcPosition.PortOfLoading = reader.ReadText(imsbc_portOfLoading); + reader.Conf.ConfirmText(imsbc_portOfLoading, imsbcPosition.PortOfLoading, imsbcPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + imsbcPosition.PortOfDischarge = reader.ReadText(imsbc_portOfDischarge); + reader.Conf.ConfirmText(imsbc_portOfDischarge, imsbcPosition.PortOfDischarge, imsbcPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + } + #endregion + + #region MARPOL + // MARPOL + for (int i = 1; i <= 5; i++) + { + string marpol_name = string.Format("HAZD.MARPOL.Name_{0}", i); + string marpol_flash = string.Format("HAZD.MARPOL.Flashpoint_CEL_{0}", i); + string marpol_quantity = string.Format("HAZD.MARPOL.Quantity_KGM_{0}", i); + string marpol_stowagePosition = string.Format("HAZD.MARPOL.StowagePosition_{0}", i); + string marpol_portOfLoading = string.Format("HAZD.MARPOL.PortOfLoading_{0}", i); + string marpol_portOfDischarge = string.Format("HAZD.MARPOL.PortOfDischarge_{0}", i); + + string name = reader.ReadText(marpol_name); + if (name.IsNullOrEmpty()) + { + reader.Conf.ConfirmText(marpol_name, null, ExcelReader.ReadState.WARN); + continue; + } + + MARPOL_Annex_I_Position marpolPosition = hazd.GetMARPOLPositionWithIdentifier(i.ToString()); + if (marpolPosition == null) + { + marpolPosition = new MARPOL_Annex_I_Position(); + marpolPosition.Identifier = i.ToString(); + marpolPosition.HAZ = hazd; + hazd.MARPOLPositions.Add(marpolPosition); + } + + marpolPosition.Name = name; + reader.Conf.ConfirmText(marpol_name, name, ExcelReader.ReadState.OK); + marpolPosition.Flashpoint_CEL = reader.ReadText(marpol_flash); + reader.Conf.ConfirmText(marpol_flash, marpolPosition.Flashpoint_CEL, marpolPosition.Flashpoint_CEL.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + marpolPosition.Quantity_KGM = reader.ReadNumber(marpol_quantity); + marpolPosition.StowagePosition = reader.ReadText(marpol_stowagePosition); + reader.Conf.ConfirmText(marpol_stowagePosition, marpolPosition.StowagePosition, marpolPosition.StowagePosition.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + marpolPosition.PortOfLoading = reader.ReadText(marpol_portOfLoading); + reader.Conf.ConfirmText(marpol_portOfLoading, marpolPosition.PortOfLoading, marpolPosition.PortOfLoading.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + marpolPosition.PortOfDischarge = reader.ReadText(marpol_portOfDischarge); + reader.Conf.ConfirmText(marpol_portOfDischarge, marpolPosition.PortOfDischarge, marpolPosition.PortOfDischarge.IsNullOrEmpty() ? ExcelReader.ReadState.FAIL : ExcelReader.ReadState.OK); + } + #endregion + } #endregion diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index 7b32e2a6..1fcc2da1 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.4")] +[assembly: AssemblyInformationalVersion("3.3.5")] [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 34da9674..bcd553d4 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.4.*")] +[assembly: AssemblyVersion("3.3.5.*")]