1482 lines
76 KiB
PHP
1482 lines
76 KiB
PHP
<?php
|
||
// fonction qui vérifie si le rabais fait déjà partie du panier et retourner le pra_id (JSP)
|
||
// param : id du rabais
|
||
// créé : 2013-06-19
|
||
function fxCheckRabais($intRabais) {
|
||
global $objDatabase;
|
||
|
||
$sqlCheck = "SELECT pra_id FROM inscriptions_panier_rabais WHERE rab_id = " . intval($intRabais) . " ORDER BY pra_id LIMIT 1";
|
||
$intPanierRabais = $objDatabase->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("<br>");
|
||
$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);
|
||
} |