fxGetVar($sqlCheck); // insérer le rabais dans le panier s'il n'est pas présent $sqlRabais = "SELECT rab_id, rab_description_fr, rab_description_en, rab_pourcent, rab_montant, rab_priorite, rab_date_limite, rab_code, rab_code_manuel, rab_epreuves, rab_produits, rab_effacable, rab_taxes, rab_epr_diff, rab_nb_epr_diff, rab_nb_epr_diff2, rab_produits_inclus, rab_plus_moins_cher, rab_noms_identiques, rab_date_limite_debut FROM inscriptions_rabais WHERE rab_id = " . intval($intRabais); $recRabais = $objDatabase->fxGetRow($sqlRabais); if ($intPanierRabais == NULL) { if ($recRabais != null) { if ($recRabais['rab_code_manuel'] == 2) $strDepot = ", pra_depot = 1"; else $strDepot = ", pra_depot = 0"; $sqlInsert = "INSERT INTO inscriptions_panier_rabais SET pra_maj = '" . fxGetDateTime() . "', rab_id = " . intval($intRabais) . ", rab_description_fr = '" . $objDatabase->fxEscape(fxUnescape($recRabais['rab_description_fr'])) . "', rab_description_en = '" . $objDatabase->fxEscape(fxUnescape($recRabais['rab_description_en'])) . "', rab_code = '" . $objDatabase->fxEscape(fxUnescape($recRabais['rab_code'])) . "', rab_pourcent = " . intval($recRabais['rab_pourcent']) . ", rab_montant = " . floatval($recRabais['rab_montant']) . ", rab_date_limite = '" . $objDatabase->fxEscape(fxUnescape($recRabais['rab_date_limite'])) . "', rab_priorite = " . intval($recRabais['rab_priorite']) . ", rab_effacable = " . intval($recRabais['rab_effacable']) . ", rab_epreuves = '" . $objDatabase->fxEscape(fxUnescape($recRabais['rab_epreuves'])) . "', rab_produits = '" . $objDatabase->fxEscape(fxUnescape($recRabais['rab_produits'])) . "', rab_taxes = " . intval($recRabais['rab_taxes']) . ", rab_epr_diff = " . intval($recRabais['rab_epr_diff']) . ", rab_nb_epr_diff = " . intval($recRabais['rab_nb_epr_diff']) . ", rab_nb_epr_diff2 = " . intval($recRabais['rab_nb_epr_diff2']) . ", rab_plus_moins_cher = " . intval($recRabais['rab_plus_moins_cher']) . ", rab_produits_inclus = " . intval($recRabais['rab_produits_inclus']) . ", rab_noms_identiques = " . intval($recRabais['rab_noms_identiques']) . ", rab_date_limite_debut = '" . $objDatabase->fxEscape($recRabais['rab_date_limite_debut']) . "'" . $strDepot; $qryInsert = $objDatabase->fxQuery($sqlInsert); // récupérer le id ajouté $intPanierRabais = $objDatabase->fxGetLastId(); } } return $intPanierRabais; } // fonction qui ajoute, modifie ou supprime un rabais au panier (JSP) // param : action (add/mod/del), numéro de panier, infos de l'événement, données POST, langue // créé : 2013-06-19 function fxSetRabais($strAction, $strNoPanier, $tabEvenement, $tabData, $strLangue) { global $objDatabase; switch($strAction) { case 'add': // vérifier si le rabais est valide $sqlRabais = "SELECT rab_id, rab_montant, rab_pourcent, rab_date_limite_debut, rab_date_limite, rab_heure_limite_debut, rab_heure_limite_fin FROM inscriptions_rabais WHERE (rab_date_limite_debut <= '" . fxGetDate() . "' OR rab_date_limite_debut = '0000-00-00' OR rab_date_limite_debut IS NULL) AND rab_date_limite >= '" . fxGetDate() . "' AND rab_actif = 1 AND rab_qte > 0 AND rab_code = '" . $objDatabase->fxEscape($tabData['rab_code']) . "' AND rab_code_manuel = 1 AND eve_id IN(" . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . ")"; $tabRabais = $objDatabase->fxGetRow($sqlRabais); if ($tabRabais != NULL) { // Vérifier les dates et heures limites $blnRabais = true; $strDate = fxGetDate(); $strTime = fxGetTime(); if ($strDate > $tabRabais['rab_date_limite'] || (trim($tabRabais['rab_date_limite_debut']) != '' && $strDate < $tabRabais['rab_date_limite_debut'])) { $blnRabais = false; } if ($strDate == $tabRabais['rab_date_limite']) { if (trim($tabRabais['rab_heure_limite_fin']) != '' && $strTime > $tabRabais['rab_heure_limite_fin']) { $blnRabais = false; } } if ($strDate == $tabRabais['rab_date_limite_debut']) { if (trim($tabRabais['rab_heure_limite_debut']) != '' && $strTime < $tabRabais['rab_heure_limite_debut']) { $blnRabais = false; } } if ($blnRabais) { $intPanierRabais = fxCheckRabais($tabRabais['rab_id']); if ($intPanierRabais != 0) { // vérifier si le rabais exise déjà pour ce panier $sqlCheck = "SELECT COUNT(*) AS nb FROM inscriptions_panier_rabais_acheteurs WHERE pra_id = " . intval($intPanierRabais) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $intNb = $objDatabase->fxGetVar($sqlCheck); if ($intNb < 1) { $intRabaisPourcent = 0; if ($tabRabais['rab_pourcent'] > 0) { // si rabais en % if ($tabRabais['rab_pourcent'] == 100) { // si rabais 100% // effacer les autres rabais $sqlDelete = "DELETE FROM inscriptions_panier_rabais_acheteurs WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryDelete = $objDatabase->fxQuery($sqlDelete); $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET rab_montant = 0 WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryUpadte = $objDatabase->fxQuery($sqlUpdate); $sqlUpdate = "UPDATE inscriptions_panier_produits_new SET rab_montant = 0 WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryUpadte = $objDatabase->fxQuery($sqlUpdate); } // vérifier si les rabais pourcent ne dépassent pas 100% $sqlRabaisPourcent = "SELECT SUM(r.rab_pourcent) FROM inscriptions_panier_rabais r, inscriptions_panier_rabais_acheteurs a WHERE r.pra_id = a.pra_id AND r.pra_depot = 0 AND a.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND r.rab_montant = 0"; $intRabaisPourcent = $objDatabase->fxGetVar($sqlRabaisPourcent); $intRabaisPourcent += $tabRabais['rab_pourcent']; } if ($intRabaisPourcent <= 100 || $tabRabais['rab_montant'] > 0) { // si la somme des rabais dans le panier ne dépasse pas 100% ou rabais en $$ // ajouter le rabais dans panier acheteurs $sqlInsert = "INSERT INTO inscriptions_panier_rabais_acheteurs SET pra_id = " . intval($intPanierRabais) . ", no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryInsert = $objDatabase->fxQuery($sqlInsert); // afficher le message de succès $_SESSION['msg'] = 'p301'; // calculer le montant dans panier_epreuves_commandees fxMajRabais($strNoPanier); } else { // afficher le message d'erreur if ($strLangue == 'fr') $_SESSION['msg'] = 'e131'; else $_SESSION['msg'] = 'e531'; } } else { // afficher le message d'erreur if ($strLangue == 'fr') $_SESSION['msg'] = 'e122'; else $_SESSION['msg'] = 'e522'; } } } else { // afficher le message d'erreur if ($strLangue == 'fr') $_SESSION['msg'] = 'e120'; else $_SESSION['msg'] = 'e520'; } } else { // afficher le message d'erreur if ($strLangue == 'fr') $_SESSION['msg'] = 'e120'; else $_SESSION['msg'] = 'e520'; } break; case 'del': // effacer le montant du rabais $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET pra_id = 0, rab_priorite = 0, rab_montant = 0 WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND pra_id = " . intval($tabData['pra_id']); $qryUpdate = $objDatabase->fxQuery($sqlUpdate); $sqlUpdate = "UPDATE inscriptions_panier_produits SET pra_id = 0, rab_priorite = 0, rab_montant = 0 WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND pra_id = " . intval($tabData['pra_id']); $qryUpdate = $objDatabase->fxQuery($sqlUpdate); // effacer le rabais $sqlDelete = "DELETE FROM inscriptions_panier_rabais_acheteurs WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND pra_id = " . intval($tabData['pra_id']); $qryDelete = $objDatabase->fxQuery($sqlDelete); } // rediriger vers le panier if ($strLangue == 'fr') $strPage = 'panier'; else $strPage = 'cart'; header("Location: " . $GLOBALS['vDomaine'] . '/' . $strPage . '/checkout/' . $tabEvenement['general']['eve_label_url']); exit; } // fonction qui met à jour les montants des rabais dans le panier (JSP) // param : no panier // créé : 2013-06-25 function fxMajRabais($strNoPanier) { global $objDatabase; $arrRabaisAppliques = array(); $strWhere = ''; // vider les rabais existants pour les épreuves commandées, ceux-ci seront recalculés plus bas $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET pra_id = 0, rab_priorite = 0, rab_montant = 0 WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); // vider les rabais existants pour les produits ajoutés, ceux-ci seront recalculés plus bas $sqlUpdate = "UPDATE inscriptions_panier_produits_new SET pra_id = 0, rab_priorite = 0, rab_montant = 0 WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); // vider les rabais existants // récupérer le détails des rabais (montant/pourcent) dans le panier $sqlPanierRabais = " SELECT r.rab_id, r.pra_id, r.rab_montant, r.rab_pourcent, r.rab_priorite, r.rab_epreuves, r.rab_produits, r.rab_taxes, r.rab_epr_diff, r.rab_nb_epr_diff, r.rab_nb_epr_diff2, r.rab_plus_moins_cher, r.rab_produits_inclus, r.rab_noms_identiques FROM inscriptions_panier_rabais r, inscriptions_panier_rabais_acheteurs a WHERE a.pra_id = r.pra_id AND a.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' "; $recPanierRabais = $objDatabase->fxGetResults($sqlPanierRabais); if ($recPanierRabais != null) { // s'il y a des rabais dans ce panier for ($intCtr = 1; $intCtr <= count($recPanierRabais); $intCtr++) { // mettre à jour les participants if (trim($recPanierRabais[$intCtr]['rab_epreuves']) != '') { // vérifier si le rabais est un montant ou pourcent if ($recPanierRabais[$intCtr]['rab_pourcent'] > 0) $strMontant = "(pec_prix * (" . intval($recPanierRabais[$intCtr]['rab_pourcent']) . " / 100))"; else $strMontant = floatval($recPanierRabais[$intCtr]['rab_montant']); if ($recPanierRabais[$intCtr]['rab_epr_diff'] == 1) { // appliquer le rabais seulement aux épreuves dfférentes if ($recPanierRabais[$intCtr]['rab_noms_identiques'] == 1) { // si les noms doivent êtres identiques // récupérer les pec_id et epr_id des participants aux noms identiques $sqlPanierEpreuves = " SELECT pec_id, epr_id, par_nom, par_prenom FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND LOWER(CONCAT(par_prenom,' ',par_nom)) IN( SELECT LOWER(CONCAT(par_prenom,' ',par_nom)) FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' GROUP BY LOWER(CONCAT(par_prenom,' ',par_nom)) HAVING COUNT(LOWER(CONCAT(par_prenom,' ',par_nom))) > 1 ) "; $recPanierEpreuves = $objDatabase->fxGetResultsKey($sqlPanierEpreuves, 'pec_id'); if ($recPanierEpreuves != null) { // exécuter la requête $sqlUpdate = ". UPDATE inscriptions_panier_epreuves_commandees SET pra_id = " . intval($recPanierRabais[$intCtr]['pra_id']) . ", rab_priorite = " . intval($recPanierRabais[$intCtr]['rab_priorite']) . ", rab_montant = " . $strMontant . " WHERE pec_prix > 0 AND rab_priorite < " . intval($recPanierRabais[$intCtr]['rab_priorite']) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND pec_id IN(" . implode(',', array_keys($recPanierEpreuves)) . ") AND epr_id IN(" . $recPanierRabais[$intCtr]['rab_epreuves'] . ") "; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); $intNbAffectedRows = $objDatabase->fxGetNbAffectedRows(); if (intval($intNbAffectedRows) > 0) { $arrRabaisAppliques[] = $recPanierRabais[$intCtr]['pra_id']; } } } else { $tabEpreuves = explode(',', $recPanierRabais[$intCtr]['rab_epreuves']); foreach ($tabEpreuves as $epr_id) { // exécuter la requête $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET pra_id = " . intval($recPanierRabais[$intCtr]['pra_id']) . ", rab_priorite = " . intval($recPanierRabais[$intCtr]['rab_priorite']) . ", rab_montant = " . $strMontant . " WHERE pec_prix > 0 AND rab_priorite < " . intval($recPanierRabais[$intCtr]['rab_priorite']) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND epr_id = " . intval($epr_id) . " LIMIT 1"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); $intNbAffectedRows = $objDatabase->fxGetNbAffectedRows(); if (intval($intNbAffectedRows) > 0) { $arrRabaisAppliques[] = $recPanierRabais[$intCtr]['pra_id']; } } } } else { if ($recPanierRabais[$intCtr]['rab_nb_epr_diff2'] > 0) { // info épreuves commandées $sqlEpreuves = "SELECT c.*, e.epr_code, 0 AS rabais FROM inscriptions_panier_epreuves_commandees c, inscriptions_epreuves e WHERE c.epr_id = e.epr_id AND ep_id <> 0 AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $tabEpreuves = $objDatabase->fxGetResults($sqlEpreuves); if (count($tabEpreuves) >= $recPanierRabais[$intCtr]['rab_nb_epr_diff2']) { if ($recPanierRabais[$intCtr]['rab_plus_moins_cher'] == 1) { $strOrder = "ASC"; } else { $strOrder = "DESC"; } // exécuter la requête $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET pra_id = " . intval($recPanierRabais[$intCtr]['pra_id']) . ", rab_priorite = " . intval($recPanierRabais[$intCtr]['rab_priorite']) . ", rab_montant = " . $strMontant . " WHERE pec_prix > 0 AND rab_priorite < " . intval($recPanierRabais[$intCtr]['rab_priorite']) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND epr_id IN(" . $recPanierRabais[$intCtr]['rab_epreuves'] . ") ORDER BY pec_prix " . $strOrder . " LIMIT " . intval($recPanierRabais[$intCtr]['rab_nb_epr_diff2']); $qryUpdate = $objDatabase->fxQuery($sqlUpdate); $intNbAffectedRows = $objDatabase->fxGetNbAffectedRows(); if (intval($intNbAffectedRows) > 0) { $arrRabaisAppliques[] = $recPanierRabais[$intCtr]['pra_id']; } } } elseif ($recPanierRabais[$intCtr]['rab_noms_identiques'] == 1) { // si les noms doivent êtres identiques // récupérer les pec_id et epr_id des participants aux noms identiques $sqlPanierEpreuves = "SELECT pec_id, epr_id, par_nom, par_prenom FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND LOWER(CONCAT(par_prenom,' ',par_nom)) IN(SELECT LOWER(CONCAT(par_prenom,' ',par_nom)) FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' GROUP BY LOWER(CONCAT(par_prenom,' ',par_nom)) HAVING COUNT(LOWER(CONCAT(par_prenom,' ',par_nom))) > 1)"; $recPanierEpreuves = $objDatabase->fxGetResultsKey($sqlPanierEpreuves, 'pec_id'); if ($recPanierEpreuves != null) { // exécuter la requête $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET pra_id = " . intval($recPanierRabais[$intCtr]['pra_id']) . ", rab_priorite = " . intval($recPanierRabais[$intCtr]['rab_priorite']) . ", rab_montant = " . $strMontant . " WHERE pec_prix > 0 AND rab_priorite < " . intval($recPanierRabais[$intCtr]['rab_priorite']) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND pec_id IN(" . implode(',', array_keys($recPanierEpreuves)) . ") AND epr_id IN(" . $recPanierRabais[$intCtr]['rab_epreuves'] . ")"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); $intNbAffectedRows = $objDatabase->fxGetNbAffectedRows(); if (intval($intNbAffectedRows) > 0) { $arrRabaisAppliques[] = $recPanierRabais[$intCtr]['pra_id']; } } } else { // exécuter la requête $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET pra_id = " . intval($recPanierRabais[$intCtr]['pra_id']) . ", rab_priorite = " . intval($recPanierRabais[$intCtr]['rab_priorite']) . ", rab_montant = " . $strMontant . " WHERE pec_prix > 0 AND rab_priorite < " . intval($recPanierRabais[$intCtr]['rab_priorite']) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND epr_id IN(" . $recPanierRabais[$intCtr]['rab_epreuves'] . ")"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); $intNbAffectedRows = $objDatabase->fxGetNbAffectedRows(); if (intval($intNbAffectedRows) > 0) { $arrRabaisAppliques[] = $recPanierRabais[$intCtr]['pra_id']; } } } } /* else { // si le rabais s'applique à toutes les épreuves // vérifier si le rabais est un montant ou pourcent if ($recPanierRabais[$intCtr]['rab_pourcent'] > 0) $strMontant = "(pec_prix * (" . intval($recPanierRabais[$intCtr]['rab_pourcent']) . " / 100))"; else $strMontant = floatval($recPanierRabais[$intCtr]['rab_montant']); if ($recPanierRabais[$intCtr]['rab_epr_diff'] == 1) { // appliquer le rabais seulement aux épreuves dfférentes $sqlPanierEprDiff = "SELECT distinct(epr_id) AS epr_id FROM inscriptions_panier_epreuves_commandees c, inscriptions_rabais r WHERE no_panier = '" . fxUnescape($strNoPanier) . "' AND find_in_set(c.epr_id, r.rab_epreuves)"; $tabPanierEprDiff = $objDatabase->fxGetResults($sqlPanierEprDiff); $tabEpreuves = array_map(function ($tab) { return $tab['epr_id']; }, $tabPanierEprDiff); foreach ($tabEpreuves as $epr_id) { // exécuter la requête $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET pra_id = " . intval($recPanierRabais[$intCtr]['pra_id']) . ", rab_priorite = " . intval($recPanierRabais[$intCtr]['rab_priorite']) . ", rab_montant = " . $strMontant . " WHERE pec_prix > 0 AND rab_priorite < " . intval($recPanierRabais[$intCtr]['rab_priorite']) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND epr_id = " . intval($epr_id) . " LIMIT 1"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); } } else { // exécuter la requête $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees SET pra_id = " . intval($recPanierRabais[$intCtr]['pra_id']) . ", rab_priorite = " . intval($recPanierRabais[$intCtr]['rab_priorite']) . ", rab_montant = " . $strMontant . " WHERE pec_prix > 0 AND rab_priorite < " . intval($recPanierRabais[$intCtr]['rab_priorite']) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); } } */ // mettre à jour les produits if (trim($recPanierRabais[$intCtr]['rab_produits']) != '') { // vérifier si le rabais est un montant ou pourcent if ($recPanierRabais[$intCtr]['rab_pourcent'] > 0) $strMontant = "(pro_prix * (" . intval($recPanierRabais[$intCtr]['rab_pourcent']) . " / 100))"; else $strMontant = floatval($recPanierRabais[$intCtr]['rab_montant']); // exécuter la requête $sqlUpdate = "UPDATE inscriptions_panier_produits_new SET pra_id = " . intval($recPanierRabais[$intCtr]['pra_id']) . ", rab_priorite = " . intval($recPanierRabais[$intCtr]['rab_priorite']) . ", rab_montant = " . $strMontant . " WHERE pro_prix > 0 AND rab_priorite < " . intval($recPanierRabais[$intCtr]['rab_priorite']) . " AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND pro_id IN(" . $recPanierRabais[$intCtr]['rab_produits'] . ")"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); if ($objDatabase->fxGetNbAffectedRows() > 0) { $arrRabaisAppliques[] = $recPanierRabais[$intCtr]['pra_id']; } } if (trim($recPanierRabais[$intCtr]['rab_epreuves']) == '' && trim($recPanierRabais[$intCtr]['rab_produits']) == '') { // si le rabais est appliqué sur le total du panier $arrRabaisAppliques[] = $recPanierRabais[$intCtr]['pra_id']; } } // vérifier les rabais_panier_acheteurs et effacer si non appliqué dans epreuves_commandees ou produits_new if (!empty($arrRabaisAppliques)) { $arrRabaisAppliques = array_unique($arrRabaisAppliques); $strWhere = " AND pra_id NOT IN(" . implode(',', $arrRabaisAppliques) . ")"; } $sqlPanierRabais = "DELETE FROM inscriptions_panier_rabais_acheteurs WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'" . $strWhere; $qryDelPanierRabais = $objDatabase->fxQuery($sqlPanierRabais); if ($objDatabase->fxGetNbAffectedRows() > 0) { if (isset($_SESSION['msg'])) { if ($_SESSION['msg'] == 'p121' || $_SESSION['msg'] == 'p521' || $_SESSION['msg'] == 'p301') { $_SESSION['msg'] = 'e303'; } } } } fxCheckGenereDon($strNoPanier); } function fxMajStockRabais($strAction, $strNoPanier) { global $objDatabase; $sqlUpdate = "UPDATE inscriptions_rabais SET rab_qte = (rab_qte " . $strAction . " 1) WHERE rab_id IN(SELECT r.rab_id FROM inscriptions_panier_rabais_acheteurs p, inscriptions_panier_rabais r WHERE p.pra_id = r.pra_id AND p.no_panier = '" . $strNoPanier . "') AND rab_qte_limitee = 1"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); } // fonction qui ajoute, supprime un rabais au panier automatique (SL) // param : action (add/mod/del), numéro de panier, infos de l'événement, données POST, langue // créé : 2013-10-23 function fxSetRabaisauto($strAction, $strNoPanier, $tabEvenement, $strLangue) { global $objDatabase; switch($strAction) { case 'add': // verifier si epreuves differentes $sqlPanier = "SELECT distinct(epr_id) FROM inscriptions_panier_epreuves_commandees c, inscriptions_rabais r WHERE no_panier = '" . fxUnescape($strNoPanier) . "' and find_in_set(c.epr_id, r.rab_epreuves)"; // $sqlPanier = "SELECT distinct(epr_id) FROM inscriptions_panier_epreuves_commandees WHERE no_panier = '" . fxUnescape($strNoPanier) . "'"; $tabPanier = $objDatabase->fxFetchArray(2,$sqlPanier); $intNbEprDiff = count($tabPanier); // echo "in nb diff = " . $intNbEprDiff; if($intNbEprDiff > 1) { // au moins 2 epreuves differentes dans le panier. if($intNbEprDiff > 4) $intNbEprDiff = 4; // pour limite de 4 et + // create where $strInSet = "("; for($i = 1; $i <= count($tabPanier); $i++){ $strInSet .= $tabPanier[$i]['epr_id'] . ","; } $strInSet = substr($strInSet, 0, strlen($strInSet) -1); $strInSet .= ")"; // echo $strInSet; // verifier si un rabais pour epr_diff existe $sqlRabais = "SELECT * FROM (SELECT * FROM inscriptions_rabais WHERE rab_actif = 1 AND rab_epr_diff = 1 AND rab_date_limite >= '" . fxGetDate() . "' AND rab_code = '" . intval($intNbEprDiff) . "DIFF' AND rab_code_manuel = 0 AND eve_id = " . intval($tabEvenement['general']['eve_id']) . " ORDER BY rab_priorite, rab_date_limite) AS rabais GROUP BY rab_condition ORDER BY rab_priorite"; $tabRabais = $objDatabase->fxGetResults($sqlRabais); } else { // vérifier les rabais disponibles $sqlRabais = "SELECT * FROM (SELECT * FROM inscriptions_rabais WHERE rab_epr_diff = 0 AND rab_actif = 1 AND rab_date_limite >= '" . fxGetDate() . "' AND rab_code_manuel = 0 AND eve_id = " . intval($tabEvenement['general']['eve_id']) . " ORDER BY rab_priorite, rab_date_limite) AS rabais GROUP BY rab_condition ORDER BY rab_priorite"; $tabRabais = $objDatabase->fxGetResults($sqlRabais); } // fin else (pas d'epr diff) // info épreuves commandées $sqlEpreuves = "SELECT c.*, e.epr_code, 0 AS rabais FROM inscriptions_panier_epreuves_commandees c, inscriptions_epreuves e WHERE c.epr_id = e.epr_id AND ep_id <> 0 AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $tabEpreuves = $objDatabase->fxGetResults($sqlEpreuves); $intRabaisCtr = 1; $mem_rabaistab = null; // cherche si un rabais s'applique for ($intCtr = 1; $intCtr <= count($tabRabais); $intCtr++) { if($tabRabais[$intCtr]['rab_condition'] != '') $rab_rech = json_decode($tabRabais[$intCtr]['rab_condition']); else $rab_rech = ''; $intNbRabais = 1; $mem_rabaistab[$intRabaisCtr]['max'] = 0; if($rab_rech != '') { foreach ($rab_rech as $key => $value) { $mem_rabaistab[$intRabaisCtr][$key] = $value; $mem_rabaistab[$intRabaisCtr]['max'] += $value; } } $mem_rabaistab[$intRabaisCtr]['x_rabais'] = $intCtr; $mem_rabaistab[$intRabaisCtr]['rab_id'] = $tabRabais[$intCtr]['rab_id']; $mem_rabaistab[$intRabaisCtr]['condition'] = $tabRabais[$intCtr]['rab_condition']; for ($intCtr2 = 1; $intCtr2 <= count($tabEpreuves); $intCtr2++) { $strCodeEpreuve = $tabEpreuves[$intCtr2]['epr_code']; if ($tabEpreuves[$intCtr2]['rabais'] != 1) { if ($rab_rech != '' && array_key_exists($strCodeEpreuve, $rab_rech) && $mem_rabaistab[$intRabaisCtr][$strCodeEpreuve] > 0) { $mem_rabaistab[$intRabaisCtr][$strCodeEpreuve] -= 1; $mem_rabaistab[$intRabaisCtr]['x_participants'][$intNbRabais] = $intCtr2; $mem_rabaistab[$intRabaisCtr]['max'] -= 1; $intNbRabais += 1; } } } if ($mem_rabaistab[$intRabaisCtr]['max'] == 0) { // if rabais est ok // if ($rab_rech != '' && $mem_rabaistab[$intRabaisCtr]['max'] == 0) { // if rabais est ok if($rab_rech != '') { $mem_parti = $mem_rabaistab[$intRabaisCtr]['x_participants']; foreach ($mem_parti as $key => $value) $tabEpreuves[$value]['rabais'] = 1; } // ??? $intCtr--; $intRabaisCtr++; } else unset($mem_rabaistab[$intRabaisCtr]); } // effacer les autre rabais $sqlDelete = "DELETE FROM inscriptions_panier_rabais_acheteurs WHERE pra_type = 'auto' AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryDelete = $objDatabase->fxQuery($sqlDelete); for ($intCtr = 1; $intCtr <= count($mem_rabaistab); $intCtr++) { $intPanierRabais = fxCheckRabais($mem_rabaistab[$intCtr]['rab_id']); // calculer rab_montant $sqlMontants = "SELECT * FROM inscriptions_rabais WHERE rab_id = " . intval($intPanierRabais) . " AND eve_id = " . intval($tabEvenement['general']['eve_id']); $tabMontants = $objDatabase->fxGetResults($sqlMontants); // ajouter le rabais dans panier acheteurs $sqlInsert = "INSERT INTO inscriptions_panier_rabais_acheteurs SET pra_type = 'auto', pra_id = " . intval($intPanierRabais) . ", no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryInsert = $objDatabase->fxQuery($sqlInsert); } // } // fin else (pas d'epr diff) break; } } //avant MSIN-3675 function fxSetRabaisauto2avant($strAction, $strNoPanier, $tabEvenement, $strLangue) { global $objDatabase; switch($strAction) { case 'add': // get rabais avec condition disponible $sqlRabaisCondition = " SELECT * FROM ( SELECT * FROM inscriptions_rabais WHERE rab_epr_diff = 0 AND rab_actif = 1 AND rab_qte > 0 AND rab_date_limite >= '" . fxGetDate() . "' AND rab_date_limite_debut <= '" . fxGetDate() . "' AND rab_code_manuel = 0 AND rab_condition != '' AND eve_id IN( " . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . " ) ORDER BY rab_priorite, rab_date_limite ) AS rabais GROUP BY rab_condition ORDER BY rab_priorite "; $tabRabaisCondition = $objDatabase->fxGetResults($sqlRabaisCondition); $sqlRabaisSansCondition = " SELECT * FROM ( SELECT * FROM inscriptions_rabais WHERE rab_actif = 1 AND rab_qte > 0 AND rab_date_limite >= '" . fxGetDate() . "' AND rab_date_limite_debut <= '" . fxGetDate() . "' AND rab_code_manuel = 0 AND rab_condition = '' AND eve_id IN( " . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . " ) ORDER BY rab_priorite, rab_date_limite ) AS rabais group by rab_code ORDER BY rab_priorite "; // echo($sqlRabaisSansCondition); // echo("
"); $tabRabaisSansCondition = $objDatabase->fxGetResults($sqlRabaisSansCondition); // print_r($tabRabaisSansCondition);exit; $sqlPanierEprDiff = " SELECT distinct(epr_id) FROM inscriptions_panier_epreuves_commandees c, inscriptions_rabais r WHERE no_panier = '" . fxUnescape($strNoPanier) . "' AND find_in_set(c.epr_id, r.rab_epreuves) "; $tabPanierEprDiff = $objDatabase->fxGetResults($sqlPanierEprDiff); // info épreuves commandées $sqlEpreuves = "SELECT c.*, e.epr_code, 0 AS rabais FROM inscriptions_panier_epreuves_commandees c, inscriptions_epreuves e WHERE c.epr_id = e.epr_id AND ep_id <> 0 AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $tabEpreuves = $objDatabase->fxGetResults($sqlEpreuves); // info épreuves commandées avec nom identiques $sqlEpreuvesNomsIdentiques = " SELECT c.*, e.epr_code, 0 AS rabais FROM inscriptions_panier_epreuves_commandees c JOIN inscriptions_epreuves e ON c.epr_id = e.epr_id WHERE c.ep_id <> 0 AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND c.epr_id IN( SELECT epr_id FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND LOWER(CONCAT(par_prenom,' ',par_nom)) IN( SELECT LOWER(CONCAT(par_prenom,' ',par_nom)) FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' GROUP BY LOWER(CONCAT(par_prenom,' ',par_nom)) HAVING COUNT(LOWER(CONCAT(par_prenom,' ',par_nom))) > 1 ) ) "; $tabEpreuvesNomsIdentiques = $objDatabase->fxGetResults($sqlEpreuvesNomsIdentiques); $intRabaisCtr = 1; $arrRabais = []; // cherche si un rabais par condition s'applique for ($intCtr = 1; $intCtr <= count($tabRabaisCondition); $intCtr++) { $arrCondition = json_decode($tabRabaisCondition[$intCtr]['rab_condition']); $intNbRabais = 1; if ($arrCondition != '') { $arrRabais[$intRabaisCtr]['max'] = 0; foreach ($arrCondition as $key => $value) { $arrRabais[$intRabaisCtr][$key] = $value; $arrRabais[$intRabaisCtr]['max'] += $value; } $arrRabais[$intRabaisCtr]['x_rabais'] = $intCtr; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisCondition[$intCtr]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisCondition[$intCtr]['rab_condition']; if ($tabRabaisCondition[$intCtr]['rab_noms_identiques'] == 1) { // si les noms des participants doivent être identiques for ($intCtr2 = 1; $intCtr2 <= count($tabEpreuvesNomsIdentiques); $intCtr2++) { $strCodeEpreuve = $tabEpreuvesNomsIdentiques[$intCtr2]['epr_code']; if ($tabEpreuvesNomsIdentiques[$intCtr2]['rabais'] != 1) { if (array_key_exists($strCodeEpreuve, $arrCondition) && $arrRabais[$intRabaisCtr][$strCodeEpreuve] > 0) { $arrRabais[$intRabaisCtr][$strCodeEpreuve] -= 1; $arrRabais[$intRabaisCtr]['x_participants'][$intNbRabais] = $intCtr2; $arrRabais[$intRabaisCtr]['max'] -= 1; $intNbRabais += 1; } } } } else { for ($intCtr2 = 1; $intCtr2 <= count($tabEpreuves); $intCtr2++) { $strCodeEpreuve = $tabEpreuves[$intCtr2]['epr_code']; if ($tabEpreuves[$intCtr2]['rabais'] != 1) { if (array_key_exists($strCodeEpreuve, $arrCondition) && $arrRabais[$intRabaisCtr][$strCodeEpreuve] > 0) { $arrRabais[$intRabaisCtr][$strCodeEpreuve] -= 1; $arrRabais[$intRabaisCtr]['x_participants'][$intNbRabais] = $intCtr2; $arrRabais[$intRabaisCtr]['max'] -= 1; $intNbRabais += 1; } } } } if ($arrRabais[$intRabaisCtr]['max'] == 0) { // if rabais est ok $mem_parti = $arrRabais[$intRabaisCtr]['x_participants']; foreach ($mem_parti as $key => $value) { $tabEpreuves[$value]['rabais'] = 1; } $intRabaisCtr++; } else unset($arrRabais[$intRabaisCtr]); } } // cherche si un rabais SANS condition s'applique for ($i = 1; $i <= count($tabRabaisSansCondition); $i++) { if (intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff']) > 0) { if (intval($tabRabaisSansCondition[$i]['rab_epr_diff']) === 1) { if (intval($tabRabaisSansCondition[$i]['rab_noms_identiques']) === 1) { // si les noms des participants doivent être identiques if ($tabEpreuvesNomsIdentiques != null) { $arrEpreeuve = array_map(function($arr) { return $arr['epr_id']; }, $tabEpreuvesNomsIdentiques); $intNbEpr = count(array_unique($arrEpreeuve)); } else { $intNbEpr = 1; } } else { $intNbEpr = count($tabPanierEprDiff); } /*if ($intNbEpr > 4) $intNbEpr = 4;*/ } else { $intNbEpr = count($tabEpreuves); } $mem_int_code = $tabRabaisSansCondition[$i]['rab_nb_epr_diff']; $intNbRabais = 1; $arrRabais[$intRabaisCtr]['max'] = 0; if ($intNbEpr == $mem_int_code) { $arrRabais[$intRabaisCtr]['x_rabais'] = $i; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisSansCondition[$i]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisSansCondition[$i]['rab_condition']; $arrRabais[$intRabaisCtr]['code'] = $tabRabaisSansCondition[$i]['rab_code']; } $intRabaisCtr++; } elseif ($tabRabaisSansCondition[$i]['rab_nb_epr_diff2'] > 0) { $intNbEpr = count($tabEpreuves); $mem_int_code = $tabRabaisSansCondition[$i]['rab_nb_epr_diff2']; $intNbRabais = 1; $arrRabais[$intRabaisCtr]['max'] = 0; if ($mem_int_code <= $intNbEpr) { $arrRabais[$intRabaisCtr]['x_rabais'] = $i; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisSansCondition[$i]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisSansCondition[$i]['rab_condition']; $arrRabais[$intRabaisCtr]['code'] = $tabRabaisSansCondition[$i]['rab_code']; } $intRabaisCtr++; } } // gerer rabais dans DB (tables _panier_rabais_* // effacer les autres rabais $sqlDelete = "DELETE FROM inscriptions_panier_rabais_acheteurs WHERE pra_type = 'auto' AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryDelete = $objDatabase->fxQuery($sqlDelete); for ($intCtr = 1; $intCtr <= count($arrRabais); $intCtr++) { if (isset($arrRabais[$intCtr]['rab_id'])) { $intPanierRabais = fxCheckRabais($arrRabais[$intCtr]['rab_id']); // calculer rab_montant $sqlMontants = "SELECT * FROM inscriptions_rabais WHERE rab_id = " . intval($intPanierRabais) . " AND eve_id IN(" . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . ")"; $tabMontants = $objDatabase->fxGetResults($sqlMontants); // ajouter le rabais dans panier acheteurs $sqlInsert = "INSERT INTO inscriptions_panier_rabais_acheteurs SET pra_type = 'auto', pra_id = " . intval($intPanierRabais) . ", no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryInsert = $objDatabase->fxQuery($sqlInsert); } } break; } // calculer le montant dans panier participants fxMajRabais($strNoPanier); } //MSIN-3675 fxSetRabaisauto2avant2 function fxSetRabaisauto2avant2($strAction, $strNoPanier, $tabEvenement, $strLangue) { global $objDatabase; switch($strAction) { case 'add': // ===================================================== // RABAIS AVEC CONDITION // ===================================================== // rab_condition = JSON définissant les règles (ex: {"5KM":2,"10KM":1}) // rab_epr_diff = 0 → les épreuves peuvent être identiques // rab_actif = 1 → rabais actif // rab_qte > 0 → quantité restante disponible // rab_date_limite / rab_date_limite_debut → période de validité // rab_code_manuel = 0 → rabais automatique (non saisi par l'utilisateur) // eve_id → événement concerné $sqlRabaisCondition = " SELECT * FROM ( SELECT * FROM inscriptions_rabais WHERE rab_epr_diff = 0 AND rab_actif = 1 AND rab_qte > 0 AND rab_date_limite >= '" . fxGetDate() . "' AND rab_date_limite_debut <= '" . fxGetDate() . "' AND rab_code_manuel = 0 AND rab_condition != '' AND eve_id IN( " . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . " ) ORDER BY rab_priorite, rab_date_limite ) AS rabais GROUP BY rab_condition ORDER BY rab_priorite "; $tabRabaisCondition = $objDatabase->fxGetResults($sqlRabaisCondition); // ===================================================== // RABAIS SANS CONDITION // ===================================================== // rab_condition = '' → pas de JSON → logique basée sur le nombre d’épreuves // rab_nb_epr_diff = nombre EXACT d’épreuves requis // rab_nb_epr_diff2 = nombre MINIMUM d’épreuves // rab_epr_diff = 1 → on exige des épreuves différentes // rab_noms_identiques = 1 → même nom/prénom requis // rab_code = code du rabais $sqlRabaisSansCondition = " SELECT * FROM ( SELECT * FROM inscriptions_rabais WHERE rab_actif = 1 AND rab_qte > 0 AND rab_date_limite >= '" . fxGetDate() . "' AND rab_date_limite_debut <= '" . fxGetDate() . "' AND rab_code_manuel = 0 AND rab_condition = '' AND eve_id IN( " . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . " ) ORDER BY rab_priorite, rab_date_limite ) AS rabais GROUP BY rab_code ORDER BY rab_priorite "; $tabRabaisSansCondition = $objDatabase->fxGetResults($sqlRabaisSansCondition); // ===================================================== // ÉPREUVES DU PANIER // ===================================================== // epr_id = épreuve inscrite // rab_epreuves = liste des épreuves auxquelles le rabais s’applique $sqlPanierEprDiff = " SELECT DISTINCT(epr_id) FROM inscriptions_panier_epreuves_commandees c, inscriptions_rabais r WHERE no_panier = '" . fxUnescape($strNoPanier) . "' AND FIND_IN_SET(c.epr_id, r.rab_epreuves) "; $tabPanierEprDiff = $objDatabase->fxGetResults($sqlPanierEprDiff); // Épreuves commandées (toutes) $sqlEpreuves = " SELECT c.*, e.epr_code, 0 AS rabais FROM inscriptions_panier_epreuves_commandees c, inscriptions_epreuves e WHERE c.epr_id = e.epr_id AND ep_id <> 0 AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' "; $tabEpreuves = $objDatabase->fxGetResults($sqlEpreuves); // Épreuves avec noms identiques // rab_noms_identiques = 1 → même participant requis pour appliquer rabais $sqlEpreuvesNomsIdentiques = " SELECT c.*, e.epr_code, 0 AS rabais FROM inscriptions_panier_epreuves_commandees c JOIN inscriptions_epreuves e ON c.epr_id = e.epr_id WHERE c.ep_id <> 0 AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND c.epr_id IN( SELECT epr_id FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND LOWER(CONCAT(par_prenom,' ',par_nom)) IN( SELECT LOWER(CONCAT(par_prenom,' ',par_nom)) FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' GROUP BY LOWER(CONCAT(par_prenom,' ',par_nom)) HAVING COUNT(LOWER(CONCAT(par_prenom,' ',par_nom))) > 1 ) ) "; $tabEpreuvesNomsIdentiques = $objDatabase->fxGetResults($sqlEpreuvesNomsIdentiques); // ===================================================== // TRAITEMENT RABAIS AVEC CONDITION // ===================================================== // rab_condition = JSON → règles exactes par type d’épreuve // max = nombre total restant à satisfaire // x_participants = index des participants utilisés $intRabaisCtr = 1; $arrRabais = []; for ($intCtr = 1; $intCtr <= count($tabRabaisCondition); $intCtr++) { $arrCondition = json_decode($tabRabaisCondition[$intCtr]['rab_condition']); $intNbRabais = 1; if ($arrCondition != '') { $arrRabais[$intRabaisCtr]['max'] = 0; foreach ($arrCondition as $key => $value) { $arrRabais[$intRabaisCtr][$key] = $value; $arrRabais[$intRabaisCtr]['max'] += $value; } $arrRabais[$intRabaisCtr]['x_rabais'] = $intCtr; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisCondition[$intCtr]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisCondition[$intCtr]['rab_condition']; if ($tabRabaisCondition[$intCtr]['rab_noms_identiques'] == 1) { // Seulement participants avec même nom for ($intCtr2 = 1; $intCtr2 <= count($tabEpreuvesNomsIdentiques); $intCtr2++) { $strCodeEpreuve = $tabEpreuvesNomsIdentiques[$intCtr2]['epr_code']; if ($tabEpreuvesNomsIdentiques[$intCtr2]['rabais'] != 1) { if ( array_key_exists($strCodeEpreuve, $arrCondition) && $arrRabais[$intRabaisCtr][$strCodeEpreuve] > 0 ) { $arrRabais[$intRabaisCtr][$strCodeEpreuve] -= 1; $arrRabais[$intRabaisCtr]['x_participants'][$intNbRabais] = $intCtr2; $arrRabais[$intRabaisCtr]['max'] -= 1; $intNbRabais++; } } } } else { // Tous les participants for ($intCtr2 = 1; $intCtr2 <= count($tabEpreuves); $intCtr2++) { $strCodeEpreuve = $tabEpreuves[$intCtr2]['epr_code']; if ($tabEpreuves[$intCtr2]['rabais'] != 1) { if ( array_key_exists($strCodeEpreuve, $arrCondition) && $arrRabais[$intRabaisCtr][$strCodeEpreuve] > 0 ) { $arrRabais[$intRabaisCtr][$strCodeEpreuve] -= 1; $arrRabais[$intRabaisCtr]['x_participants'][$intNbRabais] = $intCtr2; $arrRabais[$intRabaisCtr]['max'] -= 1; $intNbRabais++; } } } } // max == 0 → toutes les conditions respectées → rabais valide if ($arrRabais[$intRabaisCtr]['max'] == 0) { $mem_parti = $arrRabais[$intRabaisCtr]['x_participants']; foreach ($mem_parti as $key => $value) { $tabEpreuves[$value]['rabais'] = 1; } $intRabaisCtr++; } else { unset($arrRabais[$intRabaisCtr]); } } } // ===================================================== // TRAITEMENT RABAIS SANS CONDITION // ===================================================== for ($i = 1; $i <= count($tabRabaisSansCondition); $i++) { if (intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff']) > 0) { if (intval($tabRabaisSansCondition[$i]['rab_epr_diff']) === 1) { if (intval($tabRabaisSansCondition[$i]['rab_noms_identiques']) === 1) { // Compte seulement participants avec même nom if ($tabEpreuvesNomsIdentiques != null) { $arrEpreeuve = array_map(function($arr) { return $arr['epr_id']; }, $tabEpreuvesNomsIdentiques); $intNbEpr = count(array_unique($arrEpreeuve)); } else { $intNbEpr = 1; } } else { $intNbEpr = count($tabPanierEprDiff); } } else { $intNbEpr = count($tabEpreuves); } // Nombre EXACT d’épreuves requis $mem_int_code = $tabRabaisSansCondition[$i]['rab_nb_epr_diff']; $intNbRabais = 1; $arrRabais[$intRabaisCtr]['max'] = 0; if ( ( intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff_de']) > 0 && $intNbEpr >= intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff_de']) && $intNbEpr <= $mem_int_code ) || ( intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff_de']) == 0 && $intNbEpr == $mem_int_code ) ) { $arrRabais[$intRabaisCtr]['x_rabais'] = $i; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisSansCondition[$i]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisSansCondition[$i]['rab_condition']; $arrRabais[$intRabaisCtr]['code'] = $tabRabaisSansCondition[$i]['rab_code']; } $intRabaisCtr++; } elseif ($tabRabaisSansCondition[$i]['rab_nb_epr_diff2'] > 0) { // Nombre MINIMUM d’épreuves requis $intNbEpr = count($tabEpreuves); $mem_int_code = $tabRabaisSansCondition[$i]['rab_nb_epr_diff2']; $intNbRabais = 1; $arrRabais[$intRabaisCtr]['max'] = 0; if ($mem_int_code <= $intNbEpr) { $arrRabais[$intRabaisCtr]['x_rabais'] = $i; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisSansCondition[$i]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisSansCondition[$i]['rab_condition']; $arrRabais[$intRabaisCtr]['code'] = $tabRabaisSansCondition[$i]['rab_code']; } $intRabaisCtr++; } } // ===================================================== // ÉCRITURE DB // ===================================================== // inscriptions_panier_rabais_acheteurs = rabais appliqués au panier // pra_type = 'auto' → rabais automatique // DELETE → reset des rabais avant recalcul $sqlDelete = " DELETE FROM inscriptions_panier_rabais_acheteurs WHERE pra_type = 'auto' AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' "; $qryDelete = $objDatabase->fxQuery($sqlDelete); for ($intCtr = 1; $intCtr <= count($arrRabais); $intCtr++) { if (isset($arrRabais[$intCtr]['rab_id'])) { $intPanierRabais = fxCheckRabais($arrRabais[$intCtr]['rab_id']); // rab_montant / rab_pourcent récupéré ici $sqlMontants = " SELECT * FROM inscriptions_rabais WHERE rab_id = " . intval($intPanierRabais) . " AND eve_id IN( " . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . " ) "; $tabMontants = $objDatabase->fxGetResults($sqlMontants); $sqlInsert = " INSERT INTO inscriptions_panier_rabais_acheteurs SET pra_type = 'auto', pra_id = " . intval($intPanierRabais) . ", no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' "; $qryInsert = $objDatabase->fxQuery($sqlInsert); } } break; } // ===================================================== // RECALCUL FINAL // ===================================================== // Recalcule le montant des rabais dans le panier fxMajRabais($strNoPanier); } function fxSetRabaisauto2($strAction, $strNoPanier, $tabEvenement, $strLangue) { global $objDatabase; switch($strAction) { case 'add': // ===================================================== // RABAIS AVEC CONDITION // ===================================================== // rab_condition = JSON définissant les règles (ex: {"5KM":2,"10KM":1}) // rab_epr_diff = 0 → les épreuves peuvent être identiques // rab_actif = 1 → rabais actif // rab_qte > 0 → quantité restante disponible // rab_date_limite / rab_date_limite_debut → période de validité // rab_code_manuel = 0 → rabais automatique (non saisi par l'utilisateur) // eve_id → événement concerné $sqlRabaisCondition = " SELECT * FROM ( SELECT * FROM inscriptions_rabais WHERE rab_epr_diff = 0 AND rab_actif = 1 AND rab_qte > 0 AND rab_date_limite >= '" . fxGetDate() . "' AND rab_date_limite_debut <= '" . fxGetDate() . "' AND rab_code_manuel = 0 AND rab_condition != '' AND eve_id IN( " . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . " ) ORDER BY rab_priorite, rab_date_limite ) AS rabais GROUP BY rab_condition ORDER BY rab_priorite "; $tabRabaisCondition = $objDatabase->fxGetResults($sqlRabaisCondition); // ===================================================== // RABAIS SANS CONDITION // ===================================================== // rab_condition = '' → pas de JSON → logique basée sur le nombre d’épreuves // rab_nb_epr_diff = nombre EXACT d’épreuves requis // rab_nb_epr_diff2 = nombre MINIMUM d’épreuves // rab_epr_diff = 1 → on exige des épreuves différentes // rab_noms_identiques = 1 → même nom/prénom requis // rab_code = code du rabais $sqlRabaisSansCondition = " SELECT * FROM ( SELECT * FROM inscriptions_rabais WHERE rab_actif = 1 AND rab_qte > 0 AND rab_date_limite >= '" . fxGetDate() . "' AND rab_date_limite_debut <= '" . fxGetDate() . "' AND rab_code_manuel = 0 AND rab_condition = '' AND eve_id IN( " . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . " ) ORDER BY rab_priorite, rab_date_limite ) AS rabais GROUP BY rab_code ORDER BY rab_priorite "; $tabRabaisSansCondition = $objDatabase->fxGetResults($sqlRabaisSansCondition); // ===================================================== // ÉPREUVES DU PANIER // ===================================================== // epr_id = épreuve inscrite // rab_epreuves = liste des épreuves auxquelles le rabais s’applique $sqlPanierEprDiff = " SELECT DISTINCT(epr_id) FROM inscriptions_panier_epreuves_commandees c, inscriptions_rabais r WHERE no_panier = '" . fxUnescape($strNoPanier) . "' AND FIND_IN_SET(c.epr_id, r.rab_epreuves) "; $tabPanierEprDiff = $objDatabase->fxGetResults($sqlPanierEprDiff); // Épreuves commandées (toutes) $sqlEpreuves = " SELECT c.*, e.epr_code, 0 AS rabais FROM inscriptions_panier_epreuves_commandees c, inscriptions_epreuves e WHERE c.epr_id = e.epr_id AND ep_id <> 0 AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' "; $tabEpreuves = $objDatabase->fxGetResults($sqlEpreuves); // Épreuves avec noms identiques // rab_noms_identiques = 1 → même participant requis pour appliquer rabais $sqlEpreuvesNomsIdentiques = " SELECT c.*, e.epr_code, 0 AS rabais FROM inscriptions_panier_epreuves_commandees c JOIN inscriptions_epreuves e ON c.epr_id = e.epr_id WHERE c.ep_id <> 0 AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND c.epr_id IN( SELECT epr_id FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' AND LOWER(CONCAT(par_prenom,' ',par_nom)) IN( SELECT LOWER(CONCAT(par_prenom,' ',par_nom)) FROM inscriptions_panier_participants WHERE no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' GROUP BY LOWER(CONCAT(par_prenom,' ',par_nom)) HAVING COUNT(LOWER(CONCAT(par_prenom,' ',par_nom))) > 1 ) ) "; $tabEpreuvesNomsIdentiques = $objDatabase->fxGetResults($sqlEpreuvesNomsIdentiques); // ===================================================== // TRAITEMENT RABAIS AVEC CONDITION // ===================================================== // rab_condition = JSON → règles exactes par type d’épreuve // max = nombre total restant à satisfaire // x_participants = index des participants utilisés $intRabaisCtr = 1; $arrRabais = []; for ($intCtr = 1; $intCtr <= count($tabRabaisCondition); $intCtr++) { $arrCondition = json_decode($tabRabaisCondition[$intCtr]['rab_condition']); $intNbRabais = 1; if ($arrCondition != '') { $arrRabais[$intRabaisCtr]['max'] = 0; foreach ($arrCondition as $key => $value) { $arrRabais[$intRabaisCtr][$key] = $value; $arrRabais[$intRabaisCtr]['max'] += $value; } $arrRabais[$intRabaisCtr]['x_rabais'] = $intCtr; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisCondition[$intCtr]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisCondition[$intCtr]['rab_condition']; if ($tabRabaisCondition[$intCtr]['rab_noms_identiques'] == 1) { // Seulement participants avec même nom for ($intCtr2 = 1; $intCtr2 <= count($tabEpreuvesNomsIdentiques); $intCtr2++) { $strCodeEpreuve = $tabEpreuvesNomsIdentiques[$intCtr2]['epr_code']; if ($tabEpreuvesNomsIdentiques[$intCtr2]['rabais'] != 1) { if ( array_key_exists($strCodeEpreuve, $arrCondition) && $arrRabais[$intRabaisCtr][$strCodeEpreuve] > 0 ) { $arrRabais[$intRabaisCtr][$strCodeEpreuve] -= 1; $arrRabais[$intRabaisCtr]['x_participants'][$intNbRabais] = $intCtr2; $arrRabais[$intRabaisCtr]['max'] -= 1; $intNbRabais++; } } } } else { // Tous les participants for ($intCtr2 = 1; $intCtr2 <= count($tabEpreuves); $intCtr2++) { $strCodeEpreuve = $tabEpreuves[$intCtr2]['epr_code']; if ($tabEpreuves[$intCtr2]['rabais'] != 1) { if ( array_key_exists($strCodeEpreuve, $arrCondition) && $arrRabais[$intRabaisCtr][$strCodeEpreuve] > 0 ) { $arrRabais[$intRabaisCtr][$strCodeEpreuve] -= 1; $arrRabais[$intRabaisCtr]['x_participants'][$intNbRabais] = $intCtr2; $arrRabais[$intRabaisCtr]['max'] -= 1; $intNbRabais++; } } } } // max == 0 → toutes les conditions respectées → rabais valide if ($arrRabais[$intRabaisCtr]['max'] == 0) { $mem_parti = $arrRabais[$intRabaisCtr]['x_participants']; foreach ($mem_parti as $key => $value) { $tabEpreuves[$value]['rabais'] = 1; } $intRabaisCtr++; } else { unset($arrRabais[$intRabaisCtr]); } } } // ===================================================== // TRAITEMENT RABAIS SANS CONDITION // ===================================================== for ($i = 1; $i <= count($tabRabaisSansCondition); $i++) { if (intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff']) > 0) { if (intval($tabRabaisSansCondition[$i]['rab_epr_diff']) === 1) { if (intval($tabRabaisSansCondition[$i]['rab_noms_identiques']) === 1) { // Compte seulement participants avec même nom if ($tabEpreuvesNomsIdentiques != null) { $arrEpreeuve = array_map(function($arr) { return $arr['epr_id']; }, $tabEpreuvesNomsIdentiques); $intNbEpr = count(array_unique($arrEpreeuve)); } else { $intNbEpr = 1; } } else { // atester MSIN-3765 //$intNbEpr = count($tabPanierEprDiff); $arrEpreeuve = array_map(function($arr) { return $arr['epr_id']; }, $tabEpreuves); $intNbEpr = count(array_unique($arrEpreeuve)); } } else { $intNbEpr = count($tabEpreuves); } // Nombre EXACT d’épreuves requis $mem_int_code = $tabRabaisSansCondition[$i]['rab_nb_epr_diff']; $intNbRabais = 1; $arrRabais[$intRabaisCtr]['max'] = 0; if ( ( intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff_de']) > 0 && $intNbEpr >= intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff_de']) && $intNbEpr <= $mem_int_code ) || ( intval($tabRabaisSansCondition[$i]['rab_nb_epr_diff_de']) == 0 && $intNbEpr == $mem_int_code ) ) { $arrRabais[$intRabaisCtr]['x_rabais'] = $i; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisSansCondition[$i]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisSansCondition[$i]['rab_condition']; $arrRabais[$intRabaisCtr]['code'] = $tabRabaisSansCondition[$i]['rab_code']; } $intRabaisCtr++; } elseif ($tabRabaisSansCondition[$i]['rab_nb_epr_diff2'] > 0) { // Nombre MINIMUM d’épreuves requis $intNbEpr = count($tabEpreuves); $mem_int_code = $tabRabaisSansCondition[$i]['rab_nb_epr_diff2']; $intNbRabais = 1; $arrRabais[$intRabaisCtr]['max'] = 0; if ($mem_int_code <= $intNbEpr) { $arrRabais[$intRabaisCtr]['x_rabais'] = $i; $arrRabais[$intRabaisCtr]['rab_id'] = $tabRabaisSansCondition[$i]['rab_id']; $arrRabais[$intRabaisCtr]['condition'] = $tabRabaisSansCondition[$i]['rab_condition']; $arrRabais[$intRabaisCtr]['code'] = $tabRabaisSansCondition[$i]['rab_code']; } $intRabaisCtr++; } } // ===================================================== // ÉCRITURE DB // ===================================================== // inscriptions_panier_rabais_acheteurs = rabais appliqués au panier // pra_type = 'auto' → rabais automatique // DELETE → reset des rabais avant recalcul $sqlDelete = " DELETE FROM inscriptions_panier_rabais_acheteurs WHERE pra_type = 'auto' AND no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' "; $qryDelete = $objDatabase->fxQuery($sqlDelete); for ($intCtr = 1; $intCtr <= count($arrRabais); $intCtr++) { if (isset($arrRabais[$intCtr]['rab_id'])) { $intPanierRabais = fxCheckRabais($arrRabais[$intCtr]['rab_id']); // rab_montant / rab_pourcent récupéré ici $sqlMontants = " SELECT * FROM inscriptions_rabais WHERE rab_id = " . intval($intPanierRabais) . " AND eve_id IN( " . intval($tabEvenement['general']['eve_id']) . ", " . intval($tabEvenement['general']['eve_id_membership']) . " ) "; $tabMontants = $objDatabase->fxGetResults($sqlMontants); $sqlInsert = " INSERT INTO inscriptions_panier_rabais_acheteurs SET pra_type = 'auto', pra_id = " . intval($intPanierRabais) . ", no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "' "; $qryInsert = $objDatabase->fxQuery($sqlInsert); } } break; } // ===================================================== // RECALCUL FINAL // ===================================================== // Recalcule le montant des rabais dans le panier fxMajRabais($strNoPanier); } function fxCheckEpreuveRabais($tab_data, $int_eve_id, $int_epr_id, $int_rab_id){ /* * get rab_epreuves from inscriptions_rabais * */ var_dump($tab_data['rab_epreuves']); } // fonction qui vérifie si l'épreuve doit générer un don MSIN-2566 (JSP) // param : no panier // créé : 2018-12-16 function fxCheckGenereDon($strNoPanier) { global $objDatabase; // désactiver $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees c, inscriptions_panier_epreuves e SET c.pec_don_actif = 0 WHERE c.epr_id = e.epr_id AND (c.pec_prix - c.rab_montant) < e.epr_montant_min_don AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); // activer $sqlUpdate = "UPDATE inscriptions_panier_epreuves_commandees c, inscriptions_panier_epreuves e SET c.pec_don_actif = 1 WHERE c.epr_id = e.epr_id AND (c.pec_prix - c.rab_montant) >= e.epr_montant_min_don AND c.no_panier = '" . $objDatabase->fxEscape($strNoPanier) . "'"; $qryUpdate = $objDatabase->fxQuery($sqlUpdate); }