From 44cec6dd9f4a6dbbdec2b8dfdc192a4560c77bd5 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sun, 1 Oct 2017 14:10:09 +0000 Subject: [PATCH] Zwischenstand - Validierungseditor und Validierungsattribute --- .../Controls/ConditionGroupControl.xaml.cs | 10 ++- .../Controls/ValidationConditionControl.xaml | 34 ++++++++ .../ValidationConditionControl.xaml.cs | 49 +++++++++++ ENI-2/ENI2/ENI2/ENI2.csproj | 7 ++ .../ENI2/EditControls/EditRulesDialog.xaml | 2 +- .../ENI2/EditControls/EditRulesDialog.xaml.cs | 5 +- .../ENI2/Properties/Resources.Designer.cs | 36 ++++++++ ENI-2/ENI2/ENI2/Properties/Resources.resx | 12 +++ Stundensheet.xlsx | Bin 34518 -> 34564 bytes nsw/Source/bsmd.database/AGNT.cs | 11 ++- nsw/Source/bsmd.database/ATA.cs | 2 +- nsw/Source/bsmd.database/ATD.cs | 2 +- nsw/Source/bsmd.database/BKRA.cs | 2 + nsw/Source/bsmd.database/BPOL.cs | 2 + nsw/Source/bsmd.database/BRKD.cs | 2 + nsw/Source/bsmd.database/CREW.cs | 13 ++- nsw/Source/bsmd.database/CallPurpose.cs | 2 + nsw/Source/bsmd.database/Customer.cs | 10 +++ nsw/Source/bsmd.database/HAZ.cs | 19 ++++- nsw/Source/bsmd.database/IBCPosition.cs | 13 ++- nsw/Source/bsmd.database/IGCPosition.cs | 8 ++ nsw/Source/bsmd.database/IMDGPosition.cs | 34 ++++++++ nsw/Source/bsmd.database/IMSBCPosition.cs | 9 ++ nsw/Source/bsmd.database/INFO.cs | 12 ++- nsw/Source/bsmd.database/InfectedArea.cs | 2 + nsw/Source/bsmd.database/LADG.cs | 8 ++ .../LastTenPortFacilitiesCalled.cs | 8 ++ .../bsmd.database/MARPOL_Annex_I_Position.cs | 8 ++ nsw/Source/bsmd.database/MDH.cs | 27 +++++- nsw/Source/bsmd.database/MessageCore.cs | 12 +++ nsw/Source/bsmd.database/NAME.cs | 1 + nsw/Source/bsmd.database/NOA_NOD.cs | 9 ++ nsw/Source/bsmd.database/PAS.cs | 13 +++ nsw/Source/bsmd.database/POBA.cs | 9 ++ nsw/Source/bsmd.database/POBD.cs | 9 ++ nsw/Source/bsmd.database/PRE72H.cs | 13 ++- nsw/Source/bsmd.database/PortArea.cs | 5 ++ .../bsmd.database/PortOfCallLast30Days.cs | 4 + .../PortOfCallLast30DaysCrewJoinedShip.cs | 1 + nsw/Source/bsmd.database/PortOfItinerary.cs | 3 + nsw/Source/bsmd.database/ReportingParty.cs | 14 +++ nsw/Source/bsmd.database/SEC.cs | 31 +++++-- nsw/Source/bsmd.database/SERV.cs | 3 + nsw/Source/bsmd.database/STAT.cs | 20 +++++ nsw/Source/bsmd.database/STO.cs | 5 ++ .../bsmd.database/SanitaryMeasuresDetail.cs | 3 + ...vitiesDuringLastTenPortFacilitiesCalled.cs | 8 ++ .../bsmd.database/StowawaysJoiningLocation.cs | 1 + nsw/Source/bsmd.database/SubsidiaryRisks.cs | 1 + nsw/Source/bsmd.database/TIEFA.cs | 1 + nsw/Source/bsmd.database/TIEFD.cs | 2 + nsw/Source/bsmd.database/TOWA.cs | 25 +++++- nsw/Source/bsmd.database/TOWD.cs | 20 ++++- .../bsmd.database/ValidationAttribute.cs | 16 ++++ .../bsmd.database/ValidationCondition.cs | 80 +++++++++++++++++- nsw/Source/bsmd.database/WAS.cs | 6 ++ nsw/Source/bsmd.database/Waste.cs | 8 ++ .../WasteDisposalServiceProvider.cs | 2 + 58 files changed, 644 insertions(+), 30 deletions(-) create mode 100644 ENI-2/ENI2/ENI2/Controls/ValidationConditionControl.xaml create mode 100644 ENI-2/ENI2/ENI2/Controls/ValidationConditionControl.xaml.cs diff --git a/ENI-2/ENI2/ENI2/Controls/ConditionGroupControl.xaml.cs b/ENI-2/ENI2/ENI2/Controls/ConditionGroupControl.xaml.cs index 0d630dd8..d073fbb4 100644 --- a/ENI-2/ENI2/ENI2/Controls/ConditionGroupControl.xaml.cs +++ b/ENI-2/ENI2/ENI2/Controls/ConditionGroupControl.xaml.cs @@ -14,17 +14,23 @@ namespace ENI2.Controls /// public partial class ConditionGroupControl : UserControl { + private ConditionGroup _conditionGroup; + public ConditionGroupControl() { InitializeComponent(); Loaded += ConditionGroupControl_Loaded; } - public ConditionGroup ConditionGroup { get; set; } + public ConditionGroup ConditionGroup + { + get { return this._conditionGroup; } + set { this._conditionGroup = value; this.DataContext = value; } + } private void ConditionGroupControl_Loaded(object sender, RoutedEventArgs e) { - this.DataContext = this.ConditionGroup; + } } } diff --git a/ENI-2/ENI2/ENI2/Controls/ValidationConditionControl.xaml b/ENI-2/ENI2/ENI2/Controls/ValidationConditionControl.xaml new file mode 100644 index 00000000..66686e19 --- /dev/null +++ b/ENI-2/ENI2/ENI2/Controls/ValidationConditionControl.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + diff --git a/ENI-2/ENI2/ENI2/Controls/ValidationConditionControl.xaml.cs b/ENI-2/ENI2/ENI2/Controls/ValidationConditionControl.xaml.cs new file mode 100644 index 00000000..d889fd43 --- /dev/null +++ b/ENI-2/ENI2/ENI2/Controls/ValidationConditionControl.xaml.cs @@ -0,0 +1,49 @@ +// Copyright (c) 2017 schick Informatik +// Description: Plugin Control für eine Validierungsbedingung +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +using bsmd.database; + +namespace ENI2.Controls +{ + /// + /// Interaction logic for ValidationConditionControl.xaml + /// + public partial class ValidationConditionControl : UserControl + { + private ValidationCondition _validationCondition; + + public ValidationConditionControl() + { + InitializeComponent(); + Loaded += ValidationConditionControl_Loaded; + } + + private void ValidationConditionControl_Loaded(object sender, RoutedEventArgs e) + { + this.comboBoxOperator.ItemsSource = Util.EnumHelper.GetAllValuesAndDescription(typeof(ValidationCondition.ConditionOperatorEnum)); + } + + public ValidationCondition ValidationCondition + { + get { return this._validationCondition; } + set { this.gridContent.DataContext = value; this._validationCondition = value; } + } + + } +} diff --git a/ENI-2/ENI2/ENI2/ENI2.csproj b/ENI-2/ENI2/ENI2/ENI2.csproj index 08aa1b97..e6ea1f52 100644 --- a/ENI-2/ENI2/ENI2/ENI2.csproj +++ b/ENI-2/ENI2/ENI2/ENI2.csproj @@ -181,6 +181,9 @@ RuleControl.xaml + + ValidationConditionControl.xaml + @@ -354,6 +357,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/ENI-2/ENI2/ENI2/EditControls/EditRulesDialog.xaml b/ENI-2/ENI2/ENI2/EditControls/EditRulesDialog.xaml index e3ee59af..a6642f74 100644 --- a/ENI-2/ENI2/ENI2/EditControls/EditRulesDialog.xaml +++ b/ENI-2/ENI2/ENI2/EditControls/EditRulesDialog.xaml @@ -9,7 +9,7 @@ xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:p="clr-namespace:ENI2.Properties" mc:Ignorable="d" - Title="{x:Static p:Resources.textEditRules}" Height="410" Width="800" WindowStyle="SingleBorderWindow" Background="AliceBlue"> + Title="{x:Static p:Resources.textEditRules}" Height="410" Width="800" WindowStyle="SingleBorderWindow" Background="AliceBlue" Icon="/ENI2;component/Resources/mail_forward.png"> diff --git a/ENI-2/ENI2/ENI2/EditControls/EditRulesDialog.xaml.cs b/ENI-2/ENI2/ENI2/EditControls/EditRulesDialog.xaml.cs index e14ef57b..788ecef1 100644 --- a/ENI-2/ENI2/ENI2/EditControls/EditRulesDialog.xaml.cs +++ b/ENI-2/ENI2/ENI2/EditControls/EditRulesDialog.xaml.cs @@ -21,6 +21,7 @@ namespace ENI2.EditControls private ConditionGroup rootCondition; private ObservableCollection rootGroupList = new ObservableCollection(); private ConditionGroupControl groupControl = new ConditionGroupControl(); + private ValidationConditionControl vcControl = new ValidationConditionControl(); public EditRulesDialog() { @@ -163,7 +164,9 @@ namespace ENI2.EditControls else { // Condition - + this.groupBoxConditionDetails.Header = Properties.Resources.textValidationCondition; + this.vcControl.ValidationCondition = (ValidationCondition)treeViewRules.SelectedItem; + this.groupBoxConditionContainer.Children.Add(this.vcControl); } } } diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs index 1f30b97b..9804080c 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs +++ b/ENI-2/ENI2/ENI2/Properties/Resources.Designer.cs @@ -1763,6 +1763,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Failure message. + /// + public static string textFailureMessage { + get { + return ResourceManager.GetString("textFailureMessage", resourceCulture); + } + } + /// /// Looks up a localized string similar to Fax. /// @@ -1781,6 +1790,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Field name. + /// + public static string textFieldName { + get { + return ResourceManager.GetString("textFieldName", resourceCulture); + } + } + /// /// Looks up a localized string similar to First name. /// @@ -4004,6 +4022,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Validation condition. + /// + public static string textValidationCondition { + get { + return ResourceManager.GetString("textValidationCondition", resourceCulture); + } + } + /// /// Looks up a localized string similar to Valid exemption. /// @@ -4022,6 +4049,15 @@ namespace ENI2.Properties { } } + /// + /// Looks up a localized string similar to Value. + /// + public static string textValue { + get { + return ResourceManager.GetString("textValue", resourceCulture); + } + } + /// /// Looks up a localized string similar to Vehicle licence plate. /// diff --git a/ENI-2/ENI2/ENI2/Properties/Resources.resx b/ENI-2/ENI2/ENI2/Properties/Resources.resx index 7b56afd7..aafe21db 100644 --- a/ENI-2/ENI2/ENI2/Properties/Resources.resx +++ b/ENI-2/ENI2/ENI2/Properties/Resources.resx @@ -1495,4 +1495,16 @@ Group + + Failure message + + + Field name + + + Validation condition + + + Value + \ No newline at end of file diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index 7c6361222f5f702b8342c1e25468b54e0c6a5095..bc48f86d66d4833fc4988e0e120814305f182457 100644 GIT binary patch delta 19059 zcmXVXV_;of({|9tw%r(wt)^*g+qRvZG`4LuMuQXEXl&bQ8aw&U{k-3w^W)5#H8X2w z)-^MG@5LCX;8>_SYeEEg{H$CXAqWWSh$L4+MnI0`YspyL%a>&W*C+K9!ex9UkcWHT zxbrBEwz8FsS-X$_+Yj@h2-9pbucRVanL|PRj4)HSpQ6|M9v{~aQ+fJt?~kt+dvj@* z1|AwqwFZLzULUtN!z|stAJ4+?4;#Xy2Hns1*Z&TV!W0w?NV~ z3b=i3cIXxo>gvEiH0bjCcwS0Nt997wc)EXI8lFPks>$sV@=q`j5)cIZJrh3s-VgpX z*G|Qu3Qytsz2E-o?%M2rdi{4bem2;*cErS$E9Cq5_jqQC#t z{q}ry#;y7C>L1lQg*pYiT$~Aa1JAE&fb8q-)!c9zF!2Md=j;20f&bI>?d!ienw_@? zdtXn~wVRJmH+jNcfdBLT?aqPpM5h)BhqF*8ZzsCUW!KA7(bx2fw}qR%uuFrFR-czW z&ldl;!wnA?ZF zcwPX61pVI6UcwaOKDZXzusoJ#b5&&CZf|d!M|TbOS8ZCKnpb9BZ^9l}NC7~%YF!@n z-|5;%7OCYssaGcVJ$vn>{GhXG!e7EByOx?a@Ngb`t0) zcT|IaOYlUvuP%}+EJ)t1z5IUluuIVS$rt49_0RVA@|TtR|+^$g$)dyY9|Hglt? zy;1g9!o2vyIin}zcAE0C)8eeNHm|mmRWf>5<@vC2Ge=sxkDLa2xxX_aU}@|d92fX7PuvGSH(e}1f zNO>8^wpyP~d-NgU!5aKdW3}ObfuA_H3U5=Ajp_Ur{T6GRjjd??<|x>`jv)D1`X#m- zX=Lq5!SGO_ADE3XwtmH~zdkCEgG2;Q^_zFB&1(aK{j_(N6`bx4yMzNn-mD+0zRZ!` z?raFZ-3h07YeuT`ug4p>tDDB#JxZpI9{@}WHBGt zv|%!@T-tuU8S!@$QzPp^6kdLEE5hE1G(vf%TVY5Z`{sqkY~J#NZO5| zhj&mh_8f+UeWVNFZU($x#HOvX2&aFf7X05QK^S8rN#ZAz2T9sCimBgB=5uJnoI3=2 z6C_u^R1{P8eoFCNw^yjc*bPqaIi)3+Y}oofEzp&XIrmaAmbd3E zAZR*I0Qg08>s2gmw?45{C#M>at#++Ciodp!voz)q}5}vP#|0aM;Sbv>n{;a_N z<3J@51EI#tEGplZ;N7oPO*<@fzlg`PGnA2Pi;(kclrxUsFJ0>Y3-K~s(4mvbFmeH6 zATe^8`|IhxpK{DPzHv5|{H$Qaofx~u1D-1>uHT_i6YrOdvF15LMA@H>frb2{F{fTC zqW)}6^v|dmV#ESEzlgJb=Ey_GH4^*eo7YwZDuHw8?Eo~5{hufMoMWX0u+(# zXo$l+f47-O`A;GR#(#xN^j(i69+^X^X*myIDx+GL@U-nR(~TPsu$M%D9+vRsC>5sI zzXnt=^6v6pjTEVG(~Smglh6$tLzO#3dYW^%?4Q7jsKpXpeUFVC=}u~q82gQPHSu)z zXKyn4-bD(FDQVP;*~{DKFYLsvC-ARx0WqHPtX3f#Aw+6|>m?`4-hCsMy~uTN!&jVd z>pZmIld~r6i5oN;C4DV8+0Ua4QMNjHF0LSOUy<_dHrA*3LU#gBwqZB)fpbs1y+=t@ zEf!2QI(O6O_yM{JYG?MijP#Y^@|v+qB{H86Jb+=T2vtXQ*?lAqSFQ>GB&62rk0nY~ z{l(1rk0iY01+zNhxfP>-C*O%`!$VRCGw+bVOK9vTJ;>>+ZpI&rLk}Z+L31`bpD%Yq zC~c?n$;xfx`W;X2i&=2I;7$@isQS=gCpjWrl<9+dSj~|g*YK85 zJmVQIQAcos`kQdSPzazBXV$~8XYz)2Ropz$ONrWDYbd@U*`hMkOpP_>g7!*e~inz9yuvDRdd9;a@x z1BZ-p4msu-l0X(r*;s;cPHcZ)gEn1f9IHvdnmG^GAfFiZA`n5uJ-}yec~R;2k66e= z#03+)xyBsU&xbg@U%O-nd;*$p8=|fU$2lZobuv*^;vo6+R*P|{1etG!? ze%Wz535|*bk|l|SiUKksNtx;tQanlU3ppfAlED{3Na!S=FMQx%&=+fM26qb`hp6S*-$_*t0C-(lIXCg!OoZ`?DZ>CShW~MnDA-?{NfC;0`Gxq=fAx8X|aX%cf!(q6kqGVq*#w& ztn{IG`cIqQ1_uOpa6%wi*l?VdIqw^WakpmQsfT#AW)RSMI#7VF>9{Sfl6~^&5vz=M>6ZMs2zwb}2ZU^)@C-Sfc*qhJ?0L?Pg#=E1R1g{5oa@`?(7RZc5f%>1lBw_h=! zqLDZ1H|k#IxN)7(&&~dsSSw@!sZg##cEYf`6MFBN2ckR@EY*^3L-lU=?ecDI(Q_P> zp}mJ&!6m{{Xdmr;)KA<80s8Mom7@yk*1f>4Waai_wl zHIo1z&q-zM+ONha_#_jRKGPrUcCqUa6|;vU7d@=)+H}p$TAKXcx?Ft?1FZJ5f2??J z^R&2DUCz0(l2^+yj+SGN+$@@)cBufrAcHx35)*E)ZSE@P?h{p%zY)72!KZA}Oi42` zFC78W>jt?at^fP)bgsr(2jDEQO4x739`1eDSCGJAw0X*ThV(X~!)Uk=Oorlbp*a=F z^8mhOo!a_{|KNwsEjX$D{wmQ>0q)=!dWyxb}#a8EO`Oly?XP%F8^+*(i z?$Ut;OKAb7>wym$pfx4wxrd|Gb(@SR-}-Z1n2-}%jk@#&$s0Sf*)wwkTUd-d+qsrJ891>ux50&`$B=@@yDk$z0J1z|Wc5J*a-ud`Hjve9JOePEMX4k&)r%dj4894+ zEUNzcWNuuF+qp{3nu;%v{z8821*ul5pro6wkdqeHu!stK=ztvG!o}cnVGzCFcJ_;E z9O?)G&e)(~CTb(EutkWdXJ{kRsR~l}b1~pV=q z7Ans{*$wcHRF0CtkDV^VO+a)xYfoiJ$sZ>>5}B*8ETIXC_S8?N z6qS<8MjDnLd$4JzUpFO*Yg4leHPMN?E9EKaGu-W*G+NSFyc~eiajtON9GqtO=!`df zthk$Ok_rU@uO#6okEtcuAD-fjIsQuH&2nJ{0kj$!E-4og=RuGzKC}YIVJP`?9etd@ zJ+wyH{Nb+Ym#OE!?OR(Rj1oVb(9=vMYC&IuJNd+?I0q5~7FsKq_Qpt|(P|KjM>zL_ z?h+Z7K;_*PJo0BOQthFV7r2JcnXQmY|3c09O7y$0O@< z-fg#r8e*&_yVY3R91y6VF32a?WY$en{m}YXpVfp;*b*9X>%~e=n6S>8-RY~UKtCJ1 zV;cKb&bUWl^xOYWP6i0>Y&-7l;(3CVXhiT-JP8}&_r0Hon`GQhG8ge5j7X`A5!P!f zyQ?>cE&W`fEkW=!1r3%FU{8^8==yQqi@{8R*#}*nofs|DEoh?m|y0A;=qQ5>biE@mIB7UP{hbJToLurU9Odp2rdvc3h z=82iSTC`YC;YJ-qD&IP6ZLS z85~rRqM2%#;Hf~505uJ0h`vbmve=rQ+l=&g{6!i6Qjcu8u$ly4vG4xjFIY*^!Q~sq`SWCL9Ed5d4LwoYEN8mTF^*?{A|Y|RIzF9MDb`Rwee==@fXiIP zQHeVAaxIw<*YkL|!_e$MvJ7iz4wyV2H>Zaw!}U4Mw3SO-LC_S_Px$bFK4_uU`F6l- zzF|eHWhjFdqKmYY75i@QS7({vJcgi7EH<*b#rPGbg>p#sx3M>#ABrusYalsvRUl_A zYRn+2gH(ggFnE#Qs=dQEVDJ#X{V z0x2c?t!b<0l#@B7FuFK_zNjOZ3W8o_gpNh>&gWJ6Jp?0awWr!zQiLpP`E|daGpdo>4GiauL^e3*Fj!yc0dl zmwq7%o&d6!UdLTWHq?{?Iy@IDDJ&H+T%_45n&+C>kH5Ake#6Bx&BTft&5}KR(Qc19 zJ194xuCbfj&CV_)@-6Tt-IIvbAyjM|3%BDt{|;)$wlU}>Ve^+ zqHcATUqr3uGzgJ2J5fISs;?$m8}tY9s2JnG(Fm~Aa*J~Vof_NC2!?--{Jy>$(qz`( z|Tw|*|UW$Bh{s0>krJr%6{ z4xpK4!pUyj04bBWWx%bU`j5Wd7v27K)c9S(s3RvPok_#SQMG$|vWyN&3kI2og(&Fc ze3N54gEv-lx`jmo_d42BFj~}^;OV70uS@Xaf)nGL)380wi|X^f315gD!&_Bi%ZA2* zD(OKmW1NMKDQTLH43$lS`y*AcXygq7KyzKDHCF$x=-k$UaK^d8BsSR|r!uWRIX>*u zn%<*O`U>3yL-rVD3r^bWix&Uy0<#6BHeRf}b&MJv^I?c;U9rR1Vp1y~Hv2t+6wIJo zeJ>no+wBVbSr=rNGN!ROK@kQG{cCQ?R@_n{JSLs{al6$xKlzv6YhfuNOuKRBfQ{LB z);Y5B$d%~;sgo2l<}~&D^3ee4fh~KSg3dhYpH!!V{u+xQEDfdX#UhZc*2nL>FQ1wp zOiFoLe9^2~MJ;+viLebgYx0c89_gFRx};HDuVf%?~Hc{CfRU_iQZJ1~0up9R(Vz>PBuL z1nrg3M?&z$Vx*rkgF8^&z_i9?l4_pbl_{g!@BIl}3|f!33^ge)Yqh`tG2UK*>=`y1 zhkiFzR?E}%QCpNC@;=p)0Yr!DRq#fPg6FhrU-!)f8s>a%bv^9Z5AjK~xlB(WD?yAR z3`=M(kjlOm*xQB78b55;*p}$~C7B58Zvz%qm@&`Xf+KCh>xwRICtgiW$$kD?Vg84{ zP105@8vZ|<+Vxg|AzQd}tRH33jHU*uA?Itw7`QDT5TPk0Ue8XMY?t0^%X5Qt4b}uT zMsO@#8yRMZV($K99i(i8KKUu(MaRY=eepr(u&bpn-ix5Z*y+P`@{c2G!tAn+gsB(1 zWon4{kYXpg$x7rQ2gbFSManbflJP$Wdc)|CJ_bKHr@3N)P^$deK(u5BC9-p^Kt&8< z|A|zTUk&$tu4i1ojq--XGHL?{r*n7!^~uXn4Aqpe^1%N7fW zsN_7bRb%XV3y2;w_z=pz(CUO|g!yJQFuM2)B3b;=W8Oz3X5~@Ka_kFloVwrVM~2iY z!?vf+HZzh0g>fM@lGKEyARm(QgfsqE!(`MxaUu5!Nx$b*Gu~zRJkKv9NrewEByJUn+$wr>?nk=Gl_iG;8zH5bLkXYvE6DH#@lYq+^6!cwmHE=QWCm2qVapFAF=yPA&tYPg~ zzyPP|1tb_a(8zO-egZidOR|&tETgdsc5^;u&}~y<0hGB(!nM6{r{jP*8*;iQv`wOtQgkKm3|!k-p)A~F3V`YPY}6waJ=Dv^@tNPHW-1= zje8$<8>79QbiSjTT}=v(&06&v@tOM(*{!1Wz3AwI^;7=R;vtH18LGWQWQ>!Dk)WU< zxx*5uJ6r_Leu3*8QwwCc(KE!Ul=%Vl#8?q6w795|XYzN5q11V+)k(xz92k~v&y-M4 z47Fhum~~O(=-RXXod;pD_S5}Bx64(8)|uSvPj!P48g>2)Ickm)+&u^n|4}k=qcC1Z z)9Ce{{m(GAoA1sW)o_Yb0d3bkq}MQoS@w}dUGSqZ`muQsikJ195;ej_t$i0TnP&pI ziO6zM8~<&eQn1ICinA{Hi9m9^48{`O{7f^yJZ_#T++L|Hf+>o1n!J%a&|^bdu0>YH z{ASpivOMB|!T{3>f8o1MRWjyREWaYKZd?{Ui`vjLtYtZ~?S@ZT!GO6<=q4RM4#>>Z zxiGZQ9_!JjzT}0d;7Xk0J%f|V&5gv-!vD;&OY<8vZinbwSj&-FSyO2P)SsoY9+2R+g zUOW`H-g4Yagqldzs1>gauS(`759ak|+xmjV&4Cjf`zd1zR-ifEkQ z6y#VxOa`8u|2Eu!Hameh84m|k>b_3Y`vwY65h1A`P4z-~#DTk$D{e&i4?M;m+50<7 z1f0<9d;KW`vua~!QWFdmu=B2vOtYN`XuU{3{`{_uz?W78r9q&I?=`c|OJE4NvF!e@czT|ym2L$0- zRJ!{%`RU>Wt5gKIo@J0Iso<&{nsLT+TWWaaoRJglN8myqAA)tp-sPAt<21D?Pg%WT zA}BR%KIlQJjCN*t?c`)haV9RQxn*Q`09vMVD?={|lfOH}WhyDzr^~dySJc>}jql3~ zcTxyrMLGx|BQO0#+h=!90-}XPf!JB#`7{ayCG-85pxMUQVjV;Omc_RnuL6s;1L^_9 zNP2CnU%gVM$wJ7`6_WU1nQmUAw1NxdSRDhy0?9v(Dn3`DB4Lpb)ldR?;&5S>=U%$V zrcj^!^0R$x=g^7B&X1r!$=4B9=|f|Y5!HAF_MQXD^P@N^Pk1( zm^+|Po6k5!Ao~iUIJZH;L$ZAVM^2n*>|iI@y!mDK|YZvRV1Eazcc^xH?=M-Cj)V z_`DCQl@>T?yJ>F+3R`4?<3Pbj21RsW>pb~!SdB(^_X$@cCsZrk$p=T&jqvSL1b1(yas?+18Ji~6>fAC8aT38cnnN5yEeRt`>By|&Sn^*0U*-L8AqM*dFJ z$dPz=)0AKiDqg1keaak#v+;`UKRIp5eV3lxnjTrk;T0*Ieu)0+15vff&f|>t4cLd^ zU*Q(BWWky3lA17z0az=1Z(?RTi{FV>InZ%E|2Z0=mT>uScw*9f+g0P;Qeqe&9 zS@)PI4P}Nm_L&E4heSf}Hg$kEVuJ?i3&J1y)({oq?~RVyKi*pHSS_75=Y$lN^7@Ye z*q&2cE7oH)EP;v1zSM)Ve+`7?w~H${_BTrv8q9Pj%%jeBI>6W{oo1vz^^|fm zttJY@3T?`c_SzNs1wmmUxXQY;S*u6ppm}>Cz*r1eSW9VOYp?S}<`2Pdt&5?t_r?Eh z7gaE>p`7gi+LKa1Uw3#bh5+z(7)&IaH#j)Jw) zF@^bQbW?!}qSa!0Tu;j-H0cWc{SfeqAy!#*Ly0v`BA>wq2rtVlH8lOILPiIig*bS8TMKy~Di#j! z)LsH(`P$O7#`BJE0LR`+GJS}s=APs&5)Sj9Bm=zW&wZ19!c=Tm4SRW4Aw36=Ni6Hs z%4}s+Gz(yMh{`4Cmw^^DGW>La)3R z)rhHtV*(-k*h+#{UPCXgb#CvUm{@YLvWh&FvCeEtm=WI{ylazyWE-+1(q8czn6ak> zuF)CM&w}Ns!ARtW3j`3B)q(M((8WCbx^`9XXl7Q(Eo`KyjqnL5^w%dgWRkG|0YWx8 zJc7S@DH`gw)vOW#VHOMUip^5X@s;7xUZI9ng00H?rWC=nM1s~qevWk%3eiHK*j@uO z%XSKBhhBgXtc)BSj#lT5?D&18b@2v*e^3bmLIXM@9jzsrCf)2?b6ijby)-A9@wc8+ z&K_2B3!M@eU0KPXKhQb~CaDf-BM2tWW}Y)3bGOw3%-@`mW7=o4;G z4rP0QN!A!M$Da?qU-BG(>O}%V7M@(b;}sLaVq2x8Oj^-6n6DxSoI(C4Qy0~8JdTKS zwoMfpp>hdg_@~niv%SU$>W;;*FeV~Y+TIop;y3hrj1Q(W(>gPKGJB`b#R4$q#-h6W zn}N=Zz;f}vH;F1*lLGtqFe!&!OMD9ZVIAGZ!?5(zoRy~6>CvOG?^(=5`27tcgPPHb z?vh;6(Hefvrnbc59W1sgao-b>r z>zpb%&j)CeG!+j`ZMw&v$G^PL?;?XqB?O;Xf%aub`?X1KIIJOqDZ0~-VosbJuFRmX!rYo zELKp2AG4#j8d@v0HGI&5Cf>;Fk9dAg$)+zuXTLfz5Ct5!wc>kEiFh#4y1v-BS2zqT z|Dtc}frh=`0#E(o4K{3r%A_-M5Q#Dm_loF)_zcJsqY7Bco2y+6Yl+>x*DjcEOQ`b% zE81wB4D-NKUD*2-(WRMlMxw<-_o6dknR=?VN6f(Z|C1y(`OVyMP(m75_Nok9z0BMH z6EqJNWT@b`|E6Gm^o_sKv-PG7A;I3l-YvTe3x0*ePl5;(0WpLs0O14IdzEJ*>5>Yr@*k(ea}I|h16i@0x!H8AiH5@C&6wr%f&`` zirw`i)y+=dB9y(B>?c3?$;qI8*b-ZC+BfNriJ$vh5lj0hpl+{?jdknBh>=a$U}sOE|GwD4r8Tf~l7SVLZWUSt{4KM;AxB!nQY>^r$Cm4769V z0SjKghY|Q1%_V>}hVxWzkyx#{b(i4pMGn8wmLSzFhWyX5d?C)0GfJNHyoWQ@uO&tp zz0Jv2p{pjNJ9QK%o7Pe`f4gcBUP&MQ+I>5%N2eUX6s$#q1gk9WGKV=;y-%z%(#Mdy z!75V2@~g`inmxx1%+IVEGk6+#1BceJOh@}hP|UGf3TUZY|8~V`57e;7Aq>`*pru&U zi8lXDv-mR=$E872$i`IIVs#vzMgQ<~#`_ zyKW>FEkp?l^&1#-lCmpn8T~@`>w{)EYGYO+7+S33IBNIr^F~W|S1wz=3prT-5n!1mNJ6ZeV8g$j;K}POU3MOcx%x-5W7!i~qCN!odmE`X2tzA-Wd1`fHOksxy*| zdeZ8uyvekuX0KW7re!;^9MeTH@y8^K?FO|Sf%jzv1-%$uEGa=YqNg(lQQifkjgHWJ1|2SeAItTSKgd6zF!hyQ=Gw8j_EV7 ztgt|lF-Vb)N3(gQGZHa z0&x5#N?d;%8f0{Hf*T@~X|z+zF==)^y#$m3zk^pEK&e+_1}u7ndFaOkU>Qd(^gaL0 zXRJ=ryf4a_T#(8{UQwjU1ROVc!dGG|dNm&eAgbN^DwWMkkG<3hrK*qF+qB`$lo_;B zD^uu*19itjwP(&lYE!=2q?b^$JedRlRq8(nF5yO$88W^)g4@nWp`ywZMd~K7y4q6g ztc2EI(jts{PqUO#2w85i#|E9ES{DV z=Og=0ix7qzc3gv2=wj&2$;*>k(xxU__1HL2^q7qOKh6`l`6Fo@zeJGmuBSOmHV zmJm%%j>Svm*skrcR^%67vWmtp8s3rg#53 zAno{ql*}g&686IE#KAKm8+;K8o@tK_k$&oqBU}opj zRp&zn<<+)|3E+}2|0@Q{e+z!OFtc=%vB(&dhtMU3gA4+00~;rnAP@uWeQ{OI=a#;s z(UU+{E`Ac>qW(*#1aR?(7+N>gwMizI2==BZ2^Npmjtd%5O#Y0iKOG!(1s6{Xi(`3l zlwje$xDb*)P-D8t#evWZBALgliqNg!al?AKiz4$DJ1InLkb|eu<4a&3$#OS_uBM7x z4b5vXcY!TXtK@;g2{N3H8bsv-guGSApKZ$XVK6 zQI=;Th1I2Gn|ATngz-`aX5V%GDAvF>+NqC4fFk+4@t_$IRWqoo5-Z1XRpgy0J8|uZ z_qeK}ZO_8lmSD#ccB-7({PqmxL2BTO3)xo79MJosp#)9Nc3)q8_4PD8!LEr-1Nvau zG4=C?HuP?K>T;jmWcsIq0}yB@&CS$thL4G_PBmqv$!ccO;qjtY>tQ>$wlxWA^B+G6 zszznf^(By{dsNn!Huu~}XBU1h&@5BorU0E6SK%uLi5kQ2qY+L4LC zt8W`M7!gk4J6Ks>9V~8(*wj!*3*47-m^krrsj&`45#ew<2KGZq^L*+KUenu-p9HZu z@yI~g|77^fTUEf%_vzxSvKG~VH1Fg2N|>}8U}AqqCC%&Zd~JVybm;bb zx9WPot1LZ=1Ai$(qE90Po{GQUEtMXn9fifQ^le`Z=YhXgc}>eZsuk#b+B-h!1fMkW6Ac}hD<<9_R?myM-9++va*e(GkPgyhS3%lO}5 z_GfAtU}rr0v($(Q$)O$B;fff?!Ozbjh7WtapY0PITd{4vh!1@|kQoSZDF!O9Iy)~I z(W1P*9-K4wx(qnQ@AdAZ2$<}-RRQ*yhj2wBzoN*p{?Q)6_xsz%Ge=>EaoiQ&N56mH zpRrb>B0u}Bv+kJ7N741?(Kq%^zJd9Lh|z1^ykYbwu^AD=8e(RUFwSVzADFkBv#XEa zbB3IB_0uH6ve&~DSq-8AlnTI4Q@ZP_{8AGpHvofsipU71CA{xbm{3^!C;26lw@+;Z zxZg(h^kB|7=QlPl*}{!q@%!USc;k}^49xI$v?xd-%`zv7>PGfo8dvPT?l?uudEs=u zW(x3Yixn<;JNGdE#19qPHmap5mZ_Qk;frJDo7wQPb8&1t!3V(Kkgfoa7~>tAW<*CJ z{=M=o4Kv%}F{M#dV=f7E;C9PP7e&6HviVKt#oZNzj(f&|j`vO%(q^iNR|2K+RiYJp zbUITic1NVDpoY}l@aZRs`O)+=*=*z@5AYO265Uune*VWM%&at<3v~rPJ91elc~Rej z#Xt&O=fStI3Mi7@lb|jKFt2g;&`kLdW<8}ME(K}k%Bw5Al31KD~bneqX z<}q)I;M1R|&A05M%tO7sp%RNE2*VDSTJFhbXi@1V3xn!2A_-_%w{vMtLpDO7n_(Z= z9(i(fY#F5qJz702Cwz@$e~IV*=_p}D>j-WzcS-mHct0D; zNG2abr)Iu~M+E)_Q^DrlNWO0%+opUYbG?qv#yt0KOaGM7x%*f2o09cU*boVw)X+P* zdwCZ-JxjLIEC{#(zw^`l@EgZUB$kg4jin&2v#t9RgU8yde=Rc%XIgM+9k=fHnlAxp z96{`HJB_r;$*})Ao`>*b9|@>+G7|+=-=r0oH*TQf`elFvcVb^*ElTN~ySh%NSZj2j zyC{xL=w5R>b7to)(ie&GgmFBIAJG`s`2-lfJ=+TQP)-8x z1NL(q=E8t`wxLLKp`D%@Mc(0CIS#5CUf8+JM}b&<=jM2K0hdVF^?gaEQV*$w0PMuu zuz3I5DTRmF-<^Ns$-{&x_@8e{&KQv!44aIZo^IgCI_QYT$aGO>Ix}vMg#vwkzLN_~ z1w$K2mDXY{=2oCYNF?5WnK2?1#p_8WOpShE|Xl4X0SML9WkDw(Q!FY0(t{|QeX85D7wjSC2$rY$lZU?Rejx3%BLA{p~n@|FG6~`=h~+_p_7uLYs*^P zGN%mxCUN!S0qA-D7ZmR|@Yf#ZZH@duNx|kXAg`FNiXa2Eq8lN7z)ei%jKVo18urg0 zW74226fRDOxcjVSp;`mMf;0HOUkUxj2&&_Vs4+FddSJu+i0(_oj54)I?C!S2_c9a= zhDo+6r25|G+u;V*M8bVN-5xTy%x8!rY?hV*{$zwpw}Z59QrzqiY z+GfF6;RSjoh_0XCKrxAxs)L(P0-rIGdEHR!6m$}{iYxQ1+z$3>W7Q0Cp4?m0Sz@rC z+9cz5>LJQhX3*}9B#k6k3`%8W#MXwgfbQNbmD3BuCj?#$JaY#0M3O-w!ant$j@#j_ z1l)%ETbTy$MJ^fHlm^t-YZejyNPjf`r*LVA(+VCBkJ^`C?OVqb0Y7hOFdZD$3ObAi z*;CGdk1+GjH?fAzl?KzFW*vS9soh@rsk2+>@F{)e0$Ff5%Dn{DTJXLe&0fb}0iSbq zT7%jZGid4JeUpp7yj&RFuk_?7Cp6AQ_>yJEq5_ckRlfATvIXvu8e#9qxd! z^!s+7bIlnX&P#`_tnGiL%)ZxIe}TV*R{0~na6!oh?t#(VpR1f8lG`>XifNpzBM^u; zj~Fv7L`R`kCGbAp3X3IJC<6?4Wjgte!^|_^Fgw|fU&1!3bE6!Kgt57`&|P?j&NhCi zak&)@WD1(GEm2Z6yCQ5Az=u4dnu_s!QGj~Sz12Sb1G6?eBwL`440s8-X#t7Hh!|B_ zy%C{gcGGzK545vn;~1jhVKAA0h`(?^eLKJb&2jq?LvuT>>Y6xyS|EENu8rt|NHQ9i zMt3&FH?wYGqF3X^U^W?@ae~TPUOe8JIN)$HVo_PUI^AD=%9#L(C8HeN#Y|+iB2f?~ zP!uWHxw8{=t?|F57Kz0+Vgl_tQqId_I)Or=Wncc}LlI^0prx5SVUaN`t_hD^nof#B zW!2i$zQVVYud>XZKz+tB9$P!N7Zl?RK(3wCJS!A_1i$ppkuNFmT67eCcVBv#B!mV5Pn@Ap{O?JkXV%$ERF17eHQ5*y1T9Py(W2(c*CWhGzC z@2AbjIs_1{XUkn1x+V7z2ULC{q#+Ur;X*|d%*$Lg#@HJXO*{eVuo^_V3$1=(tbzj` z(8|YQ9A^aqhH-VxGXVo6>fSge&F?XL7^?mte3RP3em|Fu3Kj$O6HL~IA^qygwWx9P z+VR-H7yC%t9Et?H6S8BZT15seMGMp>C#v@igYTC|SHp~%c3Qc;foflaCoWmfNpj+z z1z*RdD&yE1iO_&^-ST?omNtv7R5#bw+Aml@a$*5Uh4p4XW@w(IH#MIte>b*Xxyf6r zWWi-0$0}780V}`TPxwz)TF1$yy4oqn8KmKU8X_7KZz93JX!gOVzB6TE82*?(@n|4? z)%jd0aV+Kqqwf0m;n=r`%91jQN(tTTr`6eKm6eAbyjtLWrFmbg&}%w4+>XkcjZWi9 zR^`B~-(2L}(|B&{uN!gL3;vT72hAaZRJssH_S3k7n?mQ3n{r=U2RH4HdWh~Is;on6 zlwPWZjh-qWdFKs}f=G^Adg$a-NX+=}KMkyygsw%q80Xy$zbW4anNPBMPc$be&t4NQ>g}wPeP=Mf$>1{&5cxAqJF1(Ki$I+{`!{H6Db!>V5oVio@XGf zo@T-Wu^~vD`=Csv&CtHPT_J-m5K+#hcL8hV28qe-xH_J$Dd=*aDkz=mgNl25g`K5L z}bh^VoZ058f%s1mEi|q&`NU(cwaJ#CyzgR97VjzuBbZlqbxPJ_; zH)zl<JK{Y@D@$!UojBjCs|>V;dI_5|HPZ&RNVQ2Jx* zpk4pOY|=>n`|p$4;tf{H=tK#*EX_t)83Iw|{DJrF44n}@8o9K*ZC;Cq+IbN6Co`zfsjd?MBG><@l4$7@oj_kULoRuO=2!t=n`P(RAy(WR27gFbQv1-2k};9SF*s)GIYO6Y z!X9xjxAGrpo(7&b%B4Q_~tK$H>- z@VKo{=y$kvA|Z8(&7#oLl%~D~IAEWPFrzb2HUimD&mu7rbeM+htSseior|t%)tu~# z)#z?VBeU+s?W>D$WJ%O&Ng{_wp$v9KOt$ZNyz6`hW02uFBsvBInemR&QYKqCtACbr zea#)XAvqM2pmX?8#k<+j`1n$n0%aGw6jc7K$`}C}wpFr>oDE1VQ!W!63Aq2o%WoN) zHR*qpwFZ;tVv$lme@n9k&$`KsDrK(@sIQ)0%}VeND5F zMpGG&L@@N3eQC$IE;=+;1`DOBJEombRqwpb1}qJfmh%Th)yD zQmJSg4cF-ti8vc%7=DZj6xy>j*#c}Q;=FRB7%Eed&ge*J!% zVqF<}GH#+S`(kBHm!!4n?%C87=({GP{n(ypy7jhAal%jAcC)?N5 zr6_rcy-sa4asmPMf%=$Ixw3}eDC@)LJ8Z(H$h4`-6EGd4F$tgasPs}g68lhR<4d^1 z)jCL?*x3L{-uG_lO>^g36!00fv-8AlwV)$gJ8dDo4N{5rf5%#Lcz+JiJS={QLBh|0 zY(c0euN)4%I$5}+*GIz_$9Q@%Fp~ntc0wb()^H9>jtPf$48<*7=VM z2$XPjOD9TgRMyPdUxL;8M?e!)2tBzt?t>f2gC4M-WdTUKN7SIG1f@RV(gMW`J9S0~2!}XeV8SWps(;nTQpcf`o-GVx1>MYpaoT{#!a(G!j z>Nz!q9vfXcQxSbA0cpS%gLJ*-aYq-jFSzW56CKcF3e=-@mC_`~;>zv~MRS&)Gj_() zjBl+)D_)wo)<$EN7&lO|fwJ+W02~4S(=|!Y1p!v;eYEU5e1AK#We5HXr=Xck-$&KDEn zmCg~FwRF))M1Rn0=lY>Oc*BPvzDlXgGgV*EdO6RV@$tJoeC9$v3ap zjxK@h(Ryvm{s=W~9O5RW@~)Z>=y7v>p*})EHO&2f1z$JIU7)ItWw_rq0ax0iZm;kA zJ^aflcp42mD&E7(;A0_`eW_=**SbaveiDg*n)Be>DS!9(f5v9!@8m?FCwzjL!fg}3 z9DGCtQY@WcBnt=@r~lbGdh_z7lOW=V`sv9{Z!pY;Nq^h@0sIGLVWcX5qu%faCRVS+ zjb%zlK_D@R>5EreP@YL8qNOZR=FP4V$d2`zPfyfm@|?cYsJ@!?pdZ=4$rk!6LG-%e z3xMHxcz;V@?p}|soX#2VLV!ZA*MbUCwrN0LMugk#nae#w5N}kA6C51%5E!9?R zE7f4e$5}WpWp6U;gUcvu=C&4?Ys>yyqg~y7#DD6u8Rhtt1=gyPrJM`#=)8(qrFi zz3@y)Y8G!GGfn86;d85NG<4X2(H~8WQ#iU~{N_Bls_h!~<+z58zOW7(&LSLnGp2{e zuL8sWlaYND1!U_=Qiroub|wLT%WlFj5WH9FKSaI<$DyTQg&?(vQ;{kGYSo)-FW{0m zmTg{tU&ny}YSo)}XFQtS*=%$ui)aVN%1R9p=_Duu#VaAzYKRu|N!&+~bxa9XR0@XZ z2o{a<`@4*5$}0nJrqW=X1RHrJWhvJ~w02HYj4fY7$!y0nln0lUDVg(srCDLk_=c?j zr%BSoB{(LSW4IQKb*qR@l7hFAdTWXxAUK8sN>I*X(joZ5bzn;S=ZAn?F-z%=+Rt>d zd#x>a1Gemgl`V0<-*@)iV8i<-_+$Dy3!}zT)w|+=@=S2*q$?oL@a5@WcKh`W+%@gC z@BlZ!TxA-dEj%E=awD~W^9eQJO~dCh-%5dZ)H0000000000003{3nuR_BEqRk0c`1_vhAII*lP-op0mhSW ShCKnOldXm$2EBp+0002N)gkKu delta 19031 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 diff --git a/nsw/Source/bsmd.database/AGNT.cs b/nsw/Source/bsmd.database/AGNT.cs index 3b715f77..e5a86394 100644 --- a/nsw/Source/bsmd.database/AGNT.cs +++ b/nsw/Source/bsmd.database/AGNT.cs @@ -9,7 +9,6 @@ using System; using System.Collections.Generic; -using System.Data; using System.Data.SqlClient; namespace bsmd.database @@ -36,53 +35,63 @@ namespace bsmd.database [Validation2(ValidationCode.NOT_NULL)] [LookupName("AGNT.AgentCompanyName")] [MaxLength(100)] + [ENI2Validation] public string AgentCompanyName { get; set; } [ShowReport] [LookupName("AGNT.AgentStreetAndNumber")] [MaxLength(100)] + [ENI2Validation] public string AgentStreetAndNumber { get; set; } [ShowReport] [LookupName("AGNT.AgentPostalCode")] [MaxLength(100)] + [ENI2Validation] public string AgentPostalCode { get; set; } [ShowReport] [LookupName("AGNT.AgentCity")] [MaxLength(100)] + [ENI2Validation] public string AgentCity { get; set; } [ShowReport] [LookupName("AGNT.AgentCountry")] [MaxLength(100)] + [ENI2Validation] public string AgentCountry { get; set; } [ShowReport] [LookupName("AGNT.AgentLastName")] [Validation2(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string AgentLastName { get; set; } [ShowReport] [LookupName("AGNT.AgentFirstName")] [MaxLength(100)] + [ENI2Validation] public string AgentFirstName { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("AGNT.AgentPhone")] [MaxLength(100)] + [ENI2Validation] public string AgentPhone { get; set; } [ShowReport] [LookupName("AGNT.AgentFax")] [MaxLength(100)] + [ENI2Validation] public string AgentFax { get; set; } [ShowReport] [LookupName("AGNT.AgentEMail")] [MaxLength(100)] + [ENI2Validation] public string AgentEMail { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/ATA.cs b/nsw/Source/bsmd.database/ATA.cs index 9b803248..0ab24b14 100644 --- a/nsw/Source/bsmd.database/ATA.cs +++ b/nsw/Source/bsmd.database/ATA.cs @@ -8,7 +8,6 @@ // Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. using System; -using System.Data; using System.Data.SqlClient; using System.Collections.Generic; @@ -27,6 +26,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.TIME_IMPLAUSIBLE)] [LookupName("ATA.ATAPortOfCall")] + [ENI2Validation] public DateTime? ATAPortOfCall { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/ATD.cs b/nsw/Source/bsmd.database/ATD.cs index ae0b27a3..4c852449 100644 --- a/nsw/Source/bsmd.database/ATD.cs +++ b/nsw/Source/bsmd.database/ATD.cs @@ -8,7 +8,6 @@ // Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved. using System; -using System.Data; using System.Data.SqlClient; using System.Collections.Generic; @@ -27,6 +26,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.TIME_IMPLAUSIBLE)] [LookupName("ATD.ATDPortOfCall")] + [ENI2Validation] public DateTime? ATDPortOfCall { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/BKRA.cs b/nsw/Source/bsmd.database/BKRA.cs index 8e3fe224..707e2d1b 100644 --- a/nsw/Source/bsmd.database/BKRA.cs +++ b/nsw/Source/bsmd.database/BKRA.cs @@ -27,10 +27,12 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string BunkerFuelType { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? BunkerFuelQuantity_TNE { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/BPOL.cs b/nsw/Source/bsmd.database/BPOL.cs index f43e4263..d023a1bc 100644 --- a/nsw/Source/bsmd.database/BPOL.cs +++ b/nsw/Source/bsmd.database/BPOL.cs @@ -28,10 +28,12 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? StowawaysOnBoard { get; set; } [LookupName("BPOL.CruiseShip")] + [ENI2Validation] public bool? CruiseShip { get; set; } public List PortOfItineraries { get { return this.poi; } } diff --git a/nsw/Source/bsmd.database/BRKD.cs b/nsw/Source/bsmd.database/BRKD.cs index b7244a66..1866c484 100644 --- a/nsw/Source/bsmd.database/BRKD.cs +++ b/nsw/Source/bsmd.database/BRKD.cs @@ -27,10 +27,12 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string BunkerFuelType { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? BunkerFuelQuantity_TNE { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/CREW.cs b/nsw/Source/bsmd.database/CREW.cs index 82e07a00..c22b400b 100644 --- a/nsw/Source/bsmd.database/CREW.cs +++ b/nsw/Source/bsmd.database/CREW.cs @@ -28,21 +28,25 @@ namespace bsmd.database [ReportDisplayName("Last name")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string CrewMemberLastName { get; set; } [ShowReport] [ReportDisplayName("First name")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string CrewMemberFirstName { get; set; } [ShowReport] [ReportDisplayName("Place of birth")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string CrewMemberPlaceOfBirth { get; set; } [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? CrewMemberDateOfBirth { get; set; } [ShowReport] @@ -56,7 +60,8 @@ namespace bsmd.database return string.Empty; } } - + + [ENI2Validation] public byte? CrewMemberGender { get; set; } [ShowReport] @@ -67,9 +72,11 @@ namespace bsmd.database [ReportDisplayName("Nationality")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(2)] + [ENI2Validation] public string CrewMemberNationality { get; set; } [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? CrewMemberIdentityDocumentType { get; set; } [ShowReport] @@ -80,20 +87,24 @@ namespace bsmd.database [ReportDisplayName("Identity document id")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string CrewMemberIdentityDocumentId { get; set; } [ShowReport] [ReportDisplayName("Visa number")] // [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string CrewMemberVisaNumber { get; set; } [ShowReport] [ReportDisplayName("Duty")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string CrewMemberDuty { get; set; } + [ENI2Validation] public bool IsDeparture { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/CallPurpose.cs b/nsw/Source/bsmd.database/CallPurpose.cs index cbe2ba8e..89795728 100644 --- a/nsw/Source/bsmd.database/CallPurpose.cs +++ b/nsw/Source/bsmd.database/CallPurpose.cs @@ -27,10 +27,12 @@ namespace bsmd.database public NOA_NOD NOA_NOD { get; set; } [ShowReport] + [ENI2Validation] public int CallPurposeCode { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] 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 66412c4a..c7e9494b 100644 --- a/nsw/Source/bsmd.database/Customer.cs +++ b/nsw/Source/bsmd.database/Customer.cs @@ -29,33 +29,43 @@ namespace bsmd.database #region Properties [MaxLength(100)] + [ENI2Validation] public string Name { get; set; } [MaxLength(50)] + [ENI2Validation] public string Phone { get; set; } [MaxLength(100)] + [ENI2Validation] public string Email { get; set; } [MaxLength(50)] + [ENI2Validation] public string ContactFirstName { get; set; } [MaxLength(50)] + [ENI2Validation] public string ContactLastName { get; set; } [MaxLength(50)] + [ENI2Validation] public string StreetAndNumber { get; set; } [MaxLength(50)] + [ENI2Validation] public string PostalCode { get; set; } [MaxLength(50)] + [ENI2Validation] public string City { get; set; } [MaxLength(50)] + [ENI2Validation] public string Country { get; set; } [MaxLength(50)] + [ENI2Validation] public string CustomerNumber { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/HAZ.cs b/nsw/Source/bsmd.database/HAZ.cs index 49aefc15..ebd94399 100644 --- a/nsw/Source/bsmd.database/HAZ.cs +++ b/nsw/Source/bsmd.database/HAZ.cs @@ -29,40 +29,51 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? NoDPGOnBoardOnArrival { get; set; } - [ShowReport] + [ShowReport] + [ENI2Validation] public bool? DPGManifestOnBoardOnArrival { get; set; } [ShowReport] + [ENI2Validation] public byte? INFShipClass { get; set; } [ShowReport] + [ENI2Validation] public bool? MOUBaltic { get; set; } [ShowReport] + [ENI2Validation] public bool? DPGClassificationIMDG { get; set; } [ShowReport] + [ENI2Validation] public bool? DPGClassificationIGC { get; set; } [ShowReport] + [ENI2Validation] public bool? DPGClassificationIBC { get; set; } [ShowReport] + [ENI2Validation] public bool? DPGClassificationIMSBC { get; set; } [ShowReport] + [ENI2Validation] public bool? DPGClassificationMARPOL_ANNEX_I { get; set; } // DK + [ENI2Validation] public string DPGContactFamilyName { get; set; } // DK + [ENI2Validation] public string DPGContactPhone { get; set; } - + public List IMDGPositions { get { return this.imdgPositions; } } - + public List IBCPositions { get { return this.ibcPositions; } } public List IGCPositions { get { return this.igcPositions; } } @@ -73,6 +84,7 @@ namespace bsmd.database // selektor HAZA / HAZD [ShowReport] + [ENI2Validation] public bool IsDeparture { get { return this._isDeparture; } set { this._isDeparture = value; } @@ -82,6 +94,7 @@ namespace bsmd.database /// No NSW field! Set to determine whether HAZ info should be reported to the NSW /// [ShowReport] + [ENI2Validation] public string TransmissionType { get; set; } public bool HasPositions diff --git a/nsw/Source/bsmd.database/IBCPosition.cs b/nsw/Source/bsmd.database/IBCPosition.cs index 0e17059d..943b5326 100644 --- a/nsw/Source/bsmd.database/IBCPosition.cs +++ b/nsw/Source/bsmd.database/IBCPosition.cs @@ -59,11 +59,13 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(255)] + [ENI2Validation] public string ProductName { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? PollutionCategory { get; set; } public string PollutionCategoryDisplay @@ -77,6 +79,7 @@ namespace bsmd.database } [ShowReport] + [ENI2Validation] public byte? Hazards { get; set; } public string HazardsDisplay @@ -91,6 +94,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? FlashpointInformation { get; set; } public string FlashpointInformationDisplay @@ -105,32 +109,39 @@ namespace bsmd.database [ShowReport] [MaxLength(11)] + [ENI2Validation] public string Flashpoint_CEL { get; set; } + [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] - + [ENI2Validation] public double? Quantity_KGM { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(24)] + [ENI2Validation] public string StowagePosition { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfLoading { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfDischarge { get; set; } [ShowReport] + [ENI2Validation] public bool? SpecRef15_19 { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] public string Remarks { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/IGCPosition.cs b/nsw/Source/bsmd.database/IGCPosition.cs index cc7708cf..843cdbff 100644 --- a/nsw/Source/bsmd.database/IGCPosition.cs +++ b/nsw/Source/bsmd.database/IGCPosition.cs @@ -28,38 +28,46 @@ namespace bsmd.database [ShowReport] [MaxLength(4)] + [ENI2Validation] public string UNNumber { get; set; } [ShowReport] [MaxLength(10)] + [ENI2Validation] public string IMOClass { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(255)] + [ENI2Validation] public string ProductName { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? Quantity_KGM { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(24)] + [ENI2Validation] public string StowagePosition { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfLoading { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfDischarge { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] public string Remarks { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/IMDGPosition.cs b/nsw/Source/bsmd.database/IMDGPosition.cs index 97839343..ec848100 100644 --- a/nsw/Source/bsmd.database/IMDGPosition.cs +++ b/nsw/Source/bsmd.database/IMDGPosition.cs @@ -32,125 +32,158 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(10)] + [ENI2Validation] public string UNNumber { get; set; } [ShowReport] + [ENI2Validation] public byte? PackingGroup { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(255)] + [ENI2Validation] public string ProperShippingName { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(10)] + [ENI2Validation] public string IMOClass { get; set; } [ShowReport] [MaxLength(10)] + [ENI2Validation] public string CompatibilityGroup { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] public string TechnicalName { get; set; } [ShowReport] + [ENI2Validation] public double? NetExplosiveMass_KGM { get; set; } [ShowReport] [MaxLength(10)] + [ENI2Validation] public string Flashpoint_CEL { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string Class7NuclideName { get; set; } [ShowReport] + [ENI2Validation] public double? Class7MaxActivity_BQL { get; set; } [ShowReport] + [ENI2Validation] public int? Class7Category { get; set; } [ShowReport] + [ENI2Validation] public double? Class7TransportIndex { get; set; } [ShowReport] + [ENI2Validation] public int? Class7CSI { get; set; } [ShowReport] + [ENI2Validation] public double? ControlTemperature_CEL { get; set; } [ShowReport] + [ENI2Validation] public double? EmergencyTemperature_CEL { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? MarinePollutant { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public int? NumberOfPackages { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(255)] + [ENI2Validation] public string PackageType { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? LimitedQuantities { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? ExceptedQuantities { get; set; } [ShowReport] + [ENI2Validation] public double? NetQuantity_KGM { get; set; } [ShowReport] + [ENI2Validation] public double? GrossQuantity_KGM { get; set; } [ShowReport] + [ENI2Validation] public double? Volume_MTQ { get; set; } [ShowReport] + [ENI2Validation] public bool? GeneralCargoIBC { get; set; } [ShowReport] [MaxLength(24)] + [ENI2Validation] public string ContainerNumber { get; set; } [ShowReport] [MaxLength(24)] + [ENI2Validation] public string VehicleLicenseNumber { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(24)] + [ENI2Validation] public string StowagePosition { get; set; } [MaxLength(5)] + [ENI2Validation] public string Bay { get; set; } [MaxLength(5)] + [ENI2Validation] public string Row { get; set; } [MaxLength(5)] + [ENI2Validation] public string Tier { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfLoading { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfDischarge { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] public string Remarks { get; set; } public List SubsidiaryRiskList { get { return this.subsidiaryRisksList; } } @@ -158,6 +191,7 @@ namespace bsmd.database /// /// Hilfsproperty, um subsidiary risks als kommaseparierte Liste anzuzeigen (ENI-2) /// + [ENI2Validation] public string SubsidiaryRiskText { get diff --git a/nsw/Source/bsmd.database/IMSBCPosition.cs b/nsw/Source/bsmd.database/IMSBCPosition.cs index cdaf8c05..b680f034 100644 --- a/nsw/Source/bsmd.database/IMSBCPosition.cs +++ b/nsw/Source/bsmd.database/IMSBCPosition.cs @@ -29,41 +29,50 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(255)] + [ENI2Validation] public string BulkCargoShippingName { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? MHB { get; set; } [ShowReport] [MaxLength(4)] + [ENI2Validation] public string UNNumber { get; set; } [ShowReport] [MaxLength(10)] + [ENI2Validation] public string IMOClass { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? Quantity_KGM { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(24)] + [ENI2Validation] public string StowagePosition { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfLoading { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfDischarge { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] public string Remarks { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/INFO.cs b/nsw/Source/bsmd.database/INFO.cs index 3a5fd584..4ead54b6 100644 --- a/nsw/Source/bsmd.database/INFO.cs +++ b/nsw/Source/bsmd.database/INFO.cs @@ -25,46 +25,56 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? ShippingArea { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("INFO.RequestedPositionInPortOfCall")] [MaxLength(100)] + [ENI2Validation] public string RequestedPositionInPortOfCall { get; set; } [ShowReport] [LookupName("INFO.SpecialRequirementsOfShipAtBerth")] [MaxLength(255)] + [ENI2Validation] public string SpecialRequirementsOfShipAtBerth { get; set; } [ShowReport] [LookupName("INFO.ConstructionCharacteristicsOfShip")] [MaxLength(100)] + [ENI2Validation] public string ConstructionCharacteristicsOfShip { get; set; } [ShowReport] - [Validation(ValidationCode.NOT_NULL)] + [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? FumigatedBulkCargo { get; set; } [ShowReport] [LookupName("INFO.DeadWeightSummer_TNE")] + [ENI2Validation] public double? DeplacementSummerDraught_TNE { get; set; } [ShowReport] [LookupName("INFO.PortArea")] // [Validation(ValidationCode.NOT_NULL)] // ist bei NOK Transit leer [MaxLength(50)] + [ENI2Validation] public string PortArea { get; set; } [MaxLength(50)] + [ENI2Validation] public string BowThrusterPower { get; set; } [MaxLength(50)] + [ENI2Validation] public string SternThrusterPower { get; set; } [MaxLength(4)] [LookupName("INFO.PortFacility")] + [ENI2Validation] public string PortFacility { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/InfectedArea.cs b/nsw/Source/bsmd.database/InfectedArea.cs index 26127585..63a48202 100644 --- a/nsw/Source/bsmd.database/InfectedArea.cs +++ b/nsw/Source/bsmd.database/InfectedArea.cs @@ -28,9 +28,11 @@ namespace bsmd.database [ShowReport] [MaxLength(255)] + [ENI2Validation] public string InfectedAreaPort { get; set; } [ShowReport] + [ENI2Validation] public DateTime? InfectedAreaDate { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/LADG.cs b/nsw/Source/bsmd.database/LADG.cs index c1c4a69d..7af0f0e4 100644 --- a/nsw/Source/bsmd.database/LADG.cs +++ b/nsw/Source/bsmd.database/LADG.cs @@ -56,6 +56,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? CargoHandlingType { get; set; } /// @@ -76,28 +77,35 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.TWO_DIGIT)] [MaxLength(5)] + [ENI2Validation] public string CargoCodeNST { get; set; } [ShowReport] + [ENI2Validation] public int? CargoLACode { get; set; } [ShowReport] + [ENI2Validation] public int? CargoNumberOfItems { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? CargoGrossQuantity_TNE { get; set; } [MaxLength(5)] [Validation(ValidationCode.LOCODE)] + [ENI2Validation] public string PortOfLoading { get; set; } [MaxLength(5)] [Validation(ValidationCode.LOCODE)] + [ENI2Validation] public string PortOfDischarge { get; set; } [MaxLength(1)] [ShowReport] + [ENI2Validation] public string CargoCodeNST_3 { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs b/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs index 5de3d928..1c656250 100644 --- a/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs +++ b/nsw/Source/bsmd.database/LastTenPortFacilitiesCalled.cs @@ -28,35 +28,43 @@ namespace bsmd.database [ShowReport] [MaxLength(100)] + [ENI2Validation] public string PortFacilityPortName { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string PortFacilityPortCountry { get; set; } [ShowReport] [MaxLength(5)] + [ENI2Validation] public string PortFacilityPortLoCode { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? PortFacilityDateOfArrival { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? PortFacilityDateOfDeparture { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? PortFacilityShipSecurityLevel { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] public string PortFacilitySecurityMattersToReport { get; set; } [ShowReport] [Validation(ValidationCode.GISIS)] [MaxLength(4)] + [ENI2Validation] 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 ae2752ba..3639d98d 100644 --- a/nsw/Source/bsmd.database/MARPOL_Annex_I_Position.cs +++ b/nsw/Source/bsmd.database/MARPOL_Annex_I_Position.cs @@ -29,10 +29,12 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(255)] + [ENI2Validation] public string Name { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? FlashpointInformation { get; set; } public string FlashpointInformationDisplay @@ -47,29 +49,35 @@ namespace bsmd.database [ShowReport] [MaxLength(10)] + [ENI2Validation] public string Flashpoint_CEL { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? Quantity_KGM { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(24)] + [ENI2Validation] public string StowagePosition { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfLoading { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] + [ENI2Validation] [MaxLength(5)] public string PortOfDischarge { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] 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 a7b65fab..1d99b48e 100644 --- a/nsw/Source/bsmd.database/MDH.cs +++ b/nsw/Source/bsmd.database/MDH.cs @@ -42,121 +42,146 @@ namespace bsmd.database public List InfectedAreas { get { return this.infectedAreas; } } [ShowReport] - [Validation1(ValidationCode.NOT_NULL)] + [Validation1(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? MDHSimplification { get; set; } [ShowReport] [Validation1(ValidationCode.LOCODE_GER)] [MaxLength(5)] + [ENI2Validation] public string PortOfCallWhereCompleteMDHNotified { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.NonAccidentialDeathsDuringVoyage")] + [ENI2Validation] public bool? NonAccidentalDeathsDuringVoyage { get; set; } [ShowReport] [LookupName("MDH.NonAccidentialDeathsDuringVoyageCount")] + [ENI2Validation] public int? NonAccidentalDeathsDuringVoyageCount { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SuspisionInfectiousNature")] + [ENI2Validation] public bool? SuspisionInfectiousNature { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.NumberOfIllPersonsHigherThanExpected")] + [ENI2Validation] public bool? NumberOfIllPersonsHigherThanExpected { get; set; } [ShowReport] [LookupName("MDH.NumberOfIllPersons")] + [ENI2Validation] public int? NumberOfIllPersons { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SickPersonsOnBoard")] + [ENI2Validation] public bool? SickPersonsOnBoard { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.MedicalConsulted")] + [ENI2Validation] public bool? MedicalConsulted { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.AwareOfConditionsForFurtherInfections")] + [ENI2Validation] public bool? AwareOfFurtherInfections { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SanitaryMeasuresApplied")] + [ENI2Validation] public bool? SanitaryMeasuresApplied { get; set; } [ShowReport] [LookupName("MDH.SanitaryMeasuresType_1")] // TODO: NSW 3.0: wird ein Array [MaxLength(100)] + [ENI2Validation] public string SanitaryMeasuresType { get; set; } [ShowReport] [LookupName("MDH.SanitaryMeasuresLocation_1")] [MaxLength(100)] + [ENI2Validation] public string SanitaryMeasuresLocation { get; set; } [ShowReport] [LookupName("MDH.SanitaryMeasuresDate_1")] + [ENI2Validation] public DateTime? SanitaryMeasuresDate { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.StowawaysDetected")] + [ENI2Validation] public bool? StowawaysDetected { get; set; } [ShowReport] [LookupName("MDH.StowawaysJoiningLocation_1")] // TODO: NSW 3.0: wird ein Array [MaxLength(100)] + [ENI2Validation] public string StowawaysJoiningLocation { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SickAnimalOrPetOnBoard")] + [ENI2Validation] public bool? SickAnimalOrPetOnBoard { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.ValidSanitaryControlExemptionOrCertificateOnBoard")] + [ENI2Validation] public bool? ValidSanitaryControlExemptionOrCertificateOnBoard { get; set; } [ShowReport] [LookupName("MDH.PlaceOfIssue")] [MaxLength(100)] + [ENI2Validation] public string PlaceOfIssue { get; set; } [ShowReport] [LookupName("MDH.DateOfIssue")] + [ENI2Validation] public DateTime? DateOfIssue { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.SanitaryControlReinspectionRequired")] + [ENI2Validation] public bool? SanitaryControlReinspectionRequired { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("MDH.InfectedAreaVisited")] + [ENI2Validation] public bool? InfectedAreaVisited { get; set; } [ShowReport] [LookupName("MDH.InfectedAreaPort_1")] // TODO: NSW 3.0: wird ein Array [MaxLength(100)] + [ENI2Validation] public string InfectedAreaPort { get; set; } [ShowReport] [LookupName("MDH.InfectedAreaDate_1")] + [ENI2Validation] public DateTime? InfectedAreaDate { get; set; } /// /// Hilfsproperty, um eine kommaseparierte Liste von JoiningLocation (analog ANSW) im ENI-2 anzuzeigen, /// + [ENI2Validation] public string StowawaysJoiningLocationText { get diff --git a/nsw/Source/bsmd.database/MessageCore.cs b/nsw/Source/bsmd.database/MessageCore.cs index fd0f9d66..a59e3497 100644 --- a/nsw/Source/bsmd.database/MessageCore.cs +++ b/nsw/Source/bsmd.database/MessageCore.cs @@ -85,9 +85,11 @@ namespace bsmd.database #region Properties [MaxLength(25)] + [ENI2Validation] public string VisitId { get; set; } [MaxLength(25)] + [ENI2Validation] public string TransitId { get; set; } /// @@ -104,19 +106,25 @@ namespace bsmd.database } [MaxLength(7)] + [ENI2Validation] public string IMO { get; set; } [MaxLength(8)] + [ENI2Validation] public string ENI { get; set; } [MaxLength(5)] + [ENI2Validation] public string PoC { get; set; } [MaxLength(50)] + [ENI2Validation] public string Portname { get; set; } + [ENI2Validation] public DateTime? ETA { get; set; } + [ENI2Validation] public DateTime? ETAKielCanal { get; set; } public DateTime? ETADisplay @@ -129,12 +137,16 @@ namespace bsmd.database get { return this.IsTransit ? "NOK" : this.Portname; } } + [ENI2Validation] public bool IsTransit { get; set; } + [ENI2Validation] public bool Incoming { get; set; } // tbd: für HIS-NORD, mal sehen ob das so bleibt + [ENI2Validation] public BSMDStatus BSMDStatusInternal { get; set; } + [ENI2Validation] public Message.NSWProvider InitialHIS { get; set; } public Guid? HerbergFormGuid { get; set; } diff --git a/nsw/Source/bsmd.database/NAME.cs b/nsw/Source/bsmd.database/NAME.cs index 439d6ef6..c1a7a91a 100644 --- a/nsw/Source/bsmd.database/NAME.cs +++ b/nsw/Source/bsmd.database/NAME.cs @@ -28,6 +28,7 @@ namespace bsmd.database [Validation(ValidationCode.NOT_NULL)] [LookupName("NAME.NameOfMaster")] [MaxLength(100)] + [ENI2Validation] 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 5049ee40..df6125f8 100644 --- a/nsw/Source/bsmd.database/NOA_NOD.cs +++ b/nsw/Source/bsmd.database/NOA_NOD.cs @@ -28,10 +28,12 @@ namespace bsmd.database [ShowReport] [Validation1(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? ETAToPortOfCall { get; set; } [ShowReport] [Validation1(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? ETDFromPortOfCall { get; set; } [Validation1(ValidationCode.NOT_NULL)] @@ -39,28 +41,35 @@ namespace bsmd.database [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? ETAToKielCanal { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? ETDFromKielCanal { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(5)] + [ENI2Validation] public string LastPort { get; set; } [ShowReport] + [ENI2Validation] public DateTime? ETDFromLastPort { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(5)] + [ENI2Validation] public string NextPort { get; set; } [ShowReport] + [ENI2Validation] public DateTime? ETAToNextPort { get; set; } + [ENI2Validation] public bool? IsAnchored { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/PAS.cs b/nsw/Source/bsmd.database/PAS.cs index 3b5db26d..e0787c07 100644 --- a/nsw/Source/bsmd.database/PAS.cs +++ b/nsw/Source/bsmd.database/PAS.cs @@ -28,22 +28,26 @@ namespace bsmd.database [ReportDisplayName("Last name")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string PassengerLastName { get; set; } [ShowReport] [ReportDisplayName("First name")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string PassengerFirstName { get; set; } [ShowReport] [ReportDisplayName("Place of birth")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string PassengerPlaceOfBirth { get; set; } [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? PassengerDateOfBirth { get; set; } [ShowReport] @@ -57,6 +61,7 @@ namespace bsmd.database } } + [ENI2Validation] public byte? PassengerGender { get; set; } [ShowReport] @@ -67,9 +72,11 @@ namespace bsmd.database [ReportDisplayName("Nationality")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(2)] + [ENI2Validation] public string PassengerNationality { get; set; } [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? PassengerIdentityDocumentType { get; set; } [ShowReport] @@ -80,32 +87,38 @@ namespace bsmd.database [ReportDisplayName("Identity document id")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string PassengerIdentityDocumentId { get; set; } [ShowReport] [ReportDisplayName("Visa number")] [MaxLength(100)] + [ENI2Validation] public string PassengerVisaNumber { get; set; } [ShowReport] [ReportDisplayName("Port of embarkation")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(5)] + [ENI2Validation] public string PassengerPortOfEmbarkation { get; set; } [ShowReport] [ReportDisplayName("Port of disembarkation")] [Validation(ValidationCode.NOT_NULL)] [MaxLength(5)] + [ENI2Validation] public string PassengerPortOfDisembarkation { get; set; } [ShowReport] [ReportDisplayName("In transit")] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? PassengerInTransit { get; set; } public string Identifier { get; set; } + [ENI2Validation] public bool IsDeparture { get; set; } diff --git a/nsw/Source/bsmd.database/POBA.cs b/nsw/Source/bsmd.database/POBA.cs index b23c5b16..e02429f0 100644 --- a/nsw/Source/bsmd.database/POBA.cs +++ b/nsw/Source/bsmd.database/POBA.cs @@ -26,22 +26,28 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.INT_GT_ZERO)] [LookupName("POBA.TotalPersonsOnBoardUponArrival")] + [ENI2Validation] public int? TotalPersonsOnBoardUponArrival { get; set; } [ShowReport] [Validation(ValidationCode.INT_GT_ZERO)] [LookupName("POBA.TotalCrewMembersOnBoardUponArrival")] + [ENI2Validation] public int? TotalCrewMembersOnBoardUponArrival { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("POBA.TotalPassengersOnBoardUponArrival")] + [ENI2Validation] public int? TotalPassengersOnBoardUponArrival { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("POBA.TotalStowawaysOnBoardUponArrival")] + [ENI2Validation] public int? TotalStowawaysOnBoardUponArrival { get; set; } #endregion + #region DatabaseEntity implementation + public override string Subtitle { get @@ -116,5 +122,8 @@ namespace bsmd.database reader.Close(); return result; } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/POBD.cs b/nsw/Source/bsmd.database/POBD.cs index 769b8bd2..e52f24f7 100644 --- a/nsw/Source/bsmd.database/POBD.cs +++ b/nsw/Source/bsmd.database/POBD.cs @@ -26,18 +26,22 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.INT_GT_ZERO)] [LookupName("POBD.TotalPersonsOnBoardUponDeparture")] + [ENI2Validation] public int? TotalPersonsOnBoardUponDeparture { get; set; } [ShowReport] [Validation(ValidationCode.INT_GT_ZERO)] [LookupName("POBD.TotalCrewMembersOnBoardUponDeparture")] + [ENI2Validation] public int? TotalCrewMembersOnBoardUponDeparture { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("POBD.TotalPassengersOnBoardUponDeparture")] + [ENI2Validation] public int? TotalPassengersOnBoardUponDeparture { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("POBD.TotalStowawaysOnBoardUponDeparture")] + [ENI2Validation] public int? TotalStowawaysOnBoardUponDeparture { get; set; } public override string Subtitle @@ -50,6 +54,8 @@ namespace bsmd.database #endregion + #region Database Entity implementation + public override void PrepareSave(System.Data.IDbCommand cmd) { @@ -115,5 +121,8 @@ namespace bsmd.database reader.Close(); return result; } + + #endregion + } } diff --git a/nsw/Source/bsmd.database/PRE72H.cs b/nsw/Source/bsmd.database/PRE72H.cs index 64d9f216..9e84a726 100644 --- a/nsw/Source/bsmd.database/PRE72H.cs +++ b/nsw/Source/bsmd.database/PRE72H.cs @@ -27,48 +27,59 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("PRE72H.Tanker")] + [ENI2Validation] public bool? Tanker { get; set; } - [ShowReport] + [ShowReport] + [ENI2Validation] public byte? TankerHullConfiguration { get; set; } [ShowReport] + [ENI2Validation] public byte? ConditionCargoBallastTanks { get; set; } [ShowReport] [LookupName("PRE72H.NaturOfCargo")] [MaxLength(100)] + [ENI2Validation] public string NatureOfCargo { get; set; } [ShowReport] [LookupName("PRE72H.VolumeOfCargo_TNE")] + [ENI2Validation] public double? VolumeOfCargo { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [LookupName("PRE72H.PlannedOperations")] [MaxLength(100)] + [ENI2Validation] public string PlannedOperations { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] // nach Util verschoben [MaxLength(255)] + [ENI2Validation] public string PlannedWorks { get; set; } [ShowReport] [LookupName("PRE72H.DateOfLastExpandedInspection")] + [ENI2Validation] public DateTime? DateOfLastExpandedInspection { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] [LookupName("PRE72H.PlannedPeriodOfStay_HUR")] + [ENI2Validation] public double? PlannedPeriodOfStay_HUR { get; set; } [LookupName("PRE72H.IsDueToInspection")] + [ENI2Validation] public bool? IsDueToInspection { get; set; } [LookupName("PRE72H.PossibleAnchorage")] + [ENI2Validation] public bool? PossibleAnchorage { get; set; } public override string Subtitle diff --git a/nsw/Source/bsmd.database/PortArea.cs b/nsw/Source/bsmd.database/PortArea.cs index 94e59f3a..c7f8449c 100644 --- a/nsw/Source/bsmd.database/PortArea.cs +++ b/nsw/Source/bsmd.database/PortArea.cs @@ -15,18 +15,23 @@ namespace bsmd.database #region Properties [MaxLength(10)] + [ENI2Validation] public string Country { get; set; } [MaxLength(5)] + [ENI2Validation] public string Locode { get; set; } [MaxLength(255)] + [ENI2Validation] public string Port { get; set; } [MaxLength(10)] + [ENI2Validation] public string Code { get; set; } [MaxLength(255)] + [ENI2Validation] public string Name { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs index 8f1d02ff..1ece87b8 100644 --- a/nsw/Source/bsmd.database/PortOfCallLast30Days.cs +++ b/nsw/Source/bsmd.database/PortOfCallLast30Days.cs @@ -33,14 +33,17 @@ namespace bsmd.database [ShowReport] [Validation2(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfCallLast30DaysLocode { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? PortOfCallLast30DaysDateOfDeparture { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? PortOfCallLast30DaysCrewMembersJoined { get; set; } public string Identifier { get; set; } @@ -48,6 +51,7 @@ namespace bsmd.database /// /// Hilfsproperty, um eine kommaseparierte Liste von Crew (analog ANSW) im ENI-2 anzuzeigen, /// + [ENI2Validation] public string CrewMembersJoinedText { get diff --git a/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs b/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs index e18960ca..9a0e02a4 100644 --- a/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs +++ b/nsw/Source/bsmd.database/PortOfCallLast30DaysCrewJoinedShip.cs @@ -29,6 +29,7 @@ namespace bsmd.database [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [MaxLength(255)] + [ENI2Validation] 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 40084b71..fd989b92 100644 --- a/nsw/Source/bsmd.database/PortOfItinerary.cs +++ b/nsw/Source/bsmd.database/PortOfItinerary.cs @@ -29,13 +29,16 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string PortOfItineraryName { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? PortOfItineraryETA { get; set; } [Validation(ValidationCode.LOCODE)] + [ENI2Validation] public string PortOfItineraryLocode { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/ReportingParty.cs b/nsw/Source/bsmd.database/ReportingParty.cs index 7f86eee1..3246f936 100644 --- a/nsw/Source/bsmd.database/ReportingParty.cs +++ b/nsw/Source/bsmd.database/ReportingParty.cs @@ -58,33 +58,43 @@ namespace bsmd.database #region NSW Reporting Party Properties [MaxLength(100)] + [ENI2Validation] public string Name { get; set; } [MaxLength(100)] + [ENI2Validation] public string StreetAndNumber { get; set; } [MaxLength(25)] + [ENI2Validation] public string PostalCode { get; set; } [MaxLength(100)] + [ENI2Validation] public string City { get; set; } [MaxLength(100)] + [ENI2Validation] public string Country { get; set; } [MaxLength(100)] + [ENI2Validation] public string LastName { get; set; } [MaxLength(100)] + [ENI2Validation] public string FirstName { get; set; } [MaxLength(100)] + [ENI2Validation] public string Phone { get; set; } [MaxLength(100)] + [ENI2Validation] public string Fax { get; set; } [MaxLength(100)] + [ENI2Validation] public string EMail { get; set; } public ReportingPartyTypeEnum? ReportingPartyType { get; set; } @@ -250,6 +260,8 @@ namespace bsmd.database #endregion + #region password related methods + public void SetPassword(string password) { using (SHA512 shaM = new SHA512Managed()) @@ -271,6 +283,8 @@ namespace bsmd.database } } + #endregion + #region public static methods public static LogonResult Login(string name, string password, out ReportingParty reportingParty) diff --git a/nsw/Source/bsmd.database/SEC.cs b/nsw/Source/bsmd.database/SEC.cs index b624c88a..3c9ac593 100644 --- a/nsw/Source/bsmd.database/SEC.cs +++ b/nsw/Source/bsmd.database/SEC.cs @@ -30,51 +30,61 @@ namespace bsmd.database [ShowReport] [Validation1(ValidationCode.NOT_NULL)] + [ENI2Validation] public bool? SECSimplification { get; set; } [ShowReport] [Validation1(ValidationCode.LOCODE_GER)] [MaxLength(5)] + [ENI2Validation] public string PortOfCallWhereCompleteSECNotified { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.CSOLastName")] [MaxLength(100)] + [ENI2Validation] public string CSOLastName { get; set; } [ShowReport] [LookupName("SEC.CSOFirstName")] [MaxLength(100)] + [ENI2Validation] public string CSOFirstName { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.CSOPhone")] [MaxLength(100)] + [ENI2Validation] public string CSOPhone { get; set; } [ShowReport] [LookupName("SEC.CSOFax")] [MaxLength(100)] + [ENI2Validation] public string CSOFax { get; set; } [ShowReport] [LookupName("SEC.CSOEMail")] [MaxLength(100)] + [ENI2Validation] public string CSOEMail { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ValidISSCOnBoard")] + [ENI2Validation] public bool? ValidISSCOnBoard { get; set; } [ShowReport] [LookupName("SEC.ReasonsForNoValidISSC")] [MaxLength(255)] + [ENI2Validation] public string ReasonsForNoValidISSC { get; set; } - [Validation2(ValidationCode.NOT_NULL)] + [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? ISSCType { get; set; } [ShowReport] @@ -82,6 +92,7 @@ namespace bsmd.database public string ISSCTypeDisplay { get { return Util.GetISSCTypeDisplay(this.ISSCType); } } [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] // [LookupName("SEC.ISSCIssuerType")] // wird manuell gescannt und konvertiert public byte? ISSCIssuerType { get; set; } @@ -93,41 +104,51 @@ namespace bsmd.database [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ISSCIssuerName")] [MaxLength(100)] + [ENI2Validation] public string ISSCIssuerName { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ISSCDateOfExpiration")] + [ENI2Validation] public DateTime? ISSCDateOfExpiration { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("SEC.ApprovedSecurityPlanOnBoard")] + [ENI2Validation] public bool? ApprovedSecurityPlanOnBoard { get; set; } [ShowReport] - [Validation(ValidationCode.NOT_NULL)] + [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? CurrentShipSecurityLevel { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string PortFacilityOfArrival { get; set; } [ShowReport] - [Validation2(ValidationCode.NOT_NULL)] + [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? GeneralDescriptionOfCargo { get; set; } - + [ENI2Validation] public bool? AreMatterToReport { get; set; } [LookupName("SEC.MatterToReport")] [MaxLength(1024)] + [ENI2Validation] public string MatterToReport { get; set; } - + + [ENI2Validation] public bool? KielCanalPassagePlanned { get; set; } + [ENI2Validation] public DateTime? KielCanalPassagePlannedIncomming { get; set; } + [ENI2Validation] public DateTime? KielCanalPassagePlannedOutgoing { get; set; } public List LastTenPortFacilitesCalled { get { return this.ltpfc; } } diff --git a/nsw/Source/bsmd.database/SERV.cs b/nsw/Source/bsmd.database/SERV.cs index b32b963a..3ba9b76c 100644 --- a/nsw/Source/bsmd.database/SERV.cs +++ b/nsw/Source/bsmd.database/SERV.cs @@ -26,18 +26,21 @@ namespace bsmd.database [ShowReport] [MaxLength(100)] + [ENI2Validation] public string ServiceName { get; set; } [ShowReport] [Validation1(ValidationCode.NOT_NULL)] [LookupName("SERV.ServiceBeneficiary")] [MaxLength(100)] + [ENI2Validation] public string ServiceBeneficiary { get; set; } [ShowReport] [Validation1(ValidationCode.NOT_NULL)] [LookupName("SERV.ServiceInvoiceRecipient")] [MaxLength(100)] + [ENI2Validation] 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 86ba03cc..4c843a34 100644 --- a/nsw/Source/bsmd.database/STAT.cs +++ b/nsw/Source/bsmd.database/STAT.cs @@ -28,46 +28,55 @@ namespace bsmd.database [Validation(ValidationCode.NOT_NULL)] [LookupName("STAT.ShipName")] [MaxLength(100)] + [ENI2Validation] public string ShipName { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(50)] + [ENI2Validation] public string CallSign { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(50)] + [ENI2Validation] public string MMSINumber { get; set; } [ShowReport] [Validation(ValidationCode.FLAG_CODE)] [MaxLength(2)] + [ENI2Validation] public string Flag { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] [LookupName("STAT.LengthOverall_MTR")] + [ENI2Validation] public double? LengthOverall_MTR { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] [LookupName("STAT.Beam_MTR")] + [ENI2Validation] public double? Beam_MTR { get; set; } [ShowReport] [Validation(ValidationCode.DOUBLE_GT_ZERO)] [LookupName("STAT.GrossTonnage")] + [ENI2Validation] public int? GrossTonnage { get; set; } [ShowReport] [Validation(ValidationCode.LOCODE)] [MaxLength(5)] + [ENI2Validation] public string PortOfRegistry { get; set; } [ShowReport] [LookupName("STAT.InmarsatCallNumber")] [MaxLength(100)] + [ENI2Validation] public string InmarsatCallNumber { get; set; } /// @@ -75,6 +84,7 @@ namespace bsmd.database /// [Validation(ValidationCode.NOT_NULL)] [MaxLength(1)] + [ENI2Validation] public string TransportMode { get; set; } [ShowReport] @@ -95,36 +105,43 @@ namespace bsmd.database [Validation(ValidationCode.NOT_NULL)] [LookupName("STAT.ShipType")] [MaxLength(5)] + [ENI2Validation] public string ShipType { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyName")] [MaxLength(100)] + [ENI2Validation] public string ISMCompanyName { get; set; } [ShowReport] [Validation(ValidationCode.STRING_EXACT_LEN, 7)] [MaxLength(10)] + [ENI2Validation] public string ISMCompanyId { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyStreetAndNumber")] [MaxLength(100)] + [ENI2Validation] public string ISMCompanyStreetAndNumber { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyPostalCode")] [MaxLength(24)] + [ENI2Validation] public string ISMCompanyPostalCode { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyCity")] [MaxLength(100)] + [ENI2Validation] public string ISMCompanyCity { get; set; } [ShowReport] [LookupName("STAT.ISMCompanyCountry")] [MaxLength(100)] + [ENI2Validation] public string ISMCompanyCountry { get; set; } public override string Subtitle @@ -136,13 +153,16 @@ namespace bsmd.database } [LookupName("STAT.NetTonnage")] + [ENI2Validation] public double? NetTonnage { get; set; } [LookupName("STAT.RegistryDate")] + [ENI2Validation] public DateTime? RegistryDate { get; set; } [LookupName("STAT.CertificateOfRegistryNumber")] [MaxLength(35)] + [ENI2Validation] public string CertificateOfRegistryNumber { get; set; } public static Dictionary VesselTypeDict { get; set; } diff --git a/nsw/Source/bsmd.database/STO.cs b/nsw/Source/bsmd.database/STO.cs index f88f93bb..678e9973 100644 --- a/nsw/Source/bsmd.database/STO.cs +++ b/nsw/Source/bsmd.database/STO.cs @@ -36,21 +36,26 @@ namespace bsmd.database [LookupName("STO.Name")] [MaxLength(255)] + [ENI2Validation] public string Name { get; set; } [LookupName("STO.Quantity")] + [ENI2Validation] public int? Quantity { get; set; } [LookupName("STO.QuantityUnit")] [MaxLength(16)] + [ENI2Validation] public string QuantityUnit { get; set; } [LookupName("STO.LocationOnBoard")] [MaxLength(64)] + [ENI2Validation] public string LocationOnBoard { get; set; } [LookupName("STO.OfficialUse")] [MaxLength(16)] + [ENI2Validation] public string OfficialUse { get; set; } #endregion diff --git a/nsw/Source/bsmd.database/SanitaryMeasuresDetail.cs b/nsw/Source/bsmd.database/SanitaryMeasuresDetail.cs index f321763f..f85b1244 100644 --- a/nsw/Source/bsmd.database/SanitaryMeasuresDetail.cs +++ b/nsw/Source/bsmd.database/SanitaryMeasuresDetail.cs @@ -29,13 +29,16 @@ namespace bsmd.database [ShowReport] [MaxLength(255)] + [ENI2Validation] public string SanitaryMeasuresType { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] public string SanitaryMeasuresLocation { get; set; } [ShowReport] + [ENI2Validation] public DateTime? SanitaryMeasuresDate { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs b/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs index 5fb7a5c7..50cd4b34 100644 --- a/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs +++ b/nsw/Source/bsmd.database/ShipToShipActivitiesDuringLastTenPortFacilitiesCalled.cs @@ -28,33 +28,41 @@ namespace bsmd.database [ShowReport] [MaxLength(255)] + [ENI2Validation] public string ShipToShipActivityLocationName { get; set; } [ShowReport] [MaxLength(5)] + [ENI2Validation] public string ShipToShipActivityLocationLoCode { get; set; } [ShowReport] + [ENI2Validation] public int? ShipToShipActivityLocationCoordinatesLatitude { get; set; } [ShowReport] + [ENI2Validation] public int? ShipToShipActivityLocationCoordinatesLongitude { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? ShipToShipActivityDateFrom { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public DateTime? ShipToShipActivityDateTo { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [MaxLength(255)] + [ENI2Validation] public string ShipToShipActivityType { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] 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 753dd5e4..2658e4ea 100644 --- a/nsw/Source/bsmd.database/StowawaysJoiningLocation.cs +++ b/nsw/Source/bsmd.database/StowawaysJoiningLocation.cs @@ -29,6 +29,7 @@ namespace bsmd.database [ShowReport] [MaxLength(255)] + [ENI2Validation] 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 461e2890..0ebf7813 100644 --- a/nsw/Source/bsmd.database/SubsidiaryRisks.cs +++ b/nsw/Source/bsmd.database/SubsidiaryRisks.cs @@ -28,6 +28,7 @@ namespace bsmd.database [ShowReport] [MaxLength(11)] + [ENI2Validation] public string SubsidiaryRisk { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/TIEFA.cs b/nsw/Source/bsmd.database/TIEFA.cs index 022dcd83..7be152f4 100644 --- a/nsw/Source/bsmd.database/TIEFA.cs +++ b/nsw/Source/bsmd.database/TIEFA.cs @@ -26,6 +26,7 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.DRAUGHT_IMPLAUSIBLE)] [LookupName("TIEFA.DraughtUponArrival_DMT")] + [ENI2Validation] public double? DraughtUponArrival_DMT { get; set; } public override string Subtitle diff --git a/nsw/Source/bsmd.database/TIEFD.cs b/nsw/Source/bsmd.database/TIEFD.cs index 312d6da0..751ced61 100644 --- a/nsw/Source/bsmd.database/TIEFD.cs +++ b/nsw/Source/bsmd.database/TIEFD.cs @@ -23,9 +23,11 @@ namespace bsmd.database } #region Properties + [ShowReport] [Validation(ValidationCode.DRAUGHT_IMPLAUSIBLE)] [LookupName("TIEFD.DraughtUponDeparture_DMT")] + [ENI2Validation] public double? DraughtUponDeparture_DMT { get; set; } public override string Subtitle diff --git a/nsw/Source/bsmd.database/TOWA.cs b/nsw/Source/bsmd.database/TOWA.cs index 37de32ca..a2dff0b0 100644 --- a/nsw/Source/bsmd.database/TOWA.cs +++ b/nsw/Source/bsmd.database/TOWA.cs @@ -23,71 +23,88 @@ namespace bsmd.database } #region Properties + [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalName { get; set; } [ShowReport] [Validation(ValidationCode.FLAG_CODE)] [MaxLength(2)] + [ENI2Validation] public string TowageOnArrivalFlag { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalOperatorCompanyName { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalOperatorStreetNameAndNumber { get; set; } [ShowReport] [MaxLength(24)] + [ENI2Validation] public string TowageOnArrivalOperatorPostalCode { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalOperatorCity { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalOperatorCountry { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalOperatorPhone { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalOperatorFax { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalOperatorEmail { get; set; } [ShowReport] - [Validation(ValidationCode.INT_GT_ZERO)] + [Validation(ValidationCode.INT_GT_ZERO)] + [ENI2Validation] public int? TowageOnArrivalGrossTonnage { get; set; } [ShowReport] - [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? TowageOnArrivalLengthOverall_MTR { get; set; } [ShowReport] - [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? TowageOnArrivalBeam_MTR { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string TowageOnArrivalPurposeOfCall { get; set; } [ShowReport] - [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? TowageOnArrivalDraught_DMT { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] 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 c97ada62..9f048c73 100644 --- a/nsw/Source/bsmd.database/TOWD.cs +++ b/nsw/Source/bsmd.database/TOWD.cs @@ -27,56 +27,70 @@ namespace bsmd.database [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string TowageOnDepartureName { get; set; } [ShowReport] [MaxLength(2)] + [ENI2Validation] public string TowageOnDepartureFlag { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnDepartureOperatorCompanyName { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnDepartureOperatorStreetNameAndNumber { get; set; } [ShowReport] [MaxLength(24)] + [ENI2Validation] public string TowageOnDepartureOperatorPostalCode { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnDepartureOperatorCity { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnDepartureOperatorCountry { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnDepartureOperatorPhone { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnDepartureOperatorFax { get; set; } [ShowReport] [MaxLength(100)] + [ENI2Validation] public string TowageOnDepartureOperatorEmail { get; set; } - [ShowReport] + [ShowReport] + [ENI2Validation] public double? TowageOnDepartureLengthOverall_MTR { get; set; } - [ShowReport] + [ShowReport] + [ENI2Validation] public double? TowageOnDepartureBeam_MTR { get; set; } [ShowReport] - [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [Validation(ValidationCode.DOUBLE_GT_ZERO)] + [ENI2Validation] public double? TowageOnDepartureDraught_DMT { get; set; } [ShowReport] [MaxLength(255)] + [ENI2Validation] 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 c3b5f7c6..630efce5 100644 --- a/nsw/Source/bsmd.database/ValidationAttribute.cs +++ b/nsw/Source/bsmd.database/ValidationAttribute.cs @@ -70,6 +70,22 @@ namespace bsmd.database #endregion + #region ENI2 Validierung + + /// + /// Wenn ein Property damit dekoriert ist, steht es im Validierungs-Editor als Parameter zur Verfügung + /// + [AttributeUsage(AttributeTargets.Property)] + public class ENI2Validation : Attribute + { + public ENI2Validation() + { + + } + } + + #endregion + #region allg. ValidationAttribute (wird immer geprüft) [AttributeUsage(AttributeTargets.Property)] diff --git a/nsw/Source/bsmd.database/ValidationCondition.cs b/nsw/Source/bsmd.database/ValidationCondition.cs index 22e1cb40..c048cf26 100644 --- a/nsw/Source/bsmd.database/ValidationCondition.cs +++ b/nsw/Source/bsmd.database/ValidationCondition.cs @@ -10,6 +10,7 @@ using log4net; using System.Collections.ObjectModel; using System.Collections; using System.Windows.Data; +using System.ComponentModel; namespace bsmd.database { @@ -22,10 +23,18 @@ namespace bsmd.database public enum ConditionOperatorEnum { + [Description("==")] EQUAL, + [Description("!=")] NOT_EQUAL, + [Description(">")] GREATER, - LESS + [Description("<")] + LESS, + [Description("IS NULL")] + NULL, + [Description("IS NOT NULL")] + NOT_NULL } #region Properties @@ -113,6 +122,8 @@ namespace bsmd.database return result; } + #region Serialization + public static ConditionGroup LoadFromString(string serializedConditions) { if ((serializedConditions == null) || @@ -125,6 +136,7 @@ namespace bsmd.database { XmlSerializer serializer = new XmlSerializer(typeof(ConditionGroup)); ConditionGroup container = serializer.Deserialize(sr) as ConditionGroup; + container.CopyToObservable(); return container; } catch (Exception) @@ -144,6 +156,7 @@ namespace bsmd.database { Type theType = Type.GetType("bsmd.database.ConditionGroup, bsmd.database"); XmlSerializer serializer = new XmlSerializer(theType); + group.CopyToXML(); serializer.Serialize(sw, group); return sw.ToString(); } @@ -154,6 +167,8 @@ namespace bsmd.database } } + #endregion + /// /// evaluate logical group operator /// @@ -259,6 +274,11 @@ namespace bsmd.database #region class ConditionGroup + /// + /// Diese Klasse benötigt (blöderweise) für eine Sache 2 Collections: einmal für die XML Serialisierung und einmal + /// für die Hierarchie im WPF Treecontrol (ObservableCollection). Daher müssen die Inhalte beim Laden und Speichern hin und herkopiert + /// werden. Was für ein Scheiß. + /// [Serializable] public class ConditionGroup { @@ -274,28 +294,37 @@ namespace bsmd.database public ConditionGroup() { Conditions = new ObservableCollection(); SubGroups = new ObservableCollection(); + XMLConditions = new List(); + XMLSubGroups = new List(); } #region Properties - + + [XmlIgnore] public ObservableCollection Conditions { get; set; } + public List XMLConditions { get; set; } + public GroupOperatorEnum GroupOperator { get; set; } + [XmlIgnore] public ObservableCollection SubGroups { get; set; } + public List XMLSubGroups { get; set; } + + [XmlIgnore] public IList Children { get @@ -315,7 +344,7 @@ namespace bsmd.database #endregion - #region public recursive removal methods + #region public recursive methods public void Remove(ConditionGroup group) { @@ -341,12 +370,57 @@ namespace bsmd.database subGroup.RemoveCondition(condition); } + public void CopyToObservable() + { + this.SubGroups.Clear(); + foreach (ConditionGroup cg in this.XMLSubGroups) + this.SubGroups.Add(cg); + this.Conditions.Clear(); + foreach (ValidationCondition vc in this.XMLConditions) + this.Conditions.Add(vc); + foreach (ConditionGroup subGroup in this.XMLSubGroups) + subGroup.CopyToObservable(); + } + + public void CopyToXML() + { + this.XMLSubGroups.Clear(); + this.XMLSubGroups.AddRange(this.SubGroups); + this.XMLConditions.Clear(); + this.XMLConditions.AddRange(this.Conditions); + foreach (ConditionGroup subGroup in this.SubGroups) + subGroup.CopyToXML(); + + } + #endregion } #endregion + #region class ValidationField + + /// + /// Diese Klasse wird beim Bearbeiten im Regel-Editor verwendet (ENI-2) + /// + public class ValidationField + { + public string PropertyName { get; set; } + public string NotificationClassText { get; set; } + + public Message.NotificationClass NotificationClass { get; set; } + + public bool IsInListType { get; set; } + + public override string ToString() + { + return string.Format("{0}.{1}", NotificationClassText, PropertyName); + } + } + + #endregion + #region struct KeyValuePairS diff --git a/nsw/Source/bsmd.database/WAS.cs b/nsw/Source/bsmd.database/WAS.cs index e77dd314..e16248b9 100644 --- a/nsw/Source/bsmd.database/WAS.cs +++ b/nsw/Source/bsmd.database/WAS.cs @@ -36,29 +36,35 @@ namespace bsmd.database public static string[] DKWasteTypes { get { return dkWasteTypes; } } [ShowReport] + [ENI2Validation] public bool? WasteDisposalValidExemption { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("WAS.LastWasteDisposalPort")] [MaxLength(5)] + [ENI2Validation] public string LastWasteDisposalPort { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("WAS.ConfirmationOfCorrectness")] + [ENI2Validation] public bool? ConfirmationOfCorrectness { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] [LookupName("WAS.LastWasteDisposalDate")] + [ENI2Validation] public DateTime? LastWasteDisposalDate { get; set; } [ShowReport] [Validation2(ValidationCode.NOT_NULL)] + [ENI2Validation] public byte? WasteDisposalDelivery { get; set; } [LookupName("WAS.ConfirmationOfSufficiency")] + [ENI2Validation] public bool? ConfirmationOfSufficiency { get; set; } public List Waste { get { return this.waste; } } diff --git a/nsw/Source/bsmd.database/Waste.cs b/nsw/Source/bsmd.database/Waste.cs index c9272f80..4bd42faa 100644 --- a/nsw/Source/bsmd.database/Waste.cs +++ b/nsw/Source/bsmd.database/Waste.cs @@ -83,31 +83,39 @@ namespace bsmd.database } [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public int? WasteType { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] [MaxLength(100)] + [ENI2Validation] public string WasteDescription { get; set; } [ShowReport] [Validation(ValidationCode.NOT_NULL)] + [ENI2Validation] public double? WasteDisposalAmount_MTQ { get; set; } [ShowReport] + [ENI2Validation] public double? WasteCapacity_MTQ { get; set; } [ShowReport] + [ENI2Validation] public double? WasteAmountRetained_MTQ { get; set; } [ShowReport] [MaxLength(5)] + [ENI2Validation] public string WasteDisposalPort { get; set; } [ShowReport] + [ENI2Validation] public double? WasteAmountGeneratedTillNextPort_MTQ { get; set; } // "dänisches" Zusatzfeld + [ENI2Validation] public double? WasteDisposedAtLastPort_MTQ { get; set; } public string Identifier { get; set; } diff --git a/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs b/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs index c4d65df4..5bdc79f6 100644 --- a/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs +++ b/nsw/Source/bsmd.database/WasteDisposalServiceProvider.cs @@ -28,9 +28,11 @@ namespace bsmd.database [ShowReport] [MaxLength(100)] + [ENI2Validation] public string WasteDisposalServiceProviderName { get; set; } [ShowReport] + [ENI2Validation] public byte? WasteDisposalDelivery { get; set; } public string Identifier { get; set; }