2011-10-18 09:48:14 +00:00
|
|
|
|
<?php
|
|
|
|
|
require_once 'WsScore/WsScore.php';
|
|
|
|
|
require_once realpath(dirname(__FILE__)).'/Types.php';
|
|
|
|
|
|
|
|
|
|
class Extraction extends WsScore
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
Table SQL pour gérér la queue
|
|
|
|
|
=============================
|
|
|
|
|
Numéro de commande
|
2011-12-08 15:07:30 +00:00
|
|
|
|
reference
|
2011-10-18 09:48:14 +00:00
|
|
|
|
enteteIn
|
|
|
|
|
dataIn
|
|
|
|
|
enteteOut
|
2011-12-08 15:07:30 +00:00
|
|
|
|
isValid => 0
|
|
|
|
|
error => le traitement à planté
|
2011-10-18 09:48:14 +00:00
|
|
|
|
dateAdded
|
|
|
|
|
dateStart
|
2011-12-08 15:07:30 +00:00
|
|
|
|
nbLigne => nombre de lignes dans le fichier
|
|
|
|
|
nbLigneT => nombre de lignes traitées
|
|
|
|
|
dateStop
|
2011-10-18 09:48:14 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Enregistrement d'une commande avec ces paramètres
|
|
|
|
|
* @param InfoEntete[] $infoEntete
|
|
|
|
|
* Liste des colonnes qui seront fournis, il est nécessaire d'identifier la ou les colonnes clés SIREN/SIRET/NIC
|
|
|
|
|
* @param string $data
|
|
|
|
|
* Tableau des données
|
|
|
|
|
* @param string $format
|
2011-12-05 08:14:54 +00:00
|
|
|
|
* Format du tableau de données json/xml/fichier
|
2011-10-18 09:48:14 +00:00
|
|
|
|
* @param string $reference
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2011-10-24 08:44:29 +00:00
|
|
|
|
public function setCommande($infoEntete = null, $data = null, $format = 'json', $reference = '')
|
2011-10-18 09:48:14 +00:00
|
|
|
|
{
|
2011-12-05 08:14:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* En méthode fichier : comment envoyer le fichier ?
|
|
|
|
|
curl -d @file.csv "http://.../file.php"
|
|
|
|
|
|
|
|
|
|
$file_to_upload = array('file_contents'=>'@'.$file_name_with_full_path);
|
|
|
|
|
$ch = curl_init();
|
|
|
|
|
curl_setopt($ch, CURLOPT_URL,$target_url);
|
|
|
|
|
curl_setopt($ch, CURLOPT_POST,1);
|
|
|
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload);
|
|
|
|
|
$result=curl_exec ($ch);
|
|
|
|
|
curl_close ($ch);
|
|
|
|
|
echo $result;
|
|
|
|
|
|
|
|
|
|
<form method=”post” action=”test.php” enctype=”multipart/form-data”>
|
|
|
|
|
<input type=”text” name=”name” value=”Test User” />
|
|
|
|
|
<input type=”file” name=”file” />
|
|
|
|
|
<input type=”submit” name=”submit” value=”submit” />
|
|
|
|
|
</form>
|
|
|
|
|
|
|
|
|
|
$request_url = ‘http://www.akchauhan.com/test.php’;
|
|
|
|
|
$post_params['name'] = urlencode(’Test User’);
|
|
|
|
|
$post_params['file'] = ‘@’.'demo/testfile.txt’;
|
|
|
|
|
$post_params['submit'] = urlencode(’submit’);
|
|
|
|
|
$ch = curl_init();
|
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $request_url);
|
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
|
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
|
|
|
|
|
$result = curl_exec($ch);
|
|
|
|
|
curl_close($ch);
|
|
|
|
|
|
|
|
|
|
if (isset($_POST['upload'])) {
|
|
|
|
|
print_r($_FILES)
|
|
|
|
|
|
|
|
|
|
// cURL call would go here
|
|
|
|
|
// my tmp. file would be $_FILES['image']['tmp_name'], and
|
|
|
|
|
// the filename would be $_FILES['image']['name']
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
2011-10-24 08:44:29 +00:00
|
|
|
|
if (empty($infoEntete)){
|
|
|
|
|
throw new SoapFault('Extraction', "Entête non définie !");
|
|
|
|
|
}
|
|
|
|
|
if (empty($infoEntete)){
|
|
|
|
|
throw new SoapFault('Extraction', "Données non définie !");
|
|
|
|
|
}
|
|
|
|
|
if (!in_array($format, array('json', 'xml'))){
|
|
|
|
|
throw new SoapFault('Extraction', "Erreur dans le format!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Vérification entete
|
|
|
|
|
$nbColonnes = count($infoEntete);
|
|
|
|
|
$haveKey = 0;
|
|
|
|
|
foreach($infoEntete->item as $item)
|
|
|
|
|
{
|
|
|
|
|
if ( in_array(strtolower($item->cle), array('siren', 'siret', 'nic')) ){
|
|
|
|
|
$haveKey++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ($haveKey == 0){
|
|
|
|
|
throw new SoapFault('Extraction', "Aucune clé de définie!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Traitement du format
|
|
|
|
|
switch ($format)
|
|
|
|
|
{
|
|
|
|
|
case 'json':
|
|
|
|
|
$content = json_decode($data);
|
|
|
|
|
break;
|
|
|
|
|
case 'xml':
|
|
|
|
|
/**
|
|
|
|
|
* Format XML
|
|
|
|
|
* <data>
|
|
|
|
|
* <l>
|
|
|
|
|
* <c>col1</c>
|
|
|
|
|
* <c>col2</c>
|
|
|
|
|
* </l>
|
|
|
|
|
* </data>
|
|
|
|
|
*/
|
|
|
|
|
$xml = new SimpleXMLElement($data);
|
|
|
|
|
$content = array();
|
|
|
|
|
$numeroLigne = 0;
|
|
|
|
|
foreach($xml->data->l as $ligne)
|
|
|
|
|
{
|
|
|
|
|
$numeroLigne++;
|
|
|
|
|
$dataCol = array();
|
|
|
|
|
foreach($ligne->c as $colonne){
|
|
|
|
|
$dataCol[] = $colonne;
|
|
|
|
|
}
|
|
|
|
|
//Si le nombre de colonne ne correspond pas à l'entete alors on renvoi une erreur
|
|
|
|
|
if (count($dataCol)!=$nbColonnes){
|
|
|
|
|
throw new SoapFault('Extraction', "Nombre de colonnes incohérent à la ligne $numeroLigne");
|
|
|
|
|
}
|
|
|
|
|
$content[] = $dataCol;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Traitement
|
|
|
|
|
$nbLigne = count($content);
|
|
|
|
|
|
|
|
|
|
//@todo: Générer un numéro de commande
|
|
|
|
|
$numCommande = 0;
|
|
|
|
|
|
|
|
|
|
//Enregistrement dans la bdd
|
|
|
|
|
$db = Zend_Db::factory($this->dbConfig->Extraction);
|
|
|
|
|
Zend_Db_Table_Abstract::setDefaultAdapter($db);
|
|
|
|
|
$commandeM = new Application_Model_ExtractionCommandes();
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
$commandeM->insert(array(
|
|
|
|
|
'numCommande' => $numCommande,
|
|
|
|
|
'reference' => $reference,
|
|
|
|
|
'enteteIn' => json_encode($infoEntete),
|
|
|
|
|
'dataIn' => json_encode($content),
|
|
|
|
|
'nbLigne' => $nbLigne
|
|
|
|
|
));
|
|
|
|
|
} catch (Exception $e){
|
|
|
|
|
throw new SoapFault('Extraction', "Erreur lors de l'enregistrement de la commande!");
|
|
|
|
|
}
|
2011-10-18 09:48:14 +00:00
|
|
|
|
return $numCommande;
|
|
|
|
|
}
|
|
|
|
|
|
2011-10-24 08:44:29 +00:00
|
|
|
|
/**
|
|
|
|
|
* Enter description here ...
|
|
|
|
|
* @param string $numCommande
|
|
|
|
|
* Numéro de commande
|
|
|
|
|
* @param string[] $infoEnrichissement
|
|
|
|
|
* Liste des clés, dans l'ordre, provenant du dictionnaire pour la génération du fichier d'enrichissement
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public function setEnrichissment($numCommande, $infoEnrichissement)
|
|
|
|
|
{
|
2011-12-05 08:14:54 +00:00
|
|
|
|
/*
|
|
|
|
|
clé déjà défini + ajout des clés pour l'enrichissement
|
|
|
|
|
Ecrire fichier csv pour enrichissement
|
|
|
|
|
*/
|
2011-10-24 08:44:29 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Lancement des l'extraction après validation
|
|
|
|
|
* @param string $numCommande
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public function setCommandeStart($numCommande)
|
|
|
|
|
{
|
|
|
|
|
if (empty($numCommande)){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//Placer dans la queue de traitement le numéro de commande
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2011-10-18 09:48:14 +00:00
|
|
|
|
/**
|
|
|
|
|
* Retourne les clés possibles et leurs libellés pour le fichier d'enrichissement
|
|
|
|
|
* @param string $categorie
|
|
|
|
|
* @param string $cle
|
|
|
|
|
* @return Dico[]
|
|
|
|
|
*/
|
|
|
|
|
public function getDataDico($categorie = null, $cle = null)
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
Dictionnaire de données - getDataDico
|
|
|
|
|
=======================
|
2011-11-18 09:42:19 +00:00
|
|
|
|
Catégorie Clé bdd.table sql Libellé Commentaires
|
|
|
|
|
Identite siren Siren
|
|
|
|
|
Fonction siretValide Validité SIREN/SIRET
|
2011-10-18 09:48:14 +00:00
|
|
|
|
*/
|
|
|
|
|
$output = array();
|
|
|
|
|
$dico = new Dico();
|
|
|
|
|
|
|
|
|
|
return $output;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Validation préalable de la commande
|
2011-10-24 08:44:29 +00:00
|
|
|
|
* @param string $numCommande Numéro de commande
|
2011-10-18 09:48:14 +00:00
|
|
|
|
* @param string $type algorithme, existe
|
|
|
|
|
* @param boolean $rejet Si true alors création d'un fichier uniquement des rejets
|
2011-10-24 08:44:29 +00:00
|
|
|
|
* @param boolean $rejetNic 0 => ne rien faire, 1 => completer par le nic du siege, 2 => completer par le nic le plus grand
|
2011-10-18 09:48:14 +00:00
|
|
|
|
* @return string chaine vide ou chemin vers fichier de rejet
|
|
|
|
|
*/
|
2011-10-24 08:44:29 +00:00
|
|
|
|
public function getValidation($numCommande, $type = 'algorithme', $rejet = false, $rejetNic = 0)
|
2011-10-18 09:48:14 +00:00
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
Validation SIREN/SIRET - getValidation
|
|
|
|
|
======================
|
|
|
|
|
Vérifier les SIREN/SIRET/SIREN+NIC
|
|
|
|
|
Numéro de commande
|
|
|
|
|
|
|
|
|
|
Validité suivant algorithme ? Présence dans la base (attention ressources) ?
|
|
|
|
|
|
|
|
|
|
enrichir le nic si vide (prendre le siege)
|
|
|
|
|
|
|
|
|
|
rejet = false/true
|
|
|
|
|
|
|
|
|
|
Renvoyer le fichier original avec les lignes en erreur
|
|
|
|
|
ou Renvoyer seulement les lignes en erreur
|
|
|
|
|
|
|
|
|
|
Seulement pour validation, alors on marque comme complete
|
|
|
|
|
|
|
|
|
|
Créer le fichier pour l'extraction et place le marqueur de démarrage
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
2011-10-24 08:44:29 +00:00
|
|
|
|
/**
|
|
|
|
|
* Retourne un fichier XLS avec les lignes en rejet en rouge
|
|
|
|
|
* @param unknown_type $numCommande
|
|
|
|
|
*/
|
|
|
|
|
public function getRejetXLS($numCommande)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//retourne contenu du fichier encoder en base64
|
|
|
|
|
}
|
|
|
|
|
|
2011-10-18 09:48:14 +00:00
|
|
|
|
/**
|
|
|
|
|
* Retourne l'état de la commande à tout instant
|
|
|
|
|
* @param string $numCommande
|
|
|
|
|
* @return Etat
|
|
|
|
|
*/
|
|
|
|
|
public function getEtat($numCommande)
|
|
|
|
|
{
|
|
|
|
|
|
2011-10-24 08:44:29 +00:00
|
|
|
|
//Lecture de la base de données
|
|
|
|
|
$db = Zend_Db::factory($this->dbConfig->Extraction);
|
|
|
|
|
Zend_Db_Table_Abstract::setDefaultAdapter($db);
|
|
|
|
|
$commandeM = new Application_Model_ExtractionCommandes();
|
|
|
|
|
$sql = $commandeM->select()->where('numCommande = ?', $numCommande);
|
|
|
|
|
$result = $commandeM->fetchRow($sql);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
$etat = new Etat();
|
|
|
|
|
$etat->numCommande = $numCommande;
|
|
|
|
|
$etat->valid = $result->isValid;
|
|
|
|
|
$etat->nbLigneTotal = $result->nbLigne;
|
|
|
|
|
$etat->nbLigneTraite = $result->nbLigneT;
|
|
|
|
|
$etat->dateAjout = $result->dateAdded;
|
|
|
|
|
$etat->dateStart = $result->dateStart;
|
|
|
|
|
$etat->dateStop = $result->dateStop;
|
2011-10-18 09:48:14 +00:00
|
|
|
|
|
|
|
|
|
return $etat;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Liste des commmandes
|
|
|
|
|
* @param CommandesCriteres $criteres
|
|
|
|
|
* @param integer $position
|
|
|
|
|
* @return ListeCommandes
|
|
|
|
|
*/
|
|
|
|
|
public function getCommandes($criteres, $position = 0)
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
Liste des commandes
|
|
|
|
|
Toutes
|
|
|
|
|
Par numCommande
|
|
|
|
|
Par réference
|
|
|
|
|
Par date (intervalle)
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Enter description here ...
|
|
|
|
|
* @param string $numCommande
|
|
|
|
|
*/
|
|
|
|
|
public function getFichierEnrichit($numCommande)
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
L'enrichissement est réalisé par l'intermédiaire d'une tache cron
|
|
|
|
|
Récuperer le fichier (chemin) par le numéro de commande
|
|
|
|
|
Retourne url ou erreur
|
|
|
|
|
*/
|
2011-12-05 08:14:54 +00:00
|
|
|
|
}
|
2011-10-18 09:48:14 +00:00
|
|
|
|
}
|