// L'unique requête dont on a besoin !
$ch = curl_init("https://{$hiboutik_account}.hiboutik.com/api/sales/$id");
curl_setopt($ch, CURLOPT_USERPWD, "$hiboutik_user:$hiboutik_key");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$res = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code == 200) {
$parsed = json_decode($res, true);
if (!is_array($parsed) || isset($parsed['error'])) continue;
// Hiboutik met parfois la vente dans un tableau [0]
$sale = isset($parsed[0]) ? $parsed[0] : $parsed;
// Si le ticket contient la fameuse liste "line_items", on fouille !
if (isset($sale['line_items']) && is_array($sale['line_items'])) {
$items_to_log = [];
foreach ($sale['line_items'] as $item) {
$cat_name = isset($item['category_name']) ? $item['category_name'] : '';
// Détection infaillible de la Catégorie B d'après votre JSON
// Le \bB\b vérifie que la lettre B est isolée (pas au milieu d'un mot)
if (preg_match('/\bB\b/iu', $cat_name) || stripos($cat_name, 'CATÉGORIE B') !== false || stripos($cat_name, 'CATEGORIE B') !== false) {
$items_to_log[] = [
'name' => isset($item['product_model']) ? $item['product_model'] : 'Désignation inconnue',
'qty' => isset($item['quantity']) ? $item['quantity'] : 1
];
}
}
// Si on a trouvé des munitions B, on récupère le client
if (!empty($items_to_log)) {
$client_nom = "CLIENT";
$client_prenom = "ANONYME (Vente Comptoir)";
if (!empty($sale['customers_last_name'])) {
$client_nom = strtoupper($sale['customers_last_name']);
$client_prenom = ucfirst(strtolower(isset($sale['customers_first_name']) ? $sale['customers_first_name'] : ''));
}
// Récupération de la date
$created_at = isset($sale['created_at']) ? $sale['created_at'] : '';
$date_parts = explode(' ', $created_at);
$sale_date = isset($date_parts[0]) ? date("d/m/Y", strtotime($date_parts[0])) : 'Date inconnue';
$sale_time = isset($date_parts[1]) ? $date_parts[1] : '-';
// Récupération de la facture
$document_ref = "Ticket #$id";
if (!empty($sale['invoice_id'])) {
$document_ref = "Facture #" . $sale['invoice_id'];
} elseif (!empty($sale['sale_num_fac'])) {
$document_ref = "Facture " . $sale['sale_num_fac'];
}
foreach ($items_to_log as $log_item) {
fputcsv($f, [
$sale_date,
$sale_time,
$client_nom,
$client_prenom,
$log_item['name'],
$log_item['qty'],
$document_ref
], ';');
}
}
}
}
}
fclose($f);
$next_url = admin_url("admin.php?page=hiboutik-registre&step=process&ticket_start=$ticket_start&tickets_to_scan=$tickets_to_scan¤t_ticket=$limit_for_this_run");
$tickets_restants = $limit_for_this_run - $stop_ticket;
echo "
⚡ Scan ultra-rapide en cours...
Le script analyse actuellement le ticket #$limit_for_this_run.
Encore $tickets_restants tickets à vérifier...
";
echo "";
}
// --- ETAPE 3 : RÉSULTAT FINAL ---
elseif ($step == 'done') {
$rows = [];
if (file_exists($csv_file)) {
$handle = fopen($csv_file, "r");
if ($handle !== FALSE) {
$header = fgetcsv($handle, 2000, ";");
while (($data = fgetcsv($handle, 2000, ";")) !== FALSE) {
if (count($data) >= 7) {
$rows[] = $data;
}
}
fclose($handle);
}
}
echo "✅ Registre de Police prêt !
";
echo "";
if (count($rows) > 0) {
echo "";
echo "
| Date & Heure |
Nom de l'acquéreur |
Prénom |
Désignation (Catégorie B) |
Qté |
Preuve de Vente |
";
foreach ($rows as $row) {
$is_anon = ($row[2] == 'CLIENT' && strpos($row[3], 'ANONYME') !== false);
$name_class = $is_anon ? "class='client-anon'" : "";
echo "";
echo "" . esc_html($row[0]) . " à " . esc_html($row[1]) . " | ";
echo "" . esc_html($row[2]) . " | ";
echo "" . esc_html($row[3]) . " | ";
echo "" . esc_html($row[4]) . " | ";
echo "" . esc_html($row[5]) . " | ";
echo "" . esc_html($row[6]) . " | ";
echo "
";
}
echo "
";
} else {
echo "Aucune munition de Catégorie B n'a été trouvée.
";
}
}
echo "";
}
?> [sH0>j4-Nm2m[!%{Aa ]_5y[q^s"vO_r2
@(3UUֳ߿~f<9fQ^urGƺ2m:=ϝR9|o'ıч͛{xr*JPJygC=Og/lӼuλoc٦LaG1kug^1oKC؎cmy-2@44]ۀT\M5<>5oo@=ulT*[ڍT}ś; hLcϰi.Ա=]C
}*mk4d_#`6`5S/uyjx3Qo|j+TfamQ
Xd:PNQNHkxwDCuŁ+i
h觋"\x^Mr;v\5Яd_mz1ޞR]8:N=Su.tvA,zMlˀwh{cib]u 'Ւ:bLLz7RXf*?T5o۟=.@5C r3<".C0mZQ&)Vn\,WjBR,$=W%*(Gq1WM3NuxDC2.CݻIDʀΞ: 돁Rר:Pl,56dˣ۾0QcՂv8(6Xati\:ynTLw,Ճ| _p\k4}_S{C]rR52!V
ym(Ό)0}tGsqr{@-eΑ˽p[܇w&'<4\> Wc$9&6(f%{%^&ȖekVΑ=y_x<\DԫSnYflaμϲgbn˲_, y$YsК;[Юsg+o{rG9:BkM.pB)_,ӟ`@So*oʯF 2z_ҏGap`zbXnLc|m+RR2Â g?sfƇm}v^m}{aFh*bqrJ5qOw@;ic1LlxL0QaaPRQt@Bnkj]M
(mKW`- ւja婆>0.j뎭}ҽiz}G=[ӿ +WM3J:;X9V1t{JOJi6?WTK}0J(R3+CIK`Mƅ?#1ca j,xu'nPɰ'x^ȪkehrC^=%h
-9-MϹY LOԋa{v{bb+^?ݸʇ@?0lwn94.4 V &j$7HT*(4.=
(;_T-}H/"@0j{EVd%},}o;p'J 5]4쉦iO[pNU:6̛#2mvnmKlcUӟN.
}TϽhQ)7d (;d;NFlϱm/BLrؚl)d#٬5I
g8%G}W/wj Bu'׃Ҫ4,DT7JehxbBr'K-ԇ^
Ʃ=N\Ǘ.HucJ[Y?Ǻ\1S:;^Aż8$"h`f;cOSMm3_ c0Y*+JN<)Eihg$&jH#iM;81"jAZ'Յp0ǭ#
`!?I4}qM@Z<-yBzA
PaP}*R 0UF^i1ܷSb9´&ej@\\QTwkB(|XiTUj TQ{R*#P9ՕTW+za7l nTOќU-`:'E'FQARo \Zj8p3Qp!p;wiZQ} pڰt8a( ǺmV
nE"8nU |?A(
}PjYeb}=ZIO̼)ܠypNXbT
m碿Y.Uw-VޔjF ^Ulͬ7Iިbe]jbcT)έ=3x+ZPێQfF":LȬ9']|1`szgU]il!ۥڼ56+$
0gVS8Ke-V)$*z8F%.
흹28&8PbzPZAsلFơ_ϩ *k;V5:Ot]*.,(햣 8IUM[z(@.q;y5uk/cJei*4إ\6:$^ x6cBpkM 8,(5S)0c|J)X1_:xH@; U )e||-e+3@v 42@ R) )z0 _p
ʊQJt}=PVL)]U:洲3k}r/T8x,vĵ0ចYswUQ/RTo!ԯ>_d\8 ӷ7, *7Qᯧ_?ʕXOyЀ(Bpl`\!
htQWl*?t:e*eȖ^db^Ig(+U!P+"&Ru6g{3[O_'p$
%`&ggAt#t§
q)m𦖝_7WՐt*Ğ(6KcN[fwYR3rw)H
F>ASQ5HT|K%]/&KR.IⅥѝ\AF}(\wfeݻ{Ud_ȥky+ _\֭|e
Wi+r7Yv
aԵZyYRj,.Vbl0ű"q(Ի"|\p&-RqBLM*yaKAc!gд;#c=\XSf,/ Uz
1͒~pj"4)uW
TOUJ]Zj ৵(9"1Ɛ^ZVX!/;B*zei8V=̊*P~Tzq-+XtVQH,ey}7 C}fk
gSʦNgU$ř84jtt]g5i`GMF^?f<}e(4s-iv!y&`!sY!5yp)w*?s.4!GyPw:SnBwm4;fpݭP瀱ɭlUKU-(:LQA뱃JpD+
.w܇ׯ=GHl&nFm2>Hi*3?l!3 @ZkkDҴqk;l SWw@T Lx
}ζhe&oٞTkgk'h.:3>\䚏/U]i=cc=gsFa琉)a/YL+%-cA/hӡZ7se"/xVOn6Ġ"[Gs ;k3Uv>{\,RR߰@sT*zTd7
UշsxyA ;moh~^+ۤW9ojX!@tE݉-C۞DһvEWO0#G, >>H۷#rh'VWnEoG8{A@v9yb-qsg&JbYfE}#$ 8olZdOS
@ %:)O4[=L;Q/eOFA e?Ako֙؆}M 'i2
m};=Jtє.lIϓd4A:,1~^QXbw1}=WMkʊ6/<*bG0~%*J3KkYyQ,V@?A_+GWyw9x|$`$=$+Wyߡz|Φ^Oų'#ͭwGsSܭ_H]Bjsn`c92e(]f~^Hnn qMn3_ώ3x*4VVөBrPt(I^mS5#>2sAJjZiTz+%UkڎVhDNZ(5zh($8"U'FcY4+&XIpg]I\DԨTw9HO(<%t_Ϋ'(sJEV
@#bn
V櫹did;xjӼ џ&ϩTM KN5_$
P-$7m=Ѯ|<]|<99p
\iLeݫk?wo9݊_ui7.zwUw_Rߴ
?;.v;˻~pnI+JV>tuRi~k}v2?錯KxXOCݛvck?*ǣF~#V',=
9RSAIـX VO^;SV#;{7,ky2}Hfb(^y,%''a&Qf
+U%{#yjLh#}i2jdE>'=IL$X?}̲<$p? =+[ؗ ߳B/Ukokx&S6Lc=tܣj{ݧȦ.w=@"f¬Czb*P
k+ γ2FUԾLxyr{sh}yYCVц8 r840Asqc=#6*zq
6Ni=F.Z|ûA`t XO);휜NY[̟'Oq9hR}0Y#"xѣ@8>yxX0b|3/+J(Yvt`\' (Y%DA.(by:34ͧ,|Ii> x5*v<oL͌5Fgji
a6l@7/X>^y*sSЧj1,7t'TK啍ewAWe`L:`ڧ\Q
=!mO s(LEiv2Ja+?dh]d#DNuԧ>In&a..uO&0g꽊b<1'l/LA5mRTb7QX\4X_wHm)G.h
KYm`f_΄i~KsLdK>G;x Cxfl *[%'jiO}ٴ``lf+FQ2a8xRq!_yAqQ(uFx>id}""HhJ
1$eGMb%n% ~3fhh3|(YV5b|qgK>ޟϱƥ0+L#urdz)|Q(ݧsZ1r:z.:31Tz+a%6yș}Ui<&
sC`t0ބLg;ϳ;.|D*
R
llqI$ϐϓ:e99f!@GYfr*r"2"%s.7@Al ʢa6։9% 0 8)~ƌQ!XUh$`
еXLیk/tDinQ<