From 878bef3dc3fbc1e3fe2ae1433b5b7ea380accd5a Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 15 Mar 2021 16:47:28 +0000 Subject: [PATCH] =?UTF-8?q?NSW=20Service=20f=C3=BCr=20Wetris=20angelegt=20?= =?UTF-8?q?und=20getestet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Stundensheet.xlsx | Bin 46376 -> 46408 bytes nsw/Source/bsmd.database/AGNT.cs | 12 ++++ nsw/Source/bsmd.database/CallPurpose.cs | 4 ++ nsw/Source/bsmd.database/DatabaseEntity.cs | 2 + nsw/Source/bsmd.database/INFO.cs | 12 ++++ nsw/Source/bsmd.database/NOA_NOD.cs | 10 ++++ nsw/Source/bsmd.database/STAT.cs | 23 ++++++++ nsw/Source/bsmd.nsw.service/IService.cs | 16 +++--- .../Properties/AssemblyInfo.cs | 33 +---------- .../Properties/Settings.Designer.cs | 3 +- .../Properties/Settings.settings | 2 +- nsw/Source/bsmd.nsw.service/Service.svc | 2 +- nsw/Source/bsmd.nsw.service/Service.svc.cs | 50 ++++++++++------ nsw/Source/bsmd.nsw.service/Web.config | 54 ++++++++++++++---- .../bsmd.nsw.service/bsmd.nsw.service.csproj | 10 ++++ nsw/Source/bsmd.nsw.service/log4net.config | 22 +++++++ 16 files changed, 185 insertions(+), 70 deletions(-) create mode 100644 nsw/Source/bsmd.nsw.service/log4net.config diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index b4760a5c150af91a54e2f2e78214b6bbef7a0b01..c68577c65ed0c08c0b9c5d86fb19adfe5b01f02a 100644 GIT binary patch delta 24331 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 delta 24291 zcmYIuWmr|+6EBBGx}}lslI{=z>2B%nE^*T#&7r#+q*FR2rMtVO8}9M_-{;=XGkbd0 z{AR5^bOc>;1YNC<1hi?k5tu?lLCwNKL7_uIL3!G;dN?@S7&|!Fuz1?p7O3glEVJSG zlAVYkwiicd(#XqaOtm60Mk?1<1uMU={e~TJ)C=CBF*@ly*Rj{B`{jDlKh@q!oar;( zV2&?9{rjU9ZREJ+H;w{WPM*R)>5<>tbkT|ucqd$c7fi-Z3IV*{>~Hr*ja;{-Y4-&7!+DCK@)JxuXZL5_Q2% zeFW5vr9TNjTyP2t$%k;Jb?P|Tu#2uGPX*47O4!#+rGABdHIRXJ|4P8=SFvG1$&_Ok5a~UY@1cP1f{A!k&o&Cvv}v@ctVk8`n5GUUq{0)f$eB^ z`xVy*XMqHubE0{uq&~%xjs!aq+dC9H!L4jaR1ZSWd0t^P5`GX`c$gRu#a+cEcyZ&F zp?PqPM~NTt~rt#NhSuxbxTB^WnVdRt%Z&_xsz4*@I)v?6uC9CXtuRhmkgs z?{dH1*hkOTdT$@mEncTX?+k>2m*=adHq*1Q+nlVc-LYNy+Upk&5npK(AjulI+1=e= zZ-0IHdpmf=`Rn`Di-!&B%Q-qL@TT+pR_<{AdLNn`!+PG?{+vK~bW`q-4ZQqh6#ztPNQ|LZ4=`WMyA2uJ${b@ZOm9eX{Le-5Tmwo>!k7 z$X;)2wY~I6H)iMG+JyfAk1^Mr4%be@Z-eB{zGyd1JkcU@Z((B^4hlg{Kj&JwV*`0;RDu+6i4#4C7&F=BjO!J}4ITo)_ z&(j3i^ve`r;QLs8JvGC7{#x_;a(C(;DkcxS+)fm>4{RT6o&#@>H_Q8qo)ql$sqgzg zJ?hG#+CPhrGM@0;PTj+#(zOcRM z1N^PZTWw!mtk)0LR_NMSbmiAr>pkZC96Qy{-FKb%E$mx@<#9U}2^~+R=RMZfeBV}+ zCjcOE?XIxt1?$nCKq#c?uzMRVR_A;7>vxa?*qW3RK;OIaNC zLc(PjzX?bJFMRbaC0HjN>)fdHQHwRVb z|5wlpmf88)6Ebhjg!@mGS`={+;4NL``3ZO$bNl8a^m5y@-u~c4&^&Ih7tffa#is8h z)cMHz6Ahtje>=cLYnqKHOViD;3T+V$GVvU*{PXj70h%1aE92 zP4a+rM@N@NF;c^74#pVdG>Uf8h`DD&Ecxx!i$naNkIQHUU&nd1;VpQkQky{ZQ!Gohh_v-wR*>2-JY6h8YTUy96k20D`=z&!zxy~_gZs42^z4jU13YzUA)m0 z>wASkSGk?H#^H1g7Gr!g2NHAg|MO)vLkj~JeM^EwQ1?%?e)l-Jztmzh<%BDgwet!J zE^#IT=BL@f=B{G`9yBc$<(}7-kUku{Bxvi}1g+13nRQp>0VUUS9Lum2@!Hq1f>`}F)LW7_AeI1584E^X&Nm(4h-iZ0c7gl?fP(X+5q3%C~*mU~0f z=#UulZCwzrGD2CUQ|3BuWpb3XmpXmu>=2hWAOsKd`M_VuRZ_zCLqUB5}mVV zybG2YS5ozIb)uJ71*&9m{6vyf@b*XI zm+NSsgj2n-_e^zL(RW;b^8&Z&a%iM(^YD3Y30aRQmv6e|lYO`)8>!oV9dO9Hf3zNS z4#mfnSnSmUc)ug$;W2I~4>wjkPEseX$1O%b(@m6Wf_X0C1C*1j8e%oX{lW&RSMoP3 zf7o7jj6_r&#|qx^M+;oS8`HTEFLXjFZ))+&$!uu)9?a}YXmYyjRDeV)Jyh7>q~@cy z%ovG%=b)NyoKF8gQ9gP{BGlhS&$ti^opyuN%%Jk|Pbs5Kb)Lg5n2ORzwdH5@xW_^y zXiWYuxtRg8D&m}oyClCV#-W^GGJMHmbb4+;K9MF|O?ym6RR6z_^IDw!aM9rGj2Xqu z!ISF7A?CY+`6O7iMG7aSYN~nBX6y&Pq?8A2QOB;-R`P8Rj@*M=M*OP|(lfn6VQ?kj zq_Rw*F$I(arGM8PiSDx?wC1H!(gs6WcT}Hdt- zp}6>JVRkp47&I704F6>}jVYy#_~3_mwBQ4D$?v#$IGD~^%^C_~FBrHpW#>!BfsZ;uH>E9SNDyxQmZ3#@}r2!I}Db;zU)D~H3P&1}7hqr!(^0>{^x+{gI z+Vah0t?_V-k2JDCY6Fk9bFJYXwQh@gJM+j&SJG|w^uyurT*f8s$z*3C+|EpIGuJh4?&OyL-Tz0f~ynmu>$?eq5L^t<8O>wna)kXdSS>fO`TtF%HJ(q-Q2~hPu%l zoLhz~85pTNW8+P@7WmwQL5%!PqeVaI7-C{aua>VPy~B1sZBOOvfv?6#{~~F`c?f?! z;RA>Fu2{5EXm144^wQrvd|7*#+5M!+$lffQz>AFR{h<8pU%|_=}{d zS>H)tTU^{Kcr5cvGu3gw5fZN1K{!>6{ZGso>RU(YADuc$KoeUQ9K|diZFw#IeB7`l zGAk{*(Ln!?Un?`^q!-8T#6EoZk3q{xr}{Tt#VqK*@>02J1whtQ=IGyCY4>yla7cGa zOFMVwfLlI9L76{G`U(#?JLLB#^N^ZaI!TDh*v4f%N{9%qaf81@6#c!jPyLq-bj2d& z`|c780gVx4&0!&Rno1;f+7l<$5@F?>UDj0x+t>E%j$T@wm`@p!Kwh8oe4<6UvVe*9 z5h0Y*DIbR`Z$TN+Hbx((ca4I?e9sW0)9V0yDW0m-6S!lFAt4mI?C~xzY<=5S%5*@H z)9KI!9mJUQ+>=2C!C8F9u-O$c&*!fl>zA&(eqZqxVY>ABqFt)t63~5xp=KypQUZ7t z-~79j->uRAO_4uHi59>gm5(!9!>!8<>_ZU9g-p*;zKia@D&xW=C*QtvN$~anHE?0g zy|aQ_S7~{6oY4wXB9l?~A zY(eVDV#i`l1ys)P>{u(%{aK^StB5gcd<1uoZd_3RY+Uk?X=D1K}&Zppphtoq|#l2@_)-8`a|EKDiDNydbrDG2jS z_uJ^a4gP0kv1J_XCH<@iEKhT^d{T&|<`bit_Y4|aeT$UencpdH7CnJE~1edzfBp-;{oU+J<)QlHiiHF_rl9k8zteSE5Z zY4wXDZ4x!cgrZR0zwe@XS49VoVTUN-B)L=8?_p@4*xjmU}Y1GO0z*HnAgrwkS@+LXZ;g322*!dr+&fh=~X9%b-JXEkmSaHOrJZ zlFFPZk2fl*P2mxB=gi@{>T@12P*Hj{!YP4o%}XpD@LLh{uv!mpS{e#V3iR<(=e`Cz z_!Kk;1pPQZNS`E{X7+n`r0`^+yescjKFs)4OX*Taqq@oLQzxS<(OLdN)Uv*EWe7qE zkaPaYf5%?^k?;-odc;!RRK{??}kRq64q}q-*Z0n zyZIusqL=cx702~N)5Q%=Gd@12pR)&J?{etuT@k9BnyiV-p;SR;DtC^AUbTHnpw`Jd; zDR_}2oi9zW%(0BmpUCyWKzm$9yOH^~!jEZ(j&Y_czRS&F#*@C+6B!3p6}v;5_~SJm zWHNFGE4nLAJ!QM$1V4gRZo7q26&8FU(`xR=^qE%Qvn6RAdvFvJ4I4`g&qu!XPoL$E zJwM91|7wBlMb)p@%H1?4X7#w+wN#Z^Lo1Km{4Ufc{rzI}Fm4RI&BQ1zw|+{gChhsi zGCALl!k6vGNAhU{J7SekB z-tcMcQ{_7Toup2lg(9H1f>5bM^5mt=)&7K4J*#Jcakq&z{dm*-Q_;-TFVUn!7b0DhWJePOBGu?6(e`CTDP;R&jPQTRf?pcO z84Eis>qnv8K$~8a3%}a1>+KOv91<&dkN;u#S&}0;2gLA@e}um{Gjpq-=S9pHmwcp8 zyu|)og!-K&?PxIxb5@uP5lKp7R{qtWp|sZZ8XZO{wfqgx3-kOL#hCpV1UJ&KGAyO{ zL`+&hjH-!$20d%9;Uu40_7shNGLtr&UGe^CDo*CP@cac&#HgfIUHm|}vGhl&T;c?Q zEqd}dpQtj~yJAwkB;|4zn73Cx;sP=UC0vK8A_nrpqed>&=5(c-Y#F2kDyPZ0%5dB4 zWh_)F0ge_RjHHBH+lei;0?>t1vC+JUHfvl7lhY~ljgLQks?*JISeljG7v(C2p2>M9 z9c-P$7>*FB<92p6z$n-*5>kdN>2Ix?xFcG0l*DON{FzG&BUVx^vN5R`2YENA4kSW>Whrh22o|ioSL0KyTSavq)r+X@TAMCM;O3 zx(CoyQ<_My_i9!ZDF*^{Vlx$C#S;|+0wxebMSEf{?$^)~kDUeIbbug`IL{wj+J_yY z_msi5LuuF6T8aTNa3_fN4)qM=ZmkDHtEX8`{J6uw!`mNs$h_$XqXV|9Itf}$#=Lgt zs`AIKve76)mvxhWBB!=mo*hGnM9+-%#6zZA!EMdLm4RAcd%lWTqkAxVQbsV}#O$~T zQ7Ox|&P+nC{JBm)&N!|iRi-97S-Pa|KttEURvGA$J@`x;mZMz3n&R~j#(#K5ECl23LQ*aW}K(VmdQ1>x=(fpSr zvSF*q51FTmP5t#@okK5S5tjvFZfB}(;rf|4BoDIb&*7aG9p>ykjK;gy5jq_X{3!js zu8CFlg{R>sfuN5*bW8`Kpqvq)wTCMPTT`lRY)rmb@c3^1<#i`W!+qS4)q^-cgb)EQMbC3ZuR0RJ^nDOfBGxl?oF?&#a3t z1FcbeW78sP)@omkhnO}Os_D-}L&{OGydUyG)9SD_@}uGD04`63ZKl>1xjUh4U_(&r z`@KKKAuZji2eyl?Csch5%eMWP7L6>}jPBMy?a2MYX;F0Df5V=j(|i!JYH2mZg7ln> ziD{Mn7b^EMy+F>-`nQ0ymfHt`<}XLx&TidQob=0j{SYfPj`|f6ZCd8V<0}GldOg!@@+aK7Bq8|bPtuN|OvR=nL%S-T zH5pDsQ`~GA4;Q<=*>knapZeyLeR)s!cfy=w5O-p^h?5=JB@@1n_ZsnTAn)SZ*zrqmtWP`UV4jPaHQw#SS*X{b73O`wfq7{%#3cHbJ!W@>$nq^Qo`*Cbk!-#k3-byZ9tHrjW=Qwe^IZH5;M zrKha&t$UN6WIu&>V`jwu%dLsTUoGW*=~FH}8z(#|@E&OS?4;m^G?=T{>l8R`e;-!< z3C6Ap%N3HOsy{f+a;Jo_ByOt%Mzh=}o+kZc>2V9bB0hEA$1_9)1iE_EETvHjVtS4$HkCgOT$|s}X!7r|UHqbt>Z{zYEY%Nm!&d!#ZeuVG{}|J#zlwrU?M{~D z241ORaRl%LYRiRE&b>=VIkA$($ZPZ|z|misys(HAJv%9@xtCE3q}~@rEPr*wldi-c zu^aXjX9+L*R32c4Fi+?1Y=B8tdtyFvEIkL$EZ~yIeq-z(RGgs7idM^AG}>sBO|uWx zK6Ysv!0PkPaiTFYE6+iZW`}i56_%DtA;PpvTM>}14jA1g4{g+P{Q)K1!eg$O&#iP@f=jW#{ea&_1k&YNnIdumIP5P$sz4u zq<8n} zdvheJ94o0NbN?!HTenwJ*i%AdkB%*F!lLuH;@D=h3zt-h8pxDkTzdZ@*3z3Dc=se` zWLH%W7?XP4mbzOrBm0@@o|Ta|>hmQi?-1CDxMyc*Xr(is=A^8?vNWh#9M{n`(}k@L z3il77o;|X&s?h@#V@bD4qxPZ6OQkp4&P{zulHJrF=Bo~@g7orE2Y<;GLQaL~EMCA{ zU4Tea1O~3_cAKLp@B2yvf?Lp+JhPFSyq+anzVBNo*2Xr90nKolP)y4lWfYD2m@}Sa zr((N5#f#X#7}_-wi#chq*Vuhlx?gmz{H(O?t7&f(xO@d%=xCh5w#qpq)6T+RA$W*F zC+|Lx(Jp1paA=gN`16qg!uN>`9hNmc>HcS-5B43Eim5>kK3J?oE2x&lUl=PEF>@A6 zq8IIK)dXgfSLis0V>LAGh&A1MUyQ=SKE&5;8G6^HF%*s^>3?jyFJD?*xEx%#s5`uM zYZ)jwSe{p^-I6=?+iQ7OF_uX3QQ*E$ot#K>PPuO)$>y-^)UlC)&b_|8S!E=V7A^mP zW6e_2edMFVwi+ZB8p2)wF@@V?>yq{*>Qw!T1@FW()p_w@fdD~$Lz3UL4dv6pao2@0 zg03Q0ToIUA%zDvmUubN;xu5Tlg%xPnMz|ltu!1=yuEyNR%r8i zKXd#z{FbxL5MAAXf~pIt*14isLe0)@(d<98IfLpZ)%nR0^B-l;&IC@=XNl73A$Qcc zWO@&O)Qt-4Uru3nyVFVt%*^uk3T1IC-Bl3RV`RGN*Idr3M;Q&-?uis%(U#ebZuy zGAtsccpMfeA4?iJbl3EL#(s&W#qjN;j{A9p?MqBKIp|uHI#?`J7Go{ja`|DtT)eED z?(??t+G6Y3cJmj6v-82vR*p{?Gv)!~-wT~MAIkUu@UkEkux#s!SvL||t1aNrgVh7fM&Xr2Vdmhd5coEtH0hs&O5sf0Y+U~7_e}7 zTzqpHbd|HWMlezovoLIgSD=I!{R%-I=2g+6IQf}uR7r?0DDL*x+rqtb}UWOFK(e#PzchX z%O~7*H;WhxrIAYh#59bdY{wK?0vygARqS@I`dc*+9{ru`EM)5M@#1z+qAMmhn-21gWiWJMNUgo+3FYU|Bz0T@vRq);i} ztXlXT3RRe*Nb8&l5^u@&n8bcDJ+nX$>L7fNLX`#HgEfcuoNQ8HGmzdS==Q&ZPp%Lk$T?*7=bRy~Ge-Z#? zkpta6ykOzBi)r69LEl4%L21O;XjuHY1|@;nnRHFsZv&E(1;BBZsIC5sPBHVx#se=D>K?ELS#fh8nYGH%gl+O!TN~A2KqumH& zx9(?-?krTrA_*vf(y0M_ZWEs1VFt%SJGw zeK~@NGNfqNim!4YLv6|KdxqW-8b^@&1SQl*;ZzO*;mR`KrxzwykljdYHEA`sE`O*WdMiJJI|Xb47fP2a2ne9&o%(vRvnaJtdX|6~gy^I^!FfOU$cKqxQXW8ya2Q^8j%gp6*## zoWxl7C@egeYRp1w=&EqRKX7`eetv!;<}BD}0`OH}=JqDgyxp}SHFJS}dF~wkTR0t3 z{faO4IE4c52J~W4wZI~xUf?Wo9^k<&mO~et$euAj?LhZOGwl8am^-H2UugfrNLBzQ z+q5Ox&z5TgFTXZ8;LY7;q?3vA)i+B7i!|~+Le=38>h}2+_Jh490ZOf_Q8!R${a+)p z;)V4gf;r-B0H-UvS7PM9U+-sLp-VprAEGJ|Nut`CHNp>bl!0`D76kx2>7#sCWSOR+ z*}km)_Xik9>0NF1s`4pvvegfi%XHSpZ9{XPv_ErA;xkG@hsdlC&30vt5mYDIbP2%M zsQTb@0;+$}8_kC@dupm#DY3%|Y5FM#4dR(kJ^Vj%{E}k7f%2cZM%nHk$-Ac8XY72crcF3PI7ZAc{+L!wDH4VZ*L$Xe7vt3@`RPWSAo- zyVQ7$NOCo^DB{1rEGS~vmxeQMb^b`M&5hCAx{GgBm4JPqYyOrO3dVV z*IbrK2s9}Dz3YY^4f-jiSRC2t@H-n#5bM-m((r4% z6gK~@8Y$pq(G^5S1BHKi{tmmy$7ysxzSRMRv0^N{H|S%ijCC;{2V>WaC;^UbxZ_3- z;lVJueECeS4-&7MhE^LqZ{W_YWof22>OCH8@k0~iB&djLPgXm3^9X)h68bk zdaSqjof%^Aj7^tCoMT+2{}Ic0sbZc}V4HAPcP-G9=IcjIs3>>{alI0Lg)WwPM_FkY z1yD6N@fZHkE0X{hQSat0&F5(l^n?Dmj}$9wEGU_e|wvoe8hD#P~5FNE(R^sj0?iAs?0(6r{PmL-mHMa{OL6+fUYZutW;c z7dY}$EkH{NS|)xY@q%qge7IuB6=x8m$SQJ0Q!#(gtV2}IHr{~ufC)s7&%K@}eNQLI zyXy1G9kGGNdvKLPhzJeql`|xCdx)rjaa%X;kA3paW*!O-vDoLUp^`vDMJ==(Dl8~K z&_fHx7bIT5l9I5sB0&DVO&=4@ z7soYClw}UTPi5X|jpO+EIgR6(QuY0x8fcM9M^eg%7HmKp&HAd?tr*)P5~#Aa*j7|N z%74}CAaREDck2;nly7(e?%93YUxI3GU`f~6nc{VMx^Q{+zC1YZ<)sXJH0b=Z0fme! z(P=AXldkm}Nx8zisY!p4rKBZ;lbJ^#RytnR_DNGSGrm>D;4Qgi)N{zMvuo+}C+1qC z@9U0xl%3+d~>vjd*m1YYXHp!Ar2dS9ZT%!lu>0>+Tn8Drchv%ADF1GSPL6FnQ=4y1$ z>7i?oi9Fu3?PJZPOhMA=)gA^tr{3z|cUs7(SWItw39>F;tBnt#=freUuJ&=(`Stg8 z6-<<2f`8Xy5RB8XShkP5zB}_aJ3f#!v9w{aT$>KomnH-3H6*I)(F=S(8-1CI_}S6w z?j~dRZv!>k$8l_U5|Oq+P&8?=PY%+1N^+#w9WF@!T{kT>oQN&TkB6YAD! zWkwLC;5)+gC#^moEUN}HXRkRvK)jO2b)sgz6<#S~Wik?GXYdS5FEcXNujrG&NUKpL z2xlw57Yv|p_XOB2auiWi`Ceep&_LE#kyGWW46T;SzO-%4U^QdOeC2S@yvP!!dEwPz zq<{p-)oa%6fkqj#uZi~Jby@6>c_ddxCmBxun?ntSID4}x)ZIy|82iGdVLg3#0?5_m zE}bKR{ERwdvGD9Ls)9gt4wm*f>|p&iUEE}94xkG%`8|xyxG8wp?n)yapD2Olvyn>9 zs6j(1h%LBM+>3;J6H}^KFu@W%c?3 zx0A{uG4-Mu`q^!g=TIa;^++DZjKj>d-64(HJ2GOesEmbH*$B-OO4d#Z*CGol?Ni3X z363ic$4?9oii?`+IQ&nBJgiuSGz&EAp$!nw>u{MV#{_mL1K|(D%vFJE5&;{(T_xIu zMQgv$qkRUi)VaM9^iIedwa zkV8!{Q-krHcEv0!Al(S~-nGOokd*W4pI0r^Ax-scW+Sn8PJy(rct35J zzV!cWV|o+TA4PhMH%D>I)=`Hb99y$j7G*f;!k4<>Q8F`X;2%WdmLxXw@!vf+NAzoW zh^QO|ugKB@u@3@dhyv_puVR_T4?xuy_q&<}>@d1m*0}YC}425%k8=K6VUi zH^%Yeqs0wPa?^E)16$#oI$k?LDNmL)Q#)R(c>C+nF{@n|)u16IH{AWv+pV>V*CFj3 z43Z}WhVd@b{c5L(QaHBO_t7P#r#p}=@G(IUSor!!=C^#c>h@2(cd!0DL8%Aw2Uj5! z`7+P?pJ27pMSLV^o0HJw9Av`Ecwlpgk(JE7MTJ^`RqBf{QlLSH7KQd zL6H0{;y*G6RI6SD-!J|}|MtNV^Q|KzY{(f4z()?7p@Ho zF-U=T#gXr8{lq>|lLA3OMt%)I?&wdeWhQnP6PQNILHc zB?TMy#ra4?M!xi)aCAjTO}bDWbYv8{Ha(76;wpy$KzgR2P2ja`x&n+^mhD-p-|L~Qa7G7RL)gC|p3+PG&bZu<~qt#nkMTfZn#``W{inJ`=0 z8pkWOt|g`g0W$qaGy$TBZ$#E{!sv_v>3!W}T#zN#5dFAGt2a7^BV5v80MP@xVsOUnO=@(+Cbz}ZQ010p{j9LzDq$qXzXTOsCi*}=giuI0= zzFz~M<6cjAxI%TW3-{KaCdzHB9a0)vG$BZPbO~@kqd~V^d>-}9%Oc9qz>H_YZV2kp zVZteR?fIR?P_T$~P_e9Fb4lM)ZxE`r4Fveqiri#A05e@TX7u>*CU@*o6 ztd&ZYWfBp$?rql5`4N)E72xU{V6iUmb*(L(p3E(;9?0rkLIJ9p8tkn5W$R znV5iCNfv#-f1ZetP_L-ac4EK4vIW0CFY zszbBOvuicZ_(T^Bb=AM0fCe)P^Dru%uPo4zSGtJ3BK$1fLXXi=`4?>xxK9q+ha(gCkHCcFBiCGkbl+Uo^`_FIM4jo7IxPLM4T{+&)IPr{!ok(rD zIlKgPw4NjFjPNzZ%d1v3aIJzku zTv4X&=C{PU-yyiq`vSC5AuhRzlV0_>t7KzK&ze9Eu0p+=75Aa?Ts_rNjq4A-l?iL^ zQkAgf`7-mF7>vltjVj3edxE0% zbedan-G5rCDbT=A?<@Eio{-A#1d&?6M5z3@1rx_x!0!~tV0g;EdEXU&F~A zE0c=4s7xCV0Bmau;dA48=$&L>fkYfU&@RLvMs#y>jdtNI!HaDP+x#Z4pm0ypHpP}p|0B%nBgnRjLI}2!KGw- zvqzP5aO9_qXFCB)rSm^T+H&zzb)0>JJ*s3LP(Jb>Mp#HH#(&nq--ci>>}ZQsq)>s1>H{>#Bwinfr zYD)mHuRw@7W^BFC0MZ|Zid7R{nBDPDC7C*_uujZbe||}d=^^Xw1V3)+#Far}S|j`~ z_|0=N7!%cXvq&~l2NOk|5YEw*SCtqW&EVhB9(2P#7p0w?OV)q1MELT^Z^X`a!o;m# zsKRWVY^EVEK-?mEM0Qb;d#6s4L5!t9cC!{)wYdn0ZXW4eH62ts;JElXdQ(Yb?g#6W zauk9?4CczeV45E9_*p2o+r~6P?dmv93X^XI9`v=W6@Bw@3@-(fSB=FS_MxfzLiA6>xB}7)vgDwzfYdu*Gds3E=Y9#@_`j))A zJ5<1$qgR1iu76_B4KVh7QTgQYsoykzCa}!C{v# z1M%>IAago{P(Wo$7`4(I#*&Q>)O8KQXDbj^N?H`|3dj~%hl`u7=h_Skx9Cda0>!ot zQBoiMv@XVyGed5n&8Z;9mWOCfeQsUF#@k~0lcLein~J8D4sgk&DIL5VJ6 zE16s8pkS524}Y4ECJe*UCx#aprEp)m{qYYY0gjwd(`H+iq6Cj|0 z`Z$3?o-R9e$Tc*KrORZ$9elP?@hvWII#f$PJw_)|;OjF)Y z#;fm2J3(T=BLjw&x`Z-1ovOOPnjam@&i3{p>O$Rh8ns3f>$=|aXK%(Set|fZ_Bbzu z05x0`Nv=OlrS$Pu^0`e!aCb~~=Hcoyei4zCa^)gH{0JPCI_7Hu9A68Xaw5a+Z~S*s z8a;b$$F*Q{rtRE%S&s)c@&uXrYd8~^X00Z>?e9r|bM15TD7#B0-hh;Mp1tSagjdaI z%~J1vyNt&PTEwUBHzHK13`wZapmeP? z^-}j3OGU+>U8Tr^zPt&_&&G*h?2630Fm(oL9g55Zmr%AN<3tFhTrvQxtb1}{tqtzh z!Uq_eg05sWI5-f_XV84JcHes@ZP%Wjmt+NhG>M@P`3XrFz)KTByE>zNaSmlVL3qzJ*xio zj^WJXGS1rcQ7zDVi6bIc?`?BGe5lg3rpq^V;Zu z**w-L>u&9dp67NKSVv>uxpsWl6^T1x+i9k~0zYwzKKa4f!{CheCyCk#cq*NezWuro z`7G9_;Cd#>UAj}wzVO;QYLPaCN6Od}+hQ8Buec^_4=eDSc8L*dEKgn|Ese$H==T{- z5Yt3V`Ueu_Rp#j18EQ2w-J(y%QRxGZ)*;8TJ}YubU~IJSiKAbpX7}QK^PF9%7?Opn zHz78EtS&qc1Sd=_H<-MsOI7BRypmbWH!{vgnE=#(rv>?{A{yP{Okjjd6F#B~y(d3F zcT~*iJCLzmpd~Qu_})w%=i?IB>XsE?@aoRkTb=+sHW`FFB|BeV( zRcOkMF12@d#mWzkzL@<;JUMM(^FMq-=1>$0*SZol*RKt?)k=}Pgyx*+YYTa?ihOfN z2`}rkVm;^fxRTlOyb>E{=n(;&uZ(g@I{8Mm3ohAeZFo0$QaR3dj(No{_=FqF2M0fA zO8&(l*)+k{7x-T1b^Oh?@X>PLRp1$VeER)}S7()wU3r@8EfP#++Bqr2E+c`Pji%_wLu;dYI3nbjYXoV`Xrb1ZqZf`i}9w%TAst+Y@!sotc1RF2Ud%o=VEPm!zG z(z}o7sRz|A+-4zxvg0ACxSSR+=2}6w4Pnt?VKe(DDfxLQa?-?rZ7+f?9*;|izZIs< z1ObkMq{JJG_csKI*G1h3)sT-=b3B2_`cjxS+wp>%&uE0~f4uR9ZV0eR+?f?tEhV-B zJ`PorOZF`dk%#gcCj`gRgAYzQCXM1q>H^!eMK{%d|5W$5>DATZ|6!Gk3o&izT{I20 z%Js}#o@I5jx!gUltWqc^Ora|)hLxI zOt2^g)jmb*Lp`249&2kc0;>5y(ZS(a?%#frOqNTij^z%}K1Fx#3rx(SFAGzKPngba z%K`cipIBns)5Xr-59w%sTYA1=zQBl$iiI|!gsa)DaIhf&M0PNTPcGfpWyM{_^#^6A z{+|vsbOxn<_54xHk|*3{wF|9q8UKsG9CAQS<=u#6+OKdE3vr~DLM>Kbp@@weXq#sx z9QuKVzL+s-dOynK{^|2r?Df)kos!1c0N;Sz9@MC?HU(nXYJ?3ErhkLq~ zy;=)hw?+pDK)tfFk~GI0fbYh5Acsg(Q?JJ`8jCZ;I8LBUMt-lEEe5Gw!N8F z=OZ^;~=QZ(|_jl`s?W48!+ zm7b7T@5gQBIlw-tgMc5wz_zH8$B4#~=$$#%W1JCc|u7BZGc?#ttO0q-YdWB_Bk^X}Odh7S_HA`oUKY z3>26W!ohp?j_c3;t@ZnQ>dbKt&MW@ZVjXVu;UYkORI-Mj5Y8O1s3cJ##EfqVyWOE9 z3+3TS3Fouf#Y!={6|5|d(ZO*%T5^P|G_2FDC#g+%?YBOPfJM z!EnOOl&ny`fa(pbpj9~>ryz1U*VFgF-``T7(zFpi)aXP_z<>=)U;M6D6}4>~M4)o# zcY~rI^{-voY&ZWPp-_95vA;jJ3;ND@GNaAs($kxh*E0JhfK4hnv41R@tz!vMKj|QT z)^y1_O#1wrJd+}}%O-WDakbyvbl1lc#8bM_hhgs}3)L;Fw5|;^Y$J6PqxYV}08TDR zAfEwbk3hp5FUoHy0=MfokfwyloFkc3N)6>h&=Y9dUb5gL`rz^&REYD-^!vz47L+f# z@-w8bHSExM%gXQnPZ3`k6-V=Y&Ef%q%MuboAh=6#3$VDmvsjSD-4_Y&?hcDvaCZ%^ zL4#|sKyZ2Yc|ZJr^J&gZpEGr;`rhiQ>Aui35J!Y5H`DmwjNz@rbbjjFy1#x?>a5b; z@7l{O2#Oek+CT^5zO*b$ZY2FXArJD)!QQ9%Zm(_KsK)xmMgNg-LcW`XABneeWR|A4=^^s+~hP z!h^!|g|$$n*c}u~B3(z_ILw0rKwc#ACw05k-Ps9uCnVMa2F-D||HfBGzmtyvmlZ6` zTK$kUGyB`115Ckyv%(%tJP;LIk8f88^3s*mVtex7=%qw-tAxOxnpV?|!lV2coo|w8 zKNR~EezIC$3vPxlp^vMXRE@%?Y-E-cf z>o7?`A4JKzAMZy!P*bV8R>+a66I<_h5SF6TL{zSX>QCOVr-4?^Jhll*-E##q2yyyF zSuB6iD~@GwCCO0E3SSZ=k07HS$Zi<}`RD@?`h%-CG8bw6N=w-Q%&9HHGDbwsS(eQ9tfWcOg znZ8ka`&S254ne{U-BYpjL@)CVB#5;h1}JhOxzQsYEph^X|S?kGt{s1W%@n5cK^LYc6>;V(?{4i56xGQEK zsuNm7ZZQ|HcKxe9CVqhclOTNv`G?87`FnScW^&k}CDmMbFv;9#+KuQSK6|y7?iS(^ z5!uW(JuYM@(*EUfs%9$J@Aa~O*l6x!JD{@&gPG)P6i(&YK;+0v*-i=z^n6VvEt-3i zCGgS_yWk>poOSmz!%0Q?5r_knEsxKE6SG zaY1ZRQDE&0P~X{yxpxPW|B}dS!L*ppX=c+3tR}b@ZCE!Sa(hd>%r3d87k#UYE|Wy9 zA9j_|1&~VB6z?A{93WJ6%YI=dFVL1Zo`+qu@up)u*?yLcNBz*>7_h=;6vG95^W`V+ zurPiawnT2-kQ%x1M?8ZcPM1shM$Ov4n(R}42@Rco9~Kf5;+bIh(CYr_HZ0w^Px<=V zr+(m^J)p1Ajd*aR6LVRL?h3JU_tQ;0ZtoA*oWg{bI>VtQi@FU@75TZYoN-e=i1lx6 z7_a(9h?p*7%2)xgUcJ&*%9x1=8tLLTn57VrqrkCFg%tUvla?4C3-+3Qcyt=U_bzpF zrbS<&Sqkr@l5VkShs}NS6J;u!)NaC{qfy#R6y;(T=4YpTQK~arVyl`GKFZWhyjFb$ z5fC24ln$`qOFn*I6s~_fQ^m)Sx~bBtT#wm6#Iz{+31rV_?OVr6pD|Vp4cNZpUc4<9 z;vliEvsR9hkc%JR3-on9gA>SQ6(4_U&lAJgEic*mY@xHG-JbNJ6MN^*E|S2b35)S8 zl}kQ1>>G>ZA8!0Mefg5+yf+365^BcT^{X;#SxQ5<;JTY?(F)rKn>~A}k4pwhoW!vy zR!tsbC9#=G-PH+xSOU*bH1dY_Ywhr7+|KRU8lGgIKN8J%6=CAJA#@w{k}i;#WNME} zrg;h?txa^s$isw0Qu^+5%GnK&^EgAVsb+o%47GnmZf!C`b<(^@o(2n~gx0S=Bxby< zd~)tq@XtLl3WdOk-t=a#IfIP4qN>Z`BZ}%!pDmqfJ{FnJmZl(-^x1>&N};rV-Q^6E zN|2QDGX(!C`;dg(3)D8zNlEP}NW==miWubYqK#}+#ww1dU5vccDiTY`x95cM7=r8e zmnX#pPiEzdiRJs*tlMd+_VmY0!Prc zjZNDjDg(sp>&ei;i7^RQ%>i9!1~I`Bnl5*ec)^n7k-3Bsnvf-PVjkdhD15bpdNB~q zDi4g1b~l*Jy0=dqurpT9!(lYBCCsSaHtCQS%ip$0UW=qw`HW@p&D^oG*>bFVRXF+? z1~$nTwEnGkcrc?lTH-`W@_G_I(Wr*#Y0oU~&3N)*T@O0!9ud&F*V$J1@ueXujw&qf z5A$5CmIS{yl;r=G&OikCtVf!-WWK0`UjS zS?VirLDU)vaBqd*b2qTkXGKAO>{@*zzZX}L|$qK5&g?AKE`lI zG;oa=%K(##%OtB)BxKp_AQ+*&moXAj6w4WjzcLc{Rz`BgVvqIr#!%-cZ{n3$ zo__Uy$|HALZi45X=bl%e&4>U9_A|#l=2G;%3I*xaoOD5BWNij-Hyvug%g{lFudfFw zZQ@`?W=QZI0!;zGV25_m75a~&h^NcOJ|DolU`Gy}%4o!K^mtZM!j-7`gsGIPtWPrA z(0zn{QL9B+cqqZrf`p(VUv%0S|L}B&x8aVJ7+0cbNI-m?{>@?#JJB`kTyUW1hdv8g zB>hPew>#U|u;QqdDRlV?zgp?%s7(6IA(v@YOIKYl2ewcIus`Tu9``{Idg@9 z7+Pdk=z`IuH(uh^%GZ4SvSY=`_ohAD?5N7AT3L~JLkKgCg+15KcviVCWxKxc_8!sS zho~?YN&U}XF$Dgxn2+bD5i#usfsSdBq19QqB;%MjV~yJ9n{U{)PP-iLTMbj8G;7?d zrz~w|!U|=HVJ`d5<-F!wf1RUyJ;V$f+kI__Yy~i!Cy%^thc+@8lyo{G+>b}BZx(x; zD-Kswz}7Kg*L@*nFrT$pI_g7yHgFpOGt=UAu(q@^SR8ew{=qok+F5n^4jJPd+w_5e zxfs}a`WC+UM#L15P_i%@4<3WE7-l3Loz~ZC5AVaP1w=Uk2{p1oeZb2$(WaV_!5Wbv zpsVgh+fRwU%JNyKsF_h6;Kx&C?udDzVE-Nua)!awjRWh9I2@(3zV*`Z5%KTEOid?d z$0V6(X5VB+TUIuYz&D;&xX;S9iZLndt&3wnY?z7;t_tB5lQWm?;DLiVgCYT z{v;){jAbVM?2RlClQ9%W8tOzMbb2M3T#EyCm?GQ3aXj)QL(1ZbJd*D`#J^c@>9x+- ziuP%D0JY|z5s;d|K^Rs(O;)I*z)6Ega>-2)f*H;-{~z^pG4a%y%77C{fG@l z3pc=6VaaA0d3?nlwvnxU##;YqxOfLjRWB7}=gBFterPbOTIVFO!4~RHYgOScY3foZ zb$xAc`dLavyv;&oK2JH&b>qa*%wr&Fu%)k;GJzE}C5|t(YVTEJR@LbVHV6b@a-G2| zoRxC-<}y|2MY9||$`X$<8i@VPMD}Ex8{trpalBiHLwY@#j1QOwHB5frbZAgX`-X-z zc9Qf~t#$t~F)ik>xQwtZW%-Hj#c7m4Sj>JF!^XcvwB}$?aH@^KXp?xJ)>vL zs~V%L#&pp{JuV6602W(L^VsNYG-IFz-~2W4DWk zXKjx-UNECeQP1I{!22IZ2)B&YTjr-J1rdyB`$L5&Vg;1CU~Kxp^}fr?kuGeaY~2%zU%zn+0LO526#QcbSFRA;s3?Dv-HT6`1E<`x86;VEkkTo`25ZX{q=tz~FK4vNmJg=aG6 zS$4ldS4_c1^06AhVMKg|p!zVxD8V0(N!imqSJh%V}XQG!O*P{+y0+ z%!K`IfDi{dYyB=PJ1lPed-y=OG+*EeC%c7oOVyR5P_TGVp~Q?FT~@6C3>XQ|Sp=vO zMb2Ntol)|2*2aS`yCpHiKua-*i4E|_Iz^bTNhC)^-%;m8=pd)37>n@4Y?*aI-;Cxe z=*cdUa|K|Kn>2l7eo5Dami#puvzH`uCCXN?J%hqToavyDknZy#*Yru zFqG__uO@e;4}`bwZ+R#*+lRP1Ms<4!exVGHnJxX2hVLL|jVX637EEGtjSY{!u^Dg_ zELHvr2++b;`%N9eFL!*GCcs9r5j? z8P$EvB&!NP5@U&2St?f-$cXhZ=TX6tbJ;wo7#`&Vv>U?LLN6LMlR`k16X%eDcIGOph92 zD$`U@2}_`SAKCMnp^a0!sPdox`T(0J3*l?F48K-i6XQbte#&-w4f8}V$?#IZN=8hw z!}~aYeddTLxS3Sa$S0s!TIV#U$7FFqShG&rn{R@sUb31+BNcm&7Bm3m=d1%2#%Q^! z#WO~D(fC$>a=t#+DRV&xS~L`@;3UB%Xj{HTT90r2HhaL&AyorEtg>|tbQJAbKMD!h zfqTZC1?FL2pf&SOzMll|go(aIU|rs^j*cNmX3)B1Xk@2`!cb`+{Lm>ueBzH#;mb+t zTu>@NGTg5A%De*k`5r3YpL*D6?v_IM>oij)g8(GN>R3*4A(T?CO7z-_PvVP(|Jr;0 zH|{I`iw^g@`*k_N>_A6?`=DJbu4ul$hRQmB|Lp}xXg!9Me{K*FDwcFU36lK`G@@_c zso?<#EaN`;RMXsr$R_!xK&yrC$Wc^bp+`?A$vSl#z4AB<6dq87HWE6qv#yd61MgKb ztVg8ZaXArw;u;-B0(Ba+n*dzHw2|w8a6?*fduJ`t#amAg^zRJB6>$4t-AEK;M@9Mw zbLb(e**0})NQklgY77h!UQ!0fGy+~GbM}dywyu&k&!D5La>C38_p#E44LPh)^opoxMRTU-i-tcpW4|zefJMyIU6+l`nWBNCGwJ0~(aybO00Kns27c9&w?_?u*l2@j4<>s!*_ zR>G-j(#CQr2ApQ$U_i0zU-uzxC#GrX;R~3mw}e-nf>G58UB8w>Ov1}zS>5$WD8*XI z+_x!0@x=VF z^IOJ;s#}H%!7!A6OV-d^v7PElRCao5FJt#r@~F|GWOE3Doo^-9Q;G9{JS&X5dSwbfNlNj%$XZjK`(0J1Hr6Wg2<%5tnSRG3t8haV3$|0M0NQXsWbR}8pea#_RG5aH9!7NGSO&uSx8Q$u2P{kP7Ve~-yGypwTc{V$69&|X8r zWR$(`qbg?ut@@U;Hray*_XeL^MGqL}oOp=&Bhcabc?5B6I#}HOy*WiGvb7zK2Wp>7 z)2Oa@co5~_&jTCsU{FzeatX`Z3N1o1MAUVO%6k9J$<1Cm$`4TY?25>V?Qb8!(+UGC zY!?RKedLr=4Ibb@M{rd4o=LN`-s)hET&VpSY;{X83@<>N!4v|P}r*=h@5D*O6wBP zfh>_b9aY+RbDeQLkHx9ytSz->{9=l6HeNXk(_W1dO`Sg>CA(S&sZ5nB{Uf1nTrL(K zBC}kvn#zKFI3eeN5!)&wLiHK~Uf3@Fj`j}~ygj)e`84MaO@#lj;8z-M0FLR({27S@ z-zusM33*pr=yzT}?uplaep0tTI#DN?ZPr=q>0y$A18*e$h9-)skBwn*UvTh8EsY~m zpGN}IA|O839*3fqDMzFR&4j_HF(pDnTX`tftPVTueHXt!8_#M1wA8<}L!_!)%nht% zMukAZ=9b)e;||hXM2-jXzOA-a+4st;E*2vOgByQ@x$aYDM$$z6eP0*Pr^0PSG^CF? z-+0Z90;F*nG_eJOjuDV@XYQ`}AH|3sZc^3huTgM^WQ_m&S_{8_&)=DU+S*S`WZu($ zkN=u+KIWXC=l+Iv-``H1L!U32Z;kw(?}nG`Uk>_NlWOmesZTptKSH0QUtjO%4z8Dy z$7rx$@y?(=UVbmv-g_URj~6coI7Us-BGu*O9HyVpC9)4n-98W3`j5l*SIrMc{a3lU z-S3edOIC00e}?`l2FA0Q9R}9~*9m*6~Nm-$6SFM2%u`D-mk(41j{;iAEBK zOx_e*^rx;EB*1(*&-tVWS9|^Pt}^iqc~o-pJE~bZW#kAgvGNHZGs&FCcgmAA{K`_o zs2Mz_jNMyz(xoIV)D8LKUfws{e`Uv1tA{O5vS2{HuHb~_91A*}YDP7V1E^emZ^os4 z6CjIb6p5vmz4v{8G`La#gm|{% zrsd&J2Cn8{o+cv41-HhpK<~fnUck1T>C#*|KQ8MAdhqWvmPu%=T3Yp*-SKQlSb$kG zN3OWo+Gba=^{m(Z!=Ba})@Mm|{^c4Gt0nQw433&+C4e{z`jcQsQk*9fuitQN3k6A^ zwAiT~XJcicUqf8j@{pX0J&4gOnA2ANJOTFdw)X@pTOh&VcJ`dF06@J&Ni4>j|5KE& zU#n9EVEj+jJCV0u6QGwETTk)+zeu7}A|NT${bFT8Mh tdc6OQfZy3BVl@Z@7!u_g)B(W6yarJ~UgB1R5Fjw|V /// message class for ship agent, new in NSW 3.0 (March 2016) /// + [DataContract] public class AGNT : DatabaseEntity { @@ -37,30 +39,35 @@ namespace bsmd.database [MaxLength(99)] [ENI2Validation] [Validation(ValidationCode.NOT_NULL)] + [DataMember] public string AgentCompanyName { get; set; } [ShowReport] [LookupName("AGNT.AgentStreetAndNumber")] [MaxLength(99)] [ENI2Validation] + [DataMember] public string AgentStreetAndNumber { get; set; } [ShowReport] [LookupName("AGNT.AgentPostalCode")] [MaxLength(99)] [ENI2Validation] + [DataMember] public string AgentPostalCode { get; set; } [ShowReport] [LookupName("AGNT.AgentCity")] [MaxLength(99)] [ENI2Validation] + [DataMember] public string AgentCity { get; set; } [ShowReport] [LookupName("AGNT.AgentCountry")] [MaxLength(99)] [ENI2Validation] + [DataMember] public string AgentCountry { get; set; } [ShowReport] @@ -69,12 +76,14 @@ namespace bsmd.database [MaxLength(99)] [ENI2Validation] [Validation(ValidationCode.NOT_NULL)] + [DataMember] public string AgentLastName { get; set; } [ShowReport] [LookupName("AGNT.AgentFirstName")] [MaxLength(99)] [ENI2Validation] + [DataMember] public string AgentFirstName { get; set; } [ShowReport] @@ -83,18 +92,21 @@ namespace bsmd.database [MaxLength(99)] [ENI2Validation] [Validation(ValidationCode.NOT_NULL)] + [DataMember] public string AgentPhone { get; set; } [ShowReport] [LookupName("AGNT.AgentFax")] [MaxLength(99)] [ENI2Validation] + [DataMember] public string AgentFax { get; set; } [ShowReport] [LookupName("AGNT.AgentEMail")] [MaxLength(99)] [ENI2Validation] + [DataMember] public string AgentEMail { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/CallPurpose.cs b/nsw/Source/bsmd.database/CallPurpose.cs index fb4d33b5..c8752033 100644 --- a/nsw/Source/bsmd.database/CallPurpose.cs +++ b/nsw/Source/bsmd.database/CallPurpose.cs @@ -13,12 +13,14 @@ using System.Data.SqlClient; using System.Collections.Generic; using Newtonsoft.Json; using System.ComponentModel; +using System.Runtime.Serialization; namespace bsmd.database { [TypeConverter(typeof(MessageClassConverter))] [JsonConverter(typeof(NoTypeConverterJsonConverter))] + [DataContract] public class CallPurpose : DatabaseEntity, ISublistElement { @@ -35,12 +37,14 @@ namespace bsmd.database [ShowReport] [ENI2Validation] + [DataMember] public int CallPurposeCode { get; set; } [ShowReport] [MaxLength(99)] [ENI2Validation] [Validation(ValidationCode.STRING_MAXLEN, 99)] + [DataMember] public string CallPurposeDescription { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/DatabaseEntity.cs b/nsw/Source/bsmd.database/DatabaseEntity.cs index 36f1abec..907a94ea 100644 --- a/nsw/Source/bsmd.database/DatabaseEntity.cs +++ b/nsw/Source/bsmd.database/DatabaseEntity.cs @@ -19,6 +19,7 @@ using System.IO; using Newtonsoft.Json; using log4net; using System.ComponentModel; +using System.Runtime.Serialization; namespace bsmd.database { @@ -26,6 +27,7 @@ namespace bsmd.database [XmlInclude(typeof(Message))] [XmlInclude(typeof(MessageCore))] [XmlInclude(typeof(AGNT))] + [DataContract] public abstract class DatabaseEntity : IDatabaseEntity, IMessageParagraph, IEquatable, ICloneable { protected Guid? id; diff --git a/nsw/Source/bsmd.database/INFO.cs b/nsw/Source/bsmd.database/INFO.cs index 883da3f9..9212ff16 100644 --- a/nsw/Source/bsmd.database/INFO.cs +++ b/nsw/Source/bsmd.database/INFO.cs @@ -9,10 +9,12 @@ using System.Collections.Generic; using System.Data.SqlClient; +using System.Runtime.Serialization; using log4net; namespace bsmd.database { + [DataContract] public class INFO : DatabaseEntity { private static ILog _log = LogManager.GetLogger(typeof(INFO)); @@ -26,6 +28,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [ENI2Validation] + [DataMember] public byte? ShippingArea { get; set; } [ShowReport] @@ -33,23 +36,27 @@ namespace bsmd.database [LookupName("INFO.RequestedPositionInPortOfCall")] [MaxLength(100)] [ENI2Validation] + [DataMember] public string RequestedPositionInPortOfCall { get; set; } [ShowReport] [LookupName("INFO.SpecialRequirementsOfShipAtBerth")] [MaxLength(255)] [ENI2Validation] + [DataMember] public string SpecialRequirementsOfShipAtBerth { get; set; } [ShowReport] [LookupName("INFO.ConstructionCharacteristicsOfShip")] [MaxLength(100)] [ENI2Validation] + [DataMember] public string ConstructionCharacteristicsOfShip { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [ENI2Validation] + [DataMember] public byte? FumigatedBulkCargo { get; set; } /// @@ -74,6 +81,7 @@ namespace bsmd.database [ShowReport] [LookupName("INFO.DeadWeightSummer_TNE")] [ENI2Validation] + [DataMember] public double? DeplacementSummerDraught_TNE { get; set; } [ShowReport] @@ -81,19 +89,23 @@ namespace bsmd.database [Validation(ValidationCode.PORTAREA)] // ist bei NOK Transit leer [MaxLength(4)] [ENI2Validation] + [DataMember] public string PortArea { get; set; } [MaxLength(50)] [ENI2Validation] + [DataMember] public string BowThrusterPower { get; set; } [MaxLength(50)] [ENI2Validation] + [DataMember] public string SternThrusterPower { get; set; } [MaxLength(4)] [LookupName("INFO.PortFacility")] [ENI2Validation] + [DataMember] public string PortFacility { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/NOA_NOD.cs b/nsw/Source/bsmd.database/NOA_NOD.cs index 925d171b..ba362fb7 100644 --- a/nsw/Source/bsmd.database/NOA_NOD.cs +++ b/nsw/Source/bsmd.database/NOA_NOD.cs @@ -14,12 +14,14 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using Newtonsoft.Json; +using System.Runtime.Serialization; namespace bsmd.database { [TypeConverter(typeof(MessageClassConverter))] [JsonConverter(typeof(NoTypeConverterJsonConverter))] + [DataContract] public class NOA_NOD : DatabaseEntity, ISublistContainer { public NOA_NOD() @@ -32,11 +34,13 @@ namespace bsmd.database [ShowReport] [Validation1(ValidationCode.NOT_NULL)] [ENI2Validation] + [DataMember] public DateTime? ETAToPortOfCall { get; set; } [ShowReport] [Validation1(ValidationCode.NOT_NULL)] [ENI2Validation] + [DataMember] public DateTime? ETDFromPortOfCall { get; set; } [Validation1(ValidationCode.LIST_EMPTY)] @@ -45,31 +49,37 @@ namespace bsmd.database [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [ENI2Validation] + [DataMember] public DateTime? ETAToKielCanal { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [ENI2Validation] + [DataMember] public DateTime? ETDFromKielCanal { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(5)] [ENI2Validation] + [DataMember] public string LastPort { get; set; } [ShowReport] [ENI2Validation] + [DataMember] public DateTime? ETDFromLastPort { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE_SSN)] [MaxLength(5)] [ENI2Validation] + [DataMember] public string NextPort { get; set; } [ShowReport] [ENI2Validation] + [DataMember] public DateTime? ETAToNextPort { get; set; } [ENI2Validation] diff --git a/nsw/Source/bsmd.database/STAT.cs b/nsw/Source/bsmd.database/STAT.cs index a59b5359..a3436f67 100644 --- a/nsw/Source/bsmd.database/STAT.cs +++ b/nsw/Source/bsmd.database/STAT.cs @@ -13,9 +13,12 @@ using System.Data.SqlClient; using System.Collections.Generic; using Newtonsoft.Json; using System.ComponentModel; +using System.Runtime.Serialization; namespace bsmd.database { + + [DataContract] public class STAT : DatabaseEntity { @@ -31,48 +34,56 @@ namespace bsmd.database [LookupName("STAT.ShipName")] [MaxLength(100)] [ENI2Validation] + [DataMember] public string ShipName { get; set; } [ShowReport] [Validation(ValidationCode.FRZ)] [MaxLength(50)] [ENI2Validation] + [DataMember] public string CallSign { get; set; } [ShowReport] [Validation(ValidationCode.MMSI)] [MaxLength(50)] [ENI2Validation] + [DataMember] public string MMSINumber { get; set; } [ShowReport] [Validation(ValidationCode.FLAG_CODE)] [MaxLength(2)] [ENI2Validation] + [DataMember] public string Flag { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] [LookupName("STAT.LengthOverall_MTR")] [ENI2Validation] + [DataMember] public double? LengthOverall_MTR { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] [LookupName("STAT.Beam_MTR")] [ENI2Validation] + [DataMember] public double? Beam_MTR { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] [LookupName("STAT.GrossTonnage")] [ENI2Validation] + [DataMember] public int? GrossTonnage { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE_NOPORT)] [MaxLength(5)] [ENI2Validation] + [DataMember] public string PortOfRegistry { get; set; } [ShowReport] @@ -80,6 +91,7 @@ namespace bsmd.database [MaxLength(100)] [ENI2Validation] [Validation(ValidationCode.INVALID_NUMBER_CHARS)] + [DataMember] public string InmarsatCallNumber { get; set; } /// @@ -88,6 +100,7 @@ namespace bsmd.database [Validation(ValidationCode.NOT_NULL)] [MaxLength(1)] [ENI2Validation] + [DataMember] public string TransportMode { get; set; } [ShowReport] @@ -110,42 +123,49 @@ namespace bsmd.database [LookupName("STAT.ShipType")] [MaxLength(5)] [ENI2Validation] + [DataMember] public string ShipType { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyName")] [MaxLength(100)] [ENI2Validation] + [DataMember] public string ISMCompanyName { get; set; } [ShowReport] [Validation(ValidationCode.STRING_EXACT_LEN, 7)] [MaxLength(10)] [ENI2Validation] + [DataMember] public string ISMCompanyId { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyStreetAndNumber")] [MaxLength(100)] [ENI2Validation] + [DataMember] public string ISMCompanyStreetAndNumber { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyPostalCode")] [MaxLength(24)] [ENI2Validation] + [DataMember] public string ISMCompanyPostalCode { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyCity")] [MaxLength(100)] [ENI2Validation] + [DataMember] public string ISMCompanyCity { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyCountry")] [MaxLength(100)] [ENI2Validation] + [DataMember] public string ISMCompanyCountry { get; set; } [Browsable(false)] @@ -159,15 +179,18 @@ namespace bsmd.database [LookupName("STAT.NetTonnage")] [ENI2Validation] + [DataMember] public double? NetTonnage { get; set; } [LookupName("STAT.RegistryDate")] [ENI2Validation] + [DataMember] public DateTime? RegistryDate { get; set; } [LookupName("STAT.CertificateOfRegistryNumber")] [MaxLength(35)] [ENI2Validation] + [DataMember] public string CertificateOfRegistryNumber { get; set; } [JsonIgnore] diff --git a/nsw/Source/bsmd.nsw.service/IService.cs b/nsw/Source/bsmd.nsw.service/IService.cs index 762cfbb0..56892617 100644 --- a/nsw/Source/bsmd.nsw.service/IService.cs +++ b/nsw/Source/bsmd.nsw.service/IService.cs @@ -1,11 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using bsmd.database; +using System; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; -using System.Text; -using bsmd.database; namespace bsmd.nsw.service { @@ -13,9 +10,14 @@ namespace bsmd.nsw.service [ServiceContract] public interface IService { - + [ + WebInvoke( //Method = "GET", + BodyStyle = WebMessageBodyStyle.Wrapped, + RequestFormat = WebMessageFormat.Json, + ResponseFormat = WebMessageFormat.Json)] + // ,UriTemplate = "pasttrack/{mmsi}/{mins}")] [OperationContract] - NSWEntry[] GetData(string poc, DateTime? from , DateTime? to); + NSWEntry[] NSWData(string poc, string from , string to); } diff --git a/nsw/Source/bsmd.nsw.service/Properties/AssemblyInfo.cs b/nsw/Source/bsmd.nsw.service/Properties/AssemblyInfo.cs index 535d17ae..c9adb439 100644 --- a/nsw/Source/bsmd.nsw.service/Properties/AssemblyInfo.cs +++ b/nsw/Source/bsmd.nsw.service/Properties/AssemblyInfo.cs @@ -1,36 +1,7 @@ using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. [assembly: AssemblyTitle("bsmd.nsw.service")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("bsmd.nsw.service")] -[assembly: AssemblyCopyright("Copyright © 2021")] -[assembly: AssemblyTrademark("")] +[assembly: AssemblyDescription("WCF Service to expose some nsw message classes to Wetris")] [assembly: AssemblyCulture("")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ac61d284-d3c1-4139-86a1-83459dc1c4e0")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] diff --git a/nsw/Source/bsmd.nsw.service/Properties/Settings.Designer.cs b/nsw/Source/bsmd.nsw.service/Properties/Settings.Designer.cs index 0dfe6a24..014e5588 100644 --- a/nsw/Source/bsmd.nsw.service/Properties/Settings.Designer.cs +++ b/nsw/Source/bsmd.nsw.service/Properties/Settings.Designer.cs @@ -25,7 +25,8 @@ namespace bsmd.nsw.service.Properties { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] + [global::System.Configuration.DefaultSettingValueAttribute("Initial Catalog=nsw;Data Source=192.168.2.24\\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;P" + + "ersist Security Info=False;Connection Reset=false")] public string ConnectionString { get { return ((string)(this["ConnectionString"])); diff --git a/nsw/Source/bsmd.nsw.service/Properties/Settings.settings b/nsw/Source/bsmd.nsw.service/Properties/Settings.settings index 32171ff5..d47b1bed 100644 --- a/nsw/Source/bsmd.nsw.service/Properties/Settings.settings +++ b/nsw/Source/bsmd.nsw.service/Properties/Settings.settings @@ -3,7 +3,7 @@ - + Initial Catalog=nsw;Data Source=192.168.2.24\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;Persist Security Info=False;Connection Reset=false \ No newline at end of file diff --git a/nsw/Source/bsmd.nsw.service/Service.svc b/nsw/Source/bsmd.nsw.service/Service.svc index 6a4eb2b2..4651ed86 100644 --- a/nsw/Source/bsmd.nsw.service/Service.svc +++ b/nsw/Source/bsmd.nsw.service/Service.svc @@ -1 +1 @@ -<%@ ServiceHost Language="C#" Debug="true" Service="bsmd.nsw.service.Service1" CodeBehind="Service.svc.cs" %> \ No newline at end of file +<%@ ServiceHost Language="C#" Debug="true" Service="bsmd.nsw.service.Service" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> \ No newline at end of file diff --git a/nsw/Source/bsmd.nsw.service/Service.svc.cs b/nsw/Source/bsmd.nsw.service/Service.svc.cs index 08238756..d007e35e 100644 --- a/nsw/Source/bsmd.nsw.service/Service.svc.cs +++ b/nsw/Source/bsmd.nsw.service/Service.svc.cs @@ -5,21 +5,29 @@ using System.Collections.Generic; namespace bsmd.nsw.service { - // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together. - // NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging. public class Service : IService { private readonly ILog _log = LogManager.GetLogger(typeof(Service)); - public NSWEntry[] GetData(string poc, DateTime? fromDate, DateTime? toDate) + public NSWEntry[] NSWData(string poc, string fromDateString, string toDateString) { - List entries = new List(); + List entries = new List(); + + DateTime? fromDate = null; + if (DateTime.TryParse(fromDateString, out DateTime fromDateParsed)) + fromDate = fromDateParsed; + DateTime? toDate = null; + if (DateTime.TryParse(toDateString, out DateTime toDateParsed)) + toDate = toDateParsed; + + _log.InfoFormat("Received request for {0} between {1} and {2}", poc, fromDate.HasValue ? fromDate.Value.ToString() : "?", toDate.HasValue ? toDate.Value.ToString() : "?"); if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString)) { // add search criteria if (!poc.IsNullOrEmpty()) - { + { + Dictionary filterDict = new Dictionary(); filterDict.Add(MessageCore.SearchFilterType.FILTER_PORT, poc); uint? from = null, to = null; @@ -35,31 +43,35 @@ namespace bsmd.nsw.service filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from?.ToString() ?? "", to?.ToString() ?? "")); int? resultLimit; - int? expectedResultNum = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetNumCoresWithFilters(filterDict); + int? expectedResultNum = DBManager.Instance.GetNumCoresWithFilters(filterDict); if ((expectedResultNum ?? 0) > 100) resultLimit = 100; else resultLimit = expectedResultNum; - foreach(MessageCore core in DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoresWithFilters(filterDict, resultLimit)) + foreach(MessageCore core in DBManager.Instance.GetMessageCoresWithFilters(filterDict, resultLimit)) { NSWEntry entry = new NSWEntry(); if(core.ETA.HasValue) entry.ETA = core.ETA.Value; entry.IMO_ENI = core.IMOENIDisplay; entry.PoC = core.PoC; - - foreach(Message message in DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessagesForCore(core, DBManager.MessageLoad.EXCEL)) - { - if ((message.MessageNotificationClass == Message.NotificationClass.AGNT) && (message.Elements.Count > 0)) - entry.AGNT = message.Elements[0] as AGNT; - if ((message.MessageNotificationClass == Message.NotificationClass.NOA_NOD) && (message.Elements.Count > 0)) - entry.NOA_NOD = message.Elements[0] as NOA_NOD; - if ((message.MessageNotificationClass == Message.NotificationClass.STAT) && (message.Elements.Count > 0)) - entry.STAT = message.Elements[0] as STAT; - if ((message.MessageNotificationClass == Message.NotificationClass.INFO) && (message.Elements.Count > 0)) - entry.INFO = message.Elements[0] as INFO; - } + + Message agntMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.AGNT); + if ((agntMessage != null) && (agntMessage.Elements.Count > 0)) + entry.AGNT = agntMessage.Elements[0] as AGNT; + + Message noanodMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.NOA_NOD); + if ((noanodMessage != null) && (noanodMessage.Elements.Count > 0)) + entry.NOA_NOD = noanodMessage.Elements[0] as NOA_NOD; + + Message statMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.STAT); + if ((statMessage != null) && (statMessage.Elements.Count > 0)) + entry.STAT = statMessage.Elements[0] as STAT; + + Message infoMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.INFO); + if ((infoMessage != null) && (infoMessage.Elements.Count > 0)) + entry.INFO = infoMessage.Elements[0] as INFO; entries.Add(entry); } diff --git a/nsw/Source/bsmd.nsw.service/Web.config b/nsw/Source/bsmd.nsw.service/Web.config index 5ee312a8..c26d9d92 100644 --- a/nsw/Source/bsmd.nsw.service/Web.config +++ b/nsw/Source/bsmd.nsw.service/Web.config @@ -1,33 +1,44 @@ - + - -
+ +
- + - - + + - + + + + + + + + + + + + - + - + @@ -37,12 +48,35 @@ --> + + + + + + + + + + + - + Initial Catalog=nsw;Data Source=192.168.2.24\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;Persist Security Info=False;Connection Reset=false + + + + + + + + diff --git a/nsw/Source/bsmd.nsw.service/bsmd.nsw.service.csproj b/nsw/Source/bsmd.nsw.service/bsmd.nsw.service.csproj index 4b9e4bea..f32c9ec8 100644 --- a/nsw/Source/bsmd.nsw.service/bsmd.nsw.service.csproj +++ b/nsw/Source/bsmd.nsw.service/bsmd.nsw.service.csproj @@ -68,6 +68,15 @@ + + Properties\AssemblyProductInfo.cs + + + Properties\AssemblyProjectInfo.cs + + + Properties\AssemblyProjectKeyInfo.cs + True True @@ -83,6 +92,7 @@ + SettingsSingleFileGenerator diff --git a/nsw/Source/bsmd.nsw.service/log4net.config b/nsw/Source/bsmd.nsw.service/log4net.config new file mode 100644 index 00000000..f5a35f5b --- /dev/null +++ b/nsw/Source/bsmd.nsw.service/log4net.config @@ -0,0 +1,22 @@ + + +
+ + + + + + + + + + + + + + + + + + +