Michael RICOIS e4d7967133 Remove slash
2012-12-12 15:57:47 +00:00

404 lines
14 KiB
PHP

<?php
require_once 'WsScore/WsScore.php';
require_once realpath(dirname(__FILE__)).'/Types.php';
class Pieces extends WsScore
{
/**
* Récupération d'un kbis
* @param string $siren
* @param string $options
* @return string
*/
public function getKbis($siren, $options = '')
{
$this->authenticate();
$this->permission('KBIS');
//Vérification du siren
if (intval($siren)==0) {
$this->sendError('1010');
} elseif (strlen($siren)!=9) {
$this->sendError('1020');
}
$hostname = 'http://'.$_SERVER['SERVER_NAME'];
if ($_SERVER['SERVER_PORT']!='80'){
$hostname.= ':'.$_SERVER['SERVER_PORT'];
}
$c = Zend_Registry::get('config');
$path = realpath($c->profil->path->secure).'/kbis/';
//Le fichier existe avec une date de validité inférieure à 1 jour
$filepdf = $path.$siren.'.pdf';
if ( file_exists($filepdf) && date('Ymd', filemtime($filepdf))==date('Ymd') ) {
$this->wsLog('kbis', $siren, basename($filepdf));
return $hostname.DOC_WEB_URL.'kbis/'.basename($filepdf);
} else {
$file = null;
//On vérifie quand même si il n'existe pas une commande en html
$dir = $path.date('Ymd');
if ( file_exists($dir) ) {
foreach ( glob($dir.'/'.$siren.'-*.html') as $file ) {
break;
}
}
if ( empty($file) ) {
//Téléchargement du KBIS
$result = array();
exec('php '.$c->profil->path->batch.'/getKbis.php --siren '.$siren, $result);
$result = end($result);
if (substr($result,-5)=='.html')
{
$file = $path.'kbis/'.date('Ymd').'/'.$result;
$this->wsLog('kbis', $siren, $result);
}
elseif ( $result!='ERREUR')
{
throw new SoapFault('MSG',$result);
}
else
{
$text = 'La récupération du KBIS a échoué sur le siren : '.$siren;
sendMail(
'production@scores-decisions.com',
'supportdev@scores-decisions.com',
'[ERREUR KBIS]',
$text);
throw new SoapFault('0000',"Erreur récupération du kbis");
}
} else {
$this->wsLog('kbis', $siren, basename($file));
}
//Génération du PDF
require_once 'wkhtmltopdf/wkhtmltopdf.php';
$pdf = new wkhtmltopdf();
$fileOut = $pdf->exec($file, $filepdf);
if ( !file_exists($filepdf) ) {
throw new SoapFault('0000',"Fichier PDF introuvable");
}
return $hostname.DOC_WEB_URL.'kbis/'.basename($filepdf);
}
}
/**
* Liste des bilans disponible au format image
* @param string $identifiant
* @param int $position
* @param int $nbRep
* @return BilansList
* @throws SoapFault
*/
public function getBilans($siren, $position = 0, $nbRep = 200)
{
$this->authenticate();
if ( empty($position) ) {
$position = 0;
}
if ($nbRep > 200) {
$nbRep = 200;
}
if ( strlen($siren)!=9 ) {
$this->sendError('1010');
}
/*
* Entreprise avec des bilans
* Base RNCS
* Si association alors lire dans la base de données pour établir la liste
* //@todo : Enregistrer dans la base jo.greffes_bilans
*/
$iInsee = new MInsee();
$identite = $iInsee->getIdentiteLight($siren);
if (empty($identite['id'])){
$this->sendError('1020');
}
$fj = $identite['FJ'];
$assoFormeJuridique = array(
//Associations
'9210','9220','9221','9222','9223','9224','9230','9240','9260',
//Syndicats
'7345','7353','7354','7355','8410','8420','9110',
//Fondation
'9300',
);
$list = array();
//Liste des bilans association
if ( in_array($fj, $assoFormeJuridique) ) {
try {
$db = Zend_Db::factory($this->dbConfig->db->jo);
$db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
if ($this->tabInfoUser['idClient']!=1) {
throw new SoapFault('ERR', "Application error");
} else {
throw new SoapFault('ERR', $e->getMessage());
}
} catch (Zend_Exception $e) {
if ($this->tabInfoUser['idClient']!=1) {
throw new SoapFault('ERR', "Application error");
} else {
throw new SoapFault('ERR', $e->getMessage());
}
}
$bilansM = new Application_Model_JoAssoBilans($db);
//Comptage
$sql = $bilansM->select()
->from($bilansM, 'COUNT(*) as nb')
->where('siren=?', $siren);
$nbBilans = $bilansM->fetchRow($sql)->nb;
if ($nbBilans>0)
{
//Liste
$sql = $bilansM->select()
->from($bilansM, array('dateCloture', 'Assoc_Date_Declaration', 'pdfLink', 'typeCompte', 'pdfSize', 'pdfPage'))
->where('siren = ?', $siren)
->order('dateCloture DESC')
->limit($nbRep, $position);
$bilans = $bilansM->fetchAll($sql);
if( $bilans->count() > 0) {
foreach ($bilans as $item) {
$filename = basename($item->pdfLink);
$file = SECURE_STORAGE . 'associations/bilans/' . $filename;
$bilansList = new Bilans();
$bilansList->DateCloture = substr($item->dateCloture,0,4).substr($item->dateCloture,5,2).substr($item->dateCloture,8,2);
$bilansList->DateDepot = substr($item->Assoc_Date_Declaration,0,4).substr($item->Assoc_Date_Declaration,5,2).substr($item->Assoc_Date_Declaration,8,2);
$bilansList->DureeExercice = '';
$bilansList->Type = $item->typeCompte;
//Chech file exist
if ( file_exists($file) )
{
$bilansList->File = 'ASS_'.$filename;
$bilansList->FileSize = $item->pdfSize;
$bilansList->NumberOfPages = $item->pdfPage;
$bilansList->ModeDiffusion = 'T';
}
$list[] = $bilansList;
}
}
}
}
//Liste des bilans Infogreffe
else
{
//@todo : définition du chemin de stockage des fichiers infogreffe
require_once 'Infogreffe/Infogreffe.php';
$infogreffe = new Infogreffe();
$infogreffeListBilans = $infogreffe->getBilans($siren);
$infogreffeListBilans = array_slice($infogreffeListBilans, $position, $nbRep, true);
if ( $infogreffeListBilans > 0 )
{
foreach ( $infogreffeListBilans as $item )
{
$bilansList = new Bilans();
$bilansList->DateCloture = substr($item['date_cloture_iso'],0,4).substr($item['date_cloture_iso'],5,2).substr($item['date_cloture_iso'],8,2);
$bilansList->DateDepot = '';
$bilansList->DureeExercice = '';
$bilansList->Type = $item['type_comptes'];
$filename = basename($item->pdfLink);
if ( file_exists($filename) ) {
// @todo : Vérifier que le fichier existe
/*
$bilansList->File = basename($item->pdfLink);
$bilansList->FileSize = $item->pdfSize;
$bilansList->NumberOfPages = $item->pdfPage;
$bilansList->ModeDiffusion = 'T';
*/
}
$list[] = $bilansList;
}
}
//@todo : Lire la table jo.greffes_bilans
//Comparer avec la liste infogreffe
//Si différence enregistrer dans la base
//Renvoyer le résultat
//Infos :
}
//Return
$output = new BilansList();
$output->nbReponses = $nbBilans;
$output->result = $list;
return $output;
}
/**
* Commande du fichier (URL ou Référence de commande)
* @param string $identifiant
* SIREN ou autre identifiant
* @param string $diffusion
* Mode de diffusion T, C
* @param string $dateCloture
* Date de cloture du bilan (SSAAMMJJ)
* @param string $reference
* Nom du fichier ou référence de commande
* @return string
* URL ou identifiant de commande
*/
public function getBilan($identifiant, $diffusion, $dateCloture, $reference = '')
{
$this->authenticate();
$this->permission('actes');
if ( strlen($identifiant)!=9 ) {
$this->sendError('1010');
}
/*
* Un bilan doit principalement s'identifier par
* siren, date de cloture, mode de diffusion
*
* Chemin fichier association
* Monter dans /mnt/datafile/associations
* Espace temporaire DATA_PATH/files/associations
*
* - Vérifier que le bilan est référencé dans la base
* - Vérifier que le fichier existe
* - Copier le fichier dans l'espace temporaire
* - vérifier que le fichier est copier, information sur le fichier
* - Renvoyer le lien de téléchargement REELLE
*/
$output = '';
if ( substr($reference, 0,4) == 'ASS_' ) {
switch ( $diffusion ) {
case 'T':
if ( preg_match('/^ASS_([0-9]{9})_([0-9]{8})/', $reference, $parseRef) ) {
$controlSiren = $parseRef[1];
$controlDate = substr($parseRef[2],4,4).substr($parseRef[2],2,2).substr($parseRef[2],0,2);
if ( $controlSiren == $siren && $controlDate == $dateCloture) {
$filename = substr($reference,4);
//@todo : Emplacement des fichiers
$file = SECURE_STORAGE . 'associations/bilans/' . $filename;
$dest = DOC_WEB_LOCAL . 'associations/' . $reference;
if ( file_exists($file) && copy($file, $dest)) {
$hostname = 'http://'.$_SERVER['SERVER_NAME'];
if ($_SERVER['SERVER_PORT']!='80') {
$hostname.= ':'.$_SERVER['SERVER_PORT'];
}
$output = $hostname . '/data/associations/' . basename($dest);
$dateClotureD = substr($dateCloture,0,2).'/'.substr($dateCloture,2,2).'/'.substr($dateCloture,4,4);
$this->wsLog('greffe_bilans', $siren, 'Bilan association au '.$dateClotureD);
}
}
}
break;
}
} else {
switch ( $diffusion )
{
case 'T':
//Read the database to see if file exist
try {
$db = Zend_Db::factory($this->dbConfig->db->jo);
$db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
if ($this->tabInfoUser['idClient']!=1) {
throw new SoapFault('ERR', "Application error");
} else {
throw new SoapFault('ERR', $e->getMessage());
}
} catch (Zend_Exception $e) {
if ($this->tabInfoUser['idClient']!=1) {
throw new SoapFault('ERR', "Application error");
} else {
throw new SoapFault('ERR', $e->getMessage());
}
}
$bilansM = new Application_Model_JoGreffesBilans($db);
$sql = $bilansM->select()
->where('siren=?', $identifiant)
->where('date_cloture=?', substr($dateCloture,0,4).'-'.substr($dateCloture,4,2).'-'.substr($dateCloture,6,2));
$infos = $bilansM->fetchRow($sql);
if ( $infos===null ) {
throw new SoapFault('ERR', 'Bilan indisponible');
}
//Go to Infogreffe service
if ( $infos->pdfLink=='' ) {
require_once 'Infogreffe/Infogreffe.php';
$infogreffe = new Infogreffe();
$url = $infogreffe->getBilan($siren, $diffusion, array(
'greffe' => $infos->numGreffe,
'dossier_millesime' => substr($infos->numRC,0,2),
'dossier_statut' => substr($infos->numRC,2,1),
'dossier_chrono' => substr($infos->numRC,3),
'num_depot' => $infos->num_depot,
'date_cloture' => WDate::dateT('Ymd','d/m/Y',$infos->date_cloture)
));
$pdf = $infogreffe->download($url);
} else {
$pdf = $infos->pdfLink;
}
if ( !empty($pdf) ) {
$file = SECURE_STORAGE . 'greffes/bilans/' . $pdf;
$dest = DOC_WEB_LOCAL . 'greffes/' . $pdf;
if ( file_exists($file) && copy($file, $dest)) {
$hostname = 'http://'.$_SERVER['SERVER_NAME'];
if ($_SERVER['SERVER_PORT']!='80') {
$hostname.= ':'.$_SERVER['SERVER_PORT'];
}
$output = $hostname . '/data/greffes/' . basename($dest);
$this->wsLog('greffe_bilans', $siren, $dateCloture);
} else {
throw new SoapFault('ERR', 'Fichier introuvable');
}
}
break;
case 'C':
// Renvoyer l'id de commande
break;
}
}
return $output;
}
protected function getActes($identifiant)
{
}
protected function getActe(){}
}