From 62b332799d6a4f3d095ac70b19e881071417d090 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 2 Mar 2026 11:05:01 +0000 Subject: [PATCH] Autosave: 20260302-110501 --- .../items/item_69a5695c9ca064.49414552.jpg | Bin 0 -> 2623 bytes .../items/item_69a5697ac55c21.80460234.jpg | Bin 0 -> 4462 bytes .../items/item_69a569a491f0e1.37331888.jpg | Bin 0 -> 4888 bytes db/migrations/05_simplify_prices_index.sql | 5 + pos.php | 751 +++++++++++------- 5 files changed, 456 insertions(+), 300 deletions(-) create mode 100644 assets/images/items/item_69a5695c9ca064.49414552.jpg create mode 100644 assets/images/items/item_69a5697ac55c21.80460234.jpg create mode 100644 assets/images/items/item_69a569a491f0e1.37331888.jpg create mode 100644 db/migrations/05_simplify_prices_index.sql diff --git a/assets/images/items/item_69a5695c9ca064.49414552.jpg b/assets/images/items/item_69a5695c9ca064.49414552.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74347191e496c217a00e23b2aeec3d5f06d88495 GIT binary patch literal 2623 zcmbu6cU03^7RP@fpdvNF(8~x!zz`T}5GkWhaOnmlY>*;N3{{YjAqohJ4t*g3)&WFH zh7uwgibx>N&=m-VB8Di45Q>0k5C)_zI%jnD&prEn=e_rR=iYPQ=f1c5V)r#5ZD(U^ z1AssP0NNYCE)Tc?i0<1Dg+QQC87Nd5CM_)ufqq`4rDUNnh@3nO3WLe3Xn!ZK2v?Gm zJ8W#nN{sD%#X0V2u&2KM}aYkH7995kFCnq%IxZMK!>9bKjtwwc~r$W+2==+?4{ zyxBT46yeT_W==0>y#I1V*lmL9>5^of)_)#)UOf;uoYMpo+4vQK^sFQ_ZopMHQY=u2l*?Zi``7%o#kssztzJ zJ4ucYhg0poXZi&9e~8G!_3Lc>$m2D0HK!2DL~Hx!Nk#96V_nazT6j-2rOtIM-@K*c z=JSfY40jF)k+KQ}RQ}e%;rf*icUcSZg8?^(iao5aw~~3im+C#v4bXp~G~Kq_ayA@D zLxsQU9!u-E$`72!+CZGEtZ7BfsiJN5dM8W}z(Q1lW z!$p>sxJO}&mS`|D!qyf(5^EX*4_79Z-7`725Op!5Gq8F`uujY|y3S@FTM3A}dYrw6 zv&*} znr#u*} z8g+C%OWIr*s}T;*jMwnwzH)LuEh!oo*k5!Be}vE_pPVg5HBijPqhe|vE@?g>AZ2@$ z;aV=G1>BlnmLx4@N+_$^O|jV(OD^lOLf|s}u1eODwSRs`v8DNj9Tt#ad?S=r^!29k z<+p4FV29qPtjZmVa|CjsK42}aSkoV#J%hVW45^t&;W@@z2kNk<+_YyNDOIQhf7Ix1 zPvBRxr_>%ArkB!n^ezz2gmhi)^ty(|$F{m1S}Tr@Q?BjTYj?_tH+DBBPU5F?UgfMO z2F*QQg0ntOFfi+RCm(Pg#S&o;&J=Ixf9$n`u z*y9a2xv_8HY>K6uPC_%P_Sc|)(5=O=RqN!X)VOIk#~ZVD{=pNeg=&rVO^JT)%^tdZCATW_$?cOD z+;WFJF#|R@X}5`e4$&xc0)N)8BD`{tszwToGEvlRJ($H&ALovA*l(_+uAyNggO@8% z_HtSKH<>ZETXr)7&fpy1QBe8V7Ms>L!)7evvyxi!C2AH3&|~Fjym;KbvVs@Qea4LF z3yfXhHjF?=VWZyUU(dNgsww!GUpMec<>px$$GNM@GIltYsSiG`hnpsW=0qsa&Blqpu9r$UUsTb!2U0;D^nBS7QoNU5)8QD_KuJ4!sIWz#~=V^X~m3%Xv0Jrvf zM5O$(iWH4XZ|(f!2h97Q9E>gcOjWIN?X(*Uo?cP*()D(dT5jOUZl)$nYzGcdBU^>n z-O{$mUVLlu%+UE4u2^%@{fKN>>7}t1mk|HvOB#R0hvV;ZA}{emTo8@S@}U8xsMz z)9HjPaFU=Clq0S%N#ybk6?BvpkRd9|v#G+XRfhCBZD?L>N@8p%@A zvtx2`IB;@$^@E#7L!PH%M4nBhUp0E0Iu~OZOf~CWK-+(S>&N!HqJ8;|$@=rZTMehj z>o>NJ;}bhZYJH>>Pt(#+h+9=Qc=m#@3!IJ9a~@|qsj|DgRfA3m&uT>v z&JSUuXHwr8tk-Q5U!ACsGym5F&Fr}D d&Zsa+>A;~IaX3oLHE`&)uMhG68|z)}e*o6SVwL~^ literal 0 HcmV?d00001 diff --git a/assets/images/items/item_69a5697ac55c21.80460234.jpg b/assets/images/items/item_69a5697ac55c21.80460234.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e06f669aa4b9e50dca937d4642510694b5df976c GIT binary patch literal 4462 zcmY*Z2{@E(_aAFTDp|55g%QS(WvtVl7;6|KL}6^h5VDgJ%G%4=*O$RGG|4iPZOE1_ zYRsU?8X+cocJUv*-}U|9?>x_S?sMPgxz6=Fzw^7FgD(dYfK&RnVYdM+EC2ut^8p+T z10n&(IFFqE#{~Y^DW(?`IDHtO5fl_WBOo9oCUag$L|RNh;DXWxpe#s1LE(%zL_-Cv zE(2Bov2by5o!~hkdg_!YNK70EmIs5uieL~}k@+4vb>{w$fxsY;;$ft~OdJ~X;Lshs z2k;&ROan&QSR??fyew?IEC+3Xvxg8l4x#?n*jZTFI5>|SWoECR05$}RIkW(g5y zZC18_*9Wk$vvP2_#EW_dQ2qbzLyDb6H}m5rVE!f8GwmFuQYmn%3V?Qh)lPU4qP zKKKea&Md>q%f<`13fMgL4_x^_%hO_2@>wl1jJ_D#XVM(HaaLR=D8L30c05=WD=WPq ztA-(N0(WW`jK};mz+CH|cq)Y)axU$JdNQ;Y`y$fbPCpl!>}h+~XvM_A>v_#jN2vj7 z-DK6JT+Qo~dh0kd6{|Qoz$F!c2w4U9!@h77MsRoHa8aMGZ^sDLLcxYk8tu*|oS)AH z6xO!lHDR>BiTopAZc?(T+ss14;Jai3fQ81{0J4D;W)Fx{VBs)aNS@p7pz||c>G8OxbjIg8ejw?67q*tt zP+5Nc)xeIPr%%`LLfP!dP$u1V%=}v!aERvhXs1!%Hf*3zSD}mlq~PqMk0Rw)_GOO!FC; zbnDf7EiZ2EZjH4msJo*4t~MagE%6y5$G`lheZmKQB5WYLp=2b#OX2(LhIp{8O3005 z91kX|=FL3q>l}4U<(oUBwUHj_KoLu;vAZ$_vdWvbY)_Zyu1-lUUK)!_@<~5+T`=d~ zxySzFV=-LV0|0O})_t-D*DjQ*3C{IgNA6L3Mi-@eG?jsEWZuz7^$0uJ*1`6$!n2OQ z!!g1_&i)@E#h9%|@oZ54eTT;jIx}NlT`EACVfF0M=0JtZ6AvZ7y+!Txy0k`on>2*? z%gjpTNePkYNmn@akPZ=wZ8XzoA^ls6oYJWSzIgT4(gwZ*Kov!^fvRrTtNsDLw3PDr z@!F?l_=4y*W_e&#^R~Btigj|R$j23eLC_IF8>}tmRS{X2$a*5WU#ZP3N^c3_zKJB2 z4|!{RuBNtXxpu*%YXB^q*AB@(DKp)e8Cd!?W%?JqT%g5_E*r3H7ix^jNi=H!1NHMg z3AC)8lnwRCHG}5ObG{KDZiMCJvpG5Ht~YUF=haV&)@;kY8kYDgH8-Xzs`E>%f0deZ zHn2|1z^*7@+)5GXV`P!Z#x0KX+6wdVC_5inlR;I8PjY>GzNa)3Svc52`{@+_UiSD6 zx|9>#ybmmdGg3K@ulXr;T8uN=wc|K4jSBVV4Y?*OGMsf_`FVkAH`rZ zOWN!f59Df5NyA;#f-0l4CQEbn)>UqWmgo$E%x%aA?dVm?;y1UfMM-#+{7G!vwGwS01#KSQc<8^ z?6%?7Vj&)B(WOI_#Y<-ysZvc;sa+-S{(cdv3cYINFddUJ5AXd1B>~srA;}dT2pl4Z zSRkzZ&}c_2T`@@gzAkOBwcD=8bX|bBBYgGO;*t}weH(4HypE@lr!R)Rt0hP2bsuY^ zcorLbp}#X!&!r`}e*Nv0x9S)8-G}QnQFiElHBKQBJFZ$4mwv{%YDH@Y0-q=%sfM(F z$69B_bx+*-yD_Qho89X#J@%|G(OaQ(tt@9<3|MDgrWN8)`at*|*CUw z6~;N!s(+JA+#=s#rt(id^}YrFoGWywZz1oDyB3jnT5O6m(dkSDwr$(JOZLHR>hx{& zFW;|&zhRp@<=P=hXJ8Lxhj4Nhj)Y?%$PelWwO3^<%Ef4(Ym;B#?tZYiwrl*AN`lce z{jn$GdqP@NdD)p`p8glzdfCi%Ckso6czDAFbBENm*wBlqgqa8UNK|l_6G*;_;ki;< zUksF)KKr}v9&$=z>v2C~od35`q^NxVSGf|=Lc9g4uEPJ>0??S=<>__b#rq{sj7d-q zvZ(Uqu@+OxYhf2Y?ps7q8oY#*Y@ZBuutkd9f^9%T+RQ@$fu_eopb==h6T-o|$@-ac{RmcFQA zF;a%HK1jYV1*mC%c1B{oC~c5_ntU0ROzI>W1;~K!V;;MhnDEG<{M_etO|QImbd!Du zO$#BkHFupb9{513M!fbSn4z7xXZDbrib)ADsmdNz|Lm6i<9i9;Qz}yBSBnMfV8aK1 zj1|lldLo}RaS8r|njmLt8fk$QsCewv&{6mZ4ZSSWUqlcpSKI712|-c~?CM_~05~_s zq8GJRWMZEL3LcJq6U2WkKC^t^C8^!L_*AM%&o9ie+S7vZ@KL1ZX5!chsXl= z)L^>ppzH}GPU>x5^oblBGk5qy=rH=vidx^<{paZsy#jUjD~@Y%3fx) z(OrLX$nj6<$Mat}n_^iuxl5N4(Ul%lDWJ&cK#TEkR!->$e>nQ%Sl;^s%*ooRWur<{VRlEie}vz<;}yx1LO^Oj7f7ZJn2B?$-B zkCOCH4LnwF6Exa+%jSd#Gtc>of#B(kU<)~ahrNK1PL(f<9`0_(V05u?H6JqS01zPF z)^}UzvQChgi<@4U1)!1yq{Knfx0kYd!K1=OB zzumj{xyGs!C31Y!{X z1%-3weYP&+Z!P=Px&?2E3=AvjHY8sf=aXmX+t|2x_j;faO`{zvDlg{HbsgwlWci=1 zGI3naZXHbbom#p{X};sy7yti_Fr$;&v(811@{*|ws2;_Q#B)NOm!D&OU-FNMX+ujF z4genCO6_I6DwoyM+<%r|y{H}z+`rWjDg^1l3VuwPGk-Z)n>{SsVei5ry(@T=bF5zn zDv#)w|CK!QAWv<#OUUCZ0q#JEi4Vw%&FE-LkV}YwAFGLXN9szq$&&PouS*<%n-q~N zijkq{m{r`l>C_h+beFMRjTIUw_xkOU8&8o=5kzT(IXLjI;xa{uq zGMk^eG(tdEI@ur%T>oO1lKTZf5xew1(9ebS;oP~u*$gJlQgy@o>KXrZ0lGK()yI-- z9K4yYD9)+cjsHTXI8_xf_2d){B+LXlCWOVhv#OaA?>4TM^NpcsJyUm*)nKD4ljbF% zdfoOkHul7%6*0-l+kRZ`yvYw?bH>zcSvx{_1yl6`VjYkJ0I__NNprd1Av}b^Qpecy z!Y4e!lqdg&$1*!I59;Agn`eq#a8SGPQNGO~*31@?=Yl3^45uCTiAib2Uru!`vX$L( zg8CeZ?8UIuA2IK{j#0rhE2)7zNp_yF^tXb<@WpMF|k)0~rC zN>LNd-~)q(mJriah}@N!jmU=0>-Ur1m}r-kokD2kmcJoPdM*e1L_%x``?*@i+L+kh zvF&XkW21+(UpRxS>jh;$#4rQ?0ac`7^t#>Jo0&mDf~`jNj>ZC_$%^oMZZ|P#j?26V zTYl8W3Z`2Xq_3Pns$Un~%oUeFPFq*S#pe_VkDYA{)*s)io`;9_oA6J<&YCjcBCXYT;GxdANEq!T&2 e591pg^6`H1P)T~c<3#c=z;WSgf2PZFK>t5y{5Ny} literal 0 HcmV?d00001 diff --git a/assets/images/items/item_69a569a491f0e1.37331888.jpg b/assets/images/items/item_69a569a491f0e1.37331888.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52e18f957b941cdce4889d554f1a7923259a81ee GIT binary patch literal 4888 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 F{{T46q38er literal 0 HcmV?d00001 diff --git a/db/migrations/05_simplify_prices_index.sql b/db/migrations/05_simplify_prices_index.sql new file mode 100644 index 0000000..e730937 --- /dev/null +++ b/db/migrations/05_simplify_prices_index.sql @@ -0,0 +1,5 @@ +-- Drop the old index with variant_id +DROP INDEX unique_price ON prices; + +-- Add a new unique index without variant_id +CREATE UNIQUE INDEX unique_price ON prices (branch_id, item_id, service_id); diff --git a/pos.php b/pos.php index dad9080..ab9856a 100644 --- a/pos.php +++ b/pos.php @@ -2,7 +2,7 @@ $title = 'pos'; require_once __DIR__ . '/includes/header.php'; -$branch_id = $_SESSION['branch_id']; +$branch_id = $_SESSION['branch_id'] ?? 1; // Get all categories $categories = db()->query("SELECT * FROM categories ORDER BY name_en ASC")->fetchAll(); @@ -15,166 +15,207 @@ $stmt = db()->prepare("SELECT i.*, c.name_en as cat_en, c.name_ar as cat_ar $stmt->execute(); $items_raw = $stmt->fetchAll(); -// Get all services and prices for this branch -$stmt = db()->prepare("SELECT p.item_id, p.service_id, p.price, - s.name_en as service_en, s.name_ar as service_ar +// Get all services +$services_raw = db()->query("SELECT * FROM services ORDER BY name_en ASC")->fetchAll(); + +// Get all prices for this branch +$stmt = db()->prepare("SELECT p.item_id, p.service_id, p.price FROM prices p - JOIN services s ON p.service_id = s.id WHERE p.branch_id = ?"); $stmt->execute([$branch_id]); -$all_prices = $stmt->fetchAll(); +$prices_raw = $stmt->fetchAll(); + +$prices = []; +foreach ($prices_raw as $p) { + $prices[$p['item_id']][$p['service_id']] = (float)$p['price']; +} $items = []; foreach ($items_raw as $i) { - $items[$i['id']] = [ - 'id' => $i['id'], - 'name_en' => $i['name_en'], - 'name_ar' => $i['name_ar'], - 'category_id' => $i['category_id'], - 'image_url' => $i['image_url'], - 'vat_percent' => (float)$i['vat_percent'], - 'services' => [] - ]; -} - -foreach ($all_prices as $p) { - if (!isset($items[$p['item_id']])) continue; + $item_services = []; + foreach ($services_raw as $s) { + if (isset($prices[$i['id']][$s['id']])) { + $item_services[] = [ + 'id' => $s['id'], + 'name_en' => $s['name_en'], + 'name_ar' => $s['name_ar'], + 'price' => $prices[$i['id']][$s['id']] + ]; + } + } - $items[$p['item_id']]['services'][] = [ - 'id' => $p['service_id'], - 'name_en' => $p['service_en'], - 'name_ar' => $p['service_ar'], - 'price' => (float)$p['price'] - ]; + // Only include if has services + if (!empty($item_services)) { + $items[$i['id']] = [ + 'id' => $i['id'], + 'name_en' => $i['name_en'], + 'name_ar' => $i['name_ar'], + 'category_id' => $i['category_id'], + 'image_url' => $i['image_url'], + 'vat_percent' => (float)($i['vat_percent'] ?? 15), + 'services' => $item_services + ]; + } } // Get all customers for this branch $stmt = db()->prepare("SELECT * FROM customers WHERE branch_id = ? ORDER BY name_en ASC"); $stmt->execute([$branch_id]); $customers = $stmt->fetchAll(); + +$pageTitle = $lang == 'en' ? 'Point of Sale' : 'نقطة البيع'; ?> -
-
- -
- - - - -
- -
-
-
-
- - +
+
+ +
+
+

+
+ +
- + + +
+ + + + +
+
- -
-
-
+
+
- + -
- +
+
- % VAT + + % VAT +
-
- +
+

-
- -
-
-
-
- -
- -
- -
- - +
+
+ +
+
+ +
+
+ + + +
+
+
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+
+ +
+
+
+ +

+
+
+ +
- -
-
- -

-
-
- -
-
- - 0.00 SAR -
-
- - 0.00 SAR -
-
- - 0.00 SAR -
- -
- -