314 lines
8.4 KiB
PHP
Raw Normal View History

<?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
enteteIn
dataIn
enteteOut
2011-12-08 15:07:30 +00:00
isValid => 0
error => le traitement à planté
dateAdded
dateStart
2011-12-08 15:07:30 +00:00
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
*/
2011-10-24 08:44:29 +00:00
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']
}
*/
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!");
}
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)
{
/*
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;
}
/**
* 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
2011-10-24 08:44:29 +00:00
* @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
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
* @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)
{
/*
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
}
/**
* 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;
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
*/
}
}