From b5d4a163fdd2d7ec8e58a227e67c3a532e44d454 Mon Sep 17 00:00:00 2001 From: ivanszabo Date: Tue, 8 Apr 2025 14:59:35 +0200 Subject: [PATCH] =?UTF-8?q?Blokkol=C3=A1s,=20felold=C3=A1s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CheckListController.cs | 64 +- .../Pdf/CheckList_Template_V1.docx | Bin 23103 -> 23178 bytes .../DocumentGenerator/SablonGenerator.cs | 4 + .../Mappings/MapperProfile.cs | 2 + .../Services/CheckListService.cs | 198 +++- .../Services/Interfaces/ICheckListService.cs | 10 +- .../DTO/CheckListHeaderDTO.cs | 26 +- .../CheckListHeaderTypeConfiguration.cs | 8 +- .../Entities/CheckListHeader.cs | 2 + .../Entities/DeviceMessage.cs | 2 + .../20250408065515_Extend017.Designer.cs | 942 +++++++++++++++++ .../Migrations/20250408065515_Extend017.cs | 77 ++ .../20250408072927_Extend018.Designer.cs | 956 +++++++++++++++++ .../Migrations/20250408072927_Extend018.cs | 77 ++ .../20250408105039_Extend019.Designer.cs | 957 ++++++++++++++++++ .../Migrations/20250408105039_Extend019.cs | 70 ++ .../Migrations/AppDbContextModelSnapshot.cs | 34 +- .../CheckListHeaderPage.cshtml | 80 +- .../CheckListHeaderPage.cshtml.cs | 44 +- .../Services/CheckListService.cs | 64 ++ .../Services/Interfaces/ICheckListService.cs | 7 + src/WorkFlowCheck.Web/wwwroot/js/site.js | 29 +- 22 files changed, 3576 insertions(+), 77 deletions(-) create mode 100644 src/WorkFlowCheck.DL/Migrations/20250408065515_Extend017.Designer.cs create mode 100644 src/WorkFlowCheck.DL/Migrations/20250408065515_Extend017.cs create mode 100644 src/WorkFlowCheck.DL/Migrations/20250408072927_Extend018.Designer.cs create mode 100644 src/WorkFlowCheck.DL/Migrations/20250408072927_Extend018.cs create mode 100644 src/WorkFlowCheck.DL/Migrations/20250408105039_Extend019.Designer.cs create mode 100644 src/WorkFlowCheck.DL/Migrations/20250408105039_Extend019.cs diff --git a/src/WorkFlowCheck.API/Controllers/CheckListController.cs b/src/WorkFlowCheck.API/Controllers/CheckListController.cs index e219757..18dd1a7 100644 --- a/src/WorkFlowCheck.API/Controllers/CheckListController.cs +++ b/src/WorkFlowCheck.API/Controllers/CheckListController.cs @@ -47,7 +47,7 @@ namespace WorkFlowCheck.API.Controllers IsSuccess = true, }; var checkListHeader = await _checkListService.GetCheckListHeaderAsync(id); - var response = await _checkListService.CreatePDF(id); + var response = await _checkListService.CreateCheckListHeaderPDFAsync(id); if (response != null) { @@ -131,6 +131,68 @@ namespace WorkFlowCheck.API.Controllers return retVal; } + + [HttpGet("AcceptCheckListHeader/{id}/{userId}")] + public async Task> AcceptCheckListHeader(int id, int userId) + { + var retVal = new ApiResponseDTO { IsSuccess = false }; + + var response = await _checkListService.AcceptCheckListHeaderAsync(id, userId); + + if (response) + { + retVal.IsSuccess = true; + retVal.Data = response; + } + else + { + retVal.IsSuccess = false; + retVal.Errors.Add("No data!"); + } + + return retVal; + } + [HttpGet("BlockCheckListHeader/{id}/{userId}")] + public async Task> BlockCheckListHeader(int id, int userId) + { + var retVal = new ApiResponseDTO { IsSuccess = false }; + + var response = await _checkListService.BlockCheckListHeaderAsync(id, userId); + + if (response) + { + retVal.IsSuccess = true; + retVal.Data = response; + } + else + { + retVal.IsSuccess = false; + retVal.Errors.Add("No data!"); + } + + return retVal; + } + [HttpGet("UnBlockCheckListHeader/{id}/{userId}")] + public async Task> UnBlockCheckListHeader(int id, int userId) + { + var retVal = new ApiResponseDTO { IsSuccess = false }; + + var response = await _checkListService.UnBlockCheckListHeaderAsync(id, userId); + + if (response) + { + retVal.IsSuccess = true; + retVal.Data = response; + } + else + { + retVal.IsSuccess = false; + retVal.Errors.Add("No data!"); + } + + return retVal; + } + [HttpGet("GetCheckListTemplateHeader/{id}")] public async Task> GetCheckListTemplateHeader(int id) diff --git a/src/WorkFlowCheck.API/Pdf/CheckList_Template_V1.docx b/src/WorkFlowCheck.API/Pdf/CheckList_Template_V1.docx index 914e80a5e3889c3abdb8f910f93c417b4fffb9c6..6b0a26426f6f42b3d2b91e7507fe56d8bf493ffa 100644 GIT binary patch delta 18640 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 E08GS)NdN!< delta 18650 zcmeFXWmKL)lP!w7yF-EpcemiK3GVI?TpuJzaCdh}aCavJcXxMpJ8wRjJ9B2vk9&UJ zb?LQOZMAE6S9d>E-EUYucxN3rvXU$$6c!j992^+0Yd|bAF%Ty&3n_vWeEy0pdbVmq z7y5hb?&D|skGHVjQ%}w&#$eejf4#4XAhaljS9rYX^`(x>iB5Io`~eG zYw_xp%Z)U4p~@~fE>hufsmZO;(3nV5s4e04Zpm)%J=`{EGpV-~KAP9NNO+U2Bnu07 zFab`!2nGfw009Q}Uq-G4s{F@aJQp}MFd$igPp&NL9n&WkI?%YJo73Vdzs&M*?@CBm z(%0y9#v^cFKJ-F%ZGbuu_IXr^os0&oKU}Wl6zP|G_yrF197|$#n-a6AWR*qM8ikIk z9-cdA5X?5zLKh*eY;#s_rc;`c%_9m$Eo7xq)(Vyc>wfN{(dYy2GDH-7ssVfyU^>F0 zLm1rRCPqCRai7$}?qM9`h{PkMG`3}dwplypAA5Hc7~HHRvl&HDA;VXrPWtm8=*t)6 zGDGs)SIGz4$D64L0)#J>VURNMs^kfT1}HUMgcA)qgKa41q+bye1}LILS&_GgJ`qeB z%E5amUR2)K8xrDD{aR$ZaD+)B1adPw4Q1b?+%wqf8D4v)b@2r&2&J>j6jRxblim&p z!53F2y>y0Lh=)|q-eU(o;0ICYiDUAnOruzc3l@oMM8=9ZRVERz_# zv>K?KPS*&&TbnAAb+z1`hj6e7qUxPB?>nG4T;5I9cjHH3%itJd^c#Z3(K7Co!U_G^ z*Cc_NQy#J`r@-38wrQetb2m@;hbj1^w7*9>c?QOqB0JAWWF=*lCLWetPh`ZDS$A(p zR|DrL1)|s7dLNs(V~8H)qJuX#ns{2@)4ugTJumur%&tXmVDPT0!0yxwElTJ#qvThI z%kElehoMNFER%PkYBdHZ?+b;rh5qSUWQ-p04Vg*Y2SjhoN^$F14u3_Lp$MZ{JBG z0?9l7&iP0bLbnoV&K3UmIgb~CrUD3g&^pdlo2bm$jBPNt!=(K`2t#Wi^cGn$Y1c>? zTTe=<#tjU#b+2(ocRMMy%^%qhyhm-vP{KP^$F$5o%{%lAk{w(LkaK85>+Ps#z2F? z{ZO#di!eb2F*DmLt5*>@*7i-_auj@2%rP>I&paQgTvzc7($Y(ztZg)whs-ICe-eFT z&d~Tq@H-dV36xS?)V$0$6iILMd_DQcd9-E@5 z#i^|C#JgB#pR`lNVrWS*;9=D!4lJALK%R}*4oP23Co?R3bAf4af@HDDx}(|7k)3f- zlalfDqBNacR&A^q?uoU-ymlIrpN=IDkm=n6i%D|J)s^JemwgLfq)`JJ5gqydoYqww zIxqLsZ3(LWI&-%xU?>{&=9(W*K4Wz)A1@{cPnN+CVNeW8F^mt;=zc#=AqI1|J~eHT zWFO&R$TA1#u=&%TUt60WUJO*edA}4pY4N_iZjU}r_TP>+e~tS(o2S1Xgy=BZYPg6} zR2AF3EqYEOt@-&o+0zY>x-KLL=e(>Fs^I#=I>VnawWn#>Lc>qyLK?ZONgWkp+lxmg z;T)63Tv}L(;##_R4=?zv?Ihy@W#@{G*{F0x9KA!-kkO``Ap;UIf^zuu0Q*-R20PC0 zRyi3QrtERY%FZ4?Ay|pcuk5Ox=zE{_SOg|7VqYC|YBG+|H%!a``TQj_ipaz7{Df7` zX4I}Nhxq0&9B2_NJ0Z>^jwSCWrC(DW7OY#pwC0v>dgd=_Ft_O<6BrMtidd@uPN8Nq z5_wL)6_o$kw4t-n$EH zlxi;(CF3Fs{~=KsO0Vxu`&#C_NfSXzdSJmL`r?Q}VE%D6i!8Yi+0S#fV4{PM*`vtc zJv4Sn49>(%Tt6V z+T$RYedq`V&?g^+6oUr;+cA$%+-{ws5x4J+rHjxA@>6gqa0$P)zZ?5r9juyQzPBsx zQA9J2wVRs94=RRT$th<&W;xUTVH5Y*oA-IaU96_*e{n9*RSxq|rMSw&xsGRBo-_K& z?9pp9l42MBptcBKM01(JLFk`T*Wv>;L)r2feJd3BoUqQzE<8i$c9iJ_N0Ra~ z7Jj+f#SYBl*kZ|^f`>Y#9Wuc&@eHrGqm%WViiQ-5j$jk2m5fc(cb;iE{?1`M8sVD@ z?vlWPL?VxSfs!I2XNn#lt7hJd=T%SIBh5dWv{`}$8Dhmw;mO%Hvc^vT< zC`7fBh`!*EAjb<-z=pdM9NI6c&rIbcI_&$j*-@rnd(@gulg7wMVt@Baj z$F&@;904-EfL}h>WAZU0gFqbF93uz5tx|E+d``+TP4^_X>Ju{8Ck|6uZaK(IEFfia z$tzuAl46Mfk@qAK2K(AD>eC8tMi%Kaug`MEIz z!$}7R#v9=wmP(_~Oeqw4$`0e2Sg!JW5SngrSM{;2j!sls-AuwTiS}qw4J&-VRfaid zSc$t0DAD2`B1?k!wS93XyW(YLAwGj2N1a>mO;W&QeSZEUj3wbr6sP&uTp~F z1nkme;A$+uP0h!*NyZ<>a7ZP>1w27+n+KP4fv|QH@#3fW<i=^C4v?_`iFhSyU$FhfNr#i5b=9d-DeSgGY(zKD`J&Lv&?s{$i~_~X&IH(S z4b54XFFt7ma>|8K5cT&mgT?-d`0){b9hYg+hdUjGD*P7&ra>jMw1!qW2^@J!A0V3OLlV%xtSI(@EujJ{~4iJj(sdv)>0(8g|wHD>nd{ft3k`4 z*Sdr^Jo~Y!kNpbk+j4pT`5=+LEwDb<`)0no-uuRIjZ4=76&ZI%y`bF)2OjIJ`MP~z z8)ay|>W$`CUvjujv%td@WpKF){<6PI{n>Up^v3Pv)A?}D_OmPVhg+|yn}2*fwQr;^ zlR?(}3jej^q2a<~RU$G(t4pO80_zoGf5q=~uMO|DvX4+}8~B+t$wlfL%}M%pTlv1L zzt*{C1L%vTOT4`9?j7IT3-a4HR_d>>*pOu9Cok?XmCsw?zn@vw`=;7%0~MVsZIyG; zmB+K9b&Gu=faXe_oxK+qQ|;qb?Uccz1teBFL^s((!gT{H;FAN3ZW!`M+2D~f-ucL!#;}(?e~o%cJ?=I< zx=TH2Q`^2gVvb8HXv6rHO0qxLgns#>ZDiZ&DTT-kxDU}@91IDR>5R_`d`M57VX^#;`_s#Mv8CN<^h1@W_Q3n<(e3n%rVR;or+`@H@&iOT(3(LBdEs*vBz`q- zf313PbDUn=bqH&pT5=fjzKvGXOiHMkux|k*=?q4iaZbe0D#;T3K0vd57Ii*BovarU z8-GLdc@{-FL1m%$4Lv;)k?Xj-_`~&`zU2w|gJp%U=DV{(O#zc4D7ohi&tot zdibEl>I2J@t@YFExq75xWo=0F!sblx)9TCcb;IQ$4@26bL3>-K@9D$(DA(t&_g9>| zOWmf%3&ZKjM}hAQo*A9(L@g2-Xr6%W5n2z@)Ui^K6pZlHcgDlZ{_AsPVj+Cvp~rja zXr`=pznh01@AcYB_H7MJ8K%mP*LprJhOfuPjX`DnH>Z^w#&DLHCrn%0m!{%*_5ieg z!uY^yujtPe3J)1g$ysF@#4=t4AJZ>`c}&$u8h!O&iGOz-ypcb-bnsmKn!Et)#xzuO zw%Y_^k{RA!ZR@eS>coF-b?VyX?^0Pw<=2;1UmA6&MzdV@6{CppLzY3JD+V12e|O4b zh3nlZi4y0R{aclMBrJDb^jn|kx(F}GcnvH6Vl>@|zQZG4H@^fDJsjJGtZ0h?#^}@9 z39kfkXs$b=2wr$2UU;c{IN+ZW)`%Ah%55d(yN4@tgGxb_?%~xBpv>P6|Iz;MOzm2v z3XCEBni2iKFpd6#^Q)WCt{GuPZ81n}(t+AKwipIL`u@@OSMh(!1aC1w{f9j8?>72N zga0dlf6M=DF#f-h2mVR!c`4>+t*#jI?9~j_d>PEHr^eN7dn?Qvxo6niwS2!=5wOHK-wCt2Yl8{lZ}zU)+FOm*Kc~K`ZZwg5lGpI4(T9H6}e= z8I<&n4V?GQyZiYE_sacppDBHxXZN>{OS}5p{R7MT zsJO=BJN-qsyR++8Av48g3x+rOC&v}PHNk^%)R0;YF~wycrc=e1C#H4*3heWVt~#da zXyC`(FkrLK=PAHATGp1@IBv_btYGhR8fS^4?+EDs`R0iK+K}i&LOsJ2GA_xKKHI|M znf1%9lTTMNq!aHG=5sQQ=j$8&z$SFZs(nZJv}-M2bYt==?q0Y)ZfZv~aDTeJS=*cF z`OIN!;tuu?%sh%ZF4L}3y?BhJg(U5-I#TLBoa422t_4A&Q_(b?~}vGmSrQ`iRpDa z!_fVzd6MO_N|9|iqpdd2)ZI5TqoEzMYPqrG-|`gSvc&9eDS}!hV}9G3er%M+ctjiU z_ymN*FP>zY?+B;H{nDZJkSq21MDqSiUL?G)Dbw|-y(k6`QrZX!4kJHbE&@e2=y*pe z95bTzle_I$z&uLh#;DsnQ1^irNP1lUvS*)MQ{^H+V-tAYcTB@px$UJ}OLUp_taG!@!n6rbEDDmS|RX#o8J*9^%jUSUMHp!f-+uLkMha>cJiEv|E!0P+gd(J zLL=!V3<@DpCHUqI?qAy`NMVaD+p}NLkY1H|Zbbj&l72NkfE7W06?Wy13+d%V>u&PDzNnF}vo|RokbcgT?H#+kJC`PKwS$MrDPBBGxYO z)62eCHl;u}^KGCZ-HomQ%V(v{WfB;o{*nRnT1HE6c_@<=;p!wP9CLrvEv>p#9iqQ< zcRE?2I@>O9dasqJoGY8I>no!`oLaD&3c_G=3sww^vMCK0siu2~sON1Qik2TgnHMC% zbu)XG)OfX=lZ`u5+D|0)>$I=tHD$Evuu7TIyV)5 zIE)`}H9mhfxn|X-m#9@wBf%(BpKq98nwi&gEo`*S=4h`F`(u|wC-7L2-;>{bU5F#$ zcwc=xv@h%4s-~vj-IM2ijHn@is?%vwST`v!IiP!G93L?R@k;Dt#_a#u1HBH7I+d#D*K3SJMN4-_j5V%m&_X( zhg-45%7>+TDzmTsLyX&)6S5>w^*^b?dsCxOIz9PzPv_FjCGVy`_E8N>+Mb;Oig7LG)xgWx%Igm+jQa_O z-2Kyz%%i%taSc_uKB>yp(@`?D*c}exoQEet^$*)2 zjiau&aUIjN)*}bw?||IfN^w6^qE7SKFrRr^f(3rjcgbM~t85HTdwW`_tL6RKr{q!6 zP6_>Qd*V-#Lhp(%nL_XOFAU2kP1*g0zV!v*9X37QVI4p71{Bw`cKd&FHeld)%(aCq0vR zE4|YgxXkAxcL1(p*-iTp`F6s0pF5T`eVoCQ6UDc%v+DKl(t>Z|+cWuThTJylKC8)v z*^J~d?Fkbnzn_{c@~0x#YmjAx66$wZUB>RFlOk{XC$I!MCw=J_PiRRRQaGevuE!}+ zsZfp;oZ1cIjN$kY5Hoko(q34H?uBbyS}<8Hk$HPOtpP&3c+{T8;lTs0q3hF~X=_Nb z#dxMAMRXZQ@qilj~k)RS~V6-c@l7CC)M(4J>uvpLj;+K;_t8QbQK!H$G;wH+?`t{ z#^yPhmIH&|WyS57KURN`rTBv~i-4n(hfP+ts! zRrAPN{Yl#UY>T(8wosQ^#`m7-55M!~fx{&Qe>xC0I9R&OpHuGHRpHakb>E8?W~r)R zz>X@iyXy5;$GO}ZQtUgBneMZqGu`oec}}i;Vy}*h;~N~8R^sbdnvu!4M@4(5&8~UV zE1RaXf*Ad4C^@l)vR&3-5;ZSVYYMgh*9_6EXo%X-;44{62<5BN3eSkL(2ZvwsHjBw z3Mj4k|4|k~f&rC1+5R>s4=D?=4s3kayImUlfC!Q>-NXQFOoI>w^_0n+>OKwpM zi{g})#B!^3oJIGU(n?+HQ5Dcmq3*Qdx6WeL;rEGIeXYVHo7K$Zt4qJj}f=*nr+|Dol%gl9FLs>~l@!S0LPVBYg zP|%J4jpgaZY|RIefT(Uv=tCQC1;f`~1*G>o|0x_lsS;go=$fi10W45#vPlxM&2^xEoKPIIX#`DbY|pZM|O zm1F0~CqA6#dG>7~iwvedR?T4H1i|M-yG2ZIL2a;Pwl7h`HwaGpNSW!c?<5^JRiUoO zTYBp0CWNg5A{p=fXQeZnioC$8>l2Y@Eayf#>hLTpMn|pS&#&^GtZl2O6v?lDMh_!? zH~-l~Pc~`Fx}u!ycQ~CVGODAIuuf%!Tsm)Y4K6;EsT)Z2nIb5@wPN?|y5XPxv_2vf zQlkHWjw6W0o9Ozcs=ORQkRem%%A}Algl6Ad6z9>Xx?|Vedh(6%F5wL@3c+USY4aFq zv+*^Xy8p=1n2kI5-lYF)+uG2L;|~r85e|02d$O(?nf8aN_QYRG+%^vQY!q%tvw84K zG?u2DD6G+&J1kEJR3kzjy(@5scOEQZIN_b6bLOd+S)ltB;$zq3`EC1JA7#b(YoF|+ zRDBW{(Z^F`1u0YqCl6MDYhV3$Z-@K&8~Llemb$M7Y4jD3S@quF>{B!PwG7d9<>57D{@?a3|M{%P;_#R2#~M4P1LZXIyp_)eH{U_Ti&I;e3mw=c=pw(V2K zfnM*o^YL==1XfsSB(^8??Ao`gl+ol!V#py}N^l=PLE-F{9K{uYZ+y@PCAtS#-=4mC zk3-Gc3patcrF-OYy<>m9_y!g?erGlq!pRb!XwLvgxWdSPRTJ%C7uC7H&sR*H*Dbui zzbOiUeX>SM+)Ar=DoGFm`^l`fXYl)Gul^ML)Q<&~6eEM`f)eWu4FE?l)3J z?d&~(NYM>|e7eBB3}SdiR7t>GhZxhhdTp63fU0&#JD`-f6#m_7H;!CRt517j!*0XK z$o$$sf_3jor6ZSOzEyGOkaB0SMhI=Xsq;2zkjq_k;nxTd^rkmqT@kJARDJ|o3;00T zrOkcub?WtF)Z&DX@%3nTiYLo$oP2wp{_Nun9Z-v+YR`O)QM4wb(7s=pT!G4T1{cW1 zM6m>KFS#QPJ^f)69IAhbxQ`e%illSw^BwV-ewMCzwb8FRfyA~nYEGUbmneS`>yey1 zb&Ds7qqlw_!pOeJ6EW{lKc;hQ@_7Fzfey=Wy~_!ST+e<{!tZC;(L{zcpz`)?< z)FWG+v(c})5+EfuPUh(N(R9dUa#gg*6wn=L(24*&1Y8sogx&#vi2lu5UxOjvB9r|g zTLYG=CVu)cijQ4*21v}D(8i9nWW;!couvCsr~;?*=o5{_ZLfy#J<%#3Iy zczA?R2m}$@HjCp4C;ZLG%rJP#$OD67PEV}l_d$-fz38$ z1?T}{Y6Bar{=5`|ep(b%2}7H%CgB_-0~<6N3+A&bQz6xw>m5!IbsbJTQcQFZ5DZ>= zKy}k`EJ{T0rB@EbcE!I509*f!fZP9>K(jRLfPkN4(aTMSU$rt;xRDiBF*iS6P&N2A zgnyWSwMb4*chg|ftK867{4$uapW~u|x15+C3y6vh%s`;FBXuDgGs?X#A1h>S?pX(B zW+R{x#f-IPl*Zg~mEr$-aUl4}!>MU6v~osNjE3P2UlO@Nz5XyX{wuj+hM1?$!%kP* zky&j&a(J}+k?ZR}uXt?6kx zcRsRFSFzpdWqCUAH8A_-L2%*ovb@IBb8=vV@B;aPWF<^{ZD^D5zQxHs3|Y6iU>8no zJFW;G3(Q;boVwjnKddl$`Qo&??u+z;>$FT4*TynV2S>0)78};aa-TK^2m;0%)vn&_ zwf<;BSJL9)4vVGR&0m;Z!6r=@yzAa1<3+0a=1Re_@Z7uAk`koT7IB?mnqwRvK)A5o z(uW6$Lw3M6E+NBeyIc&CvnLXMW8kAj3mrI>$D{#!hc@p{2@v8uQ6D0aoEgu2SyJK4=)Kv4Kp#S#gQmd-A~6~4)PegG70`-mj)@9 zBA~F9og$#-9`}c%umz0D;NxJV0}DXPbv49C{JtSr^TK@ITqHJse+xVgrnT@@k{$v;DmJh+$ZmiSi>lJ{_49x~s2?+^ zTX!T@Md_yqEE63cQytY-^>2iB4Gy))8Ux*Z?eo8|^S)MSNFv%5$XV)|hMo9Z9 z^DjvGug0K<+tQ(pS(HlGP7eIGrQD&Mq0jyp7Bzp6u-P>eB@pJ-uq8ke18G0=r%eW| ziCVv)14eu4VN&u}*Ix-M@SM|ecPjLBMBv<{nn;38LZEy`E1G)xQQ(ytzbyRtX^^CG z#_S@85xg|6a>VnA550nfX;7}|dN@{(>RZ82A-K7Cb(BUIe!+W>T|X>CLs8 zrxnkn?L9U5pp=$f&b_%Ayf>EF}t3i z=$V_0{_=1RR>t~#?MRhrh!s4wogr_I2ZbPP-nE@kkvM_Bc@)99tkb3Tq!^Aj(B&crr0nW2LPR0cf1aVDg{k%cDW4|cY=NJ*mjYwXK)i(#7a}ANMxok)f&^c@d^vIdunX$E>sz#vY3bTu+;ybe)h1y7mT_kYh0$ei4 zXvt{5Nr%nZDo7jJEE2XAaDRX;E?^EbIu;yZqK)X$XeDWl!GZxmmcRn7y#l|2-4R8Hwa%yJpsMqBVv1%Gd zAu;8H^z7O?0#>m@TSp?{Km0O6IK zDhpY0<022KnSlFe8xyT&s>iaiZ&(*sqqZXB97X1*9eaG9jAy+FQ81E$`S3-WNgXc7Q$!$@a#wuSxD0fMo9BkGEk`w=a@DwOA>iUE@3qpV{`-@NlLJ)R| z%++eGcEBl%BL$eThWws zjZ5avy3#dY4Ns`xi(pg(OW}(~4xOhklE})5XI@OKxFW$+F;NzzbPPT5s{XJ7f8`DT z%14)ivT23k!qLaEK;mDOvPo8>Mo@S`aqgM?Kt4&1!~t{5Ee)cDL|rPBg*KdTyW z@_Nf_m@--B>~e$rBLH@`Ko_p0fSf?c0@1Kuq=%pFbQAA8nJ z2y&LGxif)Jm;iZ|*+|qkI<`N(f+2V;VMZ(-c>T1D5)nNMp|K#J;s<)5aA6qwqes#Q ziK6@XHI26kJ+tWrPA*BOON7dJ2`pUlpS{F6ctgwjBw^@1ssJ@6IfG)ql;*Y#lf)lh zr_flL@K_Zp2sW0y)p|852?NVi;$2s>gzS$fEJj%UM!*$wn5s?$XltXBLqlL=lEe7R zV3S{6(~CyP4GcvmY@6OC`3mAYPKRz8eRpYs#3J{29u{T!?0$4^VpMQiibrdmaSBpr zj>4j1$)fT{%z#RwF1_ndA6%PoZT`wo#FfLq2Z@M04LK5!vlxyJ^7V`gK)#w$ADL3A zk(e)#RmhK@s-WF-jBTZ_B-9_8{yz?h`2R2@0d*>gjodWiUB-~R3E~+es|n(UrkV-j zSqUi}Av>1U96`HM)?8T);*mA46uGnFE8-@Tfg;~B2(Cz)3IrNSEB4*fENB#=MJU z{pRiQAj81%(e_;Y{6D>gyowRFSw%g!X}Aks_f<$ep|8vrE%Vd}da#x8S1qpN>%I>a zl~uAqx>i}W^rird9Nps(TFD>ln@P!F*9nM}!o9*7L=3O@r~MGo+NmRFO~-rW47$?6 z?!>&S75$2&E6@1ttRIJNOvSL%_S%U)d6^J$m9*w}b=@Y=LtSQZ{U;G4wRw&WUmf4i zYZ2PlD|*;nDu&xPj^HO3Fq81lMrh-(u<5DAAdiPuREL0X0bay{>&FHiOu4IE?fP_; z7I^f_PyyXF`5d0i8hdS~;DM$A={O1%`0r3<;mbJqkb7mTO(m9QXvlVOR=s+x}cAYP)E@$PbLX_ zrLW{tKEnS{KEmO?s4EzS)4wV=Fg+b_VWPWRJ|fNjK-dX0@G2s>2rId z8Ai5H7%r%KLl9KJqA2GZ_Eg!Ky-`8}o=G5ZJS3+!R1=Vn$I$B{$MoRKmSG7q{|ZJY_z%b&{ide!Mv0(3CDT03dtbO$?W+XRI|3 z-+Tkp`3)AQa2jzPyucfAzpd$6q^;?}xg85GXC^$@GlBN=8ryjPDKzNxSkvRqq;{RX zu1D{;XHtr?)3sxo&_jPKm2qpty#WY+cmiG@Zp1bg2^!;My5H^s-iLbXx@+cZre05> zxjedRAi3q2pjyp{ z5DU(BLPe}O&_ z&+ga%)b|Il$UYI_tm9`UT)UK`ISx14!*X|vHd-|Oqe)oS*8PY&t=ST40?EQG+)RO< z-QTQW8v;aP7H0HG!U88sHy1?WOx|-^)_3x;v>`JFLOrNn{A7MVW|Df(s4{EI-*s7gvq0 z`@qG>naj?+o_PQ={~x1q7Ra}5gtrblD3vcO#na&w4%go zSBN+pxU0ZH`C;H(fQd&OQDN?U>g%ZSU2lXU>>%c4O_^fw274h@w;NAlFfX(gJ|JAr zMCx0Xciln%5?qwk5F(^unsk~|y0R*?mLuCY2QqGEQdldlV(Z>@MTUdW+>0j>T|69g zVh$yCddrBA z@Uzt@F5Rc@wzTOI$(B&2L0)op3{yOUF$^eD%;Z50-&bt9NnPIm4Mb-_`Fzb3luKuq7Zl0PQH&MzT0*{9Vun^7R}2W5iwG2q%u~{eKHS2}oe4G zcQ|Bg42&iffPebQ>!VP-ZK&vbu4-0?`=7YX+1W1W{^dd(7W5Y+&FXTZSR^IqP}RJo z2iTg%VD#C$E4s|57RmlnJici$lchtTd_cb=3}P`+oFQ1Bo>XtRQ;?MnwN9QyeGVGT zX`Xvl8{v2OG(nfIALvmiHmA((=COr5F>W+np4teb(jgzI$XT7(`8{BL0t9z&N>`&0 zqn8bp6ZTX3M`X(_y-k?qR~66u+pD60UnsrBGvb8cHeX;He3gEaR?<1udMz{jHu~Yh+4bNZcL7(M8`#@BL^db$x0Hh?S60MXp;PwA&w@OF;-Dyz zth+3J!(@fDF+GeQ96kU9f`Kt(M>Fj&8=b}h)r*gV!5;ScaH>}{0Cd$QH38C2!HrKL zG}WwVMx>&Q;XEx9V=yayQIY;aa|J~KhXDmIBc;?@CO31qOTz}L4#0ejDiYJ z5LEp^Bv2SUX2Y2mU46V%9^n5Z695W-F@EyGD-@GECT@IC6b>L0iOKm6RsTHTyrGwG zhTI(*6a)pbT+94LOb+O}4}%@F;ozgZ;@8wVSY^ygl>dW6mDk@8@EqP%;w%IoK(%|O7 zw}hDLM{3TzopL?qjRTabkjR7rohyn#LHw7fZ7p7Jk?iDRDXGHh}1JdQ}bG;nj{V)HQOvqFxLw@=>t+m{y`MU=Dt*p*5 zsNx5XZNz?5P^wgZSz=JE4I@=(S)3wwuSaoqLe5OA0638flPfsUa#Jg)P_Q}?eb@-7 zgjCLAcxG@GB#6S+^Zos{?oG+8Jj7=dE*o&kSx7@D8oc`W4C=!?`>|FYZT&la1Py;X&{ha2&C|SP{n#2rkpfM_Nj1=0TeeP*v`Zo-SNz_pb$y4C}%=6wQtaDyU@%GRbyc8hfd~L8*BeTW}QpL7bad%7VFLn#`xb#hX zG1(KJ6=a!te*6lGPALZg&M*}AC_W#D6NIB+ZNs`DO;f4SiU+0eAKqTDd?W;f6Sa8w z!|m-fA<%G#Y@b;%H^@lAjm#wT@zMt48%(cN_B`&p8WcCb zh4jWw{yx3GadGcjR0Bd%aJwmTt-#$?WKBIRa~19aP#$U++|HnS669rdm#5b1H)T`_ z8hW+5Z&o3F@9AIHj&sH%?(s*v9f2~Dmu3i`@X07B);40=EbWXpv{%=LmhD}u30@@e zdX!jPg2P-uJo(bc+`HC5d)M=s*-N?X*M&v(Jefl20-eyfO4YqDE5We-N*w;Rdsw>y zfimzvU@HDsOk|XQVd|ZZExcX`)P-^1e;HbraZNHsqoJ=_IEeSjc{LxuuLOL#+3DKz zn2rZK{GE2a&o{J`N8g8MRrDOOS{_$AW^P)O9W0-0%T=UJENwmIcMW_@pn>*LEh^2C zvETf31jW#XAwYKGLA*L`^%Xp$Q|Lfe)rf<+LTo{a0nY~l4aL1InIy~-o9r(Q(eAcX zJN1Nm_tvIC8Y_{c6+sRR->q}!RWi53E);{BC-%%3J=RLEJt-hklkIQemn34;DK%4m zrne_)GjcQy^OF(EDi$Tm-~h3OIvHOqkPsqdIs6{M40Z8AU8=uX{hE>zW^u!l74u8Y zPvJFnt+ix`6*Eu$)}cDN^AKxaT_PPrS=&#EhO(!^=kqH`X%gpb`fR{kDX*KSP-Ss- zv1jK$!%x5F_O(ibyO>BI$RyLNU0=m02DyToO__2S;l{V{)|a-+w&)(V$WusX{(Wl$ zLC9CN6iLVz*0XcZ_l4av`)}|$+dTd3F}fl!`&>Val-G?6K5}~N3;mBcnc{fm_%#kA z(8fU^^~Wbo;A_r3-LHFDa67hkA@#mzN1_pb0?qwM#^Pl znQP;%;X(gzh!)(3G=i9}_+*6z(zzP2CjD9P|Dk_A?+r^u&_3=x`T!IktsK6#E#JGB z-T!M=Q#ua*gcs=HDm-sw zqII>DBI2@f3KFmN@69{mBi5JyE?5Z?B&qx>=uB)UTb*7uVq2g0FO9s!s9sl(@^ilp zDM?kYxN5xdoTdjR2GIfLuf}-Cx`EYk$Pb_gLzbcP%lM(!I%bI|+U<$9xt&Wl%p}*9{9X{GBK5mGuW%xmz&1NSoRw4zeRCE|8tH3H^*WefezT? z7_p#pTNH25tsTU=O9(^Mc}xD%#`EnqPOsaoqd#!oy}>6}XQ6cn-q9--UJ$#x4Jy(s z!FgA*bcB1o9$X4&C^CHVK6e1A&%t@9;InZAVa>v3n zm-hF^p}tdG`344}9ppU{bTi(^R1N;ToR5X+E&cEQ1RmwcLr ztSFCdjWqr}WaHB(3!L9QFs%AH!r0(Qa@TkPpYet96N->n;k96Gfv#1P_Ze{W@LW`@ zpQwGOtl~aOHKGL}Pa7sTeWj=oc?)S0SI3Z`8?%Nu#v6ao1N$vFk;-jU{sima zalo7;=>^B4x=+`%(Lo@=G301PRfmR>X9=o;f=b3y7fskNI?7H#W(4C??ZeNcpeHpg z(yo9n_Lc}fU?5e1AUBnT&keYKyw5BwKSQu!NwwgF4bE}+VBud5U;6*SVM*_w90pSU z&4FLND9Y7ug#@%+ah#cpmKBS$L3vO7l+=#5+bQ|BWduiKXT68EO z3OLqJ-k0AF+e|KGu3__3{m|PZ-H(o*{B{q74DYA3y>0Voyj|EFWyU`48b+!6K5Lj1!ZtPYYjuGG$=cHGvJdOpFdkF5|uQL`6#kVQ&e2#+<() .ForMember(dest => dest.UserDTO, opt => opt.MapFrom(src => src.User)) + .ForMember(dest => dest.AcceptUserId, opt => opt.MapFrom(src => src.AcceptUser != null ? src.AcceptUser.Id : (int?)null)) + .ForMember(dest => dest.AcceptUserDTO, opt => opt.MapFrom(src => src.AcceptUser)) .ForMember(dest => dest.CheckListRowDTO, opt => opt.MapFrom(src => src.CheckListRows)); CreateMap() diff --git a/src/WorkFlowCheck.BL/Services/CheckListService.cs b/src/WorkFlowCheck.BL/Services/CheckListService.cs index 3025c10..1ec22f3 100644 --- a/src/WorkFlowCheck.BL/Services/CheckListService.cs +++ b/src/WorkFlowCheck.BL/Services/CheckListService.cs @@ -1,5 +1,6 @@ using AutoMapper; using DocumentFormat.OpenXml.Office.CustomUI; +using DocumentFormat.OpenXml.Spreadsheet; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using Serilog; @@ -8,6 +9,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Reflection; +using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using WorkFlowCheck.BL.DocumentGenerator; @@ -25,7 +27,10 @@ namespace WorkFlowCheck.BL.Services private readonly IMapper _mapper; private readonly INumberGeneratorService _numberGeneratorService; - public CheckListService(AppDbContext dbContext, IMapper mapper, INumberGeneratorService numberGeneratorService) + public CheckListService(AppDbContext dbContext, + IMapper mapper, + INumberGeneratorService numberGeneratorService, + IUserService userService) { _dbContext = dbContext; _mapper = mapper; @@ -43,6 +48,8 @@ namespace WorkFlowCheck.BL.Services { var res = await _dbContext.CheckListHeaders .Where(w => w.Id == Id) + .Include(i => i.User) + .Include(i => i.AcceptUser) .Include(i => i.CheckListRows) .ThenInclude(r => r.CheckListTemplateRow) .ThenInclude(r => r.CheckPoint) @@ -78,14 +85,15 @@ namespace WorkFlowCheck.BL.Services var retVal = new List(); try { - var roles = await _dbContext.CheckListHeaders + var checkListHeaders = await _dbContext.CheckListHeaders .Include(i => i.CheckListRows) .Include(i => i.User) + .Include(i => i.AcceptUser) .AsNoTracking() .ToListAsync(); - if (roles != null) + if (checkListHeaders != null) { - retVal = _mapper.Map>(roles); + retVal = _mapper.Map>(checkListHeaders); } } catch (Exception ex) @@ -202,6 +210,148 @@ namespace WorkFlowCheck.BL.Services } return retVal; } + public async Task AcceptCheckListHeaderAsync(int id, int userid) + { + var retVal = false; + + try + { + var checkListHeader = await _dbContext.CheckListHeaders + .Where(w => w.Id == id && w.CheckStatus == CheckStatus.Sent) + .FirstOrDefaultAsync(); + + if (checkListHeader != null) + { + checkListHeader.CheckStatus = CheckStatus.Signed; + checkListHeader.IsEditable = false; + checkListHeader.AcceptUserId = userid; + Log.Warning($"Ellenőrzési lap státuszváltozása: Ellenőrzés:{id}, Felhasználó:{userid}"); + await _dbContext.SaveChangesAsync(); + + var pdf = await CreateCheckListHeaderPDFAsync(id); + if (pdf != null && pdf.Length > 0) + { + string pdfDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Pdf"); + var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss"); + var fileName = $"CD_{timestamp}_{checkListHeader.GuidNumber.ToString().ToUpper()}.pdf"; + + var filePath = Path.Combine(pdfDirectory, fileName); + await File.WriteAllBytesAsync(filePath, pdf); + + retVal = true; + } + } + } + catch (Exception ex) + { + + Log.Error(ex.Message); + } + return retVal; + } + public async Task CreateCheckListHeaderPDFAsync(int checkListHeaderId) + { + try + { + var checkListHeader = await this.GetCheckListHeaderAsync(checkListHeaderId); + + string pdfDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Pdf"); + + byte[] byteArray = File.ReadAllBytes(Path.Combine(pdfDirectory, "CheckList_Template_V1.docx")); + SablonGenerator gen = new SablonGenerator(byteArray); + + gen.SimpleReplace("#DocumentNumber#", checkListHeader.DocumentNumber); + gen.SimpleReplace("#DateExecution#", checkListHeader.DateExecution.ToString("yyyy.MM.dd HH:mm")); + gen.SimpleReplace("#WorkUser#", $"{checkListHeader.UserDTO?.LastName} {checkListHeader.UserDTO?.FirstName}"); + gen.SimpleReplace("#AcceptUser#", $"{checkListHeader.AcceptUserDTO?.LastName} {checkListHeader.AcceptUserDTO?.FirstName}"); + gen.SimpleReplace("#Guid#", checkListHeader.GuidNumber.ToString()); + + if (checkListHeader.CheckListRowDTO != null && checkListHeader.CheckListRowDTO.Count > 0) + { + var elements = new List>(); + foreach (var item in checkListHeader.CheckListRowDTO) + { + if (item.CheckListTemplateRowDTO != null) + { + var cells = new List + { + $"{item.CheckListTemplateRowDTO.RowIndex.ToString()}.", + item.CheckListTemplateRowDTO.OperationDescription, + item.Answer + }; + elements.Add(cells); + } + } + gen.SetTable(elements, "#rowindex"); + } + + + byte[] content = gen.CloseAndGetDocument(); + + return DokumentumGenerator.DocxToPdfL(content); + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return new byte[0]; + } + public async Task BlockCheckListHeaderAsync(int id, int userid) + { + var retVal = false; + try + { + var checkListHeader = await _dbContext.CheckListHeaders + .Where(w => w.Id == id && w.CheckStatus == CheckStatus.Sent) + .FirstOrDefaultAsync(); + + if (checkListHeader != null && checkListHeader.CheckStatus == CheckStatus.InProgress) + { + checkListHeader.CheckStatus = CheckStatus.Blocked; + checkListHeader.IsEditable = false; + + Log.Warning($"Ellenőrzési lap blokkolva: Ellenőrzés:{id}, Felhasználó:{userid}"); + + await _dbContext.SaveChangesAsync(); + retVal = true; + } + } + catch (Exception ex) + { + retVal = false; + Log.Error(ex.Message); + } + + + return retVal; + } + public async Task UnBlockCheckListHeaderAsync(int id, int userid) + { + var retVal = false; + try + { + var checkListHeader = await _dbContext.CheckListHeaders + .Where(w => w.Id == id && w.CheckStatus == CheckStatus.Sent) + .FirstOrDefaultAsync(); + + if (checkListHeader != null && checkListHeader.CheckStatus == CheckStatus.Blocked) + { + checkListHeader.CheckStatus = CheckStatus.InProgress; + checkListHeader.IsEditable = true; + + Log.Warning($"Ellenőrzési lap feloldva: Ellenőrzés:{id}, Felhasználó:{userid}"); + + await _dbContext.SaveChangesAsync(); + retVal = true; + } + } + catch (Exception ex) + { + retVal = false; + Log.Error(ex.Message); + } + return retVal; + } public async Task GetCheckListTemplateHeaderAsync(int Id) { @@ -425,46 +575,6 @@ namespace WorkFlowCheck.BL.Services return retVal; } - public async Task CreatePDF(int checkListHeaderId) - { - try - { - var checkListHeader = await this.GetCheckListHeaderAsync(checkListHeaderId); - string pdfDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Pdf"); - - byte[] byteArray = File.ReadAllBytes(Path.Combine(pdfDirectory, "CheckList_Template_V1.docx")); - SablonGenerator gen = new SablonGenerator(byteArray); - - if (checkListHeader.CheckListRowDTO != null && checkListHeader.CheckListRowDTO.Count > 0) - { - var elements = new List>(); - foreach (var item in checkListHeader.CheckListRowDTO) - { - if (item.CheckListTemplateRowDTO != null) - { - var cells = new List - { - $"{item.CheckListTemplateRowDTO.RowIndex.ToString()}.", - item.CheckListTemplateRowDTO.OperationDescription, - item.Answer - }; - elements.Add(cells); - } - } - gen.SetTable(elements, "#rowindex"); - } - - - byte[] content = gen.CloseAndGetDocument(); - - return DokumentumGenerator.DocxToPdfL(content); - } - catch (Exception ex) - { - Log.Error(ex.Message); - } - return new byte[0]; - } } } diff --git a/src/WorkFlowCheck.BL/Services/Interfaces/ICheckListService.cs b/src/WorkFlowCheck.BL/Services/Interfaces/ICheckListService.cs index ae7c25f..dc70009 100644 --- a/src/WorkFlowCheck.BL/Services/Interfaces/ICheckListService.cs +++ b/src/WorkFlowCheck.BL/Services/Interfaces/ICheckListService.cs @@ -8,7 +8,10 @@ namespace WorkFlowCheck.BL.Services.Interfaces Task GetCheckListHeaderAsync(int Id); Task> GetAllCheckListHeaderAsync(); Task UpdateCheckListHeaderAsync(CheckListHeaderDTO checkListHeaderDTO); - + Task AcceptCheckListHeaderAsync(int id, int userid); + Task BlockCheckListHeaderAsync(int id, int userid); + Task UnBlockCheckListHeaderAsync(int id, int userid); + Task CreateCheckListHeaderPDFAsync(int checkListHeaderId); Task StartNewCheckListAsync(CheckListHeaderNewDTO checkListHeaderNewDTO); @@ -21,10 +24,9 @@ namespace WorkFlowCheck.BL.Services.Interfaces Task GetCheckListRowAsync(int id); Task UpdateCheckListRowAsync(CheckListRowDTO checkListRowDTO); - - - Task CreatePDF(int checkListHeaderId); + + } } diff --git a/src/WorkFlowCheck.Common/DTO/CheckListHeaderDTO.cs b/src/WorkFlowCheck.Common/DTO/CheckListHeaderDTO.cs index 2cd7b70..628b025 100644 --- a/src/WorkFlowCheck.Common/DTO/CheckListHeaderDTO.cs +++ b/src/WorkFlowCheck.Common/DTO/CheckListHeaderDTO.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,16 +13,39 @@ namespace WorkFlowCheck.Common.DTO public int Id { get; set; } public int CheckListTemplateHeaderId { get; set; } public CheckListTemplateHeaderDTO? CheckListTemplateHeaderDTO { get; set; } - public CheckStatus CheckStatus { get; set; } + + [DisplayName("Státusz")] + public CheckStatus CheckStatus { get; set; } + + [DisplayName("Dátum")] public DateTime DateExecution { get; set; } + + [DisplayName("Ellenőrző")] public int UserId { get; set; } public UserDTO? UserDTO { get; set; } + + [DisplayName("Jóváhagyó")] + public int? AcceptUserId { get; set; } + public UserDTO? AcceptUserDTO { get; set; } + + [DisplayName("Megnevezés")] public string ShortName { get; set; } = null!; + + [DisplayName("Leírás")] public string Description { get; set; } = null!; + + [DisplayName("Sorszám")] public string DocumentNumber { get; set; } = null!; + + [DisplayName("Azonosító")] public Guid GuidNumber { get; set; } + + [DisplayName("Stornózva")] public bool IsStorno { get; set; } + + [DisplayName("Szerkeszthető")] public bool IsEditable { get; set; } + public ICollection? CheckListRowDTO { get; set; } = new List(); public CheckListHeaderDTO() diff --git a/src/WorkFlowCheck.DL/Configurations/CheckListHeaderTypeConfiguration.cs b/src/WorkFlowCheck.DL/Configurations/CheckListHeaderTypeConfiguration.cs index 75a45b5..a1faee0 100644 --- a/src/WorkFlowCheck.DL/Configurations/CheckListHeaderTypeConfiguration.cs +++ b/src/WorkFlowCheck.DL/Configurations/CheckListHeaderTypeConfiguration.cs @@ -3,8 +3,10 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; using System.Linq; +using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; +using WorkFlowCheck.DL.Entities; namespace WorkFlowCheck.DL.Configurations { @@ -15,7 +17,11 @@ namespace WorkFlowCheck.DL.Configurations builder.ToTable("CheckListHeader"); builder.HasKey(e => e.Id); builder.Property(e => e.Id).ValueGeneratedOnAdd(); + builder + .HasOne(ch => ch.AcceptUser) + .WithMany() + .HasForeignKey(ch => ch.AcceptUserId) + .OnDelete(DeleteBehavior.Restrict); // Elkerüljük a cascade delete-et } - } } diff --git a/src/WorkFlowCheck.DL/Entities/CheckListHeader.cs b/src/WorkFlowCheck.DL/Entities/CheckListHeader.cs index 08acfa0..06e4a44 100644 --- a/src/WorkFlowCheck.DL/Entities/CheckListHeader.cs +++ b/src/WorkFlowCheck.DL/Entities/CheckListHeader.cs @@ -17,6 +17,8 @@ namespace WorkFlowCheck.DL.Entities public DateTime DateExecution { get; set; } public int UserId { get; set; } public virtual User User { get; set; } + public int? AcceptUserId { get; set; } + public virtual User? AcceptUser { get; set; } public string ShortName { get; set; } = null!; public string Description { get; set; } = null!; public string DocumentNumber { get; set; } = null!; diff --git a/src/WorkFlowCheck.DL/Entities/DeviceMessage.cs b/src/WorkFlowCheck.DL/Entities/DeviceMessage.cs index 8316e7e..ec87a83 100644 --- a/src/WorkFlowCheck.DL/Entities/DeviceMessage.cs +++ b/src/WorkFlowCheck.DL/Entities/DeviceMessage.cs @@ -16,6 +16,8 @@ namespace WorkFlowCheck.DL.Entities public string Message { get; set; } = null!; public string ExtraDataJSON { get; set; } = null!; public bool IsReaded { get; set; } + public int? RoleId { get; set; } + public virtual Role? Role { get; set; } } } diff --git a/src/WorkFlowCheck.DL/Migrations/20250408065515_Extend017.Designer.cs b/src/WorkFlowCheck.DL/Migrations/20250408065515_Extend017.Designer.cs new file mode 100644 index 0000000..8b3c9bf --- /dev/null +++ b/src/WorkFlowCheck.DL/Migrations/20250408065515_Extend017.Designer.cs @@ -0,0 +1,942 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WorkFlowCheck.DL; + +#nullable disable + +namespace WorkFlowCheck.DL.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20250408065515_Extend017")] + partial class Extend017 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AcceptUserId") + .HasColumnType("int"); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("CheckStatus") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DateExecution") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DocumentNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GuidNumber") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEditable") + .HasColumnType("bit"); + + b.Property("IsStorno") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AcceptUserId"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("UserId"); + + b.ToTable("CheckListHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Answer") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckListHeaderId") + .HasColumnType("int"); + + b.Property("CheckListTemplateRowId") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GuidNumber") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhotoFileName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CheckListHeaderId"); + + b.HasIndex("CheckListTemplateRowId"); + + b.ToTable("CheckListRow", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NumberGenerator1Id") + .HasColumnType("int"); + + b.Property("NumberGenerator2Id") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("NumberGenerator1Id"); + + b.HasIndex("NumberGenerator2Id"); + + b.ToTable("CheckListTemplateHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AnswerType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("CheckPointId") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EquipmentId") + .HasColumnType("int"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OperationDescription") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RowIndex") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("CheckPointId"); + + b.HasIndex("EquipmentId"); + + b.ToTable("CheckListTemplateRow", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Code") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("CheckPoint", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.DeviceMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DeviceIdFrom") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DeviceIdTo") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ExtraDataJSON") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsReaded") + .HasColumnType("bit"); + + b.Property("Message") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReceiveDate") + .HasColumnType("datetime2"); + + b.Property("SendDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("DeviceIdTo") + .HasDatabaseName("IX_DeviceMessage_DeviceIdTo"); + + b.ToTable("DeviceMessage", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Equipment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EquipmentNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Equipment", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Location", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FullName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Location", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentNumber") + .HasColumnType("int"); + + b.Property("DigitFormat") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GenerateType") + .HasColumnType("int"); + + b.Property("LastGeneratedNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Prefix") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PrefixSeparator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Suffix") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SuffixSeparator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("NumberGeneratorTemplate", (string)null); + + b.HasData( + new + { + Id = 1, + CurrentNumber = 0, + DigitFormat = "D4", + GenerateType = 0, + LastGeneratedNumber = "", + Prefix = "CHK", + PrefixSeparator = "-", + ShortName = "Ellenőrzési dokumentum sorszámozása", + Suffix = "", + SuffixSeparator = "-" + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplateDate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentNumber") + .HasColumnType("int"); + + b.Property("LastGeneratedNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Month") + .HasColumnType("int"); + + b.Property("NumberGeneratorTemplateId") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("NumberGeneratorTemplateId"); + + b.ToTable("NumberGeneratorTemplateDate", (string)null); + + b.HasData( + new + { + Id = 1, + CurrentNumber = 0, + LastGeneratedNumber = "", + Month = 0, + NumberGeneratorTemplateId = 1, + Year = 1 + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CanDownloadAPK") + .HasColumnType("bit"); + + b.Property("CanEnableBlocked") + .HasColumnType("bit"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsAdmin") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ParentId") + .HasColumnType("int"); + + b.Property("RoleName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ParentId"); + + b.ToTable("Roles", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleCheckListTemplateHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckPointId") + .HasColumnType("int"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckPointId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleCheckPoint", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("JwtToken") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NFCActive") + .HasColumnType("bit"); + + b.Property("NFCCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("Token2FA") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users", (string)null); + + b.HasData( + new + { + Id = 1, + Active = true, + CreatedAt = new DateTime(2025, 4, 8, 6, 55, 14, 155, DateTimeKind.Utc).AddTicks(149), + CreatedBy = "System", + Email = "admin@nuvolar.hu", + FirstName = "Administrator", + IsDeleted = false, + JwtToken = "", + LastModAt = new DateTime(2025, 4, 8, 6, 55, 14, 155, DateTimeKind.Utc).AddTicks(150), + LastModBy = "System", + LastName = "System", + NFCActive = true, + NFCCode = "00000000", + PasswordHash = "eGM0NUREZnJ0ISFFRDIxMKE5TYwthDBuUsTUEO1fBnCR3VdSCmdz47ue0RoVvnkY", + Token2FA = "", + UserName = "admin" + }, + new + { + Id = 2, + Active = true, + CreatedAt = new DateTime(2025, 4, 8, 6, 55, 14, 166, DateTimeKind.Utc).AddTicks(5847), + CreatedBy = "System", + Email = "user@nuvolar.hu", + FirstName = "User", + IsDeleted = false, + JwtToken = "", + LastModAt = new DateTime(2025, 4, 8, 6, 55, 14, 166, DateTimeKind.Utc).AddTicks(5849), + LastModBy = "System", + LastName = "System", + NFCActive = true, + NFCCode = "00000000", + PasswordHash = "eGM0NUREZnJ0ISFFRDIxMPwM2D9sQSj7zmaSBIsOGe0I9hBFwCGPVbyrYMA5EnKG", + Token2FA = "", + UserName = "user" + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.HasIndex("UserId"); + + b.ToTable("UserRoles", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.User", "AcceptUser") + .WithMany() + .HasForeignKey("AcceptUserId"); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany() + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AcceptUser"); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListHeader", "CheckListHeader") + .WithMany("CheckListRows") + .HasForeignKey("CheckListHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateRow", "CheckListTemplateRow") + .WithMany() + .HasForeignKey("CheckListTemplateRowId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListHeader"); + + b.Navigation("CheckListTemplateRow"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGenerator1") + .WithMany() + .HasForeignKey("NumberGenerator1Id"); + + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGenerator2") + .WithMany() + .HasForeignKey("NumberGenerator2Id"); + + b.Navigation("NumberGenerator1"); + + b.Navigation("NumberGenerator2"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany("CheckListTemplateRows") + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint") + .WithMany("CheckListTemplateRows") + .HasForeignKey("CheckPointId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Equipment", "Equipment") + .WithMany() + .HasForeignKey("EquipmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("CheckPoint"); + + b.Navigation("Equipment"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplateDate", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGeneratorTemplate") + .WithMany("NumberGeneratorTemplateDates") + .HasForeignKey("NumberGeneratorTemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("NumberGeneratorTemplate"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany() + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckPoint", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint") + .WithMany() + .HasForeignKey("CheckPointId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckPoint"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId"); + + b.HasOne("WorkFlowCheck.DL.Entities.User", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.Navigation("CheckListRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.Navigation("CheckListTemplateRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b => + { + b.Navigation("CheckListTemplateRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", b => + { + b.Navigation("NumberGeneratorTemplateDates"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.Navigation("Children"); + + b.Navigation("UserRoles"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b => + { + b.Navigation("UserRoles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/WorkFlowCheck.DL/Migrations/20250408065515_Extend017.cs b/src/WorkFlowCheck.DL/Migrations/20250408065515_Extend017.cs new file mode 100644 index 0000000..d25aeac --- /dev/null +++ b/src/WorkFlowCheck.DL/Migrations/20250408065515_Extend017.cs @@ -0,0 +1,77 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace WorkFlowCheck.DL.Migrations +{ + /// + public partial class Extend017 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "AcceptUserId", + table: "CheckListHeader", + type: "int", + nullable: true); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 6, 55, 14, 155, DateTimeKind.Utc).AddTicks(149), new DateTime(2025, 4, 8, 6, 55, 14, 155, DateTimeKind.Utc).AddTicks(150) }); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 6, 55, 14, 166, DateTimeKind.Utc).AddTicks(5847), new DateTime(2025, 4, 8, 6, 55, 14, 166, DateTimeKind.Utc).AddTicks(5849) }); + + migrationBuilder.CreateIndex( + name: "IX_CheckListHeader_AcceptUserId", + table: "CheckListHeader", + column: "AcceptUserId"); + + migrationBuilder.AddForeignKey( + name: "FK_CheckListHeader_Users_AcceptUserId", + table: "CheckListHeader", + column: "AcceptUserId", + principalTable: "Users", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_CheckListHeader_Users_AcceptUserId", + table: "CheckListHeader"); + + migrationBuilder.DropIndex( + name: "IX_CheckListHeader_AcceptUserId", + table: "CheckListHeader"); + + migrationBuilder.DropColumn( + name: "AcceptUserId", + table: "CheckListHeader"); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 6, 19, 24, 51, 944, DateTimeKind.Utc).AddTicks(2145), new DateTime(2025, 4, 6, 19, 24, 51, 944, DateTimeKind.Utc).AddTicks(2148) }); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 6, 19, 24, 51, 956, DateTimeKind.Utc).AddTicks(5191), new DateTime(2025, 4, 6, 19, 24, 51, 956, DateTimeKind.Utc).AddTicks(5194) }); + } + } +} diff --git a/src/WorkFlowCheck.DL/Migrations/20250408072927_Extend018.Designer.cs b/src/WorkFlowCheck.DL/Migrations/20250408072927_Extend018.Designer.cs new file mode 100644 index 0000000..8b1012d --- /dev/null +++ b/src/WorkFlowCheck.DL/Migrations/20250408072927_Extend018.Designer.cs @@ -0,0 +1,956 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WorkFlowCheck.DL; + +#nullable disable + +namespace WorkFlowCheck.DL.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20250408072927_Extend018")] + partial class Extend018 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AcceptUserId") + .HasColumnType("int"); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("CheckStatus") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DateExecution") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DocumentNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GuidNumber") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEditable") + .HasColumnType("bit"); + + b.Property("IsStorno") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AcceptUserId"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("UserId"); + + b.ToTable("CheckListHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Answer") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckListHeaderId") + .HasColumnType("int"); + + b.Property("CheckListTemplateRowId") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GuidNumber") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhotoFileName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CheckListHeaderId"); + + b.HasIndex("CheckListTemplateRowId"); + + b.ToTable("CheckListRow", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NumberGenerator1Id") + .HasColumnType("int"); + + b.Property("NumberGenerator2Id") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("NumberGenerator1Id"); + + b.HasIndex("NumberGenerator2Id"); + + b.ToTable("CheckListTemplateHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AnswerType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("CheckPointId") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EquipmentId") + .HasColumnType("int"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OperationDescription") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RowIndex") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("CheckPointId"); + + b.HasIndex("EquipmentId"); + + b.ToTable("CheckListTemplateRow", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Code") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("CheckPoint", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.DeviceMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DeviceIdFrom") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DeviceIdTo") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ExtraDataJSON") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsReaded") + .HasColumnType("bit"); + + b.Property("Message") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReceiveDate") + .HasColumnType("datetime2"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("SendDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("DeviceIdTo") + .HasDatabaseName("IX_DeviceMessage_DeviceIdTo"); + + b.HasIndex("RoleId"); + + b.ToTable("DeviceMessage", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Equipment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EquipmentNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Equipment", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Location", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FullName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Location", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentNumber") + .HasColumnType("int"); + + b.Property("DigitFormat") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GenerateType") + .HasColumnType("int"); + + b.Property("LastGeneratedNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Prefix") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PrefixSeparator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Suffix") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SuffixSeparator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("NumberGeneratorTemplate", (string)null); + + b.HasData( + new + { + Id = 1, + CurrentNumber = 0, + DigitFormat = "D4", + GenerateType = 0, + LastGeneratedNumber = "", + Prefix = "CHK", + PrefixSeparator = "-", + ShortName = "Ellenőrzési dokumentum sorszámozása", + Suffix = "", + SuffixSeparator = "-" + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplateDate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentNumber") + .HasColumnType("int"); + + b.Property("LastGeneratedNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Month") + .HasColumnType("int"); + + b.Property("NumberGeneratorTemplateId") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("NumberGeneratorTemplateId"); + + b.ToTable("NumberGeneratorTemplateDate", (string)null); + + b.HasData( + new + { + Id = 1, + CurrentNumber = 0, + LastGeneratedNumber = "", + Month = 0, + NumberGeneratorTemplateId = 1, + Year = 1 + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CanDownloadAPK") + .HasColumnType("bit"); + + b.Property("CanEnableBlocked") + .HasColumnType("bit"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsAdmin") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ParentId") + .HasColumnType("int"); + + b.Property("RoleName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ParentId"); + + b.ToTable("Roles", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleCheckListTemplateHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckPointId") + .HasColumnType("int"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckPointId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleCheckPoint", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("JwtToken") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NFCActive") + .HasColumnType("bit"); + + b.Property("NFCCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("Token2FA") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users", (string)null); + + b.HasData( + new + { + Id = 1, + Active = true, + CreatedAt = new DateTime(2025, 4, 8, 7, 29, 26, 543, DateTimeKind.Utc).AddTicks(8649), + CreatedBy = "System", + Email = "admin@nuvolar.hu", + FirstName = "Administrator", + IsDeleted = false, + JwtToken = "", + LastModAt = new DateTime(2025, 4, 8, 7, 29, 26, 543, DateTimeKind.Utc).AddTicks(8652), + LastModBy = "System", + LastName = "System", + NFCActive = true, + NFCCode = "00000000", + PasswordHash = "eGM0NUREZnJ0ISFFRDIxMKE5TYwthDBuUsTUEO1fBnCR3VdSCmdz47ue0RoVvnkY", + Token2FA = "", + UserName = "admin" + }, + new + { + Id = 2, + Active = true, + CreatedAt = new DateTime(2025, 4, 8, 7, 29, 26, 556, DateTimeKind.Utc).AddTicks(264), + CreatedBy = "System", + Email = "user@nuvolar.hu", + FirstName = "User", + IsDeleted = false, + JwtToken = "", + LastModAt = new DateTime(2025, 4, 8, 7, 29, 26, 556, DateTimeKind.Utc).AddTicks(270), + LastModBy = "System", + LastName = "System", + NFCActive = true, + NFCCode = "00000000", + PasswordHash = "eGM0NUREZnJ0ISFFRDIxMPwM2D9sQSj7zmaSBIsOGe0I9hBFwCGPVbyrYMA5EnKG", + Token2FA = "", + UserName = "user" + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.HasIndex("UserId"); + + b.ToTable("UserRoles", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.User", "AcceptUser") + .WithMany() + .HasForeignKey("AcceptUserId"); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany() + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AcceptUser"); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListHeader", "CheckListHeader") + .WithMany("CheckListRows") + .HasForeignKey("CheckListHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateRow", "CheckListTemplateRow") + .WithMany() + .HasForeignKey("CheckListTemplateRowId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListHeader"); + + b.Navigation("CheckListTemplateRow"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGenerator1") + .WithMany() + .HasForeignKey("NumberGenerator1Id"); + + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGenerator2") + .WithMany() + .HasForeignKey("NumberGenerator2Id"); + + b.Navigation("NumberGenerator1"); + + b.Navigation("NumberGenerator2"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany("CheckListTemplateRows") + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint") + .WithMany("CheckListTemplateRows") + .HasForeignKey("CheckPointId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Equipment", "Equipment") + .WithMany() + .HasForeignKey("EquipmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("CheckPoint"); + + b.Navigation("Equipment"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.DeviceMessage", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplateDate", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGeneratorTemplate") + .WithMany("NumberGeneratorTemplateDates") + .HasForeignKey("NumberGeneratorTemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("NumberGeneratorTemplate"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany() + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckPoint", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint") + .WithMany() + .HasForeignKey("CheckPointId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckPoint"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId"); + + b.HasOne("WorkFlowCheck.DL.Entities.User", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.Navigation("CheckListRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.Navigation("CheckListTemplateRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b => + { + b.Navigation("CheckListTemplateRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", b => + { + b.Navigation("NumberGeneratorTemplateDates"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.Navigation("Children"); + + b.Navigation("UserRoles"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b => + { + b.Navigation("UserRoles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/WorkFlowCheck.DL/Migrations/20250408072927_Extend018.cs b/src/WorkFlowCheck.DL/Migrations/20250408072927_Extend018.cs new file mode 100644 index 0000000..400fd6e --- /dev/null +++ b/src/WorkFlowCheck.DL/Migrations/20250408072927_Extend018.cs @@ -0,0 +1,77 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace WorkFlowCheck.DL.Migrations +{ + /// + public partial class Extend018 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "RoleId", + table: "DeviceMessage", + type: "int", + nullable: true); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 7, 29, 26, 543, DateTimeKind.Utc).AddTicks(8649), new DateTime(2025, 4, 8, 7, 29, 26, 543, DateTimeKind.Utc).AddTicks(8652) }); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 7, 29, 26, 556, DateTimeKind.Utc).AddTicks(264), new DateTime(2025, 4, 8, 7, 29, 26, 556, DateTimeKind.Utc).AddTicks(270) }); + + migrationBuilder.CreateIndex( + name: "IX_DeviceMessage_RoleId", + table: "DeviceMessage", + column: "RoleId"); + + migrationBuilder.AddForeignKey( + name: "FK_DeviceMessage_Roles_RoleId", + table: "DeviceMessage", + column: "RoleId", + principalTable: "Roles", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_DeviceMessage_Roles_RoleId", + table: "DeviceMessage"); + + migrationBuilder.DropIndex( + name: "IX_DeviceMessage_RoleId", + table: "DeviceMessage"); + + migrationBuilder.DropColumn( + name: "RoleId", + table: "DeviceMessage"); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 6, 55, 14, 155, DateTimeKind.Utc).AddTicks(149), new DateTime(2025, 4, 8, 6, 55, 14, 155, DateTimeKind.Utc).AddTicks(150) }); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 6, 55, 14, 166, DateTimeKind.Utc).AddTicks(5847), new DateTime(2025, 4, 8, 6, 55, 14, 166, DateTimeKind.Utc).AddTicks(5849) }); + } + } +} diff --git a/src/WorkFlowCheck.DL/Migrations/20250408105039_Extend019.Designer.cs b/src/WorkFlowCheck.DL/Migrations/20250408105039_Extend019.Designer.cs new file mode 100644 index 0000000..411f750 --- /dev/null +++ b/src/WorkFlowCheck.DL/Migrations/20250408105039_Extend019.Designer.cs @@ -0,0 +1,957 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using WorkFlowCheck.DL; + +#nullable disable + +namespace WorkFlowCheck.DL.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20250408105039_Extend019")] + partial class Extend019 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AcceptUserId") + .HasColumnType("int"); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("CheckStatus") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DateExecution") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DocumentNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GuidNumber") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEditable") + .HasColumnType("bit"); + + b.Property("IsStorno") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AcceptUserId"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("UserId"); + + b.ToTable("CheckListHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Answer") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckListHeaderId") + .HasColumnType("int"); + + b.Property("CheckListTemplateRowId") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GuidNumber") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhotoFileName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CheckListHeaderId"); + + b.HasIndex("CheckListTemplateRowId"); + + b.ToTable("CheckListRow", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NumberGenerator1Id") + .HasColumnType("int"); + + b.Property("NumberGenerator2Id") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("NumberGenerator1Id"); + + b.HasIndex("NumberGenerator2Id"); + + b.ToTable("CheckListTemplateHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AnswerType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("CheckPointId") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EquipmentId") + .HasColumnType("int"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OperationDescription") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RowIndex") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("CheckPointId"); + + b.HasIndex("EquipmentId"); + + b.ToTable("CheckListTemplateRow", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Code") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("CheckPoint", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.DeviceMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DeviceIdFrom") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DeviceIdTo") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ExtraDataJSON") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsReaded") + .HasColumnType("bit"); + + b.Property("Message") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReceiveDate") + .HasColumnType("datetime2"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("SendDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("DeviceIdTo") + .HasDatabaseName("IX_DeviceMessage_DeviceIdTo"); + + b.HasIndex("RoleId"); + + b.ToTable("DeviceMessage", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Equipment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EquipmentNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Equipment", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Location", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FullName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Location", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentNumber") + .HasColumnType("int"); + + b.Property("DigitFormat") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GenerateType") + .HasColumnType("int"); + + b.Property("LastGeneratedNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Prefix") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PrefixSeparator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Suffix") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SuffixSeparator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("NumberGeneratorTemplate", (string)null); + + b.HasData( + new + { + Id = 1, + CurrentNumber = 0, + DigitFormat = "D4", + GenerateType = 0, + LastGeneratedNumber = "", + Prefix = "CHK", + PrefixSeparator = "-", + ShortName = "Ellenőrzési dokumentum sorszámozása", + Suffix = "", + SuffixSeparator = "-" + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplateDate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentNumber") + .HasColumnType("int"); + + b.Property("LastGeneratedNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Month") + .HasColumnType("int"); + + b.Property("NumberGeneratorTemplateId") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("NumberGeneratorTemplateId"); + + b.ToTable("NumberGeneratorTemplateDate", (string)null); + + b.HasData( + new + { + Id = 1, + CurrentNumber = 0, + LastGeneratedNumber = "", + Month = 0, + NumberGeneratorTemplateId = 1, + Year = 1 + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CanDownloadAPK") + .HasColumnType("bit"); + + b.Property("CanEnableBlocked") + .HasColumnType("bit"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsAdmin") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ParentId") + .HasColumnType("int"); + + b.Property("RoleName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ParentId"); + + b.ToTable("Roles", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleCheckListTemplateHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckPointId") + .HasColumnType("int"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckPointId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleCheckPoint", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("JwtToken") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NFCActive") + .HasColumnType("bit"); + + b.Property("NFCCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("Token2FA") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users", (string)null); + + b.HasData( + new + { + Id = 1, + Active = true, + CreatedAt = new DateTime(2025, 4, 8, 10, 50, 38, 70, DateTimeKind.Utc).AddTicks(7907), + CreatedBy = "System", + Email = "admin@nuvolar.hu", + FirstName = "Administrator", + IsDeleted = false, + JwtToken = "", + LastModAt = new DateTime(2025, 4, 8, 10, 50, 38, 70, DateTimeKind.Utc).AddTicks(7910), + LastModBy = "System", + LastName = "System", + NFCActive = true, + NFCCode = "00000000", + PasswordHash = "eGM0NUREZnJ0ISFFRDIxMKE5TYwthDBuUsTUEO1fBnCR3VdSCmdz47ue0RoVvnkY", + Token2FA = "", + UserName = "admin" + }, + new + { + Id = 2, + Active = true, + CreatedAt = new DateTime(2025, 4, 8, 10, 50, 38, 83, DateTimeKind.Utc).AddTicks(1759), + CreatedBy = "System", + Email = "user@nuvolar.hu", + FirstName = "User", + IsDeleted = false, + JwtToken = "", + LastModAt = new DateTime(2025, 4, 8, 10, 50, 38, 83, DateTimeKind.Utc).AddTicks(1761), + LastModBy = "System", + LastName = "System", + NFCActive = true, + NFCCode = "00000000", + PasswordHash = "eGM0NUREZnJ0ISFFRDIxMPwM2D9sQSj7zmaSBIsOGe0I9hBFwCGPVbyrYMA5EnKG", + Token2FA = "", + UserName = "user" + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.HasIndex("UserId"); + + b.ToTable("UserRoles", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.User", "AcceptUser") + .WithMany() + .HasForeignKey("AcceptUserId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany() + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AcceptUser"); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListHeader", "CheckListHeader") + .WithMany("CheckListRows") + .HasForeignKey("CheckListHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateRow", "CheckListTemplateRow") + .WithMany() + .HasForeignKey("CheckListTemplateRowId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListHeader"); + + b.Navigation("CheckListTemplateRow"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGenerator1") + .WithMany() + .HasForeignKey("NumberGenerator1Id"); + + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGenerator2") + .WithMany() + .HasForeignKey("NumberGenerator2Id"); + + b.Navigation("NumberGenerator1"); + + b.Navigation("NumberGenerator2"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany("CheckListTemplateRows") + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint") + .WithMany("CheckListTemplateRows") + .HasForeignKey("CheckPointId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Equipment", "Equipment") + .WithMany() + .HasForeignKey("EquipmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("CheckPoint"); + + b.Navigation("Equipment"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.DeviceMessage", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplateDate", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGeneratorTemplate") + .WithMany("NumberGeneratorTemplateDates") + .HasForeignKey("NumberGeneratorTemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("NumberGeneratorTemplate"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") + .WithMany() + .HasForeignKey("CheckListTemplateHeaderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckPoint", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint") + .WithMany() + .HasForeignKey("CheckPointId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckPoint"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId"); + + b.HasOne("WorkFlowCheck.DL.Entities.User", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => + { + b.Navigation("CheckListRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.Navigation("CheckListTemplateRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b => + { + b.Navigation("CheckListTemplateRows"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", b => + { + b.Navigation("NumberGeneratorTemplateDates"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.Navigation("Children"); + + b.Navigation("UserRoles"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b => + { + b.Navigation("UserRoles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/WorkFlowCheck.DL/Migrations/20250408105039_Extend019.cs b/src/WorkFlowCheck.DL/Migrations/20250408105039_Extend019.cs new file mode 100644 index 0000000..7f1248e --- /dev/null +++ b/src/WorkFlowCheck.DL/Migrations/20250408105039_Extend019.cs @@ -0,0 +1,70 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace WorkFlowCheck.DL.Migrations +{ + /// + public partial class Extend019 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_CheckListHeader_Users_AcceptUserId", + table: "CheckListHeader"); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 10, 50, 38, 70, DateTimeKind.Utc).AddTicks(7907), new DateTime(2025, 4, 8, 10, 50, 38, 70, DateTimeKind.Utc).AddTicks(7910) }); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 10, 50, 38, 83, DateTimeKind.Utc).AddTicks(1759), new DateTime(2025, 4, 8, 10, 50, 38, 83, DateTimeKind.Utc).AddTicks(1761) }); + + migrationBuilder.AddForeignKey( + name: "FK_CheckListHeader_Users_AcceptUserId", + table: "CheckListHeader", + column: "AcceptUserId", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_CheckListHeader_Users_AcceptUserId", + table: "CheckListHeader"); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 7, 29, 26, 543, DateTimeKind.Utc).AddTicks(8649), new DateTime(2025, 4, 8, 7, 29, 26, 543, DateTimeKind.Utc).AddTicks(8652) }); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 8, 7, 29, 26, 556, DateTimeKind.Utc).AddTicks(264), new DateTime(2025, 4, 8, 7, 29, 26, 556, DateTimeKind.Utc).AddTicks(270) }); + + migrationBuilder.AddForeignKey( + name: "FK_CheckListHeader_Users_AcceptUserId", + table: "CheckListHeader", + column: "AcceptUserId", + principalTable: "Users", + principalColumn: "Id"); + } + } +} diff --git a/src/WorkFlowCheck.DL/Migrations/AppDbContextModelSnapshot.cs b/src/WorkFlowCheck.DL/Migrations/AppDbContextModelSnapshot.cs index 47bb839..84ff4e1 100644 --- a/src/WorkFlowCheck.DL/Migrations/AppDbContextModelSnapshot.cs +++ b/src/WorkFlowCheck.DL/Migrations/AppDbContextModelSnapshot.cs @@ -30,6 +30,9 @@ namespace WorkFlowCheck.DL.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("AcceptUserId") + .HasColumnType("int"); + b.Property("CheckListTemplateHeaderId") .HasColumnType("int"); @@ -82,6 +85,8 @@ namespace WorkFlowCheck.DL.Migrations b.HasKey("Id"); + b.HasIndex("AcceptUserId"); + b.HasIndex("CheckListTemplateHeaderId"); b.HasIndex("UserId"); @@ -318,6 +323,9 @@ namespace WorkFlowCheck.DL.Migrations b.Property("ReceiveDate") .HasColumnType("datetime2"); + b.Property("RoleId") + .HasColumnType("int"); + b.Property("SendDate") .HasColumnType("datetime2"); @@ -326,6 +334,8 @@ namespace WorkFlowCheck.DL.Migrations b.HasIndex("DeviceIdTo") .HasDatabaseName("IX_DeviceMessage_DeviceIdTo"); + b.HasIndex("RoleId"); + b.ToTable("DeviceMessage", (string)null); }); @@ -676,13 +686,13 @@ namespace WorkFlowCheck.DL.Migrations { Id = 1, Active = true, - CreatedAt = new DateTime(2025, 4, 6, 19, 24, 51, 944, DateTimeKind.Utc).AddTicks(2145), + CreatedAt = new DateTime(2025, 4, 8, 10, 50, 38, 70, DateTimeKind.Utc).AddTicks(7907), CreatedBy = "System", Email = "admin@nuvolar.hu", FirstName = "Administrator", IsDeleted = false, JwtToken = "", - LastModAt = new DateTime(2025, 4, 6, 19, 24, 51, 944, DateTimeKind.Utc).AddTicks(2148), + LastModAt = new DateTime(2025, 4, 8, 10, 50, 38, 70, DateTimeKind.Utc).AddTicks(7910), LastModBy = "System", LastName = "System", NFCActive = true, @@ -695,13 +705,13 @@ namespace WorkFlowCheck.DL.Migrations { Id = 2, Active = true, - CreatedAt = new DateTime(2025, 4, 6, 19, 24, 51, 956, DateTimeKind.Utc).AddTicks(5191), + CreatedAt = new DateTime(2025, 4, 8, 10, 50, 38, 83, DateTimeKind.Utc).AddTicks(1759), CreatedBy = "System", Email = "user@nuvolar.hu", FirstName = "User", IsDeleted = false, JwtToken = "", - LastModAt = new DateTime(2025, 4, 6, 19, 24, 51, 956, DateTimeKind.Utc).AddTicks(5194), + LastModAt = new DateTime(2025, 4, 8, 10, 50, 38, 83, DateTimeKind.Utc).AddTicks(1761), LastModBy = "System", LastName = "System", NFCActive = true, @@ -737,6 +747,11 @@ namespace WorkFlowCheck.DL.Migrations modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b => { + b.HasOne("WorkFlowCheck.DL.Entities.User", "AcceptUser") + .WithMany() + .HasForeignKey("AcceptUserId") + .OnDelete(DeleteBehavior.Restrict); + b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") .WithMany() .HasForeignKey("CheckListTemplateHeaderId") @@ -749,6 +764,8 @@ namespace WorkFlowCheck.DL.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.Navigation("AcceptUser"); + b.Navigation("CheckListTemplateHeader"); b.Navigation("User"); @@ -815,6 +832,15 @@ namespace WorkFlowCheck.DL.Migrations b.Navigation("Equipment"); }); + modelBuilder.Entity("WorkFlowCheck.DL.Entities.DeviceMessage", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId"); + + b.Navigation("Role"); + }); + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplateDate", b => { b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGeneratorTemplate") diff --git a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml index 298fe81..c2da635 100644 --- a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml +++ b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml @@ -1,5 +1,7 @@ @page @model WorkFlowCheck.Web.Pages.CheckList.CheckListHeader.CheckListHeaderPageModel +@using WorkFlowCheck.Common.Helper +@using WorkFlowCheck.Common.DTO @{ ViewData["Title"] = "Ellenőrzések"; } @@ -15,26 +17,28 @@ ID - Status - IsEditable - DocumentNumber - DateExecution - ShortName - Description - User + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.CheckStatus), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.IsEditable), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.DocumentNumber), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.DateExecution), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.ShortName), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.Description), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.UserId), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.AcceptUserId), typeof(CheckListHeaderDTO)) Action ID - Status - IsEditable - DocumentNumber - DateExecution - ShortName - Description - User + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.CheckStatus), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.IsEditable), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.DocumentNumber), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.DateExecution), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.ShortName), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.Description), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.UserId), typeof(CheckListHeaderDTO)) + @DisplayNameHelper.GetDisplayName(nameof(CheckListHeaderDTO.AcceptUserId), typeof(CheckListHeaderDTO)) Action @@ -80,6 +84,7 @@ { data: "shortName" }, { data: "description" }, { data: "userDTO.userName" }, + { data: "acceptUserDTO.userName" }, { data: "checkStatus", render: function (data, type, row) { return renderActionButtonsforCheckListHeader(data, row.id); }} @@ -90,7 +95,7 @@ "visible": false }, { - "targets": 8, + "targets": 9, "className": "text-center", "width": "10%" } @@ -118,11 +123,54 @@ window.location.href = `@Url.Page("./CheckListHeaderPage")?handler=CreatePDF&id=${row.id}`; }); + + $('#tbCheckListHeadersPage').on('click', '.accept-btn', function () + { + const row = table.row($(this).closest('tr')).data(); + const url = `@Url.Page("./CheckListHeaderPage")?handler=Accept&id=${row.id}` + + showConfirmModal({ + title: 'Jóváhagyás megerősítése', + message: 'Biztosan jóváhagyod a folyamatot?', + okText: 'Jóváhagyás', + cancelText: 'Mégsem' + }).then(function(result){ + if(result === 'ok'){ + $.ajax({ + url: url, + type: 'GET', + success: function(data) { + if (data) { + showMessageModal({ + title: 'Információ', + message: 'A jóváhagyás sikerült!', + okText: 'Értettem' + }); + table.ajax.reload(); + } else { + showMessageModal({ + title: 'Hiba!', + message: 'A jóváhagyás NEM sikerült!', + okText: 'Értettem' + }); + } + }, + error: function(xhr, status, error) { + showMessageModal({ + title: 'Hiba!', + message: 'A jóváhagyás NEM sikerült!', + okText: 'Értettem' + }); + } + }); + } + }); + }); $('#tbCheckListHeadersPage').on('click', '.delete-btn', function () { const row = table.row($(this).closest('tr')).data(); - console.log(row); + showConfirmModal({ title: 'Törlés megerősítése', message: 'Biztosan törölni szeretnéd ezt az elemet?', diff --git a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml.cs b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml.cs index 9fcaa80..e0ea428 100644 --- a/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml.cs +++ b/src/WorkFlowCheck.Web/Pages/CheckList/CheckListHeader/CheckListHeaderPage.cshtml.cs @@ -5,7 +5,7 @@ using System.ComponentModel.DataAnnotations; using System.Reflection; using WorkFlowCheck.Common.Enums; using WorkFlowCheck.Web.Services.Interfaces; - +using System.Security.Claims; namespace WorkFlowCheck.Web.Pages.CheckList.CheckListHeader { public class CheckListHeaderPageModel : PageModel @@ -54,5 +54,47 @@ namespace WorkFlowCheck.Web.Pages.CheckList.CheckListHeader return new JsonResult(new { success = false }); } } + public async Task OnGetAccept(int id) + { + var userid = User.FindFirstValue(ClaimTypes.NameIdentifier); + var response = await _checkListService.AcceptCheckListHeader(id, int.Parse(userid)); + + if (response.IsSuccess) + { + return new JsonResult(new { success = response.Data }); + } + else + { + return new JsonResult(new { success = false }); + } + } + public async Task OnGetBlock(int id) + { + var userid = User.FindFirstValue(ClaimTypes.NameIdentifier); + var response = await _checkListService.AcceptCheckListHeader(id, int.Parse(userid)); + + if (response.IsSuccess) + { + return new JsonResult(new { success = response.Data }); + } + else + { + return new JsonResult(new { success = false }); + } + } + public async Task OnGetUnBlock(int id) + { + var userid = User.FindFirstValue(ClaimTypes.NameIdentifier); + var response = await _checkListService.AcceptCheckListHeader(id, int.Parse(userid)); + + if (response.IsSuccess) + { + return new JsonResult(new { success = response.Data }); + } + else + { + return new JsonResult(new { success = false }); + } + } } } diff --git a/src/WorkFlowCheck.Web/Services/CheckListService.cs b/src/WorkFlowCheck.Web/Services/CheckListService.cs index 5c7aa80..1c6a0ff 100644 --- a/src/WorkFlowCheck.Web/Services/CheckListService.cs +++ b/src/WorkFlowCheck.Web/Services/CheckListService.cs @@ -60,6 +60,70 @@ namespace WorkFlowCheck.Web.Services } public async Task> UpdateCheckListHeader(CheckListHeaderDTO checkListHeaderDTO) => throw new NotImplementedException(); + public async Task> AcceptCheckListHeader(int id, int userid) + { + var retVal = new ApiResponseDTO(); + var endpoint = $"{_httpClient.BaseAddress}api/CheckList/AcceptCheckListHeader/{id}/{userid}"; + try + { + var response = await _httpClient.GetFromJsonAsync>(endpoint); + if (response != null) + { + if (response.IsSuccess) + { + return response; + } + } + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return retVal; + } + public async Task> BlockCheckListHeader(int id, int userid) + { + var retVal = new ApiResponseDTO(); + var endpoint = $"{_httpClient.BaseAddress}api/CheckList/BlockCheckListHeader/{id}/{userid}"; + try + { + var response = await _httpClient.GetFromJsonAsync>(endpoint); + if (response != null) + { + if (response.IsSuccess) + { + return response; + } + } + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return retVal; + } + public async Task> UnBlockCheckListHeader(int id, int userid) + { + var retVal = new ApiResponseDTO(); + var endpoint = $"{_httpClient.BaseAddress}api/CheckList/UnBlockCheckListHeader/{id}/{userid}"; + try + { + var response = await _httpClient.GetFromJsonAsync>(endpoint); + if (response != null) + { + if (response.IsSuccess) + { + return response; + } + } + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return retVal; + } + public async Task> CreatePDF(int id) { var retVal = new ApiResponseDTO(); diff --git a/src/WorkFlowCheck.Web/Services/Interfaces/ICheckListService.cs b/src/WorkFlowCheck.Web/Services/Interfaces/ICheckListService.cs index bc92bb7..c7cbdc9 100644 --- a/src/WorkFlowCheck.Web/Services/Interfaces/ICheckListService.cs +++ b/src/WorkFlowCheck.Web/Services/Interfaces/ICheckListService.cs @@ -9,17 +9,24 @@ namespace WorkFlowCheck.Web.Services.Interfaces Task> GetAllCheckListHeaderAsync(); Task> UpdateCheckListHeader(CheckListHeaderDTO checkListHeaderDTO); Task> CreatePDF(int id); + Task> AcceptCheckListHeader(int id, int userid); + Task> BlockCheckListHeader(int id, int userid); + Task> UnBlockCheckListHeader(int id, int userid); + Task GetCheckListTemplateHeader(int id); Task> GetAllCheckListTemplateHeaderAsync(); Task> UpdateCheckListTemplateHeader(CheckListTemplateHeaderDTO checkListTemplateHeaderDTO); + Task GetCheckListTemplateRow(int id); Task> UpdateCheckListTemplateRow(CheckListTemplateRowDTO checkListTemplateRowDTO); + Task GetCheckListRow(int id); Task> UpdateCheckListRow(CheckListRowDTO checkListRowDTO); + List GetCheckStatus(); } diff --git a/src/WorkFlowCheck.Web/wwwroot/js/site.js b/src/WorkFlowCheck.Web/wwwroot/js/site.js index 7f37272..ed40f12 100644 --- a/src/WorkFlowCheck.Web/wwwroot/js/site.js +++ b/src/WorkFlowCheck.Web/wwwroot/js/site.js @@ -111,20 +111,39 @@ function renderActionButtonsforCheckListHeader(data, rowId) { - + `; } - else { - + if (data === 2) { return ` - `; } + if (data === 5) { + return ` + `; + } + if (data === 3) { + return ``; + } + return ` + `; + //`; + } function renderCheckStatus(data) {