diff --git a/bsmd.dbh/RequestUtil.cs b/bsmd.dbh/RequestUtil.cs index 41a58b17..8242acdf 100644 --- a/bsmd.dbh/RequestUtil.cs +++ b/bsmd.dbh/RequestUtil.cs @@ -29,7 +29,8 @@ namespace bsmd.dbh root.SourceDocumentVersion = "7.1"; root.Timestamp = DateTime.Now; root.Sender = Properties.Settings.Default.Sender; - root.SenderReference = message.Id.ToString(); + root.SenderReference = message.Id.Value.ToString("N"); + bsmd.database.ReportingParty reportingParty = DBManager.Instance.GetReportingPartyDict()[core.DefaultReportingPartyId.Value]; Request.ReportingParty rp = new Request.ReportingParty(); rp.RPCity = reportingParty.City; @@ -46,1595 +47,1617 @@ namespace bsmd.dbh if (rp.RPTypeSpecified) rp.RPType = (ReportingPartyRPType)reportingParty.ReportingPartyType.Value; root.ReportingParty = rp; - - switch (message.MessageNotificationClass) + + if(!core.VisitId.IsNullOrEmpty()) { + root.Item = core.VisitId; + root.ItemElementName = ItemChoiceType2.VisitId; + } - #region VISIT - case Message.NotificationClass.VISIT: - root.Type = RootType.VISIT; - RootVisit rootVisit = new RootVisit(); - rootVisit.PortOfCall = core.PoC; - if (core.ETA.HasValue) + if(!core.TransitId.IsNullOrEmpty()) + { + root.Item = core.TransitId; + root.ItemElementName = ItemChoiceType2.TransitId; + } + + if (message.Reset) + { + RootReportingClassesToReset rrctr = new RootReportingClassesToReset(); + rrctr.ReportingClassToReset = new string[1]; + rrctr.ReportingClassToReset[0] = message.MessageNotificationClassDisplay; + } + else + { + switch (message.MessageNotificationClass) + { + + #region VISIT + case Message.NotificationClass.VISIT: + root.Type = RootType.VISIT; + RootVisit rootVisit = new RootVisit(); + rootVisit.PortOfCall = core.PoC; + if (core.ETA.HasValue) + rootVisit.ETAPortOfCall = core.ETA.Value; rootVisit.ETAPortOfCall = core.ETA.Value; - rootVisit.ETAPortOfCall = core.ETA.Value; - if (!core.IMO.IsNullOrEmpty()) - { - rootVisit.ItemElementName = ItemChoiceType.IMONumber; - rootVisit.Item = core.IMO; - } - else - { - rootVisit.ItemElementName = ItemChoiceType.ENINumber; - rootVisit.Item = core.ENI; - } - root.Item = rootVisit; - root.ItemElementName = ItemChoiceType2.Visit; - break; - #endregion - - #region TRANSIT - case Message.NotificationClass.TRANSIT: - root.Type = RootType.TRANSIT; - RootTransit rootTransit = new RootTransit(); - - if (!core.IMO.IsNullOrEmpty()) - { - rootTransit.ItemElementName = ItemChoiceType1.IMONumber; - rootTransit.Item = core.IMO; - } - else - { - rootTransit.ItemElementName = ItemChoiceType1.ENINumber; - rootTransit.Item = core.ENI; - } - if (core.ETAKielCanal.HasValue) - rootTransit.ETAKielCanal = core.ETAKielCanal.Value; - root.Item = rootTransit; - root.ItemElementName = ItemChoiceType2.Transit; - break; - #endregion - - #region STAT - case Message.NotificationClass.STAT: - root.Type = RootType.DATA; - RootSTAT rootStat = new RootSTAT(); - STAT stat = message.Elements[0] as STAT; - rootStat.ShipName = stat.ShipName; - rootStat.CallSign = stat.CallSign; - rootStat.MMSINumber = stat.MMSINumber; - rootStat.Flag = stat.Flag; - if (stat.LengthOverall_MTR.HasValue) rootStat.LengthOverall_MTR = Decimal.Round((decimal)(stat.LengthOverall_MTR.Value), 2); - if (stat.Beam_MTR.HasValue) rootStat.Beam_MTR = Decimal.Round((decimal)(stat.Beam_MTR.Value), 2); - if (stat.GrossTonnage.HasValue) rootStat.GrossTonnage = stat.GrossTonnage.Value; - rootStat.PortOfRegistry = stat.PortOfRegistry; - rootStat.ShipType = stat.ShipType; - - if (!stat.InmarsatCallNumber.IsNullOrEmpty()) - { - rootStat.InmarsatCallNumbers = stat.InmarsatCallNumber.Trim().Split('\n'); - for (int i = 0; i < Math.Min(rootStat.InmarsatCallNumbers.Length, 5); i++) - rootStat.InmarsatCallNumbers[i] = rootStat.InmarsatCallNumbers[i].Trim(); - } - - rootStat.TransportMode = RootSTATTransportMode.Item1; // default is maritime transport! - if (!stat.TransportMode.IsNullOrEmpty() && stat.TransportMode.Equals("8")) - rootStat.TransportMode = RootSTATTransportMode.Item8; - - if (!stat.ISMCompanyName.IsNullOrEmpty()) - { - rootStat.ISMCompany = new RootSTATISMCompany(); - rootStat.ISMCompany.ISMCompanyName = stat.ISMCompanyName; - rootStat.ISMCompany.ISMCompanyId = stat.ISMCompanyId; - rootStat.ISMCompany.ISMCompanyStreetAndNumber = stat.ISMCompanyStreetAndNumber; - rootStat.ISMCompany.ISMCompanyPostalCode = stat.ISMCompanyPostalCode; - rootStat.ISMCompany.ISMCompanyCity = stat.ISMCompanyCity; - rootStat.ISMCompany.ISMCompanyCountry = stat.ISMCompanyCountry; - } - // rootStat.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootStat; - break; - #endregion - - #region NOA_NOD - case Message.NotificationClass.NOA_NOD: - NOA_NOD noa_nod = message.Elements[0] as NOA_NOD; - RootNOA_NOD rootNOA_NOD = new RootNOA_NOD(); - rootNOA_NOD.ETAToNextPortSpecified = noa_nod.ETAToNextPort.HasValue; - if(noa_nod.ETAToNextPort.HasValue) - rootNOA_NOD.ETAToNextPort = noa_nod.ETAToNextPort.Value; - rootNOA_NOD.ETDFromLastPortSpecified = noa_nod.ETDFromLastPort.HasValue; - if (noa_nod.ETDFromLastPort.HasValue) - rootNOA_NOD.ETDFromLastPort = noa_nod.ETDFromLastPort.Value; - rootNOA_NOD.LastPort = noa_nod.LastPort; - rootNOA_NOD.NextPort = noa_nod.NextPort; - List choiceList = new List(); - List choices = new List(); - if (message.MessageCore.IsTransit) - { - if (noa_nod.ETAToKielCanal.HasValue) + if (!core.IMO.IsNullOrEmpty()) { - choiceList.Add(ItemsChoiceType.ETAToKielCanal); - choices.Add(noa_nod.ETAToKielCanal.Value.ToDBHDateString()); - } - - if (noa_nod.ETDFromKielCanal.HasValue) - { - choiceList.Add(ItemsChoiceType.ETDFromKielCanal); - choices.Add(noa_nod.ETDFromKielCanal.Value.ToDBHDateString()); - } - } - else - { - if (noa_nod.ETAToPortOfCall.HasValue) - { - choiceList.Add(ItemsChoiceType.ETAToPortOfCall); - choices.Add(noa_nod.ETAToPortOfCall.Value.ToDBHDateString()); - } - - if (noa_nod.ETDFromPortOfCall.HasValue) - { - choiceList.Add(ItemsChoiceType.ETDFromPortOfCall); - choices.Add(noa_nod.ETDFromPortOfCall.Value.ToDBHDateString()); - } - - for (int i = 0; i < noa_nod.CallPurposes.Count; i++) - { - choiceList.Add(ItemsChoiceType.CallPurpose); - RootNOA_NODCallPurpose rnncp = new RootNOA_NODCallPurpose(); - CallPurpose callPurpose = noa_nod.CallPurposes[i]; - rnncp.CallPurposeCode = callPurpose.CallPurposeCode; - if (callPurpose.CallPurposeDescription != string.Empty) - rnncp.CallPurposeDescription = callPurpose.CallPurposeDescription; - choices.Add(rnncp); - } - } - - rootNOA_NOD.Items = choices.ToArray(); - rootNOA_NOD.ItemsElementName = choiceList.ToArray(); - rootNOA_NOD.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootNOA_NOD; - break; - - #endregion - - #region AGNT - case Message.NotificationClass.AGNT: - AGNT agnt = message.Elements[0] as AGNT; - RootAGNT rootAGNT = new RootAGNT(); - rootAGNT.AgentCity = agnt.AgentCity; - rootAGNT.AgentCompanyName = agnt.AgentCompanyName; - rootAGNT.AgentCountry = agnt.AgentCountry; - rootAGNT.AgentEMail = agnt.AgentEMail; - rootAGNT.AgentFax = agnt.AgentFax; - rootAGNT.AgentFirstName = agnt.AgentFirstName; - rootAGNT.AgentLastName = agnt.AgentLastName; - rootAGNT.AgentPhone = agnt.AgentPhone; - rootAGNT.AgentPostalCode = agnt.AgentPostalCode; - rootAGNT.AgentStreetAndNumber = agnt.AgentStreetAndNumber; - // rootAGNT.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootAGNT; - break; - #endregion - - #region ATA - case Message.NotificationClass.ATA: - if (message.Elements[0] is ATA ata) - { - RootATA rootATA = new RootATA(); - if (ata.ATAPortOfCall.HasValue) - rootATA.ATAPortOfCall = ata.ATAPortOfCall.Value; - // rootATA.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootATA; - } - break; - #endregion - - #region ATD - case Message.NotificationClass.ATD: - { - if (message.Elements[0] is ATD atd) - { - RootATD rootATD = new RootATD(); - if(atd.ATDPortOfCall.HasValue) - rootATD.ATDPortOfCall = atd.ATDPortOfCall.Value; - // rootATD.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootATD; - } - break; - } - #endregion - - #region SEC - case Message.NotificationClass.SEC: - { - RootSEC rootSEC = new RootSEC(); - SEC sec = message.Elements[0] as SEC; - - List secItems = new List(); - List choiceType1s = new List(); - - if (!message.MessageCore.IsTransit && (sec.KielCanalPassagePlanned ?? false)) - { - rootSEC.KielCanalPassage = new RootSECKielCanalPassage(); - rootSEC.KielCanalPassage.KielCanalPassagePlanned = "Y"; - if (sec.KielCanalPassagePlannedIncomming.HasValue) - rootSEC.KielCanalPassage.KielCanalPassagePlannedIncoming = sec.KielCanalPassagePlannedIncomming.Value; - if (sec.KielCanalPassagePlannedOutgoing.HasValue) - rootSEC.KielCanalPassage.KielCanalPassagePlannedOutgoing = sec.KielCanalPassagePlannedOutgoing.Value; - } - - rootSEC.CurrentShipSecurityLevel = (int)sec.CurrentShipSecurityLevel.Value; - - if (sec.SECSimplification ?? false) - { - choiceType1s.Add(ItemsChoiceType1.SECSimplification); - secItems.Add("Y"); - choiceType1s.Add(ItemsChoiceType1.PortOfCallWhereCompleteSECNotified); - secItems.Add(sec.PortOfCallWhereCompleteSECNotified); + rootVisit.ItemElementName = ItemChoiceType.IMONumber; + rootVisit.Item = core.IMO; } else - { // ACHTUNG Reihenfolge muss exakt dem .xsd entsprechen! - choiceType1s.Add(ItemsChoiceType1.CSOLastName); - secItems.Add(sec.CSOLastName); - choiceType1s.Add(ItemsChoiceType1.CSOFirstName); - secItems.Add(sec.CSOFirstName); - choiceType1s.Add(ItemsChoiceType1.CSOPhone); - secItems.Add(sec.CSOPhone); - choiceType1s.Add(ItemsChoiceType1.CSOFax); - secItems.Add(sec.CSOFax); - choiceType1s.Add(ItemsChoiceType1.CSOEMail); - secItems.Add(sec.CSOEMail); - choiceType1s.Add(ItemsChoiceType1.ValidISSCOnBoard); - secItems.Add(sec.ValidISSCOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - if (!(sec.ValidISSCOnBoard ?? false) && !sec.ReasonsForNoValidISSC.IsNullOrEmpty()) - { - choiceType1s.Add(ItemsChoiceType1.ReasonsForNoValidISSC); - secItems.Add(sec.ReasonsForNoValidISSC); - } - choiceType1s.Add(ItemsChoiceType1.ISSCType); - secItems.Add((ISSCType)(sec.ISSCType ?? 0)); - choiceType1s.Add(ItemsChoiceType1.ISSCIssuerType); - secItems.Add((ISSCIssuerType)(sec.ISSCIssuerType ?? 0)); - choiceType1s.Add(ItemsChoiceType1.ISSCIssuerName); - secItems.Add(sec.ISSCIssuerName); - if (sec.ISSCDateOfExpiration.HasValue) - { - choiceType1s.Add(ItemsChoiceType1.ISSCDateOfExpiration); - secItems.Add(sec.ISSCDateOfExpiration.Value); - } - choiceType1s.Add(ItemsChoiceType1.ApprovedSecurityPlanOnBoard); - secItems.Add(sec.ApprovedSecurityPlanOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + { + rootVisit.ItemElementName = ItemChoiceType.ENINumber; + rootVisit.Item = core.ENI; + } + root.Item = rootVisit; + root.ItemElementName = ItemChoiceType2.Visit; + break; + #endregion - choiceType1s.Add(ItemsChoiceType1.PortFacilityOfArrival); - secItems.Add(sec.PortFacilityOfArrival); - if (sec.GeneralDescriptionOfCargo.HasValue) + #region TRANSIT + case Message.NotificationClass.TRANSIT: + root.Type = RootType.TRANSIT; + RootTransit rootTransit = new RootTransit(); + + if (!core.IMO.IsNullOrEmpty()) + { + rootTransit.ItemElementName = ItemChoiceType1.IMONumber; + rootTransit.Item = core.IMO; + } + else + { + rootTransit.ItemElementName = ItemChoiceType1.ENINumber; + rootTransit.Item = core.ENI; + } + if (core.ETAKielCanal.HasValue) + rootTransit.ETAKielCanal = core.ETAKielCanal.Value; + root.Item = rootTransit; + root.ItemElementName = ItemChoiceType2.Transit; + break; + #endregion + + #region STAT + case Message.NotificationClass.STAT: + root.Type = RootType.DATA; + RootSTAT rootStat = new RootSTAT(); + STAT stat = message.Elements[0] as STAT; + rootStat.ShipName = stat.ShipName; + rootStat.CallSign = stat.CallSign; + rootStat.MMSINumber = stat.MMSINumber; + rootStat.Flag = stat.Flag; + if (stat.LengthOverall_MTR.HasValue) rootStat.LengthOverall_MTR = Decimal.Round((decimal)(stat.LengthOverall_MTR.Value), 2); + if (stat.Beam_MTR.HasValue) rootStat.Beam_MTR = Decimal.Round((decimal)(stat.Beam_MTR.Value), 2); + if (stat.GrossTonnage.HasValue) rootStat.GrossTonnage = stat.GrossTonnage.Value; + rootStat.PortOfRegistry = stat.PortOfRegistry; + rootStat.ShipType = stat.ShipType; + + if (!stat.InmarsatCallNumber.IsNullOrEmpty()) + { + rootStat.InmarsatCallNumbers = stat.InmarsatCallNumber.Trim().Split('\n'); + for (int i = 0; i < Math.Min(rootStat.InmarsatCallNumbers.Length, 5); i++) + rootStat.InmarsatCallNumbers[i] = rootStat.InmarsatCallNumbers[i].Trim(); + } + + rootStat.TransportMode = RootSTATTransportMode.Item1; // default is maritime transport! + if (!stat.TransportMode.IsNullOrEmpty() && stat.TransportMode.Equals("8")) + rootStat.TransportMode = RootSTATTransportMode.Item8; + + if (!stat.ISMCompanyName.IsNullOrEmpty()) + { + rootStat.ISMCompany = new RootSTATISMCompany(); + rootStat.ISMCompany.ISMCompanyName = stat.ISMCompanyName; + rootStat.ISMCompany.ISMCompanyId = stat.ISMCompanyId; + rootStat.ISMCompany.ISMCompanyStreetAndNumber = stat.ISMCompanyStreetAndNumber; + rootStat.ISMCompany.ISMCompanyPostalCode = stat.ISMCompanyPostalCode; + rootStat.ISMCompany.ISMCompanyCity = stat.ISMCompanyCity; + rootStat.ISMCompany.ISMCompanyCountry = stat.ISMCompanyCountry; + } + // rootStat.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootStat; + break; + #endregion + + #region NOA_NOD + case Message.NotificationClass.NOA_NOD: + NOA_NOD noa_nod = message.Elements[0] as NOA_NOD; + RootNOA_NOD rootNOA_NOD = new RootNOA_NOD(); + rootNOA_NOD.ETAToNextPortSpecified = noa_nod.ETAToNextPort.HasValue; + if (noa_nod.ETAToNextPort.HasValue) + rootNOA_NOD.ETAToNextPort = noa_nod.ETAToNextPort.Value; + rootNOA_NOD.ETDFromLastPortSpecified = noa_nod.ETDFromLastPort.HasValue; + if (noa_nod.ETDFromLastPort.HasValue) + rootNOA_NOD.ETDFromLastPort = noa_nod.ETDFromLastPort.Value; + rootNOA_NOD.LastPort = noa_nod.LastPort; + rootNOA_NOD.NextPort = noa_nod.NextPort; + List choiceList = new List(); + List choices = new List(); + if (message.MessageCore.IsTransit) + { + if (noa_nod.ETAToKielCanal.HasValue) { - choiceType1s.Add(ItemsChoiceType1.GeneralDescriptionOfCargo); - secItems.Add((CargoDescription)sec.GeneralDescriptionOfCargo.Value); + choiceList.Add(ItemsChoiceType.ETAToKielCanal); + choices.Add(noa_nod.ETAToKielCanal.Value.ToDBHDateString()); } - for (int i = 0; i < sec.LastTenPortFacilitesCalled.Count; i++) + if (noa_nod.ETDFromKielCanal.HasValue) { - choiceType1s.Add(ItemsChoiceType1.LastTenPortFacilitiesCalled); - RootSECLastTenPortFacilitiesCalled lastTen = new RootSECLastTenPortFacilitiesCalled(); - secItems.Add(lastTen); - LastTenPortFacilitiesCalled lastTenPortFacilitiesCalled = sec.LastTenPortFacilitesCalled[i] as LastTenPortFacilitiesCalled; - lastTen.PortFacilityPortName = lastTenPortFacilitiesCalled.PortFacilityPortName; - lastTen.PortFacilityPortCountry = lastTenPortFacilitiesCalled.PortFacilityPortCountry; - lastTen.PortFacilityPortLoCode = lastTenPortFacilitiesCalled.PortFacilityPortLoCode; - if (lastTenPortFacilitiesCalled.PortFacilityDateOfArrival.HasValue) - lastTen.PortFacilityDateOfArrival = lastTenPortFacilitiesCalled.PortFacilityDateOfArrival.Value; - if (lastTenPortFacilitiesCalled.PortFacilityDateOfDeparture.HasValue) - lastTen.PortFacilityDateOfDeparture = lastTenPortFacilitiesCalled.PortFacilityDateOfDeparture.Value; - if (lastTenPortFacilitiesCalled.PortFacilityShipSecurityLevel.HasValue) - lastTen.PortFacilityShipSecurityLevel = lastTenPortFacilitiesCalled.PortFacilityShipSecurityLevel.Value; - lastTen.PortFacilitySecurityMattersToReport = lastTenPortFacilitiesCalled.PortFacilitySecurityMattersToReport; - lastTen.PortFacilityGISISCode = lastTenPortFacilitiesCalled.PortFacilityGISISCode; - if (!lastTenPortFacilitiesCalled.PortFacilityGISISCodeLocode.IsNullOrEmpty()) - lastTen.PortFacilityGISISCodeLoCode = lastTenPortFacilitiesCalled.PortFacilityGISISCodeLocode; + choiceList.Add(ItemsChoiceType.ETDFromKielCanal); + choices.Add(noa_nod.ETDFromKielCanal.Value.ToDBHDateString()); + } + } + else + { + if (noa_nod.ETAToPortOfCall.HasValue) + { + choiceList.Add(ItemsChoiceType.ETAToPortOfCall); + choices.Add(noa_nod.ETAToPortOfCall.Value.ToDBHDateString()); } - for (int i = 0; i < sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Count; i++) + if (noa_nod.ETDFromPortOfCall.HasValue) { - choiceType1s.Add(ItemsChoiceType1.ShipToShipActivities); - RootSECShipToShipActivities s2s = new RootSECShipToShipActivities(); - secItems.Add(s2s); - ShipToShipActivitiesDuringLastTenPortFacilitiesCalled shipToShip = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i] as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; - s2s.ShipToShipActivityLocation = new RootSECShipToShipActivitiesShipToShipActivityLocation(); - s2s.ShipToShipActivityLocation.ShipToShipActivityLocationName = shipToShip.ShipToShipActivityLocationName; - s2s.ShipToShipActivityLocation.ShipToShipActivityLocationLoCode = shipToShip.ShipToShipActivityLocationLoCode; - s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates = new RootSECShipToShipActivitiesShipToShipActivityLocationShipToShipActivityLocationCoordinates(); - if (shipToShip.ShipToShipActivityLocationCoordinatesLatitude.HasValue) - s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates.ShipToShipActivityLocationCoordinatesLatitude = shipToShip.ShipToShipActivityLocationCoordinatesLatitude.Value; - if (shipToShip.ShipToShipActivityLocationCoordinatesLongitude.HasValue) - s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates.ShipToShipActivityLocationCoordinatesLongitude = shipToShip.ShipToShipActivityLocationCoordinatesLongitude.Value; - if (shipToShip.ShipToShipActivityDateFrom.HasValue) - s2s.ShipToShipActivityDateFrom = shipToShip.ShipToShipActivityDateFrom.Value; - if (shipToShip.ShipToShipActivityDateTo.HasValue) - s2s.ShipToShipActivityDateTo = shipToShip.ShipToShipActivityDateTo.Value; + choiceList.Add(ItemsChoiceType.ETDFromPortOfCall); + choices.Add(noa_nod.ETDFromPortOfCall.Value.ToDBHDateString()); + } - //int activityType; - //if (!Int32.TryParse(shipToShip.ShipToShipActivityType, out activityType)) - //activityType = NOA_NOD.getCallPurposeCodeFromDescription(shipToShip.ShipToShipActivityType) ?? 0; - //s2s.ShipToShipActivityType = activityType; - - if (shipToShip.ShipToShipActivityTypeCode.HasValue) - s2s.ShipToShipActivityType = shipToShip.ShipToShipActivityTypeCode.Value; - - s2s.ShipToShipActivitySecurityMattersToReport = shipToShip.ShipToShipActivitySecurityMattersToReport; + for (int i = 0; i < noa_nod.CallPurposes.Count; i++) + { + choiceList.Add(ItemsChoiceType.CallPurpose); + RootNOA_NODCallPurpose rnncp = new RootNOA_NODCallPurpose(); + CallPurpose callPurpose = noa_nod.CallPurposes[i]; + rnncp.CallPurposeCode = callPurpose.CallPurposeCode; + if (callPurpose.CallPurposeDescription != string.Empty) + rnncp.CallPurposeDescription = callPurpose.CallPurposeDescription; + choices.Add(rnncp); } } - rootSEC.Items = secItems.ToArray(); - rootSEC.ItemsElementName = choiceType1s.ToArray(); - // rootSEC.ReportingParty = rp; + rootNOA_NOD.Items = choices.ToArray(); + rootNOA_NOD.ItemsElementName = choiceList.ToArray(); + rootNOA_NOD.ReportingParty = rp; root.Items = new object[1]; - root.Items[0] = rootSEC; - } - break; - #endregion + root.Items[0] = rootNOA_NOD; + break; - #region BPOL - case Message.NotificationClass.BPOL: - { - if (message.Elements[0] is BPOL bpol) + #endregion + + #region AGNT + case Message.NotificationClass.AGNT: + AGNT agnt = message.Elements[0] as AGNT; + RootAGNT rootAGNT = new RootAGNT(); + rootAGNT.AgentCity = agnt.AgentCity; + rootAGNT.AgentCompanyName = agnt.AgentCompanyName; + rootAGNT.AgentCountry = agnt.AgentCountry; + rootAGNT.AgentEMail = agnt.AgentEMail; + rootAGNT.AgentFax = agnt.AgentFax; + rootAGNT.AgentFirstName = agnt.AgentFirstName; + rootAGNT.AgentLastName = agnt.AgentLastName; + rootAGNT.AgentPhone = agnt.AgentPhone; + rootAGNT.AgentPostalCode = agnt.AgentPostalCode; + rootAGNT.AgentStreetAndNumber = agnt.AgentStreetAndNumber; + // rootAGNT.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootAGNT; + break; + #endregion + + #region ATA + case Message.NotificationClass.ATA: + if (message.Elements[0] is ATA ata) { - RootBPOL rootBPOL = new RootBPOL(); - RootBPOLPortOfItinerary[] poiArray = new RootBPOLPortOfItinerary[bpol.PortOfItineraries.Count]; - rootBPOL.PortOfItinerary = poiArray; - - for (int i = 0; i < bpol.PortOfItineraries.Count; i++) - { - RootBPOLPortOfItinerary port = new RootBPOLPortOfItinerary(); - PortOfItinerary portOfItinerary = bpol.PortOfItineraries[i] as PortOfItinerary; - if (portOfItinerary.PortOfItineraryETA.HasValue) - port.PortOfItineraryETA = portOfItinerary.PortOfItineraryETA.Value; - port.PortOfItineraryName = portOfItinerary.PortOfItineraryName; - poiArray[i] = port; - } - - if (bpol.StowawaysOnBoard.HasValue) - rootBPOL.StowawayOnBoard = bpol.StowawaysOnBoard.Value ? - RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - else - rootBPOL.StowawayOnBoard = RootSECValidISSCOnBoard.N; - // rootBPOL.ReportingParty = rp; + RootATA rootATA = new RootATA(); + if (ata.ATAPortOfCall.HasValue) + rootATA.ATAPortOfCall = ata.ATAPortOfCall.Value; + // rootATA.ReportingParty = rp; root.Items = new object[1]; - root.Items[0] = rootBPOL; + root.Items[0] = rootATA; } break; - } + #endregion - #endregion - - #region CREW - - case Message.NotificationClass.CREW: - { - - RootCREW rootCREW = new RootCREW(); - - rootCREW.CrewMember = new RootCREWCrewMember[message.Elements.Count]; - for (int i = 0; i < message.Elements.Count; i++) + #region ATD + case Message.NotificationClass.ATD: { - CREW crew = message.Elements[i] as CREW; - rootCREW.CrewMember[i] = new RootCREWCrewMember(); - if (crew.CrewMemberDateOfBirth.HasValue) - rootCREW.CrewMember[i].CrewMemberDateOfBirth = crew.CrewMemberDateOfBirth.Value; - rootCREW.CrewMember[i].CrewMemberDuty = crew.CrewMemberDuty; - rootCREW.CrewMember[i].CrewMemberFirstName = crew.CrewMemberFirstName; - rootCREW.CrewMember[i].CrewMemberGenderSpecified = crew.CrewMemberGender.HasValue; - if (crew.CrewMemberGender.HasValue) - rootCREW.CrewMember[i].CrewMemberGender = (Gender)crew.CrewMemberGender.Value; - rootCREW.CrewMember[i].CrewMemberIdentityDocumentId = crew.CrewMemberIdentityDocumentId; - if (crew.CrewMemberIdentityDocumentType.HasValue) - rootCREW.CrewMember[i].CrewMemberIdentityDocumentType = (IdDocType)crew.CrewMemberIdentityDocumentType.Value; - rootCREW.CrewMember[i].CrewMemberLastName = crew.CrewMemberLastName; - rootCREW.CrewMember[i].CrewMemberNationality = crew.CrewMemberNationality; - rootCREW.CrewMember[i].CrewMemberPlaceOfBirth = crew.CrewMemberPlaceOfBirth; - rootCREW.CrewMember[i].CrewMemberVisaNumber = crew.CrewMemberVisaNumber; - if (crew.CrewMemberIdentityDocumentIssuingState.Trim().Length == 2) - rootCREW.CrewMember[i].CrewMemberIdentityDocumentIssuingState = crew.CrewMemberIdentityDocumentIssuingState; - if (crew.CrewMemberIdentityDocumentExpiryDate.HasValue) - rootCREW.CrewMember[i].CrewMemberIdentityDocumentExpiryDate = crew.CrewMemberIdentityDocumentExpiryDate.Value; - } - // rootCREW.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootCREW; - - } - break; - - #endregion - - #region PAS - case Message.NotificationClass.PAS: - { - RootPAS rootPAS = new RootPAS(); - rootPAS.Passenger = new RootPASPassenger[message.Elements.Count]; - for (int i = 0; i < message.Elements.Count; i++) - { - PAS pas = message.Elements[i] as PAS; - rootPAS.Passenger[i] = new RootPASPassenger(); - rootPAS.Passenger[i].PassengerLastName = pas.PassengerLastName; - rootPAS.Passenger[i].PassengerFirstName = pas.PassengerFirstName; - rootPAS.Passenger[i].PassengerPlaceOfBirth = pas.PassengerPlaceOfBirth; - if (pas.PassengerDateOfBirth.HasValue) - rootPAS.Passenger[i].PassengerDateOfBirth = pas.PassengerDateOfBirth.Value; - rootPAS.Passenger[i].PassengerGenderSpecified = pas.PassengerGender.HasValue; - if (pas.PassengerGender.HasValue) - rootPAS.Passenger[i].PassengerGender = (Gender)pas.PassengerGender.Value; - rootPAS.Passenger[i].PassengerNationality = pas.PassengerNationality; - if (pas.PassengerIdentityDocumentType.HasValue) - rootPAS.Passenger[i].PassengerIdentityDocumentType = (IdDocType)pas.PassengerIdentityDocumentType.Value; - rootPAS.Passenger[i].PassengerIdentityDocumentId = pas.PassengerIdentityDocumentId; - rootPAS.Passenger[i].PassengerVisaNumber = pas.PassengerVisaNumber; - rootPAS.Passenger[i].PassengerPortOfEmbarkation = pas.PassengerPortOfEmbarkation; - rootPAS.Passenger[i].PassengerPortOfDisembarkation = pas.PassengerPortOfDisembarkation; - rootPAS.Passenger[i].PassengerInTransit = pas.PassengerInTransit ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (pas.PassengerIdentityDocumentIssuingState.Trim().Length == 2) - rootPAS.Passenger[i].PassengerIdentityDocumentIssuingState = pas.PassengerIdentityDocumentIssuingState; - if (pas.PassengerIdentityDocumentExpiryDate.HasValue) - rootPAS.Passenger[i].PassengerIdentityDocumentExpiryDate = pas.PassengerIdentityDocumentExpiryDate.Value; - } - // rootPAS.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootPAS; - } - break; - #endregion - - #region BKRA - case Message.NotificationClass.BKRA: - { - RootBKRA rootBKRA = new RootBKRA(); - - rootBKRA.BunkerFuelArrival = new RootBKRABunkerFuelArrival[message.Elements.Count]; - for (int i = 0; i < message.Elements.Count; i++) - { - BRKA bkra = message.Elements[i] as BRKA; - rootBKRA.BunkerFuelArrival[i] = new RootBKRABunkerFuelArrival(); - rootBKRA.BunkerFuelArrival[i].BunkerFuelQuantity_TNE = Decimal.Round((decimal)(bkra.BunkerFuelQuantity_TNE ?? 0), 3); - rootBKRA.BunkerFuelArrival[i].BunkerFuelType = bkra.BunkerFuelType; - } - // rootBKRA.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootBKRA; - } - break; - #endregion - - #region BKRD - case Message.NotificationClass.BKRD: - { - RootBKRD rootBKRD = new RootBKRD(); - - rootBKRD.BunkerFuelDeparture = new RootBKRDBunkerFuelDeparture[message.Elements.Count]; - for (int i = 0; i < message.Elements.Count; i++) - { - BRKD bkrd = message.Elements[i] as BRKD; - rootBKRD.BunkerFuelDeparture[i] = new RootBKRDBunkerFuelDeparture(); - rootBKRD.BunkerFuelDeparture[i].BunkerFuelQuantity_TNE = Decimal.Round((decimal)(bkrd.BunkerFuelQuantity_TNE ?? 0), 3); - rootBKRD.BunkerFuelDeparture[i].BunkerFuelType = bkrd.BunkerFuelType; - } - // rootBKRD.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootBKRD; - } - break; - #endregion - - #region TIEFA - case Message.NotificationClass.TIEFA: - { - RootTIEFA rootTIEFA = new RootTIEFA(); - TIEFA tiefa = message.Elements[0] as TIEFA; - rootTIEFA.DraughtUponArrival_DMT = Decimal.Round((decimal)(tiefa.DraughtUponArrival_DMT ?? 0), 1); - // rootTIEFA.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootTIEFA; - } - break; - #endregion - - #region TIEFD - case Message.NotificationClass.TIEFD: - { - RootTIEFD rootTIEFD = new RootTIEFD(); - TIEFD tiefd = message.Elements[0] as TIEFD; - rootTIEFD.DraughtUponDeparture_DMT = Decimal.Round((decimal)(tiefd.DraughtUponDeparture_DMT ?? 0)); - // rootTIEFD.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootTIEFD; - } - break; - #endregion - - #region NAME - case Message.NotificationClass.NAME: - { - RootNAME rootName = new RootNAME(); - NAME name = message.Elements[0] as NAME; - rootName.NameOfMaster = name.NameOfMaster; - // rootName.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootName; - } - break; - #endregion - - #region POBA - case Message.NotificationClass.POBA: - { - RootPOBA rootPoba = new RootPOBA(); - POBA poba = message.Elements[0] as POBA; - rootPoba.TotalCrewMembersOnBoardUponArrival = poba.TotalCrewMembersOnBoardUponArrival ?? 0; - rootPoba.TotalPassengersOnBoardUponArrival = poba.TotalPassengersOnBoardUponArrival ?? 0; - rootPoba.TotalPersonsOnBoardUponArrival = poba.TotalPersonsOnBoardUponArrival ?? 0; - rootPoba.TotalStowawaysOnBoardUponArrival = poba.TotalStowawaysOnBoardUponArrival ?? 0; - // rootPoba.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootPoba; - } - break; - #endregion - - #region POBD - case Message.NotificationClass.POBD: - { - RootPOBD rootPobd = new RootPOBD(); - POBD pobd = message.Elements[0] as POBD; - rootPobd.TotalCrewMembersOnBoardUponDeparture = pobd.TotalCrewMembersOnBoardUponDeparture ?? 0; - rootPobd.TotalPassengersOnBoardUponDeparture = pobd.TotalPassengersOnBoardUponDeparture ?? 0; - rootPobd.TotalPersonsOnBoardUponDeparture = pobd.TotalPersonsOnBoardUponDeparture ?? 0; - rootPobd.TotalStowawaysOnBoardUponDeparture = pobd.TotalStowawaysOnBoardUponDeparture ?? 0; - // rootPobd.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootPobd; - } - break; - #endregion - - #region LADG - case Message.NotificationClass.LADG: - { - RootLADG rootLADG = new RootLADG(); - List cargoList = new List(); - for (int i = 0; i < message.Elements.Count; i++) - { - LADG ladg = message.Elements[i] as LADG; - RootLADGCargo cargo = new RootLADGCargo(); - if (ladg.CargoHandlingType.HasValue) + if (message.Elements[0] is ATD atd) { - if (ladg.CargoHandlingType > 1) continue; - cargo.CargoHandlingType = (ladg.CargoHandlingType == 0) ? HandlingType.LOAD : HandlingType.DISCHARGE; + RootATD rootATD = new RootATD(); + if (atd.ATDPortOfCall.HasValue) + rootATD.ATDPortOfCall = atd.ATDPortOfCall.Value; + // rootATD.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootATD; + } + break; + } + #endregion + + #region SEC + case Message.NotificationClass.SEC: + { + RootSEC rootSEC = new RootSEC(); + SEC sec = message.Elements[0] as SEC; + + List secItems = new List(); + List choiceType1s = new List(); + + if (!message.MessageCore.IsTransit && (sec.KielCanalPassagePlanned ?? false)) + { + rootSEC.KielCanalPassage = new RootSECKielCanalPassage(); + rootSEC.KielCanalPassage.KielCanalPassagePlanned = "Y"; + if (sec.KielCanalPassagePlannedIncomming.HasValue) + rootSEC.KielCanalPassage.KielCanalPassagePlannedIncoming = sec.KielCanalPassagePlannedIncomming.Value; + if (sec.KielCanalPassagePlannedOutgoing.HasValue) + rootSEC.KielCanalPassage.KielCanalPassagePlannedOutgoing = sec.KielCanalPassagePlannedOutgoing.Value; } + rootSEC.CurrentShipSecurityLevel = (int)sec.CurrentShipSecurityLevel.Value; - cargo.CargoCodeNST = ladg.CargoCodeNST; - if (!ladg.CargoCodeNST.IsNullOrEmpty()) + if (sec.SECSimplification ?? false) { - if (cargo.CargoCodeNST.Length > 2) + choiceType1s.Add(ItemsChoiceType1.SECSimplification); + secItems.Add("Y"); + choiceType1s.Add(ItemsChoiceType1.PortOfCallWhereCompleteSECNotified); + secItems.Add(sec.PortOfCallWhereCompleteSECNotified); + } + else + { // ACHTUNG Reihenfolge muss exakt dem .xsd entsprechen! + choiceType1s.Add(ItemsChoiceType1.CSOLastName); + secItems.Add(sec.CSOLastName); + choiceType1s.Add(ItemsChoiceType1.CSOFirstName); + secItems.Add(sec.CSOFirstName); + choiceType1s.Add(ItemsChoiceType1.CSOPhone); + secItems.Add(sec.CSOPhone); + choiceType1s.Add(ItemsChoiceType1.CSOFax); + secItems.Add(sec.CSOFax); + choiceType1s.Add(ItemsChoiceType1.CSOEMail); + secItems.Add(sec.CSOEMail); + choiceType1s.Add(ItemsChoiceType1.ValidISSCOnBoard); + secItems.Add(sec.ValidISSCOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + if (!(sec.ValidISSCOnBoard ?? false) && !sec.ReasonsForNoValidISSC.IsNullOrEmpty()) { - cargo.CargoCodeNST = ladg.CargoCodeNST.Substring(0, 2); + choiceType1s.Add(ItemsChoiceType1.ReasonsForNoValidISSC); + secItems.Add(sec.ReasonsForNoValidISSC); + } + choiceType1s.Add(ItemsChoiceType1.ISSCType); + secItems.Add((ISSCType)(sec.ISSCType ?? 0)); + choiceType1s.Add(ItemsChoiceType1.ISSCIssuerType); + secItems.Add((ISSCIssuerType)(sec.ISSCIssuerType ?? 0)); + choiceType1s.Add(ItemsChoiceType1.ISSCIssuerName); + secItems.Add(sec.ISSCIssuerName); + if (sec.ISSCDateOfExpiration.HasValue) + { + choiceType1s.Add(ItemsChoiceType1.ISSCDateOfExpiration); + secItems.Add(sec.ISSCDateOfExpiration.Value); + } + choiceType1s.Add(ItemsChoiceType1.ApprovedSecurityPlanOnBoard); + secItems.Add(sec.ApprovedSecurityPlanOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + choiceType1s.Add(ItemsChoiceType1.PortFacilityOfArrival); + secItems.Add(sec.PortFacilityOfArrival); + if (sec.GeneralDescriptionOfCargo.HasValue) + { + choiceType1s.Add(ItemsChoiceType1.GeneralDescriptionOfCargo); + secItems.Add((CargoDescription)sec.GeneralDescriptionOfCargo.Value); + } + + for (int i = 0; i < sec.LastTenPortFacilitesCalled.Count; i++) + { + choiceType1s.Add(ItemsChoiceType1.LastTenPortFacilitiesCalled); + RootSECLastTenPortFacilitiesCalled lastTen = new RootSECLastTenPortFacilitiesCalled(); + secItems.Add(lastTen); + LastTenPortFacilitiesCalled lastTenPortFacilitiesCalled = sec.LastTenPortFacilitesCalled[i] as LastTenPortFacilitiesCalled; + lastTen.PortFacilityPortName = lastTenPortFacilitiesCalled.PortFacilityPortName; + lastTen.PortFacilityPortCountry = lastTenPortFacilitiesCalled.PortFacilityPortCountry; + lastTen.PortFacilityPortLoCode = lastTenPortFacilitiesCalled.PortFacilityPortLoCode; + if (lastTenPortFacilitiesCalled.PortFacilityDateOfArrival.HasValue) + lastTen.PortFacilityDateOfArrival = lastTenPortFacilitiesCalled.PortFacilityDateOfArrival.Value; + if (lastTenPortFacilitiesCalled.PortFacilityDateOfDeparture.HasValue) + lastTen.PortFacilityDateOfDeparture = lastTenPortFacilitiesCalled.PortFacilityDateOfDeparture.Value; + if (lastTenPortFacilitiesCalled.PortFacilityShipSecurityLevel.HasValue) + lastTen.PortFacilityShipSecurityLevel = lastTenPortFacilitiesCalled.PortFacilityShipSecurityLevel.Value; + lastTen.PortFacilitySecurityMattersToReport = lastTenPortFacilitiesCalled.PortFacilitySecurityMattersToReport; + lastTen.PortFacilityGISISCode = lastTenPortFacilitiesCalled.PortFacilityGISISCode; + if (!lastTenPortFacilitiesCalled.PortFacilityGISISCodeLocode.IsNullOrEmpty()) + lastTen.PortFacilityGISISCodeLoCode = lastTenPortFacilitiesCalled.PortFacilityGISISCodeLocode; + } + + for (int i = 0; i < sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Count; i++) + { + choiceType1s.Add(ItemsChoiceType1.ShipToShipActivities); + RootSECShipToShipActivities s2s = new RootSECShipToShipActivities(); + secItems.Add(s2s); + ShipToShipActivitiesDuringLastTenPortFacilitiesCalled shipToShip = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i] as ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; + s2s.ShipToShipActivityLocation = new RootSECShipToShipActivitiesShipToShipActivityLocation(); + s2s.ShipToShipActivityLocation.ShipToShipActivityLocationName = shipToShip.ShipToShipActivityLocationName; + s2s.ShipToShipActivityLocation.ShipToShipActivityLocationLoCode = shipToShip.ShipToShipActivityLocationLoCode; + s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates = new RootSECShipToShipActivitiesShipToShipActivityLocationShipToShipActivityLocationCoordinates(); + if (shipToShip.ShipToShipActivityLocationCoordinatesLatitude.HasValue) + s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates.ShipToShipActivityLocationCoordinatesLatitude = shipToShip.ShipToShipActivityLocationCoordinatesLatitude.Value; + if (shipToShip.ShipToShipActivityLocationCoordinatesLongitude.HasValue) + s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates.ShipToShipActivityLocationCoordinatesLongitude = shipToShip.ShipToShipActivityLocationCoordinatesLongitude.Value; + if (shipToShip.ShipToShipActivityDateFrom.HasValue) + s2s.ShipToShipActivityDateFrom = shipToShip.ShipToShipActivityDateFrom.Value; + if (shipToShip.ShipToShipActivityDateTo.HasValue) + s2s.ShipToShipActivityDateTo = shipToShip.ShipToShipActivityDateTo.Value; + + //int activityType; + //if (!Int32.TryParse(shipToShip.ShipToShipActivityType, out activityType)) + //activityType = NOA_NOD.getCallPurposeCodeFromDescription(shipToShip.ShipToShipActivityType) ?? 0; + //s2s.ShipToShipActivityType = activityType; + + if (shipToShip.ShipToShipActivityTypeCode.HasValue) + s2s.ShipToShipActivityType = shipToShip.ShipToShipActivityTypeCode.Value; + + s2s.ShipToShipActivitySecurityMattersToReport = shipToShip.ShipToShipActivitySecurityMattersToReport; } } - if (!ladg.CargoCodeNST_3.IsNullOrEmpty()) - cargo.CargoCodeNST_3 = ladg.CargoCodeNST_3.Substring(0, 1); + rootSEC.Items = secItems.ToArray(); + rootSEC.ItemsElementName = choiceType1s.ToArray(); + // rootSEC.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootSEC; + } + break; + #endregion - if (ladg.CargoLACode.HasValue) - cargo.CargoLACode = ladg.CargoLACode.Value; - cargo.CargoLACodeSpecified = ladg.CargoLACode.HasValue; + #region BPOL + case Message.NotificationClass.BPOL: + { + if (message.Elements[0] is BPOL bpol) + { + RootBPOL rootBPOL = new RootBPOL(); + RootBPOLPortOfItinerary[] poiArray = new RootBPOLPortOfItinerary[bpol.PortOfItineraries.Count]; + rootBPOL.PortOfItinerary = poiArray; - if (ladg.CargoGrossQuantity_TNE.HasValue) - cargo.CargoGrossQuantity_TNE = Decimal.Round((decimal)ladg.CargoGrossQuantity_TNE.Value, 3); + for (int i = 0; i < bpol.PortOfItineraries.Count; i++) + { + RootBPOLPortOfItinerary port = new RootBPOLPortOfItinerary(); + PortOfItinerary portOfItinerary = bpol.PortOfItineraries[i] as PortOfItinerary; + if (portOfItinerary.PortOfItineraryETA.HasValue) + port.PortOfItineraryETA = portOfItinerary.PortOfItineraryETA.Value; + port.PortOfItineraryName = portOfItinerary.PortOfItineraryName; + poiArray[i] = port; + } - cargo.CargoNumberOfItemsSpecified = ladg.CargoNumberOfItems.HasValue; - if (ladg.CargoNumberOfItems.HasValue) - cargo.CargoNumberOfItems = ladg.CargoNumberOfItems.Value; + if (bpol.StowawaysOnBoard.HasValue) + rootBPOL.StowawayOnBoard = bpol.StowawaysOnBoard.Value ? + RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + else + rootBPOL.StowawayOnBoard = RootSECValidISSCOnBoard.N; + // rootBPOL.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootBPOL; + } + break; + } - if (ladg.PortOfLoading.IsNullOrEmpty()) - cargo.CargoPortOfLoading = "ZZUKN"; + #endregion + + #region CREW + + case Message.NotificationClass.CREW: + { + + RootCREW rootCREW = new RootCREW(); + + rootCREW.CrewMember = new RootCREWCrewMember[message.Elements.Count]; + for (int i = 0; i < message.Elements.Count; i++) + { + CREW crew = message.Elements[i] as CREW; + rootCREW.CrewMember[i] = new RootCREWCrewMember(); + if (crew.CrewMemberDateOfBirth.HasValue) + rootCREW.CrewMember[i].CrewMemberDateOfBirth = crew.CrewMemberDateOfBirth.Value; + rootCREW.CrewMember[i].CrewMemberDuty = crew.CrewMemberDuty; + rootCREW.CrewMember[i].CrewMemberFirstName = crew.CrewMemberFirstName; + rootCREW.CrewMember[i].CrewMemberGenderSpecified = crew.CrewMemberGender.HasValue; + if (crew.CrewMemberGender.HasValue) + rootCREW.CrewMember[i].CrewMemberGender = (Gender)crew.CrewMemberGender.Value; + rootCREW.CrewMember[i].CrewMemberIdentityDocumentId = crew.CrewMemberIdentityDocumentId; + if (crew.CrewMemberIdentityDocumentType.HasValue) + rootCREW.CrewMember[i].CrewMemberIdentityDocumentType = (IdDocType)crew.CrewMemberIdentityDocumentType.Value; + rootCREW.CrewMember[i].CrewMemberLastName = crew.CrewMemberLastName; + rootCREW.CrewMember[i].CrewMemberNationality = crew.CrewMemberNationality; + rootCREW.CrewMember[i].CrewMemberPlaceOfBirth = crew.CrewMemberPlaceOfBirth; + rootCREW.CrewMember[i].CrewMemberVisaNumber = crew.CrewMemberVisaNumber; + if (crew.CrewMemberIdentityDocumentIssuingState.Trim().Length == 2) + rootCREW.CrewMember[i].CrewMemberIdentityDocumentIssuingState = crew.CrewMemberIdentityDocumentIssuingState; + if (crew.CrewMemberIdentityDocumentExpiryDate.HasValue) + rootCREW.CrewMember[i].CrewMemberIdentityDocumentExpiryDate = crew.CrewMemberIdentityDocumentExpiryDate.Value; + } + // rootCREW.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootCREW; + + } + break; + + #endregion + + #region PAS + case Message.NotificationClass.PAS: + { + RootPAS rootPAS = new RootPAS(); + rootPAS.Passenger = new RootPASPassenger[message.Elements.Count]; + for (int i = 0; i < message.Elements.Count; i++) + { + PAS pas = message.Elements[i] as PAS; + rootPAS.Passenger[i] = new RootPASPassenger(); + rootPAS.Passenger[i].PassengerLastName = pas.PassengerLastName; + rootPAS.Passenger[i].PassengerFirstName = pas.PassengerFirstName; + rootPAS.Passenger[i].PassengerPlaceOfBirth = pas.PassengerPlaceOfBirth; + if (pas.PassengerDateOfBirth.HasValue) + rootPAS.Passenger[i].PassengerDateOfBirth = pas.PassengerDateOfBirth.Value; + rootPAS.Passenger[i].PassengerGenderSpecified = pas.PassengerGender.HasValue; + if (pas.PassengerGender.HasValue) + rootPAS.Passenger[i].PassengerGender = (Gender)pas.PassengerGender.Value; + rootPAS.Passenger[i].PassengerNationality = pas.PassengerNationality; + if (pas.PassengerIdentityDocumentType.HasValue) + rootPAS.Passenger[i].PassengerIdentityDocumentType = (IdDocType)pas.PassengerIdentityDocumentType.Value; + rootPAS.Passenger[i].PassengerIdentityDocumentId = pas.PassengerIdentityDocumentId; + rootPAS.Passenger[i].PassengerVisaNumber = pas.PassengerVisaNumber; + rootPAS.Passenger[i].PassengerPortOfEmbarkation = pas.PassengerPortOfEmbarkation; + rootPAS.Passenger[i].PassengerPortOfDisembarkation = pas.PassengerPortOfDisembarkation; + rootPAS.Passenger[i].PassengerInTransit = pas.PassengerInTransit ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (pas.PassengerIdentityDocumentIssuingState.Trim().Length == 2) + rootPAS.Passenger[i].PassengerIdentityDocumentIssuingState = pas.PassengerIdentityDocumentIssuingState; + if (pas.PassengerIdentityDocumentExpiryDate.HasValue) + rootPAS.Passenger[i].PassengerIdentityDocumentExpiryDate = pas.PassengerIdentityDocumentExpiryDate.Value; + } + // rootPAS.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootPAS; + } + break; + #endregion + + #region BKRA + case Message.NotificationClass.BKRA: + { + RootBKRA rootBKRA = new RootBKRA(); + + rootBKRA.BunkerFuelArrival = new RootBKRABunkerFuelArrival[message.Elements.Count]; + for (int i = 0; i < message.Elements.Count; i++) + { + BRKA bkra = message.Elements[i] as BRKA; + rootBKRA.BunkerFuelArrival[i] = new RootBKRABunkerFuelArrival(); + rootBKRA.BunkerFuelArrival[i].BunkerFuelQuantity_TNE = Decimal.Round((decimal)(bkra.BunkerFuelQuantity_TNE ?? 0), 3); + rootBKRA.BunkerFuelArrival[i].BunkerFuelType = bkra.BunkerFuelType; + } + // rootBKRA.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootBKRA; + } + break; + #endregion + + #region BKRD + case Message.NotificationClass.BKRD: + { + RootBKRD rootBKRD = new RootBKRD(); + + rootBKRD.BunkerFuelDeparture = new RootBKRDBunkerFuelDeparture[message.Elements.Count]; + for (int i = 0; i < message.Elements.Count; i++) + { + BRKD bkrd = message.Elements[i] as BRKD; + rootBKRD.BunkerFuelDeparture[i] = new RootBKRDBunkerFuelDeparture(); + rootBKRD.BunkerFuelDeparture[i].BunkerFuelQuantity_TNE = Decimal.Round((decimal)(bkrd.BunkerFuelQuantity_TNE ?? 0), 3); + rootBKRD.BunkerFuelDeparture[i].BunkerFuelType = bkrd.BunkerFuelType; + } + // rootBKRD.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootBKRD; + } + break; + #endregion + + #region TIEFA + case Message.NotificationClass.TIEFA: + { + RootTIEFA rootTIEFA = new RootTIEFA(); + TIEFA tiefa = message.Elements[0] as TIEFA; + rootTIEFA.DraughtUponArrival_DMT = Decimal.Round((decimal)(tiefa.DraughtUponArrival_DMT ?? 0), 1); + // rootTIEFA.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootTIEFA; + } + break; + #endregion + + #region TIEFD + case Message.NotificationClass.TIEFD: + { + RootTIEFD rootTIEFD = new RootTIEFD(); + TIEFD tiefd = message.Elements[0] as TIEFD; + rootTIEFD.DraughtUponDeparture_DMT = Decimal.Round((decimal)(tiefd.DraughtUponDeparture_DMT ?? 0)); + // rootTIEFD.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootTIEFD; + } + break; + #endregion + + #region NAME + case Message.NotificationClass.NAME: + { + RootNAME rootName = new RootNAME(); + NAME name = message.Elements[0] as NAME; + rootName.NameOfMaster = name.NameOfMaster; + // rootName.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootName; + } + break; + #endregion + + #region POBA + case Message.NotificationClass.POBA: + { + RootPOBA rootPoba = new RootPOBA(); + POBA poba = message.Elements[0] as POBA; + rootPoba.TotalCrewMembersOnBoardUponArrival = poba.TotalCrewMembersOnBoardUponArrival ?? 0; + rootPoba.TotalPassengersOnBoardUponArrival = poba.TotalPassengersOnBoardUponArrival ?? 0; + rootPoba.TotalPersonsOnBoardUponArrival = poba.TotalPersonsOnBoardUponArrival ?? 0; + rootPoba.TotalStowawaysOnBoardUponArrival = poba.TotalStowawaysOnBoardUponArrival ?? 0; + // rootPoba.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootPoba; + } + break; + #endregion + + #region POBD + case Message.NotificationClass.POBD: + { + RootPOBD rootPobd = new RootPOBD(); + POBD pobd = message.Elements[0] as POBD; + rootPobd.TotalCrewMembersOnBoardUponDeparture = pobd.TotalCrewMembersOnBoardUponDeparture ?? 0; + rootPobd.TotalPassengersOnBoardUponDeparture = pobd.TotalPassengersOnBoardUponDeparture ?? 0; + rootPobd.TotalPersonsOnBoardUponDeparture = pobd.TotalPersonsOnBoardUponDeparture ?? 0; + rootPobd.TotalStowawaysOnBoardUponDeparture = pobd.TotalStowawaysOnBoardUponDeparture ?? 0; + // rootPobd.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootPobd; + } + break; + #endregion + + #region LADG + case Message.NotificationClass.LADG: + { + RootLADG rootLADG = new RootLADG(); + List cargoList = new List(); + for (int i = 0; i < message.Elements.Count; i++) + { + LADG ladg = message.Elements[i] as LADG; + RootLADGCargo cargo = new RootLADGCargo(); + if (ladg.CargoHandlingType.HasValue) + { + if (ladg.CargoHandlingType > 1) continue; + cargo.CargoHandlingType = (ladg.CargoHandlingType == 0) ? HandlingType.LOAD : HandlingType.DISCHARGE; + } + + + cargo.CargoCodeNST = ladg.CargoCodeNST; + if (!ladg.CargoCodeNST.IsNullOrEmpty()) + { + if (cargo.CargoCodeNST.Length > 2) + { + cargo.CargoCodeNST = ladg.CargoCodeNST.Substring(0, 2); + } + } + + if (!ladg.CargoCodeNST_3.IsNullOrEmpty()) + cargo.CargoCodeNST_3 = ladg.CargoCodeNST_3.Substring(0, 1); + + if (ladg.CargoLACode.HasValue) + cargo.CargoLACode = ladg.CargoLACode.Value; + cargo.CargoLACodeSpecified = ladg.CargoLACode.HasValue; + + if (ladg.CargoGrossQuantity_TNE.HasValue) + cargo.CargoGrossQuantity_TNE = Decimal.Round((decimal)ladg.CargoGrossQuantity_TNE.Value, 3); + + cargo.CargoNumberOfItemsSpecified = ladg.CargoNumberOfItems.HasValue; + if (ladg.CargoNumberOfItems.HasValue) + cargo.CargoNumberOfItems = ladg.CargoNumberOfItems.Value; + + if (ladg.PortOfLoading.IsNullOrEmpty()) + cargo.CargoPortOfLoading = "ZZUKN"; + else + cargo.CargoPortOfLoading = ladg.PortOfLoading; + + if (ladg.PortOfDischarge.IsNullOrEmpty()) + cargo.CargoPortOfDischarge = "ZZUKN"; + else + cargo.CargoPortOfDischarge = ladg.PortOfDischarge; + + cargoList.Add(cargo); + } + rootLADG.Cargo = cargoList.ToArray(); + // rootLADG.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootLADG; + } + break; + #endregion + + #region INFO + case Message.NotificationClass.INFO: + { + RootINFO rootInfo = new RootINFO(); + INFO info = message.Elements[0] as INFO; + if (info.ShippingArea.HasValue) + rootInfo.ShippingArea = (ShippingArea)info.ShippingArea.Value; + rootInfo.PortArea = info.PortArea; + rootInfo.RequestedPositionInPortOfCall = info.RequestedPositionInPortOfCall; + if (!info.SpecialRequirementsOfShipAtBerth.IsNullOrEmpty()) + rootInfo.SpecialRequirementsOfShipAtBerth = info.SpecialRequirementsOfShipAtBerth; + + if (info.SpecialRequirementsOfShipAtBerth.IsNullOrEmpty()) + { + _log.Info("dbh INFO send: SpecialRequirementsOfShipAtBerth is empty."); + // Name des Agenten eintragen + } + rootInfo.ConstructionCharacteristicsOfShip = info.ConstructionCharacteristicsOfShip; + rootInfo.BowThrusterPower = info.BowThrusterPower; + rootInfo.SternThrusterPower = info.SternThrusterPower; + if (info.FumigatedBulkCargo.HasValue) + rootInfo.FumigatedBulkCargo = (info.FumigatedBulkCargo.Value == 0) ? RootINFOFumigatedBulkCargo.N : RootINFOFumigatedBulkCargo.Y; else - cargo.CargoPortOfLoading = ladg.PortOfLoading; + rootInfo.FumigatedBulkCargo = RootINFOFumigatedBulkCargo.N; + rootInfo.DeadWeightSummer_TNESpecified = info.DeplacementSummerDraught_TNE.HasValue; + if (info.DeplacementSummerDraught_TNE.HasValue) + rootInfo.DeadWeightSummer_TNE = Decimal.Round((decimal)info.DeplacementSummerDraught_TNE.Value, 3); + // rootInfo.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootInfo; + } + break; + #endregion - if (ladg.PortOfDischarge.IsNullOrEmpty()) - cargo.CargoPortOfDischarge = "ZZUKN"; + #region SERV + case Message.NotificationClass.SERV: + { + RootSERV rootServ = new RootSERV(); + rootServ.Service = new RootSERVService[message.Elements.Count]; + for (int i = 0; i < message.Elements.Count; i++) + { + rootServ.Service[i] = new RootSERVService(); + SERV serv = message.Elements[i] as SERV; + rootServ.Service[i].ServiceName = serv.ServiceName; + rootServ.Service[i].ServiceBeneficiary = serv.ServiceBeneficiary; + rootServ.Service[i].ServiceInvoiceRecipient = serv.ServiceInvoiceRecipient; + } + // rootServ.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootServ; + } + break; + #endregion + + #region PRE72H + case Message.NotificationClass.PRE72H: + { + RootPRE72H rootPre = new RootPRE72H(); + PRE72H pre72h = message.Elements[0] as PRE72H; + rootPre.Tanker = pre72h.Tanker ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (pre72h.Tanker ?? false) + { + + rootPre.TankerDetails = new RootPRE72HTankerDetails(); + if (pre72h.TankerHullConfiguration.HasValue) + rootPre.TankerDetails.TankerHullConfiguration = (HullConfiguration)pre72h.TankerHullConfiguration.Value; + if (pre72h.ConditionCargoBallastTanks.HasValue) + rootPre.TankerDetails.ConditionCargoBallastTanks = (TankCondition)pre72h.ConditionCargoBallastTanks.Value; + if (pre72h.NatureOfCargo != string.Empty) + rootPre.TankerDetails.TypeOfCargo = pre72h.NatureOfCargo; + bool sendVolume = pre72h.VolumeOfCargo.HasValue && (pre72h.VolumeOfCargo.Value > 0); + rootPre.TankerDetails.VolumeOfCargo_TNESpecified = sendVolume; + if (sendVolume) + rootPre.TankerDetails.VolumeOfCargo_TNE = Decimal.Round((decimal)(pre72h.VolumeOfCargo.Value), 3); + + } + rootPre.PlannedOperations = pre72h.PlannedOperations; + rootPre.PlannedWorks = pre72h.PlannedWorks; + rootPre.DateOfLastExpandedInspectionSpecified = pre72h.DateOfLastExpandedInspection.HasValue; + if (pre72h.DateOfLastExpandedInspection.HasValue) + rootPre.DateOfLastExpandedInspection = pre72h.DateOfLastExpandedInspection.Value; + if (pre72h.PlannedPeriodOfStay_HUR.HasValue) + rootPre.PlannedPeriodOfStay_HUR = Decimal.Round((decimal)(pre72h.PlannedPeriodOfStay_HUR.Value), 2); + // rootPre.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootPre; + } + break; + #endregion + + #region MDH + case Message.NotificationClass.MDH: + { + RootMDH rootMDH = new RootMDH(); + MDH mdh = message.Elements[0] as MDH; + if (!mdh.MDHSimplification.HasValue) + { + _log.ErrorFormat("MDH {0} doesnt have MDHSimplification field set, aborting message", mdh.Id); + return null; // das wird wahrscheinlich nie passieren + } + if (mdh.MDHSimplification.Value) + { + rootMDH.Items = new object[2]; + rootMDH.ItemsElementName = new ItemsChoiceType2[2]; + rootMDH.ItemsElementName[0] = ItemsChoiceType2.MDHSimplification; + rootMDH.Items[0] = "Y"; + rootMDH.ItemsElementName[1] = ItemsChoiceType2.PortOfCallWhereCompleteMDHNotified; + rootMDH.Items[1] = mdh.PortOfCallWhereCompleteMDHNotified; + } else - cargo.CargoPortOfDischarge = ladg.PortOfDischarge; - - cargoList.Add(cargo); - } - rootLADG.Cargo = cargoList.ToArray(); - // rootLADG.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootLADG; - } - break; - #endregion - - #region INFO - case Message.NotificationClass.INFO: - { - RootINFO rootInfo = new RootINFO(); - INFO info = message.Elements[0] as INFO; - if (info.ShippingArea.HasValue) - rootInfo.ShippingArea = (ShippingArea)info.ShippingArea.Value; - rootInfo.PortArea = info.PortArea; - rootInfo.RequestedPositionInPortOfCall = info.RequestedPositionInPortOfCall; - if (!info.SpecialRequirementsOfShipAtBerth.IsNullOrEmpty()) - rootInfo.SpecialRequirementsOfShipAtBerth = info.SpecialRequirementsOfShipAtBerth; - - if (info.SpecialRequirementsOfShipAtBerth.IsNullOrEmpty()) - { - _log.Info("dbh INFO send: SpecialRequirementsOfShipAtBerth is empty."); - // Name des Agenten eintragen - } - rootInfo.ConstructionCharacteristicsOfShip = info.ConstructionCharacteristicsOfShip; - rootInfo.BowThrusterPower = info.BowThrusterPower; - rootInfo.SternThrusterPower = info.SternThrusterPower; - if (info.FumigatedBulkCargo.HasValue) - rootInfo.FumigatedBulkCargo = (info.FumigatedBulkCargo.Value == 0) ? RootINFOFumigatedBulkCargo.N : RootINFOFumigatedBulkCargo.Y; - else - rootInfo.FumigatedBulkCargo = RootINFOFumigatedBulkCargo.N; - rootInfo.DeadWeightSummer_TNESpecified = info.DeplacementSummerDraught_TNE.HasValue; - if (info.DeplacementSummerDraught_TNE.HasValue) - rootInfo.DeadWeightSummer_TNE = Decimal.Round((decimal)info.DeplacementSummerDraught_TNE.Value, 3); - // rootInfo.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootInfo; - } - break; - #endregion - - #region SERV - case Message.NotificationClass.SERV: - { - RootSERV rootServ = new RootSERV(); - rootServ.Service = new RootSERVService[message.Elements.Count]; - for (int i = 0; i < message.Elements.Count; i++) - { - rootServ.Service[i] = new RootSERVService(); - SERV serv = message.Elements[i] as SERV; - rootServ.Service[i].ServiceName = serv.ServiceName; - rootServ.Service[i].ServiceBeneficiary = serv.ServiceBeneficiary; - rootServ.Service[i].ServiceInvoiceRecipient = serv.ServiceInvoiceRecipient; - } - // rootServ.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootServ; - } - break; - #endregion - - #region PRE72H - case Message.NotificationClass.PRE72H: - { - RootPRE72H rootPre = new RootPRE72H(); - PRE72H pre72h = message.Elements[0] as PRE72H; - rootPre.Tanker = pre72h.Tanker ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (pre72h.Tanker ?? false) - { - - rootPre.TankerDetails = new RootPRE72HTankerDetails(); - if (pre72h.TankerHullConfiguration.HasValue) - rootPre.TankerDetails.TankerHullConfiguration = (HullConfiguration)pre72h.TankerHullConfiguration.Value; - if (pre72h.ConditionCargoBallastTanks.HasValue) - rootPre.TankerDetails.ConditionCargoBallastTanks = (TankCondition)pre72h.ConditionCargoBallastTanks.Value; - if (pre72h.NatureOfCargo != string.Empty) - rootPre.TankerDetails.TypeOfCargo = pre72h.NatureOfCargo; - bool sendVolume = pre72h.VolumeOfCargo.HasValue && (pre72h.VolumeOfCargo.Value > 0); - rootPre.TankerDetails.VolumeOfCargo_TNESpecified = sendVolume; - if (sendVolume) - rootPre.TankerDetails.VolumeOfCargo_TNE = Decimal.Round((decimal)(pre72h.VolumeOfCargo.Value), 3); - - } - rootPre.PlannedOperations = pre72h.PlannedOperations; - rootPre.PlannedWorks = pre72h.PlannedWorks; - rootPre.DateOfLastExpandedInspectionSpecified = pre72h.DateOfLastExpandedInspection.HasValue; - if (pre72h.DateOfLastExpandedInspection.HasValue) - rootPre.DateOfLastExpandedInspection = pre72h.DateOfLastExpandedInspection.Value; - if (pre72h.PlannedPeriodOfStay_HUR.HasValue) - rootPre.PlannedPeriodOfStay_HUR = Decimal.Round((decimal)(pre72h.PlannedPeriodOfStay_HUR.Value), 2); - // rootPre.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootPre; - } - break; - #endregion - - #region MDH - case Message.NotificationClass.MDH: - { - RootMDH rootMDH = new RootMDH(); - MDH mdh = message.Elements[0] as MDH; - if (!mdh.MDHSimplification.HasValue) - { - _log.ErrorFormat("MDH {0} doesnt have MDHSimplification field set, aborting message", mdh.Id); - return null; // das wird wahrscheinlich nie passieren - } - if (mdh.MDHSimplification.Value) - { - rootMDH.Items = new object[2]; - rootMDH.ItemsElementName = new ItemsChoiceType2[2]; - rootMDH.ItemsElementName[0] = ItemsChoiceType2.MDHSimplification; - rootMDH.Items[0] = "Y"; - rootMDH.ItemsElementName[1] = ItemsChoiceType2.PortOfCallWhereCompleteMDHNotified; - rootMDH.Items[1] = mdh.PortOfCallWhereCompleteMDHNotified; - } - else - { - List mdhItems = new List(); - List choiceTypes2 = new List + { + List mdhItems = new List(); + List choiceTypes2 = new List { ItemsChoiceType2.NonAccidentialDeathsDuringVoyage }; - mdhItems.Add((mdh.NonAccidentalDeathsDuringVoyage ?? false) ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + mdhItems.Add((mdh.NonAccidentalDeathsDuringVoyage ?? false) ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - if (mdh.NonAccidentalDeathsDuringVoyage ?? false) - { - choiceTypes2.Add(ItemsChoiceType2.NonAccidentialDeathsDuringVoyageCount); - mdhItems.Add(mdh.NonAccidentalDeathsDuringVoyageCount ?? 0); - } - - choiceTypes2.Add(ItemsChoiceType2.SuspisionInfectiousNature); - mdhItems.Add(mdh.SuspisionInfectiousNature ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - choiceTypes2.Add(ItemsChoiceType2.NumberOfIllPersonsHigherThanExpected); - mdhItems.Add(mdh.NumberOfIllPersonsHigherThanExpected ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - if (mdh.NumberOfIllPersonsHigherThanExpected ?? false) - { - choiceTypes2.Add(ItemsChoiceType2.NumberOfIllPersons); - mdhItems.Add(mdh.NumberOfIllPersons ?? 0); - } - - choiceTypes2.Add(ItemsChoiceType2.SickPersonsOnBoard); - mdhItems.Add(mdh.SickPersonsOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - choiceTypes2.Add(ItemsChoiceType2.MedicalConsulted); - mdhItems.Add(mdh.MedicalConsulted ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - choiceTypes2.Add(ItemsChoiceType2.AwareOfConditionsForFurtherInfections); - mdhItems.Add(mdh.AwareOfFurtherInfections ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - choiceTypes2.Add(ItemsChoiceType2.SanitaryMeasuresApplied); - mdhItems.Add(mdh.SanitaryMeasuresApplied ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - if (mdh.SanitaryMeasuresApplied ?? false) - { - foreach (SanitaryMeasuresDetail smd in mdh.SanitaryMeasuresDetails) + if (mdh.NonAccidentalDeathsDuringVoyage ?? false) { - choiceTypes2.Add(ItemsChoiceType2.SanitaryMeasuresDetails); - RootMDHSanitaryMeasuresDetails smDet = new RootMDHSanitaryMeasuresDetails(); - if (mdh.SanitaryMeasuresDate.HasValue) - smDet.SanitaryMeasuresDate = smd.SanitaryMeasuresDate.Value; - smDet.SanitaryMeasuresType = smd.SanitaryMeasuresType; - smDet.SanitaryMeasuresLocation = smd.SanitaryMeasuresLocation; - mdhItems.Add(smDet); + choiceTypes2.Add(ItemsChoiceType2.NonAccidentialDeathsDuringVoyageCount); + mdhItems.Add(mdh.NonAccidentalDeathsDuringVoyageCount ?? 0); } - } - choiceTypes2.Add(ItemsChoiceType2.StowawaysDetected); - mdhItems.Add(mdh.StowawaysDetected ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + choiceTypes2.Add(ItemsChoiceType2.SuspisionInfectiousNature); + mdhItems.Add(mdh.SuspisionInfectiousNature ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - choiceTypes2.Add(ItemsChoiceType2.StowawaysJoiningLocation); - string concatLocations = ""; - foreach (StowawaysJoiningLocation sjl in mdh.StowawaysJoiningLocations) - { - if (!sjl.StowawayJoiningLocation.IsNullOrEmpty()) - concatLocations = string.Format("{0} {1}", concatLocations, sjl.StowawayJoiningLocation); - } - mdhItems.Add(concatLocations); + choiceTypes2.Add(ItemsChoiceType2.NumberOfIllPersonsHigherThanExpected); + mdhItems.Add(mdh.NumberOfIllPersonsHigherThanExpected ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - choiceTypes2.Add(ItemsChoiceType2.SickAnimalOrPetOnBoard); - mdhItems.Add(mdh.SickAnimalOrPetOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - choiceTypes2.Add(ItemsChoiceType2.ValidSanitaryControlExemptionOrCertificateOnBoard); - mdhItems.Add(mdh.ValidSanitaryControlExemptionOrCertificateOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - if (mdh.ValidSanitaryControlExemptionOrCertificateOnBoard ?? false) - { - choiceTypes2.Add(ItemsChoiceType2.ValidSanitaryControlExemptionOrCertificate); - RootMDHValidSanitaryControlExemptionOrCertificate cert = new RootMDHValidSanitaryControlExemptionOrCertificate(); - mdhItems.Add(cert); - cert.DateOfIssue = mdh.DateOfIssue.Value; - cert.PlaceOfIssue = mdh.PlaceOfIssue; - } - - choiceTypes2.Add(ItemsChoiceType2.SanitaryControlReinspectionRequired); - mdhItems.Add(mdh.SanitaryControlReinspectionRequired ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - choiceTypes2.Add(ItemsChoiceType2.InfectedAreaVisited); - mdhItems.Add(mdh.InfectedAreaVisited ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - - foreach (InfectedArea ia in mdh.InfectedAreas) - { - if (!mdh.InfectedAreaPort.IsNullOrEmpty() && mdh.InfectedAreaDate.HasValue) + if (mdh.NumberOfIllPersonsHigherThanExpected ?? false) { - choiceTypes2.Add(ItemsChoiceType2.InfectedArea); - RootMDHInfectedArea infected = new RootMDHInfectedArea(); - mdhItems.Add(infected); - infected.InfectedAreaPort = ia.InfectedAreaPort; - infected.InfectedAreaDate = ia.InfectedAreaDate.Value; + choiceTypes2.Add(ItemsChoiceType2.NumberOfIllPersons); + mdhItems.Add(mdh.NumberOfIllPersons ?? 0); } - } - if (mdh.PortOfCallLast30Days.Count > 0) - { - choiceTypes2.Add(ItemsChoiceType2.PortsOfCallLast30Days); - RootMDHPortsOfCallLast30Days l30d = new RootMDHPortsOfCallLast30Days(); - mdhItems.Add(l30d); + choiceTypes2.Add(ItemsChoiceType2.SickPersonsOnBoard); + mdhItems.Add(mdh.SickPersonsOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); - l30d.PortOfCallLast30Days = new RootMDHPortsOfCallLast30DaysPortOfCallLast30Days[mdh.PortOfCallLast30Days.Count]; - for (int i = 0; i < mdh.PortOfCallLast30Days.Count; i++) + choiceTypes2.Add(ItemsChoiceType2.MedicalConsulted); + mdhItems.Add(mdh.MedicalConsulted ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + choiceTypes2.Add(ItemsChoiceType2.AwareOfConditionsForFurtherInfections); + mdhItems.Add(mdh.AwareOfFurtherInfections ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + choiceTypes2.Add(ItemsChoiceType2.SanitaryMeasuresApplied); + mdhItems.Add(mdh.SanitaryMeasuresApplied ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + if (mdh.SanitaryMeasuresApplied ?? false) { - l30d.PortOfCallLast30Days[i] = new RootMDHPortsOfCallLast30DaysPortOfCallLast30Days(); - PortOfCallLast30Days portOfCallLast30Days = mdh.PortOfCallLast30Days[i] as PortOfCallLast30Days; - l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip = new RootMDHPortsOfCallLast30DaysPortOfCallLast30DaysPortOfCallLast30DaysCrewJoinedShip(); - if (portOfCallLast30Days.CrewJoinedShip.Count > 0) + foreach (SanitaryMeasuresDetail smd in mdh.SanitaryMeasuresDetails) { - l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip.PortOfCallLast30DaysCrewJoinedShipName = new string[portOfCallLast30Days.CrewJoinedShip.Count]; - for (int j = 0; j < portOfCallLast30Days.CrewJoinedShip.Count; j++) + choiceTypes2.Add(ItemsChoiceType2.SanitaryMeasuresDetails); + RootMDHSanitaryMeasuresDetails smDet = new RootMDHSanitaryMeasuresDetails(); + if (mdh.SanitaryMeasuresDate.HasValue) + smDet.SanitaryMeasuresDate = smd.SanitaryMeasuresDate.Value; + smDet.SanitaryMeasuresType = smd.SanitaryMeasuresType; + smDet.SanitaryMeasuresLocation = smd.SanitaryMeasuresLocation; + mdhItems.Add(smDet); + } + } + + choiceTypes2.Add(ItemsChoiceType2.StowawaysDetected); + mdhItems.Add(mdh.StowawaysDetected ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + choiceTypes2.Add(ItemsChoiceType2.StowawaysJoiningLocation); + string concatLocations = ""; + foreach (StowawaysJoiningLocation sjl in mdh.StowawaysJoiningLocations) + { + if (!sjl.StowawayJoiningLocation.IsNullOrEmpty()) + concatLocations = string.Format("{0} {1}", concatLocations, sjl.StowawayJoiningLocation); + } + mdhItems.Add(concatLocations); + + choiceTypes2.Add(ItemsChoiceType2.SickAnimalOrPetOnBoard); + mdhItems.Add(mdh.SickAnimalOrPetOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + choiceTypes2.Add(ItemsChoiceType2.ValidSanitaryControlExemptionOrCertificateOnBoard); + mdhItems.Add(mdh.ValidSanitaryControlExemptionOrCertificateOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + if (mdh.ValidSanitaryControlExemptionOrCertificateOnBoard ?? false) + { + choiceTypes2.Add(ItemsChoiceType2.ValidSanitaryControlExemptionOrCertificate); + RootMDHValidSanitaryControlExemptionOrCertificate cert = new RootMDHValidSanitaryControlExemptionOrCertificate(); + mdhItems.Add(cert); + cert.DateOfIssue = mdh.DateOfIssue.Value; + cert.PlaceOfIssue = mdh.PlaceOfIssue; + } + + choiceTypes2.Add(ItemsChoiceType2.SanitaryControlReinspectionRequired); + mdhItems.Add(mdh.SanitaryControlReinspectionRequired ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + choiceTypes2.Add(ItemsChoiceType2.InfectedAreaVisited); + mdhItems.Add(mdh.InfectedAreaVisited ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N); + + foreach (InfectedArea ia in mdh.InfectedAreas) + { + if (!mdh.InfectedAreaPort.IsNullOrEmpty() && mdh.InfectedAreaDate.HasValue) + { + choiceTypes2.Add(ItemsChoiceType2.InfectedArea); + RootMDHInfectedArea infected = new RootMDHInfectedArea(); + mdhItems.Add(infected); + infected.InfectedAreaPort = ia.InfectedAreaPort; + infected.InfectedAreaDate = ia.InfectedAreaDate.Value; + } + } + + if (mdh.PortOfCallLast30Days.Count > 0) + { + choiceTypes2.Add(ItemsChoiceType2.PortsOfCallLast30Days); + RootMDHPortsOfCallLast30Days l30d = new RootMDHPortsOfCallLast30Days(); + mdhItems.Add(l30d); + + l30d.PortOfCallLast30Days = new RootMDHPortsOfCallLast30DaysPortOfCallLast30Days[mdh.PortOfCallLast30Days.Count]; + for (int i = 0; i < mdh.PortOfCallLast30Days.Count; i++) + { + l30d.PortOfCallLast30Days[i] = new RootMDHPortsOfCallLast30DaysPortOfCallLast30Days(); + PortOfCallLast30Days portOfCallLast30Days = mdh.PortOfCallLast30Days[i] as PortOfCallLast30Days; + l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip = new RootMDHPortsOfCallLast30DaysPortOfCallLast30DaysPortOfCallLast30DaysCrewJoinedShip(); + if (portOfCallLast30Days.CrewJoinedShip.Count > 0) { - l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip.PortOfCallLast30DaysCrewJoinedShipName[j] = ((PortOfCallLast30DaysCrewJoinedShip)portOfCallLast30Days.CrewJoinedShip[j]).PortOfCallLast30DaysCrewJoinedShipName; + l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip.PortOfCallLast30DaysCrewJoinedShipName = new string[portOfCallLast30Days.CrewJoinedShip.Count]; + for (int j = 0; j < portOfCallLast30Days.CrewJoinedShip.Count; j++) + { + l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip.PortOfCallLast30DaysCrewJoinedShipName[j] = ((PortOfCallLast30DaysCrewJoinedShip)portOfCallLast30Days.CrewJoinedShip[j]).PortOfCallLast30DaysCrewJoinedShipName; + } } + l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewMembersJoined = portOfCallLast30Days.PortOfCallLast30DaysCrewMembersJoined ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (portOfCallLast30Days.PortOfCallLast30DaysDateOfDeparture.HasValue) + l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysDateOfDeparture = portOfCallLast30Days.PortOfCallLast30DaysDateOfDeparture.Value; + l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysLocode = portOfCallLast30Days.PortOfCallLast30DaysLocode; } - l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewMembersJoined = portOfCallLast30Days.PortOfCallLast30DaysCrewMembersJoined ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (portOfCallLast30Days.PortOfCallLast30DaysDateOfDeparture.HasValue) - l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysDateOfDeparture = portOfCallLast30Days.PortOfCallLast30DaysDateOfDeparture.Value; - l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysLocode = portOfCallLast30Days.PortOfCallLast30DaysLocode; } + + rootMDH.Items = mdhItems.ToArray(); + rootMDH.ItemsElementName = choiceTypes2.ToArray(); + } - - rootMDH.Items = mdhItems.ToArray(); - rootMDH.ItemsElementName = choiceTypes2.ToArray(); - + // rootMDH.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootMDH; } - // rootMDH.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootMDH; - } - break; - #endregion + break; + #endregion - #region WAS - case Message.NotificationClass.WAS: - { - RootWAS rootWAS = new RootWAS(); - WAS was = message.Elements[0] as WAS; - if (was.WasteDisposalValidExemption ?? false) + #region WAS + case Message.NotificationClass.WAS: { - rootWAS.Items = new object[1]; - rootWAS.ItemsElementName = new ItemsChoiceType3[1]; - rootWAS.ItemsElementName[0] = ItemsChoiceType3.WasteDisposalValidExemption; - rootWAS.Items[0] = "Y"; - } - else - { - // ACHTUNG hier ist die Reihenfolge entscheidend! (siehe XSD) - List choiceType3s = new List(); - List wasteItems = new List(); - - choiceType3s.Add(ItemsChoiceType3.ConfirmationOfCorrectnessAndSufficiency); - wasteItems.Add(was.ConfirmationOfCorrectness ?? false ? "Y" : "N"); - - if(was.LastWasteDisposalDate.HasValue) + RootWAS rootWAS = new RootWAS(); + WAS was = message.Elements[0] as WAS; + if (was.WasteDisposalValidExemption ?? false) { - choiceType3s.Add(ItemsChoiceType3.LastWasteDisposalDate); - wasteItems.Add(was.LastWasteDisposalDate); + rootWAS.Items = new object[1]; + rootWAS.ItemsElementName = new ItemsChoiceType3[1]; + rootWAS.ItemsElementName[0] = ItemsChoiceType3.WasteDisposalValidExemption; + rootWAS.Items[0] = "Y"; } - - choiceType3s.Add(ItemsChoiceType3.LastWasteDisposalPort); - wasteItems.Add(was.LastWasteDisposalPort); - - choiceType3s.Add(ItemsChoiceType3.NextWasteDisposalPort); - wasteItems.Add(was.NextWasteDisposalPort); - - for (int i = 0; i < was.WasteDisposalServiceProvider.Count; i++) + else { - if ((was.WasteDisposalServiceProvider[i]).WasteDisposalServiceProviderName.Trim().IsNullOrEmpty()) continue; - choiceType3s.Add(ItemsChoiceType3.WasteDisposalServiceProviderName); - wasteItems.Add((was.WasteDisposalServiceProvider[i]).WasteDisposalServiceProviderName); - } + // ACHTUNG hier ist die Reihenfolge entscheidend! (siehe XSD) + List choiceType3s = new List(); + List wasteItems = new List(); - for (int j = 0; j < was.Waste.Count; j++) - { - choiceType3s.Add(ItemsChoiceType3.WasteItem); - RootWASWasteItem rww = new RootWASWasteItem(); - Waste waste = was.Waste[j]; - if ((waste.WasteType ?? 0) == 0) continue; // not a valid waste type + choiceType3s.Add(ItemsChoiceType3.ConfirmationOfCorrectnessAndSufficiency); + wasteItems.Add(was.ConfirmationOfCorrectness ?? false ? "Y" : "N"); - rww.WasteType = new RootWASWasteItemWasteType(); - rww.WasteType.WasteCode = waste.WasteType.ToString(); - rww.WasteType.WasteDescription = waste.WasteDescription; - - rww.WasteDisposalAmount_MTQ = decimal.Round((decimal)(waste.WasteDisposalAmount_MTQ ?? 0), 3); - rww.WasteCapacity_MTQ = decimal.Round((decimal)(waste.WasteCapacity_MTQ ?? 0), 3); - rww.WasteAmountRetained_MTQ = decimal.Round((decimal)(waste.WasteAmountRetained_MTQ ?? 0), 3); - rww.WasteAmountGeneratedTillNextPort_MTQ = decimal.Round((decimal)(waste.WasteAmountGeneratedTillNextPort_MTQ ?? 0), 3); - rww.RemainingWasteDeliveryPort = waste.WasteDisposalPort; - wasteItems.Add(rww); - } - - rootWAS.ItemsElementName = choiceType3s.ToArray(); - rootWAS.Items = wasteItems.ToArray(); - } - // rootWAS.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootWAS; - } - break; - #endregion - - #region TOWA - case Message.NotificationClass.TOWA: - { - RootTOWA rootTowa = new RootTOWA(); - rootTowa.TowageOnArrival = new RootTOWATowageOnArrival[message.Elements.Count]; - for (int i = 0; i < message.Elements.Count; i++) - { - TOWA towa = message.Elements[i] as TOWA; - rootTowa.TowageOnArrival[i] = new RootTOWATowageOnArrival(); - rootTowa.TowageOnArrival[i].TowageOnArrivalName = towa.TowageOnArrivalName; - rootTowa.TowageOnArrival[i].TowageOnArrivalFlag = towa.TowageOnArrivalFlag; - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator = new RootTOWATowageOnArrivalTowageOnArrivalOperator(); - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorCompanyName = towa.TowageOnArrivalOperatorCompanyName; - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorStreetAndNumber = towa.TowageOnArrivalOperatorStreetNameAndNumber; - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorPostalCode = towa.TowageOnArrivalOperatorPostalCode; - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorCity = towa.TowageOnArrivalOperatorCity; - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorCountry = towa.TowageOnArrivalOperatorCountry; - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorPhone = towa.TowageOnArrivalOperatorPhone; - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorFax = towa.TowageOnArrivalOperatorFax; - rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorEMail = towa.TowageOnArrivalOperatorEmail; - if (towa.TowageOnArrivalGrossTonnage.HasValue) - rootTowa.TowageOnArrival[i].TowageOnArrivalGrossTonnage = towa.TowageOnArrivalGrossTonnage.Value; - if (towa.TowageOnArrivalLengthOverall_MTR.HasValue) - rootTowa.TowageOnArrival[i].TowageOnArrivalLengthOverall_MTR = decimal.Round((decimal)towa.TowageOnArrivalLengthOverall_MTR.Value, 2); - if (towa.TowageOnArrivalBeam_MTR.HasValue) - rootTowa.TowageOnArrival[i].TowageOnArrivalBeam_MTR = decimal.Round((decimal)towa.TowageOnArrivalBeam_MTR.Value, 2); - rootTowa.TowageOnArrival[i].TowageOnArrivalPurposeOfCall = towa.TowageOnArrivalPurposeOfCall; - if (towa.TowageOnArrivalDraught_DMT.HasValue) - rootTowa.TowageOnArrival[i].TowageOnArrivalDraught_DMT = decimal.Round((decimal)towa.TowageOnArrivalDraught_DMT.Value, 1); - rootTowa.TowageOnArrival[i].TowageOnArrivalRemarks = towa.TowageOnArrivalRemarks; - } - // rootTowa.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootTowa; - } - break; - #endregion - - #region TOWD - case Message.NotificationClass.TOWD: - { - RootTOWD rootTowd = new RootTOWD(); - rootTowd.TowageOnDeparture = new RootTOWDTowageOnDeparture[message.Elements.Count]; - for (int i = 0; i < message.Elements.Count; i++) - { - TOWD towd = message.Elements[i] as TOWD; - rootTowd.TowageOnDeparture[i] = new RootTOWDTowageOnDeparture(); - rootTowd.TowageOnDeparture[i].TowageOnDepartureName = towd.TowageOnDepartureName; - rootTowd.TowageOnDeparture[i].TowageOnDepartureFlag = towd.TowageOnDepartureFlag; - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator = new RootTOWDTowageOnDepartureTowageOnDepartureOperator(); - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorCompanyName = towd.TowageOnDepartureOperatorCompanyName; - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorStreetAndNumber = towd.TowageOnDepartureOperatorStreetNameAndNumber; - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorPostalCode = towd.TowageOnDepartureOperatorPostalCode; - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorCity = towd.TowageOnDepartureOperatorCity; - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorCountry = towd.TowageOnDepartureOperatorCountry; - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorPhone = towd.TowageOnDepartureOperatorPhone; - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorFax = towd.TowageOnDepartureOperatorFax; - rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorEMail = towd.TowageOnDepartureOperatorEmail; - if (towd.TowageOnDepartureLengthOverall_MTR.HasValue) - rootTowd.TowageOnDeparture[i].TowageOnDepartureLengthOverall_MTR = decimal.Round((decimal)towd.TowageOnDepartureLengthOverall_MTR.Value, 2); - if (towd.TowageOnDepartureBeam_MTR.HasValue) - rootTowd.TowageOnDeparture[i].TowageOnDepartureBeam_MTR = decimal.Round((decimal)towd.TowageOnDepartureBeam_MTR.Value, 2); - if (towd.TowageOnDepartureDraught_DMT.HasValue) - rootTowd.TowageOnDeparture[i].TowageOnDepartureDraught_DMT = decimal.Round((decimal)towd.TowageOnDepartureDraught_DMT.Value, 1); - rootTowd.TowageOnDeparture[i].TowageOnDepartureRemarks = towd.TowageOnDepartureRemarks; - } - // rootTowd.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootTowd; - } - break; - #endregion - - #region HAZA - //Felderreihenfolge wegen einfacher Test/Impl. entspricht genau dem XLS Sheet - case Message.NotificationClass.HAZA: - { - RootHAZA rootHAZA = new RootHAZA(); - HAZ haz = message.Elements[0] as HAZ; - - if (haz.NoDPGOnBoardOnArrival ?? false) - { - rootHAZA.Items = new object[1]; - rootHAZA.Items[0] = "Y"; - rootHAZA.ItemsElementName = new ItemsChoiceType5[1]; - rootHAZA.ItemsElementName[0] = ItemsChoiceType5.NoDPGOnBoardOnArrival; - } - else - { - rootHAZA.Items = new object[4]; - rootHAZA.ItemsElementName = new ItemsChoiceType5[4]; - // if(haz.DPGManifestOnBoardOnArrival.HasValue) - - rootHAZA.ItemsElementName[0] = ItemsChoiceType5.DPGManifestOnBoardOnArrival; - rootHAZA.Items[0] = (haz.DPGManifestOnBoardOnArrival ?? false) ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - - rootHAZA.ItemsElementName[1] = ItemsChoiceType5.INFShipClass; - - if (haz.INFShipClass.HasValue) - { - INFClassType infShipClass = (INFClassType)haz.INFShipClass.Value; - rootHAZA.Items[1] = infShipClass; - } - - rootHAZA.ItemsElementName[2] = ItemsChoiceType5.MOUBaltic; - rootHAZA.Items[2] = (haz.MOUBaltic ?? false) ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - - #region HAZ positions - - rootHAZA.ItemsElementName[3] = ItemsChoiceType5.DPGOnArrival; - - RootHAZADPGOnArrival dpgOnArrival = new RootHAZADPGOnArrival(); - - #region IMDG - if (haz.IMDGPositions.Count > 0) - { - dpgOnArrival.DPGItemIMDG = new Request.IMDGPosition[haz.IMDGPositions.Count]; - for (int i = 0; i < haz.IMDGPositions.Count; i++) + if (was.LastWasteDisposalDate.HasValue) { - bsmd.database.IMDGPosition imdgPos = haz.IMDGPositions[i] as bsmd.database.IMDGPosition; - Request.IMDGPosition rootIMDG = new Request.IMDGPosition(); + choiceType3s.Add(ItemsChoiceType3.LastWasteDisposalDate); + wasteItems.Add(was.LastWasteDisposalDate); + } - rootIMDG.UNNumber = imdgPos.UNNumber; - if (imdgPos.PackingGroup.HasValue) - rootIMDG.PackingGroup = (Request.PackingGroupType)imdgPos.PackingGroup.Value; - rootIMDG.ProperShippingName = imdgPos.ProperShippingName; - rootIMDG.IMOClass = imdgPos.IMOClass; - // rootIMDG.CompatibilityGroup = imdgPos.CompatibilityGroup; - rootIMDG.TechnicalName = imdgPos.TechnicalName; - rootIMDG.NetExplosiveMass_KGMSpecified = imdgPos.NetExplosiveMass_KGM.HasValue; - if (imdgPos.NetExplosiveMass_KGM.HasValue) - rootIMDG.NetExplosiveMass_KGM = decimal.Round((decimal)imdgPos.NetExplosiveMass_KGM.Value, 3); - rootIMDG.Flashpoint_CEL = imdgPos.Flashpoint_CEL; - rootIMDG.Class7NuclideName = imdgPos.Class7NuclideName; - if(imdgPos.Class7MaxActivity_BQL.HasValue) + choiceType3s.Add(ItemsChoiceType3.LastWasteDisposalPort); + wasteItems.Add(was.LastWasteDisposalPort); + + choiceType3s.Add(ItemsChoiceType3.NextWasteDisposalPort); + wasteItems.Add(was.NextWasteDisposalPort); + + for (int i = 0; i < was.WasteDisposalServiceProvider.Count; i++) + { + if ((was.WasteDisposalServiceProvider[i]).WasteDisposalServiceProviderName.Trim().IsNullOrEmpty()) continue; + choiceType3s.Add(ItemsChoiceType3.WasteDisposalServiceProviderName); + wasteItems.Add((was.WasteDisposalServiceProvider[i]).WasteDisposalServiceProviderName); + } + + for (int j = 0; j < was.Waste.Count; j++) + { + choiceType3s.Add(ItemsChoiceType3.WasteItem); + RootWASWasteItem rww = new RootWASWasteItem(); + Waste waste = was.Waste[j]; + if ((waste.WasteType ?? 0) == 0) continue; // not a valid waste type + + rww.WasteType = new RootWASWasteItemWasteType(); + rww.WasteType.WasteCode = waste.WasteType.ToString(); + rww.WasteType.WasteDescription = waste.WasteDescription; + + rww.WasteDisposalAmount_MTQ = decimal.Round((decimal)(waste.WasteDisposalAmount_MTQ ?? 0), 3); + rww.WasteCapacity_MTQ = decimal.Round((decimal)(waste.WasteCapacity_MTQ ?? 0), 3); + rww.WasteAmountRetained_MTQ = decimal.Round((decimal)(waste.WasteAmountRetained_MTQ ?? 0), 3); + rww.WasteAmountGeneratedTillNextPort_MTQ = decimal.Round((decimal)(waste.WasteAmountGeneratedTillNextPort_MTQ ?? 0), 3); + rww.RemainingWasteDeliveryPort = waste.WasteDisposalPort; + wasteItems.Add(rww); + } + + rootWAS.ItemsElementName = choiceType3s.ToArray(); + rootWAS.Items = wasteItems.ToArray(); + } + // rootWAS.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootWAS; + } + break; + #endregion + + #region TOWA + case Message.NotificationClass.TOWA: + { + RootTOWA rootTowa = new RootTOWA(); + rootTowa.TowageOnArrival = new RootTOWATowageOnArrival[message.Elements.Count]; + for (int i = 0; i < message.Elements.Count; i++) + { + TOWA towa = message.Elements[i] as TOWA; + rootTowa.TowageOnArrival[i] = new RootTOWATowageOnArrival(); + rootTowa.TowageOnArrival[i].TowageOnArrivalName = towa.TowageOnArrivalName; + rootTowa.TowageOnArrival[i].TowageOnArrivalFlag = towa.TowageOnArrivalFlag; + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator = new RootTOWATowageOnArrivalTowageOnArrivalOperator(); + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorCompanyName = towa.TowageOnArrivalOperatorCompanyName; + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorStreetAndNumber = towa.TowageOnArrivalOperatorStreetNameAndNumber; + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorPostalCode = towa.TowageOnArrivalOperatorPostalCode; + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorCity = towa.TowageOnArrivalOperatorCity; + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorCountry = towa.TowageOnArrivalOperatorCountry; + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorPhone = towa.TowageOnArrivalOperatorPhone; + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorFax = towa.TowageOnArrivalOperatorFax; + rootTowa.TowageOnArrival[i].TowageOnArrivalOperator.TowageOnArrivalOperatorEMail = towa.TowageOnArrivalOperatorEmail; + if (towa.TowageOnArrivalGrossTonnage.HasValue) + rootTowa.TowageOnArrival[i].TowageOnArrivalGrossTonnage = towa.TowageOnArrivalGrossTonnage.Value; + if (towa.TowageOnArrivalLengthOverall_MTR.HasValue) + rootTowa.TowageOnArrival[i].TowageOnArrivalLengthOverall_MTR = decimal.Round((decimal)towa.TowageOnArrivalLengthOverall_MTR.Value, 2); + if (towa.TowageOnArrivalBeam_MTR.HasValue) + rootTowa.TowageOnArrival[i].TowageOnArrivalBeam_MTR = decimal.Round((decimal)towa.TowageOnArrivalBeam_MTR.Value, 2); + rootTowa.TowageOnArrival[i].TowageOnArrivalPurposeOfCall = towa.TowageOnArrivalPurposeOfCall; + if (towa.TowageOnArrivalDraught_DMT.HasValue) + rootTowa.TowageOnArrival[i].TowageOnArrivalDraught_DMT = decimal.Round((decimal)towa.TowageOnArrivalDraught_DMT.Value, 1); + rootTowa.TowageOnArrival[i].TowageOnArrivalRemarks = towa.TowageOnArrivalRemarks; + } + // rootTowa.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootTowa; + } + break; + #endregion + + #region TOWD + case Message.NotificationClass.TOWD: + { + RootTOWD rootTowd = new RootTOWD(); + rootTowd.TowageOnDeparture = new RootTOWDTowageOnDeparture[message.Elements.Count]; + for (int i = 0; i < message.Elements.Count; i++) + { + TOWD towd = message.Elements[i] as TOWD; + rootTowd.TowageOnDeparture[i] = new RootTOWDTowageOnDeparture(); + rootTowd.TowageOnDeparture[i].TowageOnDepartureName = towd.TowageOnDepartureName; + rootTowd.TowageOnDeparture[i].TowageOnDepartureFlag = towd.TowageOnDepartureFlag; + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator = new RootTOWDTowageOnDepartureTowageOnDepartureOperator(); + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorCompanyName = towd.TowageOnDepartureOperatorCompanyName; + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorStreetAndNumber = towd.TowageOnDepartureOperatorStreetNameAndNumber; + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorPostalCode = towd.TowageOnDepartureOperatorPostalCode; + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorCity = towd.TowageOnDepartureOperatorCity; + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorCountry = towd.TowageOnDepartureOperatorCountry; + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorPhone = towd.TowageOnDepartureOperatorPhone; + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorFax = towd.TowageOnDepartureOperatorFax; + rootTowd.TowageOnDeparture[i].TowageOnDepartureOperator.TowageOnDepartureOperatorEMail = towd.TowageOnDepartureOperatorEmail; + if (towd.TowageOnDepartureLengthOverall_MTR.HasValue) + rootTowd.TowageOnDeparture[i].TowageOnDepartureLengthOverall_MTR = decimal.Round((decimal)towd.TowageOnDepartureLengthOverall_MTR.Value, 2); + if (towd.TowageOnDepartureBeam_MTR.HasValue) + rootTowd.TowageOnDeparture[i].TowageOnDepartureBeam_MTR = decimal.Round((decimal)towd.TowageOnDepartureBeam_MTR.Value, 2); + if (towd.TowageOnDepartureDraught_DMT.HasValue) + rootTowd.TowageOnDeparture[i].TowageOnDepartureDraught_DMT = decimal.Round((decimal)towd.TowageOnDepartureDraught_DMT.Value, 1); + rootTowd.TowageOnDeparture[i].TowageOnDepartureRemarks = towd.TowageOnDepartureRemarks; + } + // rootTowd.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootTowd; + } + break; + #endregion + + #region HAZA + //Felderreihenfolge wegen einfacher Test/Impl. entspricht genau dem XLS Sheet + case Message.NotificationClass.HAZA: + { + RootHAZA rootHAZA = new RootHAZA(); + HAZ haz = message.Elements[0] as HAZ; + + if (haz.NoDPGOnBoardOnArrival ?? false) + { + rootHAZA.Items = new object[1]; + rootHAZA.Items[0] = "Y"; + rootHAZA.ItemsElementName = new ItemsChoiceType5[1]; + rootHAZA.ItemsElementName[0] = ItemsChoiceType5.NoDPGOnBoardOnArrival; + } + else + { + rootHAZA.Items = new object[4]; + rootHAZA.ItemsElementName = new ItemsChoiceType5[4]; + // if(haz.DPGManifestOnBoardOnArrival.HasValue) + + rootHAZA.ItemsElementName[0] = ItemsChoiceType5.DPGManifestOnBoardOnArrival; + rootHAZA.Items[0] = (haz.DPGManifestOnBoardOnArrival ?? false) ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + + rootHAZA.ItemsElementName[1] = ItemsChoiceType5.INFShipClass; + + if (haz.INFShipClass.HasValue) + { + INFClassType infShipClass = (INFClassType)haz.INFShipClass.Value; + rootHAZA.Items[1] = infShipClass; + } + + rootHAZA.ItemsElementName[2] = ItemsChoiceType5.MOUBaltic; + rootHAZA.Items[2] = (haz.MOUBaltic ?? false) ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + + #region HAZ positions + + rootHAZA.ItemsElementName[3] = ItemsChoiceType5.DPGOnArrival; + + RootHAZADPGOnArrival dpgOnArrival = new RootHAZADPGOnArrival(); + + #region IMDG + if (haz.IMDGPositions.Count > 0) + { + dpgOnArrival.DPGItemIMDG = new Request.IMDGPosition[haz.IMDGPositions.Count]; + for (int i = 0; i < haz.IMDGPositions.Count; i++) { - rootIMDG.Class7MaxActivity = new IMDGPositionClass7MaxActivity(); - rootIMDG.Class7MaxActivity.MaxActivityValue = decimal.Round((decimal)imdgPos.Class7MaxActivity_BQL.Value, 3); - // rootIMDG.Class7MaxActivity.MaxActivityUnit = imdgPos. - } - rootIMDG.Class7CategorySpecified = imdgPos.Class7Category.HasValue; - if (imdgPos.Class7Category.HasValue) - rootIMDG.Class7Category = imdgPos.Class7Category.Value; - rootIMDG.Class7TransportIndexSpecified = imdgPos.Class7TransportIndex.HasValue; - if (imdgPos.Class7TransportIndex.HasValue) - rootIMDG.Class7TransportIndex = decimal.Round((decimal)imdgPos.Class7TransportIndex.Value, 1); - rootIMDG.Class7CSISpecified = imdgPos.Class7CSI.HasValue; - if (imdgPos.Class7CSI.HasValue) - rootIMDG.Class7CSI = imdgPos.Class7CSI.Value; - rootIMDG.ControlTemperature_CELSpecified = imdgPos.ControlTemperature_CEL.HasValue; - if (imdgPos.ControlTemperature_CEL.HasValue) - rootIMDG.ControlTemperature_CEL = decimal.Round((decimal)imdgPos.ControlTemperature_CEL.Value, 2); - rootIMDG.EmergencyTemperature_CELSpecified = imdgPos.EmergencyTemperature_CEL.HasValue; - if (imdgPos.EmergencyTemperature_CEL.HasValue) - rootIMDG.EmergencyTemperature_CEL = decimal.Round((decimal)imdgPos.EmergencyTemperature_CEL.Value, 2); - if (imdgPos.SubsidiaryRiskList.Count > 0) - { - rootIMDG.SubsidiaryRisks = new string[imdgPos.SubsidiaryRiskList.Count]; - for (int sCount = 0; sCount < imdgPos.SubsidiaryRiskList.Count; sCount++) - rootIMDG.SubsidiaryRisks[sCount] = imdgPos.SubsidiaryRiskList[sCount].SubsidiaryRisk; + bsmd.database.IMDGPosition imdgPos = haz.IMDGPositions[i] as bsmd.database.IMDGPosition; + Request.IMDGPosition rootIMDG = new Request.IMDGPosition(); + + rootIMDG.UNNumber = imdgPos.UNNumber; + if (imdgPos.PackingGroup.HasValue) + rootIMDG.PackingGroup = (Request.PackingGroupType)imdgPos.PackingGroup.Value; + rootIMDG.ProperShippingName = imdgPos.ProperShippingName; + rootIMDG.IMOClass = imdgPos.IMOClass; + // rootIMDG.CompatibilityGroup = imdgPos.CompatibilityGroup; + rootIMDG.TechnicalName = imdgPos.TechnicalName; + rootIMDG.NetExplosiveMass_KGMSpecified = imdgPos.NetExplosiveMass_KGM.HasValue; + if (imdgPos.NetExplosiveMass_KGM.HasValue) + rootIMDG.NetExplosiveMass_KGM = decimal.Round((decimal)imdgPos.NetExplosiveMass_KGM.Value, 3); + rootIMDG.Flashpoint_CEL = imdgPos.Flashpoint_CEL; + rootIMDG.Class7NuclideName = imdgPos.Class7NuclideName; + if (imdgPos.Class7MaxActivity_BQL.HasValue) + { + rootIMDG.Class7MaxActivity = new IMDGPositionClass7MaxActivity(); + rootIMDG.Class7MaxActivity.MaxActivityValue = decimal.Round((decimal)imdgPos.Class7MaxActivity_BQL.Value, 3); + // rootIMDG.Class7MaxActivity.MaxActivityUnit = imdgPos. + } + rootIMDG.Class7CategorySpecified = imdgPos.Class7Category.HasValue; + if (imdgPos.Class7Category.HasValue) + rootIMDG.Class7Category = imdgPos.Class7Category.Value; + rootIMDG.Class7TransportIndexSpecified = imdgPos.Class7TransportIndex.HasValue; + if (imdgPos.Class7TransportIndex.HasValue) + rootIMDG.Class7TransportIndex = decimal.Round((decimal)imdgPos.Class7TransportIndex.Value, 1); + rootIMDG.Class7CSISpecified = imdgPos.Class7CSI.HasValue; + if (imdgPos.Class7CSI.HasValue) + rootIMDG.Class7CSI = imdgPos.Class7CSI.Value; + rootIMDG.ControlTemperature_CELSpecified = imdgPos.ControlTemperature_CEL.HasValue; + if (imdgPos.ControlTemperature_CEL.HasValue) + rootIMDG.ControlTemperature_CEL = decimal.Round((decimal)imdgPos.ControlTemperature_CEL.Value, 2); + rootIMDG.EmergencyTemperature_CELSpecified = imdgPos.EmergencyTemperature_CEL.HasValue; + if (imdgPos.EmergencyTemperature_CEL.HasValue) + rootIMDG.EmergencyTemperature_CEL = decimal.Round((decimal)imdgPos.EmergencyTemperature_CEL.Value, 2); + if (imdgPos.SubsidiaryRiskList.Count > 0) + { + rootIMDG.SubsidiaryRisks = new string[imdgPos.SubsidiaryRiskList.Count]; + for (int sCount = 0; sCount < imdgPos.SubsidiaryRiskList.Count; sCount++) + rootIMDG.SubsidiaryRisks[sCount] = imdgPos.SubsidiaryRiskList[sCount].SubsidiaryRisk; + } + if (imdgPos.MarinePollutant.HasValue) + rootIMDG.MarinePollutant = imdgPos.MarinePollutant.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (imdgPos.NumberOfPackages.HasValue) + rootIMDG.NumberOfPackages = imdgPos.NumberOfPackages.Value; + rootIMDG.PackageType = imdgPos.PackageType; + if (imdgPos.LimitedQuantities.HasValue) + rootIMDG.LimitedQuantities = imdgPos.LimitedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (imdgPos.ExceptedQuantities.HasValue) + rootIMDG.ExceptedQuantities = imdgPos.ExceptedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + rootIMDG.NetQuantity_KGMSpecified = imdgPos.NetQuantity_KGM.HasValue; + if (imdgPos.NetQuantity_KGM.HasValue) + rootIMDG.NetQuantity_KGM = decimal.Round((decimal)imdgPos.NetQuantity_KGM.Value, 3); + rootIMDG.GrossQuantity_KGMSpecified = imdgPos.GrossQuantity_KGM.HasValue; + if (imdgPos.GrossQuantity_KGM.HasValue) + rootIMDG.GrossQuantity_KGM = decimal.Round((decimal)imdgPos.GrossQuantity_KGM.Value, 3); + rootIMDG.Volume_MTQSpecified = imdgPos.Volume_MTQ.HasValue; + if (imdgPos.Volume_MTQ.HasValue) + rootIMDG.Volume_MTQ = decimal.Round((decimal)imdgPos.Volume_MTQ.Value, 3); + rootIMDG.GeneralCargoIBCSpecified = imdgPos.GeneralCargoIBC.HasValue; + if (imdgPos.GeneralCargoIBC.HasValue) + rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (!imdgPos.ContainerNumber.IsNullOrEmpty()) + rootIMDG.ContainerNumber = imdgPos.ContainerNumber; + if (!imdgPos.VehicleLicenseNumber.IsNullOrEmpty()) + rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber; + + if (imdgPos.StowagePosition.IsNullOrEmpty()) + { + rootIMDG.Items = new string[3]; + rootIMDG.ItemsElementName = new ItemsChoiceType4[3]; + + rootIMDG.Items[0] = imdgPos.Bay; + rootIMDG.ItemsElementName[0] = ItemsChoiceType4.Bay; + + rootIMDG.Items[1] = imdgPos.Row; + rootIMDG.ItemsElementName[1] = ItemsChoiceType4.Row; + + rootIMDG.Items[2] = imdgPos.Tier; + rootIMDG.ItemsElementName[2] = ItemsChoiceType4.Tier; + } + else + { + rootIMDG.Items = new string[1] { imdgPos.StowagePosition }; + rootIMDG.ItemsElementName = new ItemsChoiceType4[1] { ItemsChoiceType4.StowagePosition }; + } + + rootIMDG.PortOfLoading = imdgPos.PortOfLoading; + rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge; + if (!imdgPos.Remarks.IsNullOrEmpty()) + rootIMDG.Remarks = imdgPos.Remarks; + + dpgOnArrival.DPGItemIMDG[i] = rootIMDG; } - if (imdgPos.MarinePollutant.HasValue) - rootIMDG.MarinePollutant = imdgPos.MarinePollutant.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (imdgPos.NumberOfPackages.HasValue) - rootIMDG.NumberOfPackages = imdgPos.NumberOfPackages.Value; - rootIMDG.PackageType = imdgPos.PackageType; - if (imdgPos.LimitedQuantities.HasValue) - rootIMDG.LimitedQuantities = imdgPos.LimitedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (imdgPos.ExceptedQuantities.HasValue) - rootIMDG.ExceptedQuantities = imdgPos.ExceptedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - rootIMDG.NetQuantity_KGMSpecified = imdgPos.NetQuantity_KGM.HasValue; - if (imdgPos.NetQuantity_KGM.HasValue) - rootIMDG.NetQuantity_KGM = decimal.Round((decimal)imdgPos.NetQuantity_KGM.Value, 3); - rootIMDG.GrossQuantity_KGMSpecified = imdgPos.GrossQuantity_KGM.HasValue; - if (imdgPos.GrossQuantity_KGM.HasValue) - rootIMDG.GrossQuantity_KGM = decimal.Round((decimal)imdgPos.GrossQuantity_KGM.Value, 3); - rootIMDG.Volume_MTQSpecified = imdgPos.Volume_MTQ.HasValue; - if (imdgPos.Volume_MTQ.HasValue) - rootIMDG.Volume_MTQ = decimal.Round((decimal)imdgPos.Volume_MTQ.Value, 3); - rootIMDG.GeneralCargoIBCSpecified = imdgPos.GeneralCargoIBC.HasValue; - if (imdgPos.GeneralCargoIBC.HasValue) - rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (!imdgPos.ContainerNumber.IsNullOrEmpty()) - rootIMDG.ContainerNumber = imdgPos.ContainerNumber; - if (!imdgPos.VehicleLicenseNumber.IsNullOrEmpty()) - rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber; + } + #endregion - if (imdgPos.StowagePosition.IsNullOrEmpty()) + #region IBC + if (haz.IBCPositions.Count > 0) + { + dpgOnArrival.DPGItemIBC = new bsmd.dbh.Request.IBCPosition[haz.IBCPositions.Count]; + for (int i = 0; i < haz.IBCPositions.Count; i++) { - rootIMDG.Items = new string[3]; - rootIMDG.ItemsElementName = new ItemsChoiceType4[3]; + bsmd.dbh.Request.IBCPosition rootIBC = new bsmd.dbh.Request.IBCPosition(); + bsmd.database.IBCPosition ibcPos = haz.IBCPositions[i] as bsmd.database.IBCPosition; - rootIMDG.Items[0] = imdgPos.Bay; - rootIMDG.ItemsElementName[0] = ItemsChoiceType4.Bay; + rootIBC.ProductName = ibcPos.ProductName; + if (ibcPos.PollutionCategory.HasValue) + rootIBC.PollutionCategory = (PollutionCategoryType)ibcPos.PollutionCategory.Value; + rootIBC.HazardsSpecified = ibcPos.Hazards.HasValue; + if (ibcPos.Hazards.HasValue) + rootIBC.Hazards = (HazardType)ibcPos.Hazards.Value; + if (ibcPos.FlashpointInformation.HasValue) + rootIBC.FlashpointInformation = (FlashpointInfoType)ibcPos.FlashpointInformation.Value; + rootIBC.Flashpoint_CEL = ibcPos.Flashpoint_CEL; + if (ibcPos.Quantity_KGM.HasValue) + rootIBC.Quantity_KGM = decimal.Round((decimal)ibcPos.Quantity_KGM.Value, 3); + rootIBC.StowagePosition = ibcPos.StowagePosition; + rootIBC.PortOfLoading = ibcPos.PortOfLoading; + rootIBC.PortOfDischarge = ibcPos.PortOfDischarge; + rootIBC.SpecRef15_19Specified = ibcPos.SpecRef15_19.HasValue; + if (ibcPos.SpecRef15_19.HasValue) + rootIBC.SpecRef15_19 = ibcPos.SpecRef15_19.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (!ibcPos.Remarks.IsNullOrEmpty()) + rootIBC.Remarks = ibcPos.Remarks; - rootIMDG.Items[1] = imdgPos.Row; - rootIMDG.ItemsElementName[1] = ItemsChoiceType4.Row; - - rootIMDG.Items[2] = imdgPos.Tier; - rootIMDG.ItemsElementName[2] = ItemsChoiceType4.Tier; + dpgOnArrival.DPGItemIBC[i] = rootIBC; } - else + } + #endregion + + #region IGC + if (haz.IGCPositions.Count > 0) + { + dpgOnArrival.DPGItemIGC = new bsmd.dbh.Request.IGCPosition[haz.IGCPositions.Count]; + for (int i = 0; i < haz.IGCPositions.Count; i++) { - rootIMDG.Items = new string[1] { imdgPos.StowagePosition }; - rootIMDG.ItemsElementName = new ItemsChoiceType4[1] { ItemsChoiceType4.StowagePosition }; + bsmd.dbh.Request.IGCPosition rootIGC = new bsmd.dbh.Request.IGCPosition(); + bsmd.database.IGCPosition igcPos = haz.IGCPositions[i] as bsmd.database.IGCPosition; + + rootIGC.UNNumber = igcPos.UNNumber; + rootIGC.IMOClass = igcPos.IMOClass; + rootIGC.ProductName = igcPos.ProductName; + if (igcPos.Quantity_KGM.HasValue) + rootIGC.Quantity_KGM = decimal.Round((decimal)igcPos.Quantity_KGM.Value, 3); + rootIGC.StowagePosition = igcPos.StowagePosition; + rootIGC.PortOfLoading = igcPos.PortOfLoading; + rootIGC.PortOfDischarge = igcPos.PortOfDischarge; + if (!igcPos.Remarks.IsNullOrEmpty()) + rootIGC.Remarks = igcPos.Remarks; + + dpgOnArrival.DPGItemIGC[i] = rootIGC; } - - rootIMDG.PortOfLoading = imdgPos.PortOfLoading; - rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge; - if (!imdgPos.Remarks.IsNullOrEmpty()) - rootIMDG.Remarks = imdgPos.Remarks; - - dpgOnArrival.DPGItemIMDG[i] = rootIMDG; } - } - #endregion + #endregion - #region IBC - if (haz.IBCPositions.Count > 0) - { - dpgOnArrival.DPGItemIBC = new bsmd.dbh.Request.IBCPosition[haz.IBCPositions.Count]; - for (int i = 0; i < haz.IBCPositions.Count; i++) + #region IMSBC + if (haz.IMSBCPositions.Count > 0) { - bsmd.dbh.Request.IBCPosition rootIBC = new bsmd.dbh.Request.IBCPosition(); - bsmd.database.IBCPosition ibcPos = haz.IBCPositions[i] as bsmd.database.IBCPosition; + dpgOnArrival.DPGItemIMSBC = new bsmd.dbh.Request.IMSBCPosition[haz.IMSBCPositions.Count]; + for (int i = 0; i < haz.IMSBCPositions.Count; i++) + { + bsmd.dbh.Request.IMSBCPosition rootIMSBC = new bsmd.dbh.Request.IMSBCPosition(); + bsmd.database.IMSBCPosition imsbcPos = haz.IMSBCPositions[i] as bsmd.database.IMSBCPosition; - rootIBC.ProductName = ibcPos.ProductName; - if (ibcPos.PollutionCategory.HasValue) - rootIBC.PollutionCategory = (PollutionCategoryType)ibcPos.PollutionCategory.Value; - rootIBC.HazardsSpecified = ibcPos.Hazards.HasValue; - if (ibcPos.Hazards.HasValue) - rootIBC.Hazards = (HazardType)ibcPos.Hazards.Value; - if (ibcPos.FlashpointInformation.HasValue) - rootIBC.FlashpointInformation = (FlashpointInfoType)ibcPos.FlashpointInformation.Value; - rootIBC.Flashpoint_CEL = ibcPos.Flashpoint_CEL; - if (ibcPos.Quantity_KGM.HasValue) - rootIBC.Quantity_KGM = decimal.Round((decimal)ibcPos.Quantity_KGM.Value, 3); - rootIBC.StowagePosition = ibcPos.StowagePosition; - rootIBC.PortOfLoading = ibcPos.PortOfLoading; - rootIBC.PortOfDischarge = ibcPos.PortOfDischarge; - rootIBC.SpecRef15_19Specified = ibcPos.SpecRef15_19.HasValue; - if (ibcPos.SpecRef15_19.HasValue) - rootIBC.SpecRef15_19 = ibcPos.SpecRef15_19.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (!ibcPos.Remarks.IsNullOrEmpty()) - rootIBC.Remarks = ibcPos.Remarks; + rootIMSBC.BulkCargoShippingName = imsbcPos.BulkCargoShippingName; + if (imsbcPos.MHB.HasValue) + rootIMSBC.MHB = imsbcPos.MHB.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + rootIMSBC.UNNumber = imsbcPos.UNNumber; + rootIMSBC.IMOClass = imsbcPos.IMOClass; + if (imsbcPos.Quantity_KGM.HasValue) + rootIMSBC.Quantity_KGM = decimal.Round((decimal)imsbcPos.Quantity_KGM.Value, 3); + rootIMSBC.StowagePosition = imsbcPos.StowagePosition; + rootIMSBC.PortOfLoading = imsbcPos.PortOfLoading; + rootIMSBC.PortOfDischarge = imsbcPos.PortOfDischarge; + if (!imsbcPos.Remarks.IsNullOrEmpty()) + rootIMSBC.Remarks = imsbcPos.Remarks; + rootIMSBC.IMOHazardClassSpecified = imsbcPos.IMOHazardClass.HasValue; + if (imsbcPos.IMOHazardClass.HasValue) + rootIMSBC.IMOHazardClass = (IMOHazardClassType)imsbcPos.IMOHazardClass.Value + ; - dpgOnArrival.DPGItemIBC[i] = rootIBC; + dpgOnArrival.DPGItemIMSBC[i] = rootIMSBC; + } } - } - #endregion + #endregion - #region IGC - if (haz.IGCPositions.Count > 0) - { - dpgOnArrival.DPGItemIGC = new bsmd.dbh.Request.IGCPosition[haz.IGCPositions.Count]; - for (int i = 0; i < haz.IGCPositions.Count; i++) + #region MARPOL_ANNEX_I + if (haz.MARPOLPositions.Count > 0) { - bsmd.dbh.Request.IGCPosition rootIGC = new bsmd.dbh.Request.IGCPosition(); - bsmd.database.IGCPosition igcPos = haz.IGCPositions[i] as bsmd.database.IGCPosition; + dpgOnArrival.DPGItemMARPOLAnnexI = new MARPOLPosition[haz.MARPOLPositions.Count]; + for (int i = 0; i < haz.MARPOLPositions.Count; i++) + { + MARPOLPosition rootMarpol = new MARPOLPosition(); + MARPOL_Annex_I_Position marpolPos = haz.MARPOLPositions[i] as MARPOL_Annex_I_Position; - rootIGC.UNNumber = igcPos.UNNumber; - rootIGC.IMOClass = igcPos.IMOClass; - rootIGC.ProductName = igcPos.ProductName; - if (igcPos.Quantity_KGM.HasValue) - rootIGC.Quantity_KGM = decimal.Round((decimal)igcPos.Quantity_KGM.Value, 3); - rootIGC.StowagePosition = igcPos.StowagePosition; - rootIGC.PortOfLoading = igcPos.PortOfLoading; - rootIGC.PortOfDischarge = igcPos.PortOfDischarge; - if (!igcPos.Remarks.IsNullOrEmpty()) - rootIGC.Remarks = igcPos.Remarks; + rootMarpol.Name = marpolPos.Name; + if (marpolPos.FlashpointInformation.HasValue) + rootMarpol.FlashpointInformation = (FlashpointInfoType)marpolPos.FlashpointInformation.Value; + rootMarpol.Flashpoint_CEL = marpolPos.Flashpoint_CEL; + if (marpolPos.Quantity_KGM.HasValue) + rootMarpol.Quantity_KGM = decimal.Round((decimal)marpolPos.Quantity_KGM.Value, 3); + rootMarpol.StowagePosition = marpolPos.StowagePosition; + rootMarpol.PortOfLoading = marpolPos.PortOfLoading; + rootMarpol.PortOfDischarge = marpolPos.PortOfDischarge; + if (!marpolPos.Remarks.IsNullOrEmpty()) + rootMarpol.Remarks = marpolPos.Remarks; - dpgOnArrival.DPGItemIGC[i] = rootIGC; + dpgOnArrival.DPGItemMARPOLAnnexI[i] = rootMarpol; + } } + #endregion + + rootHAZA.Items[3] = dpgOnArrival; + + #endregion + } - #endregion - - #region IMSBC - if (haz.IMSBCPositions.Count > 0) - { - dpgOnArrival.DPGItemIMSBC = new bsmd.dbh.Request.IMSBCPosition[haz.IMSBCPositions.Count]; - for (int i = 0; i < haz.IMSBCPositions.Count; i++) - { - bsmd.dbh.Request.IMSBCPosition rootIMSBC = new bsmd.dbh.Request.IMSBCPosition(); - bsmd.database.IMSBCPosition imsbcPos = haz.IMSBCPositions[i] as bsmd.database.IMSBCPosition; - - rootIMSBC.BulkCargoShippingName = imsbcPos.BulkCargoShippingName; - if (imsbcPos.MHB.HasValue) - rootIMSBC.MHB = imsbcPos.MHB.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - rootIMSBC.UNNumber = imsbcPos.UNNumber; - rootIMSBC.IMOClass = imsbcPos.IMOClass; - if (imsbcPos.Quantity_KGM.HasValue) - rootIMSBC.Quantity_KGM = decimal.Round((decimal)imsbcPos.Quantity_KGM.Value, 3); - rootIMSBC.StowagePosition = imsbcPos.StowagePosition; - rootIMSBC.PortOfLoading = imsbcPos.PortOfLoading; - rootIMSBC.PortOfDischarge = imsbcPos.PortOfDischarge; - if (!imsbcPos.Remarks.IsNullOrEmpty()) - rootIMSBC.Remarks = imsbcPos.Remarks; - rootIMSBC.IMOHazardClassSpecified = imsbcPos.IMOHazardClass.HasValue; - if (imsbcPos.IMOHazardClass.HasValue) - rootIMSBC.IMOHazardClass = (IMOHazardClassType)imsbcPos.IMOHazardClass.Value - ; - - dpgOnArrival.DPGItemIMSBC[i] = rootIMSBC; - } - } - #endregion - - #region MARPOL_ANNEX_I - if (haz.MARPOLPositions.Count > 0) - { - dpgOnArrival.DPGItemMARPOLAnnexI = new MARPOLPosition[haz.MARPOLPositions.Count]; - for (int i = 0; i < haz.MARPOLPositions.Count; i++) - { - MARPOLPosition rootMarpol = new MARPOLPosition(); - MARPOL_Annex_I_Position marpolPos = haz.MARPOLPositions[i] as MARPOL_Annex_I_Position; - - rootMarpol.Name = marpolPos.Name; - if (marpolPos.FlashpointInformation.HasValue) - rootMarpol.FlashpointInformation = (FlashpointInfoType)marpolPos.FlashpointInformation.Value; - rootMarpol.Flashpoint_CEL = marpolPos.Flashpoint_CEL; - if (marpolPos.Quantity_KGM.HasValue) - rootMarpol.Quantity_KGM = decimal.Round((decimal)marpolPos.Quantity_KGM.Value, 3); - rootMarpol.StowagePosition = marpolPos.StowagePosition; - rootMarpol.PortOfLoading = marpolPos.PortOfLoading; - rootMarpol.PortOfDischarge = marpolPos.PortOfDischarge; - if (!marpolPos.Remarks.IsNullOrEmpty()) - rootMarpol.Remarks = marpolPos.Remarks; - - dpgOnArrival.DPGItemMARPOLAnnexI[i] = rootMarpol; - } - } - #endregion - - rootHAZA.Items[3] = dpgOnArrival; - - #endregion - + // rootHAZA.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootHAZA; } - // rootHAZA.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootHAZA; - } - break; - #endregion + break; + #endregion - #region HAZD - //Felderreihenfolge wegen einfacher Test/Impl. entspricht genau dem XLS Sheet - case Message.NotificationClass.HAZD: - { - RootHAZD rootHAZD = new RootHAZD(); - HAZ haz = message.Elements[0] as HAZ; - - if (haz.NoDPGOnBoardOnArrival ?? false) + #region HAZD + //Felderreihenfolge wegen einfacher Test/Impl. entspricht genau dem XLS Sheet + case Message.NotificationClass.HAZD: { - rootHAZD.ItemsElementName = new ItemsChoiceType6[1]; - rootHAZD.ItemsElementName[0] = ItemsChoiceType6.NoDPGOnBoardOnDeparture; + RootHAZD rootHAZD = new RootHAZD(); + HAZ haz = message.Elements[0] as HAZ; - rootHAZD.Items = new object[1]; - rootHAZD.Items[0] = "Y"; + if (haz.NoDPGOnBoardOnArrival ?? false) + { + rootHAZD.ItemsElementName = new ItemsChoiceType6[1]; + rootHAZD.ItemsElementName[0] = ItemsChoiceType6.NoDPGOnBoardOnDeparture; + + rootHAZD.Items = new object[1]; + rootHAZD.Items[0] = "Y"; + } + + else + { + rootHAZD.Items = new object[4]; + rootHAZD.ItemsElementName = new ItemsChoiceType6[4]; + + rootHAZD.ItemsElementName[0] = ItemsChoiceType6.DPGManifestOnBoardOnDeparture; + if (haz.DPGManifestOnBoardOnArrival.HasValue) + rootHAZD.Items[0] = haz.DPGManifestOnBoardOnArrival.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + + rootHAZD.ItemsElementName[1] = ItemsChoiceType6.INFShipClass; + + if (haz.INFShipClass.HasValue) + { + INFClassType infShipClass = (INFClassType)haz.INFShipClass.Value; + rootHAZD.Items[1] = infShipClass; + } + + rootHAZD.ItemsElementName[2] = ItemsChoiceType6.MOUBaltic; + rootHAZD.Items[2] = (haz.MOUBaltic ?? false) ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + + #region HAZ positions + + RootHAZDDPGOnDeparture dpgOnDeparture = new RootHAZDDPGOnDeparture(); + + #region IMDG + if (haz.IMDGPositions.Count > 0) + { + dpgOnDeparture.DPGItemIMDG = new bsmd.dbh.Request.IMDGPosition[haz.IMDGPositions.Count]; + for (int i = 0; i < haz.IMDGPositions.Count; i++) + { + bsmd.database.IMDGPosition imdgPos = haz.IMDGPositions[i] as bsmd.database.IMDGPosition; + bsmd.dbh.Request.IMDGPosition rootIMDG = new bsmd.dbh.Request.IMDGPosition(); + + rootIMDG.UNNumber = imdgPos.UNNumber; + if (imdgPos.PackingGroup.HasValue) + rootIMDG.PackingGroup = (PackingGroupType)imdgPos.PackingGroup.Value; + rootIMDG.ProperShippingName = imdgPos.ProperShippingName; + rootIMDG.IMOClass = imdgPos.IMOClass; + // rootIMDG.CompatibilityGroup = imdgPos.CompatibilityGroup; + rootIMDG.TechnicalName = imdgPos.TechnicalName; + rootIMDG.NetExplosiveMass_KGMSpecified = imdgPos.NetExplosiveMass_KGM.HasValue; + if (imdgPos.NetExplosiveMass_KGM.HasValue) + rootIMDG.NetExplosiveMass_KGM = decimal.Round((decimal)imdgPos.NetExplosiveMass_KGM.Value, 3); + rootIMDG.Flashpoint_CEL = imdgPos.Flashpoint_CEL; + rootIMDG.Class7NuclideName = imdgPos.Class7NuclideName; + if (imdgPos.Class7MaxActivity_BQL.HasValue) + { + rootIMDG.Class7MaxActivity = new IMDGPositionClass7MaxActivity(); + rootIMDG.Class7MaxActivity.MaxActivityValue = decimal.Round((decimal)imdgPos.Class7MaxActivity_BQL.Value, 6); + } + rootIMDG.Class7CategorySpecified = imdgPos.Class7Category.HasValue; + if (imdgPos.Class7Category.HasValue) + rootIMDG.Class7Category = imdgPos.Class7Category.Value; + rootIMDG.Class7TransportIndexSpecified = imdgPos.Class7TransportIndex.HasValue; + if (imdgPos.Class7TransportIndex.HasValue) + rootIMDG.Class7TransportIndex = decimal.Round((decimal)imdgPos.Class7TransportIndex.Value, 1); + rootIMDG.Class7CSISpecified = imdgPos.Class7CSI.HasValue; + if (imdgPos.Class7CSI.HasValue) + rootIMDG.Class7CSI = imdgPos.Class7CSI.Value; + rootIMDG.ControlTemperature_CELSpecified = imdgPos.ControlTemperature_CEL.HasValue; + if (imdgPos.ControlTemperature_CEL.HasValue) + rootIMDG.ControlTemperature_CEL = decimal.Round((decimal)imdgPos.ControlTemperature_CEL.Value, 2); + rootIMDG.EmergencyTemperature_CELSpecified = imdgPos.EmergencyTemperature_CEL.HasValue; + if (imdgPos.EmergencyTemperature_CEL.HasValue) + rootIMDG.EmergencyTemperature_CEL = decimal.Round((decimal)imdgPos.EmergencyTemperature_CEL.Value, 2); + if (imdgPos.SubsidiaryRiskList.Count > 0) + { + rootIMDG.SubsidiaryRisks = new string[imdgPos.SubsidiaryRiskList.Count]; + for (int sCount = 0; sCount < imdgPos.SubsidiaryRiskList.Count; sCount++) + rootIMDG.SubsidiaryRisks[sCount] = imdgPos.SubsidiaryRiskList[sCount].SubsidiaryRisk; + } + if (imdgPos.MarinePollutant.HasValue) + rootIMDG.MarinePollutant = imdgPos.MarinePollutant.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (imdgPos.NumberOfPackages.HasValue) + rootIMDG.NumberOfPackages = imdgPos.NumberOfPackages.Value; + rootIMDG.PackageType = imdgPos.PackageType; + if (imdgPos.LimitedQuantities.HasValue) + rootIMDG.LimitedQuantities = imdgPos.LimitedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (imdgPos.ExceptedQuantities.HasValue) + rootIMDG.ExceptedQuantities = imdgPos.ExceptedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + rootIMDG.NetQuantity_KGMSpecified = imdgPos.NetQuantity_KGM.HasValue; + if (imdgPos.NetQuantity_KGM.HasValue) + rootIMDG.NetQuantity_KGM = decimal.Round((decimal)imdgPos.NetQuantity_KGM.Value, 3); + rootIMDG.GrossQuantity_KGMSpecified = imdgPos.GrossQuantity_KGM.HasValue; + if (imdgPos.GrossQuantity_KGM.HasValue) + rootIMDG.GrossQuantity_KGM = decimal.Round((decimal)imdgPos.GrossQuantity_KGM.Value, 3); + rootIMDG.Volume_MTQSpecified = imdgPos.Volume_MTQ.HasValue; + if (imdgPos.Volume_MTQ.HasValue) + rootIMDG.Volume_MTQ = decimal.Round((decimal)imdgPos.Volume_MTQ.Value, 3); + rootIMDG.GeneralCargoIBCSpecified = imdgPos.GeneralCargoIBC.HasValue; + if (imdgPos.GeneralCargoIBC.HasValue) + rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (!imdgPos.ContainerNumber.IsNullOrEmpty()) + rootIMDG.ContainerNumber = imdgPos.ContainerNumber; + if (!imdgPos.VehicleLicenseNumber.IsNullOrEmpty()) + rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber; + + if (imdgPos.StowagePosition.IsNullOrEmpty()) + { + rootIMDG.Items = new string[3]; + rootIMDG.ItemsElementName = new ItemsChoiceType4[3]; + + rootIMDG.Items[0] = imdgPos.Bay; + rootIMDG.ItemsElementName[0] = ItemsChoiceType4.Bay; + + rootIMDG.Items[1] = imdgPos.Row; + rootIMDG.ItemsElementName[1] = ItemsChoiceType4.Row; + + rootIMDG.Items[2] = imdgPos.Tier; + rootIMDG.ItemsElementName[2] = ItemsChoiceType4.Tier; + } + else + { + rootIMDG.Items = new string[1] { imdgPos.StowagePosition }; + rootIMDG.ItemsElementName = new ItemsChoiceType4[1] { ItemsChoiceType4.StowagePosition }; + } + + rootIMDG.PortOfLoading = imdgPos.PortOfLoading; + rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge; + if (!imdgPos.Remarks.IsNullOrEmpty()) + rootIMDG.Remarks = imdgPos.Remarks; + + dpgOnDeparture.DPGItemIMDG[i] = rootIMDG; + } + } + #endregion + + #region IBC + if (haz.IBCPositions.Count > 0) + { + dpgOnDeparture.DPGItemIBC = new bsmd.dbh.Request.IBCPosition[haz.IBCPositions.Count]; + for (int i = 0; i < haz.IBCPositions.Count; i++) + { + bsmd.dbh.Request.IBCPosition rootIBC = new bsmd.dbh.Request.IBCPosition(); + bsmd.database.IBCPosition ibcPos = haz.IBCPositions[i] as bsmd.database.IBCPosition; + + rootIBC.ProductName = ibcPos.ProductName; + if (ibcPos.PollutionCategory.HasValue) + rootIBC.PollutionCategory = (PollutionCategoryType)ibcPos.PollutionCategory.Value; + rootIBC.HazardsSpecified = ibcPos.Hazards.HasValue; + if (ibcPos.Hazards.HasValue) + rootIBC.Hazards = (HazardType)ibcPos.Hazards.Value; + if (ibcPos.FlashpointInformation.HasValue) + rootIBC.FlashpointInformation = (FlashpointInfoType)ibcPos.FlashpointInformation.Value; + rootIBC.Flashpoint_CEL = ibcPos.Flashpoint_CEL; + if (ibcPos.Quantity_KGM.HasValue) + rootIBC.Quantity_KGM = decimal.Round((decimal)ibcPos.Quantity_KGM.Value, 3); + rootIBC.StowagePosition = ibcPos.StowagePosition; + rootIBC.PortOfLoading = ibcPos.PortOfLoading; + rootIBC.PortOfDischarge = ibcPos.PortOfDischarge; + rootIBC.SpecRef15_19Specified = ibcPos.SpecRef15_19.HasValue; + if (ibcPos.SpecRef15_19.HasValue) + rootIBC.SpecRef15_19 = ibcPos.SpecRef15_19.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + if (!ibcPos.Remarks.IsNullOrEmpty()) + rootIBC.Remarks = ibcPos.Remarks; + + dpgOnDeparture.DPGItemIBC[i] = rootIBC; + } + } + #endregion + + #region IGC + if (haz.IGCPositions.Count > 0) + { + dpgOnDeparture.DPGItemIGC = new bsmd.dbh.Request.IGCPosition[haz.IGCPositions.Count]; + for (int i = 0; i < haz.IGCPositions.Count; i++) + { + bsmd.dbh.Request.IGCPosition rootIGC = new bsmd.dbh.Request.IGCPosition(); + bsmd.database.IGCPosition igcPos = haz.IGCPositions[i] as bsmd.database.IGCPosition; + + rootIGC.UNNumber = igcPos.UNNumber; + rootIGC.IMOClass = igcPos.IMOClass; + rootIGC.ProductName = igcPos.ProductName; + if (igcPos.Quantity_KGM.HasValue) + rootIGC.Quantity_KGM = decimal.Round((decimal)igcPos.Quantity_KGM.Value, 3); + rootIGC.StowagePosition = igcPos.StowagePosition; + rootIGC.PortOfLoading = igcPos.PortOfLoading; + rootIGC.PortOfDischarge = igcPos.PortOfDischarge; + if (!igcPos.Remarks.IsNullOrEmpty()) + rootIGC.Remarks = igcPos.Remarks; + + dpgOnDeparture.DPGItemIGC[i] = rootIGC; + } + } + #endregion + + #region IMSBC + if (haz.IMSBCPositions.Count > 0) + { + dpgOnDeparture.DPGItemIMSBC = new bsmd.dbh.Request.IMSBCPosition[haz.IMSBCPositions.Count]; + for (int i = 0; i < haz.IMSBCPositions.Count; i++) + { + bsmd.dbh.Request.IMSBCPosition rootIMSBC = new bsmd.dbh.Request.IMSBCPosition(); + bsmd.database.IMSBCPosition imsbcPos = haz.IMSBCPositions[i] as bsmd.database.IMSBCPosition; + + rootIMSBC.BulkCargoShippingName = imsbcPos.BulkCargoShippingName; + if (imsbcPos.MHB.HasValue) + rootIMSBC.MHB = imsbcPos.MHB.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; + rootIMSBC.UNNumber = imsbcPos.UNNumber; + rootIMSBC.IMOClass = imsbcPos.IMOClass; + if (imsbcPos.Quantity_KGM.HasValue) + rootIMSBC.Quantity_KGM = decimal.Round((decimal)imsbcPos.Quantity_KGM.Value, 3); + rootIMSBC.StowagePosition = imsbcPos.StowagePosition; + rootIMSBC.PortOfLoading = imsbcPos.PortOfLoading; + rootIMSBC.PortOfDischarge = imsbcPos.PortOfDischarge; + if (!imsbcPos.Remarks.IsNullOrEmpty()) + rootIMSBC.Remarks = imsbcPos.Remarks; + rootIMSBC.IMOHazardClassSpecified = imsbcPos.IMOHazardClass.HasValue; + if (imsbcPos.IMOHazardClass.HasValue) + rootIMSBC.IMOHazardClass = (IMOHazardClassType)imsbcPos.IMOHazardClass.Value; + + dpgOnDeparture.DPGItemIMSBC[i] = rootIMSBC; + } + } + #endregion + + #region MARPOL_ANNEX_I + if (haz.MARPOLPositions.Count > 0) + { + dpgOnDeparture.DPGItemMARPOLAnnexI = new MARPOLPosition[haz.MARPOLPositions.Count]; + for (int i = 0; i < haz.MARPOLPositions.Count; i++) + { + MARPOLPosition rootMarpol = new MARPOLPosition(); + MARPOL_Annex_I_Position marpolPos = haz.MARPOLPositions[i] as MARPOL_Annex_I_Position; + + rootMarpol.Name = marpolPos.Name; + if (marpolPos.FlashpointInformation.HasValue) + rootMarpol.FlashpointInformation = (FlashpointInfoType)marpolPos.FlashpointInformation.Value; + rootMarpol.Flashpoint_CEL = marpolPos.Flashpoint_CEL; + if (marpolPos.Quantity_KGM.HasValue) + rootMarpol.Quantity_KGM = decimal.Round((decimal)marpolPos.Quantity_KGM.Value, 3); + rootMarpol.StowagePosition = marpolPos.StowagePosition; + rootMarpol.PortOfLoading = marpolPos.PortOfLoading; + rootMarpol.PortOfDischarge = marpolPos.PortOfDischarge; + if (!rootMarpol.Remarks.IsNullOrEmpty()) + rootMarpol.Remarks = marpolPos.Remarks; + + dpgOnDeparture.DPGItemMARPOLAnnexI[i] = rootMarpol; + } + } + #endregion + + rootHAZD.ItemsElementName[3] = ItemsChoiceType6.DPGOnDeparture; + rootHAZD.Items[3] = dpgOnDeparture; + + #endregion + + } + // rootHAZD.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootHAZD; } + break; + #endregion - else + #region WAS_RCPT + + case Message.NotificationClass.WAS_RCPT: { - rootHAZD.Items = new object[4]; - rootHAZD.ItemsElementName = new ItemsChoiceType6[4]; + RootWAS_RCPT rootWAS_RCPT = new RootWAS_RCPT(); + rootWAS_RCPT.WasteDeliveryReceipt = new RootWAS_RCPTWasteDeliveryReceipt[message.Elements.Count]; - rootHAZD.ItemsElementName[0] = ItemsChoiceType6.DPGManifestOnBoardOnDeparture; - if (haz.DPGManifestOnBoardOnArrival.HasValue) - rootHAZD.Items[0] = haz.DPGManifestOnBoardOnArrival.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - - rootHAZD.ItemsElementName[1] = ItemsChoiceType6.INFShipClass; - - if (haz.INFShipClass.HasValue) + for (int i = 0; i < message.Elements.Count; i++) { - INFClassType infShipClass = (INFClassType)haz.INFShipClass.Value; - rootHAZD.Items[1] = infShipClass; - } - rootHAZD.ItemsElementName[2] = ItemsChoiceType6.MOUBaltic; - rootHAZD.Items[2] = (haz.MOUBaltic ?? false) ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - - #region HAZ positions - - RootHAZDDPGOnDeparture dpgOnDeparture = new RootHAZDDPGOnDeparture(); - - #region IMDG - if (haz.IMDGPositions.Count > 0) - { - dpgOnDeparture.DPGItemIMDG = new bsmd.dbh.Request.IMDGPosition[haz.IMDGPositions.Count]; - for (int i = 0; i < haz.IMDGPositions.Count; i++) + WAS_RCPT was_rcpt = message.Elements[i] as WAS_RCPT; + RootWAS_RCPTWasteDeliveryReceipt rwr = new RootWAS_RCPTWasteDeliveryReceipt(); + rwr.IdentificationNumber = was_rcpt.IdentificationNumber; + rwr.PortReceptionFacilityName = was_rcpt.PortReceptionFacilityName; + rwr.PortReceptionFacilityProviderName = was_rcpt.PortReceptionFacilityProviderName; + rwr.TreatmentFacilityProvider = new string[was_rcpt.TreatmentFacilityProvider.Count]; + for (int j = 0; j < was_rcpt.TreatmentFacilityProvider.Count; j++) { - bsmd.database.IMDGPosition imdgPos = haz.IMDGPositions[i] as bsmd.database.IMDGPosition; - bsmd.dbh.Request.IMDGPosition rootIMDG = new bsmd.dbh.Request.IMDGPosition(); - - rootIMDG.UNNumber = imdgPos.UNNumber; - if (imdgPos.PackingGroup.HasValue) - rootIMDG.PackingGroup = (PackingGroupType)imdgPos.PackingGroup.Value; - rootIMDG.ProperShippingName = imdgPos.ProperShippingName; - rootIMDG.IMOClass = imdgPos.IMOClass; - // rootIMDG.CompatibilityGroup = imdgPos.CompatibilityGroup; - rootIMDG.TechnicalName = imdgPos.TechnicalName; - rootIMDG.NetExplosiveMass_KGMSpecified = imdgPos.NetExplosiveMass_KGM.HasValue; - if (imdgPos.NetExplosiveMass_KGM.HasValue) - rootIMDG.NetExplosiveMass_KGM = decimal.Round((decimal)imdgPos.NetExplosiveMass_KGM.Value, 3); - rootIMDG.Flashpoint_CEL = imdgPos.Flashpoint_CEL; - rootIMDG.Class7NuclideName = imdgPos.Class7NuclideName; - if (imdgPos.Class7MaxActivity_BQL.HasValue) - { - rootIMDG.Class7MaxActivity = new IMDGPositionClass7MaxActivity(); - rootIMDG.Class7MaxActivity.MaxActivityValue = decimal.Round((decimal)imdgPos.Class7MaxActivity_BQL.Value, 6); - } - rootIMDG.Class7CategorySpecified = imdgPos.Class7Category.HasValue; - if (imdgPos.Class7Category.HasValue) - rootIMDG.Class7Category = imdgPos.Class7Category.Value; - rootIMDG.Class7TransportIndexSpecified = imdgPos.Class7TransportIndex.HasValue; - if (imdgPos.Class7TransportIndex.HasValue) - rootIMDG.Class7TransportIndex = decimal.Round((decimal)imdgPos.Class7TransportIndex.Value, 1); - rootIMDG.Class7CSISpecified = imdgPos.Class7CSI.HasValue; - if (imdgPos.Class7CSI.HasValue) - rootIMDG.Class7CSI = imdgPos.Class7CSI.Value; - rootIMDG.ControlTemperature_CELSpecified = imdgPos.ControlTemperature_CEL.HasValue; - if (imdgPos.ControlTemperature_CEL.HasValue) - rootIMDG.ControlTemperature_CEL = decimal.Round((decimal)imdgPos.ControlTemperature_CEL.Value, 2); - rootIMDG.EmergencyTemperature_CELSpecified = imdgPos.EmergencyTemperature_CEL.HasValue; - if (imdgPos.EmergencyTemperature_CEL.HasValue) - rootIMDG.EmergencyTemperature_CEL = decimal.Round((decimal)imdgPos.EmergencyTemperature_CEL.Value, 2); - if (imdgPos.SubsidiaryRiskList.Count > 0) - { - rootIMDG.SubsidiaryRisks = new string[imdgPos.SubsidiaryRiskList.Count]; - for (int sCount = 0; sCount < imdgPos.SubsidiaryRiskList.Count; sCount++) - rootIMDG.SubsidiaryRisks[sCount] = imdgPos.SubsidiaryRiskList[sCount].SubsidiaryRisk; - } - if (imdgPos.MarinePollutant.HasValue) - rootIMDG.MarinePollutant = imdgPos.MarinePollutant.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (imdgPos.NumberOfPackages.HasValue) - rootIMDG.NumberOfPackages = imdgPos.NumberOfPackages.Value; - rootIMDG.PackageType = imdgPos.PackageType; - if (imdgPos.LimitedQuantities.HasValue) - rootIMDG.LimitedQuantities = imdgPos.LimitedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (imdgPos.ExceptedQuantities.HasValue) - rootIMDG.ExceptedQuantities = imdgPos.ExceptedQuantities.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - rootIMDG.NetQuantity_KGMSpecified = imdgPos.NetQuantity_KGM.HasValue; - if (imdgPos.NetQuantity_KGM.HasValue) - rootIMDG.NetQuantity_KGM = decimal.Round((decimal)imdgPos.NetQuantity_KGM.Value, 3); - rootIMDG.GrossQuantity_KGMSpecified = imdgPos.GrossQuantity_KGM.HasValue; - if (imdgPos.GrossQuantity_KGM.HasValue) - rootIMDG.GrossQuantity_KGM = decimal.Round((decimal)imdgPos.GrossQuantity_KGM.Value, 3); - rootIMDG.Volume_MTQSpecified = imdgPos.Volume_MTQ.HasValue; - if (imdgPos.Volume_MTQ.HasValue) - rootIMDG.Volume_MTQ = decimal.Round((decimal)imdgPos.Volume_MTQ.Value, 3); - rootIMDG.GeneralCargoIBCSpecified = imdgPos.GeneralCargoIBC.HasValue; - if (imdgPos.GeneralCargoIBC.HasValue) - rootIMDG.GeneralCargoIBC = imdgPos.GeneralCargoIBC.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (!imdgPos.ContainerNumber.IsNullOrEmpty()) - rootIMDG.ContainerNumber = imdgPos.ContainerNumber; - if (!imdgPos.VehicleLicenseNumber.IsNullOrEmpty()) - rootIMDG.VehicleLicenseNumber = imdgPos.VehicleLicenseNumber; - - if (imdgPos.StowagePosition.IsNullOrEmpty()) - { - rootIMDG.Items = new string[3]; - rootIMDG.ItemsElementName = new ItemsChoiceType4[3]; - - rootIMDG.Items[0] = imdgPos.Bay; - rootIMDG.ItemsElementName[0] = ItemsChoiceType4.Bay; - - rootIMDG.Items[1] = imdgPos.Row; - rootIMDG.ItemsElementName[1] = ItemsChoiceType4.Row; - - rootIMDG.Items[2] = imdgPos.Tier; - rootIMDG.ItemsElementName[2] = ItemsChoiceType4.Tier; - } - else - { - rootIMDG.Items = new string[1] { imdgPos.StowagePosition }; - rootIMDG.ItemsElementName = new ItemsChoiceType4[1] { ItemsChoiceType4.StowagePosition }; - } - - rootIMDG.PortOfLoading = imdgPos.PortOfLoading; - rootIMDG.PortOfDischarge = imdgPos.PortOfDischarge; - if (!imdgPos.Remarks.IsNullOrEmpty()) - rootIMDG.Remarks = imdgPos.Remarks; - - dpgOnDeparture.DPGItemIMDG[i] = rootIMDG; + rwr.TreatmentFacilityProvider[j] = was_rcpt.TreatmentFacilityProvider[j].TreatmentFacilityProviderName; + } + if (was_rcpt.WasteDeliveryDateFrom.HasValue) + rwr.WasteDeliveryDateFrom = was_rcpt.WasteDeliveryDateFrom.Value; + if (was_rcpt.WasteDeliveryDateTo.HasValue) + rwr.WasteDeliveryDateTo = was_rcpt.WasteDeliveryDateTo.Value; + rwr.WasteReceived = new RootWAS_RCPTWasteDeliveryReceiptWasteReceived[was_rcpt.WasteReceived.Count]; + for (int j = 0; j < was_rcpt.WasteReceived.Count; j++) + { + rwr.WasteReceived[j] = new RootWAS_RCPTWasteDeliveryReceiptWasteReceived(); + rwr.WasteReceived[j].AmountWasteReceived_MTQ = decimal.Round((decimal)was_rcpt.WasteReceived[j].AmountWasteReceived_MTQ.Value, 3); + rwr.WasteReceived[j].WasteType = new RootWAS_RCPTWasteDeliveryReceiptWasteReceivedWasteType(); + rwr.WasteReceived[j].WasteType.WasteCode = was_rcpt.WasteReceived[j].WasteCode; + rwr.WasteReceived[j].WasteType.WasteDescription = was_rcpt.WasteReceived[j].WasteDescription; } } - #endregion - - #region IBC - if (haz.IBCPositions.Count > 0) - { - dpgOnDeparture.DPGItemIBC = new bsmd.dbh.Request.IBCPosition[haz.IBCPositions.Count]; - for (int i = 0; i < haz.IBCPositions.Count; i++) - { - bsmd.dbh.Request.IBCPosition rootIBC = new bsmd.dbh.Request.IBCPosition(); - bsmd.database.IBCPosition ibcPos = haz.IBCPositions[i] as bsmd.database.IBCPosition; - - rootIBC.ProductName = ibcPos.ProductName; - if (ibcPos.PollutionCategory.HasValue) - rootIBC.PollutionCategory = (PollutionCategoryType)ibcPos.PollutionCategory.Value; - rootIBC.HazardsSpecified = ibcPos.Hazards.HasValue; - if (ibcPos.Hazards.HasValue) - rootIBC.Hazards = (HazardType)ibcPos.Hazards.Value; - if (ibcPos.FlashpointInformation.HasValue) - rootIBC.FlashpointInformation = (FlashpointInfoType)ibcPos.FlashpointInformation.Value; - rootIBC.Flashpoint_CEL = ibcPos.Flashpoint_CEL; - if (ibcPos.Quantity_KGM.HasValue) - rootIBC.Quantity_KGM = decimal.Round((decimal)ibcPos.Quantity_KGM.Value, 3); - rootIBC.StowagePosition = ibcPos.StowagePosition; - rootIBC.PortOfLoading = ibcPos.PortOfLoading; - rootIBC.PortOfDischarge = ibcPos.PortOfDischarge; - rootIBC.SpecRef15_19Specified = ibcPos.SpecRef15_19.HasValue; - if (ibcPos.SpecRef15_19.HasValue) - rootIBC.SpecRef15_19 = ibcPos.SpecRef15_19.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - if (!ibcPos.Remarks.IsNullOrEmpty()) - rootIBC.Remarks = ibcPos.Remarks; - - dpgOnDeparture.DPGItemIBC[i] = rootIBC; - } - } - #endregion - - #region IGC - if (haz.IGCPositions.Count > 0) - { - dpgOnDeparture.DPGItemIGC = new bsmd.dbh.Request.IGCPosition[haz.IGCPositions.Count]; - for (int i = 0; i < haz.IGCPositions.Count; i++) - { - bsmd.dbh.Request.IGCPosition rootIGC = new bsmd.dbh.Request.IGCPosition(); - bsmd.database.IGCPosition igcPos = haz.IGCPositions[i] as bsmd.database.IGCPosition; - - rootIGC.UNNumber = igcPos.UNNumber; - rootIGC.IMOClass = igcPos.IMOClass; - rootIGC.ProductName = igcPos.ProductName; - if (igcPos.Quantity_KGM.HasValue) - rootIGC.Quantity_KGM = decimal.Round((decimal)igcPos.Quantity_KGM.Value, 3); - rootIGC.StowagePosition = igcPos.StowagePosition; - rootIGC.PortOfLoading = igcPos.PortOfLoading; - rootIGC.PortOfDischarge = igcPos.PortOfDischarge; - if (!igcPos.Remarks.IsNullOrEmpty()) - rootIGC.Remarks = igcPos.Remarks; - - dpgOnDeparture.DPGItemIGC[i] = rootIGC; - } - } - #endregion - - #region IMSBC - if (haz.IMSBCPositions.Count > 0) - { - dpgOnDeparture.DPGItemIMSBC = new bsmd.dbh.Request.IMSBCPosition[haz.IMSBCPositions.Count]; - for (int i = 0; i < haz.IMSBCPositions.Count; i++) - { - bsmd.dbh.Request.IMSBCPosition rootIMSBC = new bsmd.dbh.Request.IMSBCPosition(); - bsmd.database.IMSBCPosition imsbcPos = haz.IMSBCPositions[i] as bsmd.database.IMSBCPosition; - - rootIMSBC.BulkCargoShippingName = imsbcPos.BulkCargoShippingName; - if (imsbcPos.MHB.HasValue) - rootIMSBC.MHB = imsbcPos.MHB.Value ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; - rootIMSBC.UNNumber = imsbcPos.UNNumber; - rootIMSBC.IMOClass = imsbcPos.IMOClass; - if (imsbcPos.Quantity_KGM.HasValue) - rootIMSBC.Quantity_KGM = decimal.Round((decimal)imsbcPos.Quantity_KGM.Value, 3); - rootIMSBC.StowagePosition = imsbcPos.StowagePosition; - rootIMSBC.PortOfLoading = imsbcPos.PortOfLoading; - rootIMSBC.PortOfDischarge = imsbcPos.PortOfDischarge; - if (!imsbcPos.Remarks.IsNullOrEmpty()) - rootIMSBC.Remarks = imsbcPos.Remarks; - rootIMSBC.IMOHazardClassSpecified = imsbcPos.IMOHazardClass.HasValue; - if (imsbcPos.IMOHazardClass.HasValue) - rootIMSBC.IMOHazardClass = (IMOHazardClassType)imsbcPos.IMOHazardClass.Value; - - dpgOnDeparture.DPGItemIMSBC[i] = rootIMSBC; - } - } - #endregion - - #region MARPOL_ANNEX_I - if (haz.MARPOLPositions.Count > 0) - { - dpgOnDeparture.DPGItemMARPOLAnnexI = new MARPOLPosition[haz.MARPOLPositions.Count]; - for (int i = 0; i < haz.MARPOLPositions.Count; i++) - { - MARPOLPosition rootMarpol = new MARPOLPosition(); - MARPOL_Annex_I_Position marpolPos = haz.MARPOLPositions[i] as MARPOL_Annex_I_Position; - - rootMarpol.Name = marpolPos.Name; - if (marpolPos.FlashpointInformation.HasValue) - rootMarpol.FlashpointInformation = (FlashpointInfoType)marpolPos.FlashpointInformation.Value; - rootMarpol.Flashpoint_CEL = marpolPos.Flashpoint_CEL; - if (marpolPos.Quantity_KGM.HasValue) - rootMarpol.Quantity_KGM = decimal.Round((decimal)marpolPos.Quantity_KGM.Value, 3); - rootMarpol.StowagePosition = marpolPos.StowagePosition; - rootMarpol.PortOfLoading = marpolPos.PortOfLoading; - rootMarpol.PortOfDischarge = marpolPos.PortOfDischarge; - if (!rootMarpol.Remarks.IsNullOrEmpty()) - rootMarpol.Remarks = marpolPos.Remarks; - - dpgOnDeparture.DPGItemMARPOLAnnexI[i] = rootMarpol; - } - } - #endregion - - rootHAZD.ItemsElementName[3] = ItemsChoiceType6.DPGOnDeparture; - rootHAZD.Items[3] = dpgOnDeparture; - - #endregion - + // rootWAS_RCPT.ReportingParty = rp; + root.Items = new object[1]; + root.Items[0] = rootWAS_RCPT; } - // rootHAZD.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootHAZD; - } - break; - #endregion + break; - #region WAS_RCPT + #endregion - case Message.NotificationClass.WAS_RCPT: - { - RootWAS_RCPT rootWAS_RCPT = new RootWAS_RCPT(); - rootWAS_RCPT.WasteDeliveryReceipt = new RootWAS_RCPTWasteDeliveryReceipt[message.Elements.Count]; - - for(int i = 0; i < message.Elements.Count; i++) { - - WAS_RCPT was_rcpt = message.Elements[i] as WAS_RCPT; - RootWAS_RCPTWasteDeliveryReceipt rwr = new RootWAS_RCPTWasteDeliveryReceipt(); - rwr.IdentificationNumber = was_rcpt.IdentificationNumber; - rwr.PortReceptionFacilityName = was_rcpt.PortReceptionFacilityName; - rwr.PortReceptionFacilityProviderName = was_rcpt.PortReceptionFacilityProviderName; - rwr.TreatmentFacilityProvider = new string[was_rcpt.TreatmentFacilityProvider.Count]; - for (int j = 0; j < was_rcpt.TreatmentFacilityProvider.Count; j++) - { - rwr.TreatmentFacilityProvider[j] = was_rcpt.TreatmentFacilityProvider[j].TreatmentFacilityProviderName; - } - if(was_rcpt.WasteDeliveryDateFrom.HasValue) - rwr.WasteDeliveryDateFrom = was_rcpt.WasteDeliveryDateFrom.Value; - if(was_rcpt.WasteDeliveryDateTo.HasValue) - rwr.WasteDeliveryDateTo = was_rcpt.WasteDeliveryDateTo.Value; - rwr.WasteReceived = new RootWAS_RCPTWasteDeliveryReceiptWasteReceived[was_rcpt.WasteReceived.Count]; - for (int j = 0; j < was_rcpt.WasteReceived.Count; j++) - { - rwr.WasteReceived[j] = new RootWAS_RCPTWasteDeliveryReceiptWasteReceived(); - rwr.WasteReceived[j].AmountWasteReceived_MTQ = decimal.Round((decimal)was_rcpt.WasteReceived[j].AmountWasteReceived_MTQ.Value, 3); - rwr.WasteReceived[j].WasteType = new RootWAS_RCPTWasteDeliveryReceiptWasteReceivedWasteType(); - rwr.WasteReceived[j].WasteType.WasteCode = was_rcpt.WasteReceived[j].WasteCode; - rwr.WasteReceived[j].WasteType.WasteDescription = was_rcpt.WasteReceived[j].WasteDescription; - } - } - // rootWAS_RCPT.ReportingParty = rp; - root.Items = new object[1]; - root.Items[0] = rootWAS_RCPT; - } - break; - - #endregion - - default: - _log.WarnFormat("Message type {0} not (yet) supported for dbh", message.MessageNotificationClassDisplay); - break; + default: + _log.WarnFormat("Message type {0} not (yet) supported for dbh", message.MessageNotificationClassDisplay); + break; + } } // serialize output structure to file