// // Class: Request // Current CLR: 4.0.30319.34209 // System: Microsoft Visual Studio 10.0 // Author: dani // Created: 7/6/2015 7:04:01 PM // // Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Xml.Serialization; using log4net; using bsmd.database; namespace bsmd.hisnord { public class Request { private static readonly ILog _log = LogManager.GetLogger(typeof(Request)); private static Dictionary _reportingPartyDict = null; private static readonly Dictionary> coreFilenameDict = new Dictionary>(); internal static Dictionary ReportingPartyDict { get { return _reportingPartyDict ?? (_reportingPartyDict = DBManager.Instance.GetReportingPartyDict()); } } public static void ReadResponseFiles() { foreach (MessageCore core in coreFilenameDict.Keys) { List responseList = new List(); foreach (Message message in coreFilenameDict[core].Keys) { transmitter.result theResult = transmitter.GetResult(coreFilenameDict[core][message]); if (theResult != null) { _log.InfoFormat("Result: Code {0} Detail {1} Message {2}", theResult.code, theResult.detail, theResult.message); if (theResult.code > 0) { MessageCore reloadCore = DBManager.Instance.GetMessageCoreById(core.Id.Value); reloadCore.BSMDStatusInternal = MessageCore.BSMDStatus.FAILURE; DBManager.Instance.Save(reloadCore); message.InternalStatus = Message.BSMDStatus.SEND_FAILED; DBManager.Instance.Save(message); SystemError se = new SystemError(); se.ErrorCode = theResult.code; se.ErrorMessage = theResult.message.Truncate(255); se.ErrorDescription = theResult.detail.Truncate(255); se.ErrorAt = DateTime.Now; se.MessageCoreId = core.Id.Value; se.MessageHeaderId = message.Id; DBManager.Instance.Save(se); } responseList.Add(message); } } foreach (Message removeMessage in responseList) { coreFilenameDict[core].Remove(removeMessage); } } } #region Create message file to send public static bool? CreateSendFile(MessageCore core, Message message) { bool? retval; try { nsw _nsw = new nsw(); _nsw.conveyance = new conveyance(); #region general info area _nsw.date_registration = DateTime.Now; // dient zur Sequenzierung der Nachrichten _nsw.message_sender = "BSMD"; _nsw.message_recipient = "HIS-NORD"; _nsw.conveyance.owner_sender = new broker_owner(); ReportingParty rp = null; if(core.DefaultReportingPartyId.HasValue && Request.ReportingPartyDict.ContainsKey(core.DefaultReportingPartyId.Value)) rp = Request.ReportingPartyDict[core.DefaultReportingPartyId.Value]; if(rp == null) { _log.ErrorFormat("Cannot find reporting party for core {0}", core.Id); return false; } _nsw.conveyance.owner_sender.name_short = "BSMD"; _nsw.conveyance.owner_sender.name_long = "BSMD";// rp.Name; // core.Customer.Name; _nsw.conveyance.owner_sender.address = new addresstype(); _nsw.conveyance.owner_sender.address.StreetNumber = rp.StreetAndNumber; _nsw.conveyance.owner_sender.address.PostCode = rp.PostalCode; _nsw.conveyance.owner_sender.address.Place = rp.City; // das hier ist der e-mail(!) Empfänger für Error/Violation Meldungen _nsw.conveyance.owner_sender.contact = new contacts(); _nsw.conveyance.owner_sender.contact.name = "BSMD"; // rp.LastName; _nsw.conveyance.owner_sender.contact.email = rp.EMail; _nsw.conveyance.owner_sender.contact.firstname = string.Format("{0} {1}", rp.FirstName, rp.LastName); _nsw.conveyance.owner_sender.contact.phone = rp.Phone; _nsw.conveyance.owner_sender.contact.fax = rp.Fax; _nsw.document_reference = core.Id.Value.ToString(); _nsw.conveyance.code = core.Id.ToString(); if (!core.VisitId.IsNullOrEmpty()) { _nsw.conveyance.Items = new string[1]; _nsw.conveyance.ItemsElementName = new ItemsChoiceType[1]; _nsw.conveyance.Items[0] = core.VisitId; _nsw.conveyance.ItemsElementName[0] = ItemsChoiceType.VisitId; } else if (!core.TransitId.IsNullOrEmpty()) { _nsw.conveyance.Items = new string[1]; _nsw.conveyance.ItemsElementName = new ItemsChoiceType[1]; _nsw.conveyance.Items[0] = core.TransitId; _nsw.conveyance.ItemsElementName[0] = ItemsChoiceType.TransitId; } else // liegt noch nichts vor, Id muss beantragt werden { retval = true; _nsw.conveyance.Items = new object[4]; _nsw.conveyance.ItemsElementName = new ItemsChoiceType[4]; _nsw.conveyance.Items[0] = core.Shipname; _nsw.conveyance.ItemsElementName[0] = ItemsChoiceType.name; _nsw.conveyance.Items[1] = core.IMO.IsNullOrEmpty() ? core.ENI : core.IMO; _nsw.conveyance.ItemsElementName[1] = core.IMO.IsNullOrEmpty() ? ItemsChoiceType.ENINumber : ItemsChoiceType.IMONumber; _nsw.conveyance.Items[2] = core.PoC; _nsw.conveyance.ItemsElementName[2] = ItemsChoiceType.PortOfCall; _nsw.conveyance.Items[3] = core.IsTransit ? core.ETAKielCanal : core.ETA; // TODO Datum konvertieren? _nsw.conveyance.ItemsElementName[3] = ItemsChoiceType.ETAPortOfCall; } #endregion #region NSW message area // wir wissen noch nicht wieviele es werden, von daher erstmal eine Liste! List items1ChoiceType = new List(); List items1 = new List(); if (core.Cancelled ?? false) { // nur das "STORNO" Element hinzufügen items1ChoiceType.Add(Items1ChoiceType.STORNO); items1.Add(ytype.Y); } else { #region STAT if (message.MessageNotificationClass == Message.NotificationClass.STAT) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_STAT); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { STAT stat = message.Elements[0] as STAT; vesseltype hn_stat = new vesseltype(); if (stat.Beam_MTR.HasValue) hn_stat.Beam_MTR = Math.Round((decimal) stat.Beam_MTR.Value, 2); hn_stat.CallSign = stat.CallSign; hn_stat.Flag = stat.Flag; if (stat.GrossTonnage.HasValue) hn_stat.GrossTonnage = stat.GrossTonnage.Value; if (!stat.InmarsatCallNumber.IsNullOrEmpty()) { hn_stat.InmarsatCallNumbers = new vesseltypeInmarsatCallNumbers(); List callNumbers = new List(); foreach(string aNumber in stat.InmarsatCallNumber.Split('\n')) { if ((aNumber.Length > 0) && (aNumber.Length <= 50)) callNumbers.Add(aNumber.Trim()); } // es können durch die Validierung nicht mehr als 5 sein, sonst müsste man hier abschneiden hn_stat.InmarsatCallNumbers.InmarsatCallNumber = callNumbers.ToArray(); } if (!stat.ISMCompanyName.IsNullOrEmpty() && ((stat.GrossTonnage ?? 0) >= 500)) // Vio. 821 { hn_stat.ISMCompany = new ismcompany(); if (!stat.ISMCompanyCity.IsNullOrEmpty()) hn_stat.ISMCompany.ISMCompanyCity = stat.ISMCompanyCity; if (!stat.ISMCompanyCountry.IsNullOrEmpty()) hn_stat.ISMCompany.ISMCompanyCountry = stat.ISMCompanyCountry; hn_stat.ISMCompany.ISMCompanyId = stat.ISMCompanyId; hn_stat.ISMCompany.ISMCompanyName = stat.ISMCompanyName; if (!stat.ISMCompanyPostalCode.IsNullOrEmpty()) hn_stat.ISMCompany.ISMCompanyPostalCode = stat.ISMCompanyPostalCode; if (!stat.ISMCompanyStreetAndNumber.IsNullOrEmpty()) hn_stat.ISMCompany.ISMCompanyStreetAndNumber = stat.ISMCompanyStreetAndNumber; } if (stat.LengthOverall_MTR.HasValue) hn_stat.LengthOverall_MTR = Math.Round((decimal)stat.LengthOverall_MTR.Value, 2); hn_stat.MMSINumber = stat.MMSINumber; hn_stat.PortOfRegistry = stat.PortOfRegistry; hn_stat.ShipName = stat.ShipName; hn_stat.TransportMode = stat.TransportMode; hn_stat.ShipType = stat.ShipType; items1ChoiceType.Add(Items1ChoiceType.STAT); items1.Add(hn_stat); } } } #endregion #region NOA_NOD if (message.MessageNotificationClass == Message.NotificationClass.NOA_NOD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_NOANOD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { NOA_NOD noa_nod = message.Elements[0] as NOA_NOD; noanod hn_noanod = new noanod(); if (message.MessageCore.IsTransit) { if (noa_nod.ETAToKielCanal.HasValue) hn_noanod.ETAToPortOfCall = noa_nod.ETAToKielCanal.Value; if (noa_nod.ETDFromKielCanal.HasValue) hn_noanod.ETDFromPortOfCall = noa_nod.ETDFromKielCanal.Value; } else { if (noa_nod.ETAToPortOfCall.HasValue) hn_noanod.ETAToPortOfCall = noa_nod.ETAToPortOfCall.Value; if (noa_nod.ETDFromPortOfCall.HasValue) hn_noanod.ETDFromPortOfCall = noa_nod.ETDFromPortOfCall.Value; hn_noanod.CallPurposes = new callpurpose[noa_nod.CallPurposes.Count]; for (int i = 0; i < noa_nod.CallPurposes.Count; i++) { hn_noanod.CallPurposes[i] = new callpurpose(); CallPurpose callPurpose = noa_nod.CallPurposes[i] as CallPurpose; hn_noanod.CallPurposes[i].CallPurposeCode = callPurpose.CallPurposeCode.ToString(); if(callPurpose.CallPurposeDescription != string.Empty) hn_noanod.CallPurposes[i].CallPurposeDescription = callPurpose.CallPurposeDescription; } } hn_noanod.LastPort = noa_nod.LastPort; hn_noanod.ETDFromLastPortSpecified = noa_nod.ETDFromLastPort.HasValue; if (hn_noanod.ETDFromLastPortSpecified) hn_noanod.ETDFromLastPort = noa_nod.ETDFromLastPort.Value; hn_noanod.NextPort = noa_nod.NextPort; hn_noanod.ETAToNextPortSpecified = noa_nod.ETAToNextPort.HasValue; if (hn_noanod.ETAToNextPortSpecified) hn_noanod.ETAToNextPort = noa_nod.ETAToNextPort.Value; items1ChoiceType.Add(Items1ChoiceType.NOANOD); items1.Add(hn_noanod); } } } #endregion #region ATA / ATD if (message.MessageNotificationClass == Message.NotificationClass.ATA) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_ATA); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { ATA ata = message.Elements[0] as ATA; items1ChoiceType.Add(Items1ChoiceType.ATA); items1.Add(ata.ATAPortOfCall); } } } if (message.MessageNotificationClass == Message.NotificationClass.ATD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_ATD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { ATD atd = message.Elements[0] as ATD; items1ChoiceType.Add(Items1ChoiceType.ATD); items1.Add(atd.ATDPortOfCall); } } } #endregion #region POBA if (message.MessageNotificationClass == Message.NotificationClass.POBA) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_POBA); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { POBA poba = message.Elements[0] as POBA; global::poba hn_poba = new global::poba(); hn_poba.TotalCrewMembersOnBoardUponArrival = (poba.TotalCrewMembersOnBoardUponArrival ?? 0).ToString(); hn_poba.TotalPassengersOnBoardUponArrival = (poba.TotalPassengersOnBoardUponArrival ?? 0).ToString(); hn_poba.TotalPersonsOnBoardUponArrival = (poba.TotalPersonsOnBoardUponArrival ?? 0).ToString(); hn_poba.TotalStowawaysOnBoardUponArrival = (poba.TotalStowawaysOnBoardUponArrival ?? 0).ToString(); items1ChoiceType.Add(Items1ChoiceType.POBA); items1.Add(hn_poba); } } } #endregion #region POBD if (message.MessageNotificationClass == Message.NotificationClass.POBD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_POBD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { POBD pobd = message.Elements[0] as POBD; global::pobd hn_pobd = new global::pobd(); hn_pobd.TotalCrewMembersOnBoardUponDeparture = (pobd.TotalCrewMembersOnBoardUponDeparture ?? 0).ToString(); hn_pobd.TotalPassengersOnBoardUponDeparture = (pobd.TotalPassengersOnBoardUponDeparture ?? 0).ToString(); hn_pobd.TotalPersonsOnBoardUponDeparture = (pobd.TotalPersonsOnBoardUponDeparture ?? 0).ToString(); hn_pobd.TotalStowawaysOnBoardUponDeparture = (pobd.TotalStowawaysOnBoardUponDeparture ?? 0).ToString(); items1ChoiceType.Add(Items1ChoiceType.POBD); items1.Add(hn_pobd); } } } #endregion #region NAME if (message.MessageNotificationClass == Message.NotificationClass.NAME) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_NameOfMaster); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { NAME name = message.Elements[0] as NAME; items1ChoiceType.Add(Items1ChoiceType.NameOfMaster); items1.Add(name.NameOfMaster); } } } #endregion #region TIEFA / TIEFD if (message.MessageNotificationClass == Message.NotificationClass.TIEFA) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_TIEFA); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { TIEFA tiefa = message.Elements[0] as TIEFA; if (tiefa.DraughtUponArrival_DMT.HasValue) { items1ChoiceType.Add(Items1ChoiceType.TIEFA); items1.Add(Math.Round((decimal)tiefa.DraughtUponArrival_DMT.Value, 1)); } } } } if (message.MessageNotificationClass == Message.NotificationClass.TIEFD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_TIEFD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { TIEFD tiefd = message.Elements[0] as TIEFD; if (tiefd.DraughtUponDeparture_DMT.HasValue) { items1ChoiceType.Add(Items1ChoiceType.TIEFD); items1.Add(Math.Round((decimal)tiefd.DraughtUponDeparture_DMT.Value, 1)); } } } } #endregion #region INFO if (message.MessageNotificationClass == Message.NotificationClass.INFO) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_INFO); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { INFO info = message.Elements[0] as INFO; global::info hn_info = new global::info(); if (info.ShippingArea.HasValue) hn_info.ShippingArea = (shippingareatype)info.ShippingArea.Value; hn_info.PortArea = info.PortArea; hn_info.RequestedPositionInPortOfCall = info.RequestedPositionInPortOfCall; if(!info.SpecialRequirementsOfShipAtBerth.IsNullOrEmpty()) hn_info.SpecialRequirementsOfShipAtBerth = info.SpecialRequirementsOfShipAtBerth; hn_info.ConstructionCharacteristicsOfShip = info.ConstructionCharacteristicsOfShip; hn_info.BowThrusterPower = info.BowThrusterPower; hn_info.SternThrusterPower = info.SternThrusterPower; if (info.FumigatedBulkCargo.HasValue) hn_info.FumigatedBulkCargo = (info.FumigatedBulkCargo.Value == 1) ? yorntype.Y : yorntype.N; else hn_info.FumigatedBulkCargo = yorntype.N; hn_info.DeadWeightSummer_TNESpecified = info.DeplacementSummerDraught_TNE.HasValue; if (hn_info.DeadWeightSummer_TNESpecified) hn_info.DeadWeightSummer_TNE = Math.Round((decimal)info.DeplacementSummerDraught_TNE.Value, 3); items1ChoiceType.Add(Items1ChoiceType.INFO); items1.Add(hn_info); } } } #endregion #region BKRA / BKRD if (message.MessageNotificationClass == Message.NotificationClass.BKRA) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_BKRA); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::bkra hn_bkra = new bkra(); hn_bkra.BunkerFuelArrival = new bunkerfuel[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { BRKA brka = message.Elements[i] as BRKA; hn_bkra.BunkerFuelArrival[i] = new bunkerfuel(); hn_bkra.BunkerFuelArrival[i].BunkerFuelType = brka.BunkerFuelType; hn_bkra.BunkerFuelArrival[i].BunkerFuelQuantity_TNE = Math.Round((decimal)brka.BunkerFuelQuantity_TNE, 3); } items1ChoiceType.Add(Items1ChoiceType.BKRA); items1.Add(hn_bkra); } } } if (message.MessageNotificationClass == Message.NotificationClass.BKRD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_BKRD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::bkrd hn_bkrd = new bkrd(); hn_bkrd.BunkerFuelDeparture = new bunkerfuel[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { BRKD brkd = message.Elements[i] as BRKD; hn_bkrd.BunkerFuelDeparture[i] = new bunkerfuel(); hn_bkrd.BunkerFuelDeparture[i].BunkerFuelType = brkd.BunkerFuelType; hn_bkrd.BunkerFuelDeparture[i].BunkerFuelQuantity_TNE = Math.Round((decimal)brkd.BunkerFuelQuantity_TNE, 3); } items1ChoiceType.Add(Items1ChoiceType.BKRD); items1.Add(hn_bkrd); } } } #endregion #region HAZA / HAZD if (message.MessageNotificationClass == Message.NotificationClass.HAZA) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_HAZA); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { HAZ haz = message.Elements[0] as HAZ; global::haza hn_haza = new haza(); if (haz.NoDPGOnBoardOnArrival ?? false) { hn_haza.Items = new object[1]; hn_haza.ItemsElementName = new ItemsChoiceType1[1]; hn_haza.Items[0] = ytype.Y; hn_haza.ItemsElementName[0] = ItemsChoiceType1.NoDPGOnBoardOnArrival; } else { List hn_haza_items = new List(); List hn_haza_itemsChoiceType1 = new List(); if (haz.DPGManifestOnBoardOnArrival.HasValue) { hn_haza_items.Add(haz.DPGManifestOnBoardOnArrival.Value ? yorntype.Y : yorntype.N); hn_haza_itemsChoiceType1.Add(ItemsChoiceType1.DPGManifestOnBoardOnArrival); } if (haz.INFShipClass.HasValue) { infclasstype infclass = (infclasstype)haz.INFShipClass.Value; // ich hoffe diese casts passen immer :\ hn_haza_items.Add(infclass); hn_haza_itemsChoiceType1.Add(ItemsChoiceType1.INFShipClass); } if (haz.MOUBaltic ?? false) { hn_haza_items.Add(ytype.Y); hn_haza_itemsChoiceType1.Add(ItemsChoiceType1.MOUBaltic); } dglist hn_dgList = new dglist(); SetHAZPositions(hn_dgList, haz); hn_haza_items.Add(hn_dgList); hn_haza_itemsChoiceType1.Add(ItemsChoiceType1.DPG); hn_haza.Items = hn_haza_items.ToArray(); hn_haza.ItemsElementName = hn_haza_itemsChoiceType1.ToArray(); } items1ChoiceType.Add(Items1ChoiceType.HAZA); items1.Add(hn_haza); } } } if (message.MessageNotificationClass == Message.NotificationClass.HAZD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_HAZD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { HAZ haz = message.Elements[0] as HAZ; global::hazd hn_hazd = new hazd(); if (haz.NoDPGOnBoardOnArrival ?? false) { hn_hazd.Items = new object[1]; hn_hazd.ItemsElementName = new ItemsChoiceType2[1]; hn_hazd.Items[0] = ytype.Y; hn_hazd.ItemsElementName[0] = ItemsChoiceType2.NoDPGOnBoardOnDeparture; } else { List hn_hazd_items = new List(); List hn_hazd_itemsChoiceType2 = new List(); if (haz.DPGManifestOnBoardOnArrival.HasValue) { hn_hazd_items.Add(haz.DPGManifestOnBoardOnArrival.Value ? yorntype.Y : yorntype.N); hn_hazd_itemsChoiceType2.Add(ItemsChoiceType2.DPGManifestOnBoardOnDeparture); } if (haz.INFShipClass.HasValue) { infclasstype infclass = (infclasstype)haz.INFShipClass.Value; // ich hoffe diese casts passen immer :\ hn_hazd_items.Add(infclass); hn_hazd_itemsChoiceType2.Add(ItemsChoiceType2.INFShipClass); } if (haz.MOUBaltic ?? false) { hn_hazd_items.Add(ytype.Y); hn_hazd_itemsChoiceType2.Add(ItemsChoiceType2.MOUBaltic); } dglist hn_dgList = new dglist(); SetHAZPositions(hn_dgList, haz); hn_hazd_items.Add(hn_dgList); hn_hazd_itemsChoiceType2.Add(ItemsChoiceType2.DPG); hn_hazd.Items = hn_hazd_items.ToArray(); hn_hazd.ItemsElementName = hn_hazd_itemsChoiceType2.ToArray(); } items1ChoiceType.Add(Items1ChoiceType.HAZD); items1.Add(hn_hazd); } } } #endregion #region LADG if (message.MessageNotificationClass == Message.NotificationClass.LADG) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_LADG); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::generalcargo hn_generalcargo = new generalcargo(); hn_generalcargo.Cargo = new loadunit[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { LADG ladg = message.Elements[i] as LADG; loadunit lu = new loadunit(); if (ladg.CargoHandlingType.HasValue) lu.CargoHandlingType = (handlingcodetype)ladg.CargoHandlingType.Value; if (ladg.CargoLACode.HasValue) lu.CargoLACode = ladg.CargoLACode.Value.ToString(); lu.CargoCodeNST = ladg.CargoCodeNST; if(!ladg.CargoCodeNST_3.IsNullOrEmpty()) lu.CargoCodeNST_3 = ladg.CargoCodeNST_3; if ((ladg.CargoNumberOfItems ?? 0) > 0) lu.CargoNumberOfItems = ladg.CargoNumberOfItems.Value.ToString(); if (ladg.CargoGrossQuantity_TNE.HasValue) lu.CargoGrossQuantity_TNE = Math.Round((decimal)ladg.CargoGrossQuantity_TNE.Value, 3); if(!ladg.PortOfLoading.IsNullOrEmpty()) lu.CargoPortOfLoading = ladg.PortOfLoading; if(!ladg.PortOfDischarge.IsNullOrEmpty()) lu.CargoPortOfDischarge = ladg.PortOfDischarge; hn_generalcargo.Cargo[i] = lu; } items1ChoiceType.Add(Items1ChoiceType.LADG); items1.Add(hn_generalcargo); } } } #endregion #region SERV if (message.MessageNotificationClass == Message.NotificationClass.SERV) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_SERV); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::serv hn_serv = new serv(); hn_serv.Service = new service[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { SERV serv = message.Elements[i] as SERV; hn_serv.Service[i] = new service(); hn_serv.Service[i].ServiceBeneficiary = serv.ServiceBeneficiary; if(!serv.ServiceName.IsNullOrEmpty()) hn_serv.Service[i].ServiceName = serv.ServiceName; hn_serv.Service[i].ServiceInvoiceRecipient = serv.ServiceInvoiceRecipient; } items1ChoiceType.Add(Items1ChoiceType.SERV); items1.Add(hn_serv); } } } #endregion #region PRE72H if (message.MessageNotificationClass == Message.NotificationClass.PRE72H) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_PRE72H); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { PRE72H pre72h = message.Elements[0] as PRE72H; global::pre72 hn_pre72 = new pre72(); if (pre72h.DateOfLastExpandedInspection.HasValue) hn_pre72.DateOfLastExpandedInspection = pre72h.DateOfLastExpandedInspection.Value; hn_pre72.PlannedOperations = pre72h.PlannedOperations; if (pre72h.PlannedPeriodOfStay_HUR.HasValue) hn_pre72.PlannedPeriodOfStay_HUR = Math.Round((decimal)pre72h.PlannedPeriodOfStay_HUR.Value, 2); hn_pre72.PlannedWorks = pre72h.PlannedWorks; hn_pre72.Tanker = (pre72h.Tanker ?? false) ? yorntype.Y : yorntype.N; if (pre72h.Tanker ?? false) { hn_pre72.TankerDetails = new tankerdetails(); if (pre72h.ConditionCargoBallastTanks.HasValue) hn_pre72.TankerDetails.ConditionCargoBallastTanks = (cargoconditiontype)pre72h.ConditionCargoBallastTanks.Value; if(pre72h.NatureOfCargo != string.Empty) hn_pre72.TankerDetails.TypeOfCargo = pre72h.NatureOfCargo; if (pre72h.TankerHullConfiguration.HasValue) hn_pre72.TankerDetails.TankerHullConfiguration = (hullconfigtype)pre72h.TankerHullConfiguration.Value; if (pre72h.VolumeOfCargo.HasValue && (pre72h.VolumeOfCargo > 0)) hn_pre72.TankerDetails.VolumeOfCargo_TNE = Math.Round((decimal)pre72h.VolumeOfCargo.Value, 3); hn_pre72.TankerDetails.VolumeOfCargo_TNESpecified = pre72h.VolumeOfCargo.HasValue; } else { hn_pre72.TankerDetails = null; } items1ChoiceType.Add(Items1ChoiceType.PRE72H); items1.Add(hn_pre72); } } } #endregion #region SEC if (message.MessageNotificationClass == Message.NotificationClass.SEC) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_SEC); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { SEC sec = message.Elements[0] as SEC; global::sec _sec = new global::sec(); if (sec.KielCanalPassagePlanned ?? false) { _sec.KielCanalPassage = new KielCanalPassage(); _sec.KielCanalPassage.KielCanalPassagePlanned = ytype.Y; _sec.KielCanalPassage.KielCanalPassagePlannedIncomingSpecified = sec.KielCanalPassagePlannedIncomming.HasValue; if (_sec.KielCanalPassage.KielCanalPassagePlannedIncomingSpecified) _sec.KielCanalPassage.KielCanalPassagePlannedIncoming = sec.KielCanalPassagePlannedIncomming.Value; _sec.KielCanalPassage.KielCanalPassagePlannedOutgoingSpecified = sec.KielCanalPassagePlannedOutgoing.HasValue; if (_sec.KielCanalPassage.KielCanalPassagePlannedOutgoingSpecified) _sec.KielCanalPassage.KielCanalPassagePlannedOutgoing = sec.KielCanalPassagePlannedOutgoing.Value; } if (sec.CurrentShipSecurityLevel.HasValue) _sec.CurrentShipSecurityLevel = (posint13type) (sec.CurrentShipSecurityLevel.Value - 1); List secItems = new List(); List secItemNames = new List(); if (sec.SECSimplification ?? false) { secItemNames.Add(ItemsChoiceType4.SECSimplification); secItems.Add(ytype.Y); secItemNames.Add(ItemsChoiceType4.PortOfCallWhereCompleteSECNotified); secItems.Add(sec.PortOfCallWhereCompleteSECNotified); } else { secItemNames.Add(ItemsChoiceType4.CSOLastName); secItems.Add(sec.CSOLastName); if (!sec.CSOFirstName.IsNullOrEmpty()) { secItemNames.Add(ItemsChoiceType4.CSOFirstName); secItems.Add(sec.CSOFirstName); } secItemNames.Add(ItemsChoiceType4.CSOPhone); secItems.Add(sec.CSOPhone); if (!sec.CSOFax.IsNullOrEmpty()) { secItemNames.Add(ItemsChoiceType4.CSOFax); secItems.Add(sec.CSOFax); } if (!sec.CSOEMail.IsNullOrEmpty()) { secItemNames.Add(ItemsChoiceType4.CSOEMail); secItems.Add(sec.CSOEMail); } secItemNames.Add(ItemsChoiceType4.ValidISSCOnBoard); secItems.Add((sec.ValidISSCOnBoard ?? false) ? yorntype.Y : yorntype.N); if ((!sec.ValidISSCOnBoard ?? false) && (!sec.ReasonsForNoValidISSC.IsNullOrEmpty())) { secItemNames.Add(ItemsChoiceType4.ReasonsForNoValidISSC); secItems.Add(sec.ReasonsForNoValidISSC); } if (sec.ISSCType.HasValue) { secItemNames.Add(ItemsChoiceType4.ISSCType); secItems.Add((issctype)sec.ISSCType.Value); } if (sec.ISSCIssuerType.HasValue) { secItemNames.Add(ItemsChoiceType4.ISSCIssuerType); secItems.Add((isscissuertype)sec.ISSCIssuerType.Value); } secItemNames.Add(ItemsChoiceType4.ISSCIssuerName); secItems.Add(sec.ISSCIssuerName); if (sec.ISSCDateOfExpiration.HasValue) { secItemNames.Add(ItemsChoiceType4.ISSCDateOfExpiration); secItems.Add(sec.ISSCDateOfExpiration.Value); } if (sec.ApprovedSecurityPlanOnBoard.HasValue) { secItemNames.Add(ItemsChoiceType4.ApprovedSecurityPlanOnBoard); secItems.Add(sec.ApprovedSecurityPlanOnBoard.Value ? yorntype.Y : yorntype.N); } if (!sec.PortFacilityOfArrival.IsNullOrEmpty()) { secItemNames.Add(ItemsChoiceType4.PortFacilityOfArrival); secItems.Add(sec.PortFacilityOfArrival); } if (sec.GeneralDescriptionOfCargo.HasValue) { secItemNames.Add(ItemsChoiceType4.GeneralDescriptionOfCargo); secItems.Add((cargodescriptiontype)sec.GeneralDescriptionOfCargo.Value); } foreach (LastTenPortFacilitiesCalled l10Called in sec.LastTenPortFacilitesCalled) { last10port hn_last10port = new last10port(); if(!l10Called.PortFacilityPortName.IsNullOrEmpty()) hn_last10port.PortFacilityPortName = l10Called.PortFacilityPortName; if(!l10Called.PortFacilityPortCountry.IsNullOrEmpty()) hn_last10port.PortFacilityPortCountry = l10Called.PortFacilityPortCountry; if(!l10Called.PortFacilityPortLoCode.IsNullOrEmpty()) hn_last10port.PortFacilityPortLoCode = l10Called.PortFacilityPortLoCode; if (l10Called.PortFacilityDateOfArrival.HasValue) hn_last10port.PortFacilityDateOfArrival = l10Called.PortFacilityDateOfArrival.Value; if (l10Called.PortFacilityDateOfDeparture.HasValue) hn_last10port.PortFacilityDateOfDeparture = l10Called.PortFacilityDateOfDeparture.Value; if (l10Called.PortFacilityShipSecurityLevel.HasValue) hn_last10port.PortFacilityShipSecurityLevel = (posint13type) (l10Called.PortFacilityShipSecurityLevel.Value - 1); if(!l10Called.PortFacilitySecurityMattersToReport.IsNullOrEmpty()) hn_last10port.PortFacilitySecurityMattersToReport = l10Called.PortFacilitySecurityMattersToReport; hn_last10port.PortFacilityGISISCode = l10Called.PortFacilityGISISCode; if(!l10Called.PortFacilityGISISCodeLocode.IsNullOrEmpty()) hn_last10port.PortFacilityGISISCodeLoCode = l10Called.PortFacilityGISISCodeLocode; secItemNames.Add(ItemsChoiceType4.LastTenPortFacilitiesCalled); secItems.Add(hn_last10port); } foreach (ShipToShipActivitiesDuringLastTenPortFacilitiesCalled s2s in sec.ShipToShipActivitiesDuringLastTenPortFacilitiesCalled) { lastactivity hn_lastactivity = new lastactivity(); hn_lastactivity.ShipToShipActivityLocation = new location(); List locationItems = new List(); List locationItemNames = new List(); if (!s2s.ShipToShipActivityLocationName.IsNullOrEmpty()) { locationItems.Add(s2s.ShipToShipActivityLocationName); locationItemNames.Add(ItemsChoiceType3.ShipToShipActivityLocationName); } if (!s2s.ShipToShipActivityLocationLoCode.IsNullOrEmpty()) { locationItems.Add(s2s.ShipToShipActivityLocationLoCode); locationItemNames.Add(ItemsChoiceType3.ShipToShipActivityLocationLoCode); } if (s2s.ShipToShipActivityLocationCoordinatesLatitude.HasValue && s2s.ShipToShipActivityLocationCoordinatesLongitude.HasValue) { coordinates coords = new coordinates(); coords.ShipToShipActivityLocationCoordinatesLatitude = s2s.ShipToShipActivityLocationCoordinatesLatitude.Value.ToString(); coords.ShipToShipActivityLocationCoordinatesLongitude = s2s.ShipToShipActivityLocationCoordinatesLongitude.Value.ToString(); locationItems.Add(coords); locationItemNames.Add(ItemsChoiceType3.ShipToShipActivityLocationCoordinates); } hn_lastactivity.ShipToShipActivityLocation.Items = locationItems.ToArray(); hn_lastactivity.ShipToShipActivityLocation.ItemsElementName = locationItemNames.ToArray(); if (s2s.ShipToShipActivityDateFrom.HasValue) hn_lastactivity.ShipToShipActivityDateFrom = s2s.ShipToShipActivityDateFrom.Value; if (s2s.ShipToShipActivityDateTo.HasValue) hn_lastactivity.ShipToShipActivityDateTo = s2s.ShipToShipActivityDateTo.Value; /* int edifact8025; if (Int32.TryParse(s2s.ShipToShipActivityType, out edifact8025) && (edifact8025 > 0) && (edifact8025 < 24)) hn_lastactivity.ShipToShipActivityType = edifact8025.ToString(); */ if (s2s.ShipToShipActivityTypeCode.HasValue) { if (s2s.ShipToShipActivityTypeCode.Value == 98) hn_lastactivity.ShipToShipActivityType = lastactivityShipToShipActivityType.Item98; else hn_lastactivity.ShipToShipActivityType = (lastactivityShipToShipActivityType)(s2s.ShipToShipActivityTypeCode.Value - 1); } if(!s2s.ShipToShipActivitySecurityMattersToReport.IsNullOrEmpty()) hn_lastactivity.ShipToShipActivitySecurityMattersToReportOf = s2s.ShipToShipActivitySecurityMattersToReport; secItemNames.Add(ItemsChoiceType4.ShipToShipActivities); secItems.Add(hn_lastactivity); } } _sec.Items = secItems.ToArray(); _sec.ItemsElementName = secItemNames.ToArray(); items1ChoiceType.Add(Items1ChoiceType.SEC); items1.Add(_sec); } } } #endregion #region MDH if (message.MessageNotificationClass == Message.NotificationClass.MDH) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_MDH); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { MDH mdh = message.Elements[0] as MDH; global::mdh hn_mdh = new global::mdh(); List mdh_items = new List(); List mdh_types = new List(); if (mdh.MDHSimplification == true) { mdh_items.Add(ytype.Y); mdh_types.Add(ItemsChoiceType5.MDHSimplification); mdh_items.Add(mdh.PortOfCallWhereCompleteMDHNotified); mdh_types.Add(ItemsChoiceType5.PortOfCallWhereCompleteMDHNotified); } else { mdh_items.Add((mdh.NonAccidentalDeathsDuringVoyage ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.NonAccidentialDeathsDuringVoyage); if (mdh.NonAccidentalDeathsDuringVoyage ?? false) { mdh_items.Add((mdh.NonAccidentalDeathsDuringVoyageCount ?? 0).ToString()); mdh_types.Add(ItemsChoiceType5.NonAccidentialDeathsDuringVoyageCount); } mdh_items.Add((mdh.SuspisionInfectiousNature ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.SuspisionInfectiousNature); mdh_items.Add((mdh.NumberOfIllPersonsHigherThanExpected ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.NumberOfIllPersonsHigherThanExpected); if (mdh.NumberOfIllPersonsHigherThanExpected ?? false) { mdh_items.Add((mdh.NumberOfIllPersons ?? 0).ToString()); mdh_types.Add(ItemsChoiceType5.NumberOfIllPersons); } mdh_items.Add((mdh.SickPersonsOnBoard ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.SickPersonsOnBoard); mdh_items.Add((mdh.MedicalConsulted ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.MedicalConsulted); mdh_items.Add((mdh.AwareOfFurtherInfections ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.AwareOfConditionsForFurtherInfections); bool sanitaryMeasuresApplied = mdh.SanitaryMeasuresApplied ?? false; mdh_items.Add(sanitaryMeasuresApplied ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.SanitaryMeasuresApplied); if (sanitaryMeasuresApplied) { //sanitarydetail[] sanitaryDetails = new sanitarydetail[mdh.SanitaryMeasuresDetails.Count]; for (int j = 0; j < mdh.SanitaryMeasuresDetails.Count; j++) { SanitaryMeasuresDetail detail = mdh.SanitaryMeasuresDetails[j] as SanitaryMeasuresDetail; sanitarydetail aSanitaryDetail = new sanitarydetail(); //sanitaryDetails[j] = new sanitarydetail(); if (detail.SanitaryMeasuresDate.HasValue) aSanitaryDetail.SanitaryMeasuresDate = detail.SanitaryMeasuresDate.Value; aSanitaryDetail.SanitaryMeasuresLocation = detail.SanitaryMeasuresLocation; aSanitaryDetail.SanitaryMeasuresType = detail.SanitaryMeasuresType; mdh_items.Add(aSanitaryDetail); mdh_types.Add(ItemsChoiceType5.SanitaryMeasuresDetails); } } mdh_items.Add((mdh.StowawaysDetected ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.StowawaysDetected); foreach (StowawaysJoiningLocation joininglocation in mdh.StowawaysJoiningLocations) { mdh_items.Add(joininglocation.StowawayJoiningLocation); mdh_types.Add(ItemsChoiceType5.StowawaysJoiningLocation); } mdh_items.Add((mdh.SickAnimalOrPetOnBoard ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.SickAnimalOrPetOnBoard); mdh_items.Add((mdh.ValidSanitaryControlExemptionOrCertificateOnBoard ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.ValidSanitaryControlExemptionOrCertificateOnBoard); if (mdh.ValidSanitaryControlExemptionOrCertificateOnBoard ?? false) { sanitarycertificate certificate = new sanitarycertificate(); if (mdh.DateOfIssue.HasValue) certificate.DateOfIssue = mdh.DateOfIssue.Value; certificate.PlaceOfIssue = mdh.PlaceOfIssue; mdh_items.Add(certificate); mdh_types.Add(ItemsChoiceType5.ValidSanitaryControlExemptionOrCertificate); } mdh_items.Add((mdh.SanitaryControlReinspectionRequired ?? false) ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.SanitaryControlReinspectionRequired); bool infectedAreaVisited = mdh.InfectedAreaVisited ?? false; mdh_items.Add(infectedAreaVisited ? yorntype.Y : yorntype.N); mdh_types.Add(ItemsChoiceType5.InfectedAreaVisited); if (infectedAreaVisited) { foreach (InfectedArea infectedArea in mdh.InfectedAreas) { infectedarea ia = new infectedarea(); if (infectedArea.InfectedAreaDate.HasValue) ia.InfectedAreaDate = infectedArea.InfectedAreaDate.Value; ia.InfectedAreaPort = infectedArea.InfectedAreaPort; mdh_items.Add(ia); mdh_types.Add(ItemsChoiceType5.InfectedArea); } } portofcalls pocs = new portofcalls(); pocs.PortOfCallLast30Days = new portofcallmdh[mdh.PortOfCallLast30Days.Count]; for (int j = 0; j < mdh.PortOfCallLast30Days.Count; j++) { pocs.PortOfCallLast30Days[j] = new portofcallmdh(); PortOfCallLast30Days portOfCallLast30Days = mdh.PortOfCallLast30Days[j] as PortOfCallLast30Days; pocs.PortOfCallLast30Days[j].PortOfCallLast30DaysLocode = portOfCallLast30Days.PortOfCallLast30DaysLocode; if (portOfCallLast30Days.PortOfCallLast30DaysDateOfDeparture.HasValue) pocs.PortOfCallLast30Days[j].PortOfCallLast30DaysDateOfDeparture = portOfCallLast30Days.PortOfCallLast30DaysDateOfDeparture.Value; pocs.PortOfCallLast30Days[j].PortOfCallLast30DaysCrewMembersJoined = (portOfCallLast30Days.PortOfCallLast30DaysCrewMembersJoined ?? false) ? yorntype.Y : yorntype.N; if (portOfCallLast30Days.CrewJoinedShip.Count > 0) { List crewJoinedShipList = new List(); for (int k = 0; k < portOfCallLast30Days.CrewJoinedShip.Count; k++) { if (!((PortOfCallLast30DaysCrewJoinedShip)portOfCallLast30Days.CrewJoinedShip[k]).PortOfCallLast30DaysCrewJoinedShipName.IsNullOrEmpty()) crewJoinedShipList.Add(((PortOfCallLast30DaysCrewJoinedShip)portOfCallLast30Days.CrewJoinedShip[k]).PortOfCallLast30DaysCrewJoinedShipName); } pocs.PortOfCallLast30Days[j].PortOfCallLast30DaysCrewJoinedShip = crewJoinedShipList.ToArray(); } } mdh_items.Add(pocs); mdh_types.Add(ItemsChoiceType5.PortsOfCallLast30Days); } hn_mdh.Items = mdh_items.ToArray(); hn_mdh.ItemsElementName = mdh_types.ToArray(); items1.Add(hn_mdh); items1ChoiceType.Add(Items1ChoiceType.MDH); } } } #endregion #region WAS if (message.MessageNotificationClass == Message.NotificationClass.WAS) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_WAS); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { WAS was = message.Elements[0] as WAS; global::was hn_was = new global::was(); List was_items = new List(); List was_item_names = new List(); if (was.WasteDisposalValidExemption ?? false) { was_item_names.Add(ItemsChoiceType6.WasteDisposalValidExemption); was_items.Add(ytype.Y); } else { was_items.Add(was.LastWasteDisposalPort); was_item_names.Add(ItemsChoiceType6.LastWasteDisposalPort); if (was.LastWasteDisposalDate.HasValue) { was_items.Add(was.LastWasteDisposalDate.Value); was_item_names.Add(ItemsChoiceType6.LastWasteDisposalDate); } was_items.Add(was.NextWasteDisposalPort); was_item_names.Add(ItemsChoiceType6.NextWasteDisposalPort); for (int i = 0; i < was.WasteDisposalServiceProvider.Count; i++) { if (!((WasteDisposalServiceProvider) was.WasteDisposalServiceProvider[i]).WasteDisposalServiceProviderName.IsNullOrEmpty()) { was_items.Add(((WasteDisposalServiceProvider) was.WasteDisposalServiceProvider[i]).WasteDisposalServiceProviderName); was_item_names.Add(ItemsChoiceType6.WasteDisposalServiceProviderName); } } if (was.Waste.Count > 0) { for (int i = 0; i < was.Waste.Count; i++) { Waste waste = was.Waste[i]; if (!waste.WasteType.HasValue) continue; if (!WAS.WasteCodesInt.find(waste.WasteType.Value)) continue; waste hn_waste = new waste(); if (waste.WasteDisposalAmount_MTQ.HasValue) hn_waste.WasteDisposalAmount_MTQ = Math.Round((decimal)waste.WasteDisposalAmount_MTQ.Value, 3); hn_waste.WasteType = new wastetyp(); if (waste.WasteType.HasValue) hn_waste.WasteType.WasteCode = waste.WasteType.Value.ToString(); if(!waste.WasteDescription.IsNullOrEmpty()) hn_waste.WasteType.WasteDescription = waste.WasteDescription; hn_waste.WasteDetails = new wastedetails(); hn_waste.WasteDetails.WasteAmountGeneratedTillNextPort_MTQSpecified = true; // waste.WasteAmountGeneratedTillNextPort_MTQ.HasValue; // if (hn_waste.WasteDetails.WasteAmountGeneratedTillNextPort_MTQSpecified) hn_waste.WasteDetails.WasteAmountGeneratedTillNextPort_MTQ = Math.Round((decimal) (waste.WasteAmountGeneratedTillNextPort_MTQ ?? 0), 3); hn_waste.WasteDetails.WasteAmountRetained_MTQSpecified = true; // waste.WasteAmountRetained_MTQ.HasValue; // if (hn_waste.WasteDetails.WasteAmountRetained_MTQSpecified) hn_waste.WasteDetails.WasteAmountRetained_MTQ = Math.Round((decimal) (waste.WasteAmountRetained_MTQ ?? 0), 3); hn_waste.WasteDetails.WasteCapacity_MTQSpecified = true; // waste.WasteCapacity_MTQ.HasValue; // if (hn_waste.WasteDetails.WasteCapacity_MTQSpecified) hn_waste.WasteDetails.WasteCapacity_MTQ = Math.Round((decimal) (waste.WasteCapacity_MTQ ?? 0), 3); hn_waste.WasteDetails.WasteDisposalPort = waste.WasteDisposalPort.IsNullOrEmpty() ? "ZZUKN" : waste.WasteDisposalPort; was_items.Add(hn_waste); was_item_names.Add(ItemsChoiceType6.Waste); } } if (was.ConfirmationOfCorrectness ?? false) { was_items.Add(ytype.Y); was_item_names.Add(ItemsChoiceType6.ConfirmationOfCorrectnessAndSufficiency); } } hn_was.Items = was_items.ToArray(); hn_was.ItemsElementName = was_item_names.ToArray(); items1.Add(hn_was); items1ChoiceType.Add(Items1ChoiceType.WAS); } } } #endregion #region WAS_RCPT if (message.MessageNotificationClass == Message.NotificationClass.WAS_RCPT) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_WAS_RCPT); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::was_rcpt hn_was_rcpt = new global::was_rcpt(); hn_was_rcpt.Items = new was_rcptWasteDeliveryReceipt[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { WAS_RCPT was_rcpt = message.Elements[i] as WAS_RCPT; hn_was_rcpt.Items[i] = new was_rcptWasteDeliveryReceipt(); hn_was_rcpt.Items[i].IdentificationNumber = was_rcpt.IdentificationNumber; hn_was_rcpt.Items[i].PortReceptionFacilityName = was_rcpt.PortReceptionFacilityName; hn_was_rcpt.Items[i].PortReceptionFacilityProviderName = was_rcpt.PortReceptionFacilityProviderName; hn_was_rcpt.Items[i].WasteDeliveryPeriod = new was_rcptWasteDeliveryReceiptWasteDeliveryPeriod(); if (was_rcpt.WasteDeliveryDateFrom.HasValue) hn_was_rcpt.Items[i].WasteDeliveryPeriod.WasteDeliveryDateFrom = was_rcpt.WasteDeliveryDateFrom.Value; if (was_rcpt.WasteDeliveryDateTo.HasValue) hn_was_rcpt.Items[i].WasteDeliveryPeriod.WasteDeliveryDateTo = was_rcpt.WasteDeliveryDateTo.Value; if(was_rcpt.TreatmentFacilityProvider.Count > 0) { hn_was_rcpt.Items[i].TreatmentFacilityProvider = new string[was_rcpt.TreatmentFacilityProvider.Count]; for (int j = 0; j < was_rcpt.TreatmentFacilityProvider.Count; j++) hn_was_rcpt.Items[i].TreatmentFacilityProvider[j] = was_rcpt.TreatmentFacilityProvider[j].TreatmentFacilityProviderName; } if(was_rcpt.WasteReceived.Count > 0) { hn_was_rcpt.Items[i].WasteReceived = new was_rcptWasteDeliveryReceiptWasteReceived[was_rcpt.WasteReceived.Count]; for (int j = 0; j < was_rcpt.WasteReceived.Count; j++) { hn_was_rcpt.Items[i].WasteReceived[j] = new was_rcptWasteDeliveryReceiptWasteReceived(); hn_was_rcpt.Items[i].WasteReceived[j].AmountWasteReceived_MTQ = decimal.Round((decimal) (was_rcpt.WasteReceived[j].AmountWasteReceived_MTQ ?? 0), 3); hn_was_rcpt.Items[i].WasteReceived[j].WasteType = new was_rcptWasteDeliveryReceiptWasteReceivedWasteType(); hn_was_rcpt.Items[i].WasteReceived[j].WasteType.WasteCode = was_rcpt.WasteReceived[j].WasteCode; if(!was_rcpt.WasteReceived[j].WasteDescription.IsNullOrEmpty()) hn_was_rcpt.Items[i].WasteReceived[j].WasteType.WasteDescription = was_rcpt.WasteReceived[j].WasteDescription; } } } items1.Add(hn_was_rcpt); items1ChoiceType.Add(Items1ChoiceType.WAS_RCPT); } } } #endregion #region BPOL if (message.MessageNotificationClass == Message.NotificationClass.BPOL) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_BPOL); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { BPOL bpol = message.Elements[0] as BPOL; global::bpol hn_bpol = new global::bpol(); hn_bpol.StowawayOnBoard = (bpol.StowawaysOnBoard ?? false) ? yorntype.Y : yorntype.N; if (!bpol.PortOfItineraries.IsNullOrEmpty()) { hn_bpol.PortOfItinerary = new portofitinery[bpol.PortOfItineraries.Count]; for (int i = 0; i < bpol.PortOfItineraries.Count; i++) { hn_bpol.PortOfItinerary[i] = new portofitinery(); PortOfItinerary portOfItinerary = bpol.PortOfItineraries[i] as PortOfItinerary; hn_bpol.PortOfItinerary[i].PortOfItineryName = portOfItinerary.PortOfItineraryName; if (portOfItinerary.PortOfItineraryETA.HasValue) hn_bpol.PortOfItinerary[i].PortOfItineryETA = portOfItinerary.PortOfItineraryETA.Value; } } items1ChoiceType.Add(Items1ChoiceType.BPOL); items1.Add(hn_bpol); } } } #endregion #region PAS // TODO: Da bei mir PAS = PASA (keine eigene Meldeklasse) kann das hier erst direkt zum Stichtag umgesetzt werden if (message.MessageNotificationClass == Message.NotificationClass.PAS) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_PAS); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::pas hn_pas = new pas(); hn_pas.Passenger = new passenger[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { PAS pas = message.Elements[i] as PAS; hn_pas.Passenger[i] = new passenger(); if (pas.PassengerDateOfBirth.HasValue) hn_pas.Passenger[i].PassengerDateOfBirth = pas.PassengerDateOfBirth.Value; hn_pas.Passenger[i].PassengerFirstName = pas.PassengerFirstName; if (pas.PassengerGender.HasValue) hn_pas.Passenger[i].PassengerGender = GenderTypeFromEnumByte(pas.PassengerGender); hn_pas.Passenger[i].PassengerGenderSpecified = pas.PassengerGender.HasValue; hn_pas.Passenger[i].PassengerIdentityDocumentId = pas.PassengerIdentityDocumentId; if (pas.PassengerIdentityDocumentType.HasValue) hn_pas.Passenger[i].PassengerIdentityDocumentType = (documenttype)pas.PassengerIdentityDocumentType.Value; if (pas.PassengerInTransit.HasValue) hn_pas.Passenger[i].PassengerInTransit = pas.PassengerInTransit.Value ? yorntype.Y : yorntype.N; hn_pas.Passenger[i].PassengerLastName = pas.PassengerLastName; hn_pas.Passenger[i].PassengerNationality = pas.PassengerNationality; hn_pas.Passenger[i].PassengerPlaceOfBirth = pas.PassengerPlaceOfBirth; hn_pas.Passenger[i].PassengerPortOfDisembarkation = pas.PassengerPortOfDisembarkation; hn_pas.Passenger[i].PassengerPortOfEmbarkation = pas.PassengerPortOfEmbarkation; if(!pas.PassengerVisaNumber.IsNullOrEmpty()) hn_pas.Passenger[i].PassengerVisaNumber = pas.PassengerVisaNumber; hn_pas.Passenger[i].PassengerIdentityDocumentExpiryDateSpecified = pas.PassengerIdentityDocumentExpiryDate.HasValue; if (pas.PassengerIdentityDocumentExpiryDate.HasValue) hn_pas.Passenger[i].PassengerIdentityDocumentExpiryDate = pas.PassengerIdentityDocumentExpiryDate.Value; if(pas.PassengerIdentityDocumentIssuingState?.Trim().Length == 2) hn_pas.Passenger[i].PassengerIdentityDocumentIssuingState = pas.PassengerIdentityDocumentIssuingState; } items1ChoiceType.Add(Items1ChoiceType.PAS); items1.Add(hn_pas); } } } #endregion #region PASD if (message.MessageNotificationClass == Message.NotificationClass.PASD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_PASD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::pastype hn_pastype = new pastype(); PASD apasd = message.Elements[0] as PASD; hn_pastype.NotificationPAX = (apasd.NotificationPAX ?? false) ? yorntype.Y : yorntype.N; hn_pastype.NotificationSchengen = (apasd.NotificationSchengen ?? false) ? yorntype.Y : yorntype.N; hn_pastype.Passenger = new pastypePassenger[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { pastypePassenger hn_pas = new pastypePassenger(); PASD pasd = message.Elements[i] as PASD; hn_pas.CountryOfBirth = pasd.PassengerCountryOfBirth; if (pasd.PassengerDateOfBirth.HasValue) hn_pas.DateOfBirth = pasd.PassengerDateOfBirth.Value; if(pasd.NotificationPAX ?? false) { hn_pas.DetailsPAX = new pastypePassengerDetailsPAX(); hn_pas.DetailsPAX.EmergencyCare = pasd.EmergencyCare; hn_pas.DetailsPAX.EmergencyContactNumber = pasd.EmergencyContactNumber; } if(pasd.NotificationSchengen ?? false) { hn_pas.DetailsSchengen = new pastypePassengerDetailsSchengen(); if (pasd.PassengerIdentityDocumentExpiryDate.HasValue) hn_pas.DetailsSchengen.IdentityDocumentExpiryDate = pasd.PassengerIdentityDocumentExpiryDate.Value; hn_pas.DetailsSchengen.IdentityDocumentId = pasd.PassengerIdentityDocumentId; hn_pas.DetailsSchengen.IdentityDocumentIssuingState = pasd.PassengerIdentityDocumentIssuingState; if(pasd.PassengerIdentityDocumentType.HasValue) hn_pas.DetailsSchengen.IdentityDocumentType = (documenttype)pasd.PassengerIdentityDocumentType.Value; hn_pas.DetailsSchengen.InTransit = (pasd.PassengerInTransit ?? false) ? yorntype.Y : yorntype.N; hn_pas.DetailsSchengen.PortOfDisembarkation = pasd.PassengerPortOfDisembarkation; hn_pas.DetailsSchengen.PortOfEmbarkation = pasd.PassengerPortOfEmbarkation; hn_pas.DetailsSchengen.VisaNumber = pasd.PassengerVisaNumber; } hn_pas.FirstName = pasd.PassengerFirstName; if (pasd.PassengerGender.HasValue) hn_pas.Gender = GenderTypeFromEnumByte(pasd.PassengerGender); hn_pas.LastName = pasd.PassengerLastName; hn_pas.Nationality = pasd.PassengerNationality; hn_pas.PlaceOfBirth = pasd.PassengerPlaceOfBirth; hn_pastype.Passenger[i] = hn_pas; } items1ChoiceType.Add(Items1ChoiceType.PASD); items1.Add(hn_pastype); } } } #endregion #region CREW // das ist bei mir dasselbe wie CREWA und muss daher zum Zeitpunkt X geändert werden // ACHTUNG! CREWA ist bei HIS Nord anders aufgebaut als das CREW hier if (message.MessageNotificationClass == Message.NotificationClass.CREW) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_CREW); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::crew hn_crew = new crew(); hn_crew.CrewMember = new crewmember[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { CREW crew = message.Elements[i] as CREW; hn_crew.CrewMember[i] = new crewmember(); if (crew.CrewMemberDateOfBirth.HasValue) hn_crew.CrewMember[i].CrewMemberDateOfBirth = crew.CrewMemberDateOfBirth.Value; hn_crew.CrewMember[i].CrewMemberDuty = crew.CrewMemberDuty; hn_crew.CrewMember[i].CrewMemberFirstName = crew.CrewMemberFirstName; if (crew.CrewMemberGender.HasValue) hn_crew.CrewMember[i].CrewMemberGender = GenderTypeFromEnumByte(crew.CrewMemberGender); hn_crew.CrewMember[i].CrewMemberGenderSpecified = crew.CrewMemberGender.HasValue; hn_crew.CrewMember[i].CrewMemberIdentityDocumentId = crew.CrewMemberIdentityDocumentId; if (crew.CrewMemberIdentityDocumentType.HasValue) hn_crew.CrewMember[i].CrewMemberIdentityDocumentType = (documenttype)crew.CrewMemberIdentityDocumentType.Value; hn_crew.CrewMember[i].CrewMemberLastName = crew.CrewMemberLastName; hn_crew.CrewMember[i].CrewMemberNationality = crew.CrewMemberNationality; hn_crew.CrewMember[i].CrewMemberPlaceOfBirth = crew.CrewMemberPlaceOfBirth; hn_crew.CrewMember[i].CrewMemberVisaNumber = crew.CrewMemberVisaNumber.IsNullOrEmpty() ? "-" : crew.CrewMemberVisaNumber; if (crew.CrewMemberIdentityDocumentExpiryDate.HasValue) hn_crew.CrewMember[i].CrewmemberIdentityDocumentExpiryDate = crew.CrewMemberIdentityDocumentExpiryDate.Value; if(crew.CrewMemberIdentityDocumentIssuingState?.Trim().Length == 2) hn_crew.CrewMember[i].CrewMemberIdentityDocumentIssuingState = crew.CrewMemberIdentityDocumentIssuingState; } items1ChoiceType.Add(Items1ChoiceType.CREW); items1.Add(hn_crew); } } } #endregion #region CREWD if (message.MessageNotificationClass == Message.NotificationClass.CREWD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_CREWD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::crewtype hn_crewtype = new crewtype(); CREWD acrewd = message.Elements[0] as CREWD; hn_crewtype.NotificationPAX = (acrewd.NotificationPAX ?? false) ? yorntype.Y : yorntype.N; hn_crewtype.NotificationSchengen = (acrewd.NotificationSchengen ?? false) ? yorntype.Y : yorntype.N; hn_crewtype.CrewMember = new crewtypeCrewMember[message.Elements.Count]; for(int i = 0; i < message.Elements.Count; i++) { crewtypeCrewMember hn_crew = new crewtypeCrewMember(); CREWD crewd = message.Elements[i] as CREWD; hn_crew.CountryOfBirth = crewd.CrewMemberCountryOfBirth; if(crewd.CrewMemberDateOfBirth.HasValue) hn_crew.DateOfBirth = crewd.CrewMemberDateOfBirth.Value; if (acrewd.NotificationSchengen ?? false) { hn_crew.DetailsSchengen = new crewtypeCrewMemberDetailsSchengen(); if (crewd.CrewMemberIdentityDocumentExpiryDate.HasValue) hn_crew.DetailsSchengen.IdentityDocumentExpiryDate = crewd.CrewMemberIdentityDocumentExpiryDate.Value; hn_crew.DetailsSchengen.IdentityDocumentId = crewd.CrewMemberIdentityDocumentId; hn_crew.DetailsSchengen.IdentityDocumentIssuingState = crewd.CrewMemberIdentityDocumentIssuingState; if (crewd.CrewMemberIdentityDocumentType.HasValue) hn_crew.DetailsSchengen.IdentityDocumentType = (documenttype)crewd.CrewMemberIdentityDocumentType.Value; hn_crew.DetailsSchengen.VisaNumber = crewd.CrewMemberVisaNumber; } hn_crew.DutyOnBoard = crewd.CrewMemberDuty; hn_crew.FirstName = crewd.CrewMemberFirstName; if(crewd.CrewMemberGender.HasValue) hn_crew.Gender = GenderTypeFromEnumByte(crewd.CrewMemberGender); hn_crew.LastName = crewd.CrewMemberLastName; hn_crew.Nationality = crewd.CrewMemberNationality; hn_crew.PlaceOfBirth = crewd.CrewMemberPlaceOfBirth; hn_crewtype.CrewMember[i] = hn_crew; } items1ChoiceType.Add(Items1ChoiceType.CREWD); items1.Add(hn_crewtype); } } } #endregion #region TOWA / TOWD if (message.MessageNotificationClass == Message.NotificationClass.TOWA) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_TOWA); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::towa hn_towa = new towa(); hn_towa.TowageOnArrival = new arrival[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { TOWA towa = message.Elements[0] as TOWA; arrival hn_arrival = new arrival(); hn_towa.TowageOnArrival[i] = hn_arrival; if (towa.TowageOnArrivalBeam_MTR.HasValue) hn_arrival.TowageOnArrivalBeam_MTR = decimal.Round((decimal)towa.TowageOnArrivalBeam_MTR.Value, 2); if (towa.TowageOnArrivalDraught_DMT.HasValue) hn_arrival.TowageOnArrivalDraught_DMT = decimal.Round((decimal)towa.TowageOnArrivalDraught_DMT.Value, 1); if(!towa.TowageOnArrivalFlag.IsNullOrEmpty()) hn_arrival.TowageOnArrivalFlag = towa.TowageOnArrivalFlag; if (towa.TowageOnArrivalGrossTonnage.HasValue) hn_arrival.TowageOnArrivalGrossTonnage = towa.TowageOnArrivalGrossTonnage.Value.ToString(); if (towa.TowageOnArrivalLengthOverall_MTR.HasValue) hn_arrival.TowageOnArrivalLengthOverall_MTR = decimal.Round((decimal)towa.TowageOnArrivalLengthOverall_MTR.Value, 2); if(!towa.TowageOnArrivalName.IsNullOrEmpty()) hn_arrival.TowageOnArrivalName = towa.TowageOnArrivalName; hn_arrival.TowageOnArrivalOperator = new arrivaloperator(); if(!towa.TowageOnArrivalOperatorCity.IsNullOrEmpty()) hn_arrival.TowageOnArrivalOperator.TowageOnArrivalOperatorCity = towa.TowageOnArrivalOperatorCity; if(!towa.TowageOnArrivalOperatorCountry.IsNullOrEmpty()) hn_arrival.TowageOnArrivalOperator.TowageOnArrivalOperatorCountry = towa.TowageOnArrivalOperatorCountry; if(!towa.TowageOnArrivalOperatorPostalCode.IsNullOrEmpty()) hn_arrival.TowageOnArrivalOperator.TowageOnArrivalOperatorPostalCode = towa.TowageOnArrivalOperatorPostalCode; if(!towa.TowageOnArrivalOperatorStreetNameAndNumber.IsNullOrEmpty()) hn_arrival.TowageOnArrivalOperator.TowageOnArrivalOperatorStreetAndNumber = towa.TowageOnArrivalOperatorStreetNameAndNumber; if(!towa.TowageOnArrivalOperatorFax.IsNullOrEmpty()) hn_arrival.TowageOnArrivalOperator.TowageOnArrivalOperatorFax = towa.TowageOnArrivalOperatorFax; if(!towa.TowageOnArrivalOperatorPhone.IsNullOrEmpty()) hn_arrival.TowageOnArrivalOperator.TowageOnArrivalOperatorPhone = towa.TowageOnArrivalOperatorPhone; if(!towa.TowageOnArrivalOperatorEmail.IsNullOrEmpty()) hn_arrival.TowageOnArrivalOperator.TowageOnArrivalOperatorEMail = towa.TowageOnArrivalOperatorEmail; if(!towa.TowageOnArrivalOperatorCompanyName.IsNullOrEmpty()) hn_arrival.TowageOnArrivalOperator.TowageOnArrivalOperatorCompanyName = towa.TowageOnArrivalOperatorCompanyName; if(!towa.TowageOnArrivalPurposeOfCall.IsNullOrEmpty()) hn_arrival.TowageOnArrivalPurposeOfCall = towa.TowageOnArrivalPurposeOfCall; if(!towa.TowageOnArrivalRemarks.IsNullOrEmpty()) hn_arrival.TowageOnArrivalRemarks = towa.TowageOnArrivalRemarks; } items1ChoiceType.Add(Items1ChoiceType.TOWA); items1.Add(hn_towa); } } } if (message.MessageNotificationClass == Message.NotificationClass.TOWD) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_TOWD); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { global::towd hn_towd = new towd(); hn_towd.TowageOnDeparture = new departure[message.Elements.Count]; for (int i = 0; i < message.Elements.Count; i++) { departure hn_departure = new departure(); hn_towd.TowageOnDeparture[i] = hn_departure; TOWD towd = message.Elements[0] as TOWD; hn_departure.TowageOnDepartureBeam_MTRSpecified = towd.TowageOnDepartureBeam_MTR.HasValue; if (hn_departure.TowageOnDepartureBeam_MTRSpecified) hn_departure.TowageOnDepartureBeam_MTR = decimal.Round((decimal)towd.TowageOnDepartureBeam_MTR.Value, 2); if (towd.TowageOnDepartureDraught_DMT.HasValue) hn_departure.TowageOnDepartureDraught_DMT = decimal.Round((decimal)towd.TowageOnDepartureDraught_DMT.Value, 1); if(!towd.TowageOnDepartureFlag.IsNullOrEmpty()) hn_departure.TowageOnDepartureFlag = towd.TowageOnDepartureFlag; if(!towd.TowageOnDepartureName.IsNullOrEmpty()) hn_departure.TowageOnDepartureName = towd.TowageOnDepartureName; hn_departure.TowageOnDepartureOperator = new departureoperator(); if(!towd.TowageOnDepartureOperatorCity.IsNullOrEmpty()) hn_departure.TowageOnDepartureOperator.TowageOnDepartureOperatorCity = towd.TowageOnDepartureOperatorCity; if(!towd.TowageOnDepartureOperatorCountry.IsNullOrEmpty()) hn_departure.TowageOnDepartureOperator.TowageOnDepartureOperatorCountry = towd.TowageOnDepartureOperatorCountry; if(!towd.TowageOnDepartureOperatorPostalCode.IsNullOrEmpty()) hn_departure.TowageOnDepartureOperator.TowageOnDepartureOperatorPostalCode = towd.TowageOnDepartureOperatorPostalCode; if(!towd.TowageOnDepartureOperatorStreetNameAndNumber.IsNullOrEmpty()) hn_departure.TowageOnDepartureOperator.TowageOnDepartureOperatorStreetAndNumber = towd.TowageOnDepartureOperatorStreetNameAndNumber; if(!towd.TowageOnDepartureOperatorFax.IsNullOrEmpty()) hn_departure.TowageOnDepartureOperator.TowageOnDepartureOperatorFax = towd.TowageOnDepartureOperatorFax; if(!towd.TowageOnDepartureOperatorPhone.IsNullOrEmpty()) hn_departure.TowageOnDepartureOperator.TowageOnDepartureOperatorPhone = towd.TowageOnDepartureOperatorPhone; if(!towd.TowageOnDepartureOperatorEmail.IsNullOrEmpty()) hn_departure.TowageOnDepartureOperator.TowageOnDepartureOperatorEMail = towd.TowageOnDepartureOperatorEmail; if(!towd.TowageOnDepartureOperatorCompanyName.IsNullOrEmpty()) hn_departure.TowageOnDepartureOperator.TowageOnDepartureOperatorCompanyName = towd.TowageOnDepartureOperatorCompanyName; hn_departure.TowageOnDepartureLengthOverall_MTRSpecified = towd.TowageOnDepartureLengthOverall_MTR.HasValue; if (hn_departure.TowageOnDepartureLengthOverall_MTRSpecified) hn_departure.TowageOnDepartureLengthOverall_MTR = decimal.Round((decimal)towd.TowageOnDepartureLengthOverall_MTR.Value, 2); if(!towd.TowageOnDepartureRemarks.IsNullOrEmpty()) hn_departure.TowageOnDepartureRemarks = towd.TowageOnDepartureRemarks; } items1ChoiceType.Add(Items1ChoiceType.TOWD); items1.Add(hn_towd); } } } #endregion #region AGNT if (message.MessageNotificationClass == Message.NotificationClass.AGNT) { if (message.Reset) { items1ChoiceType.Add(Items1ChoiceType.RESET_AGNT); items1.Add(ytype.Y); } else { if (message.Elements.Count > 0) { AGNT agnt = message.Elements[0] as AGNT; global::agnt hn_agnt = new global::agnt(); if(!agnt.AgentCity.IsNullOrEmpty()) hn_agnt.AgentCity = agnt.AgentCity; hn_agnt.AgentCompanyName = agnt.AgentCompanyName; if(!agnt.AgentCountry.IsNullOrEmpty()) hn_agnt.AgentCountry = agnt.AgentCountry; if(!agnt.AgentEMail.IsNullOrEmpty()) hn_agnt.AgentEMail = agnt.AgentEMail; if(!agnt.AgentFax.IsNullOrEmpty()) hn_agnt.AgentFax = agnt.AgentFax; if(!agnt.AgentFirstName.IsNullOrEmpty()) hn_agnt.AgentFirstName = agnt.AgentFirstName; hn_agnt.AgentLastName = agnt.AgentLastName; hn_agnt.AgentPhone = agnt.AgentPhone; if(!agnt.AgentPostalCode.IsNullOrEmpty()) hn_agnt.AgentPostalCode = agnt.AgentPostalCode; if(!agnt.AgentStreetAndNumber.IsNullOrEmpty()) hn_agnt.AgentStreetAndNumber = agnt.AgentStreetAndNumber; items1ChoiceType.Add(Items1ChoiceType.AGNT); items1.Add(hn_agnt); } } } #endregion } _nsw.conveyance.Items1 = items1.ToArray(); _nsw.conveyance.Items1ElementName = items1ChoiceType.ToArray(); #endregion #region serialize and save message string outputDir = Path.Combine(Properties.Settings.Default.TransmitterRoot, Properties.Settings.Default.OutputDir); string filename = string.Format("BSMD_{1}-{2}-{0}.xml", (message == null) ? "CANCEL" : message.MessageNotificationClassDisplay, DateTime.Now.ToString("yyyyMMddHHmmss"), core.Id.Value); _log.InfoFormat("saving {0} to output directory", filename); string filePath = Path.Combine(outputDir, filename); XmlSerializer serializer = new XmlSerializer(typeof(nsw)); using (TextWriter tw = new StreamWriter(filePath)) { serializer.Serialize(tw, _nsw); } if (!coreFilenameDict.ContainsKey(core)) coreFilenameDict[core] = new Dictionary(); if(message != null) coreFilenameDict[core][message] = filename; retval = true; #endregion } catch (Exception ex) { _log.ErrorFormat("Error sending message via hisnord: {0}", ex); retval = false; } return retval; } #endregion #region helper func for HAZ positions private static void SetHAZPositions(dglist hn_dgList, HAZ haz) { List dgList = new List(); #region IMDGPositions if (haz.IMDGPositions.Count > 0) { for (int i = 0; i < haz.IMDGPositions.Count; i++) { IMDGPosition imdgPosition = haz.IMDGPositions[i] as IMDGPosition; positionimdg pi = new positionimdg(); pi.UNNumber = imdgPosition.UNNumber; if (imdgPosition.PackingGroup.HasValue) pi.PackingGroup = (packinggrouptype)imdgPosition.PackingGroup; pi.ProperShippingName = imdgPosition.ProperShippingName; pi.IMOClass = imdgPosition.IMOClass; if(!imdgPosition.TechnicalName.IsNullOrEmpty()) pi.TechnicalName = imdgPosition.TechnicalName; pi.NetExplosiveMass_KGMSpecified = imdgPosition.NetExplosiveMass_KGM.HasValue; if (pi.NetExplosiveMass_KGMSpecified) pi.NetExplosiveMass_KGM = (decimal)imdgPosition.NetExplosiveMass_KGM.Value; if(!imdgPosition.Flashpoint_CEL.IsNullOrEmpty()) pi.Flashpoint_CEL = imdgPosition.Flashpoint_CEL; if(!imdgPosition.Class7NuclideName.IsNullOrEmpty()) pi.Class7NuclideName = imdgPosition.Class7NuclideName; pi.Class7CategorySpecified = imdgPosition.Class7Category.HasValue; if (pi.Class7CategorySpecified) pi.Class7Category = (class7cattype)imdgPosition.Class7Category.Value; pi.Class7TransportIndexSpecified = imdgPosition.Class7TransportIndex.HasValue; if (pi.Class7TransportIndexSpecified) pi.Class7TransportIndex = (float)imdgPosition.Class7TransportIndex.Value; pi.Class7CSISpecified = imdgPosition.Class7CSI.HasValue; if (pi.Class7CSISpecified) pi.Class7CSI = (float)imdgPosition.Class7CSI.Value; pi.ControlTemperature_CELSpecified = imdgPosition.ControlTemperature_CEL.HasValue; if (pi.ControlTemperature_CELSpecified) pi.ControlTemperature_CEL = (decimal)imdgPosition.ControlTemperature_CEL.Value; pi.EmergencyTemperature_CELSpecified = imdgPosition.EmergencyTemperature_CEL.HasValue; if (pi.EmergencyTemperature_CELSpecified) pi.EmergencyTemperature_CEL = (decimal)imdgPosition.EmergencyTemperature_CEL.Value; if(imdgPosition.SubsidiaryRiskList.Count > 0) { pi.SubsidiaryRisks = new string[Math.Min(imdgPosition.SubsidiaryRiskList.Count, 5)]; for (int j = 0; j < Math.Min(imdgPosition.SubsidiaryRiskList.Count, 5); j++) pi.SubsidiaryRisks[j] = imdgPosition.SubsidiaryRiskList[j].SubsidiaryRisk; } pi.MarinePollutant = (imdgPosition.MarinePollutant ?? false) ? yorntype.Y : yorntype.N; pi.NumberOfPackages = imdgPosition.NumberOfPackages?.ToString(); pi.PackageType = imdgPosition.PackageType; pi.PackingGroupSpecified = imdgPosition.PackingGroup.HasValue; if (pi.PackingGroupSpecified) pi.PackingGroup = (packinggrouptype)imdgPosition.PackingGroup; pi.LimitedQuantities = (imdgPosition.LimitedQuantities ?? false) ? yorntype.Y : yorntype.N; pi.ExceptedQuantities = (imdgPosition.ExceptedQuantities ?? false) ? yorntype.Y : yorntype.N; pi.NetQuantity_KGMSpecified = imdgPosition.NetQuantity_KGM.HasValue; if (pi.NetQuantity_KGMSpecified) pi.NetQuantity_KGM = (decimal)imdgPosition.NetQuantity_KGM.Value; pi.GrossQuantity_KGMSpecified = imdgPosition.GrossQuantity_KGM.HasValue; if (pi.GrossQuantity_KGMSpecified) pi.GrossQuantity_KGM = (decimal)imdgPosition.GrossQuantity_KGM.Value; pi.Volume_MTQSpecified = imdgPosition.Volume_MTQ.HasValue; if (pi.Volume_MTQSpecified) pi.Volume_MTQ = (decimal)imdgPosition.Volume_MTQ.Value; pi.GeneralCargoIBCSpecified = imdgPosition.GeneralCargoIBC.HasValue; if (pi.GeneralCargoIBCSpecified) pi.GeneralCargoIBC = imdgPosition.GeneralCargoIBC.Value ? yorntype.Y : yorntype.N; if(!imdgPosition.ContainerNumber.IsNullOrEmpty()) pi.ContainerNumber = imdgPosition.ContainerNumber; if(!imdgPosition.VehicleLicenseNumber.IsNullOrEmpty()) pi.VehicleLicenseNumber = imdgPosition.VehicleLicenseNumber; if(!imdgPosition.StowagePosition.IsNullOrEmpty()) { pi.Item = imdgPosition.StowagePosition; } else { global::stowagepositionbayrowtier spbrt = new global::stowagepositionbayrowtier(); spbrt.Bay = imdgPosition.Bay; spbrt.Row = imdgPosition.Row; spbrt.Tier = imdgPosition.Tier; pi.Item = spbrt; } pi.PortOfLoading = imdgPosition.PortOfLoading; pi.PortOfDischarge = imdgPosition.PortOfDischarge; if(!imdgPosition.Remarks.IsNullOrEmpty()) pi.Remarks = imdgPosition.Remarks; dgList.Add(pi); } } #endregion #region IBCPositions if (haz.IBCPositions.Count > 0) { for (int i = 0; i < haz.IBCPositions.Count; i++) { positionibc pi = new positionibc(); IBCPosition ibcPosition = haz.IBCPositions[i] as IBCPosition; pi.ProductName = ibcPosition.ProductName; if (ibcPosition.PollutionCategory.HasValue) pi.PollutionCategory = (polcattype)ibcPosition.PollutionCategory.Value; pi.HazardsSpecified = ibcPosition.Hazards.HasValue; if (pi.HazardsSpecified) pi.Hazards = (hazardtype)ibcPosition.Hazards.Value; if (ibcPosition.FlashpointInformation.HasValue) pi.FlashpointInformation = (flashpointinfotype)ibcPosition.FlashpointInformation.Value; if(!ibcPosition.Flashpoint_CEL.IsNullOrEmpty()) pi.Flashpoint_CEL = ibcPosition.Flashpoint_CEL; if (ibcPosition.Quantity_KGM.HasValue) pi.Quantity_KGM = (decimal)ibcPosition.Quantity_KGM.Value; pi.StowagePosition = ibcPosition.StowagePosition; pi.PortOfLoading = ibcPosition.PortOfLoading; pi.PortOfDischarge = ibcPosition.PortOfDischarge; pi.SpecRef15_19Specified = ibcPosition.SpecRef15_19.HasValue; if (pi.SpecRef15_19Specified) pi.SpecRef15_19 = ibcPosition.SpecRef15_19.Value ? yorntype.Y : yorntype.N; if(!ibcPosition.Remarks.IsNullOrEmpty()) pi.Remarks = ibcPosition.Remarks; dgList.Add(pi); } } #endregion #region IGCPositions if (haz.IGCPositions.Count > 0) { for (int i = 0; i < haz.IGCPositions.Count; i++) { positionigc pi = new positionigc(); IGCPosition igcPosition = haz.IGCPositions[i] as IGCPosition; if(!igcPosition.UNNumber.IsNullOrEmpty()) pi.UNNumber = igcPosition.UNNumber; if(!igcPosition.IMOClass.IsNullOrEmpty()) pi.IMOClass = igcPosition.IMOClass; pi.ProductName = igcPosition.ProductName; if (igcPosition.Quantity_KGM.HasValue) pi.Quantity_KGM = (decimal)igcPosition.Quantity_KGM.Value; pi.StowagePosition = igcPosition.StowagePosition; pi.PortOfLoading = igcPosition.PortOfLoading; pi.PortOfDischarge = igcPosition.PortOfDischarge; if(!igcPosition.Remarks.IsNullOrEmpty()) pi.Remarks = igcPosition.Remarks; dgList.Add(pi); } } #endregion #region IMSBCPositions if (haz.IMSBCPositions.Count > 0) { for (int i = 0; i < haz.IMSBCPositions.Count; i++) { positionimsbc pi = new positionimsbc(); IMSBCPosition imsbcPosition = haz.IMSBCPositions[i] as IMSBCPosition; pi.BulkCargoShippingName = imsbcPosition.BulkCargoShippingName; pi.MHB = (imsbcPosition.MHB ?? false) ? yorntype.Y : yorntype.N; if(!imsbcPosition.UNNumber.IsNullOrEmpty()) pi.UNNumber = imsbcPosition.UNNumber; if(!imsbcPosition.IMOClass.IsNullOrEmpty()) pi.IMOClass = imsbcPosition.IMOClass; if (imsbcPosition.Quantity_KGM.HasValue) pi.Quantity_KGM = (decimal)imsbcPosition.Quantity_KGM.Value; pi.StowagePosition = imsbcPosition.StowagePosition; pi.PortOfLoading = imsbcPosition.PortOfLoading; pi.PortOfDischarge = imsbcPosition.PortOfDischarge; if(!imsbcPosition.Remarks.IsNullOrEmpty()) pi.Remarks = imsbcPosition.Remarks; pi.IMOHazardClassSpecified = imsbcPosition.IMOHazardClass.HasValue; if (imsbcPosition.IMOHazardClass.HasValue) pi.IMOHazardClass = (positionimsbcIMOHazardClass)imsbcPosition.IMOHazardClass.Value; dgList.Add(pi); } } #endregion #region MARPOLPositions if (haz.MARPOLPositions.Count > 0) { for (int i = 0; i < haz.MARPOLPositions.Count; i++) { positionmarpol pi = new positionmarpol(); MARPOL_Annex_I_Position marpolPosition = haz.MARPOLPositions[i] as MARPOL_Annex_I_Position; pi.Name = marpolPosition.Name; if (marpolPosition.FlashpointInformation.HasValue) pi.FlashpointInformation = (flashpointinfotype)marpolPosition.FlashpointInformation.Value; if(!marpolPosition.Flashpoint_CEL.IsNullOrEmpty()) pi.Flashpoint_CEL = marpolPosition.Flashpoint_CEL; if (marpolPosition.Quantity_KGM.HasValue) pi.Quantity_KGM = (decimal)marpolPosition.Quantity_KGM.Value; pi.StowagePosition = marpolPosition.StowagePosition; pi.PortOfLoading = marpolPosition.PortOfLoading; pi.PortOfDischarge = marpolPosition.PortOfDischarge; if(!marpolPosition.Remarks.IsNullOrEmpty()) pi.Remarks = marpolPosition.Remarks; dgList.Add(pi); } } #endregion hn_dgList.Items = dgList.ToArray(); } #endregion #region helper func set gender private static GenderType GenderTypeFromEnumByte(byte? val) { if(val.HasValue) { switch(val.Value) { case 1: return GenderType.Item1; case 2: return GenderType.Item2; case 9: return GenderType.Item9; default: return GenderType.Item0; } } return GenderType.Item0; } #endregion } }