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(){} }