From 384dad595084f8bb065be4852f58bb7fae081c45 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sun, 4 Sep 2016 06:35:02 +0000 Subject: [PATCH] Erste Version Excel-Reader deployment (3.2.0) --- Stundensheet.xlsx | Bin 23136 -> 23316 bytes .../bsmd.ExcelReadService/ExcelReadService.cs | 6 +- .../bsmd.ExcelReadService/ExcelReader.cs | 313 +++++++++++++----- nsw/Source/bsmd.ExcelReadService/Util.cs | 23 +- nsw/Source/bsmd.database/Message.cs | 4 +- nsw/Source/bsmd.email/BSMDPopClient.cs | 6 +- 6 files changed, 260 insertions(+), 92 deletions(-) diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index b9a48977de3908a6dab95d50b1de230c17ad1450..cdc83a4015ae26e711ef46174267301e6e55e7dd 100644 GIT binary patch delta 12516 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 delta 12299 zcmZ9yWmH~G4>pRsyE`rJMT@)NxVsj2hmE_tLveSP;x2^(#T|+}6o*5fv(9?Y_w8R< znPig5B-hBEY^ z(&1||H8~-f`eZW)XN$~PeUEc}?U=&;$X{$tPJc&3&jxNAZS&S?e#_?iYJ3>S;6l=d z#3;l8WU7hR8;8=%O7^b+q1%}f@DJN!_PxXCJHj{NXJP8DMg{m+_}SZU^X~5b87Szm z#cExqG}IDR?vf{81udI=nMgme+1bxXz+VJf??5Qo*jx|WYt=OnG1_y*{JP{7;M>-_ z56g0iDiOOu17xs;f8U~ua`j5?&t+RcKmTJ^7Gj(!bj(TCom`0UN(6gw&97mPG()h#}x_S+IuoBFqSY?E`Y zG801UC)MP3cFuu=zTGdL)SQHGu$EYW(DYg2XO1@YwktlZlD9v{-AQ&O)#fY55)-JT z`Ck|;yw(hsCyFdoWCN`O;?h#r1}mP_VK0LhPBpe?bD~doFQ4mnvVSU1{$is5t#|a`Ad~ zw$YqIKb>+0<9A;wX)*u$J~THlbEKi)+1`u0;14xb|JHnj)q8tfp z*wY@t_nZXS0uKEej3YaT@E=)3tUqLXXX;=!+k3$O>8k})W5}$%2Yvp6=#s;SknE!?O zDTTz#_yX~dcA`YDDQSh%rD*dmTnos)6-jwQF;w}{@yUq(`%C56wZ`L>kvjT5?wul8 z^Gk5V{$}KcD4Z{ns;8BxzVZb>l(MX1x~kXZ2!D@Eo}hKt6(G5YX|_J#ZI54+nu}EY zE9x-`&H2V6W%CR4h_(15u7^Hn@;LLKpVU7V)gSfaU^cB;Cr#qjpQELV!?p@71}8_G z)ixFj>t84W^tODLKSntHH9DOhNV#u@zOeqj{?YGmL9b2XSiP2lSUsH-6K{^+0x&s9 z%Cd3#8mR&|K*u-rDGed3F7=DFHg5Dw&))NrR%FSe!`^c^Qk4wi+eUtH;{wA@1{Ic) zpww3+MQ+4+x^(k7{btM)#FlY+4-QToULKh8m=HVTFidP6rJU?)CrlE49k0x-g12J-zaE-?^2}SO!f7qq7Kq12FWda|qG|HN9(IN$lSsOxj+| zp?&Ktf>*pV>A1FMHJ{T-Sfoz)qa%vBxTn}em|q2()mO2y#e*o*h3OC-aE8M<$%3Z~ z?1Wq53%;aNaePD=b-EuNCQ~Hvw_*G^ zS@StLAj}S9q1aNe_!{fNA;uq#&DXPENQz0_QEU$bcohNj%ZX36-w7sqWr zjHnt+c`@v}HH-4ma^wb#+FL7a(YJsosD5f3!#Y-EQ)eBR??2UGenNu!BGS-m*dU$n;Jd&|T7wkV$ovg&jEkD|OH zrkwZNjA?9q{Ds>x!y6slHI{*�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 0) return 0; - if (val.IndexOf("europe", StringComparison.OrdinalIgnoreCase) >= 0) return 1; - if (val.IndexOf("overseas", StringComparison.OrdinalIgnoreCase) >= 0) return 2; - this.HighlightLookup(lookup, ReadState.FAIL); - return null; + byte? result = null; + if (val != null) + { + if (val.IndexOf("baltic", StringComparison.OrdinalIgnoreCase) >= 0) result = 0; + if (val.IndexOf("europe", StringComparison.OrdinalIgnoreCase) >= 0) result = 1; + if (val.IndexOf("overseas", StringComparison.OrdinalIgnoreCase) >= 0) result = 2; + if (result == null) + this.HighlightLookup(lookup, ReadState.WARN); + else + this.HighlightLookup(lookup, ReadState.OK); + } + else + { + this.HighlightLookup(lookup, ReadState.FAIL); + } + return result; } internal byte? ReadHullConfiguration(string lookup) { string val = this.ReadText(lookup); - if (val == null) return null; - if (val.IndexOf("sbt", StringComparison.OrdinalIgnoreCase) >= 0) return 1; - if (val.IndexOf("single", StringComparison.OrdinalIgnoreCase) >= 0) return 0; - if (val.IndexOf("double", StringComparison.OrdinalIgnoreCase) >= 0) return 2; - this.HighlightLookup(lookup, ReadState.FAIL); - return null; + byte? result = null; + if (val != null) + { + if (val.IndexOf("sbt", StringComparison.OrdinalIgnoreCase) >= 0) result = 1; + if (val.IndexOf("single", StringComparison.OrdinalIgnoreCase) >= 0) result = 0; + if (val.IndexOf("double", StringComparison.OrdinalIgnoreCase) >= 0) result = 2; + if (result == null) + this.HighlightLookup(lookup, ReadState.WARN); + else + this.HighlightLookup(lookup, ReadState.OK); + } + else + { + this.HighlightLookup(lookup, ReadState.FAIL); + } + return result; } internal byte? ReadConditionTanks(string lookup) { string val = this.ReadText(lookup); - if (val == null) return null; - if (val.IndexOf("full", StringComparison.OrdinalIgnoreCase) >= 0) return 0; - if (val.IndexOf("empty", StringComparison.OrdinalIgnoreCase) >= 0) return 1; - if (val.IndexOf("inerted", StringComparison.OrdinalIgnoreCase) >= 0) return 2; - this.HighlightLookup(lookup, ReadState.FAIL); - return null; + byte? result = null; + if (val != null) + { + if (val.IndexOf("full", StringComparison.OrdinalIgnoreCase) >= 0) result = 0; + if (val.IndexOf("empty", StringComparison.OrdinalIgnoreCase) >= 0) result = 1; + if (val.IndexOf("inerted", StringComparison.OrdinalIgnoreCase) >= 0) result = 2; + if (result == null) + this.HighlightLookup(lookup, ReadState.WARN); + else + this.HighlightLookup(lookup, ReadState.OK); + } + else + { + this.HighlightLookup(lookup, ReadState.FAIL); + } + return result; } internal byte? ReadDelivery(string lookup) { string val = this.ReadText(lookup); - if (val == null) return null; - if (val.IndexOf("all", StringComparison.OrdinalIgnoreCase) >= 0) return 0; - if (val.IndexOf("some", StringComparison.OrdinalIgnoreCase) >= 0) return 1; - if (val.IndexOf("none", StringComparison.OrdinalIgnoreCase) >= 0) return 2; - this.HighlightLookup(lookup, ReadState.FAIL); - return null; + byte? result = null; + + if (val != null) + { + if (val.IndexOf("all", StringComparison.OrdinalIgnoreCase) >= 0) result = 0; + if (val.IndexOf("some", StringComparison.OrdinalIgnoreCase) >= 0) result = 1; + if (val.IndexOf("none", StringComparison.OrdinalIgnoreCase) >= 0) result = 2; + if (result == null) + this.HighlightLookup(lookup, ReadState.WARN); + else + this.HighlightLookup(lookup, ReadState.OK); + } + else + { + this.HighlightLookup(lookup, ReadState.FAIL); + } + return result; } public void Dispose() @@ -199,18 +271,45 @@ namespace bsmd.ExcelReadService { try { - if (!_nameDict.ContainsKey(lookup)) return null; - var val = _nameDict[lookup].RefersToRange.Value; - if (val is DateTime) return val; - if (val is double) - return DateTime.FromOADate(val); - DateTime date; - if (DateTime.TryParse(val, out date)) - return date; - // TODO: weitere varianten ausprobieren + DateTime? date = null; - this.HighlightLookup(lookup, ReadState.WARN); - return null; + if (_nameDict.ContainsKey(lookup)) + { + var val = _nameDict[lookup].RefersToRange.Value; + if (val is DateTime) return val; + if (val is double) + { + try + { + date = DateTime.FromOADate(val); + } + catch (ArgumentException) { /* .. */ } + if(date == null) + { + CultureInfo provider = CultureInfo.InvariantCulture; + string dateString = val.ToString(); + string format = "yyyyMMdd"; + DateTime tmpDate; + if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out tmpDate)) + date = tmpDate; + } + } + + if (date == null) + { + DateTime tmpDate; + if (DateTime.TryParse(val, out tmpDate)) + date = tmpDate; + } + + // TODO: weitere varianten ausprobieren + if (date != null) + this.HighlightLookup(lookup, ReadState.OK); + else + this.HighlightLookup(lookup, ReadState.WARN); + } + + return date; } catch (Exception) { @@ -237,54 +336,106 @@ namespace bsmd.ExcelReadService } internal DateTime? ReadTime(string lookup) - { + { + DateTime? result = null; + try { - if (!_nameDict.ContainsKey(lookup)) return null; - var val = _nameDict[lookup].RefersToRange.Value; - if (val is DateTime) return val; - if (val is double) - return DateTime.FromOADate(val); - DateTime date; - if (DateTime.TryParseExact(val, "HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out date)) - return date; - if (DateTime.TryParseExact(val, "HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out date)) - return date; - this.HighlightLookup(lookup, ReadState.WARN); - return null; + if (_nameDict.ContainsKey(lookup)) + { + var val = _nameDict[lookup].RefersToRange.Value; + if (val is DateTime) + { + result = val; + } + if (val is double) + { + try + { + result = DateTime.FromOADate(val); + } + catch(ArgumentException) { } + + if (result == null) + { + CultureInfo provider = CultureInfo.InvariantCulture; + string dateString = val.ToString(); + string format = "HHmm"; + DateTime tmpDate; + if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out tmpDate)) + result = tmpDate; + } + + } + if (result == null) + { + DateTime date; + if (DateTime.TryParseExact(val, "HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out date)) + result = date; + } + + if (result == null) + { + DateTime date; + if (DateTime.TryParseExact(val, "HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out date)) + return date; + } + + if (result != null) + { + this.HighlightLookup(lookup, ReadState.OK); + } + else + { + this.HighlightLookup(lookup, ReadState.WARN); + } + } } catch (Exception) { this.HighlightLookup(lookup, ReadState.FAIL); - _log.WarnFormat("error reading time for lookup {0}", lookup); - return null; + _log.WarnFormat("error reading time for lookup {0}", lookup); } + + return result; } internal double? ReadNumber(string lookup) { - double result; + double? result = null; try { - if (!_nameDict.ContainsKey(lookup)) return null; - var val = _nameDict[lookup].RefersToRange.Value; - if (val is double) return val; - if (val is string) + if (_nameDict.ContainsKey(lookup)) { - if (double.TryParse(val, NumberStyles.None, CultureInfo.InvariantCulture, out result)) - return result; - if (double.TryParse(val, out result)) - return result; - } - this.HighlightLookup(lookup, ReadState.WARN); - return null; + var val = _nameDict[lookup].RefersToRange.Value; + if (val is double) result = val; + if (val is string) + { + double tmpDouble; + if (double.TryParse(val, NumberStyles.None, CultureInfo.InvariantCulture, out tmpDouble)) + result = tmpDouble; + if (result == null) + { + if (double.TryParse(val, out tmpDouble)) + result = tmpDouble; + } + } + if (result != null) + { + this.HighlightLookup(lookup, ReadState.OK); + } + else + { + this.HighlightLookup(lookup, ReadState.WARN); + } + } } catch (Exception) { this.HighlightLookup(lookup, ReadState.FAIL); - _log.WarnFormat("error reading number for lookup {0}", lookup); - return null; + _log.WarnFormat("error reading number for lookup {0}", lookup); } + return result; } internal bool? ReadBoolean(string lookup) @@ -292,13 +443,15 @@ namespace bsmd.ExcelReadService string val = this.ReadText(lookup); if (val == null) { - this.HighlightLookup(lookup, ReadState.WARN); + this.HighlightLookup(lookup, ReadState.FAIL); return null; } + + this.HighlightLookup(lookup, ReadState.OK); + if ((val == "y") || (val == "Y") || (val == "yes") || (val == "YES") || (val == "1") || (val == "x") || (val == "X")) return true; return false; - } - + } } } diff --git a/nsw/Source/bsmd.ExcelReadService/Util.cs b/nsw/Source/bsmd.ExcelReadService/Util.cs index 4ba8a2e8..c0b5e233 100644 --- a/nsw/Source/bsmd.ExcelReadService/Util.cs +++ b/nsw/Source/bsmd.ExcelReadService/Util.cs @@ -949,7 +949,8 @@ namespace bsmd.ExcelReadService result = DBManager.Instance.GetMessageCoreByTransitId(visitTransitId); } } - else + + if(result == null) { // lookup poc, imo, eta poc = reader.ReadText("Visit.PortOfCall"); @@ -972,10 +973,15 @@ namespace bsmd.ExcelReadService if(poc.Contains(',')) // irgendwas wie "Hamburg, Germany" { aGermanPortName = poc.Split(',')[0]; - } + } - // somehow lookup LOCODE from the port's name! - poc = LocodeDB.LocodeGERFromCity(aGermanPortName); + if (RuleEngine.IsGermanLocode(aGermanPortName)) + poc = aGermanPortName; + else + { + // somehow lookup LOCODE from the port's name! + poc = LocodeDB.LocodeGERFromCity(aGermanPortName); + } } } @@ -1028,6 +1034,15 @@ namespace bsmd.ExcelReadService _log.WarnFormat("IMO {0} is longer than 7 chars, truncating!", result.IMO); result.IMO = result.IMO.Substring(0, 7); } + + if(visitTransitId != null) + { + if (bsmd.database.Util.IsVisitId(visitTransitId)) + result.VisitId = visitTransitId; + else + result.TransitId = visitTransitId; + } + DBManager.Instance.Save(result); } diff --git a/nsw/Source/bsmd.database/Message.cs b/nsw/Source/bsmd.database/Message.cs index 5b046861..c566ab46 100644 --- a/nsw/Source/bsmd.database/Message.cs +++ b/nsw/Source/bsmd.database/Message.cs @@ -459,8 +459,8 @@ namespace bsmd.database { case NotificationClass.BKRA: return 5; case NotificationClass.BKRD: return 5; - case NotificationClass.LADG: return 5; - case NotificationClass.CREW: return 30; + case NotificationClass.LADG: return 36; + case NotificationClass.CREW: return 40; case NotificationClass.PAS: return 30; default: diff --git a/nsw/Source/bsmd.email/BSMDPopClient.cs b/nsw/Source/bsmd.email/BSMDPopClient.cs index 26944765..8b9c710e 100644 --- a/nsw/Source/bsmd.email/BSMDPopClient.cs +++ b/nsw/Source/bsmd.email/BSMDPopClient.cs @@ -21,6 +21,7 @@ namespace bsmd.email private Pop3Client pop3Client; private bool _connected = false; private ILog _log = LogManager.GetLogger(typeof(BSMDPopClient)); + private int currentMail = 1; public BSMDPopClient() { @@ -34,6 +35,7 @@ namespace bsmd.email catch (Exception ex) { _log.ErrorFormat("Error connecting to POP3 Server: {0}", ex.Message); + _log.DebugFormat("User:{0} Pw:{1}", Properties.Settings.Default.POP3User, Properties.Settings.Default.POP3Password); } } @@ -50,7 +52,7 @@ namespace bsmd.email int messageCount = this.pop3Client.GetMessageCount(); if (messageCount > 0) { - Message mailMessage = this.pop3Client.GetMessage(1); + Message mailMessage = this.pop3Client.GetMessage(this.currentMail); if ((mailMessage.Headers.Sender != null) && mailMessage.Headers.Sender.HasValidMailAddress) sender = mailMessage.Headers.Sender.MailAddress.Address; @@ -69,6 +71,8 @@ namespace bsmd.email } } + this.currentMail++; // advance message pointer + return true; } else