This commit is contained in:
Michael RICOIS 2014-04-17 13:40:56 +00:00
commit 252835f303

View File

@ -345,7 +345,7 @@ $tabEntete = array();
$tabIdentifiant = array(); $tabIdentifiant = array();
$tabData = array(); $tabData = array();
$posKeySiren = $posKeySiret = $posKeyNic = false; $posKeySiren = $posKeySiret = $posKeyNic = $posKeySpecial = false;
//Fichier de définition //Fichier de définition
$inFile = $config->profil->path->data.'/clients/'.$file.'.csv'; $inFile = $config->profil->path->data.'/clients/'.$file.'.csv';
@ -359,41 +359,67 @@ if (($handle = fopen($inFile, 'r')) !== FALSE) {
//Traitement de la première ligne //Traitement de la première ligne
if ($row == 0) { if ($row == 0) {
for ($c=0; $c < $num; $c++) { for ($c=0; $c < $num; $c++) {
//Détection clé importante
switch(strtolower($data[$c])) { //Détection clé spécifique
case 'siren': if ( $opts->use-id ) {
$posKeySiren = $c;
break; if ( strtolower($data[$c]) == strtolower($opts->use-id) ) {
case 'nic': $posKeySpecial = $c;
$posKeyNic = $c; }
break;
case 'siret': } else {
$posKeySiret = $c;
break; //Détection clé importante
case 'ref': switch(strtolower($data[$c])) {
$posKeyRef = $c; case 'siren':
break; $posKeySiren = $c;
} break;
case 'nic':
$posKeyNic = $c;
break;
case 'siret':
$posKeySiret = $c;
break;
case 'ref':
$posKeyRef = $c;
break;
}
}
$tabExtract[] = $data[$c]; $tabExtract[] = $data[$c];
} }
if ($posKeySiren!==false && $posKeyNic!==false && $posKeySiret!==false || $posKeySiren!==false && $posKeySiret!==false ){
die("Trop de clé!"); if ( !$opts->use-id ) {
}
if ($posKeySiren===false && $posKeySiret===false){ if ($posKeySiren!==false && $posKeyNic!==false && $posKeySiret!==false || $posKeySiren!==false && $posKeySiret!==false ){
die("Aucune clé détecté!"); die("Trop de clé!");
}
if ($posKeySiren===false && $posKeySiret===false){
die("Aucune clé détecté!");
}
} }
//Traitement des identifiants //Traitement des identifiants
} else { } else {
//Gestion des identifiants obligatoire (SIREN, NIC, SIRET) if ( $opts->use-id ) {
if ( $posKeySiret!==false ){
$tabIdentifiant[] = $data[$posKeySiret]; $tabIdentifiant[] = $data[$posKeySpecial];
} elseif ( $posKeySiren!==false && $posKeyNic!==false ){
$tabIdentifiant[] = $data[$posKeySiren].$data[$posKeyNic]; } else {
} elseif ( $posKeySiren !==false ){
$tabIdentifiant[] = $data[$posKeySiren]; //Gestion des identifiants obligatoire (SIREN, NIC, SIRET)
} if ( $posKeySiret!==false ){
$tabIdentifiant[] = $data[$posKeySiret];
} elseif ( $posKeySiren!==false && $posKeyNic!==false ){
$tabIdentifiant[] = $data[$posKeySiren].$data[$posKeyNic];
} elseif ( $posKeySiren !==false ){
$tabIdentifiant[] = $data[$posKeySiren];
}
}
//Gestion des autres colonnes fournies par le client //Gestion des autres colonnes fournies par le client
for ($c=0; $c < $num; $c++) { for ($c=0; $c < $num; $c++) {
@ -582,196 +608,242 @@ foreach($tabIdentifiant as $item)
echo "Ligne ".($row+1)." - "; echo "Ligne ".($row+1)." - ";
if ( $opts->reprise && $row < $rowReprise ) { if ( $opts->reprise && $row < $rowReprise ) {
//Reprise //Reprise
$row++; $row++;
echo "Reprise"; echo "Reprise";
} else { } else {
$siretValide = false; if ( $opts->use-id ) {
$sirenValide = false;
$siren = substr($item, 0, 9); $id = $item;
$nic = substr($item, 9); $tabNewData[$extendNbRow] = $tabData[$row];
//Simple vérification, seulement des chiffres //Récupération des données SQL
if (!preg_match('/[0-9]{9}/', $siren)) { foreach($tabDico as $element => $select)
$siretValide = $sirenValide = false; {
} else { //Retour lignes multiples
//Vérification par algorithme if ( $element == 'multiple' )
$siretValide = siretValide($item); {
if ($posKeySiret!==false) { $values = false;
if ($siretValide===false) { $isSelected = false;
$sirenValide = sirenValide($siren); foreach($select as $selectItem){
} else { if ( in_array($selectItem, $tabExtract) ) {
$sirenValide = true; $isSelected = true;
} break;
} }
}
$retour = array();
if ( $isSelected && function_exists($selectItem.'Multiple') ) {
if( ${$selectItem.'Data'}!=false ){
$values = ${$selectItem.'Data'};
}
$retour = call_user_func($selectItem.'MultipleById', $id, $values);
}
if (count($retour)>0) {
$originalLine = $tabNewData[$extendNbRow];
foreach($retour as $i => $retourItem) {
$tabNewData[$extendNbRow+$i] = array_merge($originalLine,$retourItem);
}
}
}
if ($posKeySiren!==false && $posKeyNic!==false) { }
$sirenValide = sirenValide($siren);
}
}
$tabNewData[$extendNbRow] = $tabData[$row]; } else {
//On définit le tableau de retour (les colonnes du fichier client sont déjà présentent) $siretValide = false;
if ( $posKeySiret!==false ){ $sirenValide = false;
$tabNewData[$extendNbRow]['siret'] = (string)$item;
} elseif ( $posKeySiren!==false && $posKeyNic!==false ){
$tabNewData[$extendNbRow]['siren'] = (string)$siren;
$tabNewData[$extendNbRow]['nic'] = (string)$nic;
} elseif ( $posKeySiren !==false ){
$tabNewData[$extendNbRow]['siren'] = (string)$siren;
}
$tabNewData[$extendNbRow]['SiretValide'] = ($siretValide===true) ? 1 : 0; $siren = substr($item, 0, 9);
$nic = substr($item, 9);
//Clé de doublon //Simple vérification, seulement des chiffres
$keyDoublon = null; if ( !preg_match('/[0-9]{9}/', $siren) ) {
if ( array_key_exists('keyDoublon', $tabData[$row])) {
$keyDoublon = $tabData[$row]['keyDoublon'];
}
if ( null !== $keyDoublon && in_array($keyDoublon, $doublonList) ) { $siretValide = $sirenValide = false;
$tabNewData[$extendNbRow]['doublon'] = 1;
} elseif ( $sirenValide===false || intval($siren)==0 ){
//Siren faux
} else {
//Vérifier les nic, ou sélectionner le nic du siege actif } else {
$nicV = $nic; //Surcharge pour le nic
$strNic = '';
$sqlNic = 'SELECT LPAD(nic,5,0) AS nicTmp, cj AS cjTmp, IF(siege=1,1,0) AS triSiege FROM jo.etablissements WHERE siren='.$siren;
//Si identifiant est un siret, char(14) alors on vérifie que le NIC existe //Vérification par algorithme
if ( strlen($item)==14 && intval($nic)>0 ) { $siretValide = siretValide($item);
$stmt = $dbMetier->query($sqlNic.' AND nic='.$nic); if ($posKeySiret!==false) {
$result = $stmt->fetchAll(); if ($siretValide===false) {
if (count($result)==0){ $sirenValide = sirenValide($siren);
$nicV = 0; } else {
$fJur = '0000'; $sirenValide = true;
} else { }
//nic : On considère qu'il est vrai si on a un résultat }
$fJur = $result[0]['cjTmp'];
}
}
if ( intval($nicV)==0 ) { if ($posKeySiren!==false && $posKeyNic!==false) {
$strNic = ' AND nic>-1 AND actif>-1 ORDER BY triSiege DESC, actif DESC, nicTmp DESC LIMIT 0,1'; $sirenValide = sirenValide($siren);
$stmt = $dbMetier->query($sqlNic.$strNic); }
$result = $stmt->fetchAll();
if (count($result)>0){
$nicV = $result[0]['nicTmp'];
$fJur = $result[0]['cjTmp'];
} else {
$nicV = '00000';
$fJur = '0000';
}
}
if ( $posKeySiren!==false && $posKeyNic!==false ){ }
$tabNewData[$extendNbRow]['siren'] = $siren;
$tabNewData[$extendNbRow]['nic'] = $nic;
}
//Récupération des données SQL $tabNewData[$extendNbRow] = $tabData[$row];
foreach($tabDico as $element => $select)
{
//Traitement par requete SQL
if (isset(${$element.'Fields'})){
$where = $select['where']; //On définit le tableau de retour (les colonnes du fichier client sont déjà présentent)
eval( "\$where = \"$where\";" ); if ( $posKeySiret!==false ){
$tabNewData[$extendNbRow]['siret'] = (string)$item;
} elseif ( $posKeySiren!==false && $posKeyNic!==false ){
$tabNewData[$extendNbRow]['siren'] = (string)$siren;
$tabNewData[$extendNbRow]['nic'] = (string)$nic;
} elseif ( $posKeySiren !==false ){
$tabNewData[$extendNbRow]['siren'] = (string)$siren;
}
${$element.'SQL'} = 'SELECT '.${$element.'Fields'}.' FROM '.$select['db'].$where; $tabNewData[$extendNbRow]['SiretValide'] = ($siretValide===true) ? 1 : 0;
try {
$stmt = $dbMetier->query(${$element.'SQL'});
$result = $stmt->fetchAll();
if ( count($result)>0 ) {
$tabNewData[$extendNbRow] = array_merge( $tabNewData[$extendNbRow] , $result[0]);
}
} catch (Zend_Db_Exception $e) {
//Enregistrement du message d'erreur //Clé de doublon
if ($opts->id) { $keyDoublon = null;
$commandesM->update(array('error'=>$e->getMessage()), "id = ".$commande->id); if ( array_key_exists('keyDoublon', $tabData[$row])) {
} $keyDoublon = $tabData[$row]['keyDoublon'];
}
//Arret du script if ( null !== $keyDoublon && in_array($keyDoublon, $doublonList) ) {
exit; $tabNewData[$extendNbRow]['doublon'] = 1;
} } elseif ( $sirenValide===false || intval($siren)==0 ){
//Siren faux
} else {
} //Vérifier les nic, ou sélectionner le nic du siege actif
$nicV = $nic; //Surcharge pour le nic
$strNic = '';
$sqlNic = 'SELECT LPAD(nic,5,0) AS nicTmp, cj AS cjTmp, IF(siege=1,1,0) AS triSiege FROM jo.etablissements WHERE siren='.$siren;
//Traitement par fonction //Si identifiant est un siret, char(14) alors on vérifie que le NIC existe
if( $element == 'data' ) if ( strlen($item)==14 && intval($nic)>0 ) {
{ $stmt = $dbMetier->query($sqlNic.' AND nic='.$nic);
foreach($select as $selectItem) $result = $stmt->fetchAll();
{ if (count($result)==0){
if ( isset(${$selectItem.'Data'}) ) $nicV = 0;
{ $fJur = '0000';
$values = false; } else {
if( ${$selectItem.'Data'}!=false ){ //nic : On considère qu'il est vrai si on a un résultat
$values = ${$selectItem.'Data'}; $fJur = $result[0]['cjTmp'];
} }
$retour = call_user_func($selectItem.'Data', $siren, $nicV, $values); }
$tabNewData[$extendNbRow] = $tabNewData[$extendNbRow] + $retour;
}
}
}
//Retour lignes multiples if ( intval($nicV)==0 ) {
elseif ( $element == 'multiple' ) $strNic = ' AND nic>-1 AND actif>-1 ORDER BY triSiege DESC, actif DESC, nicTmp DESC LIMIT 0,1';
{ $stmt = $dbMetier->query($sqlNic.$strNic);
$values = false; $result = $stmt->fetchAll();
$isSelected = false; if (count($result)>0){
foreach($select as $selectItem){ $nicV = $result[0]['nicTmp'];
if ( in_array($selectItem, $tabExtract) ) { $fJur = $result[0]['cjTmp'];
$isSelected = true; } else {
break; $nicV = '00000';
} $fJur = '0000';
} }
$retour = array(); }
if ( $isSelected && function_exists($selectItem.'Multiple') ) {
if( ${$selectItem.'Data'}!=false ){
$values = ${$selectItem.'Data'};
}
$retour = call_user_func($selectItem.'Multiple', $siren, $nicV, $values);
}
if (count($retour)>0) {
$originalLine = $tabNewData[$extendNbRow];
foreach($retour as $i => $retourItem) {
$tabNewData[$extendNbRow+$i] = array_merge($originalLine,$retourItem);
}
}
}
//Traitement des libellés génériques if ( $posKeySiren!==false && $posKeyNic!==false ){
else $tabNewData[$extendNbRow]['siren'] = $siren;
{ $tabNewData[$extendNbRow]['nic'] = $nic;
foreach($select['cle'] as $cle => $values) }
//Récupération des données SQL
foreach($tabDico as $element => $select)
{
//Traitement par requete SQL
if (isset(${$element.'Fields'})){
$where = $select['where'];
eval( "\$where = \"$where\";" );
${$element.'SQL'} = 'SELECT '.${$element.'Fields'}.' FROM '.$select['db'].$where;
try {
$stmt = $dbMetier->query(${$element.'SQL'});
$result = $stmt->fetchAll();
if ( count($result)>0 ) {
$tabNewData[$extendNbRow] = array_merge( $tabNewData[$extendNbRow] , $result[0]);
}
} catch (Zend_Db_Exception $e) {
//Enregistrement du message d'erreur
if ($opts->id) {
$commandesM->update(array('error'=>$e->getMessage()), "id = ".$commande->id);
}
//Arret du script
exit;
}
}
//Traitement par fonction
if( $element == 'data' )
{ {
if ( in_array($cle.'Lib', $tabEntete) && isset(${'tab'.ucfirst($cle)}) ) foreach($select as $selectItem)
{ {
$retour[$cle.'Lib'] = 'Non trouvé'; if ( isset(${$selectItem.'Data'}) )
$codeFromData = $tabNewData[$extendNbRow][$cle]; {
foreach( ${'tab'.ucfirst($cle)} as $cleItem ) { $values = false;
if ( $codeFromData == $cleItem['code'] ) { if( ${$selectItem.'Data'}!=false ){
$retour[$cle.'Lib'] = $cleItem['label']; $values = ${$selectItem.'Data'};
break; }
} $retour = call_user_func($selectItem.'Data', $siren, $nicV, $values);
$tabNewData[$extendNbRow] = $tabNewData[$extendNbRow] + $retour;
}
}
}
//Retour lignes multiples
elseif ( $element == 'multiple' )
{
$values = false;
$isSelected = false;
foreach($select as $selectItem){
if ( in_array($selectItem, $tabExtract) ) {
$isSelected = true;
break;
} }
$tabNewData[$extendNbRow] = $tabNewData[$extendNbRow] + $retour; }
$retour = array();
if ( $isSelected && function_exists($selectItem.'Multiple') ) {
if( ${$selectItem.'Data'}!=false ){
$values = ${$selectItem.'Data'};
}
$retour = call_user_func($selectItem.'Multiple', $siren, $nicV, $values);
}
if (count($retour)>0) {
$originalLine = $tabNewData[$extendNbRow];
foreach($retour as $i => $retourItem) {
$tabNewData[$extendNbRow+$i] = array_merge($originalLine,$retourItem);
}
} }
} }
}
}
}
//Enregistrement clés de doublon pour rappel //Traitement des libellés génériques
if ( null !== $keyDoublon ) { else
$doublonList[] = $keyDoublon; {
} foreach($select['cle'] as $cle => $values)
{
if ( in_array($cle.'Lib', $tabEntete) && isset(${'tab'.ucfirst($cle)}) )
{
$retour[$cle.'Lib'] = 'Non trouvé';
$codeFromData = $tabNewData[$extendNbRow][$cle];
foreach( ${'tab'.ucfirst($cle)} as $cleItem ) {
if ( $codeFromData == $cleItem['code'] ) {
$retour[$cle.'Lib'] = $cleItem['label'];
break;
}
}
$tabNewData[$extendNbRow] = $tabNewData[$extendNbRow] + $retour;
}
}
}
}
}
//Enregistrement clés de doublon pour rappel
if ( null !== $keyDoublon ) {
$doublonList[] = $keyDoublon;
}
}
//Trier pour la sortie //Trier pour la sortie
$nbLines = count($tabNewData); $nbLines = count($tabNewData);
@ -1450,8 +1522,8 @@ function NaceEntData($siren, $nic, $values)
{ {
global $iDb; global $iDb;
$tabData = array( $tabData = array(
'NaceEn' => '', 'NaceEn' => '',
'NaceEnLib' => '', 'NaceEnLib' => '',
); );
$result = $iDb->select('jo.etablissements e, jo.tabNaf5 n, insee.tabNace i', $result = $iDb->select('jo.etablissements e, jo.tabNaf5 n, insee.tabNace i',
"CONCAT(n.codNaf1, SUBSTRING(n.codNaf5,1,4)) AS codNace, i.libelleFR", "CONCAT(n.codNaf1, SUBSTRING(n.codNaf5,1,4)) AS codNace, i.libelleFR",
@ -1469,7 +1541,7 @@ function TelOrderEntete()
'TelOrderTypeTel', 'TelOrderTypeTel',
'TelOrderInfoTel', 'TelOrderInfoTel',
'TelOrderTelephone', 'TelOrderTelephone',
'TelOderSource', 'TelOrderSource',
'TelOrderDate', 'TelOrderDate',
); );
} }
@ -1482,15 +1554,18 @@ function TelOrderData($siren, $nic, $values)
$result = $c->getTel($siren, $nic, true, 1); $result = $c->getTel($siren, $nic, true, 1);
$tabData = array(); $tabData = array();
if ( count($result)>0 ) { if ( count($result)>0 ) {
$element = array( foreach ($result as $p) {
'TelOrderTypeTel' => $result['typeTel'], if ($p['typeTel']=='tel') {
'TelOrderInfoTel' => $result['infoTel'], $tabData = array(
'TelOrderTelephone' => $result['telephone'], 'TelOrderTypeTel' => $p['typeTel'],
'TelOderSource' => $result['source'], 'TelOrderInfoTel' => $p['infoTel'],
'TelOrderDate' => $result['dateMAJ'], 'TelOrderTelephone' => $p['telephone'],
); 'TelOrderSource' => $p['source'],
'TelOrderDate' => $p['dateMAJ'],
$tabData[] = $element; );
break;
}
}
} }
return $tabData; return $tabData;
@ -1773,7 +1848,43 @@ function groupesMultiple($siren, $nic, $values = false)
); );
$level = $level+1; $level = $level+1;
$result = $c->getTreeRecursive($identity->id); $result = $c->getTreeRecursive($identity->id, 33, $level, 6);
foreach ($result as $item) {
$tabData[] = array(
'Niveau' => 'N'.$level,
'LienSiren' => $item['siren'],
'LienNom' => $item['name'],
'LienPays' => $item['pays'],
'LienPmin' => $item['pmin'],
);
$children = array();
if ( count($item['children'])>0 ) {
$children = groupesChildren($item['children'], $level+1);
}
$tabData = array_merge($tabData, $children);
}
return $tabData;
}
function groupesMultipleById($id, $values = false)
{
global $dbJo;
$tabData = array();
require_once 'Metier/partenaires/classMLiens2.php';
$c = new MLiens2($id, 'ref', $dbJo);
$identity = $c->getIdentity();
$level = 0;
$tabData[] = array(
'Niveau' => 'N'.$level,
'LienSiren' => $identity->siren,
'LienNom' => $identity->RS,
'LienPays' => $identity->adresse_pays,
'LienPmin' => '',
);
$level = $level+1;
$result = $c->getTreeRecursive($identity->id, 33, $level, 6);
foreach ($result as $item) { foreach ($result as $item) {
$tabData[] = array( $tabData[] = array(
'Niveau' => 'N'.$level, 'Niveau' => 'N'.$level,