paniers/functions/functions_contrats.php

264 lines
10 KiB
PHP

<?php
////////////////////////////////////////////////////////////////////////
// CONTRATS ////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// LIST
$allowContratsListOrder = array(
'ref' => "réf.",
'groupe' => "groupe",
'type' => 'type de contrat',
'nom' => "nom",
'prenom' => "prénom",
'date' => "début de contrat",
'frequence' => "fréquence",
'panier_type' => "type de panier",
'nb_paniers_livre' => "nb. de paniers livrés",
'nb_paniers_restant' => "nb. de paniers restant",
'lieu_depot' => "lieu de dépôt"
);
function getContratsList($order='id',$sens='ASC', $filtres=array(), $search=false) {
// ARCHIVES OLD CONTRATS
archiveOldContrat();
// LIST
$list = array();
$sql = getContratsTableSelectBaseSQL()." WHERE ".CONTRATS_TABLE.".`del`=0";
// FILTRES
if(array_key_exists('client', $filtres) && (int)$filtres['client']>0) $sql.=" AND ".CONTRATS_TABLE.".`client`=".intval($filtres['client']);
if(array_key_exists('groupe', $filtres) && (int)$filtres['groupe']>0) $sql.=" AND ".CONTRATS_TABLE.".`groupe`=".intval($filtres['groupe']);
if(array_key_exists('frequence', $filtres) && $filtres['frequence']!="") {
switch($filtres['frequence']) {
case 'hebdo' : $sql.=" AND ".CONTRATS_TABLE.".`frequence`='hebdo'"; break;
case 'quinz' : $sql.=" AND ".CONTRATS_TABLE.".`frequence`='quinz'"; break;
case 'quinz_A' : $sql.=" AND ".CONTRATS_TABLE.".`frequence`='quinz' AND ".CONTRATS_TABLE.".`quinz_groupe`='A'"; break;
case 'quinz_B' : $sql.=" AND ".CONTRATS_TABLE.".`frequence`='quinz' AND ".CONTRATS_TABLE.".`quinz_groupe`='B'"; break;
}
}
if(array_key_exists('panier', $filtres) && (int)$filtres['panier']>0) $sql.=" AND ".CONTRATS_TABLE.".`panier_type`=".intval($filtres['panier']);
if(array_key_exists('lieu', $filtres) && (int)$filtres['lieu']>0) $sql.=" AND ".CONTRATS_TABLE.".`lieu_depot`=".intval($filtres['lieu']);
if(array_key_exists('archive', $filtres) && (int)$filtres['archive']>=0) $sql.=" AND ".CONTRATS_TABLE.".`archive`=".intval($filtres['archive']);
// SEARCH
if($search && $search!="") {
$parts = explode(" ", $search);
if(is_array($parts) && count($parts>0)) {
$search_sql = "";
foreach($parts as $p) {
if($p!="") $search_sql .= (($search_sql!="") ? " OR " : "").buildContratsListSearchSQL($p);
}
if($search_sql!="") $sql .= " AND (".$search_sql.")";
}
}
// ORDRE
$sql.=" ORDER BY ";
if($order=='ref') $sql .= CONTRATS_TABLE.".`ref`";
else if($order=='groupe') $sql .= CONTRATS_TABLE.".`groupe`";
else if($order=='type') $sql .= CONTRATS_TYPES_TABLE.".`nom`";
else if($order=='nom') $sql .= CLIENTS_TABLE.".`nom`";
else if($order=='prenom') $sql .= CLIENTS_TABLE.".`prenom`";
else if($order=='date') $sql .= CONTRATS_TABLE.".`date`";
else if($order=='frequence') $sql .= CONTRATS_TABLE.".`frequence`";
else if($order=='panier_type') $sql .= PANIERS_TYPES_TABLE.".`nom`";
else if($order=='nb_paniers_livre') $sql .= CONTRATS_PANIERS_STATUT.".`nb_paniers_livres`";
else if($order=='nb_paniers_restant') $sql .= CONTRATS_PANIERS_STATUT.".`nb_paniers_restants`";
else if($order=='lieu_depot') $sql .= LIEUX_TABLE.".`nom`";
else $sql .= CLIENTS_TABLE.".`nom`";
// SENS
if($sens=='DESC') $sql .= ' DESC';
else $sql .= ' ASC';
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
foreach($r['datas'] as $i) {
if(!$i["type_ref"]>0) $i["type_nom"] = "personnalisé <small>(".$i["groupe_nom"]." - ".$i["nb_paniers"]." x ".$i["panier_type_nom"]." - ".CONTRATS_FREQUENCES[$i["frequence"]].")</small>";
$i["date_print"] = formatDate($i["date"], "mysql_date", "date");
$i["frequence_print"] = CONTRATS_FREQUENCES[$i["frequence"]];
if($i["frequence"] == "quinz") $i["frequence_print"] .= " (groupe ".$i["quinz_groupe"].')';
$i["warning_nb_paniers"] = ($i["frequence"]=="hebdo" && $i["nb_paniers_restants"]<=WARNING_NB_PANIERS_HEBDO)
|| ($i["frequence"]=="quinz" && $i["nb_paniers_restants"]<=WARNING_NB_PANIERS_QUINZE);
$list[$i['ref']] = $i;
}
}
else {
$er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des contrats dans le base de données !".$er;
}
return $list;
}
// GET DATAS
function getContratDatas($id) {
$i = array();
$sql = getContratsTableSelectBaseSQL()." WHERE ".CONTRATS_TABLE.".`ref`=".intval($id);
$r = $GLOBALS['db_admin']['man']->select($sql,1);
if(!$r['erreur']) {
$i = $r['datas'];
if(!$i["type_ref"]>0) $i["type_nom"] = "personnalisé <small>(".$i["groupe_nom"]." - ".$i["nb_paniers"]." x ".$i["panier_type_nom"]." - ".CONTRATS_FREQUENCES[$i["frequence"]].")</small>";
$i["date_print"] = formatDate($i["date"], "mysql_date", "date");
$i["frequence_print"] = CONTRATS_FREQUENCES[$i["frequence"]];
if($i["frequence"] == "quinz") $i["frequence_print"] .= " (groupe ".$i["quinz_groupe"].')';
}
else {
$er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération des informations du contrat dans le base de données !".$er;
}
return $i;
}
function getContratLastPanier($id) {
$i = false;
$sql = getLivraisonsPaniersSelectBaseSQL()." WHERE ".CONTRATS_TABLE.".`ref`=$id ORDER BY ".LIVRAISONS_TABLE.".`date` ASC LIMIT 0,1";
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
if(count($r['datas'])>0) {
$i = $r['datas'][0];
$i["livraison_date_print"] = formatDate($i["livraison_date"], "mysql_date", "date");
$i["frequence_print"] = CONTRATS_FREQUENCES[$i["frequence"]];
if($i["frequence"] == "quinz") $i["frequence_print"] .= " (groupe ".$i["quinz_groupe"].')';
}
}
else {
$er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération des informations du contrat dans le base de données !".$er;
}
return $i;
}
// ADD / UPDATE DATAS
function getContratDatasFromRequest() {
$datas = getRequestTableDatas(CONTRATS_TABLE_STRUCT);
if(isset($datas['frequence']) && $datas['frequence']=="hebdo") $datas['quinz_groupe'] = NULL;
return $datas;
}
function addContrat($datas) {
return addDatasInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
CONTRATS_TABLE, // TABLE NAME
CONTRATS_TABLE_STRUCT, // TABLE STRUCTURE
$datas, // DATAS
"du contrat" // ERROR STRING
);
}
function updateContrat($id, $datas) {
return updateDatasInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
CONTRATS_TABLE, // TABLE NAME
CONTRATS_TABLE_STRUCT, // TABLE STRUCTURE
$id, // ID
$datas, // DATAS
"au contrat", // NULL STRING
"du contrat" // ERROR STRING
);
}
function archiveContrat($id, $state) {
$datas = array(
"archive" => ($state == true) ? 1 : 0,
"force_not_archive" => ($state == true) ? 0 : 1,
);
$r = updateContrat($id, $datas);
if(!(int)$r>0) {
$er = "ERREUR : une erreur est survenue ";
$er.= ($state == true) ? "à l'archivage" : "au désarchivage";
$er = " du contrat ! ($r)";
return $er;
}
return 1;
}
function archiveOldContrat() {
$refs = "0";
$sql = "SELECT ".CONTRATS_TABLE.".`ref` FROM ".CONTRATS_TABLE
." LEFT JOIN ".CONTRATS_PANIERS_STATUT." ON ".CONTRATS_TABLE.".`ref`=".CONTRATS_PANIERS_STATUT.".`ref`"
." WHERE ".CONTRATS_PANIERS_STATUT.".`nb_paniers_restants`<=0"
." AND ".CONTRATS_TABLE.".`force_eligible`=0"
." AND ".CONTRATS_TABLE.".`archive`=0";
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
if(count($r['datas']>0)) {
$date = new DateTime(DATE_TIME_ZONE);
$dateInt = new DateInterval( "P".AUTO_ARCHIVE_OLD_CONTRATS_DELAY."D" );
$date->sub( $dateInt );
foreach($r['datas'] as $i) {
$lastPanier = getContratLastPanier($i['ref']);
if($lastPanier) {
$lastDate = DateTime::createFromFormat("Y-m-d", $lastPanier["livraison_date"], new DateTimeZone(DATE_TIME_ZONE));
if($lastDate < $date) $refs .= ",".$i['ref'];
}
}
}
}
else {
$er = "</br>sql: ".$sql."</br>error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des contrats expirés dans le base de données !".$er;
return;
}
if($refs != "0") {
$r = updateDatasInTableByCondition(
$GLOBALS['db_admin']['man'], // DB MANAGER
CONTRATS_TABLE, // TABLE NAME
CONTRATS_TABLE_STRUCT, // TABLE STRUCTURE
"WHERE ref IN ($refs)", // CONDITION
array("archive" => 1), // DATAS
"au contrat", // NULL STRING
"du contrat" // ERROR STRING
);
if(!$r>0) $GLOBALS['errors'][] = "ERREUR : une erreur est survenue durant l'archivage automatique des anciens contrats...<br/>($r)";
// else addDebug($refs, "ARCHIVE OLD CONTRATS DONE !");
}
}
function deleteContrat($id) {
return deleteItemInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
CONTRATS_TABLE, // TABLE NAME
$id, // ID
"du contrat" // ERROR STRING
);
}
function eraseContrat($id) {
return eraseItemInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
CONTRATS_TABLE, // TABLE NAME
$id, // ID
"du contrat" // ERROR STRING
);
}