From 7361211306d20e10ff57ff0425751b4b4280de10 Mon Sep 17 00:00:00 2001 From: user_3d Date: Sat, 8 Nov 2025 08:45:17 +0500 Subject: [PATCH] aaaa --- .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/salim_project.iml | 12 + .idea/vcs.xml | 6 + .idea/workspace.xml | 68 +++++ Material_type_import.xlsx | Bin 0 -> 9252 bytes Partner_products_import.xlsx | Bin 0 -> 9986 bytes Partners_import.xlsx | Bin 0 -> 10713 bytes Product_type_import.xlsx | Bin 0 -> 10232 bytes Products_import.xlsx | Bin 0 -> 9526 bytes main.py | 1 + main_flask.py | 261 ++++++++++++++++++ 13 files changed, 369 insertions(+) create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/salim_project.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 Material_type_import.xlsx create mode 100644 Partner_products_import.xlsx create mode 100644 Partners_import.xlsx create mode 100644 Product_type_import.xlsx create mode 100644 Products_import.xlsx create mode 100644 main_flask.py diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a377feb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d3ae896 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/salim_project.iml b/.idea/salim_project.iml new file mode 100644 index 0000000..b5ad51a --- /dev/null +++ b/.idea/salim_project.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..d3f6ff6 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1762572998835 + + + + \ No newline at end of file diff --git a/Material_type_import.xlsx b/Material_type_import.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..14bfbf60f38533f564e1e8814734687d920b8e37 GIT binary patch literal 9252 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 literal 0 HcmV?d00001 diff --git a/Partners_import.xlsx b/Partners_import.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..06dfb34a980e4df16f9a7b6440c9b1901054a24c GIT binary patch literal 10713 zcmeHt^;=xo(skqR?j9_-OCY$r1PLTKG_DD*X{>Q=f(Ca9F2Q|*ySuw+~WSj#;P zs6~1O0)6xCE6UnSSo{Np7ZP^r(4A#?OG-=ZA_1fHdQ91wtcyh z+nX+_BEZKK;FI6iU(esBa%e*8WtTUKumLM|^MreawcB{!CXU(PMn&r#e7MrLE97}F zvZ)_f%j*TlsQ~RM5lyv9lioo>3DN)+7WVH*+ZSr#R3L+!#&fwM(#Z+8h zkfqSSOd~yhDp`p+%=(5H2`85ng#QZSuh*lbyJUP*1~n7riyQvzJDr%f zizXT(pm;C_!RvE2wwNvR>a(G`yd~DsuoSSWFiv+8q;`L2YSVTu`MDM6(ThbnwNIUz z8~cWHSf-aQ^U_zZn)`Gx&Ap2csk6B6q(2~>qG0Knq5cyj;&_m-Vi*7*EIkHXL_Pv-$ zjOemaK{H*oW$;DRc-M(*DPGQyY(G$N?AWTfRp{>Ob0^$--86U+2vDt~c}4IAN%5DpHRQI9($2ka(+XO4i-@Tzf(qIH^0KQ1da{NIEz%y?)9;E@l{7P%NcxTZfjyvS zPbDBXExU+%v&78V5iqiqauMkRRs_Ebdfz}2_!vzZH{K+^Yn|TiHy{4*o`r z7FZMi1{!gRWORXrPeD{Lm4L2ANB<3t(s{Zjr$%mBLJppzHeyP|1r+LRz_;WT0~|Lg zq~b)A`9wQ%+e5FO8t{1hvTBNZoj z^y#79YlC)1T>Kl9YH@`zzqfT3k{f!xgE1mV<`nwTqTvd9agYe~=nwA&zB=jxi{ELt zmieTMo%gP9PaYSyYWs@(;MaeIUrg$yAQzRmAKzc)l89T}yTwR+Q3#Gh^4AO3eexya z9_b2PsUBVTjPeFalLMs!d&^xfq`p09a6J3r;?cOh6!+1?6~aLCn60N_ zCQ&;eVV=>M-TIHX_7{myI)BD<<1_gY0}!E}as4m;`zyNt&4p0Usp+$q|L&_qT}h#f z9kT`HM=<+`&u(~Fvo37Z2U`0Wi2c=!^Dn5ld@hzrm>LaqrWDv<>_P6w-+SGzdC=Ej za4y@K3&OBrJ#cJ}h2ZSJpMQrzG(IdP50HVw!9LjAFFr&;PjSX+5Q*)3nU2f9b;CeM z6r7z$EqT!}2I2+|vAc2tokz$9p1EMKdc*H7NaLV1pt`P(GKJB6^Ql2%{t7-Lz@1|B zoCrxy7|k6px-&t=eA6y%92| z(xi2~>LPwWz}Px}_Hyvz*nFeEcXIi8rT>!(NYVlrMxIL;WOM+4@cD^9sKD9M%*@4^ z?e~G>Cnu!F%}0J_#{?ZSUy?;13kZQC#I+e`Ew9V=PUkpY=(H!#4asROw{%j?CVb%? zm2V@Qf4cTeHoE#4U-NZ)4sp_y;R1T&1XL)_{TbE!sn$tjgHYjfz*NyHk)UHB`8I{< zZ|L&&O5F{vej~}KT2r+e%X}qkvBWAh&Hf4MR&p%OdlB|}->pW&O%G+nUVF(&1;Te| zE_bS$F%rIGs*P)|gpoW?(c^C|l(Zh=?mudmE2?XnGLx_M(+Ss`(ZG<3G#yV;%H}qh zj=tvTiWiVUdjtEyt9Ez0JT>RN9+8$FM&A#It^Es%2ZW3&lwHB6CU&YTp5^c|zw&|| zZy98I0__Xr@MR<#0-fuI3m5t@)W;XMPX2)|n`LJVj*jVU3ocloqkJu8>So#W*!&fY zlwo8jyrU{7ZZ@uJ#Qb5{+jHGzQBhdYWImJLvCB7x&gKFigZg&ooJ%Ka=Wn1jpfHtM zvuM=KyVJLu%b*rqZ_3+g4pAS%JLgYlZ72CIEDmv-bDHLS)PgNoc@yCD4~%51_v5V` z^_)60rP}Ahguof!2()*tbUBkKROu|C!HysGkroV*95q3q1fO;zNc$NA`3GbV zavA09nBvrsPHhO?;rTc!yMosNODI>(8Lx zI>sbv)pQ@31w9;b+xAXwD1m4QoM!Vt2x>Y!GDu$(X~n2hp#9Q$Gie}mcab6;Op(>} zz%ajomtLtlyLu=OnUdDD6`iKerE3%0$)WmQnf_JQzu2Z zQh7v#oTly$swRFTVS52Vy;ZWQ)kwlS!1r$nPbB8IRSHX zawD+l8Oqa6L3A~p*k%L>(1N=45%n+NV$KApGq-s${ioiPgk6^A&6W`bDf1p73Oh+L zD{0VV$sB_Dgm=l(8Jau->~QU9j*w6oVXz4CNkZECG=1=}rSr@&?xN9{OOZ}I5GX*EBp}^rMip!>?TDt+1Vo?!bp1DiiQ3bbzFwa z;fu<>Ki}Xk)Zo1`la==xHp+l9U^?zyP{)3#SaW)0+zS)%ggjzIuU*elgn(z*v}l9q z?7yV>W@fa#9-6$%B^SCSLa?FX(4lf%&*h&mr+x+ zu3hDBCo-a@zXJ!fl^LmCGLed@~2&m*TNEeyXc&wa>|o?k)xh%d|_hLsuuT_MIC zSRFF=I1&Dond%Rh@p_Y*aR{?{6d89MQ8@-~7Y18qig*G;j0Xlq#Ggfwq|lZML^%jb zZG)FoePOJ*#Ft7Q$p7;@%RoxQm#f~hs+Q1fw9xATa#eb@;8zQ(!)>wjs!qGflW5U) zECtdECqp4$oFtTW$FzU=hu?l;otN;K-IDPArk!6+G0o%2X(sNwbL39S>RWC$v(Fyc zIp5-H)ueDcHK1}BY}B0ORM6cU9W~9G>v)dxPrD%YzQ3Rs0swGJ`BTjKeHV1GG_y5h z`~Cj=26&+R-HwzG`x`=^5ci!(dh5|GmN5F(bQsGlh{tV(hNlyf*KLO`8@b_cMCqX1 zK#RCyaA4+d%I1j}fT+WU{gQX)jcR(kUqr+?CS#Rno*Y_lBALJmD=m~d-+i%hWzn69 z>*<*chVdSmF)N~ip3kj%|Fr|Bu}Q3={*ScP%#o8jc2O}Nu!Bi z2k@(Cl`eeXZA|>vQe!pnd%{o!8xYP%UL#>?Y`fcP{;eIvi=Jv7#spwDVNBOGHg4ct zTx;6H`NlGR@6z}FAaI4RSz)V+QLH2~5BnD{6{}u_EPEdxFDI|F@&56+^$gKZ`xz@w zNqTNxs@mAbRE_bT!6CI?$sWH&f^PgTUWEk(A+WUO_&%&93`$ieAgMKoO+}OJWGJ%Y z5K?Gfqx9Unbfr^-t&tN_Fj?>7rsYKJ^>NlbNM;td5|uJ>Ai zvmGRN#n!xa5|`GiJPeZ*C94R5tRF`^tX0D>rcaFWXLo1sco@2;r%o=_n+PUY9*J?) zVo6J~6pTve49eW#Anc8YL42L>Rm)8WoN-M%ndT>OaT5E!ZW)4)xI_R@bh0tDq4We? z!eTVC7pz}QGjQyK6=`IE!cwXJy+t`&3#Li3iPsDrPUYGkk?&mMDJ>A@G#);-? zWb~lmJgqeizkAphEmy~29x^z6817|DCl`GhBzStf3YGBuob8PxLd$`_gyyxeXwLC+ z#7J~$+x`Uy7_*XA6}FMA=$^C6j}Jej(SgjS>4X(w$`Pu3=vcq@NXm;f)MRU4%?9cN zQ8rmm8hU-%7N@XqD!s<_hL_!%9gWLQN>eyCbKB!B>P}L&1D|T;P#tyaQG-s^j0dlXHh$XsY}hf{guXgMn>!eM09HWrP?;FisC^pm0X-lquFt^nOAxpcRkUt~?GYX2E zfLnwpgkJ7cKsL`8cC4`~26)}*rg%)ZiyBob+S1FMrx=}r5t+@dPvUJWEIv4feZ*%7 z#ahm}g_m5EH<;N>)%1vqL|0rvgT|xY2p?zUgWF+`ZEBU_OWp9 zU1@24$~&g(Tj5KDG8X-64+_!4*+AlwRDEB+gD+WfvP}(qH)-sgztH7lbDL%9dcE#E&P!n)kb;(++)N=IP8;8T;y$; zc5imcw~D0r!&f-1U+dO0%INj1EBc6=Rug0qRfi2UwhQ1v_6kqT6<;IBVeB6u}-?LdbnOo=vlGT?c+%+dL$}xha=+SjcVYxjAyK-R^ znx#8+pV{_(FW_5}D#0sEU4u_aRuscIF4&wdq9W}AkCbexWCo%pouWF)6qK_|<~yi! z#R_|`E`xN<-}aGXtL-@`2{Mv&Ng5xiVb^)pJZSNbNIHkqmcE4&|7ag!4PDx7-y=41 zNV(n*8*a8PqY3R7s3~zmi55z$0S4+!K?F}P8JpaZhpvuc z+%Hyy9hGxOvVyp5BQtjtR2Veo{N8N%{|1z-Kif*JehAL3Aah|hs#669J&LQM$$yfb zDZ`&L(qXyobSj)K6b^`xl6DkORJlQL$Ppu$6=)@YC$t}xl+T+a{gRc_JLug6X#eXE zr*6T0m8hGREW!TkSI{}<71~7H#ov`nM@niDK4nf@;ifF=<&PA*?zf1Qlklbl%6$7! z&@R?AhX#C<&eA?|LlG;@`OTgi4bkSS;(l- zim;y5D~D&oM*A08JG;2sm^uHfQ>wKT?B>}qpS3G8#3MX!8Cr=5(J3h4#Zk=E-40nhXDLuCnWoKEORWMdk|*Sv&)SbJ>-Qi` zE9%m+B6bkr^J1)T@*+|9)&Uz&K84r}$f5*>p#*BMH^uC=C>~-lEG)}^xr1q>BYi32 z7RR9R*2?s?VBcHo7|D^N9->v7LP(1?X8TPZ7eeWB*bXr;^AmD&Oic~m$UQQ=hfcP2 zgDYx=kABi1VSeGXPf70+)yP?aKjOMqbkR_>q^br82_naQ(8Ry8Q&*>; z#Os5JPP%Z_POHb1Ced^#S>@r9N4r+dj#+2EIq-v6tNmJ?2!;+KDL|7O8#Mp+Ncave zC{Ast+(zLWGx>WyxLE5LWapS(!j$=<3Vm_P$EwbKUVPt>DI<*cFqse66$Ok}H=^fP z{>$SzS4$z9c*`@!wPtgN$^y)}nQ4rnnR-p7Y1SaK+CDD+Tmv#*DGJIU?!NiJlEZbG zT11oP$ErsU-w#jj_m4m9?$PdwqTpDj!6Yv-`bghze-}d;P7J6FEYz}kB9@IE4=8D9 zSfc2;sqj&9uEif2cr4{R(1zes_XJ<&vJm;&EN4bElw^&r5R~$SpZ1>L7VoYJqos!O zW$?iC!>R zIOR_&XJz3@1{|^lIDC+=4{jaUcm~Hml>0Ezy$j~g*nxglesTZ6j-`>4nW=`0la-yt z?+^lO&D)K?#`Kn1qtNz24`plMXOLs2I)yud$}^ZN2qm-W4XDe3yUa?^W5UFX&N~!h z_zpLgC+BPQD3huiT-zmGc!uq1VLqJdZ2nfyUBA52ugP$-axg4W8?Wb($D##jAD@uK zmM+SHw{@G?VmC?pIVs`8f`&Fz6h(sYuti@@OI6kGeMCM4Tvyw_pP1xEywKBc-CL?J zLcSOQo_1)cIkI&+nzkk~&^m`SYSrM?ZgJbTmJrtGTD@83zWsU|9-z+XJ}KW{9^%Y_ z&!@N$VmO0b*R2WeNZd)_^vR9SigwqLxxoC$A{~+(Dw3Y}k(@>4fwqT%ANvi12#S7X zhiDhApwtAaR6fAzwVA~#tGdUaJ->_yFzA@k*ZoH2EjPYI+nkiT{@c~v*sLt7Rn+-G zX43G;oi1VlIIsdGdG;r8p73dckHz0;QqiH}igfW@Hu%8_+}-B>RW5X;uK z5LQek;htl~u@a=Uu225kmfmDrRa%=~>GYVLGsjDP?&Lg@m!C~;JJyUu@{0v{y1U-2 z1d-A1ealhX_>yG28kw8}xp}dho^a(-x2xBac+_1Tzcv#XW0+`^3Ps#w^rUO+_bi>N%j%gjz*923yM{0vgHtltamb<3l* z@DQPtnqh3-JT39S@LZBjYT);5Z0TrwU6BvPwF&5?)9&3*LV>d{`z9d%YT%k2vk2q# zz6W$2Ns7=rOyW_OdI?XRi{lc6rjZe2$<7ws!EU>Aucb^|sL5TGfHNru`;-^{JYcCK z)EYviA({T8Ly?a&3nK)8l;apFm8}+KyUL7?*RLa`Si7fPUKtrkqPLH|_uvr0by{9q zC-9!ypoUkzg~m`fAa)^M4vL|K>l5#LqU+1~+C;*61A6o0A8`rNd|DxRR%17wu}SkU zT>jK-|B&JSCF1@m#{DkgHpdM=*Z8Qx$AK+@r{0cpk4Eu=hgl>S6@xqEuNC6Ex?;eG zDOZQv5q!~wc@ zQNEcx{C-Bp()GY_(E}I5h+BPN;)0SZzPOH<^*%VBndKhK_}iVbKmo#z>i5Ajx!Vj> z-87Ew+R-ul&z_8KGD&ey=Fame#C&g$WpX}JiC;oCO0%dW+CLE1khahCp=7ot;^eu8 zd|LLMUas#SWeW~TZ;{x z)|ODEy?O|Jit|pE=9P5G2W?#nlli2z3f_O7B>2a94d*&HmUy05{bxlS>sb*uwKq|9 zvUhN1GqHCv`=dwWe?s{4)PZCF(xc#QOz&+>SJ;)!%tVC+`+O2P&P(m~az6U%*fEwD zHUUmyxW##EsBd?VvUmjr%wnC8#ZS!u=(biXG5{Hdxza}{IKr&KIidkmWH&lZe#Y9P}*ALY{2!}ipY!; zJFgNBPaG>~m}0%|`?_--P^aihn^ZL&S-Amf3m7M=nW+;dlW^sM_tkD4qlHCmfqXbm zp*^l~XZBxKd-=mDhhB zEXX!XYzVm`GY2vCBI02N8`$RJmocv^>Y?=39#8?VYu{dDT}gdJy^|J_la%wvse|11 zwu(l{q?TKM=E00REqlMNHpJ;Lm(;_8;?`6zB50y3zA10k5*T1hS?TQlk z%yd<~T|306!+ngoK#Mr$K(^4U1W%nfY2i)6sKf512^#vXV|s>@4oyAwKz0R}Y0G*} zdwEKtVV&2mT_qCi%Wf&eDa%h6^0%EkJ8|XgO?uW90T@zZF3uxSqbt%|0T>z_(*qsx zV6$8s==NpgHF!;-Y6vHX+~`UURD_6m|3h9S+1CR@I!j07sRGM*i4NfWT~4^IEaB#0 zYtr^%#^Lx?`O3ryL6gIb5coTvz!5RSjJ*w-2PXCv76Cjj)gtdKiFhB_)E0&l(}szuPJR!zim=S8-#TX`vlU1m4uWxOu5 z2=2Kl(?)eWq)qE#nXJWtCZEa88<+Tujf?iclofjgmglaTKO!0mn&ml9{O6vxf3M)b z$A9R6Q&sr8gTHs@{M+#7nDqS0zx3+-YWQo%!k?zi&uu`z^e_Bs{P$zgKTQFEc;w%W z|38PMzxw(0tn5!uy{P~1NBqah*{@!H)tdkG@*V3RmFHg_{96D1>A-{NcL#q~!@rvT zn*RT3T1)yb(_f2$Up@SqsQl?cnex{;_{X&6SBHOR=s(>70C`jZz<==dujYT>X8&qV eN&6S`KQ>)e1-R#M`PmtU0vLTx3C>>p{Pcg_cHKSdHq?oeC0E%+qO!JzuwCz1C8q(MNe7 zRpD?VbSIrH;a^a$5mgr(!IMLP1_r}VHXz71%^R{>P(4u5;_=iYb8UBiSKJjV3l(`m z+x}#$6#8mzUudvP3tEoRnZS_WEkKopNOt*ETbl|emj+E$x+AGNYvN@TBTkKSbNw~B z%-+xhPL6Jk8KJ-n^5^E|P{r1qy?epdbiK~$73VabCjlQU7Ia7Vo**~9ZwIq2MQ~~ScbGg2a1V6I z(H)8`j@T3T_CQ3(V4(RDV7cWG^Nhr?0(uAO(nl9>TMS2N;0z-)P#P&Q5&>i9LD9QxphI z^&CJ}j%=(y&;O(6e=#Tj()99p1*L9w)L^jmZOFjo^inKPOwLtQx|LGR+gD~0qaiAv zhIpxio&=~y6aXXT)9!scw6G)?wKqU{vBq5uyeJX!2k%~LuXlVMi(sRIy^8AWO{iWGc^J>E^2LUQ~ zJ!7j+r{d`y*ms^RiWvi{RNPoUI7g-WX>-nfwClM~hBMuJ_>j8G295{)Bgl)FAsOqR zBq1+NK+k~z074+C4FlpCH!C(*TL()+TU*PYd8}N0+$LWV$E#|}=Xslv3A_Gtdky#i zB1SCud(kiwqxER5YubDdY4`i1ZL+-?ry%! zdY0j-nH+TST%y~JXXXU3OH`qnRkLSP?vq6u{N6H(MqLv5&3MhdH1S>c?&V5mc~euz z=It98-%`T;=0s=xG=;Rucy5?ClgKVfuM@?))D}|}SQrM=GE}wjih^P-lLFPR@hE}) z`p28`g-%10jRo%({Smc+NN4F8(+V*fMg5=Ni7$R=i2Gg(AF89lel_Q}r=1FK>WYiM z(db(}J2yT9&5D0d;8%0a*E!Q!CYyx3d|XHZsBfnA0*Xk|_1UUc3y*Z#OE)s^z`W#H ztiw8brq%4hd`;wJjn4QI}C0g}iVp>|)ho-PpE!Psx+&F_n zrmjZVpHXj|4<)anI|;Yi@@sc)VfuTIr+UaN`EnC@4)9_}-*UNL&we1;MCwYxi4PB# zCOVPzM|ZXND%%n`VA#&FI}E>{;}p%Ud9DX!(u{}SXl$n8oYhu|JZDJpv7xwie?1mH z5@P1N=m#35m&mpDUb(Hgvi^AGcshGJI@%%l0DCce#WWb-eg6X^kG5ne5UFHtVrkhY z6HlMT|4mA=s+pY+uTaRECl!YB6QFqG{svbu92sk=8m!w1PS9NcI0FY3LZnbFog~52 zBuwpu5`3+=AkQ;6e@vTLhlwH2_t0=cGu8}OoilJ+m(K{`Scc!23Fa=1DzCpPTDi%C z*4SR+$uHZIV6!N#u+@BbGOg))i^=`jNThebZ?|-z%^-DzQrdQ-E3QTN#;>-Ogdl)i zb%~O>*Q#8^{eDU@UdC86%$l$7CU(n{OFS@(SXNtJuc><|S#%@Mm< zIDUXR3x|K}2Lml(NPZEO_*wHrFt^1Qc4tlt$1&0&NCFtH-|)Q-e0fmeU;p6)MH-{Y z=0o#~g$wv>e|PfnQ$i#eK{R*3_|6n1(~nMx3&ihjwflW3B`=?hRJ^jy+39mPu6o8EX9tZ#c z0pyK8$A3pN5Xi}q?bn6lXClZ*ScqPr00x7Z&Pjonyqzv<0c+(h2~jPs>M^sh>jZF- zC>zzK*GHra=>@89F)KD;;J0o}1w~Fn5;S%w$`guMIMC<`!jjTu8yB#A9vaa(BQs2` zdlSti!t{c=F(P8fx1@|*D>1vMDe5bGqAqnsL)W9mMuLj4S<0vSEVjN)+JxrVp< zaKq>l2*>3c-Dq$w$bw5O2YZK(+wm&MDK!|jD1BxJzGRxGtprSt99`&siaG++#K~UI zLWRd|^$s`kBw6E3dF3Ik?-+jzUyUB+?7oePPg*20wIGL1jeNS2l%0^l?oGKgWGml6j#xoT*VVrR*Y>{ApuNu&68TJ)03s9T)fP5o*(s~4TYSe`nvKR2 ziu6DvocU*k#cy79*;g}2huCNH@gWl&i)&vs(4PUg0_prF%eRFJ|*ul?NZ^Ev9KI<_v8<;S%BES8u42#C&xNC0j z)++NuC9y^POPTuG(5%=@jps*{q|TLd#kh60c~^99Gz0|scxpbDeo5FsK^mDR9u2vHMXme&vyu1fUjs8QMmwR->u*B8ljaJ@o7vVkpqb4)+ zNwJIv*6OR-NgOHIH8WRJl*127ozR74zjCg#{c6px6L*v-a@TWIi7L(wfCeUJ;beP6 zkzc4_d{|yMVGquO2cv%J1JG zjQS_vu=f1~JRwi6D1K@Ozxd{42C@dR{W|}m+JV+*8xlUOj|c1^K_>c_1d6IM{oEUP}nIp(;%+u9)SFe**p;a5jEMcn0e=3DQ9*1Mn#VtkxzGHT zGj=RQslq9lNZYi@R(&ke0%=I{cv7TYq)@C<51z$UTw+~?p-QAaL71FXFt!`7fuJOo z%~d`B)(+xXU%e*dJBwa|xSmTaoPha+j?CNBjTQR-<A| z^M1KpTW@bq2hZ=5gOdsC*&;#v*{cu9+Af~T8d!#uEr}i>p^cs?Z%3kofB2mVg$D*A zuyhpo+^)SFmZ*P+q|z)p6HC04EzgQgK(2O{;n~uW#*NsOGxKJ57Vu=&{_btZOjX61 zIe;iif3t+8@ypvnVq;C1#5V#?mwW9NU%QB}%Pe_6yg0Y~#=|g8Uj7XsfYoih%ThTU zWA@nK{ny>E*E|fpvopu%s;&4_EO$gWD)A)cxpD>-^SYHTaH;Gqhk<bBlQ9&rf+plGGzXu|06xdcV2rO#ONjI*(AL*%KYdkAGye7~s{ax%>;KND3X-u}T$8C4rsIbSyj~gqS zilO)g$-${akE_cn@4Nl?%WMxnt~V1z3SVaTp)fX*`nfWDPUg+E=lHawW_s?aM@Os@&of6wIK1dAZ?fvt~o>w3F5v zfyMOc?h17$xk=51+A7sOB2PSzQL*}Lip#~f#>n{+vF5f#PBH_DH*Q&I%^7IlVk~`8 zAwCq;D1&OR)r1BT96JuLMV}usYwog)kSP9C#Flu*HQ^9i^D73{5&> zPy|HhdO5AhbPndXdQwRfXQF-u6%grX5)2OM)^Ksk03Z)yCdH;u2TZ zZ`#2VFF)R`0rYLObD-FJR|u4s|k=IJ*? z2fp4RQ}*1#8w*r!p~uGoBQC*V9S3odeaf+UwM({DD#0JI%4zvrtBFxcyKi0ITgRptrJ$__nBi3TFyc*laXmoPgI+TLMq?M zk2kzsUeYO)xiC(Y;VedPp zPxb0*tJsSH7?(-p@a7?eX^zU3G3pr;Ca0V&Px!Zqb``!9n7}_DY#;FzoKOJm_idI; z7nZmLOY2Ay?3xf86d1sg_i4GLv0R--I&)!^fU+EVzgrJ{F6LX7D90_ySc6YXkr%}V z7jMp%Qj+vUj+JjJu~+n7CtTW5sJIF*n;NOX!L=+dk2;LyGl5*q8!B7b9_Zfp)lHrRJ_HwTKQO zO_|!KfgWr`zRYpUO9pp#%jAs}r|r5i!hgP5p>Pr*}tiQ|>-YK4vrq*6|J zxmHpfgMvYpSh}hCU=3mRqgtMT7qhxeBI?8k;ALmM4t1tc!h%$ADqdN!?xaEy*d~Fm ze27nFxHPfloUd`9xw3gfKw52^^(0OA5|!BBKwCH!lveAO8H{Ucn%`)?tqCN^Dz-je zu!ymHyJqd`9s4Y^!6HC&CRO0%oUzp%`O5_u#{Fzn&|a}{EH{wLIyz@ZPKn{=yzi?G zzYz=Zrte!B^|v8~)uc{L1|O6y0`J6>(PV=p=PL2$4K!IUyB$hqO9cI+BqZ&h$}9aq zuqzP7|N69pOz+u#O!9l)WJzXLPOm_{so?#(dxu_ueWjQm?YRPjmqO45r_~yS+-08? zE5^zj5rT4N&2iF}wBL`FIq$cNRuS{21xS5#E$$R;okz2{lg!mPazPQTC>XKjMmf(> zHAgsi$tSNT2Z2z_1q)+F@K@hh&%XQj;<#STWDXiq97{tIHrgM_+R@3~3gq~QG$LoS zzz$r(-yuaj!j%o*oDVL@i>9V{j*JtE;v^@RsE|nRm-n(+Vpewpz5PY9?iu=Elt7}f zj%c`dybZI1wD8B&Oa5p*Uez2+6N^f9{{U=q>LLeSy9UMM1<;lPdnt=L9Ikc^ELby2 zuV^&8w_yp%rNLl?%2(OhpKnHkOKi`xo2Ej^sTZd_abDWOz+$GL5;b4q5M4%8Y=sOMc4-hN{H9qoVEgaJcrzHU9wuxfcodh`iKhF|$`W5`Um2opZL$Ea7%6>+GUfx6Qg6ve=&iPm{2feJ;j*C!HC1xg#mPI2aQrsR0HEvi44 z@w*X7aakdEsX|+VGvMZbK94f#R;U1FBQj$~E^E{&iz1GuXS+DNhwS}oUfWKb2tT8; zA+M`&!jA+#R`E+`PnOFiE(#sv0^f~_l`tDcR|;?kmb$mIk+Qbpry%}Q@dBz^qPD#k1B zBQ3#`Lq1Jt^{kpQAG%mEB9Mfm_3Hd>L2h&B!FrYpVl+SaKRUfZ?K?srII9gtfYqz# z5$w$VvdvZ$amsu~ckj6trKq)`kbl(`A!&NrOO<||>vQ2gc9Au9HqVOIh$301{oIn< ztJW+0RllY`LPE6n4YJ=w>SPZ=WM7xSff zrLti~XH7`2%uJe%{ma@lJc5E%fJj9hGX4keDEd1-ozed)tRKtm7ge7WsUU(vBjk_s zCt1u496-h|ogB<<_L!Sh6`&7LPv^Jw`f%N;0;F9;7qj%lkls z$40fR4)pYAKnt8Gs$##9RP7E(L-{i^%W)-BW6~8WWr$Q~d%GhO2 zrW(slqzn5Rw=S53NOx}z_rZz;E9U=G#?forCk zN9>Z(#`u1qwtLm1wEEi6XwS{1&Ar_T*%Co#8~a3bg2vsreB#q<0b-gGky;D;ge9d> z?QeqM{h~>{u=grpY30~$0bxz(?d8~7ErCX3J;wU|VUv{Nv zm(hoL7c~a_jwya+3n@`T~n^`RW*W#d7Fq72*g9MYmXb5K=dpb*}++F0{hF z#CI!mR9|oy*ChG*GCYKjnzy&^n@CWE(SelWF%F>w+26)4F=<>zio;Wi^{2+@&PqD$ zw$9mzxJOoR1LABZuS4(D!rzJ%Ihi%5{E;Ja04JdZ|1U76wKynVe0tl5q*2}Z>P_w!M^>s3&KYHW zW+{%EFKqo8(CZ*=rZco__dTq3Xbo&IJ=4r^rB+!k;g7i4mr0X*Z{zkKj+MFfr9R^K zRLo((@Vm6DuxSt%d$dr)piK7KuEtBVJD<8u)N0d|nd2k;x}^j9q9tXg zp-hwaQTs;wvxjH1K_X?QuOg@6Eu}@KUp5cv5t(h;s$3+BAS{a*XYZ~fzM0TUJK!U` zi44H2Ad7A$%l*9J!)09wXS9{1x&Ex>;5Dmj@u?bp1YrUtY@ja?2rc#;5fO@#;`fc8 zJ)$7s-}=9*{e!1Cr2lmwk|riZ(loX;Qg*Plb7V8JbpZXj(*8ds6XLqacqOGkc3>}< z&KqIkS^X#0H2Aq55s!%;@yI@%$uCD(=H~NHT342#TSK)l$ew{e+b+weRbA8~ef%`n zq7D~M?GLTohTAZYw^OJcGRsgM&DfcyA?k;&KVI6_Hqczu#&c|}jn+4<52K`-6m6{b%jn-7w5{rW}{7=da6{{n|6ZH2$unjH$aL;+9Eje%gqYi3B~ag+f$lE1$1(7 zQ;0r|SZC-Hd4nK1FG36t+DdGAX4Wyuag@RGgF*4Ay@K9o)>$PPox}5Rt0{BC&oY&!!hl_@B?KP*TCXYE88^A6!R(Km|!C+WeL~dCBJ>TNVf2UiQt;m%Y|~klt@=N;uwb{ zzsZl>Hd@vDy;bXAX1U_mCFQQl)hskFbR8sNT4zvHMAC#>O={J+hADPgXUG=sB&S@a zN<7PPRf&=pU%eZ*J34QH54oioReEX#e2uheKSx})kzq$I@>WFXsDtIF%QY71u%RjNBLpPEu& zW;fw0NnU4sWM)mze3Oq=&ktv*#yv!7&`>M9Ye3)AACxzHWjvM+9$|$wC@+DtVTv(3~vyR;fP*9B#cg zeef{b+s|1{BD&f6VDB^Otog$+=(uH}J1?b5EinG0QOAv!=xd-veZ`a8YQ9bR b7xO;{b7eU=NDKl1sE{8WB#hf=e%}2bNIlL0 literal 0 HcmV?d00001 diff --git a/Products_import.xlsx b/Products_import.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0ce83b691518f5d9a1c39b60b39ed09817bed82c GIT binary patch literal 9526 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 o?9cGOhQ&X_M_|>?|G<9_lIluGu+s$qp1?i= 300000: + return 15, '15% (более 300000 ед.)' + elif total_quantity >= 50000: + return 10, '10% (50000-300000 ед.)' + elif total_quantity >= 10000: + return 5, '5% (10000-50000 ед.)' + else: + return 0, '0% (до 10000 ед.)' +@app.route('/') +def index(): + conn = get_db_connection() + + partners = conn.execute(''' + SELECT p.*, pt.type_name as partner_type_name, + COALESCE(SUM(s.quantity), 0) as total_quantity, + COALESCE(SUM(s.quantity * s.sale_price), 0) as total_sales + FROM Partner p + LEFT JOIN PartnerType pt ON p.partner_type_id = pt.id + LEFT JOIN Sale s ON p.id = s.partner_id + GROUP BY p.id + ORDER BY total_quantity DESC + ''').fetchall() + + partners_with_discount = [] + for partner in partners: + total_quantity = partner['total_quantity'] or 0 + discount_percent, discount_text = calculate_discount(total_quantity) + + partner_dict = dict(partner) + partner_dict['total_quantity'] = total_quantity + partner_dict['total_sales'] = partner['total_sales'] or 0 + partner_dict['discount_percent'] = discount_percent + partner_dict['discount_text'] = discount_text + + partners_with_discount.append(partner_dict) + + conn.close() + return render_template('index.html', partners=partners_with_discount) + + +@app.route('/add_sale/', methods=['GET', 'POST']) +def add_sale(partner_id): + if request.method == 'POST': + try: + product_id = request.form['product_id'] + quantity = request.form['quantity'] + sale_price = request.form['sale_price'] + sale_date = request.form['sale_date'] + + conn = get_db_connection() + conn.execute(''' + INSERT INTO Sale (product_id, partner_id, quantity, sale_price, sale_date) + VALUES (?, ?, ?, ?, ?) + ''', (product_id, partner_id, quantity, sale_price, sale_date)) + + conn.commit() + conn.close() + + flash('Продажа успешно добавлена!', 'success') + return redirect(url_for('sales_history', partner_id=partner_id)) + + except Exception as e: + flash(f'Ошибка при добавлении продажи: {str(e)}', 'error') + return redirect(url_for('add_sale', partner_id=partner_id)) + + # GET запрос - показываем форму + conn = get_db_connection() + + partner = conn.execute(''' + SELECT p.*, pt.type_name as partner_type_name + FROM Partner p + LEFT JOIN PartnerType pt ON p.partner_type_id = pt.id + WHERE p.id = ? + ''', (partner_id,)).fetchone() + + products = conn.execute(''' + SELECT p.*, pt.type_name as product_type_name + FROM Product p + LEFT JOIN ProductType pt ON p.product_type_id = pt.id + ORDER BY p.product_name + ''').fetchall() + + conn.close() + + if not partner: + flash('Партнер не найден', 'error') + return redirect(url_for('index')) + + today = datetime.now().strftime('%Y-%m-%d') + + return render_template('add_sale.html', partner=partner, products=products, today=today) + + +@app.route('/edit_partner/', methods=['GET', 'POST']) +def edit_partner(partner_id): + conn = get_db_connection() + + if request.method == 'POST': + try: + name = request.form['name'] + director = request.form.get('director', '') + email = request.form['email'] + phone = request.form.get('phone', '') + legal_address = request.form.get('legal_address', '') + inn = request.form.get('inn', '') + partner_type_id = request.form['partner_type_id'] + rating = request.form.get('rating', 0.0) + + # Проверяем уникальность ИНН (исключая текущего партнера) + if inn: + existing = conn.execute( + 'SELECT id FROM Partner WHERE inn = ? AND id != ?', + (inn, partner_id) + ).fetchone() + if existing: + flash('Партнер с таким ИНН уже существует', 'error') + conn.close() + return redirect(url_for('edit_partner', partner_id=partner_id)) + + # Обновляем данные партнера + conn.execute(''' + UPDATE Partner + SET name = ?, director = ?, email = ?, phone = ?, + legal_address = ?, inn = ?, partner_type_id = ?, rating = ? + WHERE id = ? + ''', (name, director, email, phone, legal_address, inn, partner_type_id, rating, partner_id)) + + conn.commit() + conn.close() + + flash('Данные партнера успешно обновлены!', 'success') + return redirect(url_for('index')) + + except Exception as e: + flash(f'Ошибка при обновлении данных: {str(e)}', 'error') + conn.close() + return redirect(url_for('edit_partner', partner_id=partner_id)) + + # GET запрос - показываем форму редактирования + partner = conn.execute(''' + SELECT p.*, pt.type_name as partner_type_name + FROM Partner p + LEFT JOIN PartnerType pt ON p.partner_type_id = pt.id + WHERE p.id = ? + ''', (partner_id,)).fetchone() + + partner_types = conn.execute('SELECT * FROM PartnerType ORDER BY type_name').fetchall() + conn.close() + + if not partner: + flash('Партнер не найден', 'error') + return redirect(url_for('index')) + + return render_template('edit_partner.html', partner=partner, partner_types=partner_types) +@app.route('/add_partner', methods=['GET', 'POST']) +def add_partner(): + if request.method == 'POST': + # Получаем данные из формы + name = request.form['name'] + director = request.form.get('director', '') + email = request.form['email'] + phone = request.form.get('phone', '') + legal_address = request.form.get('legal_address', '') + inn = request.form.get('inn', '') + partner_type_id = request.form['partner_type_id'] + rating = request.form.get('rating', 0.0) + + try: + conn = get_db_connection() + conn.execute(''' + INSERT INTO Partner (name, director, email, phone, legal_address, inn, partner_type_id, rating) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + ''', (name, director, email, phone, legal_address, inn, partner_type_id, rating)) + + conn.commit() + conn.close() + + flash('Партнер успешно добавлен!', 'success') + return redirect(url_for('index')) + + except Exception as e: + flash(f'Ошибка при добавлении партнера: {str(e)}', 'error') + return redirect(url_for('add_partner')) + + # GET запрос - показываем форму + conn = get_db_connection() + partner_types = conn.execute('SELECT * FROM PartnerType').fetchall() + conn.close() + + return render_template('add_partner.html', partner_types=partner_types) +@app.route('/sales_history/') +def sales_history(partner_id): + conn = get_db_connection() + + partner = conn.execute(''' + SELECT p.*, pt.type_name as partner_type_name + FROM Partner p + LEFT JOIN PartnerType pt ON p.partner_type_id = pt.id + WHERE p.id = ? + ''', (partner_id,)).fetchone() + + # Получаем историю продаж (исправлено: product_name вместо name) + sales = conn.execute(''' + SELECT + s.*, + pr.product_name as product_name, + pr.article as product_article, + pt.type_name as product_type_name + FROM Sale s + LEFT JOIN Product pr ON s.product_id = pr.id + LEFT JOIN ProductType pt ON pr.product_type_id = pt.id + WHERE s.partner_id = ? + ORDER BY s.sale_date DESC, s.created_at DESC + ''', (partner_id,)).fetchall() + + # Считаем общую статистику + total_stats = conn.execute(''' + SELECT + COUNT(*) as total_sales, + SUM(s.quantity) as total_quantity, + SUM(s.quantity * s.sale_price) as total_amount, + AVG(s.sale_price) as avg_price + FROM Sale s + WHERE s.partner_id = ? + ''', (partner_id,)).fetchone() + + conn.close() + + return render_template('sales_history.html', + partner=partner, + sales=sales, + total_stats=total_stats) + + +@app.route('/favicon.ico') +def favicon(): + return send_from_directory(os.path.join(app.root_path, 'static'), + 'favicon.ico', mimetype='image/vnd.microsoft.icon') + + +@app.route('/static/') +def static_files(filename): + return send_from_directory(app.root_path + '/static', filename) + + +if __name__ == '__main__': + app.run(debug=True)