z;XPG{p?oxxg6y$lv;~{q)}TOzU!b8gbR?7SR_DP=as-
z7U(wGW&MfjK$xVtM-pjW!tf2_^Qp15@W3Nvk(sBnzO%SMY8V-UqQzzY!{rJsa5ImMh^zgMqs-;)<)*=9!
zn=P;Rh&NV9hsc%LDbH^BbCpqP5dbI=MRsvQ#nF4uP8$
zVFX8_=}$J>lzrkcWTjBKnjl=@XwthOnHh(fNunO;7DurUzup30eh?N}n!}vL(0&t4
z<9@{NIeU;wDw;btj54Zj5fr&HJ7}M7u99Bb=F(4;BhCf;J}8kfOK$?s)?wr<&s_b<
ztJa0?Jg9907GVUhkZ~XYbRu#kP;R{ggPMFtnZE@CU7xL1mIYiLXGJ#V23A_|6{Kt!
zKjAn}Iz2jw&Ggrb^~a9Ua>{s?bji}}?pAs)ARjjXiGJwlgwFxwMQ!mB(t0O%eY>Q*
zo4k!~f1(HS_QG<-zIk`LoVI((`iWM~`1DkN9^1H<)aIP8mAy9^f1zCWKTE)VZ<+2?
zv0ewo+Ej4)4-sAvBQgQiAw=8G)F3dy-4X>EJb)7$BE2WHpXHM9>+@2Kzf+svoj#`=
z%+ou6OnTgvk9=FiF_Q5CQO2IEy8#}#;vM5z8tgK$vEm9FzPxE4s*1T`(QrAOx@#a`@Sv2Wz$pqN1Y)wXFuYSVqMb
zx8CN8wzT(P8v25o!X`N!(I#j$3*CwdKs84N1L>aqn|_mjb>)+EvCks}pJ(lg4C>E4
zf^O5{9HmF_lPtoySIe39Il%i{*;)3t)#7JUH3I6Z^Wx{@??2DmCpQg9$@}ipdk1hj
z0fLp|(m5`_B!V414WX(56-{6mDz1Xw=F|inW}A00++Kp^aP3(}+^^{!M?C19QnMOx
z`@{jcU0^o;8aLcA$mBzK*}XTsj}xl6&XJiB-#znLCBiwIYf_(MhcTk
zLA}QHCVk$E?{Wm^s>_%&|C+S9e$k~s>_>Ui&GHb9d5XfsSK{#(8%mcs(T{0`wlG18
zc<56yYQJGoX{j-`5SUgp{$&4q76k6t4<5I{ZhwS9GvXS`Iu;$51pv_^;d_qqC)qFv
zp_vbh+Ps07hn+5X=mz5#(4u4PF!%g2C7Q4Lk_MsKZ^NlU0aFj3>#%jgb<%b2F+_hd
zq5&9ic{nhOT8)HEx%>PUW-S;r?@9{2vl|*{hY!TqVI)xk7Nv#Z1}Pg3UVO~s;uMKa|R?iQ7&aG)!DbY?-4fFom_{>|^>`Qm({b4PUcxy#5E5qIo}iv~(96`lpF1
zZjJMjGDRJILK_oB-KwGGJgFYmEW|&V&e|{PNQ?Q3rkQpDK)Xz7dMo+p$i_o@UCC70
zw;y|Dj1hKR&4y?4Hd0lGaS>X^lu@f@8hiUt#{fpdQm3bKxh3a;X4`{yn*|6DQM+XV
zS{L4b-#&oGu2~ir@dGH|xq`||O26iD#Jk#M%ULGtr)Ujhg+@-TZgG7`d742_!|^uo
zM{WSg3%D~@X~NGR3+1Tzi}8hKv`vh5^|~t69p#R`^D#H?B>6{j)qa&YzPOE5^(237
zgMHk>@%|H*jP}tF$w5DRFkz6SWnx
zoolPaZKiP#Cw8eY#UOI~6_>fc8EnL4v^gojNGgAMNzvFU^s6Hwc~TvreK7|(VO-t+
z2)@HuL5Px!D!Gn}o0s;~6>P3R*0IecRDEZn-j6Q#!YT`%lspxl`K3@V
z3AM_&?+%C-W(9K23jZTNmnV(d{Kn2g-I6-MHXMw!PmesQa7nr5HS5o4g0D_=ty-^x
z_YFAlRgrHQ+-|LKEGsCKj23w$LiG)?E`4Sq;HXUvclf!Y3N#W5WKgAkY(G!Lro$fq
zT-|FQMLGC(Y=g9ZS7m2%CsB`rYF^Y7Icv3U`Edn{sw#v(hU>U08=UpXW8&n#mXW>J
zDCQ}NAW|2E{WO|*&(s+*8dPezA}5>(xPJF>wK;{1N$mFJy-j#F(;lsCNheTsT^FEr
zg&P{kmn*d8sNhPD?36>}SO&NbyP^Hw%gAtqu62AH@$}2rFZ0M`y_&15b+%!+YZ0VA
zYL>qD@Bq$)P-Z}2Fi=z`j{0-E;Zf)K|wouqM4UBGl_}N)n0Z7>rL`)!dD6bn>
z28ve<8%@Korz@X$W#GpD&Ff*(TtyKdv3?Vl?N&ti+QNg
zu}1cNYmYiXEMc(UM>1w0H7;XoJk@PKpd#fKt{;Gkc^%B2!AxX3n6GexQf>DUY_upn
z^6bZVQGeWQdrej6E~GC@-yGBaB6-l89y$X3i3O%F*$y~GkM_Ro=7B8!rjy$@2~6-*
zA%rxM*~%Z+5q_7|eS?SmRPE7qZ+WQeft=@ke$m(^S&q2FmAdZIed86E;YYkv%!*|n
z*iY=G*JJBRQbceL*oE=)s?QYYo$(1PB2RJbQKdpmjcTfBP
z|EOBOf#-WW1|Ax>cmX=qi9e8x|KN@P+458rZmHHHW9>7dPJt_kHox+i`GSKH~@G`f%}Gj(3?Hl{{EZ(#P)^WHS3
zHyMB2cn>vygskB4_pce{1)V)fE#ZA2UK)bm?$y5wQ2G&eync_*DcDqo#7jkSD`-|Y
zK#Og2?RUGN$8O=H#o~=u*mZ9$_qr;xUyhAzL$6bW6^0l<5QYD>qFTrvvoZQRCRZ2b
z$1jmS5mEZPXy`#?7zY^)Z=Npu`nU$JrG?nD1Zb?qZ{7D)K{v++D;e%tkUAwf!GBKh
z!TU;3&0m*ADPZ{pI)(KH+)hb#i?i0v7ND58&Z>}XCLHd}UU3)#Vuk{V*||d$w&jdH
zMhVMXta_A?5mT~cM-a63ve+v^wvCOcT^aOX07uLY9_&PL3e1$G5pdS>l_dL=dWaE@
zB5me9iYjUk!dfnj1#N~V>NVTzSVEZQYVG+F~$@*KKn4$m-j;dy?i~%cLg)Z
zQmZ!yJaeftmO+>i9$*6pnmzl8fM|TI3}5ULa0`pB4uUdJ#p9^>EdQQC+o3r*FT}|Z
zLog_&Hjcb$ADn4l=m_E|_eKf%TbbZ9q`&ta$_Jy+B*|Fz_t&FzZ$}K>H!1&Hjt1rn
zO{{lS_xGI8@seu^Nx!7&j0su_y_0?Bk@P3gkpe<@rVJ
z{2}zg0e}Gfmy+baczgakG0A^8d;ovww0@{f{=faHj358uu=$~r3i=92^`hnSk`p+v
zlptJR`UDWh<1M9uoP5~rsSy)DpV4iEVV`vD!X$$!m(4I(t&HIE$P#J}^Mc=OlfJbRz-9x?$)iZfYx^BJamp^CimPD=
zn!q3_6niYJEEzt7A7Q{$B1co+TQFGGtCwBTqg9_hPxsY~KXhH2>d>k-mv)Hs?NSsBs)D;fVKvr&_dz-Ghf
zMt{Q}*ueFfd@%@PTQT4=Ysd(!Oo%VwCZ49K_`!AQ>>vY?u%|(hn4c2_?s}A414B9?
z{bX4$ZlpY*SDJIR98FeRv(%+j>sQC0em|Rimxy7`9#@e;0*aO!Vvy#Nc~lq#q<}RI
zoiE+rz=V~g1!sVpM?gx?kNzb((N_Py3!btI7bEZQTPwQ?cfrnhJfCHs2AYpqFXgO1Z#)`$tT{%Y2YQi(xi%5bi8i_KukI1e=&3?9XAa4HL^ix8T2q$!m%nSM=Ii$y`N?)jYY
z>Au)&@pX>}&@v?!l61N9rui5yqY2bAh{~dZx<&T2xhc8#of#X-SAy<<9n_OY7#Ra1
z6CM)J1mj|t0u9;*N^wlcp-351`E0M}qqV${3Caawq4K`i*NR!3#}^bc`!4#v?&i!i
zmW|%W^Zt&5-RoiRVV1rm20w@AZB^e1wm8oE@$H@d%lnP;<^0v9Cdbog_!sW?yKK(q
z(|L+B!LnaXxA)U&G;Hw(8C%OtjMr1bL_*_6f#Daad}q5diblSJog!uxiUm
zF=7B^A}iX1?=aZg5Dt>*-^W0{~Zw67I|mQ>X1X
zk}-WWQ5OLwzi?f!`-s<9zSOgU@qH;%C5HmhIaz(=?z3_3<#OkOC>e_?`Aol;T
z?=#df1w+opdBhI0#)IF}FaS-pjyMKFfCeBi8aK41O~SS>2X(H@cgr4yg-x*YG!i}&
z6mize!hd3rDN>tc4skvaJ5wZ6fV5Dw#OEHt#W}@+r&>!tYehyn=5)1OLl`yDBdq=!
zx6}ZVci^2G1tB`@>?}Tpl$l0(W>I_Is;Y!0^m@Eh?6}evhwwv
zdfBsZ!JnGb5VJ&we&}-SNxAy&a%t3A(PHg|h
z*kwzB^+yJoqn^k_}
zQ6AX)CG#d%CRDK4nzg}Kg~o{a(BrD8qccRyQ|(2f$5Ks%*yiuxK-N_8d~3p48mwu8
zJY#1%nl&^u+EZ_8=*Om!@D(3`u^bj|HWQL1Y!Zq@x3SBJi)@eL7SQ=j=Siln<^y-0
zG*&Uw@kx?A+J1~+)2`P{hfVFGg?1&axvcTdh8|6*Knfsum
z%hj5lBW3izM@^ad0k`Ms%fq`j!kV6G|JDnb_&@OD-~}+I8MWj=BraEu0R*Ss8ZirI
znnie^4zjeVTMF-^H!PwB8DjMhhUNe8x~LqI;#%Q_pT1R2yy-LTi;N|>K2bEg^n%Ut3y)O{s3T
zT7fFJYoFl%r-#d~H%2f%2mnAWG{FDOlICFK=xAnb;_%OdrBQj^dY=`+i+;w3;XzY0
zo_0K}eX1{|b(H7|%`P0stAJ#TtPfjkEZSw(=Qwv<2bb;{>`ZVBujX}NYWz&xO@s&bu30m^TCGX
z{AsbgK(wSfvb0hvg`KBqjnd^8D=D=6Qp}?vHyG4ngn%7)$-*bgi!Mt5>))eSq9H4c
zXOB;I58?Y)K~ynlHIUO-Vx&-&ESd-fJbZmz!=u0Q3$B0NY~szz`?=w?Et(w^v>?J{
zBNl>sdtwi}jU)OWQo>Vi4<+EaiKVQtd+9KcgJAVU=^yORfG=f<%`b1*0dK}@5-xV;
zKKZM~ZCbX@_l0Hbdf%j?r^N-hPkarhgBv~ZrZ=c0Es!;P}wY_Y2@-lEQC1xdrMAL~b6WlSnz
zNnC^K_W4H*`1tn|fA@(PANHTZfoIlx3x`}+$iFqCY}|*3DeBljkyi)b#Qyl80B)eu
zI(f=h@JRHGOe}?`0hw(XstQCZLX>&du8>XldQ)P5^g!Vt7WSaVA}H!y+`5NK15Y3M
zy)B}?fs9Vc)K(O(5Jh%TD)U{4nBlPN?vi{ZqG
zoIa2mwo0L^1f;}9({j5TrDf^(Q1sLnts6uQ;?!v(E@-SmqN_(~{+@t%c8$(s+*LHx
zI>x(r#^(Dabcz&z0+<4joFp_3TD_589lPe(SrzOq59M_<9yk6(Tj{NspA6fsBF0L3
z`e%>Cj24ouCD5&{`o5`UZ$?5kH$6qiW$ds_a+>Ft?ckN!HjxUI4Ep)kLp3dF`BF2?
z4V3t*l45rlIUs39RhShZ#!Au+;Q{Nb@r*uj2rSlwm7Ja|*xF@&0&M4nkj;rvzf7{L
z+T5s!HtU&TSxS*Im=+eb=@Y!%inrNeQm)d4o!jQ_w2(B?1DbfJsWD(;iYdsY?M#x8o3%}I5rn=f=ISD$@qajyUk8qhW3yXRO>UB=49-U
zQH0yPyuq87T~lV!zTHL)_;_g!$$iDwpd;fI`TeOQw~TSWTjNWKSK*i9`<>2@BlJ{0RBI&s)M7OrP050NoSUZ!+Ja7@HW@{b?>a=`_708$0*Km!Ho
zfXjP9=y9Etkhc%(o1079vo{JV={R!oSY}R?wkzY?=e*AM-TM4+zNfewq8XpI=fqya
zY(7m2{_sAL_Dv+}^+Ejc+hm&(CiSDD6Yo^2dug&q-9&OF%CETaJ0s859$riqjKvV5
zV+X{0dZuco>=ah-O4sr*CVDh|wMtW2FH>0sQb|$+Z4~#ChQ=c!sRN6Nzl;DzM9THC
z_jg%aX~n{5Mg8zkmjyJN05Z0|f&i%lADF|g+YCdTbBCcI!)cWqM0V_YQFZ{J!-O)*
zmlWDe4Weovw{JWt;gbr|b6CRd8N|@6K28>syzg>89|?H1VUayI92Il*46=(==Gm;%
z7d?_`DZ&pAaj10&F6~-a*^pgX75AM8#Gh~`!fx6SOK(Sg+@@aSbP~sh(?o~`b*uWf
zI-f_xlG7p~Ar&fgQqaxXl4{;P?osF-$GjWKCn7r`ksXwF=g+V+=&0i)f1#eJ&ZHwXP^qcLL-92F9)mIFX%-xe1b53S9mtQU<_
z*l$`q-(>sX*;109L#rd!l07f?Z_1Emj@InhUbX8B^fGQ_)k5(%8?Um0kdwEnpp&=kfRnc{j?BZqqGxfY8H8;mFyBS;
zeyzlC7j$KGctk_&Uu7fpwRV{JGF)8+;ty?RZTGi!%)4Q@xIDq_U&$=FT6ZmkS2s=G
z+1HLADI~YixGCKo?=mM_Bv%oexf;*yhZ~YZGB_DqknR0#OkF+h5DjH9d-2px2cnO^
zH>JCx9*p=4d;Cf)dl)ZDBhDOyQ0l5iDH{_QX*PJQdCPs22%G_DPW6|frXKU}ie|kB
z6WTQL-jxQTczmBb-}#%Ho)i%TnA4CxX$YG%Q~k${G)n*b7+?PMpLBboC6{zUW3_$@
z;0R1@EY*pdv0nXPbg*b+C9Q>-Q1|jYL?=~2;@89dv~qSHiLr0P5dlOslOlB|c@-y=7tOwu}qTu>a=
z(uJC;TLcdTuA4?Gc5&N<3z(MEMGb3MVn%c=wrnFdPmJo-aWSfyQevi
z&6R7lYOkP0L#a2
z#_1Gnp+x40vetQKBAW}f2DNi?xuBQd?^LeRO-H^sFU9A{zWvD&g@lOXp<8jBEYE
zqzBFB8K%3qFdu-~1H#o2gx%es!Cs!#C8j11aZS0Pi??`H?Yi*J)%jxK%9LcTUF3+{
z3Kaji10}W;#8g$^nY&>yPQ0NvUa+OpM`+*%5^_LujW0oBsIQ8VgoGwS8W1FJrmI&7
z1k)oh><8N;^^Z_42}Yy^#KBl(C(il`o4R9XD7Q1#Q`(>CD;-J;l8OvswDgMYt#386MYmu0m{KRIeq2D9pOE*}c+|}x+tR!zJlVka7#Qg7ff3evV*Dr&|(z*P1Z&F*zvL-G*B4`rFKtQ+Z`#2Hmk6R$Bi@aCZ_Vq2TMU
zvycra{x#fIB}p@pth-2`m5j5fweqM&T*+_ZUDoaA$VQ&c@Qb^C^kO`9@IJHU7qw;A
z?7uE+EI+tLRT-C9V&@~xgswlA&6P-5!*v`Q0E?%`m_DAo_b>a5ba#pj&UcFL?_)71
zOe^qT6cZEC;_1#F=N069TP+bM+G+RG5=+CEEi&wnJ!R+W^qF`5qE(p%U*y%z^^raJ
z9wpek`7T?x#O~w-y!k3*cfkb;@i}u`Y_Eu235ocAQ_8j?y++g+G2_Y%JR}U
zs0#m;{$rsO%J*+JSj}~h{(wj*O49-XkhM|-Ki2Xe3=0OT$YD&>p^zU7f&Z?f63UH&
zLi{J|SSbPbNNKD;>wl7#TCjq#QHS;;q4ouTObA7SQ2uS&e=7Q?J%s;-)<2n7NXq4I>F|GRDfW%AD@CTbu!=KpSezJ(`i358e6D*jH4yL-*bwa;0(*#i8t
zvNgKX0)CTuQqJPHcHp!Ek5CmG9^R^Z0lv_L0^ud0`Lvl+iUoZbU)IaVe*QZgehSZx
zWJR()bwE-PJ^qsCqX$K#iZ-pkj(o4%JKmyCQju0i@
z0?W05>Q!@$%py9oAA#LxuaI6w56E)v?u@Q_pA?OK-b$$pGsdcA{ZVJ+x<$c(1Z99^
zn&zQU$yoV)g~4Hn)GQ>rMR2lH-U6`;0LXMKLZFhc@_GvWWibD0fz&
zSLH&iZxR+#t%BhH(-}Jr7n+AQBGL+dZ
zD*S_Y^@v=nuwPDEv(Rc@rf9C&v_Q#Ht$rsNRgt__IP^!-N+E>YgqKk4Kbo^dEEU?<
zqJK5}1u^8a2ytNAGPPrd(^?j-S3xwT^`!3$KW*^m%iUcn+U=8-+E0V@~?c|Q8SNrLew9Zn_`q}7Ia>@`4ZWXJso}0?|qW2xk
zjbH+SbCX<)N%9hJNin|Wv50TUQOUqrGTC&c$muh^Yx-90+r0hhx9Qli(dX6Q?oZAD
zmFwvWscF-&<#cvyw^KcDJ{Vuj;R(H6Ym>S>fz6p+R-d4ec|g#u~ONjo(x}
zpFe*2|8(5>{(j$b{H!$)|Ex@){Ks*3G16E3Z;^n^IUU(P1_Xc`7v!G)IhPZH`q&_T
zeV8G1gM4q_xy{_VOWLlzUfF9aAbnT8?uYMB`(@|m6^;x~0fK;TgaSP(q#G>B{pBE6
z9}T!-qP$YiG8%V^0X#99qZYOXG8^4TD8@T+3Dw&~F0D}MNGCedQ&@Ik!OFk)#zB9}
zM&@giWrAX?e$SkkqfU;gB0t+_7N@Z@>|%jdjG4Ofbvf-Apwk1ZqRq|^EjTWuTQq_R
zs(~-?4Lq{H?{gS^gkf%K@lBoh2L8dZXAFtt4DS~;W3zukPkjI$Lgy>iTb@qEgBguG
zj;4I)SRG|NOuO$foC5Io9ymw^ztqx*n}3~OGmxVmN9vL9Th4T}UAJ$xT84dn$@HOJ
znq|KSm4tZ)#P%mxH!`ASrJs)Bj`Qh$`oR7_b+txy#OL`>SL6SL^pXD4)y6i~j!Js^
zmPY@CTsq@zEY=wihPL6Ka09p4lCyXx1+wCeU}1)|6R&_N!f_(h;%6!C?k`>9ap@;e
z(wis1)V!~*j_3C~I((K;IV8Zx(ld*RMZ%c-t`b*|AC~8jjAbBQt(`mTMUEaw{I=+M
zecCP1f>`h%matV#qpbCYA^Ps&a#^s7fA
zM4Iyd0h5BCcS4a@&8}~qU)1>la^zzLmr(hZ28@fmo9wVy|4Wavh*8rtfego$RxX0=3XCt5Rf?b1>j9
z#^Ac6DxopJW*ubNKxT!bmKMmTXamM1up+WJ^tbqvHATe?l?%Ht7I9aJ-=>(i$_ip0
z;|FZ1CWDV*uxj3rR~3Kc=s#w@Nv-yx+&L$M`3wae9-7HoP=ypXf4sw%u;k~5EGr>N
zz-uIkS9Np*D$2wvNM3v*YHRG7L`-MDeLRAdwEk+yZF?|2%r!R&_L}!p
zsV2;e_mvhKx#^Ajf++hf!`lu^^ZkE(eO`O65%BpL8jwG~Ld2i-!JkDzIeQyh2YLe=
z`+r9UK|aX;zbN?Ab&>I#vi<+p6a)_3_x&R;b;l@-s38tPHcVB
zdeJ~p`oj|=d%IIDzO97??|WF=xoSjwZY@9LcS7jmvME&?TPFQ>R4DP-CmCMEvoJc~
z^ilSB23eyrH*W_$%c3am_hv!IXJ1OM3QR+57F)_d`Xu57hT8FFqCoyq4e{%iA5l=9~Wq7Fn2e
zhwJnso_B$%_BJrp3LvN2#DW4)aW4&s?XNB$ovLA!8J{g~v+juC<{e@A_Yc%^2?|G^VV(Y=Qnk#bP&3ucI;V8r
z#@m~hbFRF4B<jbOXpBt^*
z)-7Lf$jr)j#lEtcd135Xj(s{Ijayddbg$ZzRJY|pT)yFIp(hLvG?!SdE>~b@csaiRCxzKpC1y7H@gY@ht+OWYn74GdRMj6bvj>>6w{qUY-jBvtyWo{Sjjnmt$Yek
zL#patU#oX-*HalK7Cyg4E(z
zP%a7ZMm0cgqSW^HKs|m;3=F^#RU|MOXeDIP2za3gy2i4bGfGlY7#Q~KWdzUYAarg9
zW?%5)0p!Id=-N@&s30^mFt}wywc}W^f^HJ}x&?$;HMuxeF`yfPK0Adl;$|__2;{jc
zbnWQF(FpD86)^4a!D)2O=uKjT<_FDC&1el|bQ929dI%G|TcIYPwENKYqc#T+x)~VK
p+8G!y8VBgwQOjjy?J`|R+M%U%fHx~Jd4SRyH^V_-n$zzE@c@RnJp=#%
literal 0
HcmV?d00001
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..226a62c
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,73 @@
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-kapt'
+
+android {
+ compileSdkVersion 30
+ buildToolsVersion "29.0.3"
+
+ defaultConfig {
+ applicationId "com.focasoftware.deboinventariov20"
+ minSdkVersion 26
+ targetSdkVersion 30
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
+ implementation 'androidx.core:core-ktx:1.3.1'
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+ implementation 'com.google.android.material:material:1.2.0'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation 'androidx.navigation:navigation-fragment:2.3.0'
+ implementation 'androidx.navigation:navigation-ui:2.3.0'
+ implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
+ implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
+ implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
+ implementation 'androidx.recyclerview:recyclerview:1.1.0'
+ testImplementation 'junit:junit:4.13'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+
+
+ //Room
+ implementation 'androidx.room:room-ktx:2.2.5'
+ implementation "androidx.room:room-runtime:2.2.5"
+ kapt "androidx.room:room-compiler:2.2.5"
+
+ //Retrofit
+ implementation 'com.squareup.retrofit2:retrofit:2.9.0'
+ implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
+ implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1'
+
+ //Gson library
+ implementation "com.google.code.gson:gson:2.8.6"
+ annotationProcessor 'androidx.room:room-compiler:2.2.5'
+
+
+
+ implementation 'com.afollestad.material-dialogs:core:3.3.0'
+ implementation 'com.afollestad.material-dialogs:input:3.3.0'
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/focasoftware/deboinventariov20/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/focasoftware/deboinventariov20/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..a941e1e
--- /dev/null
+++ b/app/src/androidTest/java/com/focasoftware/deboinventariov20/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.focasoftware.deboinventariov20
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.focasoftware.deboinventariov20", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..ec5722d
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/DB/Constans/Constans.kt b/app/src/main/java/com/focasoftware/deboinventariov20/DB/Constans/Constans.kt
new file mode 100644
index 0000000..9ca1715
--- /dev/null
+++ b/app/src/main/java/com/focasoftware/deboinventariov20/DB/Constans/Constans.kt
@@ -0,0 +1,13 @@
+package com.focasoftware.deboinventario.ui.actualizacionMaestros
+
+class Constans {
+
+ companion object {
+ const val DB_NAME="DebInv"
+ const val TABLA_ART="Articles"
+ const val TABLA_INV_H="InvHead"
+ const val TABLA_INV_B="InvBody"
+ const val TABLA_SERV_INV="ServeInv"
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt
new file mode 100644
index 0000000..919ef63
--- /dev/null
+++ b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt
@@ -0,0 +1,71 @@
+package com.focasoftware.deboinventariov20.DB.DAO
+
+import androidx.room.*
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_B
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H
+import com.focasoftware.deboinventariov20.Model.*
+
+@Dao
+interface ArticulosDAO {
+
+ // TABLA ARTICULOS
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ suspend fun insertArticulos(articulos: Articles?)
+
+ @Query("SELECT * FROM $TABLA_ART ORDER BY DES DESC")
+ suspend fun findAllArticulos(): List
+
+ @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND DES LIKE '%' || :description || '%'")
+ suspend fun findArticuloByDesc(description: String?, dep: Int): List
+
+ @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND CB LIKE :codBarra")
+ suspend fun findArticuloByCodBar(codBarra: String?, dep: Int): Articles?
+
+ @Query("DELETE FROM $TABLA_ART")
+ suspend fun deleteAllArticulos()
+}
+
+@Dao
+interface InvHeadDAO {
+ @Insert()
+ suspend fun insertInvHead(invHead: InvHead?)
+
+ @Query("SELECT INV_NUM FROM $TABLA_INV_H ORDER BY INV_NUM DESC")
+ suspend fun findLastInv(): Int
+
+ @Query("DELETE FROM $TABLA_INV_H")
+ suspend fun deleteAllArticulos()
+
+ @Query("DELETE FROM $TABLA_INV_H WHERE INV_NUM=:inven")
+ suspend fun deleteinvHead(inven: Int)
+
+ @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI")
+ suspend fun fetchAllInvHead(): List
+}
+
+@Dao
+interface InvBodyDAO {
+ @Insert()
+ suspend fun insertInvBody(invBody: InvBody?)
+
+ @Query("DELETE FROM $TABLA_INV_B")
+ suspend fun deleteAllInvBody()
+
+ @Query("DELETE FROM $TABLA_INV_B WHERE INV_NUM =:inven")
+ suspend fun deleteInvBody(inven: Int)
+
+ @Query("UPDATE $TABLA_INV_B SET CANT=:cant WHERE SEC=:sec AND COD=:cod")
+ suspend fun UpdateInvBody(cant: Float, sec: String, cod: String)
+
+ @Query("SELECT * FROM $TABLA_INV_B WHERE INV_NUM =:inven ORDER BY INV_FEI DESC")
+ suspend fun fetchAllInvBody(inven:Int): List
+}
+@Dao
+interface ServeInvDao {
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ fun insertServer(servidor: ServeInv)
+
+ @Query("SELECT SER_NUM,SER_DESC, SER_DIR FROM ServeInv")
+ suspend fun findAllServers(): List
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt
new file mode 100644
index 0000000..aea9fdf
--- /dev/null
+++ b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt
@@ -0,0 +1,42 @@
+package com.focasoftware.deboinventariov20.DB.DataBase
+
+import android.content.Context
+import androidx.room.Database
+import androidx.room.Room
+import androidx.room.RoomDatabase
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART
+import com.focasoftware.deboinventariov20.DB.DAO.*
+import com.focasoftware.deboinventariov20.Model.Articles
+import com.focasoftware.deboinventariov20.Model.InvBody
+import com.focasoftware.deboinventariov20.Model.InvHead
+import com.focasoftware.deboinventariov20.Model.ServeInv
+
+
+@Database(entities = [Articles::class, InvHead::class, InvBody::class, ServeInv::class], version = 1, exportSchema = false)
+abstract class AppDb : RoomDatabase() {
+ abstract fun ArticulosDAO(): ArticulosDAO?
+ abstract fun InvHeadDAO(): InvHeadDAO?
+ abstract fun InvBodyDAO(): InvBodyDAO?
+ abstract fun ServeInvDao(): ServeInvDao?
+
+ companion object {
+ private var INSTANCE: AppDb? = null
+ fun getAppDb(context: Context): AppDb? {
+ if (INSTANCE == null) {
+ INSTANCE = Room.databaseBuilder(
+ context.applicationContext,
+ AppDb::class.java,
+ Constans.DB_NAME
+ )
+ .allowMainThreadQueries()
+ .build()
+ }
+ return INSTANCE
+ }
+
+ fun destroyInstance() {
+ INSTANCE = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt b/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt
new file mode 100644
index 0000000..4e66919
--- /dev/null
+++ b/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt
@@ -0,0 +1,48 @@
+package com.focasoftware.deboinventariov20
+
+import android.os.Bundle
+import android.view.Menu
+import com.google.android.material.floatingactionbutton.FloatingActionButton
+import com.google.android.material.snackbar.Snackbar
+import com.google.android.material.navigation.NavigationView
+import androidx.navigation.findNavController
+import androidx.navigation.ui.AppBarConfiguration
+import androidx.navigation.ui.navigateUp
+import androidx.navigation.ui.setupActionBarWithNavController
+import androidx.navigation.ui.setupWithNavController
+import androidx.drawerlayout.widget.DrawerLayout
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.widget.Toolbar
+
+class MainActivity : AppCompatActivity() {
+
+ private lateinit var appBarConfiguration: AppBarConfiguration
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_main)
+ val toolbar: Toolbar = findViewById(R.id.toolbar)
+ setSupportActionBar(toolbar)
+
+
+ val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
+ val navView: NavigationView = findViewById(R.id.nav_view)
+ val navController = findNavController(R.id.nav_host_fragment)
+
+ appBarConfiguration = AppBarConfiguration(setOf(
+ R.id.mainFragment2,R.id.inventarioFragment, R.id.actuaMaestrosFragment, R.id.configuracionFragment), drawerLayout)
+ setupActionBarWithNavController(navController, appBarConfiguration)
+ navView.setupWithNavController(navController)
+ }
+
+ override fun onCreateOptionsMenu(menu: Menu): Boolean {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ menuInflater.inflate(R.menu.main, menu)
+ return true
+ }
+
+ override fun onSupportNavigateUp(): Boolean {
+ val navController = findNavController(R.id.nav_host_fragment)
+ return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt
new file mode 100644
index 0000000..24ba60f
--- /dev/null
+++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt
@@ -0,0 +1,11 @@
+package com.focasoftware.deboinventariov20.Model
+
+import retrofit2.Response
+import retrofit2.http.GET
+
+interface ProductosApi {
+
+ @GET("api/articulos")
+ suspend fun getProductos(): Response>
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt
new file mode 100644
index 0000000..3957eab
--- /dev/null
+++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt
@@ -0,0 +1,18 @@
+package com.focasoftware.deboinventariov20.Model
+
+import retrofit2.Retrofit
+import retrofit2.converter.gson.GsonConverterFactory
+
+object ProductosService {
+ private val BASE_URL ="http://10.0.2.2:3000/"
+ //"http://10.231.45.83:3000/"
+
+
+ fun getProductosService(): ProductosApi {
+ return Retrofit.Builder()
+ .baseUrl(BASE_URL)
+ .addConverterFactory(GsonConverterFactory.create())
+ .build()
+ .create(ProductosApi::class.java)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt
new file mode 100644
index 0000000..1a5aef8
--- /dev/null
+++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt
@@ -0,0 +1,83 @@
+package com.focasoftware.deboinventariov20.Model
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_B
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H
+import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_SERV_INV
+import com.google.gson.annotations.SerializedName
+import java.io.Serializable
+
+data class Productos(
+ @SerializedName("SEC")var sector: String?,
+ @SerializedName("COD") var codigo: String?,
+ @SerializedName("DESC") var descripcion: String?,
+ @SerializedName("CB") var codBar: String?,
+ @SerializedName("CBC") var codOrigen: String?,
+ @SerializedName("PRE_VTA") var precio: String?,
+ @SerializedName("PRE_COS") var costo: String?,
+ @SerializedName("BAL") var balanza: Int?,
+ @SerializedName("DEPSN") var depSn: Int?,
+ @SerializedName("FOTO") var imagen: String?)
+
+@Entity(tableName = TABLA_ART)
+data class Articles(
+ @ColumnInfo(name = "SEC") var sector: String?,
+ @ColumnInfo(name = "COD") var codigo: String?,
+ @ColumnInfo(name = "DES") var descripcion: String?,
+ @ColumnInfo(name = "CB") var codBar: String?,
+ @ColumnInfo(name = "CBC") var codOrigen: String?,
+ @ColumnInfo(name = "PRE_VTA") var precio: String?,
+ @ColumnInfo(name = "PRE_COS") var costo: String?,
+ @ColumnInfo(name = "BAL") var balanza: Int?,
+ @ColumnInfo(name = "DEPSN") var depSn: Int?,
+ @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable {
+ @PrimaryKey(autoGenerate = true)
+ @ColumnInfo(name = "id") var id: Long = 0
+}
+
+
+@Entity(tableName = TABLA_INV_H)
+data class InvHead(@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "INV_NUM") var invNum: Int,
+ @ColumnInfo(name = "INV_DESC") var descripcion: String?,
+ @ColumnInfo(name = "ESTADO") var estado: Int?,
+ @ColumnInfo(name = "INV_FEI") var fechaInicio: String?,
+ @ColumnInfo(name = "INV_FEF") var fechaFinal: String?,
+// productos contados en el inventario
+ @ColumnInfo(name = "INV_PRODCONT") var prodContados: Long?,
+ @ColumnInfo(name = "INV_LUG") var lugar: Int?,
+// Solo se ajustan los productos incluidos en el conteo=0
+// Ajusta productos no incluidos en el conteo con stock en cero=1
+ @ColumnInfo(name = "PRO_NO_CONTA") var stDesc: Int?,
+// Mostror stock en el sistema al momento de la descarga del maestro.
+ @ColumnInfo(name = "MOSTRAR_STOCK") var proNoCont: Int?)
+
+
+@Entity(tableName = TABLA_INV_B)
+data class InvBody(
+ @ColumnInfo(name = "INV_NUM") var invNum: Int,
+ @ColumnInfo(name = "SEC") var sector: String?,
+ @ColumnInfo(name = "COD") var codigo: String?,
+ @ColumnInfo(name = "DES") var descripcion: String?,
+ @ColumnInfo(name = "CANT") var cantTomada: String?,
+ @ColumnInfo(name = "CB") var codBar: String?,
+ @ColumnInfo(name = "CBC") var codOrigen: String?,
+ @ColumnInfo(name = "PRE_VTA") var precio: String?,
+ @ColumnInfo(name = "PRE_COS") var costo: String?,
+ @ColumnInfo(name = "BAL") var balanza: Int?,
+ @ColumnInfo(name = "DSN") var depSn: Int?,
+ @ColumnInfo(name = "INV_FEI") var fechaInicio: String?,
+ @ColumnInfo(name = "INV_FEF") var fechaFinal: String?):Serializable{
+ @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id: Long = 0
+}
+
+@Entity(tableName = TABLA_SERV_INV)
+data class ServeInv(
+
+ @ColumnInfo(name = "SER_DESC") var descripcion: String?, @ColumnInfo(name = "SER_DIR") var direccion: String?, @ColumnInfo(name = "SER_PRE") var predeterminado: String?) : Serializable {
+ @PrimaryKey(autoGenerate = true)
+ @ColumnInfo(name = "SER_NUM")
+ var ID: Int = 0
+}
diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/actualizacionMaestros/ActuaMaestrosFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/actualizacionMaestros/ActuaMaestrosFragment.kt
new file mode 100644
index 0000000..c82a3bf
--- /dev/null
+++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/actualizacionMaestros/ActuaMaestrosFragment.kt
@@ -0,0 +1,205 @@
+package com.focasoftware.deboinventariov20.ui.actualizacionMaestros
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import androidx.fragment.app.Fragment
+import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
+import com.focasoftware.deboinventariov20.Model.Articles
+import com.focasoftware.deboinventariov20.Model.Productos
+import com.focasoftware.deboinventariov20.Model.ProductosService
+import com.focasoftware.deboinventariov20.R
+import kotlinx.android.synthetic.main.fragment_actua_maestros.*
+import kotlinx.coroutines.*
+
+class ActuaMaestrosFragment : Fragment() {
+
+ var job: Job? = null
+
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+
+ //mostrarArticulos()
+ }
+
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+ val v = inflater.inflate(R.layout.fragment_actua_maestros, container, false)
+ val bConfirmarAct = v.findViewById