314 lines
8.4 KiB
PHP
314 lines
8.4 KiB
PHP
<?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
|
||
reference
|
||
enteteIn
|
||
dataIn
|
||
enteteOut
|
||
isValid => 0
|
||
error => le traitement à planté
|
||
dateAdded
|
||
dateStart
|
||
nbLigne => nombre de lignes dans le fichier
|
||
nbLigneT => nombre de lignes traitées
|
||
dateStop
|
||
*/
|
||
|
||
/**
|
||
* 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
|
||
* Format du tableau de données json/xml/fichier
|
||
* @param string $reference
|
||
* @return string
|
||
*/
|
||
public function setCommande($infoEntete = null, $data = null, $format = 'json', $reference = '')
|
||
{
|
||
/**
|
||
* 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']
|
||
}
|
||
|
||
*/
|
||
|
||
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!");
|
||
}
|
||
return $numCommande;
|
||
}
|
||
|
||
/**
|
||
* 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)
|
||
{
|
||
/*
|
||
clé déjà défini + ajout des clés pour l'enrichissement
|
||
Ecrire fichier csv pour enrichissement
|
||
*/
|
||
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;
|
||
}
|
||
|
||
|
||
/**
|
||
* 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
|
||
=======================
|
||
Catégorie Clé bdd.table sql Libellé Commentaires
|
||
Identite siren Siren
|
||
Fonction siretValide Validité SIREN/SIRET
|
||
*/
|
||
$output = array();
|
||
$dico = new Dico();
|
||
|
||
return $output;
|
||
}
|
||
|
||
/**
|
||
* Validation préalable de la commande
|
||
* @param string $numCommande Numéro de commande
|
||
* @param string $type algorithme, existe
|
||
* @param boolean $rejet Si true alors création d'un fichier uniquement des rejets
|
||
* @param boolean $rejetNic 0 => ne rien faire, 1 => completer par le nic du siege, 2 => completer par le nic le plus grand
|
||
* @return string chaine vide ou chemin vers fichier de rejet
|
||
*/
|
||
public function getValidation($numCommande, $type = 'algorithme', $rejet = false, $rejetNic = 0)
|
||
{
|
||
/*
|
||
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
|
||
*/
|
||
}
|
||
|
||
/**
|
||
* 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
|
||
}
|
||
|
||
/**
|
||
* Retourne l'état de la commande à tout instant
|
||
* @param string $numCommande
|
||
* @return Etat
|
||
*/
|
||
public function getEtat($numCommande)
|
||
{
|
||
|
||
//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;
|
||
|
||
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
|
||
*/
|
||
}
|
||
} |