"réf.",
'paniers_groupe' => "groupe de paniers",
'date' => "date",
'quinz_groupe' => "groupe quinzaine",
'nb_paniers' => "nb. de paniers"
);
function getLivraisonsList($order='id',$sens='ASC', $groupe=0, $archive=0) {
// ARCHIVES OLD LIVRAISONS
archiveOldLivraison();
// LIST
$list = array();
$sql = getLivraisonsTableSelectBaseSQL()." WHERE ".LIVRAISONS_TABLE.".`del`=0";
if((int)$groupe>0) $sql.=" AND ".LIVRAISONS_TABLE.".`paniers_groupe`=".intval($groupe);
if((int)$archive>=0) $sql.=" AND ".LIVRAISONS_TABLE.".`archive`=".intval($archive);
// ORDRE
$sql.=" ORDER BY ";
if($order=='ref') $sql .= LIVRAISONS_TABLE.".`ref`";
else if($order=='paniers_groupe') $sql .= LIVRAISONS_TABLE.".`paniers_groupe`";
else if($order=='date') $sql .= LIVRAISONS_TABLE.".`date`";
else if($order=='quinz_groupe') $sql .= LIVRAISONS_TABLE.".`quinz_groupe`";
else if($order=='nb_paniers') $sql .= LIVRAISONS_NB_PANIERS_VIEW.".`nb_paniers`";
else $sql .= LIVRAISONS_TABLE.".`date`";
// SENS
if($sens=='DESC') $sql .= ' DESC';
else $sql .= ' ASC';
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
foreach($r['datas'] as $i) {
$i["date_print"] = formatDate($i["date"], "mysql_date", "date");
$i["nb_paniers"] = intval($i["nb_paniers"]);
$list[$i['ref']] = $i;
}
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des livraisons dans le base de données !".$er;
}
return $list;
}
function getLivraisonLastQuinzGroupeAtDate($groupe, $date) {
$grp = NULL;
$sql = "SELECT ".LIVRAISONS_TABLE.".`quinz_groupe` FROM ".LIVRAISONS_TABLE
." WHERE ".LIVRAISONS_TABLE.".del=0"
." AND ".LIVRAISONS_TABLE.".paniers_groupe=".intval($groupe)
." AND ".LIVRAISONS_TABLE.".date<='".$date."'"
." ORDER BY ".LIVRAISONS_TABLE.".date DESC LIMIT 0,1";
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
if(count($r['datas'])>0) $grp = $r['datas'][0]["quinz_groupe"];
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération du groupe de la dernière livraison dans le base de données !".$er;
}
return $grp;
}
// GET DATAS
function getLivraisonDatas($id) {
$i = array();
$sql = getLivraisonsTableSelectBaseSQL()." WHERE ".LIVRAISONS_TABLE.".`ref`=".intval($id);
$r = $GLOBALS['db_admin']['man']->select($sql,1);
if(!$r['erreur']) {
$i = $r['datas'];
$i["date_print"] = formatDate($i["date"], "mysql_date", "date");
$i["date_long_print"] = formatDate($i["date"], "mysql_date", "print_date_with_day");
$i["nb_paniers"] = intval($i["nb_paniers"]);
$i["lieux"] = getLivraisonLieux($id);
$i["paniers"] = getLivraisonPaniers($id);
$i["paniers_contrats"] = getLivraisonPaniersContratsList($id);
$i["nb_paniers"] = getLivraisonNbPaniers($id);
$i["legumes"] = getLivraisonLegumes($id, $i["nb_paniers"]);
$i["total_legumes"] = calcLivraisonTotalLegumes($i["legumes"]);
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération des informations de la livraison dans le base de données !".$er;
}
return $i;
}
// ADD / UPDATE DATAS
function getLivraisonDatasFromRequest() {
$datas = getRequestTableDatas(LIVRAISONS_TABLE_STRUCT);
// PANIERS
$datas['paniers'] = array();
if(isset($_REQUEST['paniers'])) $datas['paniers'] = json_decode($_REQUEST['paniers'], true);
// PANIERS COMPO
$datas['paniers_compo'] = array();
if(isset($_REQUEST['paniersCompo'])) $datas['paniers_compo'] = json_decode($_REQUEST['paniersCompo'], true);
return $datas;
}
function addLivraison($datas) {
return addDatasInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_TABLE, // TABLE NAME
LIVRAISONS_TABLE_STRUCT, // TABLE STRUCTURE
$datas, // DATAS
"de la livraison" // ERROR STRING
);
}
function updateLivraison($id, $datas) {
return updateDatasInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_TABLE, // TABLE NAME
LIVRAISONS_TABLE_STRUCT, // TABLE STRUCTURE
$id, // ID
$datas, // DATAS
"à la livraison", // NULL STRING
"de la livraison" // ERROR STRING
);
}
function archiveLivraison($id, $state) {
$datas = array(
"archive" => ($state == true) ? 1 : 0,
"force_not_archive" => ($state == true) ? 0 : 1,
);
$r = updateLivraison($id, $datas);
if(!(int)$r>0) {
$er = "ERREUR : une erreur est survenue ";
$er.= ($state == true) ? "à l'archivage" : "au désarchivage";
$er = " de la livraison ! ($r)";
return $er;
}
return 1;
}
function archiveOldLivraison() {
$date = new DateTime(DATE_TIME_ZONE);
$dateInt = new DateInterval( "P".AUTO_ARCHIVE_OLD_LIVRAISONS_DELAY."D" );
$date->sub( $dateInt );
$condition = "WHERE date < '".$date->format("Y-m-d")."' AND force_not_archive=0";
$r = updateDatasInTableByCondition(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_TABLE, // TABLE NAME
LIVRAISONS_TABLE_STRUCT, // TABLE STRUCTURE
$condition, // CONDITION
array("archive" => 1), // DATAS
"aux livraisons", // NULL STRING
"des livraisons" // ERROR STRING
);
if(!$r>0) $GLOBALS['errors'][] = "ERREUR : une erreur est survenue durant l'archivage automatique des anciennes livraisons...
($r)";
// else addDebug("ARCHIVE OLD LIVRAISONS DONE !");
}
function deleteLivraison($id) {
return deleteItemInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_TABLE, // TABLE NAME
$id, // ID
"de la livraison" // ERROR STRING
);
}
function eraseLivraison($id) {
return eraseItemInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_TABLE, // TABLE NAME
$id, // ID
"de la livraison" // ERROR STRING
);
}
////////////////////////////////////////////////////////////////////////
// LIVRAISONS - LIEUX //////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function getLivraisonLieux($livraison) {
$list = array();
$sql = "SELECT "
.CONTRATS_TABLE.".`lieu_depot` as 'ref',"
.LIEUX_TABLE.".`nom` as 'nom',"
."count(*) as 'nb_paniers'"
." FROM ".LIVRAISONS_PANIERS_TABLE
." LEFT JOIN ".CONTRATS_TABLE." ON ".LIVRAISONS_PANIERS_TABLE.".`contrat`=".CONTRATS_TABLE.".`ref`"
." LEFT JOIN ".LIEUX_TABLE." ON ".CONTRATS_TABLE.".`lieu_depot`=".LIEUX_TABLE.".`ref`"
." WHERE ".LIVRAISONS_PANIERS_TABLE.".`livraison`=".intval($livraison)
." GROUP BY ".CONTRATS_TABLE.".`lieu_depot`";
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
foreach($r['datas'] as $i) {
$i['ref'] = intval($i['ref']);
$i['nb_paniers'] = intval($i['nb_paniers']);
$i['paniers'] = getLivraisonPaniers($livraison, $i['ref']);
$list[$i['ref']] = $i;
}
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des lieux de livraison dans le base de données !".$er;
}
return $list;
}
////////////////////////////////////////////////////////////////////////
// LIVRAISONS - PANIERS ////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function getLivraisonPaniersEligibles($paniers_groupe, $date, $quinz_groupe) {
$list = array();
$sql = "SELECT "
.CONTRATS_TABLE.".`ref` as 'contrat_ref',"
.CONTRATS_TABLE.".`client` as 'client_ref',"
.CLIENTS_TABLE.".`nom` as 'client_nom',"
.CLIENTS_TABLE.".`prenom` as 'client_prenom',"
.CONTRATS_TABLE.".`panier_type` as 'panier_type_ref',"
.PANIERS_TYPES_TABLE.".`nom` as 'panier_type_nom',"
.CONTRATS_TABLE.".`frequence`,"
.CONTRATS_TABLE.".`quinz_groupe`,"
.CONTRATS_TABLE.".`nb_paniers`,"
.CONTRATS_TABLE.".`lieu_depot` as 'lieu_depot_ref',"
.LIEUX_TABLE.".`nom` as 'lieu_depot_nom',"
.CONTRATS_TABLE.".`np_paniers_distrib_avt_saisie`,"
.CONTRATS_TABLE.".`force_eligible`"
." FROM ".CONTRATS_TABLE
." LEFT JOIN ".CLIENTS_TABLE." ON ".CONTRATS_TABLE.".`client`=".CLIENTS_TABLE.".`ref`"
." LEFT JOIN ".PANIERS_TYPES_TABLE." ON ".CONTRATS_TABLE.".`panier_type`=".PANIERS_TYPES_TABLE.".`ref`"
." LEFT JOIN ".LIEUX_TABLE." ON ".CONTRATS_TABLE.".`lieu_depot`=".LIEUX_TABLE.".`ref`"
." WHERE ".CONTRATS_TABLE.".`del`=0"
." AND ".CONTRATS_TABLE.".`groupe`=".intval($paniers_groupe)
." AND ".CONTRATS_TABLE.".`date`<='".$date."'"
." AND (".CONTRATS_TABLE.".`frequence`='hebdo' OR (".CONTRATS_TABLE.".`frequence`='quinz' AND ".CONTRATS_TABLE.".`quinz_groupe`='".$quinz_groupe."'))"
." ORDER BY ".CLIENTS_TABLE.".`nom` ASC";
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
foreach($r['datas'] as $i) {
$i["nb_paniers_livres"] = getNbLivraisonForContratAtDate($i['ref'], $date) + intval($i["np_paniers_distrib_avt_saisie"]);
$i["nb_paniers_restants"] = intval($i["nb_paniers"])-$i["nb_paniers_livres"];
$i["frequence_print"] = CONTRATS_FREQUENCES[$i["frequence"]];
if($i["frequence"] == "quinz") $i["frequence_print"] .= " (groupe ".$i["quinz_groupe"].")";
$i["absence"] = getClientAbsenceAtDate($i["client_ref"], $date);
if($i["nb_paniers_restants"]>0 || (int)$i['force_eligible']>0) {
// GROUP BY - LIEU & TYPE DE PANNIER
$lieu = intval($i['lieu_depot_ref']);
$pType = intval($i['panier_type_ref']);
// CREATION DU LIEU
if(!array_key_exists($lieu, $list)) {
$list[$lieu] = array(
"ref" => $lieu,
"nom" => $i['lieu_depot_nom'],
"nb_paniers" => 0,
"paniers" => array()
);
}
// CREATION DU TYPE DE PANIER
if(!array_key_exists($pType, $list[$lieu]["paniers"])) {
$list[$lieu]["paniers"][$pType] = array(
"type_ref" => $pType,
"type_nom" => $i['panier_type_nom'],
"paniers" => array()
);
}
// AJOUT
$list[$lieu]["paniers"][$pType]["paniers"][] = $i;
}
}
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des paniers de la livraison dans le base de données !".$er;
}
// ORDER
$list = orderListByKey($list, "nom", "ASC");
for($i =0; $iselect($sql,1);
if(!$r['erreur']) $nb = intval($r['datas']['nb']);
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération du nombre de livraison du contrat dans le base de données !".$er;
}
return $i;
}
function getLivraisonPaniers($livraison, $lieu=0) {
$list = array();
$sql = getLivraisonsPaniersSelectBaseSQL();
$sql.=" WHERE ".LIVRAISONS_PANIERS_TABLE.".`livraison`=".intval($livraison);
if($lieu>0) $sql.=" AND ".CONTRATS_TABLE.".`lieu_depot`=".intval($lieu);
$sql.=" ORDER BY ".CLIENTS_TABLE.".`nom` ASC";
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
foreach($r['datas'] as $i) {
$i["frequence_print"] = CONTRATS_FREQUENCES[$i["frequence"]];
if($i["frequence"] == "quinz") $i["frequence_print"] .= " (groupe ".$i["quinz_groupe"].')';
// GROUPE PAR TYPE DE PANIER
if(!array_key_exists($i["panier_type_ref"], $list)) {
$list[$i["panier_type_ref"]] = array(
"type_ref" => $i["panier_type_ref"],
"type_nom" => $i["panier_type_nom"],
"paniers" => array()
);
}
$list[$i["panier_type_ref"]]["paniers"][] = $i;
}
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des paniers de la livraison dans le base de données !".$er;
}
$list = orderListByKey($list, "type_nom", "ASC");
return $list;
}
function getLivraisonPaniersContratsList($livraison) {
$list = array();
$sql = "SELECT `contrat` FROM ".LIVRAISONS_PANIERS_TABLE." WHERE `livraison`=".intval($livraison);
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
foreach($r['datas'] as $i) $list[] = intval($i['contrat']);
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des contrats de paniers de la livraison dans le base de données !".$er;
}
return $list;
}
function getLivraisonNbPaniers($livraison) {
$list = array();
$sql = "SELECT "
.CONTRATS_TABLE.".`panier_type` as 'ref', "
.PANIERS_TYPES_TABLE.".`nom` as 'nom', "
."count(*) as 'nb'"
." FROM ".LIVRAISONS_PANIERS_TABLE
." LEFT JOIN ".CONTRATS_TABLE." ON ".LIVRAISONS_PANIERS_TABLE.".`contrat`=".CONTRATS_TABLE.".`ref`"
." LEFT JOIN ".PANIERS_TYPES_TABLE." ON ".CONTRATS_TABLE.".`panier_type`=".PANIERS_TYPES_TABLE.".`ref`"
." WHERE ".LIVRAISONS_PANIERS_TABLE.".`livraison`=".intval($livraison)
." GROUP BY ".CONTRATS_TABLE.".`panier_type`";
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
foreach($r['datas'] as $i) {
$i['ref'] = intval($i['ref']);
$i['nb'] = intval($i['nb']);
$list[$i['ref']] = $i;
}
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération du nombre de paniers de la livraison dans le base de données !".$er;
}
return $list;
}
function addLivraisonPanier($datas) {
return addDatasInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_PANIERS_TABLE, // TABLE NAME
LIVRAISONS_PANIERS_TABLE_STRUCT,// TABLE STRUCTURE
$datas, // DATAS
"du panier de la livraison" // ERROR STRING
);
}
function deleteLivraisonPaniers($livraison) {
return deleteItemInTableByCondition(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_PANIERS_TABLE, // TABLE NAME
"WHERE livraison=".intval($livraison), // CONDITION
"des paniers de la livraison" // ERROR STRING
);
}
function clearLivraisonPaniers($livraison) {
return eraseItemInTableByCondition(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_PANIERS_TABLE, // TABLE NAME
"WHERE livraison=".intval($livraison), // CONDITION
"des paniers de la livraison" // ERROR STRING
);
}
////////////////////////////////////////////////////////////////////////
// LIVRAISONS - LEGUMES ////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function getLivraisonLegumes($livraison, $nbPaniers=[]) {
$list = array();
$sql = getLivraisonsLegumesTableSelectBaseSQL();
$sql.=" WHERE ".LIVRAISONS_LEGUMES_TABLE.".`livraison`=".intval($livraison);
$sql.=" ORDER BY ".LEGUMES_TABLE.".`nom` ASC";
$r = $GLOBALS['db_admin']['man']->select($sql);
if(!$r['erreur']) {
foreach($r['datas'] as $i) {
$i['tarif_unite_acro'] = LEGUMES_TARIFS_UNITES_ACRONYMES[$i['tarif_unite']];
// GROUPE PAR TYPE DE PANIER
if(!array_key_exists($i["panier_type_ref"], $list)) {
$list[$i["panier_type_ref"]] = array(
"ref" => $i["panier_type_ref"],
"nom" => $i["panier_type_nom"],
"nb" => 0,
"montant" => 0.0,
"legumes" => array()
);
if(array_key_exists($i["panier_type_ref"], $nbPaniers)) $list[$i["panier_type_ref"]]['nb'] = $nbPaniers[$i["panier_type_ref"]]['nb'];
}
$list[$i["panier_type_ref"]]["legumes"][] = $i;
$list[$i["panier_type_ref"]]["montant"] += floatval($i["quantite"]) * floatval($i["tarif_prix"]);
}
$list = orderListByKey($list, "nom", "ASC");
}
else {
$er = "sql: ".$sql."error: ".getReadableVar($r['erreur']);
$GLOBALS['errors'][] = "Une erreur est survenue durant la récupération de la liste des légumes de la livraison dans le base de données !".$er;
}
return $list;
}
function calcLivraisonTotalLegumes($legumes) {
$tot = array(
"montant" => 0.0,
"legumes" => array()
);
foreach($legumes as $p) {
foreach($p["legumes"] as $l) {
if(!array_key_exists($l['ref'], $tot["legumes"])) {
$tot["legumes"][$l['ref']] = $l;
$tot["legumes"][$l['ref']]["quantite"] = 0.0;
$tot["legumes"][$l['ref']]["montant"] = 0.0;
}
$tot["legumes"][$l['ref']]["quantite"] += floatval($l["quantite"]) * floatval($p['nb']);
$tot["legumes"][$l['ref']]["montant"] += floatval($l["tarif_prix"]) * floatval($l["quantite"]) * floatval($p['nb']);
$tot["montant"] += floatval($l["tarif_prix"]) * floatval($l["quantite"]) * floatval($p['nb']);
}
}
return $tot;
}
function addLivraisonLegume($datas) {
return addDatasInTable(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_LEGUMES_TABLE, // TABLE NAME
LIVRAISONS_LEGUMES_TABLE_STRUCT,// TABLE STRUCTURE
$datas, // DATAS
"du légume" // ERROR STRING
);
}
function deleteLivraisonLegumes($livraison) {
return deleteItemInTableByCondition(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_LEGUMES_TABLE, // TABLE NAME
"WHERE livraison=".intval($livraison), // CONDITION
"des légumes de la livraison" // ERROR STRING
);
}
function clearLivraisonLegumes($livraison) {
return eraseItemInTableByCondition(
$GLOBALS['db_admin']['man'], // DB MANAGER
LIVRAISONS_LEGUMES_TABLE, // TABLE NAME
"WHERE livraison=".intval($livraison), // CONDITION
"des légumes de la livraison" // ERROR STRING
);
}
////////////////////////////////////////////////////////////////////////
// PRINTS //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function exportLivraisonTemplateToPDF($templateFile, $outputFileName) {
$GLOBALS['smarty'] -> assign('logo', PUBLIC_HTML_ADMIN.'img/logo.png');
$cssFiles = array(
PUBLIC_HTML_ADMIN.'css/bootstrap_print_light.css',
PUBLIC_HTML_ADMIN.'css/livraisons.css'
);
$GLOBALS['smarty'] -> assign('cssFiles',$cssFiles);
$html = $GLOBALS['smarty']->fetch($templateFile);
// die($html);
$dompdf = new Dompdf\Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$options = $dompdf->getOptions();
$options->setIsRemoteEnabled(true);
$dompdf->setOptions($options);
$dompdf->render();
$dompdf->stream($outputFileName);
die();
}