From dad76beb2cc45f28d760133865087f372676b4d2 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sun, 21 Aug 2016 08:57:20 +0000 Subject: [PATCH] =?UTF-8?q?3.20.0:=20MaxLength=20Attribut=20zur=20zus?= =?UTF-8?q?=C3=A4tzlichen=20Validierung=20beim=20Speichern,=20Modultest=20?= =?UTF-8?q?Excel-Einlesen=20(Achtung=20Logfile=20Auswertung),=20Versenden?= =?UTF-8?q?=20der=20Highlight-Kopie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Stundensheet.xlsx | Bin 23044 -> 23136 bytes nsw/Source/bsmd.ExcelReadService/App.config | 3 ++ .../bsmd.ExcelReadService/ExcelReadService.cs | 28 ++++++----- .../bsmd.ExcelReadService/ExcelReader.cs | 46 ++++++++++++++++-- nsw/Source/bsmd.ExcelReadService/LocodeDB.cs | 10 +++- .../Properties/Settings.Designer.cs | 9 ++++ .../Properties/Settings.settings | 3 ++ nsw/Source/bsmd.ExcelReadService/Util.cs | 35 +++++++------ nsw/Source/bsmd.database/AGNT.cs | 10 ++++ nsw/Source/bsmd.database/BKRA.cs | 1 + nsw/Source/bsmd.database/BRKD.cs | 1 + nsw/Source/bsmd.database/CREW.cs | 7 +++ nsw/Source/bsmd.database/CallPurpose.cs | 1 + nsw/Source/bsmd.database/Customer.cs | 10 ++++ nsw/Source/bsmd.database/DBManager.cs | 7 +++ nsw/Source/bsmd.database/DatabaseEntity.cs | 38 +++++++++++++++ nsw/Source/bsmd.database/IBCPosition.cs | 14 ++++++ nsw/Source/bsmd.database/IGCPosition.cs | 16 ++++++ nsw/Source/bsmd.database/IMDGPosition.cs | 46 ++++++++++++++++++ nsw/Source/bsmd.database/IMSBCPosition.cs | 17 +++++++ nsw/Source/bsmd.database/INFO.cs | 6 +++ nsw/Source/bsmd.database/InfectedArea.cs | 1 + nsw/Source/bsmd.database/LADG.cs | 1 + .../LastTenPortFacilitiesCalled.cs | 13 +++++ .../bsmd.database/MARPOL_Annex_I_Position.cs | 14 ++++++ nsw/Source/bsmd.database/MDH.cs | 28 +++++++++++ nsw/Source/bsmd.database/MessageCore.cs | 10 ++++ nsw/Source/bsmd.database/NAME.cs | 1 + nsw/Source/bsmd.database/NOA_NOD.cs | 10 ++++ nsw/Source/bsmd.database/PAS.cs | 16 ++++++ nsw/Source/bsmd.database/PRE72H.cs | 11 +++++ nsw/Source/bsmd.database/PortArea.cs | 5 ++ .../bsmd.database/PortOfCallLast30Days.cs | 5 +- .../PortOfCallLast30DaysCrewJoinedShip.cs | 2 + nsw/Source/bsmd.database/PortOfItinerary.cs | 3 ++ .../Properties/AssemblyProductInfo.cs | 2 +- .../Properties/AssemblyProjectInfo.cs | 2 +- nsw/Source/bsmd.database/ReportingParty.cs | 10 ++++ nsw/Source/bsmd.database/SEC.cs | 27 +++++++++- nsw/Source/bsmd.database/SERV.cs | 6 +++ nsw/Source/bsmd.database/STAT.cs | 14 ++++++ .../bsmd.database/SanitaryMeasuresDetail.cs | 2 + ...vitiesDuringLastTenPortFacilitiesCalled.cs | 12 +++++ .../bsmd.database/StowawaysJoiningLocation.cs | 1 + nsw/Source/bsmd.database/SubsidiaryRisks.cs | 1 + nsw/Source/bsmd.database/TOWA.cs | 12 +++++ nsw/Source/bsmd.database/TOWD.cs | 11 +++++ .../bsmd.database/ValidationAttribute.cs | 25 +++++++++- nsw/Source/bsmd.database/WAS.cs | 8 ++- nsw/Source/bsmd.database/Waste.cs | 9 +++- .../WasteDisposalServiceProvider.cs | 3 ++ .../Properties/Settings.Designer.cs | 3 +- .../bsmd.email/Properties/Settings.settings | 1 - nsw/Source/bsmd.email/app.config | 1 - nsw/Source/misc/db.sqlite | Bin 8749056 -> 8749056 bytes 55 files changed, 534 insertions(+), 44 deletions(-) diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 84171c795cf6009bb71cadb554271f31caeb7eb7..b9a48977de3908a6dab95d50b1de230c17ad1450 100644 GIT binary patch delta 11653 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 delta 11574 zcmY*5AFoF;PA+|-dgwG{?R|G z`gF;z+NWB!zC(t5hio_{1kCYbR;!RgK$!o4fWU`HR?;Sv%rP)#~#tsfoK0?p0swiwhdE-8nHA5Iu=AGk-x&b2wB-H*Px zy-&Hj^A!?cNBcTdHM3ZpT`;+3aoFw z+&$kM-(Bv{T)l)-*=8pj@;_%(B3aWZ@6}?f5#p8=W0nd?s_-F;hb)Ji8m*o z!v~)BhhJG859hGb18d-XP*+?*NrGmeI$f}RtEKsrz<7uQY%<~DfS&5PQyZjOd*#=7_2uX+*VB0-$ z(OS)-DJC`j`S2RZ7VxSa(Y@IJb&bDZRXDT@D_>*37j(CMuUO!kT1ClN|8;qPpQL{p z{c>6_$Qo4?ouS=;fQbjPf?NuY`o8=8@-3McNCfh_$7biwNXH`T7x}eyL>@B|Lzbum z ^$P$`9VuN;#<5YO!J9WrLEK))?yrX7RIc`!2&B9KTaf9D+0Qv9eTMMpSb(+FU8 z4-OZ8xxMduEo|d{J%|VSdcN8_Ve1iNKRX4xD!;|~`&>EV8H`?f^b8OQ9de(B6a7kE zxdJg8wDsEBbw$6IdjCF%H&FCJ-9lHS@(kq!nv4LDtz3daGHcyk*_Fs(mVYSZ;rK?l zG5FpEOMqYb$Ic{?)4FKLA$h+^WR zIHHs=W@mR>H&^9^`gs;7? zU!14nXAh?c9babdBy{dC*Yw~jOKHU`Z%yB*hSpwm_B|B`u5?x3VDr*ZORu9JT_Z1A zG<%nd2kv!IZtzPMgv`{A$sdjg*g0M7Q}6Grnfhdm@w|+*U>UPM|yunEztY3JhW>JFi1vYdY z+YhSp@ip-O7}c$hnZS-YF0c?DB$;#BP_GeR;HU&FX|@2clEb;77T_ zXWu;tYZ-{z|1Opk#>m#Tv8RyLkI&MlBT9NoQ1~~mY+TXn)1purJj$#$nwjY_s#0^z zwEVkr?E)99)yx)xWx_aAPAGd3Dnem%gBI-wmgPYml=6qX=Iy+5>DvI9I z)jrJx1wk{lsey+$4BNhok(CwSV`M#R5-F*Ty z>;$53_6%(oBS44Vm(XsMbZ>{Av5spq!!ZA1D@NCSQY*`weO7bJrWa(6W&nt@8MjRs zpIz&%aWt0|G_dQzbK;5Y!Z|YZHfQQF7141W?|1I|h%Dq8`^~Sd|B!Q^f0 z)ctV6=;y>@#)>D5nic77XL0J3(|J_wKb7Z)>ay$WuedH)|8(}sx8YOSFSi~44`0M&)PGu==I$8sHIM z5Yqa8w6*joqkNyasGGsQhalkz5KHo(tPNZUHf6L0^>^2~bOKRJH@8fQKM+hdQz9`U z22q6&y3|$A>c@}FMw@i??>7}{c)NAPAe80{G&TXd^be_T-G+-BUrg6noI31e=s{^m zN~hgVo>aK`%pYXXgWrZs%t9nrI$A3ub>vrW$=+xL&&nZ?jF!-Prr4(>EyKO#b$*oA zULqJebC(C-*0xgpZAJH$2KL=L8!j`M9S&_-czN&RffDnvq#Q(gUK?&xM2S`DWsV_7L z!zeoFRaf6%x!U`j;Y&-7k4c^nZ?m+$*c&yZDuPCT5_ii={{9P$?buMOIK}3Vl zCv7NdHpN7PN^8wH`n?FQ{@zkWBnp<_N7G$aHR~L-oZP+O-aZP#-p&1p&8L-PpI}xU z^UC-WrBH7Q)_XY!^Tc4_^Ulh@T?!|l4x>l)BjQ!RQ+z+I*8rq+m!~bEbl8=y zBqE%8eAZ=43vuV~#TS1F*hPhfC|ms7Q)Wnw#*ejl!3JY1rqknOEekU%QR({2<3m*3 z9T2tzqx_C4mDya zczImHXSDXur_RCBn7bpxlKNPe3orW=U%d16 zo0e`oO3%@zmDt&WTt2X{^l4}D(tt{+at1>{F9I?)^^b<5a04M&Mx39R`wT)W(6 z9j*tSsFqHM!wzfFxY>yhs*kzI%~dYDkSt-Gb&?Vp8<_*CdRI|u-zmdg&r=yv6SVWK ziQT$dhsZl*Kq!a{2~54xb6rb9!MjpzFvR`MEE;_q=sETj!a)E2$O?x@C_Ev z>%Qy`d~OsuHU!tq(lQ|KW#AmV4gASzHrJccF+FQv1(l{aQt0pGkH!VnS;@eBUdEx)On(_z^Eu(wSxk}F@&!*>`IaFmwUlGW$W^cy|Eh`J1eST5-)q|Q@~lV-FPog z9_C9W1F0t=GF%!_U}M{t{>3|1W5JW#s$~FQDdl~hCrGr!g&G$nErLW+uM#dqju?!{8F2dV zn%VE(j@}y7~|e!r*(4Frjed|X~x`QAMhwd ze&9T6odGhE-qO%FoX`5Gpv+ZvSV#MSkY%GW|6ji(89@EYf@f?7_uPw5EY3R`>RNVatxtZh`3TS2g5q?6fJ zh7vuNWnygx;&T^=Xnfs@Wu=q13lMQ}OoSlGkq|0@>JyX1CgrckO$4k&bTFaz%Tr+s zE?P^MEp7Q?r3={5)#lqLX-vg_(VAaucE3cA1pPQr+lrO6U(-k|#2F1v11#+_I@Bo>Ddbi}Mmi)A6xP49?U zIry8cg&M!a$@nKqcqd4qt2F1cBYY$MFk3G4iX3qW#V2s)wn|&aIMf$j_(r^e53xl{ zBs7qc-OegZeEqMre5To?=&1yo!lB5ApN%`i{~X${p^Asy6@B3S@bf1IXE+?UTyE1F zh0&R2ecF^fRnliX$A1e}jCaUJp+zlM3t2p=25NNxpuG@xz*c2;Dlr<&huOnQSvKUS zq-98xj7dlV_h3ewI#vvc_zaFnM$ho4$#zb{oJpQA$F=B*bCa53t3{XE*z+Cy-T}$_ z53tyMv-^6w^~RL@77Q<(I z`rJS#qT+VKSBu?aZe<6Amu3O{#g8RSVuqNJv%%PK)BsbWFmg`fKg7uNB9QPH*BlCt z@J>vz4{Mnw{Qrq7MfQn9Fq{9mOABK4dqR>t%Rw=CQK7 z4Oyl1hha7jg+mA%W3&A=i39?Gd$ex}2Q0Bf|IZI_r~*+Z(I%z$WVdeHV*V)oO;W;c zKrciZ)WAiFGK9hb`wXJ@P;=;1eN&b;RqYq``uc$o8LC}KUd6uqE>viqsIEkrX7?cY|Cl^5bF?G$v-v zw(DlgJ+?K{IS_J*9pkBVYwN%tr&L)F58I)xx*G=IImJd!aD*CunJZa32CuOJ58%J* z(A0jRKO{57{#Rrc*2D-!uFLa}*l2iXWE9w8mBjcdJQ4eqsQvxMh+?(^^ z9STu1ot-Zm(-ry+fp`Toji7I?M=H4_{TBHSHYn`4R@8yA2|Y{Z%DI{84~J+{_ydSZo8yf<{e=_tw2?*Ksf00Pr9?Q-;J$Y3{6qxf&Y)CAwQH`jy5zU% zHs+I7u}9VGIxGFJeAATVn-s-1mz*OU*%?5ARKaTe2<5!Y>nWa}>b<`ER#ueEYnX~! zDKB6N*fBPu&k>7X!q7TZxMos2)3hj0;}xUHVXsR5W16jDqG^!-g5^kV@~Wa@v~KDU(mxk2MQoo~f=}vN?8${X z7!%%EF8d#W_##I_>`#p3%8dRC((YHw^>>(mJbS38T|oOmzjnWPKYH12qUB+u^h7>d z$=6FTH>y|SB$ELCN(U&;Ajs(#X*b+UwU4npslY$~4OeY->^bS-Q@lyWMshDlC}e!H z1gAde&Rt-0Ir1jfS1V@iDrY1QgWbgwugNo|HCG>cBpZ%#$G6y~e)StYae29>>nwZ! zFiiM>R!F6yEE4;<;Ob?R8sj8Lg1?ZyJUkW8TSury29GA6m`$>?1!YdBpc!McG{yre zIx=Pa*n6P`rX$==1&0S+;V__1$~T)Mg(VNfo4c&qU?^EuMDmk&kJt%bNIN%sLmQ9w zZy9cSWKr%k01L549k2RpxSDPR>w0Ie#7CV>&qO$CNbx`IaWQo>r<=6^G)?bfMfO*j>tP(KAhdc6x^LQLVb`C z#Rn13iCwJ>SX-5mRLzRf-s8qKPR7~<9TT%LW0R7`#Ag$rY1$N0#}Z$nQFwhYG34A2 zsBjCb&-S?uN&(TT%t6v$npAbz=qBsh$!A7KkD0ey%+ul#((=Z9k`YM$nO9~WGRe{2 zen9z~5?+zy>5PNby+-He<{XO*BB|Y;#u)s;-%AS@*Iw6TC4ofDT+vM0h)_|on)thKQY}(FgCo&&5{JHD;=O9u&RLxHXea{meD7+G#&ag=jXgo6q-@6u%#Bn<_-e zM4SA{FjlccBv;3f(@J0*KP+PyON>vG6uM?7=VjvYz_h0ZcnPtI-8!$&TLb`m3rNIV z${kenT2pxX^C~nj*mve2oV4N1p*zHQ+UL}{ICO8?~XeGLQ=?I{!w@y3~pcF;QR}M7Yq#dz=nK0mH>dLbE zuf43a<*6J7ac`B7#oLFG6xn>=6d0AtCbGz8=(%zi$*kO;L7u9V=4p}(kb?4jxcyLQ za#9(S6jaQUtf4&-br|f#!bC7arkiB9{<#b zQE5EX(72>#bfS@uhD@j(f{K?K9<3bBx7SKv@M^b4Y&;lcONIWRosYpSp@UtuT*6dV z5auaa`^F6P&z!K0!p~ISR?c*+d7DISOn69K)AWylBRb)Y3YTNhod4&s0^e%cEU_;?m&1(9EU#v8hBnR@(O5y;1_iMi!;7{4XZ zr~U^`e##rQzf39I%G%(aA_8SNxcA~nw3v|WK7FD8fpA_VH<@wFvt8Z12rkVIv9Wd; zevyK}1c655m#~oKP`yltmBSg0U$l{W4`G%wr{4cD`RAGR@G6v-g6{8A!=*waw$ih zYx`O5JJ5Mv5fa|l=f*wk_JiaNYu)&TAM}S%uL*-u(ib8HgZyun?sXmJKA_}IAp;473vsx)=MYNS+uxHLGpl6r8keeyi9)aUagZstRR1;k_SJM^PMK-khkKwv{8Pif;O zZwq6Aax*2&Cc?4lC?-@l1y4T?uu zU3hSM85QnUm*f0}^T*Gu@a|8=oa!8`GSq?+NK1b!`x`^D$Zj9UX+`SZfC4kmlI$Aq z+U9$2GEAa%gH0CVYwy)xpPKB*qr;f|Wo5uU$eOrMeddba?**L>_s6YU;imiTRTscd z-uVwU5S=M5x+w>_ThN>%;i^TjIid0YGXkvN+- z+5Rs(Rx{0sC#!?hyQP&V$C!Eh*Ozi*(AX|bwjyo~EpOa5AP-(Xmtd-E6D7odd@tt? z+RGF(qI8y{c))I|Gu0tc{vz&4U$QWOm1WB()X!5}3!>AxEM?`VW`i!|>$$g73wNhw4$IIefs&OUSfVIP^)Ht1~F`6?&x6s2|s4uqX6MkSmKtqNHW^duj13 zsn#oJNPj!OhqAN}kxPqQ=#R^1Y`T>GLdnI?MRQD<9r%EXm8MO%K*5(P)5grh|L zCC{5g$4f>>KM+dn4_JCzbUa3EKvxO5L1y#kh2}ogMtztP_rM3L`?_%CftJ4zq>uXh6v2N!$<@|#=HDL$QHBs}(eJ&z#LsUU zjEibM$0Ih~oX#`=llglE#dlUxp`;0l_H{$&n>%bTQ*)1hC?&F3W#?5=Kd99KLKKkP z!P@wj>ISOJMUj)E2BF@+L1EzrgJ1azI|gKtG-gxlmph)VI(NUhGiY`hsl9;Q;^<`J zl`Gj2on3PtFY5+I;8er10~vfx$WG!8=9(`_c|`C|M~*i^T8lw#W?<>Egfm#VdYTb4uK)^X(lpHeiz=$BT zY?y>m#p*`l5iW}yv)qy%(;ys;VAMr}p3k)Gz-QfYD!>))% zK@~S&$GAn5EZIoo6D*~TL4y%#NtxTPK){yq+mmLK&X7(#t05?n)8WkwQwW)cb%ml- zqw^lIlPOD@mDkKk&>rM7%v@Va;3PZo-XIM+kXk$cyuW+}JB3T&^S)$OO;Vvb za!QEFeeZwUnSEh;Rx0Rm!J&b;VfkKXr*GD5g}VLc}dMN<8|-VNpr{%=o>fExDW;o z5`H_1tCG%6l&6B5-=60EKGW?2mmRq82<^@R>a^PZ6uT17EL^{<@x6xBt%Q%UZxsnw zFKysH^v8re)6&Mtdx6ok1Y0>PR1%d$9>SZuj%%-d`ZM)>BaR`pc^Kq6ya>TKne1}j zqjv;Q-r$>ARMlBhH793Q*Z4M$O0@5M4zh5cCp6X!WP7%HZRQJ=}I8z!ujpT=O-epV)_c) zf&&pMGHr$RbM`NdF6Yp=)M4JS$K9@wph)yGsLp$>IVpc6&zwZXX=N1hJ1e3}F68fD z&jqKb^;)Pn#ky4p*@6QoAP>0nQAn^4UG81RAMG#|(ur95N^SE*w2M6n2eDNvh+3IY zo#)a_BR)s{_+=0#lT?=^B3ES1`IK#kptT1(6NfSji@@CF2eX0-X`! zTV;;GAdy$;*!5L~0+8VqT+-Fvr9#kukSA@Hf&3V5BEWfkjV<=E2z)?Gc2We5y$z{0 z!nAMjrHJlgJww(ugt|bdOKJ`cTU^-u?pQ1Tnvc10)-fNkt`_&$jX;sf;)<;CiTbfl zYTj`(i~WE%8`Vp#F@{pDOp#GccU=S5$dr-GyA!u#vhN+vhmOvN^Ky5cAm-AMvhiSQ z1}frVV&tqMjJ-RO#*EznTgNmAJB~&~-X)*<_t1mlQ|Wzf9Hmg`Q`N?czb4Q2&x*{F z1%}g8*{Nf7IEzm-%EzIveQ$L-o9}fx!tKop$acHu^15%opOK&f>gKDg3?|7kSL$O{v432I3e5SYZ&JA}%fUc9j5+)~-e zHv3B|R%c194iLbRvGE;kCDNYBv9a%ja;N5*i|5h)d8-ytMWg!fH_)#nFcfMIcGJk* zm%mGj$XZ#@=75hm2c3O&Gaql*>FV44x;Y z$3#uOpw|0-WgyjUhipe5(@n5eCz}M~H zmc{y`O&2_n)K+MPv?g|GJ)4Uqs-}c>HL2-PZnMRa3Sw#>w(5p~Kc%;M>2vBa8s=|! zZK^kyNWOAboqXMt;`&Y2tom&2wQ1fqIDi&z)n{>XS!^@0Mhz& zpc*0W{4G%#vB`J12B@LPfoGlXuu=E*5m-$QW}Q8Ty12Z(UNQHqCNT6|*?P)3Gw^sO zWz4(1k%liZKMZXsYh76rgOA<6PA&SI$2~glRZ5l^)!F0A3AIzP872+m#MgPennJmB zSVzht`c0pS2MD4+T07hbh{bY?f~Z=-TcxiMS3pB_8iO@j$QC^wZh0s=xhxqOSp`!H ze!F6~&&0&D3|O+04EK!B!aI=qp;``zXE;bKJ^0kalp~$b%>6^sb&lJ#oP8DSRhGfh zu_Vv(HK^&Vb>i)OCW2glGyysXr;kUJ2+@&h-t<$bz-Q2-%8;tL`qg!r-xhTwa~UT| z_+%CwYU5dy-3gx+oVwR{5$QEhHp8%{)~{6+-7sQiSF00rwxO0)RUdLdJRti1R-&5$_ z<{?eX@kxFL^b2^zVSV`C3t(c z=Wws<&`_-gP!-ubz_;=TGm%OX!+Ha$(v#Y|cF8%8;xH4p#^!U%5dxsL>ZCe|Xj~6@ zs`ayR4-6h`l1EB5=2;Inw%O=?L56&gIJ`4hci5K>bOsT9ib|KBli7{BB zUN?=vxW;PP&t>w!kJ}3`uel^-mjpsP$~GGI!WZ0S<=#R(gw_q zi_{BjOvjY4=pFRGOeTNQK~GlGp>2*(se(uPpTCro1+>4Qn)5+Gc-gVKx_z^=a816_ z#3uT`Pt_3r>+nyW)TSl+4;M%X2vsNu2#o)wg@ABMM%NL7I#f + + False + \ No newline at end of file diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs index 0db02132..294fd9c6 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReadService.cs @@ -131,19 +131,25 @@ namespace bsmd.ExcelReadService receiptText = string.Format("Incoming sheet could not be read: {0}", readMessage); _log.Error(receiptText); } - } - // TODO: Quittung / set messagecore to createreport and let reportGenerator create a reply? + if (readResult) + { + // Quittung / set messagecore to createreport and let reportGenerator create a reply? + if (Properties.Settings.Default.SendConfirmationSheet) + { + string confirmationFileName = Path.Combine(Path.GetDirectoryName(attachmentLocalPath), + string.Format("{0}_confirm.xls", Path.GetFileNameWithoutExtension(attachmentLocalPath))); - // create a reply sheet (template + scanned highlighted content for verification - if (readResult) - { - string confirmationExcelFilePath = Util.CreateConfirmationSheet(messageCore); - List sendItems = new List(); - sendItems.Add(confirmationExcelFilePath); - // send reply sheet back to sender - BSMDMail.SendNSWReportWithAttachments(Properties.Settings.Default.SendEMailSubject, sendItems); - } + if (reader.SaveCopy(confirmationFileName)) + { + List sendItems = new List(); + sendItems.Add(confirmationFileName); + // send reply sheet back to sender + BSMDMail.SendNSWReportWithAttachments(Properties.Settings.Default.SendEMailSubject, sendItems); + } + } + } + } } if (receiptText.Length > 0) diff --git a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs index a83bd3aa..c2ff433e 100644 --- a/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs +++ b/nsw/Source/bsmd.ExcelReadService/ExcelReader.cs @@ -22,6 +22,7 @@ namespace bsmd.ExcelReadService { private ILog _log = LogManager.GetLogger(typeof(ExcelReader)); private Workbooks _excelWorkbooks; + private Workbook _portcall; private Application _excelApp; private Dictionary _nameDict; @@ -37,22 +38,50 @@ namespace bsmd.ExcelReadService { this._excelApp = new Application(); this._excelWorkbooks = _excelApp.Workbooks; - Workbook portcall = _excelWorkbooks.Open(filePath, 0, true, 5, "", "", false, XlPlatform.xlWindows, "", false, false, 0, false, false, false); + this._portcall = _excelWorkbooks.Open(filePath, 0, true, 5, "", "", false, XlPlatform.xlWindows, "", false, false, 0, false, false, false); _nameDict = new Dictionary(); - foreach(Name name in portcall.Names) + foreach(Name name in _portcall.Names) { _nameDict[name.Name] = name; } } - internal void Save(string filePath) + internal bool Save(string filePath) { - if (this._excelApp == null) return; - this._excelApp.SaveWorkspace(filePath); + bool result = true; + if (this._excelApp == null) return false; + try + { + this._excelApp.SaveWorkspace(filePath); + } + catch(Exception ex) + { + _log.WarnFormat("cannot save workspace: {0}", ex.Message); + result = false; + } + return result; + } + + internal bool SaveCopy(string filePath) + { + bool result = true; + if (this._excelApp == null) return false; + try + { + this._portcall.Saved = true; + this._portcall.SaveCopyAs(filePath); + } + catch (Exception ex) + { + _log.WarnFormat("cannot save copy of workbook: {0}", ex.Message); + result = false; + } + return result; } internal void HighlightLookup(string lookup, ReadState state) { + if (!_nameDict.ContainsKey(lookup)) return; Range range = _nameDict[lookup].RefersToRange; if(range != null) { @@ -117,6 +146,7 @@ namespace bsmd.ExcelReadService internal byte? ReadShippingArea(string lookup) { string val = this.ReadText(lookup); + if (val == null) return null; if (val.IndexOf("baltic", StringComparison.OrdinalIgnoreCase) >= 0) return 0; if (val.IndexOf("europe", StringComparison.OrdinalIgnoreCase) >= 0) return 1; if (val.IndexOf("overseas", StringComparison.OrdinalIgnoreCase) >= 0) return 2; @@ -127,6 +157,7 @@ namespace bsmd.ExcelReadService 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; @@ -137,6 +168,7 @@ namespace bsmd.ExcelReadService 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; @@ -147,6 +179,7 @@ namespace bsmd.ExcelReadService 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; @@ -166,6 +199,7 @@ 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) @@ -206,6 +240,7 @@ 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) @@ -231,6 +266,7 @@ namespace bsmd.ExcelReadService double result; try { + if (!_nameDict.ContainsKey(lookup)) return null; var val = _nameDict[lookup].RefersToRange.Value; if (val is double) return val; if (val is string) diff --git a/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs b/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs index 4e56b544..e881f7c9 100644 --- a/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs +++ b/nsw/Source/bsmd.ExcelReadService/LocodeDB.cs @@ -59,7 +59,15 @@ namespace bsmd.ExcelReadService public static List AllLocodesForCityName(string city) { List results = new List(); - string query = string.Format("SELECT city_code, countries.code FROM locodes JOIN countries ON locodes.country_id = countries.ID WHERE locodes.port='t' AND locodes.name like '{1}'", city); + if(city.Contains(",")) + { + string[] elems = city.Split(','); + string countryCode = CountryCodeFromName(elems[1].Trim()); + string lcLookup = LocodeFromCity(elems[0].Trim(), countryCode); + if ((countryCode != null) && (lcLookup != null)) + results.Add(lcLookup); + } + string query = string.Format("SELECT city_code, countries.code FROM locodes JOIN countries ON locodes.country_id = countries.ID WHERE locodes.port='t' AND locodes.name like '{0}'", city); SQLiteCommand cmd = new SQLiteCommand(query, _con); IDataReader reader = cmd.ExecuteReader(); while (reader.Read()) diff --git a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs index 4c21e0c4..c81b1b4c 100644 --- a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs +++ b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.Designer.cs @@ -74,5 +74,14 @@ namespace bsmd.ExcelReadService.Properties { return ((global::System.Collections.Specialized.StringCollection)(this["ValidSender"])); } } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool SendConfirmationSheet { + get { + return ((bool)(this["SendConfirmationSheet"])); + } + } } } diff --git a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings index fc6899fc..30bd5dbe 100644 --- a/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings +++ b/nsw/Source/bsmd.ExcelReadService/Properties/Settings.settings @@ -24,5 +24,8 @@ <string>hollmann@bsmd.de</string> </ArrayOfString> + + False + \ No newline at end of file diff --git a/nsw/Source/bsmd.ExcelReadService/Util.cs b/nsw/Source/bsmd.ExcelReadService/Util.cs index 1ff005c9..4ba8a2e8 100644 --- a/nsw/Source/bsmd.ExcelReadService/Util.cs +++ b/nsw/Source/bsmd.ExcelReadService/Util.cs @@ -140,13 +140,7 @@ namespace bsmd.ExcelReadService } return true; - } - - internal static string CreateConfirmationSheet(MessageCore messageCore) - { - throw new NotImplementedException(); - } - + } #region ATA @@ -354,6 +348,7 @@ namespace bsmd.ExcelReadService if (!callPurposeDescription.IsNullOrEmpty()) { CallPurpose callPurpose = new CallPurpose(); + callPurpose.NOA_NOD = noa_nod; callPurpose.CallPurposeCode = noa_nod.getCallPurposeCodeFromDescription(callPurposeDescription) ?? 0; callPurpose.CallPurposeDescription = callPurposeDescription; noa_nod.CallPurposes.Add(callPurpose); @@ -591,8 +586,8 @@ namespace bsmd.ExcelReadService s2sActivity.ShipToShipActivityLocationName = reader.ReadText(s2sName); s2sActivity.ShipToShipActivityLocationLoCode = reader.ReadTextNoWhitespace(s2sLocode); - s2sActivity.ShipToShipActivityLocationCoordinatesLatitude = (int)reader.ReadNumber(s2sLatitude); - s2sActivity.ShipToShipActivityLocationCoordinatesLongitude = (int)reader.ReadNumber(s2sLongitude); + s2sActivity.ShipToShipActivityLocationCoordinatesLatitude = (int?)reader.ReadNumber(s2sLatitude); + s2sActivity.ShipToShipActivityLocationCoordinatesLongitude = (int?)reader.ReadNumber(s2sLongitude); s2sActivity.ShipToShipActivityDateFrom = reader.ReadDate(s2sFromDate); s2sActivity.ShipToShipActivityDateTo = reader.ReadDate(s2sToDate); s2sActivity.ShipToShipActivityType = reader.ReadText(s2sActivityString); @@ -774,7 +769,7 @@ namespace bsmd.ExcelReadService } ladg.CargoCodeNST = reader.ReadText(lnType); - if (ladg.CargoCodeNST.Length != 2) ladg.CargoCodeNST = null; // stupid validation + if ((ladg.CargoCodeNST != null) && (ladg.CargoCodeNST.Length != 2)) ladg.CargoCodeNST = null; // stupid validation ladg.CargoNumberOfItems = (int?) reader.ReadNumber(lnCNOI); ladg.CargoGrossQuantity_TNE = reader.ReadNumber(lnCGQ); @@ -972,8 +967,15 @@ namespace bsmd.ExcelReadService // Im Sheet könnte der Name statt des LOCODES stehen! if (!RuleEngine.IsGermanLocode(poc)) { + string aGermanPortName = poc; + + if(poc.Contains(',')) // irgendwas wie "Hamburg, Germany" + { + aGermanPortName = poc.Split(',')[0]; + } + // somehow lookup LOCODE from the port's name! - poc = LocodeDB.LocodeGERFromCity(poc); + poc = LocodeDB.LocodeGERFromCity(aGermanPortName); } } @@ -982,11 +984,13 @@ namespace bsmd.ExcelReadService // ETA eta = reader.ReadDateTime("NOA_NOD.ETADateToPortOfCall", "NOA_NOD.ETATimeToPortOfCall"); - if ((imo != null) && (eta.HasValue)) + if ((imo != null) && (eta.HasValue) && (poc != null)) { - result = DBManager.Instance.GetMessageCoreByShipInfos(imo, eta.Value, poc); - if (result.IsNew) - result.IsTransit = isTransit; + result = DBManager.Instance.GetMessageCoreByShipInfos(imo, eta.Value, poc); + if(result != null) + { + _log.InfoFormat("Core [{3}] found for IMO {0}, ETA {1}, Poc {2}", imo, eta, poc, result.Id); + } } } } @@ -1015,6 +1019,7 @@ namespace bsmd.ExcelReadService result = new MessageCore(); result.IMO = imo; + result.IsTransit = isTransit; result.ReportStatus = MessageCore.ReportStatusEnum.COMPLETE; result.Portname = poc; result.ETA = eta; diff --git a/nsw/Source/bsmd.database/AGNT.cs b/nsw/Source/bsmd.database/AGNT.cs index d02c62f1..3b715f77 100644 --- a/nsw/Source/bsmd.database/AGNT.cs +++ b/nsw/Source/bsmd.database/AGNT.cs @@ -35,44 +35,54 @@ namespace bsmd.database [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("AGNT.AgentCompanyName")] + [MaxLength(100)] public string AgentCompanyName { get; set; } [ShowReport] [LookupName("AGNT.AgentStreetAndNumber")] + [MaxLength(100)] public string AgentStreetAndNumber { get; set; } [ShowReport] [LookupName("AGNT.AgentPostalCode")] + [MaxLength(100)] public string AgentPostalCode { get; set; } [ShowReport] [LookupName("AGNT.AgentCity")] + [MaxLength(100)] public string AgentCity { get; set; } [ShowReport] [LookupName("AGNT.AgentCountry")] + [MaxLength(100)] public string AgentCountry { get; set; } [ShowReport] [LookupName("AGNT.AgentLastName")] [Validation2(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string AgentLastName { get; set; } [ShowReport] [LookupName("AGNT.AgentFirstName")] + [MaxLength(100)] public string AgentFirstName { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("AGNT.AgentPhone")] + [MaxLength(100)] public string AgentPhone { get; set; } [ShowReport] [LookupName("AGNT.AgentFax")] + [MaxLength(100)] public string AgentFax { get; set; } [ShowReport] [LookupName("AGNT.AgentEMail")] + [MaxLength(100)] public string AgentEMail { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/BKRA.cs b/nsw/Source/bsmd.database/BKRA.cs index 05c6c526..733b9582 100644 --- a/nsw/Source/bsmd.database/BKRA.cs +++ b/nsw/Source/bsmd.database/BKRA.cs @@ -26,6 +26,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string BunkerFuelType { get; set; } [ShowReport] diff --git a/nsw/Source/bsmd.database/BRKD.cs b/nsw/Source/bsmd.database/BRKD.cs index aefba44e..7418d2a8 100644 --- a/nsw/Source/bsmd.database/BRKD.cs +++ b/nsw/Source/bsmd.database/BRKD.cs @@ -26,6 +26,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string BunkerFuelType { get; set; } [ShowReport] diff --git a/nsw/Source/bsmd.database/CREW.cs b/nsw/Source/bsmd.database/CREW.cs index 9ada25e9..e74ed6c4 100644 --- a/nsw/Source/bsmd.database/CREW.cs +++ b/nsw/Source/bsmd.database/CREW.cs @@ -27,16 +27,19 @@ namespace bsmd.database [ShowReport] [ReportDisplayName("Last name")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string CrewMemberLastName { get; set; } [ShowReport] [ReportDisplayName("First name")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string CrewMemberFirstName { get; set; } [ShowReport] [ReportDisplayName("Place of birth")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string CrewMemberPlaceOfBirth { get; set; } [Validation(ValidationCode.NOT_NULL)] @@ -63,6 +66,7 @@ namespace bsmd.database [ShowReport] [ReportDisplayName("Nationality")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(2)] public string CrewMemberNationality { get; set; } [Validation(ValidationCode.NOT_NULL)] @@ -75,16 +79,19 @@ namespace bsmd.database [ShowReport] [ReportDisplayName("Identity document id")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string CrewMemberIdentityDocumentId { get; set; } [ShowReport] [ReportDisplayName("Visa number")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string CrewMemberVisaNumber { get; set; } [ShowReport] [ReportDisplayName("Duty")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string CrewMemberDuty { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/CallPurpose.cs b/nsw/Source/bsmd.database/CallPurpose.cs index b3f7ab28..c52d84a0 100644 --- a/nsw/Source/bsmd.database/CallPurpose.cs +++ b/nsw/Source/bsmd.database/CallPurpose.cs @@ -30,6 +30,7 @@ namespace bsmd.database public int CallPurposeCode { get; set; } [ShowReport] + [MaxLength(100)] public string CallPurposeDescription { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/Customer.cs b/nsw/Source/bsmd.database/Customer.cs index d1a04365..66412c4a 100644 --- a/nsw/Source/bsmd.database/Customer.cs +++ b/nsw/Source/bsmd.database/Customer.cs @@ -28,24 +28,34 @@ namespace bsmd.database #region Properties + [MaxLength(100)] public string Name { get; set; } + [MaxLength(50)] public string Phone { get; set; } + [MaxLength(100)] public string Email { get; set; } + [MaxLength(50)] public string ContactFirstName { get; set; } + [MaxLength(50)] public string ContactLastName { get; set; } + [MaxLength(50)] public string StreetAndNumber { get; set; } + [MaxLength(50)] public string PostalCode { get; set; } + [MaxLength(50)] public string City { get; set; } + [MaxLength(50)] public string Country { get; set; } + [MaxLength(50)] public string CustomerNumber { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/DBManager.cs b/nsw/Source/bsmd.database/DBManager.cs index 587b2926..7d807a1f 100644 --- a/nsw/Source/bsmd.database/DBManager.cs +++ b/nsw/Source/bsmd.database/DBManager.cs @@ -349,6 +349,13 @@ namespace bsmd.database public void Save(DatabaseEntity entity) { + List truncatedFields = new List(); + entity.TruncateFields(truncatedFields); + foreach(string truncatedField in truncatedFields) + { + _log.WarnFormat("Entity {0} save: Field truncated: {1}", entity.GetType(), truncatedField); + } + SqlCommand cmd = new SqlCommand(); entity.PrepareSave(cmd); int queryResult = this.PerformNonQuery(cmd); diff --git a/nsw/Source/bsmd.database/DatabaseEntity.cs b/nsw/Source/bsmd.database/DatabaseEntity.cs index 08fa1143..7d964316 100644 --- a/nsw/Source/bsmd.database/DatabaseEntity.cs +++ b/nsw/Source/bsmd.database/DatabaseEntity.cs @@ -83,12 +83,50 @@ namespace bsmd.database public abstract List LoadList(IDataReader reader); + /// + /// Überprüft eingegangene Meldeklassen auf Fehlerkonditionen + /// + /// + /// public virtual void Validate(List errors, List violations) { errors = new List(); violations = new List(); } + /// + /// Diese Methode sollte eigentlich nie einen Effekt haben und dient nur dazu, dass keine Situation + /// auftreten kann in der ein Insert/Update an fehlender Datenvalidierung kracht + /// + /// + public virtual void TruncateFields(List truncated) + { + List props = new List(); + + // add flagged properties to check list + props.AddRange(this.GetType().GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(MaxLengthAttribute)))); + foreach (PropertyInfo property in props) + { + object propValue = property.GetValue(this, null); + string value = (propValue == null) ? string.Empty : propValue.ToString(); + + MaxLengthAttribute maxLengthAttribute = Attribute.GetCustomAttribute(property, typeof(MaxLengthAttribute)) + as MaxLengthAttribute; + + if(value.Length > maxLengthAttribute.MaxLength) // truncate situation + { + string maxLengthValue = value.Substring(0, maxLengthAttribute.MaxLength); + truncated.Add(string.Format("[{0} ({1})]: {2}", property.Name, maxLengthAttribute.MaxLength, value)); + property.SetValue(this, maxLengthValue); + } + } + } + + /// + /// Kann überschrieben werden, wenn abhängig von den Daten (einem Flag) andere Regeln gelten (Bsp. wenn schon eine + /// MDH Meldung abgegeben wurde) + /// + /// public virtual ValidationBlock GetValidationBlock() { return ValidationBlock.BLOCK1; diff --git a/nsw/Source/bsmd.database/IBCPosition.cs b/nsw/Source/bsmd.database/IBCPosition.cs index 7372f5d0..8a5febef 100644 --- a/nsw/Source/bsmd.database/IBCPosition.cs +++ b/nsw/Source/bsmd.database/IBCPosition.cs @@ -27,6 +27,7 @@ namespace bsmd.database public HAZ HAZ { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(255)] public string ProductName { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] @@ -36,24 +37,37 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] public byte? FlashpointInformation { get; set; } + [ShowReport] + [MaxLength(11)] public string Flashpoint_CEL { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] + public double? Quantity_KGM { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(24)] public string StowagePosition { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfLoading { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfDischarge { get; set; } + [ShowReport] public bool? SpecRef15_19 { get; set; } + [ShowReport] + [MaxLength(255)] public string Remarks { get; set; } + public string Identifier { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/IGCPosition.cs b/nsw/Source/bsmd.database/IGCPosition.cs index e9d85d23..4cd86344 100644 --- a/nsw/Source/bsmd.database/IGCPosition.cs +++ b/nsw/Source/bsmd.database/IGCPosition.cs @@ -25,27 +25,43 @@ namespace bsmd.database #region Properties public HAZ HAZ { get; set; } + [ShowReport] + [MaxLength(4)] public string UNNumber { get; set; } + [ShowReport] + [MaxLength(10)] public string IMOClass { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(255)] public string ProductName { get; set; } + [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] public double? Quantity_KGM { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(24)] public string StowagePosition { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfLoading { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfDischarge { get; set; } + [ShowReport] + [MaxLength(255)] public string Remarks { get; set; } + public string Identifier { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/IMDGPosition.cs b/nsw/Source/bsmd.database/IMDGPosition.cs index 5108dcd3..54aa095b 100644 --- a/nsw/Source/bsmd.database/IMDGPosition.cs +++ b/nsw/Source/bsmd.database/IMDGPosition.cs @@ -27,83 +27,129 @@ namespace bsmd.database #region Properties public HAZ HAZ { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(10)] public string UNNumber { get; set; } + [ShowReport] public byte? PackingGroup { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(255)] public string ProperShippingName { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(10)] public string IMOClass { get; set; } + [ShowReport] + [MaxLength(10)] public string CompatibilityGroup { get; set; } + [ShowReport] + [MaxLength(255)] public string TechnicalName { get; set; } + [ShowReport] public double? NetExplosiveMass_KGM { get; set; } + [ShowReport] + [MaxLength(10)] public string Flashpoint_CEL { get; set; } + [ShowReport] + [MaxLength(100)] public string Class7NuclideName { get; set; } + [ShowReport] public double? Class7MaxActivity_BQL { get; set; } + [ShowReport] public int? Class7Category { get; set; } + [ShowReport] public double? Class7TransportIndex { get; set; } + [ShowReport] public int? Class7CSI { get; set; } + [ShowReport] public double? ControlTemperature_CEL { get; set; } + [ShowReport] public double? EmergencyTemperature_CEL { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public bool? MarinePollutant { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public int? NumberOfPackages { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(255)] public string PackageType { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public bool? LimitedQuantities { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public bool? ExceptedQuantities { get; set; } + [ShowReport] public double? NetQuantity_KGM { get; set; } + [ShowReport] public double? GrossQuantity_KGM { get; set; } + [ShowReport] public double? Volume_MTQ { get; set; } + [ShowReport] public bool? GeneralCargoIBC { get; set; } + [ShowReport] + [MaxLength(24)] public string ContainerNumber { get; set; } + [ShowReport] + [MaxLength(24)] public string VehicleLicenseNumber { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(24)] public string StowagePosition { get; set; } + [MaxLength(5)] public string Bay { get; set; } + [MaxLength(5)] public string Row { get; set; } + [MaxLength(5)] public string Tier { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfLoading { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfDischarge { get; set; } + [ShowReport] + [MaxLength(255)] public string Remarks { get; set; } public List SubsidiaryRiskList { get { return this.subsidiaryRisksList; } } diff --git a/nsw/Source/bsmd.database/IMSBCPosition.cs b/nsw/Source/bsmd.database/IMSBCPosition.cs index fef6a4f1..320bbbe1 100644 --- a/nsw/Source/bsmd.database/IMSBCPosition.cs +++ b/nsw/Source/bsmd.database/IMSBCPosition.cs @@ -25,30 +25,47 @@ namespace bsmd.database #region Properties public HAZ HAZ { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(255)] public string BulkCargoShippingName { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public bool? MHB { get; set; } + [ShowReport] + [MaxLength(4)] public string UNNumber { get; set; } + [ShowReport] + [MaxLength(10)] public string IMOClass { get; set; } + [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] public double? Quantity_KGM { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(24)] public string StowagePosition { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfLoading { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfDischarge { get; set; } + [ShowReport] + [MaxLength(255)] public string Remarks { get; set; } + public string Identifier { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/INFO.cs b/nsw/Source/bsmd.database/INFO.cs index 9de0e2ae..1c4c6c5e 100644 --- a/nsw/Source/bsmd.database/INFO.cs +++ b/nsw/Source/bsmd.database/INFO.cs @@ -30,12 +30,15 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("INFO.RequestedPositionInPortOfCall")] + [MaxLength(100)] public string RequestedPositionInPortOfCall { get; set; } [ShowReport] + [MaxLength(255)] public string SpecialRequirementsOfShipAtBerth { get; set; } [ShowReport] + [MaxLength(100)] public string ConstructionCharacteristicsOfShip { get; set; } [ShowReport] @@ -49,10 +52,13 @@ namespace bsmd.database [ShowReport] [LookupName("INFO.PortArea")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(50)] public string PortArea { get; set; } + [MaxLength(50)] public string BowThrusterPower { get; set; } + [MaxLength(50)] public string SternThrusterPower { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/InfectedArea.cs b/nsw/Source/bsmd.database/InfectedArea.cs index 43093d22..7aed9613 100644 --- a/nsw/Source/bsmd.database/InfectedArea.cs +++ b/nsw/Source/bsmd.database/InfectedArea.cs @@ -27,6 +27,7 @@ namespace bsmd.database public MDH MDH { get; set; } [ShowReport] + [MaxLength(255)] public string InfectedAreaPort { get; set; } [ShowReport] diff --git a/nsw/Source/bsmd.database/LADG.cs b/nsw/Source/bsmd.database/LADG.cs index c6f718b6..d693b514 100644 --- a/nsw/Source/bsmd.database/LADG.cs +++ b/nsw/Source/bsmd.database/LADG.cs @@ -30,6 +30,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.TWO_DIGIT)] + [MaxLength(5)] public string CargoCodeNST { get; set; } [ShowReport] diff --git a/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs b/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs index dc90688c..022c06a1 100644 --- a/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs +++ b/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs @@ -25,25 +25,38 @@ namespace bsmd.database #region Properties public SEC SEC { get; set; } + [ShowReport] + [MaxLength(100)] public string PortFacilityPortName { get; set; } + [ShowReport] + [MaxLength(100)] public string PortFacilityPortCountry { get; set; } + [ShowReport] + [MaxLength(5)] public string PortFacilityPortLoCode { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public DateTime? PortFacilityDateOfArrival { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public DateTime? PortFacilityDateOfDeparture { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public byte? PortFacilityShipSecurityLevel { get; set; } + [ShowReport] + [MaxLength(255)] public string PortFacilitySecurityMattersToReport { get; set; } + [ShowReport] [Validation(ValidationCode.GISIS)] + [MaxLength(4)] public string PortFacilityGISISCode { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/MARPOL_Annex_I_Position.cs b/nsw/Source/bsmd.database/MARPOL_Annex_I_Position.cs index 138a1b2a..d9281cfc 100644 --- a/nsw/Source/bsmd.database/MARPOL_Annex_I_Position.cs +++ b/nsw/Source/bsmd.database/MARPOL_Annex_I_Position.cs @@ -25,27 +25,41 @@ namespace bsmd.database #region Properties public HAZ HAZ { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(255)] public string Name { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public byte? FlashpointInformation { get; set; } + [ShowReport] + [MaxLength(10)] public string Flashpoint_CEL { get; set; } + [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] public double? Quantity_KGM { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(24)] public string StowagePosition { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfLoading { get; set; } + [ShowReport] [Validation(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfDischarge { get; set; } + [ShowReport] + [MaxLength(255)] public string Remarks { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/MDH.cs b/nsw/Source/bsmd.database/MDH.cs index 1e43643a..e53650ff 100644 --- a/nsw/Source/bsmd.database/MDH.cs +++ b/nsw/Source/bsmd.database/MDH.cs @@ -44,85 +44,113 @@ namespace bsmd.database [Validation1(ValidationCode.NOT_NULL)] [LookupName("MDH.ValidSanitaryControlExemptionOrCertificateOnBoard")] public bool? MDHSimplification { get; set; } + [ShowReport] [Validation1(ValidationCode.LOCODE_GER)] [LookupName("MDH.PlaceOfIssue")] + [MaxLength(5)] public string PortOfCallWhereCompleteMDHNotified { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.DateOfIssue")] public bool? NonAccidentalDeathsDuringVoyage { get; set; } + [ShowReport] [LookupName("MDH.NonAccidentialDeathsDuringVoyageCount")] public int? NonAccidentalDeathsDuringVoyageCount { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SuspisionInfectiousNature")] public bool? SuspisionInfectiousNature { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.NumberOfIllPersonsHigherThanExpected")] public bool? NumberOfIllPersonsHigherThanExpected { get; set; } + [ShowReport] [LookupName("MDH.NumberOfIllPersons")] public int? NumberOfIllPersons { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SickPersonsOnBoard")] public bool? SickPersonsOnBoard { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.MedicalConsulted")] public bool? MedicalConsulted { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.AwareOfConditionsForFurtherInfections")] public bool? AwareOfFurtherInfections { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SanitaryMeasuresApplied")] public bool? SanitaryMeasuresApplied { get; set; } + [ShowReport] [LookupName("MDH.SanitaryMeasuresType_1")] // TODO: NSW 3.0: wird ein Array + [MaxLength(100)] public string SanitaryMeasuresType { get; set; } + [ShowReport] [LookupName("MDH.SanitaryMeasuresLocation_1")] + [MaxLength(100)] public string SanitaryMeasuresLocation { get; set; } [ShowReport] [LookupName("MDH.SanitaryMeasuresDate_1")] public DateTime? SanitaryMeasuresDate { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.StowawaysDetected")] public bool? StowawaysDetected { get; set; } + [ShowReport] [LookupName("MDH.StowawaysJoiningLocation_1")] // TODO: NSW 3.0: wird ein Array + [MaxLength(100)] public string StowawaysJoiningLocation { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SickAnimalOrPetOnBoard")] public bool? SickAnimalOrPetOnBoard { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.ValidSanitaryControlExemptionOrCertificateOnBoard")] public bool? ValidSanitaryControlExemptionOrCertificateOnBoard { get; set; } + [ShowReport] [LookupName("MDH.PlaceOfIssue")] + [MaxLength(100)] public string PlaceOfIssue { get; set; } + [ShowReport] [LookupName("MDH.DateOfIssue")] public DateTime? DateOfIssue { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SanitaryControlReinspectionRequired")] public bool? SanitaryControlReinspectionRequired { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.InfectedAreaVisited")] public bool? InfectedAreaVisited { get; set; } + [ShowReport] [LookupName("MDH.InfectedAreaPort_1")] // TODO: NSW 3.0: wird ein Array + [MaxLength(100)] public string InfectedAreaPort { get; set; } + [ShowReport] [LookupName("MDH.InfectedAreaDate_1")] public DateTime? InfectedAreaDate { get; set; } diff --git a/nsw/Source/bsmd.database/MessageCore.cs b/nsw/Source/bsmd.database/MessageCore.cs index fe424ae8..92f5eca5 100644 --- a/nsw/Source/bsmd.database/MessageCore.cs +++ b/nsw/Source/bsmd.database/MessageCore.cs @@ -55,16 +55,22 @@ namespace bsmd.database #region Properties + [MaxLength(25)] public string VisitId { get; set; } + [MaxLength(25)] public string TransitId { get; set; } + [MaxLength(7)] public string IMO { get; set; } + [MaxLength(8)] public string ENI { get; set; } + [MaxLength(5)] public string PoC { get; set; } + [MaxLength(50)] public string Portname { get; set; } public DateTime? ETA { get; set; } @@ -83,10 +89,13 @@ namespace bsmd.database public Guid? HerbergFormTemplateGuid { get; set; } + [MaxLength(50)] public string HerbergReportType { get; set; } + [MaxLength(255)] public string HerbergEmailContactReportingVessel { get; set; } + [MaxLength(255)] public string HerbergEmail24HrsContact { get; set; } public DateTime? HerbergRevDate { get; set; } @@ -97,6 +106,7 @@ namespace bsmd.database public ReportStatusEnum ReportStatus { get; set; } + [MaxLength(50)] public string SietasSheetVersion { get; set; } public Guid? DefaultReportingPartyId { get; set; } diff --git a/nsw/Source/bsmd.database/NAME.cs b/nsw/Source/bsmd.database/NAME.cs index c5355989..439d6ef6 100644 --- a/nsw/Source/bsmd.database/NAME.cs +++ b/nsw/Source/bsmd.database/NAME.cs @@ -27,6 +27,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("NAME.NameOfMaster")] + [MaxLength(100)] public string NameOfMaster { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/NOA_NOD.cs b/nsw/Source/bsmd.database/NOA_NOD.cs index 5411e1c0..1165eaff 100644 --- a/nsw/Source/bsmd.database/NOA_NOD.cs +++ b/nsw/Source/bsmd.database/NOA_NOD.cs @@ -29,25 +29,35 @@ namespace bsmd.database [ShowReport] [Validation1(ValidationCode.NOT_NULL)] public DateTime? ETAToPortOfCall { get; set; } + [ShowReport] [Validation1(ValidationCode.NOT_NULL)] public DateTime? ETDFromPortOfCall { get; set; } + [Validation1(ValidationCode.NOT_NULL)] public List CallPurposes { get { return this.callPurposes; } } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] public DateTime? ETAToKielCanal { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] public DateTime? ETDFromKielCanal { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(5)] public string LastPort { get; set; } + [ShowReport] public DateTime? ETDFromLastPort { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(5)] public string NextPort { get; set; } + [ShowReport] public DateTime? ETAToNextPort { get; set; } diff --git a/nsw/Source/bsmd.database/PAS.cs b/nsw/Source/bsmd.database/PAS.cs index 9ce9ec9a..0b68e85d 100644 --- a/nsw/Source/bsmd.database/PAS.cs +++ b/nsw/Source/bsmd.database/PAS.cs @@ -23,19 +23,26 @@ namespace bsmd.database } #region Properties + [ShowReport] [ReportDisplayName("Last name")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string PassengerLastName { get; set; } + [ShowReport] [ReportDisplayName("First name")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string PassengerFirstName { get; set; } + [ShowReport] [ReportDisplayName("Place of birth")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string PassengerPlaceOfBirth { get; set; } + [Validation(ValidationCode.NOT_NULL)] public DateTime? PassengerDateOfBirth { get; set; } @@ -59,6 +66,7 @@ namespace bsmd.database [ShowReport] [ReportDisplayName("Nationality")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(2)] public string PassengerNationality { get; set; } [Validation(ValidationCode.NOT_NULL)] @@ -71,18 +79,26 @@ namespace bsmd.database [ShowReport] [ReportDisplayName("Identity document id")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string PassengerIdentityDocumentId { get; set; } + [ShowReport] [ReportDisplayName("Visa number")] + [MaxLength(100)] public string PassengerVisaNumber { get; set; } + [ShowReport] [ReportDisplayName("Port of embarkation")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(5)] public string PassengerPortOfEmbarkation { get; set; } + [ShowReport] [ReportDisplayName("Port of disembarkation")] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(5)] public string PassengerPortOfDisembarkation { get; set; } + [ShowReport] [ReportDisplayName("In transit")] [Validation(ValidationCode.NOT_NULL)] diff --git a/nsw/Source/bsmd.database/PRE72H.cs b/nsw/Source/bsmd.database/PRE72H.cs index ff4eab86..9ecd6d88 100644 --- a/nsw/Source/bsmd.database/PRE72H.cs +++ b/nsw/Source/bsmd.database/PRE72H.cs @@ -28,27 +28,38 @@ namespace bsmd.database [Validation(ValidationCode.NOT_NULL)] [LookupName("PRE72H.Tanker")] public bool? Tanker { get; set; } + [ShowReport] public byte? TankerHullConfiguration { get; set; } + [ShowReport] public byte? ConditionCargoBallastTanks { get; set; } + [ShowReport] [LookupName("PRE72H.NaturOfCargo")] + [MaxLength(100)] public string NatureOfCargo { get; set; } + [ShowReport] [LookupName("PRE72H.VolumeOfCargo_TNE")] public double? VolumeOfCargo { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("PRE72H.PlannedOperations")] + [MaxLength(100)] public string PlannedOperations { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("PRE72H.PlannedWorks")] + [MaxLength(255)] public string PlannedWorks { get; set; } + [ShowReport] [LookupName("PRE72H.DateOfLastExpandedInspection")] public DateTime? DateOfLastExpandedInspection { get; set; } + [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] [LookupName("PRE72H.PlannedPeriodOfStay_HUR")] diff --git a/nsw/Source/bsmd.database/PortArea.cs b/nsw/Source/bsmd.database/PortArea.cs index 2d198a7d..94e59f3a 100644 --- a/nsw/Source/bsmd.database/PortArea.cs +++ b/nsw/Source/bsmd.database/PortArea.cs @@ -14,14 +14,19 @@ namespace bsmd.database #region Properties + [MaxLength(10)] public string Country { get; set; } + [MaxLength(5)] public string Locode { get; set; } + [MaxLength(255)] public string Port { get; set; } + [MaxLength(10)] public string Code { get; set; } + [MaxLength(255)] public string Name { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs index d0274102..de96e4db 100644 --- a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs +++ b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs @@ -30,11 +30,14 @@ namespace bsmd.database public List CrewJoinedShip { get { return this.poc30Crew; } } [ShowReport] - [Validation2(ValidationCode.LOCODE)] + [Validation2(ValidationCode.LOCODE)] + [MaxLength(5)] public string PortOfCallLast30DaysLocode { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] public DateTime? PortOfCallLast30DaysDateOfDeparture { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] public bool? PortOfCallLast30DaysCrewMembersJoined { get; set; } diff --git a/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs b/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs index c30ede1a..84b8312b 100644 --- a/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs +++ b/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs @@ -25,8 +25,10 @@ namespace bsmd.database #region Properties public PortOfCallLast30Days PortOfCallLast30Days { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [MaxLength(255)] public string PortOfCallLast30DaysCrewJoinedShipName { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/PortOfItinerary.cs b/nsw/Source/bsmd.database/PortOfItinerary.cs index 08e524b1..16060793 100644 --- a/nsw/Source/bsmd.database/PortOfItinerary.cs +++ b/nsw/Source/bsmd.database/PortOfItinerary.cs @@ -25,9 +25,12 @@ namespace bsmd.database #region Properties public BPOL BPOL { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string PortOfItineraryName { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public DateTime? PortOfItineraryETA { get; set; } diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs index 3fe8b100..65d99177 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProductInfo.cs @@ -2,6 +2,6 @@ [assembly: AssemblyCompany("Informatikbüro Daniel Schick")] [assembly: AssemblyProduct("BSMD NSW interface")] -[assembly: AssemblyInformationalVersion("3.1.6")] +[assembly: AssemblyInformationalVersion("3.2.0")] [assembly: AssemblyCopyright("Copyright © 2014-2016 Informatikbüro Daniel Schick. All rights reserved.")] [assembly: AssemblyTrademark("")] \ No newline at end of file diff --git a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs index 19bb04ac..8ee99736 100644 --- a/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs +++ b/nsw/Source/bsmd.database/Properties/AssemblyProjectInfo.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("3.1.6.*")] +[assembly: AssemblyVersion("3.2.0.*")] diff --git a/nsw/Source/bsmd.database/ReportingParty.cs b/nsw/Source/bsmd.database/ReportingParty.cs index 8c0afa6d..b3447eeb 100644 --- a/nsw/Source/bsmd.database/ReportingParty.cs +++ b/nsw/Source/bsmd.database/ReportingParty.cs @@ -20,24 +20,34 @@ namespace bsmd.database #region Properties + [MaxLength(100)] public string Name { get; set; } + [MaxLength(100)] public string StreetAndNumber { get; set; } + [MaxLength(25)] public string PostalCode { get; set; } + [MaxLength(100)] public string City { get; set; } + [MaxLength(100)] public string Country { get; set; } + [MaxLength(100)] public string LastName { get; set; } + [MaxLength(100)] public string FirstName { get; set; } + [MaxLength(100)] public string Phone { get; set; } + [MaxLength(100)] public string Fax { get; set; } + [MaxLength(100)] public string EMail { get; set; } public ReportingPartyTypeEnum? ReportingPartyType { get; set; } diff --git a/nsw/Source/bsmd.database/SEC.cs b/nsw/Source/bsmd.database/SEC.cs index 628e8bb7..ede5a286 100644 --- a/nsw/Source/bsmd.database/SEC.cs +++ b/nsw/Source/bsmd.database/SEC.cs @@ -27,44 +27,62 @@ namespace bsmd.database } #region Properties + [ShowReport] [Validation1(ValidationCode.NOT_NULL)] public bool? SECSimplification { get; set; } + [ShowReport] [Validation1(ValidationCode.LOCODE_GER)] + [MaxLength(5)] public string PortOfCallWhereCompleteSECNotified { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.CSOLastName")] + [MaxLength(100)] public string CSOLastName { get; set; } + [ShowReport] + [MaxLength(100)] public string CSOFirstName { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.CSOPhone")] + [MaxLength(100)] public string CSOPhone { get; set; } + [ShowReport] + [MaxLength(100)] public string CSOFax { get; set; } + [ShowReport] + [MaxLength(100)] public string CSOEMail { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ValidISSCOnBoard")] public bool? ValidISSCOnBoard { get; set; } + [ShowReport] [LookupName("SEC.ReasonsForNoValidISSC")] + [MaxLength(255)] public string ReasonsForNoValidISSC { get; set; } + [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ISSCType")] public byte? ISSCType { get; set; } + [ShowReport] [ReportDisplayName("ISSC type")] public string ISSCTypeDisplay { get { return Util.GetISSCTypeDisplay(this.ISSCType); } } [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ISSCIssuerType")] - public byte? ISSCIssuerType { get; set; } + [ShowReport] [ReportDisplayName("ISSC issuer type")] public string ISSCIssuerTypeDisplay { get { return Util.GetISSCIssuerTypeDisplay(this.ISSCIssuerType); } } @@ -72,21 +90,28 @@ namespace bsmd.database [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ISSCIssuerName")] + [MaxLength(100)] public string ISSCIssuerName { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ISSCDateOfExpiration")] public DateTime? ISSCDateOfExpiration { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ApprovedSecurityPlanOnBoard")] public bool? ApprovedSecurityPlanOnBoard { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("SEC.CurrentShipSecurityLevel")] public byte? CurrentShipSecurityLevel { get; set; } + [ShowReport] + [MaxLength(100)] public string PortFacilityOfArrival { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.GeneralDescriptionOfCargo")] diff --git a/nsw/Source/bsmd.database/SERV.cs b/nsw/Source/bsmd.database/SERV.cs index 0109fec3..b32b963a 100644 --- a/nsw/Source/bsmd.database/SERV.cs +++ b/nsw/Source/bsmd.database/SERV.cs @@ -23,15 +23,21 @@ namespace bsmd.database } #region Properties + [ShowReport] + [MaxLength(100)] public string ServiceName { get; set; } + [ShowReport] [Validation1(ValidationCode.NOT_NULL)] [LookupName("SERV.ServiceBeneficiary")] + [MaxLength(100)] public string ServiceBeneficiary { get; set; } + [ShowReport] [Validation1(ValidationCode.NOT_NULL)] [LookupName("SERV.ServiceInvoiceRecipient")] + [MaxLength(100)] public string ServiceInvoiceRecipient { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/STAT.cs b/nsw/Source/bsmd.database/STAT.cs index 8e8f1e91..294d34d5 100644 --- a/nsw/Source/bsmd.database/STAT.cs +++ b/nsw/Source/bsmd.database/STAT.cs @@ -27,21 +27,25 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("STAT.ShipName")] + [MaxLength(100)] public string ShipName { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("STAT.CallSign")] + [MaxLength(50)] public string CallSign { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("STAT.MMSINumber")] + [MaxLength(50)] public string MMSINumber { get; set; } [ShowReport] [Validation(ValidationCode.FLAG_CODE)] [LookupName("STAT.Flag")] + [MaxLength(2)] public string Flag { get; set; } [ShowReport] @@ -62,15 +66,18 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.LOCODE)] [LookupName("STAT.PortOfRegistry")] + [MaxLength(5)] public string PortOfRegistry { get; set; } [ShowReport] + [MaxLength(100)] public string InmarsatCallNumber { get; set; } /// /// UNECE Rec.19 Code (http://www.unece.org/fileadmin/DAM/cefact/recommendations/rec19/rec19_ecetrd138.pdf) /// [Validation(ValidationCode.NOT_NULL)] + [MaxLength(1)] public string TransportMode { get; set; } [ShowReport] @@ -90,27 +97,34 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("STAT.ShipType")] + [MaxLength(5)] public string ShipType { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyName")] + [MaxLength(100)] public string ISMCompanyName { get; set; } [ShowReport] [Validation(ValidationCode.STRING_EXACT_LEN, 7)] [LookupName("STAT.ISMCompanyId")] + [MaxLength(10)] public string ISMCompanyId { get; set; } [ShowReport] + [MaxLength(100)] public string ISMCompanyStreetAndNumber { get; set; } [ShowReport] + [MaxLength(24)] public string ISMCompanyPostalCode { get; set; } [ShowReport] + [MaxLength(100)] public string ISMCompanyCity { get; set; } [ShowReport] + [MaxLength(100)] public string ISMCompanyCountry { get; set; } public override string Subtitle diff --git a/nsw/Source/bsmd.database/SanitaryMeasuresDetail.cs b/nsw/Source/bsmd.database/SanitaryMeasuresDetail.cs index 8428fa9a..5002d20c 100644 --- a/nsw/Source/bsmd.database/SanitaryMeasuresDetail.cs +++ b/nsw/Source/bsmd.database/SanitaryMeasuresDetail.cs @@ -28,9 +28,11 @@ namespace bsmd.database public MDH MDH { get; set; } [ShowReport] + [MaxLength(255)] public string SanitaryMeasuresType { get; set; } [ShowReport] + [MaxLength(255)] public string SanitaryMeasuresLocation { get; set; } [ShowReport] diff --git a/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs b/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs index 2e601226..c543cad3 100644 --- a/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs +++ b/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs @@ -25,24 +25,36 @@ namespace bsmd.database #region Properties public SEC SEC { get; set; } + [ShowReport] + [MaxLength(255)] public string ShipToShipActivityLocationName { get; set; } + [ShowReport] + [MaxLength(5)] public string ShipToShipActivityLocationLoCode { get; set; } + [ShowReport] public int? ShipToShipActivityLocationCoordinatesLatitude { get; set; } + [ShowReport] public int? ShipToShipActivityLocationCoordinatesLongitude { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] public DateTime? ShipToShipActivityDateFrom { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] public DateTime? ShipToShipActivityDateTo { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [MaxLength(255)] public string ShipToShipActivityType { get; set; } + [ShowReport] + [MaxLength(255)] public string ShipToShipActivitySecurityMattersToReport { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/StowawaysJoiningLocation.cs b/nsw/Source/bsmd.database/StowawaysJoiningLocation.cs index 2c190b35..649f3eb8 100644 --- a/nsw/Source/bsmd.database/StowawaysJoiningLocation.cs +++ b/nsw/Source/bsmd.database/StowawaysJoiningLocation.cs @@ -28,6 +28,7 @@ namespace bsmd.database public MDH MDH { get; set; } [ShowReport] + [MaxLength(255)] public string StowawayJoiningLocation { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/SubsidiaryRisks.cs b/nsw/Source/bsmd.database/SubsidiaryRisks.cs index 241d1652..00d9239f 100644 --- a/nsw/Source/bsmd.database/SubsidiaryRisks.cs +++ b/nsw/Source/bsmd.database/SubsidiaryRisks.cs @@ -27,6 +27,7 @@ namespace bsmd.database public IMDGPosition IMDGPosition { get; set; } [ShowReport] + [MaxLength(11)] public string SubsidiaryRisk { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/TOWA.cs b/nsw/Source/bsmd.database/TOWA.cs index 3a60ae70..8bcca71f 100644 --- a/nsw/Source/bsmd.database/TOWA.cs +++ b/nsw/Source/bsmd.database/TOWA.cs @@ -26,35 +26,45 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("TOWA.TowageOnArrivalName")] + [MaxLength(100)] public string TowageOnArrivalName { get; set; } [ShowReport] [Validation(ValidationCode.FLAG_CODE)] [LookupName("TOWA.TowageOnArrivalFlag")] + [MaxLength(2)] public string TowageOnArrivalFlag { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnArrivalOperatorCompanyName { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnArrivalOperatorStreetNameAndNumber { get; set; } [ShowReport] + [MaxLength(24)] public string TowageOnArrivalOperatorPostalCode { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnArrivalOperatorCity { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnArrivalOperatorCountry { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnArrivalOperatorPhone { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnArrivalOperatorFax { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnArrivalOperatorEmail { get; set; } [ShowReport] @@ -75,6 +85,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("TOWA.TowageOnArrivalPurposeOfCall")] + [MaxLength(100)] public string TowageOnArrivalPurposeOfCall { get; set; } [ShowReport] @@ -83,6 +94,7 @@ namespace bsmd.database public double? TowageOnArrivalDraught_DMT { get; set; } [ShowReport] + [MaxLength(255)] public string TowageOnArrivalRemarks { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/TOWD.cs b/nsw/Source/bsmd.database/TOWD.cs index 57799e59..40aeeb76 100644 --- a/nsw/Source/bsmd.database/TOWD.cs +++ b/nsw/Source/bsmd.database/TOWD.cs @@ -27,34 +27,44 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("TOWD.TowageOnDepartureName")] + [MaxLength(100)] public string TowageOnDepartureName { get; set; } [ShowReport] [LookupName("TOWD.TowageOnDepartureFlag")] + [MaxLength(2)] public string TowageOnDepartureFlag { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnDepartureOperatorCompanyName { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnDepartureOperatorStreetNameAndNumber { get; set; } [ShowReport] + [MaxLength(24)] public string TowageOnDepartureOperatorPostalCode { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnDepartureOperatorCity { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnDepartureOperatorCountry { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnDepartureOperatorPhone { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnDepartureOperatorFax { get; set; } [ShowReport] + [MaxLength(100)] public string TowageOnDepartureOperatorEmail { get; set; } [ShowReport] @@ -71,6 +81,7 @@ namespace bsmd.database public double? TowageOnDepartureDraught_DMT { get; set; } [ShowReport] + [MaxLength(255)] public string TowageOnDepartureRemarks { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/ValidationAttribute.cs b/nsw/Source/bsmd.database/ValidationAttribute.cs index 74bc3556..3da51525 100644 --- a/nsw/Source/bsmd.database/ValidationAttribute.cs +++ b/nsw/Source/bsmd.database/ValidationAttribute.cs @@ -110,7 +110,7 @@ namespace bsmd.database { private ValidationCode validationCode; - + public Validation1Attribute(ValidationCode code) { @@ -131,7 +131,7 @@ namespace bsmd.database [AttributeUsage(AttributeTargets.Property)] public class Validation2Attribute : Attribute { - private ValidationCode validationCode; + private ValidationCode validationCode; public Validation2Attribute(ValidationCode code) { @@ -147,4 +147,25 @@ namespace bsmd.database #endregion + #region Überprüfung der maximalen String-Länge + + [AttributeUsage(AttributeTargets.Property)] + public class MaxLengthAttribute : Attribute + { + private int maxLength; + + public MaxLengthAttribute(int length) + { + this.maxLength = length; + } + + public int MaxLength + { + get { return this.maxLength; } + set { this.maxLength = value; } + } + } + + #endregion + } diff --git a/nsw/Source/bsmd.database/WAS.cs b/nsw/Source/bsmd.database/WAS.cs index 57ab110b..8754a345 100644 --- a/nsw/Source/bsmd.database/WAS.cs +++ b/nsw/Source/bsmd.database/WAS.cs @@ -27,19 +27,25 @@ namespace bsmd.database } #region Properties + [ShowReport] public bool? WasteDisposalValidExemption { get; set; } + [ShowReport] - [Validation2(ValidationCode.NOT_NULL)] + [Validation2(ValidationCode.NOT_NULL)] + [MaxLength(5)] public string LastWasteDisposalPort { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("WAS.ConfirmationOfCorrectness")] public bool? ConfirmationOfCorrectness { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("WAS.LastWasteDisposalDate")] public DateTime? LastWasteDisposalDate { get; set; } + [ShowReport] [Validation2(ValidationCode.NOT_NULL)] public byte? WasteDisposalDelivery { get; set; } diff --git a/nsw/Source/bsmd.database/Waste.cs b/nsw/Source/bsmd.database/Waste.cs index 00ddb049..7c88dcd3 100644 --- a/nsw/Source/bsmd.database/Waste.cs +++ b/nsw/Source/bsmd.database/Waste.cs @@ -50,22 +50,29 @@ namespace bsmd.database [Validation(ValidationCode.NOT_NULL)] public byte? WasteType { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [MaxLength(100)] public string WasteDescription { get; set; } + [ShowReport] [Validation(ValidationCode.NOT_NULL)] public double? WasteDisposalAmount_MTQ { get; set; } + [ShowReport] public double? WasteCapacity_MTQ { get; set; } + [ShowReport] public double? WasteAmountRetained_MTQ { get; set; } + [ShowReport] + [MaxLength(5)] public string WasteDisposalPort { get; set; } + [ShowReport] public double? WasteAmountGeneratedTillNextPort_MTQ { get; set; } - public string Identifier { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs b/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs index ec16aea3..c3a71be7 100644 --- a/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs +++ b/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs @@ -25,8 +25,11 @@ namespace bsmd.database #region Properties public WAS WAS { get; set; } + [ShowReport] + [MaxLength(100)] public string WasteDisposalServiceProviderName { get; set; } + [ShowReport] public byte? WasteDisposalDelivery { get; set; } diff --git a/nsw/Source/bsmd.email/Properties/Settings.Designer.cs b/nsw/Source/bsmd.email/Properties/Settings.Designer.cs index aa1f09b3..8a19806a 100644 --- a/nsw/Source/bsmd.email/Properties/Settings.Designer.cs +++ b/nsw/Source/bsmd.email/Properties/Settings.Designer.cs @@ -90,8 +90,7 @@ namespace bsmd.email.Properties { [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("\r\n\r\n nsw@textbausteine.net\r\n hollmann@bsmd.de\r\n")] + "tring>nsw@textbausteine.net\r\n")] public global::System.Collections.Specialized.StringCollection Recipient { get { return ((global::System.Collections.Specialized.StringCollection)(this["Recipient"])); diff --git a/nsw/Source/bsmd.email/Properties/Settings.settings b/nsw/Source/bsmd.email/Properties/Settings.settings index 1416d6a9..d9cd5437 100644 --- a/nsw/Source/bsmd.email/Properties/Settings.settings +++ b/nsw/Source/bsmd.email/Properties/Settings.settings @@ -27,7 +27,6 @@ <?xml version="1.0" encoding="utf-16"?> <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string>nsw@textbausteine.net</string> - <string>hollmann@bsmd.de</string> </ArrayOfString> diff --git a/nsw/Source/bsmd.email/app.config b/nsw/Source/bsmd.email/app.config index 311af5f5..0995fee1 100644 --- a/nsw/Source/bsmd.email/app.config +++ b/nsw/Source/bsmd.email/app.config @@ -33,7 +33,6 @@ nsw@textbausteine.net - hollmann@bsmd.de diff --git a/nsw/Source/misc/db.sqlite b/nsw/Source/misc/db.sqlite index a22133f4c38e9f6a5cecd6c1404de99886b896a8..60deaaf2601d6ac3b884c735c042677d6cdbab56 100644 GIT binary patch delta 729 zcmWm8O;F5X9Ki8i?LN=%dA3@;5gUaSMb_)0S0pddi}z9pyCM|w5~cph=)z3R7?-A* zW*l=7W)EGO+&UT4fi5l%US=BGtucnL!{`2SoEIJk0|EE!U{<+z)>ZKR$Lq*Yw%aw9 z^ULp^?~8}};~_T|AORkDp`al!u<#)fNl1nt3z33Uq#+#{ScJvM#1bq;09jau<;X@3 zR$wJoA&Aw;#Tu+d9`dmc>rsFW_@5i;_?N3={}F0vtR57J88%4OZ&vO+ge*DuW2<6 zrpgqVd=oH<@>{;iCz+JDGAz%eQ<|ktDy3LL5|Cv5SI_CsdP2X_L;9(1(e=7Q=jlvs z)x7$tX4I4#S9(MZsxB3Y$w+j@`(`-hqo+SS8pS0v<1((G1y^wm*U^eL+`vuTLOX8b f4({R}I&dEk(1|WQL^pcipcjwO7YmO*o|^s#1fMnj delta 599 zcmWm8Nl=Xe007|rdaok977>*~S<6FuAxW}U_UuaN*Ft2^5|7L@2y4!v6!Gd_p!{-x7jVrizzgZa-D?eY1n`aiWl`oC5MZ9l6Q62am`COMf&24s^% zj5xXEkK6Pww>R<^O7 zI_lZM|NBmMv6}|=&`63V_Og%tG;@F!4${gY+Bi%*M>xtcj&p*ObkIo`r#Q_S&T@|P zT%enaT;eiUxXLxIbAujwxk(?lxXm5C5>QOh