// // Class: Util // Current CLR: 4.0.30319.34209 // System: Microsoft Visual Studio 10.0 // Author: dani // Created: 3/1/2015 8:05:05 PM // // Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. using System; using System.Collections.Generic; using log4net; using bsmd.database; using bsmd.dbh.DBHWebReference; namespace bsmd.dbh { public class Request { private static ILog _log = LogManager.GetLogger(typeof(Request)); public static bool SendMessage(Message message) { if (message == null) return false; RootType rootType = RootType.DATA; if (message.ReportingParty == null) { _log.ErrorFormat("Reporting party not set on message {0}", message.Id); return false; } if ((message.MessageNotificationClass != Message.NotificationClass.VISIT) && (message.MessageNotificationClass != Message.NotificationClass.TRANSIT) && (message.Elements.Count == 0)) { _log.ErrorFormat("trying to send message {0} class {1} but there are no depending record elements", message.Id, message.MessageNotificationClass); return false; } // map message to dbh NSWRequest object Dbh_Osis_Answ_Ws client = new Dbh_Osis_Answ_Ws(); RootReportingParty rp = new RootReportingParty(); rp.RPCity = message.ReportingParty.City; rp.RPCountry = message.ReportingParty.Country; rp.RPEMail = message.ReportingParty.EMail; rp.RPFax = message.ReportingParty.Fax; rp.RPFirstName = message.ReportingParty.FirstName; rp.RPLastName = message.ReportingParty.LastName; rp.RPName = message.ReportingParty.Name; rp.RPPhone = message.ReportingParty.Phone; rp.RPPostalCode = message.ReportingParty.PostalCode; rp.RPStreetAndNumber = message.ReportingParty.StreetAndNumber; rp.RPTypeSpecified = message.ReportingParty.ReportingPartyType.HasValue; if (rp.RPTypeSpecified) rp.RPType = (RootReportingPartyRPType)message.ReportingParty.ReportingPartyType.Value; DateTime timestamp = DateTime.Now; string version = "2.0"; object item = null; string senderReference = message.Id.Value.ToString("N"); ItemChoiceType2 itemChoiceType2 = ItemChoiceType2.Visit; // ? switch (message.MessageNotificationClass) { #region VISIT case Message.NotificationClass.VISIT: { RootVisit rootVisit = new RootVisit(); rootType = RootType.VISIT; if (message.MessageCore.IMO != null) { rootVisit.ItemElementName = ItemChoiceType.IMONumber; rootVisit.Item = message.MessageCore.IMO; } else { rootVisit.ItemElementName = ItemChoiceType.ENINumber; rootVisit.Item = message.MessageCore.ENI; } rootVisit.PortOfCall = message.MessageCore.PoC; rootVisit.ETAPortOfCall = message.MessageCore.ETA.Value; item = rootVisit; break; } #endregion #region TRANSIT case Message.NotificationClass.TRANSIT: { RootTransit rootTransit = new RootTransit(); rootType = RootType.TRANSIT; if (message.MessageCore.IMO != null) { rootTransit.ItemElementName = ItemChoiceType1.IMONumber; rootTransit.Item = message.MessageCore.IMO; } else { rootTransit.ItemElementName = ItemChoiceType1.ENINumber; rootTransit.Item = message.MessageCore.ENI; } rootTransit.ETAKielCanal = message.MessageCore.ETA.Value; item = rootTransit; break; } #endregion #region NOA_NOD case Message.NotificationClass.NOA_NOD: { NOA_NOD noa_nod = message.Elements[0] as NOA_NOD; if (noa_nod != null) { RootNOA_NOD rootNoaNod = new RootNOA_NOD(); if (noa_nod.ETAToNextPort.HasValue) rootNoaNod.ETAToNextPort = noa_nod.ETAToNextPort.Value; rootNoaNod.ETAToNextPortSpecified = noa_nod.ETAToNextPort.HasValue; if (noa_nod.ETDFromLastPort.HasValue) rootNoaNod.ETDFromLastPort = noa_nod.ETDFromLastPort.Value; rootNoaNod.ETDFromLastPortSpecified = noa_nod.ETDFromLastPort.HasValue; rootNoaNod.LastPort = noa_nod.LastPort; rootNoaNod.NextPort = noa_nod.NextPort; ItemsChoiceType[] choiceArray = new ItemsChoiceType[3]; object[] choices = new object[3]; choiceArray[0] = ItemsChoiceType.CallPurpose; RootNOA_NODCallPurpose rnncp = new RootNOA_NODCallPurpose(); if (noa_nod.CallPurposeCode.HasValue) rnncp.CallPurposeCode = noa_nod.CallPurposeCode.Value; rnncp.CallPurposeDescription = noa_nod.CallPurposeDescription; choices[0] = rnncp; if (noa_nod.ETAToKielCanal.HasValue) { choiceArray[1] = ItemsChoiceType.ETAToKielCanal; choices[1] = noa_nod.ETAToKielCanal.Value; } if (noa_nod.ETAToPortOfCall.HasValue) { choiceArray[1] = ItemsChoiceType.ETAToPortOfCall; choices[1] = noa_nod.ETAToPortOfCall.Value; } if (noa_nod.ETDFromKielCanal.HasValue) { choiceArray[2] = ItemsChoiceType.ETDFromKielCanal; choices[2] = noa_nod.ETDFromKielCanal.Value; } if (noa_nod.ETDFromPortOfCall.HasValue) { choiceArray[2] = ItemsChoiceType.ETDFromPortOfCall; choices[2] = noa_nod.ETDFromPortOfCall.Value; } item = rootNoaNod; } break; } #endregion #region ATA case Message.NotificationClass.ATA: { ATA ata = message.Elements[0] as ATA; if (ata != null) { RootATA rootATA = new RootATA(); if (ata.ATAPortOfCall.HasValue) rootATA.ATAPortOfCall = ata.ATAPortOfCall.Value; item = rootATA; } break; } #endregion #region ATD case Message.NotificationClass.ATD: { ATD atd = message.Elements[0] as ATD; if (atd != null) { RootATD rootATD = new RootATD(); rootATD.ATDPortOfCall = atd.ATDPortOfCall.Value; item = rootATD; } break; } #endregion #region SEC case Message.NotificationClass.SEC: { RootSEC rootSEC = new RootSEC(); SEC sec = message.Elements[0] as SEC; int numFields = (sec.SECSimplification ?? false) ? 2 : (15 + sec.LastTenPortFacilitesCalled.Count + sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Count); rootSEC.Items = new object[numFields]; rootSEC.ItemsElementName = new ItemsChoiceType1[numFields]; if (sec.SECSimplification ?? false) { rootSEC.ItemsElementName[0] = ItemsChoiceType1.SECSimplification; rootSEC.Items[0] = RootSECSECSimplification.Y; rootSEC.ItemsElementName[1] = ItemsChoiceType1.PortOfCallWhereCompleteSECNotified; rootSEC.Items[1] = sec.PortOfCallWhereCompleteSECNotified; } else { rootSEC.ItemsElementName[0] = ItemsChoiceType1.CSOLastName; rootSEC.Items[0] = sec.CSOLastName; rootSEC.ItemsElementName[1] = ItemsChoiceType1.CSOFirstName; rootSEC.Items[1] = sec.CSOFirstName; rootSEC.ItemsElementName[2] = ItemsChoiceType1.CSOPhone; rootSEC.Items[2] = sec.CSOPhone; rootSEC.ItemsElementName[3] = ItemsChoiceType1.CSOFax; rootSEC.Items[3] = sec.CSOFax; rootSEC.ItemsElementName[4] = ItemsChoiceType1.ValidISSCOnBoard; rootSEC.Items[4] = sec.ValidISSCOnBoard ?? false ? RootSECValidISSCOnBoard.Y : RootSECValidISSCOnBoard.N; rootSEC.ItemsElementName[5] = ItemsChoiceType1.ISSCType; rootSEC.Items[5] = (RootSECISSCType) (sec.ISSCType ?? 0); rootSEC.ItemsElementName[6] = ItemsChoiceType1.ISSCIssuerName; rootSEC.Items[6] = sec.ISSCIssuerName; rootSEC.ItemsElementName[7] = ItemsChoiceType1.ISSCDateOfExpiration; if(sec.ISSCDateOfExpiration.HasValue) rootSEC.Items[7] = sec.ISSCDateOfExpiration.Value; rootSEC.ItemsElementName[8] = ItemsChoiceType1.ApprovedSecurityPlanOnBoard; rootSEC.Items[8] = sec.ApprovedSecurityPlanOnBoard ?? false ? RootSECApprovedSecurityPlanOnBoard.Y : RootSECApprovedSecurityPlanOnBoard.N; rootSEC.ItemsElementName[9] = ItemsChoiceType1.CurrentShipSecurityLevel; if (sec.CurrentShipSecurityLevel.HasValue) rootSEC.Items[9] = (int)sec.CurrentShipSecurityLevel.Value; rootSEC.ItemsElementName[10] = ItemsChoiceType1.PortFacilityOfArrival; rootSEC.Items[10] = sec.PortFacilityOfArrival; rootSEC.ItemsElementName[11] = ItemsChoiceType1.GeneralDescriptionOfCargo; if (sec.GeneralDescriptionOfCargo.HasValue) rootSEC.Items[11] = (RootSECGeneralDescriptionOfCargo)sec.GeneralDescriptionOfCargo.Value; rootSEC.ItemsElementName[12] = ItemsChoiceType1.ReasonsForNoValidISSC; rootSEC.Items[12] = sec.ReasonsForNoValidISSC; rootSEC.ItemsElementName[13] = ItemsChoiceType1.ISSCIssuerType; rootSEC.Items[13] = (RootSECISSCIssuerType) (sec.ISSCIssuerType ?? 0); rootSEC.ItemsElementName[14] = ItemsChoiceType1.CSOEMail; rootSEC.Items[14] = sec.CSOEMail; int index = 15; for (int i=0; i < sec.LastTenPortFacilitesCalled.Count; index++, i++) { rootSEC.ItemsElementName[index] = ItemsChoiceType1.LastTenPortFacilitiesCalled; RootSECLastTenPortFacilitiesCalled lastTen = new RootSECLastTenPortFacilitiesCalled(); rootSEC.Items[index] = lastTen; lastTen.PortFacilityPortName = sec.LastTenPortFacilitesCalled[i].PortFacilityPortName; lastTen.PortFacilityPortCountry = sec.LastTenPortFacilitesCalled[i].PortFacilityPortCountry; lastTen.PortFacilityPortLoCode = sec.LastTenPortFacilitesCalled[i].PortFacilityPortLoCode; if (sec.LastTenPortFacilitesCalled[i].PortFacilityDateOfArrival.HasValue) lastTen.PortFacilityDateOfArrival = sec.LastTenPortFacilitesCalled[i].PortFacilityDateOfArrival.Value; if (sec.LastTenPortFacilitesCalled[i].PortFacilityDateOfDeparture.HasValue) lastTen.PortFacilityDateOfDeparture = sec.LastTenPortFacilitesCalled[i].PortFacilityDateOfDeparture.Value; if (sec.LastTenPortFacilitesCalled[i].PortFacilityShipSecurityLevel.HasValue) lastTen.PortFacilityShipSecurityLevel = sec.LastTenPortFacilitesCalled[i].PortFacilityShipSecurityLevel.Value; lastTen.PortFacilitySecurityMattersToReport = sec.LastTenPortFacilitesCalled[i].PortFacilitySecurityMattersToReport; lastTen.PortFacilityGISISCode = sec.LastTenPortFacilitesCalled[i].PortFacilityGISISCode; } for (int i = 0; i < sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.Count; index++, i++ ) { rootSEC.ItemsElementName[index] = ItemsChoiceType1.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled; RootSECShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2s = new RootSECShipToShipActivitiesDuringLastTenPortFacilitiesCalled(); rootSEC.Items[index] = s2s; s2s.ShipToShipActivityLocation = new RootSECShipToShipActivitiesDuringLastTenPortFacilitiesCalledShipToShipActivityLocation(); s2s.ShipToShipActivityLocation.ShipToShipActivityLocationName = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityLocationName; s2s.ShipToShipActivityLocation.ShipToShipActivityLocationLoCode = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityLocationLoCode; s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates = new RootSECShipToShipActivitiesDuringLastTenPortFacilitiesCalledShipToShipActivityLocationShipToShipActivityLocationCoordinates(); if (sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityLocationCoordinatesLatitude.HasValue) s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates.ShipToShipActivityLocationCoordinatesLatitude = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityLocationCoordinatesLatitude.Value; if (sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityLocationCoordinatesLongitude.HasValue) s2s.ShipToShipActivityLocation.ShipToShipActivityLocationCoordinates.ShipToShipActivityLocationCoordinatesLongitude = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityLocationCoordinatesLongitude.Value; if (sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityDateFrom.HasValue) s2s.ShipToShipActivityDateFrom = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityDateFrom.Value; if (sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityDateTo.HasValue) s2s.ShipToShipActivityDateTo = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityDateTo.Value; s2s.ShipToShipActivityType = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivityType; s2s.ShipToShipActivitySecurityMattersToReport = sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled[i].ShipToShipActivitySecurityMattersToReport; } } item = rootSEC; } break; #endregion #region BPOL case Message.NotificationClass.BPOL: { BPOL bpol = message.Elements[0] as BPOL; if (bpol != null) { 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(); if (bpol.PortOfItineraries[i].PortOfItineraryETA.HasValue) port.PortOfItineraryETA = bpol.PortOfItineraries[i].PortOfItineraryETA.Value; port.PortOfItineraryName = bpol.PortOfItineraries[i].PortOfItineraryName; poiArray[i] = port; } if (bpol.StowawaysOnBoard.HasValue) rootBPOL.StowawayOnBoard = bpol.StowawaysOnBoard.Value ? RootBPOLStowawayOnBoard.Y : RootBPOLStowawayOnBoard.N; item = rootBPOL; } break; } #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 = (RootCREWCrewMemberCrewMemberGender)crew.CrewMemberGender.Value; rootCREW.CrewMember[i].CrewMemberIdentityDocumentId = crew.CrewMemberIdentityDocumentId; if (crew.CrewMemberIdentityDocumentType.HasValue) rootCREW.CrewMember[i].CrewMemberIdentityDocumentType = (RootCREWCrewMemberCrewMemberIdentityDocumentType)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; } item = 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 0) { l30d.PortOfCallLast30Days = new RootMDHPortsOfCallLast30DaysPortOfCallLast30Days[mdh.PortOfCallLast30Days.Count]; for (int i = 0; i < mdh.PortOfCallLast30Days.Count; i++) { l30d.PortOfCallLast30Days[i] = new RootMDHPortsOfCallLast30DaysPortOfCallLast30Days(); l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip = new RootMDHPortsOfCallLast30DaysPortOfCallLast30DaysPortOfCallLast30DaysCrewJoinedShip(); if (mdh.PortOfCallLast30Days[i].CrewJoinedShip.Count > 0) { l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip.PortOfCallLast30DaysCrewJoinedShipName = new string[mdh.PortOfCallLast30Days[i].CrewJoinedShip.Count]; for (int j = 0; j < mdh.PortOfCallLast30Days[i].CrewJoinedShip.Count; j++) { l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewJoinedShip.PortOfCallLast30DaysCrewJoinedShipName[j] = mdh.PortOfCallLast30Days[i].CrewJoinedShip[j].PortOfCallLast30DaysCrewJoinedShipName; } } l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewMembersJoined = mdh.PortOfCallLast30Days[i].PortOfCallLast30DaysCrewMembersJoined ?? false ? RootMDHPortsOfCallLast30DaysPortOfCallLast30DaysPortOfCallLast30DaysCrewMembersJoined.Y : RootMDHPortsOfCallLast30DaysPortOfCallLast30DaysPortOfCallLast30DaysCrewMembersJoined.N; if (mdh.PortOfCallLast30Days[i].PortOfCallLast30DaysDateOfDeparture.HasValue) l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysDateOfDeparture = mdh.PortOfCallLast30Days[i].PortOfCallLast30DaysDateOfDeparture.Value; l30d.PortOfCallLast30Days[i].PortOfCallLast30DaysLocode = mdh.PortOfCallLast30Days[i].PortOfCallLast30DaysLocode; } } } item = rootMDH; } break; #endregion #region WAS case Message.NotificationClass.WAS: { RootWAS rootWAS = new RootWAS(); WAS was = message.Elements[0] as WAS; if (was.WasteDisposalValidExemption ?? false) { rootWAS.Items = new object[1]; rootWAS.ItemsElementName = new ItemsChoiceType3[1]; rootWAS.ItemsElementName[0] = ItemsChoiceType3.WasteDisposalValidExemption; rootWAS.Items[0] = RootWASWasteDisposalValidExemption.Y; } else { rootWAS.Items = new object[5]; rootWAS.ItemsElementName = new ItemsChoiceType3[5]; rootWAS.ItemsElementName[0] = ItemsChoiceType3.LastWasteDisposalPort; rootWAS.Items[0] = was.LastWasteDisposalPort; rootWAS.ItemsElementName[1] = ItemsChoiceType3.LastWasteDisposalDate; if (was.LastWasteDisposalDate.HasValue) rootWAS.Items[1] = was.LastWasteDisposalDate.Value; rootWAS.ItemsElementName[2] = ItemsChoiceType3.WasteDisposalServiceProviderName; // TODO: Klären wie es nun genau hier aussieht! /* if(was.WasteDisposalServiceProvider.Count > 0) { rootWAS.Items[2] = new string[was.WasteDisposalServiceProvider.Count]; for (int i = 0; i < was.WasteDisposalServiceProvider.Count; i++) { rootWAS.Items[2][i] = was.WasteDisposalServiceProvider[i].WasteDisposalServiceProviderName; } } */ rootWAS.ItemsElementName[3] = ItemsChoiceType3.WasteDisposalDelivery; if (was.WasteDisposalDelivery.HasValue) rootWAS.Items[3] = (RootWASWasteDisposalDelivery)was.WasteDisposalDelivery.Value; rootWAS.ItemsElementName[4] = ItemsChoiceType3.Waste; if (was.Waste.Count > 0) { RootWASWaste[] rww = new RootWASWaste[was.Waste.Count]; rootWAS.Items[4] = rww; for (int i = 0; i < was.Waste.Count; i++) { rww[i] = new RootWASWaste(); rww[i].WasteDescription = was.Waste[i].WasteDescription; if(was.Waste[i].WasteType.HasValue) rww[i].WasteType = (RootWASWasteWasteType) was.Waste[i].WasteType.Value; if (was.Waste[i].WasteDisposalAmount_MTQ.HasValue) rww[i].WasteDisposalAmount_MTQ = was.Waste[i].WasteDisposalAmount_MTQ.Value; rww[i].WasteDetails = new RootWASWasteWasteDetails(); if (was.Waste[i].WasteCapacity_MTQ.HasValue) rww[i].WasteDetails.WasteCapacity_MTQ = was.Waste[i].WasteCapacity_MTQ.Value; if (was.Waste[i].WasteAmountRetained_MTQ.HasValue) rww[i].WasteDetails.WasteAmountRetained_MTQ = was.Waste[i].WasteAmountRetained_MTQ.Value; rww[i].WasteDetails.WasteDisposalPort = was.Waste[i].WasteDisposalPort; if (was.Waste[i].WasteAmountGeneratedTillNextPort_MTQ.HasValue) rww[i].WasteDetails.WasteAmountGeneratedTillNextPort_MTQ = was.Waste[i].WasteAmountGeneratedTillNextPort_MTQ.Value; } } rootWAS.ItemsElementName[5] = ItemsChoiceType3.ConfirmationOfCorrectness; rootWAS.Items[5] = was.ConfirmationOfCorrectness ?? false ? RootWASConfirmationOfCorrectness.Y : RootWASConfirmationOfCorrectness.N; } item = 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 = towa.TowageOnArrivalLengthOverall_MTR.Value; if (towa.TowageOnArrivalBeam_MTR.HasValue) rootTowa.TowageOnArrival[i].TowageOnArrivalBeam_MTR = towa.TowageOnArrivalBeam_MTR.Value; rootTowa.TowageOnArrival[i].TowageOnArrivalPurposeOfCall = towa.TowageOnArrivalPurposeOfCall; if (towa.TowageOnArrivalDraught_DMT.HasValue) rootTowa.TowageOnArrival[i].TowageOnArrivalDraught_DMT = towa.TowageOnArrivalDraught_DMT.Value; rootTowa.TowageOnArrival[i].TowageOnArrivalRemarks = towa.TowageOnArrivalRemarks; } item = 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 = towd.TowageOnDepartureLengthOverall_MTR.Value; if (towd.TowageOnDepartureBeam_MTR.HasValue) rootTowd.TowageOnDeparture[i].TowageOnDepartureBeam_MTR = towd.TowageOnDepartureBeam_MTR.Value; if (towd.TowageOnDepartureDraught_DMT.HasValue) rootTowd.TowageOnDeparture[i].TowageOnDepartureDraught_DMT = towd.TowageOnDepartureDraught_DMT.Value; rootTowd.TowageOnDeparture[i].TowageOnDepartureRemarks = towd.TowageOnDepartureRemarks; } item = rootTowd; } break; #endregion default: { _log.ErrorFormat("DBH send message: message type {0} not implemented", message.MessageNotificationClass); return false; } } // send object bool returnval = true; try { object[] items = null; if ((rootType == RootType.CANCEL) || (rootType == RootType.DATA) || (rootType == RootType.RESET)) { items = new object[1]; items[0] = item; if (message.MessageCore.IsTransit) { item = message.MessageCore.TransitId; itemChoiceType2 = ItemChoiceType2.TransitId; } else { item = message.MessageCore.VisitId; itemChoiceType2 = ItemChoiceType2.VisitId; } } string result = client.Root( version, timestamp, Properties.Settings.Default.Sender, // BSMD sender Kennung (festverdrahtet) senderReference, rootType, item, itemChoiceType2, null, // sisnumbers (weglassen) rp, items, null // violations (weglassen) ); } catch (Exception ex) { _log.ErrorFormat("exception on message send: {0}", ex.Message); returnval = false; } return returnval; } } }