Initial commit - Application CLEO de gestion de devis
- Architecture MVC avec framework maison d6 - Modules : devis, clients, marchés, SAP - Documentation initiale (README et TODO) - Configuration Composer avec dépendances 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
4
controllers/caccueil.php
Normal file
4
controllers/caccueil.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
$aModel=array();
|
||||
require_once $Route->_model;
|
||||
require_once $Route->_view;
|
||||
4
controllers/cclients.php
Normal file
4
controllers/cclients.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
$aModel=array();
|
||||
require_once $Route->_model;
|
||||
require_once $Route->_view;
|
||||
4
controllers/cdevis.php
Normal file
4
controllers/cdevis.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
$aModel=array();
|
||||
require_once $Route->_model;
|
||||
require_once $Route->_view;
|
||||
3
controllers/cexpxls.php
Normal file
3
controllers/cexpxls.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
global $Route;
|
||||
require_once $Route->_model;
|
||||
4
controllers/cinterface.php
Normal file
4
controllers/cinterface.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
$aModel=array();
|
||||
require_once $Route->_model;
|
||||
require_once $Route->_view;
|
||||
45
controllers/cjxchat.php
Normal file
45
controllers/cjxchat.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
global $Session;
|
||||
global $Conf;
|
||||
global $Route;
|
||||
|
||||
//! on va chercher la data de la Session au format tableau
|
||||
$session_data = $Session->get_data();
|
||||
$fk_user = $Session->_user["rowid"];
|
||||
|
||||
switch ($Route->_action) {
|
||||
case "refresh":
|
||||
//! Rafraîchit la liste des messages
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$sql = 'SELECT dh.*, u.libelle, u.prenom FROM devis_histo dh LEFT JOIN users u ON dh.fk_user=u.rowid WHERE dh.fk_devis=' . $cid . ' ORDER BY dh.date_histo DESC;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
} else {
|
||||
echo "Erreur : pas de client";
|
||||
}
|
||||
break;
|
||||
|
||||
case "save_message":
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$mes = nettoie_input($data->message);
|
||||
$fku = nettoie_input($data->fkuser);
|
||||
|
||||
$sql = 'INSERT INTO devis_histo (fk_devis, fk_user, commentaire, date_histo) VALUES (' . $cid . ', ' . $fku . ', "' . $mes . '", "' . date("Y-m-d H:i:s") . '");';
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
|
||||
$ret = array('ret' => "ok");
|
||||
echo json_encode($ret);
|
||||
} else {
|
||||
$ret = array('ret' => "ko");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
exit();
|
||||
1230
controllers/cjxdevis.php
Normal file
1230
controllers/cjxdevis.php
Normal file
File diff suppressed because it is too large
Load Diff
254
controllers/cjxexport.php
Normal file
254
controllers/cjxexport.php
Normal file
@@ -0,0 +1,254 @@
|
||||
<?php
|
||||
require_once 'vendor/autoload.php';
|
||||
|
||||
use phpseclib3\Net\SFTP;
|
||||
|
||||
global $Route, $Session;
|
||||
$fk_user = $Session->_user['rowid'];
|
||||
|
||||
function generateXML($data) {
|
||||
$writer = new XMLWriter();
|
||||
$writer->openMemory();
|
||||
$writer->setIndent(true);
|
||||
$writer->setIndentString(' ');
|
||||
$writer->startDocument('1.0', 'UTF-8');
|
||||
|
||||
$writer->startElement('cleodevis');
|
||||
|
||||
// Éléments simples
|
||||
$simpleElements = ['id', 'opportunite', 'date_demande', 'date_remise', 'marche', 'num_marche', 'nom_marche', 'photos', 'commentaire_rr', 'speciaux', 'total_devis_ht', 'total_devis_ht_remise', 'marge_totale'];
|
||||
foreach ($simpleElements as $element) {
|
||||
$writer->writeElement($element, $data[$element]);
|
||||
}
|
||||
|
||||
// Client
|
||||
$writer->startElement('client');
|
||||
foreach ($data['client'] as $key => $value) {
|
||||
if ($key === 'contact') {
|
||||
$writer->startElement('contact');
|
||||
foreach ($value as $contactKey => $contactValue) {
|
||||
$writer->writeElement($contactKey, $contactValue);
|
||||
}
|
||||
$writer->endElement(); // contact
|
||||
} else {
|
||||
$writer->writeElement($key, $value);
|
||||
}
|
||||
}
|
||||
$writer->endElement(); // client
|
||||
|
||||
// Produits
|
||||
$writer->startElement('produits');
|
||||
foreach ($data['produits'] as $produit) {
|
||||
$writer->startElement('produit');
|
||||
$writer->writeAttribute('id', $produit['id']);
|
||||
foreach ($produit as $key => $value) {
|
||||
if ($key !== 'id') {
|
||||
$writer->writeElement($key, $value);
|
||||
}
|
||||
}
|
||||
$writer->endElement(); // produit
|
||||
}
|
||||
$writer->endElement(); // produits
|
||||
|
||||
// Produits spéciaux
|
||||
$writer->startElement('produits_speciaux');
|
||||
foreach ($data['produits_speciaux'] as $key => $value) {
|
||||
if ($key === 'produit_special') {
|
||||
foreach ($value as $produitSpecial) {
|
||||
$writer->startElement('produit_special');
|
||||
$writer->writeAttribute('id', $produitSpecial['id']);
|
||||
foreach ($produitSpecial as $psKey => $psValue) {
|
||||
if ($psKey !== 'id') {
|
||||
$writer->writeElement($psKey, $psValue);
|
||||
}
|
||||
}
|
||||
$writer->endElement(); // produit_special
|
||||
}
|
||||
} else {
|
||||
$writer->writeElement($key, $value);
|
||||
}
|
||||
}
|
||||
$writer->endElement(); // produits_speciaux
|
||||
$writer->endElement(); // cleodevis
|
||||
return $writer->outputMemory();
|
||||
}
|
||||
|
||||
function uploadToSftp($localPath, $filename) {
|
||||
eLog("Début de l'upload sur SFTP pour le fichier $localPath $filename");
|
||||
$sftp = [
|
||||
'host' => 'e1exshxstxsftp.blob.core.windows.net',
|
||||
'port' => 22,
|
||||
'username' => 'e1exshxstxsftp.edi-cleo.edicleousr',
|
||||
'password' => 'QYDavy+wIy7AoDnezPv+KC/vF+zG1q6n',
|
||||
'remote_path' => '/'
|
||||
];
|
||||
|
||||
// On va chercher le fichier XML en path absolu
|
||||
$localPath = __DIR__ . '/../' . $localPath;
|
||||
$xmlPathAndName = $localPath . DS . $filename;
|
||||
try {
|
||||
$sftp_client = new SFTP($sftp['host'], $sftp['port']);
|
||||
|
||||
if (!$sftp_client->login($sftp['username'], $sftp['password'])) {
|
||||
throw new Exception("Authentification SFTP échouée");
|
||||
}
|
||||
|
||||
$remote_file = $sftp['remote_path'] . $filename;
|
||||
|
||||
// Debug des chemins
|
||||
error_log("Chemin local absolu : " . $xmlPathAndName);
|
||||
error_log("Chemin distant : " . $remote_file);
|
||||
|
||||
// Vérification explicite du fichier
|
||||
if (!file_exists($xmlPathAndName)) {
|
||||
throw new Exception("Le fichier n'existe pas à l'emplacement : " . $xmlPathAndName);
|
||||
}
|
||||
|
||||
// Essayez d'utiliser fopen au lieu de file_get_contents
|
||||
$handle = fopen($xmlPathAndName, 'r');
|
||||
if ($handle === false) {
|
||||
throw new Exception("Impossible d'ouvrir le fichier en lecture");
|
||||
}
|
||||
|
||||
if (!$sftp_client->put($remote_file, $handle)) {
|
||||
throw new Exception("Échec de l'envoi du fichier sur le serveur distant");
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
// Vérifiez la taille du fichier distant après l'envoi
|
||||
$remoteSize = $sftp_client->filesize($remote_file);
|
||||
if ($remoteSize === 0) {
|
||||
throw new Exception("Le fichier distant est vide après l'envoi");
|
||||
} else {
|
||||
error_log('Taille du fichier distant après l\'envoi : ' . $remoteSize);
|
||||
}
|
||||
eLog('Fichier envoyé avec succès : ' . $remote_file . ', taille sur le serveur : ' . $remoteSize);
|
||||
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
error_log("Erreur SFTP: " . $e->getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
switch ($Route->_action) {
|
||||
case "xml_devis":
|
||||
$cid = nettoie_input($Route->_param1);
|
||||
eLog("Export XML SAP Devis : " . $cid);
|
||||
$sql = 'SELECT d.num_opportunite, d.date_demande, d.date_remise, d.fk_client, m.libelle AS lib_marche, m.numero AS num_marche, m.nom AS nom_marche, d.chk_devis_photos, d.chk_speciaux, d.commentaire AS commentaire_rr, ';
|
||||
$sql .= 'd.montant_total_ht as total_devis_ht, d.montant_total_ht_remise AS total_devis_ht_remise, d.marge_totale ';
|
||||
$sql .= 'FROM devis d LEFT JOIN marches m ON d.fk_marche=m.rowid WHERE d.rowid = ' . $cid . ';';
|
||||
$dataDevis = getinfos($sql);
|
||||
if ($dataDevis) {
|
||||
$dataDevis = $dataDevis[0];
|
||||
if ($dataDevis["fk_client"] == 0) {
|
||||
// Pas de client issu de la table clients mais un client saisi manuellement
|
||||
$sql = 'SELECT "0" AS code, d.lib_new_client AS etablissement, d.adresse1_new_client AS adresse1, d.adresse2_new_client AS adresse2, d.adresse3_new_client AS adresse3, ';
|
||||
$sql .= 'cp_new_client AS codepostal, ville_new_client AS ville FROM devis d WHERE d.rowid = ' . $cid . ';';
|
||||
$dataClient = getinfos($sql);
|
||||
$sql = 'SELECT d.contact_new_nom AS nom, d.contact_new_prenom AS prenom, d.contact_new_fonction AS fonction, d.new_telephone AS fixe, d.new_mobile AS mobile, d.new_email AS email FROM devis d WHERE d.rowid = ' . $cid . ';';
|
||||
$dataContact = getinfos($sql);
|
||||
} else {
|
||||
$sql = 'SELECT c.code, c.libelle AS etablissement, c.adresse1, c.adresse2, c.adresse3, c.cp AS codepostal, c.ville FROM clients c WHERE c.rowid = ' . $dataDevis["fk_client"] . ';';
|
||||
$dataClient = getinfos($sql);
|
||||
$sql = 'SELECT c.contact_nom AS nom, c.contact_prenom AS prenom, c.contact_fonction AS fonction, c.telephone AS fixe, c.mobile, c.email FROM clients c WHERE c.rowid = ' . $dataDevis["fk_client"] . ';';
|
||||
$dataContact = getinfos($sql);
|
||||
}
|
||||
$dataClient = $dataClient[0];
|
||||
// On ajoute l'array contact dans l'array client
|
||||
$dataClient['contact'] = $dataContact[0];
|
||||
|
||||
$sql = 'SELECT dp.fk_produit AS id, dp.code, dp.libelle AS designation, dp.prix_vente, dp.qte AS quantite, dp.remise, dp.pu_vente_remise AS pu_vente_avec_remise, dp.totalht AS total_ht, dp.marge, dp.commentaire ';
|
||||
$sql .= 'FROM devis_produits dp WHERE dp.fk_devis = ' . $cid . ' ORDER BY dp.ordre;';
|
||||
$dataProduits = getinfos($sql);
|
||||
|
||||
// $sql = 'SELECT fk_product, qty, prix_unitaire, remise, total_ht, total_ttc FROM lignes_speciales WHERE fk_devis = $cid';
|
||||
$dataProduitsSpeciaux = array(); // getinfos($sql);
|
||||
|
||||
$data = [
|
||||
'id' => $cid,
|
||||
'opportunite' => $dataDevis['num_opportunite'],
|
||||
'date_demande' => $dataDevis['date_demande'],
|
||||
'date_remise' => $dataDevis['date_remise'],
|
||||
'marche' => $dataDevis['lib_marche'],
|
||||
'num_marche' => $dataDevis['num_marche'],
|
||||
'nom_marche' => $dataDevis['nom_marche'],
|
||||
'photos' => $dataDevis['chk_devis_photos'],
|
||||
'commentaire_rr' => $dataDevis['commentaire_rr'],
|
||||
'speciaux' => $dataDevis['chk_speciaux'],
|
||||
'total_devis_ht' => $dataDevis['total_devis_ht'],
|
||||
'total_devis_ht_remise' => $dataDevis['total_devis_ht_remise'],
|
||||
'marge_totale' => $dataDevis['marge_totale'],
|
||||
'client' => $dataClient,
|
||||
'produits' => $dataProduits,
|
||||
'produits_speciaux' => $dataProduitsSpeciaux
|
||||
];
|
||||
|
||||
// ob_start();
|
||||
// $xmlName = 'dv' . $cid . '_' . date("Y_m_d_H_i") . '.xml';
|
||||
// $xml = generateXML($data);
|
||||
// ob_end_clean();
|
||||
|
||||
// $xmlPath = 'pub/files/upload/devis';
|
||||
// $xmlPathAndName = $xmlPath . DS . $xmlName;
|
||||
// file_put_contents($xmlPathAndName, $xml);
|
||||
|
||||
|
||||
// Définition des chemins
|
||||
$xmlName = 'dv' . $cid . '_' . date("Y_m_d_H_i") . '.xml';
|
||||
$xmlPath = 'pub/files/upload/devis';
|
||||
$xmlPathAndName = $xmlPath . DS . $xmlName;
|
||||
|
||||
// Génération du XML sans output buffering
|
||||
$xml = generateXML($data);
|
||||
|
||||
// Vérification du contenu XML avant écriture
|
||||
if (empty($xml)) {
|
||||
throw new Exception("Le XML généré est vide");
|
||||
}
|
||||
|
||||
// Écriture du fichier avec vérification
|
||||
if (file_put_contents($xmlPathAndName, $xml) === false) {
|
||||
throw new Exception("Échec de l'écriture du fichier XML");
|
||||
}
|
||||
|
||||
// Vérification après écriture
|
||||
clearstatcache(true, $xmlPathAndName);
|
||||
if (!file_exists($xmlPathAndName) || filesize($xmlPathAndName) === 0) {
|
||||
throw new Exception("Le fichier XML n'a pas été créé correctement");
|
||||
}
|
||||
|
||||
// Pour debug
|
||||
error_log("Taille du XML généré : " . strlen($xml));
|
||||
error_log("Taille du fichier créé : " . filesize($xmlPathAndName));
|
||||
|
||||
$sql = 'SELECT m.rowid FROM medias m WHERE m.support_rowid = ' . $cid . ' AND support="devis_xml_sap";';
|
||||
$media = getinfos($sql);
|
||||
if ($media) {
|
||||
$sql = 'UPDATE medias SET dir0="pub/files/upload/devis/", fichier="' . $xmlName . '", type_fichier="xml", date_modif="' . date("Y-m-d H:i:s") . '", fk_user_modif=' . $fk_user . ' WHERE rowid = ' . $media[0]['rowid'] . ';';
|
||||
} else {
|
||||
$sql = 'INSERT INTO medias (support, dir0, fichier, type_fichier, support_rowid, date_creat, fk_user_creat) VALUES ("devis_xml_sap", "pub/files/upload/devis/", "' . $xmlName . '", "xml", ' . $cid . ', "' . date("Y-m-d H:i:s") . '", ' . $fk_user . ');';
|
||||
}
|
||||
qSQL($sql);
|
||||
|
||||
// Transférer via SFTP
|
||||
if (!uploadToSftp($xmlPath, $xmlName)) {
|
||||
throw new Exception("Erreur lors du transfert SFTP du fichier $xmlPath, $xmlName");
|
||||
} else {
|
||||
eLog("Fichier XML $xmlName a bien été transféré avec succès sur SFTP.");
|
||||
}
|
||||
|
||||
header("Content-type: application/xml");
|
||||
header('Content-Disposition: attachment; filename="' . $xmlName . '"');
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
header('Pragma: public');
|
||||
header('Expires: 0');
|
||||
echo $xml;
|
||||
exit();
|
||||
} else {
|
||||
eLog("xml_devis devis not found");
|
||||
}
|
||||
break;
|
||||
}
|
||||
exit;
|
||||
601
controllers/cjximport.php
Normal file
601
controllers/cjximport.php
Normal file
@@ -0,0 +1,601 @@
|
||||
<?php
|
||||
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Csv;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
||||
|
||||
global $Conf;
|
||||
global $Session;
|
||||
global $Route;
|
||||
|
||||
$fkUser = $Session->_user["rowid"];
|
||||
|
||||
function nettoie_text($input)
|
||||
{
|
||||
$retour = trim($input); // on supprime les espaces en début et fin de chaîne
|
||||
$retour = str_replace('"', '', $retour); // on remplace les doubles guillemets par rien
|
||||
$retour = str_replace(" ", " ", $retour); // on remplace les doubles espaces par un simple espace
|
||||
return $retour;
|
||||
}
|
||||
|
||||
function formate_date($sdate)
|
||||
{
|
||||
//! $sdate au format 1. 1. 1900 && 26. 4. 2019
|
||||
$sday = "";
|
||||
$smonth = "";
|
||||
$syear = "";
|
||||
$ladate = "";
|
||||
$pospoint = strpos($sdate, ". ");
|
||||
if ($pospoint !== FALSE) {
|
||||
$sday = substr($sdate, 0, $pospoint);
|
||||
if (strlen($sday) == 1) {
|
||||
$sday = "0" . $sday;
|
||||
}
|
||||
$sdate = substr($sdate, $pospoint + 2);
|
||||
$pospoint = strpos($sdate, ". ");
|
||||
if ($pospoint !== FALSE) {
|
||||
$smonth = substr($sdate, 0, $pospoint);
|
||||
if (strlen($smonth) == 1) {
|
||||
$smonth = "0" . $smonth;
|
||||
}
|
||||
$syear = substr($sdate, $pospoint + 2);
|
||||
}
|
||||
}
|
||||
if ($sday != "" && $syear != "1900") {
|
||||
$ladate = $syear . "-" . $smonth . "-" . $sday;
|
||||
}
|
||||
eLog("formate_date : " . $sdate . " => " . $ladate);
|
||||
return $ladate;
|
||||
}
|
||||
|
||||
|
||||
switch ($Route->_action) {
|
||||
case "upload_clients":
|
||||
//! Importation du fichier CSV des clients SAP
|
||||
|
||||
$upLoadDir = ROOT . $Conf->_pathupload . "import" . DS;
|
||||
// on crée le dossier et son arborescence s'il n'existe pas
|
||||
if (!file_exists($upLoadDir)) {
|
||||
mkdir($upLoadDir, 0777, true);
|
||||
}
|
||||
eLog("upLoadDir : " . $upLoadDir);
|
||||
$erreur = 0;
|
||||
$messageErreur = "";
|
||||
$size_max = 10297150; // 10 Mo
|
||||
foreach ($_FILES as $file) {
|
||||
$size_file = filesize($file['tmp_name']);
|
||||
if ($size_file > $size_max) {
|
||||
$message = "Vous avez dépassé la taille de fichier autorisée";
|
||||
eLog("problème de taille de fichier : " . $size_file . " pour un max de " . $size_max);
|
||||
} else {
|
||||
// on remplace les espaces par des _ dans le nom du fichier sur le serveur
|
||||
$fileName = str_normalize(basename($file["name"]), true);
|
||||
if (strrpos($fileName, ".") === false) {
|
||||
// pas d'extension
|
||||
$typ = "";
|
||||
} else {
|
||||
$typ = substr($fileName, strrpos($fileName, ".") + 1);
|
||||
}
|
||||
eLog("Import fichier : " . $fileName);
|
||||
if (move_uploaded_file($file['tmp_name'], $upLoadDir . $fileName)) {
|
||||
eLog("Importation Clients : Fichier " . $upLoadDir . $fileName . " uploadé");
|
||||
|
||||
$row = 1;
|
||||
$headers = true;
|
||||
$separateur = ";";
|
||||
|
||||
$import_libelle = "Importation du fichier Clients SAP";
|
||||
$sql_prepa = "UPDATE clients SET chk_import=0;";
|
||||
$sql_final1 = "UPDATE clients SET active=chk_import;";
|
||||
$sql_final2 = "UPDATE clients SET chk_import=0;";
|
||||
|
||||
// Structure du fichier CSV
|
||||
$colonnes = array('code', 'libelle', 'siret', 'adresse1', 'adresse2', 'adresse3', 'cp', 'ville', 'fk_type', 'contact_civilite', 'contact_nom', 'contact_prenom', 'contact_fonction', 'telephone', 'mobile', 'email');
|
||||
|
||||
$nbColonnes = count($colonnes);
|
||||
$nomLog = 'csv-' . date("Y") . '-' . date("m") . '-' . date("d") . '-' . date("H") . '-' . date("i") . '-' . date("s") . '.log';
|
||||
$log = $upLoadDir . $nomLog;
|
||||
eLog("création du fichier log : " . $log);
|
||||
$source = $upLoadDir . $fileName;
|
||||
$fhlog = fopen($log, "a");
|
||||
fwrite($fhlog, "importCSV " . $import_libelle . " : " . $source . "\r\n");
|
||||
|
||||
//! on lance la requête de préparation
|
||||
if ($sql_prepa != "") {
|
||||
qSQL($sql_prepa);
|
||||
}
|
||||
|
||||
$row = 1;
|
||||
|
||||
if (($handle = fopen($source, "r")) !== FALSE) {
|
||||
while (($data = fgetcsv($handle, 500, ";")) !== FALSE) {
|
||||
$num = count($data);
|
||||
if ($headers && $row == 1) {
|
||||
// ce csv contient une ligne d'entêtes de colonnes, on ne traite pas cette ligne
|
||||
} else {
|
||||
eLog("lecture de la ligne " . $row . " avec " . $num . " colonnes");
|
||||
if ($num == $nbColonnes) {
|
||||
// on a le bon nombre de colonnes, on peut continuer
|
||||
|
||||
$code = nettoie_text($data[0]); // on remplace les doubles guillemets par rien
|
||||
$libelle = nettoie_text($data[1]); // on remplace les doubles espaces par un simple espace
|
||||
$siret = nettoie_text($data[2]);
|
||||
$adresse1 = nettoie_text($data[3]);
|
||||
$adresse2 = nettoie_text($data[4]);
|
||||
$adresse3 = nettoie_text($data[5]);
|
||||
$cp = trim($data[6]);
|
||||
if (strlen($cp) == 4) {
|
||||
$cp = "0" . $cp;
|
||||
}
|
||||
$ville = nettoie_text($data[7]);
|
||||
$fkType = $data[8];
|
||||
$contactNom = nettoie_text($data[10]);
|
||||
$contactPrenom = nettoie_text($data[11]);
|
||||
$contactFonction = nettoie_text($data[12]);
|
||||
$telephone = $data[13];
|
||||
$mobile = $data[14];
|
||||
$email = nettoie_text($data[15]);
|
||||
|
||||
$sql = "SELECT c.* FROM clients c WHERE c.code='" . $code . "';";
|
||||
$record = getinfos($sql, "gen");
|
||||
switch (count($record)) {
|
||||
case 0:
|
||||
//! Code client non trouvé = nouveau client
|
||||
$sql = 'INSERT INTO clients SET code="' . $code . '", libelle="' . $libelle . '", siret="' . $siret . '", adresse1="' . $adresse1 . '", adresse2="' . $adresse2 . '", adresse3="' . $adresse3 . '", cp="' . $cp . '", ville="' . $ville . '", ';
|
||||
$sql .= 'type_client="' . $fkType . '", contact_nom="' . $contactNom . '", contact_prenom="' . $contactPrenom . '", contact_fonction="' . $contactFonction . '", telephone="' . $telephone . '", mobile="' . $mobile . '", email="' . $email . '", chk_import=1;';
|
||||
fwrite($fhlog, $row . "---" . $sql . "\r\n");
|
||||
$fkClient = qSQL($sql, "gen", true);
|
||||
fwrite($fhlog, "--- Ajout fait\r\n");
|
||||
$message = "Importation Clients SAP : Le client " . $libelle . " vient d'être créé en " . $ville . " (" . $cp . ")";
|
||||
$sql = 'INSERT INTO notifications SET dateheure="' . date("Y-m-d H:i:s") . '", fk_user=' . $fkUser . ', action="Création fiche", theme="Fiche Client", message="' . $message . '";';
|
||||
qSQL($sql, "gen");
|
||||
|
||||
fwrite($fhlog, "--- Fin Creation ---" . "\r\n");
|
||||
break;
|
||||
|
||||
case 1:
|
||||
//! Un seul enregistrement trouvé : on met à jour le client
|
||||
$rec = $record[0];
|
||||
|
||||
$sql = 'UPDATE clients SET libelle="' . $libelle . '", siret="' . $siret . '", adresse1="' . $adresse1 . '", adresse2="' . $adresse2 . '", adresse3="' . $adresse3 . '", cp="' . $cp . '", ville="' . $ville . '", ';
|
||||
$sql .= 'type_client="' . $fkType . '", contact_nom="' . $contactNom . '", contact_prenom="' . $contactPrenom . '", contact_fonction="' . $contactFonction . '", telephone="' . $telephone . '", mobile="' . $mobile . '", email="' . $email . '", chk_import=1 ';
|
||||
$sql .= 'WHERE code="' . $code . '";';
|
||||
qSQL($sql);
|
||||
fwrite($fhlog, $row . "---" . $sql . "\r\n");
|
||||
fwrite($fhlog, "--- Fin MaJ ---" . "\r\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
// Plusieurs lignes trouvées pour le même code : Erreur !!
|
||||
$messageErreur = "Erreur Ligne " . $row . ", le code " . $code . " a été trouvé " . count($record) . " fois !! ****************************";
|
||||
fwrite($fhlog, $messageErreur . "\r\n");
|
||||
$erreur++;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$messageErreur = "Erreur Ligne " . $row . ", " . $nbColonnes . " colonnes attendues, mais " . $num . " trouvées !! ***************************";
|
||||
fwrite($fhlog, $messageErreur . "\r\n");
|
||||
$erreur++;
|
||||
}
|
||||
}
|
||||
$row++;
|
||||
} // end while
|
||||
fclose($handle);
|
||||
}
|
||||
|
||||
fwrite($fhlog, "Fichier CSV fermé\r\n");
|
||||
//! Enfin on exécute les requêtes de fin
|
||||
if ($sql_final1 != "") {
|
||||
qSQL($sql_final1);
|
||||
fwrite($fhlog, "Requete finale 1 executee : " . $sql_final1 . "\r\n");
|
||||
}
|
||||
if ($sql_final2 != "") {
|
||||
qSQL($sql_final2);
|
||||
fwrite($fhlog, "Requete finale 2 executee : " . $sql_final2 . "\r\n");
|
||||
}
|
||||
fclose($fhlog);
|
||||
if ($erreur > 0) {
|
||||
$dest = "support@unikoffice.com";
|
||||
$sujet = $Conf->_appname . " Import clients : erreurs trouvées";
|
||||
$message = "Message automatique de CLEO 1 (jximport/upload_clients)<br/>Le fichier " . $upLoadDir . $fileName . " a été importé et a montré des erreurs lors de son importation.<br/>Merci";
|
||||
envoieMail($dest, $sujet, $message);
|
||||
}
|
||||
$message = "Importation terminée avec succès pour " . $row . " lignes";
|
||||
eLog($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($erreur == 0) {
|
||||
$reponse = array('ret' => "ok", 'msg' => "Importation terminée avec succès pour " . $row . " lignes");
|
||||
} else {
|
||||
$reponse = array('ret' => "ko", 'msg' => $messageErreur);
|
||||
}
|
||||
echo json_encode($reponse);
|
||||
break;
|
||||
|
||||
case "upload_marche_produits":
|
||||
//! Importation du fichier CSV des produits d'un marché
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
|
||||
$upLoadDir = ROOT . $Conf->_pathupload . "import" . DS;
|
||||
// on crée le dossier et son arborescence s'il n'existe pas
|
||||
if (!file_exists($upLoadDir)) {
|
||||
mkdir($upLoadDir, 0777, true);
|
||||
}
|
||||
|
||||
ini_set('max_execution_time', '600'); // 600 seconds = 10 minutes
|
||||
|
||||
// if (isset($_POST["importIdMarche"])) {
|
||||
$erreur = "";
|
||||
$fileName = "";
|
||||
$size_max = 10500500; // 10 Mo
|
||||
foreach ($_FILES as $file) {
|
||||
$size_file = filesize($file['tmp_name']);
|
||||
if ($size_file > $size_max) {
|
||||
$erreur = "Vous avez dépassé la taille de fichier autorisée : " . $size_file . " pour un max de " . $size_max;
|
||||
eLog("problème de taille de fichier : " . $size_file . " pour un max de " . $size_max);
|
||||
} else {
|
||||
// on remplace les espaces par des _ dans le nom du fichier sur le serveur
|
||||
$fileName = str_normalize(basename($file["name"]), true);
|
||||
if (strrpos($fileName, ".") === false) {
|
||||
// pas d'extension
|
||||
$typ = "";
|
||||
} else {
|
||||
$typ = substr($fileName, strrpos($fileName, ".") + 1);
|
||||
}
|
||||
eLog("Import fichier : " . $upLoadDir . $fileName);
|
||||
if (move_uploaded_file($file['tmp_name'], $upLoadDir . $fileName)) {
|
||||
eLog("Importation Produits Marché : Fichier " . $upLoadDir . $fileName . " uploadé");
|
||||
|
||||
// Chemin et nom du fichier CSV à importer
|
||||
$source = $upLoadDir . $fileName;
|
||||
|
||||
// L'utilisateur qui importe est celui qui est connecté
|
||||
$fkUser = $Session->_user["rowid"];
|
||||
|
||||
// Structure du fichier CSV
|
||||
$row = 1; // une ligne d'en-tête
|
||||
$headers = true;
|
||||
$separateur = ";";
|
||||
// Item No.;ItemName;Item Group;ListName;List Price;Discount in %;Quantity
|
||||
$colonnes = array('code', 'libelle', 'groupe', 'liste', 'prix', 'prc_discount', 'quantite');
|
||||
$nbColonnes = count($colonnes);
|
||||
|
||||
// Libellé de l'importation
|
||||
$import_libelle = "Importation du fichier CSV des produits d'un marché";
|
||||
|
||||
// Fichier log utilisé pour le debug
|
||||
$nomLog = 'csv-' . date("Y") . '-' . date("m") . '-' . date("d") . '-' . date("H") . '-' . date("i") . '-' . date("s") . '.log';
|
||||
$log = $upLoadDir . $nomLog;
|
||||
$fhlog = fopen($log, "a");
|
||||
fwrite($fhlog, "importCSV " . $import_libelle . " : " . $source . "\r\n");
|
||||
|
||||
//! on détecte l'encodage du fichier CSV
|
||||
$codOrigin = mb_detect_encoding(file_get_contents($source), "Windows-1252, UTF-8, ISO-8859-1, ISO-8859-15", true);
|
||||
fwrite($fhlog, "Encodage détecté : " . $codOrigin . "\r\n");
|
||||
|
||||
|
||||
//! on charge les listes tarifaires par marché
|
||||
$sql = 'SELECT l.rowid, l.fk_marche, l.mot_cle, l.terme_achat, l.terme_vente FROM marches_listes l LEFT JOIN marches m ON l.fk_marche=m.rowid WHERE m.active=1;';
|
||||
$marchesListes = getinfos($sql, "gen");
|
||||
//! Tableaux des marchés mis à jour pour effectuer en fin d'import la purge des produits non importés de ces marchés
|
||||
$idMarches = array();
|
||||
$idMarche = 0; // le marché en cours d'importation
|
||||
$termeAchat = "ACHAT";
|
||||
$termeVente = "VENTE";
|
||||
//! tableaux des marché-code-incrément discount pour gérer dans quel discount on enregistre la paire discount-quantité (de 1 à 6)
|
||||
$lstMarchesCodesDiscount = array();
|
||||
|
||||
//! on lance la requête de préparation
|
||||
$sql = 'UPDATE produits SET chk_import=0;';
|
||||
qSQL($sql, "gen");
|
||||
fwrite($fhlog, "Requête de preparation terminée : " . $sql . "\r\n");
|
||||
|
||||
//! On récupère le contenu de la table produits pour vérifier si le produit existe ou non à chaque ligne
|
||||
$sql = 'SELECT rowid, CONCAT(fk_marche, "-", code) AS marchecode FROM produits;';
|
||||
$produitsExistants = getinfos($sql, "gen");
|
||||
|
||||
//! on récupère le nombre de lignes de ce fichier CSV pour alimenter la progress bar
|
||||
$totUpload = 0;
|
||||
$fh = fopen($source, 'rb') or die("ERROR OPENING DATA");
|
||||
while (fgets($fh) !== false) $totUpload++;
|
||||
fclose($fh);
|
||||
|
||||
if (($handle = fopen($source, "rb")) !== FALSE) {
|
||||
fwrite($fhlog, "Fichier CSV ouvert : démarrage de la lecture ligne par ligne\r\n");
|
||||
eLog("jximport démarrage de la lecture du fichier csv ligne par ligne");
|
||||
|
||||
while (($data = fgetcsv($handle, 700, $separateur)) !== FALSE) {
|
||||
$num = count($data);
|
||||
if ($headers && $row == 1) {
|
||||
// ce csv contient une ligne d'entêtes de colonnes, on ne traite pas cette ligne
|
||||
fwrite($fhlog, "Ok lecture CSV 1ère ligne en-tête\r\n");
|
||||
} else {
|
||||
// on traite la ligne
|
||||
$code = trim($data[0]);
|
||||
if (strlen($code) > 0) {
|
||||
// on ne traite pas la ligne si le code est vide : dernière ligne du fichier ?
|
||||
$libelle = str_replace('"', '', trim($data[1])); // on remplace les doubles guillemets par rien
|
||||
// on réencode en ISO 8859-1 pour éviter les problèmes d'accent
|
||||
if ($codOrigin == "UTF-8") {
|
||||
$libelle = utf8_decode($libelle);
|
||||
}
|
||||
if ($codOrigin != "ISO-8859-1") {
|
||||
// Convertir en ISO 8859-1
|
||||
$libelle = iconv($codOrigin, "ISO-8859-15//IGNORE", $libelle);
|
||||
}
|
||||
|
||||
$groupe = str_replace(" ", " ", trim($data[2])); // on remplace les doubles espaces par un simple espace
|
||||
$liste = trim($data[3]);
|
||||
|
||||
if ($idMarche == 0) {
|
||||
foreach ($marchesListes as $corr) {
|
||||
$lmc = strlen($corr["mot_cle"]);
|
||||
if ($lmc > 0) {
|
||||
$posMotCle = strpos($liste, $corr["mot_cle"]);
|
||||
if ($posMotCle !== false) {
|
||||
//! le mot clé est bien dans $liste
|
||||
$idMarche = $corr["fk_marche"];
|
||||
$termeAchat = $corr["terme_achat"];
|
||||
$termeVente = $corr["terme_vente"];
|
||||
|
||||
//! on rajoute ce fk_marche dans la liste des marchés traités pour effectuer la purge des chk_import=0 à la fin
|
||||
if (!in_array($idMarche, $idMarches)) {
|
||||
$idMarches[] = $idMarche;
|
||||
// C'est la 1ère ligne de produit pour ce marché :on supprime d'office tous les prix d'achat et de vente des produits de ce marché
|
||||
$sql = 'UPDATE produits p SET p.prix_achat_net=0, p.prix_vente=0, p.prc_discount_1=0, p.quantite_1=0, p.prc_discount_2=0, p.quantite_2=0, p.prc_discount_3=0, p.quantite_3=0, p.prc_discount_4=0, p.quantite_4=0, p.prc_discount_5=0, p.quantite_5=0, p.prc_discount_6=0, p.quantite_6=0 WHERE fk_marche=' . $idMarche;
|
||||
eLog("Import produits marché : suppression des prix d'achat et de vente pour ce marché : " . $idMarche);
|
||||
fwrite($fhlog, "Nettoyage des infos produits du marché " . $idMarche . "\r\n");
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($idMarche == 0) {
|
||||
//! on n'a pas trouvé de marché correspondant à la liste
|
||||
$erreur = "ligne " . $row . " : pas de marché correspondant à la liste (" . $liste . ")";
|
||||
fwrite($fhlog, $erreur . "\r\n");
|
||||
break;
|
||||
}
|
||||
// fwrite($fhlog, "ligne " . $row . " : c'est le marché " . $fkMarche . " avec pour achat (" . $termeAchat . ") et pour vente (" . $termeVente . ")\r\n");
|
||||
fwrite($fhlog, "ligne " . $row . " : code (" . $code . ") libelle (" . $libelle . ") groupe (" . $groupe . ") liste (" . $liste . ")\r\n");
|
||||
|
||||
// pour le prix, on vérifie qu'il n'y ait pas de séparateur de milliers avec un . ou un espace, sinon on le l'enlève (on ne le fait que pour les chaînes d'un longueur > 6)
|
||||
// Ex : 16,63 on ne traite pas, 1.663,63 ou 1 663,63 on traite
|
||||
if (strlen($data[4]) > 6) {
|
||||
$data[4] = str_replace(".", "", $data[4]);
|
||||
$data[4] = str_replace(" ", "", $data[4]);
|
||||
}
|
||||
// ensuite on remplace à chaque fois la virgule de la décimale par un point pour le prix
|
||||
$prix = floatval(str_replace(",", ".", trim($data[4])));
|
||||
$prc_discount = floatval(str_replace(",", ".", trim($data[5])));
|
||||
$quantite = intval(str_replace(",", ".", trim($data[6])));
|
||||
|
||||
$set = 'libelle="' . $libelle . '", groupe="' . $groupe . '", liste="' . $liste . '", ';
|
||||
$posHa = strpos($liste, $termeAchat);
|
||||
if ($posHa !== false) {
|
||||
$set .= 'prix_achat_net=' . $prix . ', ';
|
||||
} else {
|
||||
$posVe = strpos($liste, $termeVente);
|
||||
if ($posVe !== false) {
|
||||
// ce n'est que pour la vente que l'on active le produit (on affiche ce produit que s'il est à vendre)
|
||||
$set .= 'prix_vente=' . $prix . ', active=1, chk_import=1, ';
|
||||
} else {
|
||||
$erreur = 'Erreur sur la ligne ' . $row . ' où la LISTNAME ne contient ni ACHAT ni VENTE';
|
||||
fwrite($fhlog, $erreur . "\r\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($prc_discount > 0) {
|
||||
$lstMarchesCodesDiscounts[] = $idMarche . '-' . $code . '-';
|
||||
$incDiscount = array_count_values($lstMarchesCodesDiscounts)[$idMarche . '-' . $code . '-'];
|
||||
if ($incDiscount < 7) {
|
||||
$set .= 'prc_discount_' . $incDiscount . '=' . $prc_discount . ', quantite_' . $incDiscount . '=' . $quantite . ', ';
|
||||
} else {
|
||||
$erreur = 'Erreur sur la ligne ' . $row . ' où le nombre de discount > 0 est supérieur à 6 : code produit (' . $code . ')';
|
||||
fwrite($fhlog, $erreur . "\r\n");
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// pas de % discount sur cette ligne
|
||||
if ($posHa !== false) {
|
||||
// et on est sur une ligne Achat, donc on met tous les prc_discount et qte à 0
|
||||
$set .= 'prc_discount_1=0, prc_discount_2=0, prc_discount_3=0, prc_discount_4=0, prc_discount_5=0, prc_discount_6=0, quantite_1=0, quantite_2=0, quantite_3=0, quantite_4=0, quantite_5=0, quantite_6=0, ';
|
||||
}
|
||||
}
|
||||
// on enlève la virgule de fin
|
||||
$set = substr($set, 0, strlen($set) - 2);
|
||||
|
||||
//! On regarde si ce produit existe déjà sur ce marché
|
||||
$idExistant = 0;
|
||||
$aRechercher = $idMarche . '-' . $code;
|
||||
foreach ($produitsExistants as $produitExistant) {
|
||||
if ($produitExistant["marchecode"] == $aRechercher) {
|
||||
$idExistant = $produitExistant["rowid"];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($idExistant > 0) {
|
||||
// le produit existe déjà, on le met à jour
|
||||
$sql = 'UPDATE produits SET ' . $set . ' WHERE rowid=' . $idExistant . ';';
|
||||
fwrite($fhlog, $row . " update : " . $sql . "\r\n");
|
||||
qSQL($sql, "gen");
|
||||
} else {
|
||||
// le produit n'existe pas, on le crée
|
||||
$sql = 'INSERT INTO produits SET fk_marche=' . $idMarche . ', code="' . $code . '", ' . $set . ';';
|
||||
fwrite($fhlog, $row . " insert : " . $sql . "\r\n");
|
||||
$newId = qSQL($sql, "gen", true);
|
||||
// on ajoute le produit à la liste des produits existants, pour gérer le cas où on a plusieurs fois le même produit dans le fichier (cas de plusieurs discounts)
|
||||
$produitsExistants[] = array("rowid" => $newId, "marchecode" => $idMarche . '-' . $code);
|
||||
}
|
||||
// eLog("jximport ligne " . $row . " : " . $sql);
|
||||
fwrite($fhlog, "ligne " . $row . " : import terminé\r\n");
|
||||
}
|
||||
}
|
||||
$row++;
|
||||
// echo json_encode(['progress' => ($row / $totUpload) * 100]);
|
||||
// ob_flush();
|
||||
// flush();
|
||||
// usleep(50);
|
||||
} // end while
|
||||
fclose($handle);
|
||||
fwrite($fhlog, "Fichier CSV fermé\r\n");
|
||||
} // end if fopen
|
||||
|
||||
fwrite($fhlog, "Fin de la boucle\r\n");
|
||||
// Enfin, on désactive les produits qui n'ont pas été importés dans le ou les marchés traités
|
||||
// la règle est qu'on traite un marché en entier et non partiellement
|
||||
// on commence par récupérer la liste des marchés traités
|
||||
foreach ($idMarches as $idMarch) {
|
||||
$sql = 'UPDATE produits SET active=0 WHERE fk_marche=' . $idMarch . ' AND chk_import=0;';
|
||||
eLog($sql);
|
||||
fwrite($fhlog, "Désactivation des produits non importés : " . $sql . "\r\n");
|
||||
qSQL($sql, "gen");
|
||||
// et on enregistre la date de l'import au niveau de chaque marché concerné
|
||||
$sql = 'UPDATE marches SET date_import="' . date("Y-m-d H:i:s") . '" WHERE rowid=' . $idMarch . ';';
|
||||
eLog($sql);
|
||||
fwrite($fhlog, "Mise à jour de la date d'import dans marches : " . $sql . "\r\n");
|
||||
qSQL($sql, "gen");
|
||||
}
|
||||
fwrite($fhlog, "Fin de l'importation et fermeture du fichier log\r\n");
|
||||
fclose($fhlog);
|
||||
} // end if move_uploaded
|
||||
} // end if size_max
|
||||
} // end foreach file uploaded
|
||||
|
||||
// ob_clean();
|
||||
if ($fileName == "") {
|
||||
$ret = array('ret' => "ko", 'msg' => "Aucun fichier à importer");
|
||||
} else {
|
||||
if ($erreur == "") {
|
||||
$ret = array('ret' => "ok", 'msg' => "L'importation est terminée et s'est bien déroulée");
|
||||
} else {
|
||||
$ret = array('ret' => "ko", 'msg' => $erreur);
|
||||
}
|
||||
}
|
||||
// } else {
|
||||
// $ret = array('ret' => "ko", 'msg' => "Pas d'idMarche");
|
||||
// }
|
||||
echo json_encode($ret);
|
||||
break;
|
||||
|
||||
case "upload_sap_pdf":
|
||||
if (isset($_POST["cid"])) {
|
||||
$cid = nettoie_input($_POST["cid"]);
|
||||
eLog("upload_sap_pdf: " . $cid);
|
||||
|
||||
$upDir = ROOT . $Conf->_pathupload . "devis" . DS;
|
||||
if (!is_dir($upDir)) {
|
||||
mkdir($upDir, 0777, true);
|
||||
}
|
||||
eLog("Dossier upload : " . $upDir);
|
||||
$ret = array('ret' => "ko", 'msg' => "Erreur Aucun PDF SAP à importer");
|
||||
foreach ($_FILES as $file) {
|
||||
$size_file = filesize($file['tmp_name']);
|
||||
$size_max = 10500600;
|
||||
if ($size_file > $size_max) {
|
||||
$ret = array('ret' => "ko", 'msg' => "Le PDF SAP a une taille trop importante : " . $size_file . " pour un max de " . $size_max);
|
||||
eLog("problème de taille de fichier : " . $size_file . " pour un max de " . $size_max);
|
||||
} else {
|
||||
//! on remplace les espaces par des _ dans le nom du fichier sur le serveur
|
||||
$filename = str_normalize(basename($file["name"]), true);
|
||||
if (strrpos($filename, ".") === false) {
|
||||
//! pas d'extension
|
||||
$typ = "";
|
||||
} else {
|
||||
$typ = substr($filename, strrpos($filename, ".") + 1);
|
||||
}
|
||||
eLog("le fichier sera uploadé : " . $upDir . $filename);
|
||||
if (move_uploaded_file($file['tmp_name'], $upDir . $filename)) {
|
||||
// On enregistre les infos de ce fichier dans la table medias
|
||||
$upDirMedia = "pub/files/upload/devis/";
|
||||
$sql = 'INSERT INTO medias SET dir0="' . $upDirMedia . '", support="devis_pdf_sap", support_rowid=' . $cid . ', fichier="' . $filename . '", type_fichier="' . $typ . '", date_creat="' . date("Y-m-d H:i:s") . '", fk_user_creat=' . $fkUser . ';';
|
||||
qSQL($sql, "gen");
|
||||
|
||||
// On change le statut du devis et on prévient le RR de la réception du PDF SAP par email
|
||||
$sql = 'UPDATE devis SET fk_statut_devis=6, date_modif="' . date("Y-m-d H:i:s") . '", fk_user_modif=' . $fkUser . ' WHERE rowid=' . $cid . ';';
|
||||
qSQL($sql, "gen");
|
||||
|
||||
// On ajoute un message automatique dans le chat
|
||||
$sql = 'INSERT INTO devis_histo SET fk_devis=' . $cid . ', fk_user=' . $fkUser . ', date_histo="' . date("Y-m-d H:i:s") . '", commentaire="Le PDF SAP du devis a été déposé pour vérification du RR";';
|
||||
qSQL($sql, "gen");
|
||||
|
||||
// On récupère les infos du devis pour envoyer un email au RR
|
||||
$sql = 'SELECT d.rowid, d.date_demande, d.fk_client, d.lib_new_client, d.cp_new_client, d.ville_new_client, u.prenom, u.libelle, u.email FROM devis d LEFT JOIN users u ON d.fk_user = u.rowid WHERE d.rowid=' . $cid . ';';
|
||||
$res = getinfos($sql, "gen");
|
||||
$data = $res[0];
|
||||
|
||||
$nom = $data["prenom"] . " " . $data["libelle"];
|
||||
$dest = $data["email"];
|
||||
$idClient = $data["fk_client"];
|
||||
$nomClient = "";
|
||||
|
||||
if ($idClient == 0) {
|
||||
$nomClient = $data["lib_new_client"] . ", (" . $data["cp_new_client"] . " - " . $data["ville_new_client"] . ")";
|
||||
} else {
|
||||
$sql = 'SELECT c.libelle, c.cp, c.ville FROM clients c WHERE c.rowid=' . $idClient . ';';
|
||||
$client = getinfos($sql, "gen");
|
||||
if (count($client) == 1) {
|
||||
$nomClient = $client[0]["libelle"] . " (" . $client[0]["cp"] . " - " . $client[0]["ville"] . ")";
|
||||
}
|
||||
}
|
||||
|
||||
$sujet = "DEVIS - Réception Devis SAP";
|
||||
$message = "Bonjour " . $nom . ",<br><br>Vous venez de recevoir la version SAP PDF d'un de vos devis. Merci de procéder à la vérification de celui-ci et de le valider sur CLEO.<br/>";
|
||||
$message .= "Devis : #" . $data["rowid"] . " du " . affiche_date($data["date_demande"]) . "<br/>";
|
||||
$message .= "Client : " . $nomClient . "<br/>";
|
||||
$message .= "<br/><br/>Cordialement,<br/>L'équipe ADV<br/>";
|
||||
$message .= "Email généré automatiquement par l'application CLEO de gestion des devis";
|
||||
|
||||
// Ajout de logs détaillés pour l'envoi d'email
|
||||
eLog("Tentative d'envoi d'email à " . $dest . " avec le sujet : " . $sujet);
|
||||
$email = envoieMail($dest, $sujet, $message);
|
||||
eLog("Résultat de l'envoi d'email : " . json_encode($email));
|
||||
|
||||
$ret = array('ret' => "ok", 'msg' => "L'importation est terminée et s'est bien déroulée");
|
||||
eLog("Le fichier PDF SAP a été correctement uploadé");
|
||||
} else {
|
||||
$ret = array('ret' => "ko", 'msg' => "Erreur lors de l'importation du PDF SAP");
|
||||
eLog("Le fichier PDF SAP n'a pas pu être uploadé");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$ret = array('ret' => "ko", 'msg' => "Pas d'id");
|
||||
}
|
||||
echo json_encode($ret);
|
||||
break;
|
||||
|
||||
case "get_files":
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid) && isset($data->sup)) {
|
||||
$idMedia = nettoie_input($data->cid);
|
||||
$support = nettoie_input($data->sup);
|
||||
$sql = 'SELECT * FROM medias WHERE support="' . $support . '" AND support_rowid=' . $idMedia . ';';
|
||||
$ret = getinfos($sql, "gen");
|
||||
} else {
|
||||
$ret = array('ret' => "ko", 'msg' => "Pas d'id");
|
||||
}
|
||||
echo json_encode($ret);
|
||||
break;
|
||||
|
||||
case "delete_file":
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$idMedia = nettoie_input($data->cid);
|
||||
$sql = 'DELETE FROM medias WHERE rowid=' . $idMedia . ';';
|
||||
qSQL($sql, "gen");
|
||||
$ret = array('ret' => "ok", 'msg' => "Le fichier a bien été supprimé");
|
||||
} else {
|
||||
$ret = array('ret' => "ko", 'msg' => "Pas d'id");
|
||||
}
|
||||
echo json_encode($ret);
|
||||
break;
|
||||
}
|
||||
exit();
|
||||
852
controllers/cjxpost.php
Normal file
852
controllers/cjxpost.php
Normal file
@@ -0,0 +1,852 @@
|
||||
<?php
|
||||
global $Session;
|
||||
global $Conf;
|
||||
global $Route;
|
||||
|
||||
//! on va chercher la data de la Session au format tableau
|
||||
$session_data = $Session->get_data();
|
||||
//! où on récupère le fk_tiers sur lequel l'utilisateur travaille
|
||||
if (isset($session_data["tiers"])) {
|
||||
$fk_tiers = $session_data["tiers"];
|
||||
} else {
|
||||
$fk_tiers = 0;
|
||||
}
|
||||
|
||||
$fk_user = $Session->_user["rowid"];
|
||||
|
||||
eLog("jxpost action : " . $Route->_action);
|
||||
|
||||
function cleanData(&$str)
|
||||
{
|
||||
// Fonction de nettoyage des données pour l'export Excel
|
||||
if ($str == 't') $str = 'TRUE';
|
||||
if ($str == 'f') $str = 'FALSE';
|
||||
if (preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) {
|
||||
$str = "'$str";
|
||||
}
|
||||
if (strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
|
||||
$str = mb_convert_encoding($str, 'UTF-16LE', 'UTF-8');
|
||||
}
|
||||
|
||||
function filterData(&$str)
|
||||
{
|
||||
$str = preg_replace("/\t/", "\\t", $str);
|
||||
$str = preg_replace("/\r?\n/", "\\n", $str);
|
||||
if (strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
|
||||
}
|
||||
|
||||
switch ($Route->_action) {
|
||||
case "filter":
|
||||
$idfilter = $_POST["idfilter"];
|
||||
switch ($idfilter) {
|
||||
case "filtertiers":
|
||||
$Session->set_data($idfilter . "_search", $_POST["filter_search"]);
|
||||
$Session->set_data($idfilter . "_contact", $_POST["filter_contact"]);
|
||||
$Session->set_data($idfilter . "_ape", $_POST["filter_ape"]);
|
||||
if (isset($_POST["filter_recent"])) {
|
||||
$recent = 1;
|
||||
} else {
|
||||
$recent = 0;
|
||||
}
|
||||
$Session->set_data($idfilter . "_recent", $recent);
|
||||
if (isset($_POST["filter_agenda"])) {
|
||||
$agenda = 1;
|
||||
} else {
|
||||
$agenda = 0;
|
||||
}
|
||||
$Session->set_data($idfilter . "_agenda", $agenda);
|
||||
if (isset($_POST["filter_archive"])) {
|
||||
$archive = 1;
|
||||
} else {
|
||||
$archive = 0;
|
||||
}
|
||||
$Session->set_data($idfilter . "_archive", $archive);
|
||||
$Session->set_data($idfilter . "_type_tiers", $_POST["filter_type_tiers"]);
|
||||
$Session->set_data($idfilter . "_ville", $_POST["filter_villeA"]); //! filter_villeA parce que c'est un autocomplete : retourne le rowid qui est en fait la ville !
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case "upfind":
|
||||
$tab = $_POST["win"];
|
||||
$lid = $Route->_param1;
|
||||
|
||||
if ($Conf::erp) {
|
||||
$sql = 'SELECT * FROM medias WHERE dir2="' . $tab . '" AND support_rowid=' . $lid . ';';
|
||||
} else {
|
||||
$sql = 'SELECT * FROM medias WHERE support="' . $tab . '" AND support_rowid=' . $lid . ';';
|
||||
}
|
||||
$upls = array();
|
||||
$upls = getinfos($sql, "groupe");
|
||||
echo json_encode($upls);
|
||||
break;
|
||||
|
||||
case "updelete":
|
||||
updelete($_POST);
|
||||
break;
|
||||
|
||||
case "upload":
|
||||
if ($Conf::erp) {
|
||||
upload($_POST);
|
||||
} else {
|
||||
upload_old($_POST);
|
||||
}
|
||||
break;
|
||||
|
||||
case "medias":
|
||||
$user = $Session->_user["rowid"];
|
||||
$type = $Route->_param1; //! facture par exemple
|
||||
if (isset($_POST["rowid"])) {
|
||||
$rowid = $_POST["rowid"]; //! c'est le rowid de la facture par exemple
|
||||
if ($type == "facture" || $type == "devis") {
|
||||
//! on doit aller chercher le num_facture pour avoir le nom du fichier
|
||||
if ($type == "facture") {
|
||||
$num_facture = getdata("devis", $rowid, "num_facture");
|
||||
} else {
|
||||
$num_facture = getdata("devis", $rowid, "num_devis");
|
||||
}
|
||||
$fk_tiers = getdata("devis", $rowid, "fk_soc");
|
||||
$nom_tiers = str_normalize(getdata("clients", $fk_tiers, "libelle", "groupe"));
|
||||
if ($Conf->_entite["raz_num_devis"]) {
|
||||
$num_facture = substr('000' . $num_facture, -3);
|
||||
} else {
|
||||
$num_facture = substr('0000' . $num_facture, -4);
|
||||
}
|
||||
$support = $fk_tiers;
|
||||
$filename = $fk_tiers . "_" . $type . "_" . $num_facture . ".pdf";
|
||||
if (isset($_POST["relance"])) {
|
||||
$filename = $fk_tiers . "_" . $type . "_" . $num_facture . "_relance_" . date("Ymd") . ".pdf";
|
||||
}
|
||||
$typ = "pdf";
|
||||
$dir0 = "tiers";
|
||||
$dir1 = $nom_tiers;
|
||||
} else {
|
||||
$support = $type;
|
||||
$filename = $rowid . ".pdf";
|
||||
$typ = "pdf";
|
||||
$rep = $type . DS . $rowid . DS . "pdf";
|
||||
$dir0 = "tiers";
|
||||
$dir1 = "dir1";
|
||||
}
|
||||
$dir2 = $type;
|
||||
$des = "";
|
||||
$pos = "L";
|
||||
$hau = 0;
|
||||
$lar = 0;
|
||||
//! On vérifie d'abord qu'il n'y ait pas un média existant pour le même support, le même support_rowid et le même nom de fichier : doublon !
|
||||
$sql = 'SELECT * FROM medias WHERE dir0="' . $dir0 . '" AND dir1="' . $dir1 . '" AND dir2="' . $dir2 . '" AND fichier="' . $filename . '";';
|
||||
$doublon = getinfos($sql, "groupe");
|
||||
if (count($doublon) == 0) {
|
||||
//! il n'y a pas de doublon, on peut créer l'enregistrement
|
||||
$sql = 'INSERT INTO medias SET dir0="' . $dir0 . '", dir1="' . $dir1 . '", dir2="' . $dir2 . '", support_rowid=' . $rowid . ', fichier="' . $filename . '", fk_user_creat=' . $user . ', ';
|
||||
$sql .= 'type_fichier="' . $typ . '", date_creat="' . date("Y-m-d H:i:s") . '", description="' . $des . '", position="' . $pos . '", hauteur=' . $hau . ', largeur=' . $lar . ';';
|
||||
} else {
|
||||
//! l'enregistrement existe déjà : on met à jour date_modif et fk_user_modif
|
||||
$sql = 'UPDATE medias SET date_modif="' . date("Y-m-d H:i:s") . '", fk_user_modif=' . $user . ' WHERE dir0="' . $dir0 . '" AND dir1="' . $dir1 . '" AND dir2="' . $dir2 . '" AND fichier="' . $filename . '";';
|
||||
}
|
||||
eLog("jxpost medias : " . $sql);
|
||||
qSQL($sql, "groupe");
|
||||
}
|
||||
break;
|
||||
|
||||
case "refresh":
|
||||
$win = $Route->_param1;
|
||||
if ($win != "") {
|
||||
if (isset($_POST["input"])) {
|
||||
$input = $_POST["input"];
|
||||
switch ($win) {
|
||||
case "winaction":
|
||||
//! un refresh dans la fenêtre modale winaction
|
||||
if ($input == "fk_contact") {
|
||||
$sql = "SELECT rowid, CONCAT(firstname, ' ', name) AS libelle FROM contacts WHERE fk_soc=" . $fk_tiers . " ORDER BY libelle;";
|
||||
$res = qSQL($sql, "groupe");
|
||||
$arr = array();
|
||||
while ($rec = $res->fetch_assoc()) {
|
||||
$arr[] = $rec;
|
||||
}
|
||||
$jsonresult = json_encode($arr);
|
||||
$lignes = $jsonresult;
|
||||
echo $lignes;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "mediafind":
|
||||
$tab = $_POST["win"];
|
||||
$lid = $Route->_param1;
|
||||
|
||||
if ($Conf::erp) {
|
||||
$sql = 'SELECT * FROM medias WHERE dir2="' . $tab . '" AND support_rowid=' . $lid . ';';
|
||||
} else {
|
||||
$sql = 'SELECT * FROM medias WHERE support="' . $tab . '" AND support_rowid=' . $lid . ';';
|
||||
}
|
||||
$upls = array();
|
||||
$upls = getinfos($sql, "groupe");
|
||||
$upls = $upls[0];
|
||||
echo json_encode($upls);
|
||||
break;
|
||||
|
||||
case "getdata":
|
||||
$chp = $_POST["chp"];
|
||||
$typ = $Route->_param1;
|
||||
$sql = "";
|
||||
switch ($typ) {
|
||||
case "tiers":
|
||||
$sql = "SELECT $chp AS data FROM clients WHERE rowid=" . $fk_tiers . ";";
|
||||
$dbn = "groupe";
|
||||
break;
|
||||
}
|
||||
|
||||
$upls = array();
|
||||
if ($sql != "") {
|
||||
$upls = getinfos($sql, $dbn);
|
||||
$upls = $upls[0];
|
||||
}
|
||||
echo json_encode($upls);
|
||||
break;
|
||||
|
||||
case "setsession":
|
||||
if (isset($_POST["key"]) && isset($_POST["val"])) {
|
||||
$Session->set_data($_POST["key"], $_POST["val"]);
|
||||
}
|
||||
break;
|
||||
|
||||
case "autocomplete":
|
||||
if (isset($_POST["term"])) {
|
||||
$term = $_POST["term"];
|
||||
$tabl = $_POST["table"];
|
||||
$fiel = $_POST["field"];
|
||||
$fiel2 = isset($_POST["field2"]) ? $_POST["field2"] : "";
|
||||
$fiel3 = isset($_POST["field3"]) ? $_POST["field3"] : "";
|
||||
$fiel4 = isset($_POST["field4"]) ? $_POST["field4"] : "";
|
||||
$fiel5 = isset($_POST["field5"]) ? $_POST["field5"] : "";
|
||||
$fiel6 = isset($_POST["field6"]) ? $_POST["field6"] : "";
|
||||
$fiel7 = isset($_POST["field7"]) ? $_POST["field7"] : "";
|
||||
$fiel8 = isset($_POST["field8"]) ? $_POST["field8"] : "";
|
||||
$grou = isset($_POST["group"]) ? $_POST["group"] : "";
|
||||
|
||||
if (strtolower(substr($tabl, 0, 7)) == "select ") {
|
||||
//! C'est directement une requête
|
||||
$sql = $tabl;
|
||||
$minisql = strtolower($sql);
|
||||
$poswhere = strpos($minisql, " where ");
|
||||
if ($poswhere === FALSE) {
|
||||
//! il n'y a pas de clause WHERE dans la requête
|
||||
//! on regarde s'il y a une clause ORDER BY pour pouvoir insérer la clause WHERE juste avant
|
||||
$posorder = strpos($minisql, " order by ");
|
||||
if ($posorder === FALSE) {
|
||||
//! il n'y a pas non plus de clause ORDER BY dans la requête, on ajoute le WHERE à la fin
|
||||
$posgroup = strpos($minisql, " group by ");
|
||||
if ($posgroup === FALSE) {
|
||||
$sql = str_replace(';', ' WHERE ' . $fiel . ' LIKE "%' . $term . '%";', $sql);
|
||||
} else {
|
||||
//! il y a une clause GROUP BY
|
||||
$sql = str_replace(' GROUP BY ', ' WHERE ' . $fiel . ' LIKE "%' . $term . '%" GROUP BY ', $sql);
|
||||
}
|
||||
} else {
|
||||
//! il y a une clause ORDER BY
|
||||
$sql = str_replace(' ORDER BY ', ' WHERE ' . $fiel . ' LIKE "%' . $term . '%" ORDER BY ', $sql);
|
||||
}
|
||||
} else {
|
||||
//! il y a déjà une condition WHERE dans la requête définie
|
||||
$sql = str_replace(' WHERE ', ' WHERE ' . $fiel . ' LIKE "%' . $term . '%" AND ', $sql);
|
||||
}
|
||||
} else {
|
||||
if ($grou == "") {
|
||||
$sql = 'SELECT * FROM ' . $tabl . ' WHERE ' . $fiel . ' LIKE "%' . $term . '%" ORDER BY ' . $fiel . ';';
|
||||
} else {
|
||||
$sql = 'SELECT * FROM ' . $tabl . ' WHERE ' . $fiel . ' LIKE "%' . $term . '%" GROUP BY ' . $fiel . ' ORDER BY ' . $fiel . ';';
|
||||
}
|
||||
}
|
||||
eLog("autocomplete : " . $sql);
|
||||
$res = qSQL($sql);
|
||||
$rows = array();
|
||||
while ($r = mysqli_fetch_assoc($res)) {
|
||||
$rows[] = $r;
|
||||
}
|
||||
echo json_encode($rows);
|
||||
exit();
|
||||
}
|
||||
break;
|
||||
|
||||
case "get_context":
|
||||
//! Renvoie le contexte de l'utilisateur
|
||||
$ajson = array();
|
||||
$ajson["user"] = $Session->_user;
|
||||
$ajson["session"] = $Session->get_data();
|
||||
$ajson["devip"] = $Conf->_devIp ? "1" : "0";
|
||||
echo json_encode($ajson);
|
||||
break;
|
||||
|
||||
case "load_client":
|
||||
//! Charge les infos d'un client
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$sql = 'SELECT c.* FROM clients c WHERE c.rowid=' . $cid . ';';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
} else {
|
||||
echo "Erreur : pas de client";
|
||||
}
|
||||
break;
|
||||
|
||||
case "search_clients":
|
||||
//! Cherche les clients correspondant à un libellé, une adresse, un code postal, une ville, un nom, un prénom, une fonction ou un email
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->search)) {
|
||||
$search = nettoie_input($data->search);
|
||||
$sql = 'SELECT c.rowid, c.libelle, c.type_client, c.adresse1, c.cp, c.ville FROM clients c ';
|
||||
$sql .= 'WHERE c.libelle LIKE "%' . $search . '%" OR c.adresse1 LIKE "%' . $search . '%" OR c.cp LIKE "%' . $search . '%" OR c.ville LIKE "%' . $search . '%" OR c.contact_nom LIKE "%' . $search . '%" OR c.contact_prenom LIKE "%' . $search . '%" OR c.contact_fonction LIKE "%' . $search . '%" OR c.email LIKE "%' . $search . '%" ';
|
||||
$sql .= 'ORDER BY c.libelle;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
} else {
|
||||
$ret = array('ret' => "ko");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "load_marches":
|
||||
//! charge des infos de tous les marchés
|
||||
$sql = 'SELECT m.rowid, m.libelle FROM marches m ORDER BY m.libelle DESC;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
break;
|
||||
|
||||
case "load_marche":
|
||||
//! Charge les infos d'un marché
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$sql = 'SELECT m.* FROM marches m WHERE m.rowid=' . $cid . ';';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
} else {
|
||||
$ret = array('ret' => "ko");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "search_produits":
|
||||
//! Cherche les produits correspondant à un code ou à un libellé
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->search)) {
|
||||
$search = nettoie_input($data->search);
|
||||
$sql = 'SELECT p.*, pf.famille FROM produits p LEFT JOIN produits_familles pf ON p.fk_famille_produit=pf.rowid ';
|
||||
$sql .= 'WHERE (p.code LIKE "%' . $search . '%" OR p.libelle LIKE "%' . $search . '%" OR p.groupe LIKE "%' . $search . '%" OR pf.famille LIKE "%' . $search . '%") AND p.prix_vente>0 AND p.active=1 ';
|
||||
$sql .= 'ORDER BY p.libelle;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
} else {
|
||||
$ret = array('ret' => "ko");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "load_familles":
|
||||
//! Charge les familles de produits existantes
|
||||
$sql = 'SELECT xf.* FROM x_familles xf ORDER BY xf.ordre;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
break;
|
||||
|
||||
case "load_familles_groupes":
|
||||
//! Charge les familles par groupes de produits existantes
|
||||
$sql = 'SELECT pf.* FROM produits_familles pf ORDER BY pf.ordre, pf.groupe;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
break;
|
||||
|
||||
case "save_familles":
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
|
||||
//! on récupère les familles existantes
|
||||
$sql = 'SELECT pf.rowid FROM produits_familles pf ORDER BY pf.rowid;';
|
||||
$pf = getinfos($sql, "gen");
|
||||
//! on les désactive toutes
|
||||
$sql = 'UPDATE produits_familles SET active=0;';
|
||||
qSQL($sql);
|
||||
|
||||
//! on boucle sur les familles reçues
|
||||
foreach ($data as $row) {
|
||||
$rowid = nettoie_input($row->id);
|
||||
$set = 'groupe="' . nettoie_input(trim($row->groupe)) . '", ';
|
||||
$set .= 'ordre="' . nettoie_input(trim($row->ordre)) . '", ';
|
||||
$set .= 'fk_famille="' . nettoie_input(trim($row->famille)) . '", ';
|
||||
$set .= 'code_maintenance="' . nettoie_input(trim($row->maintenance)) . '", ';
|
||||
$set .= 'marge_rr="' . nettoie_input(trim($row->margerr)) . '", ';
|
||||
$set .= 'marge_dv="' . nettoie_input(trim($row->margedv)) . '", ';
|
||||
$set .= 'active=1 ';
|
||||
//! on recherche si la famille existe déjà
|
||||
$found = false;
|
||||
foreach ($pf as $p) {
|
||||
if ($p["rowid"] == $rowid) {
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$found) {
|
||||
//! Si la famille n'existe pas, on la crée
|
||||
$sql = 'INSERT INTO produits_familles SET ' . $set . ';';
|
||||
} else {
|
||||
//! Sinon on la met à jour
|
||||
$sql = 'UPDATE produits_familles SET ' . $set . ' ';
|
||||
$sql .= 'WHERE rowid=' . $rowid . ';';
|
||||
}
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
}
|
||||
//! enfin, on supprime toutes les familles qui n'ont pas été reçues, active=0
|
||||
$sql = 'DELETE FROM produits_familles WHERE active=0;';
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
|
||||
$ret = array('ret' => "ok", 'msg' => "Enregistrement des familles effectué");
|
||||
echo json_encode($ret);
|
||||
break;
|
||||
|
||||
case "save_marche":
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->rowid)) {
|
||||
$cid = nettoie_input($data->rowid);
|
||||
$act = nettoie_input($data->act);
|
||||
|
||||
$set = 'SET libelle="' . nettoie_input(trim($data->libelle)) . '"';
|
||||
$set .= ', numero="' . nettoie_input($data->numero) . '"';
|
||||
$set .= ', nom="' . nettoie_input($data->nom) . '"';
|
||||
$set .= isset($data->chk_remise_sur_tg) ? ', chk_remise_sur_tg=1' : ', chk_remise_sur_tg=0';
|
||||
$set .= isset($data->chk_prix_nets) ? ', chk_prix_nets=1' : ', chk_prix_nets=0';
|
||||
$set .= isset($data->chk_marche_public) ? ', chk_marche_public=1' : ', chk_marche_public=0';
|
||||
|
||||
if ($data->taux_remise_trimestrielle == "") {
|
||||
$set .= ', taux_remise_trimestrielle=0';
|
||||
} else {
|
||||
$set .= ', taux_remise_trimestrielle=' . $data->taux_remise_trimestrielle;
|
||||
}
|
||||
if ($data->taux_remise_semestrielle == "") {
|
||||
$set .= ', taux_remise_semestrielle=0';
|
||||
} else {
|
||||
$set .= ', taux_remise_semestrielle=' . $data->taux_remise_semestrielle;
|
||||
}
|
||||
if ($data->taux_remise_annuelle == "") {
|
||||
$set .= ', taux_remise_annuelle=0';
|
||||
} else {
|
||||
$set .= ', taux_remise_annuelle=' . $data->taux_remise_annuelle;
|
||||
}
|
||||
$set .= ', date_debut="' . d6GetDate($data->date_debut, "FM") . '"';
|
||||
$set .= ', date_fin="' . d6GetDate($data->date_fin, "FM") . '"';
|
||||
$set .= ', date_validite_prix="' . d6GetDate($data->date_validite_prix, "FM") . '"';
|
||||
$set .= ', franco_de_port="' . nettoie_input(trim($data->franco_de_port)) . '"';
|
||||
$set .= ', garantie="' . nettoie_input(trim($data->garantie)) . '"';
|
||||
$set .= ', delai_de_livraison="' . nettoie_input(trim($data->delai_de_livraison)) . '"';
|
||||
$set .= ', remises_commerciales="' . nettoie_input(trim($data->remises_commerciales)) . '"';
|
||||
if ($data->remise_palier_1 == "") {
|
||||
$set .= ', remise_palier_1=0';
|
||||
} else {
|
||||
$set .= ', remise_palier_1=' . $data->remise_palier_1;
|
||||
}
|
||||
if ($data->remise_taux_1 == "") {
|
||||
$set .= ', remise_taux_1=0';
|
||||
} else {
|
||||
$set .= ', remise_taux_1=' . $data->remise_taux_1;
|
||||
}
|
||||
if ($data->remise_palier_2 == "") {
|
||||
$set .= ', remise_palier_2=0';
|
||||
} else {
|
||||
$set .= ', remise_palier_2=' . $data->remise_palier_2;
|
||||
}
|
||||
if ($data->remise_taux_2 == "") {
|
||||
$set .= ', remise_taux_2=0';
|
||||
} else {
|
||||
$set .= ', remise_taux_2=' . $data->remise_taux_2;
|
||||
}
|
||||
if ($data->remise_palier_3 == "") {
|
||||
$set .= ', remise_palier_3=0';
|
||||
} else {
|
||||
$set .= ', remise_palier_3=' . $data->remise_palier_3;
|
||||
}
|
||||
if ($data->remise_taux_3 == "") {
|
||||
$set .= ', remise_taux_3=0';
|
||||
} else {
|
||||
$set .= ', remise_taux_3=' . $data->remise_taux_3;
|
||||
}
|
||||
if ($data->remise_palier_4 == "") {
|
||||
$set .= ', remise_palier_4=0';
|
||||
} else {
|
||||
$set .= ', remise_palier_4=' . $data->remise_palier_4;
|
||||
}
|
||||
if ($data->remise_taux_4 == "") {
|
||||
$set .= ', remise_taux_4=0';
|
||||
} else {
|
||||
$set .= ', remise_taux_4=' . $data->remise_taux_4;
|
||||
}
|
||||
|
||||
$set .= ', commentaire="' . nettoie_input(trim($data->commentaire)) . '"';
|
||||
$set .= isset($data->chk_cache_commerciaux) ? ', chk_cache_commerciaux=1' : ', chk_cache_commerciaux=0';
|
||||
$set .= isset($data->chk_marche_hybride) ? ', chk_marche_hybride=1' : ', chk_marche_hybride=0';
|
||||
$set .= isset($data->chk_regle_seuils_marge) ? ', chk_regle_seuils_marge=1' : ', chk_regle_seuils_marge=0';
|
||||
$set .= isset($data->active) ? ', active=1' : ', active=0';
|
||||
|
||||
if ($cid == 0) {
|
||||
$set .= ', date_creat = "' . date("Y-m-d H:i:s") . '", fk_user_creat=' . $fk_user;
|
||||
$sql = 'INSERT INTO marches ' . $set . ';';
|
||||
} else {
|
||||
$set .= ', date_modif = "' . date("Y-m-d H:i:s") . '", fk_user_modif=' . $fk_user;
|
||||
$sql = 'UPDATE marches ' . $set . ' WHERE rowid=' . $cid . ';';
|
||||
}
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
|
||||
$ret = array('ret' => "ok");
|
||||
echo json_encode($ret);
|
||||
} else {
|
||||
$ret = array('ret' => "ko");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "delete_marche":
|
||||
//! Supprime un marché
|
||||
//! Réception de l'id du marché à supprimer
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$sql = 'DELETE FROM marches m WHERE m.rowid=' . $cid . ';';
|
||||
qSQL($sql, "gen");
|
||||
eLog($sql);
|
||||
//! on supprime aussi la ligne dans la table marches_listes
|
||||
$sql = 'DELETE FROM marches_listes ml WHERE ml.fk_marche=' . $cid . ';';
|
||||
qSQL($sql, "gen");
|
||||
eLog($sql);
|
||||
//! on supprime aussi les lignes produits de ce marché dans la table produits
|
||||
$sql = 'DELETE FROM produits p WHERE p.fk_marche=' . $cid . ';';
|
||||
qSQL($sql, "gen");
|
||||
eLog($sql);
|
||||
|
||||
$ret = array('ret' => "ok", 'msg' => 'Marché supprimé');
|
||||
echo json_encode($ret);
|
||||
} else {
|
||||
$ret = array('ret' => "ko", 'msg' => 'Marché non supprimé');
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "save_marches_listes":
|
||||
//! Enregistre les mises à jour du tableau des listes tarifaires par marché
|
||||
//! Réception du tableau des mots clés par marché en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->idListe)) {
|
||||
if ($data->idListe == "1") {
|
||||
foreach ($data as $key => $val) {
|
||||
if (substr($key, 0, 7) == "motcle_") {
|
||||
$fk_marche = trim(substr($key, 7));
|
||||
$motCle = trim($val);
|
||||
$motCleAchat = "";
|
||||
$motCleVente = "";
|
||||
foreach ($data as $keyAV => $valAV) {
|
||||
if ($keyAV == "motcleachat_" . $fk_marche) {
|
||||
$motCleAchat = trim($valAV);
|
||||
} else {
|
||||
if ($keyAV == "motclevente_" . $fk_marche) {
|
||||
$motCleVente = trim($valAV);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$sql = 'SELECT l.rowid FROM marches_listes l WHERE l.fk_marche=' . $fk_marche . ';';
|
||||
$retour = getinfos($sql, "gen");
|
||||
if (count($retour) > 0) {
|
||||
$sql = 'UPDATE marches_listes SET mot_cle="' . $motCle . '", terme_achat="' . $motCleAchat . '", terme_vente="' . $motCleVente . '" WHERE fk_marche=' . $fk_marche . ';';
|
||||
qSQL($sql, "gen");
|
||||
} else {
|
||||
$sql = 'INSERT INTO marches_listes SET fk_marche=' . $fk_marche . ', mot_cle="' . $motCle . '", terme_achat="' . $motCleAchat . '", terme_vente="' . $motCleVente . '";';
|
||||
qSQL($sql, "gen");
|
||||
}
|
||||
}
|
||||
}
|
||||
$ret = array('ret' => "ok", "msg" => "Enregistrement des données effectué");
|
||||
echo json_encode($ret);
|
||||
} else {
|
||||
$ret = array('ret' => "ko", "msg" => "Erreur lors de la réception des données à enregistrer");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
} else {
|
||||
$ret = array('ret' => "ko", "msg" => "Erreur lors de la réception des données à enregistrer");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "load_produits_marche":
|
||||
//! Charge les produits d'un marché
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
|
||||
// On récupère certaines infos du marché pour savoir si on doit appliquer des filtres
|
||||
$sql = 'SELECT m.chk_remise_sur_tg FROM marches m WHERE m.rowid=' . $cid . ';';
|
||||
$retour = getinfos($sql, "gen");
|
||||
$chk_remise_sur_tg = $retour[0]["chk_remise_sur_tg"];
|
||||
|
||||
if ($cid == 999 || $chk_remise_sur_tg == 1) {
|
||||
// c'est directement le TG, on ne fait rien de spécial
|
||||
$sql = 'SELECT p.rowid, p.code, p.libelle, concat(p.code, " # ", p.libelle) as rech, p.groupe, p.prix_achat_net, p.prix_vente, p.prc_discount_1 ';
|
||||
$sql .= 'FROM produits p WHERE p.fk_marche=' . $cid . ' AND p.active=1 ORDER BY p.code DESC;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
} else {
|
||||
// On regarde le terme_achat du marché
|
||||
$sql = 'SELECT l.terme_achat FROM marches_listes l WHERE l.fk_marche=' . $cid . ';';
|
||||
$retour = getinfos($sql, "gen");
|
||||
$terme_achat = $retour[0]["terme_achat"];
|
||||
|
||||
if ($terme_achat == "Purchasing") {
|
||||
// On doit alors récupérer leur prix d'achat dans le marché TG
|
||||
$sql = 'SELECT p.rowid, p.code, p.libelle, concat(p.code, " # ", p.libelle) as rech, p.groupe, p.prix_achat_net, p.prix_vente, p.prc_discount_1 ';
|
||||
$sql .= 'FROM produits p WHERE p.fk_marche=' . $cid . ' AND p.active=1 ORDER BY p.code DESC;';
|
||||
$retour = getinfos($sql, "gen");
|
||||
if (count($retour) > 0) {
|
||||
foreach ($retour as &$prod) {
|
||||
$sql = 'SELECT p.prix_achat_net, p.prc_discount_1 FROM produits p WHERE p.fk_marche=999 AND p.code="' . $prod["code"] . '";';
|
||||
$retour2 = getinfos($sql, "gen");
|
||||
if (count($retour2) == 1) {
|
||||
$prod["prix_achat_net"] = $retour2[0]["prix_achat_net"];
|
||||
$prod["prc_discount_1"] = $retour2[0]["prc_discount_1"];
|
||||
}
|
||||
}
|
||||
}
|
||||
echo json_encode($retour);
|
||||
} else {
|
||||
$sql = 'SELECT p.rowid, p.code, p.libelle, concat(p.code, " # ", p.libelle) as rech, p.groupe, p.prix_achat_net, p.prix_vente, p.prc_discount_1 ';
|
||||
$sql .= 'FROM produits p WHERE p.fk_marche=' . $cid . ' AND p.active=1 ORDER BY p.code DESC;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
$ret = array("ret" => "ko", "msg" => "Erreur lors de l'envoi du marché à charger");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "load_marches_listes":
|
||||
//! Charge la liste des mots clés des marchés à retrouver dans les fichiers d'importation
|
||||
$sql = 'SELECT l.* FROM marches_listes l;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
break;
|
||||
|
||||
case "load_user":
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$sql = 'SELECT u.* FROM users u WHERE u.rowid=' . $cid . ';';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
} else {
|
||||
$ret = array("ret" => "ko", "msg" => "Erreur lors de la récupération des infos de l'utilisateur");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "save_user":
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->rowid)) {
|
||||
$cid = nettoie_input($data->rowid);
|
||||
$act = nettoie_input($data->act);
|
||||
|
||||
$set = 'SET libelle="' . nettoie_input(trim($data->libelle)) . '"';
|
||||
$set .= ', prenom="' . nettoie_input(trim($data->prenom)) . '"';
|
||||
$set .= ', mobile="' . nettoie_input(trim($data->mobile)) . '"';
|
||||
$set .= ', email="' . nettoie_input(trim($data->email)) . '"';
|
||||
$set .= ', username="' . nettoie_input(trim($data->username)) . '"';
|
||||
$set .= ', fk_role=' . nettoie_input(trim($data->fk_role));
|
||||
$set .= ', fk_region=' . nettoie_input(trim($data->fk_region));
|
||||
if (isset($data->fk_parent)) {
|
||||
$set .= ', fk_parent=' . nettoie_input(trim($data->fk_parent));
|
||||
} else {
|
||||
$set .= ', fk_parent=0';
|
||||
}
|
||||
$set .= ', lst_depts="' . nettoie_input(trim($data->lst_depts)) . '"';
|
||||
$set .= isset($data->chk_grands_comptes) ? ', chk_grands_comptes=1' : ', chk_grands_comptes=0';
|
||||
$set .= isset($data->active) ? ', active=1' : ', active=0';
|
||||
|
||||
if ($cid == 0) {
|
||||
// on lui crée un mot de passe par défaut : initiale prénom en majuscule + initiale nom Maj + 3 caractères suivants du nom en minuscules + . + mois + année
|
||||
// On supprime les espaces dans le nom de l'utilisateur et on ne garde que les 3 premiers caractères
|
||||
$libUser = str_replace(" ", "", nettoie_input(trim($data->libelle)));
|
||||
$pwd = strtoupper(substr(nettoie_input(trim($data->prenom)), 0, 1)) . strtoupper(substr($libUser, 0, 1)) . strtolower(substr($libUser, 1, 3)) . "." . date("mY");
|
||||
eLog($pwd);
|
||||
$set .= ', userpswd="' . hashPsswd($pwd) . '"';
|
||||
|
||||
$set .= ', date_creat = "' . date("Y-m-d H:i:s") . '", fk_user_creat=' . $fk_user;
|
||||
$sql = 'INSERT INTO users ' . $set . ';';
|
||||
} else {
|
||||
$set .= ', date_modif = "' . date("Y-m-d H:i:s") . '", fk_user_modif=' . $fk_user;
|
||||
$sql = 'UPDATE users ' . $set . ' WHERE rowid=' . $cid . ';';
|
||||
}
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
|
||||
$ret = array('ret' => "ok");
|
||||
echo json_encode($ret);
|
||||
} else {
|
||||
$ret = array('ret' => "ko");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "delete_user":
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
// TODO : Supprimer les devis créés par cet utilisateur
|
||||
|
||||
$sql = 'DELETE FROM users WHERE rowid=' . $cid . ';';
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
$ret = array('ret' => "ok");
|
||||
echo json_encode($ret);
|
||||
} else {
|
||||
$ret = array('ret' => "ko");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "maintenance":
|
||||
if ($Conf->_devIp) {
|
||||
// Mise à jour des mots de passe Utilisateurs
|
||||
$sql = 'SELECT u.rowid, u.prenom, u.libelle FROM users u WHERE u.active=1 AND u.rowid=39;';
|
||||
$users = getinfos($sql, "gen");
|
||||
foreach ($users as $user) {
|
||||
$uId = $user["rowid"];
|
||||
$libUser = str_replace(" ", "", nettoie_input(trim($user["libelle"])));
|
||||
$pwd = strtoupper(substr(nettoie_input(trim($user["prenom"])), 0, 1)) . strtoupper(substr($libUser, 0, 1)) . strtolower(substr($libUser, 1, 3)) . "." . date("mY");
|
||||
eLog($pwd);
|
||||
$sql = 'UPDATE users SET userpswd="' . hashPsswd($pwd) . '" WHERE rowid=' . $uId . ';';
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "load_roles":
|
||||
$sql = 'SELECT xro.rowid, xro.libelle FROM x_roles xro WHERE xro.active=1 ORDER BY xro.rowid;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
break;
|
||||
|
||||
case "load_regions":
|
||||
$sql = 'SELECT xre.rowid, xre.libelle FROM x_regions xre WHERE xre.active=1 ORDER BY xre.rowid;';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
break;
|
||||
|
||||
case "export_sap_devis":
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
eLog("export_sap_devis: ");
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$sql = 'SELECT d.* FROM devis d WHERE d.rowid=' . $cid . ';';
|
||||
$dev = getinfos($sql, "gen");
|
||||
$devis = $dev[0];
|
||||
eLog("export_sap_devis: " . $cid . " & " . $devis["fk_client"]);
|
||||
|
||||
$filename = "devis_" . $cid . "_" . date('Y_m_d_hi') . ".csv";
|
||||
$fields = array("Code", "Etablissement", "Adresse 1", "Adresse 2");
|
||||
|
||||
$sql = 'SELECT c.code, c.libelle, c.adresse1, c.adresse2 FROM clients c WHERE c.rowid=' . $devis["fk_client"] . ';';
|
||||
eLog($sql);
|
||||
$cli = getinfos($sql, "gen");
|
||||
$client = $cli[0];
|
||||
|
||||
$excelData = implode("\t", array_values($fields)) . "\n";
|
||||
|
||||
eLog($excelData);
|
||||
|
||||
array_walk($client, 'filterData');
|
||||
$excelData .= implode("\t", array_values($client)) . "\n";
|
||||
|
||||
$sql = 'SELECT p.code, p.libelle, p.prix_achat_net, p.prix_vente, dp.qte, dp.remise, dp.totalht FROM devis_produits dp LEFT JOIN produits p ON dp.fk_produit=p.rowid WHERE dp.fk_devis=' . $cid . ';';
|
||||
eLog($sql);
|
||||
$data = getinfos($sql, "gen");
|
||||
|
||||
// une ligne vierge de séparation
|
||||
$excelData .= "\n";
|
||||
$fields = array("Code", "Désignation", "Prix Achat", "Prix Vente", "Quantité", "Remise", "Total HT");
|
||||
$excelData .= implode("\t", array_values($fields)) . "\n";
|
||||
|
||||
foreach ($data as $row) {
|
||||
array_walk($row, 'filterData');
|
||||
$excelData .= implode("\t", $row) . "\n";
|
||||
}
|
||||
eLog($excelData);
|
||||
header("Content-Type: application/vnd.ms-excel; charset=UTF-16LE");
|
||||
header("Content-Disposition: attachment; filename=$filename");
|
||||
header("Content-Disposition: attachment; filename=\"$filename\"");
|
||||
echo $excelData;
|
||||
exit;
|
||||
}
|
||||
break;
|
||||
|
||||
case "load_info":
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$sql = 'SELECT i.* FROM infos i WHERE i.rowid=' . $cid . ';';
|
||||
echo getinfos($sql, "gen", "json");
|
||||
}
|
||||
break;
|
||||
|
||||
case "save_info":
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
|
||||
$set = 'SET date_infos="' . nettoie_input($data->cdate) . '" ';
|
||||
$set .= ', titre_infos="' . nettoie_input(trim($data->ctitre)) . '" ';
|
||||
$set .= ', text_infos="' . nettoie_input(trim($data->ctexte)) . '" ';
|
||||
if (isset($data->cpublie)) {
|
||||
if ($data->cpublie == false || $data->cpublie == 0) {
|
||||
$set .= ', chk_publie=0';
|
||||
} else {
|
||||
$set .= ', chk_publie=1';
|
||||
}
|
||||
} else {
|
||||
$set .= ', chk_publie=0';
|
||||
}
|
||||
|
||||
if ($cid == 0) {
|
||||
$set .= ', date_creat = "' . date("Y-m-d H:i:s") . '", fk_user_creat=' . $fk_user;
|
||||
$sql = 'INSERT INTO infos ' . $set . ';';
|
||||
} else {
|
||||
$set .= ', date_modif = "' . date("Y-m-d H:i:s") . '", fk_user_modif=' . $fk_user;
|
||||
$sql = 'UPDATE infos ' . $set . ' WHERE rowid=' . $cid . ';';
|
||||
}
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
$ret = array('ret' => "ok");
|
||||
echo json_encode($ret);
|
||||
} else {
|
||||
$ret = array('ret' => "ko");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
case "supp_info":
|
||||
//! Réception et lecture de la demande en json
|
||||
$data = json_decode(file_get_contents("php://input"));
|
||||
if (isset($data->cid)) {
|
||||
$cid = nettoie_input($data->cid);
|
||||
$sql = 'DELETE FROM infos i WHERE i.rowid=' . $cid . ';';
|
||||
eLog($sql);
|
||||
qSQL($sql, "gen");
|
||||
|
||||
$ret = array('ret' => "ok");
|
||||
echo json_encode($ret);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
exit();
|
||||
41
controllers/clogin.php
Normal file
41
controllers/clogin.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
session_regenerate_id();
|
||||
global $Route;
|
||||
|
||||
require_once $Route->_model;
|
||||
$msg = "";
|
||||
|
||||
if (isset($_POST['bcusername'])) {
|
||||
$a = nettoie_input($_POST['bcusername']);
|
||||
$r = nettoie_input($_POST['bcpassword']);
|
||||
|
||||
if ((strlen($a) != 0) && (strlen($r) != 0)) {
|
||||
$sql = 'SELECT * FROM users WHERE username="' . $a . '" AND active=1;';
|
||||
$res = getinfos($sql, "gen");
|
||||
if (count($res) == 1) {
|
||||
$userLine = $res[0];
|
||||
|
||||
if (checkPsswd($r, $userLine["userpswd"])) {
|
||||
openSession($userLine);
|
||||
eLog("Login Linet de " . $_SESSION['uname']);
|
||||
header("Location: /accueil");
|
||||
die();
|
||||
} else {
|
||||
echo "utilisateur non reconnu<br/>";
|
||||
$msg = "Identifiant et/ou mot de passe incorrect(s)";
|
||||
eLog("Login Admin KO 0 : " . $a . "/" . $r);
|
||||
}
|
||||
|
||||
} else {
|
||||
echo "utilisateur non reconnu<br/>";
|
||||
$msg = "Identifiant et/ou mot de passe incorrect(s)";
|
||||
eLog("Login Admin KO 1 : " . $a . "/" . $r);
|
||||
}
|
||||
|
||||
} else {
|
||||
eLog("Login Admin KO 2 : " . $a . "/" . $r);
|
||||
}
|
||||
}
|
||||
|
||||
$aView = $aModel;
|
||||
require_once $Route->_view;
|
||||
4
controllers/cmarches.php
Normal file
4
controllers/cmarches.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
$aModel=array();
|
||||
require_once $Route->_model;
|
||||
require_once $Route->_view;
|
||||
4
controllers/csap.php
Normal file
4
controllers/csap.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
$aModel=array();
|
||||
require_once $Route->_model;
|
||||
require_once $Route->_view;
|
||||
5
controllers/cusers.php
Normal file
5
controllers/cusers.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
global $Route;
|
||||
$aModel = array();
|
||||
require_once $Route->_model;
|
||||
require_once $Route->_view;
|
||||
Reference in New Issue
Block a user