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 = $dir.'/'.$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 $pdf = new Scores_Wkhtml_Pdf(); $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 * SIREN ou autre identifiant * @param int $position * Numéro de page * @param int $nbRep * Nombre de réponse par page (max=200) * @return Bilans * @throws SoapFault */ public function getBilans($identifiant, $position = 0, $nbRep = 200) { // @todo : Code Saisie + Date saisie $this->authenticate(); if ( empty($position) ) { $position = 0; } if ($nbRep > 200) { $nbRep = 200; } if ( strlen($identifiant)!=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($identifiant); 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) ) { $bilansM = new Application_Model_JoAssoBilans(); //Comptage $sql = $bilansM->select() ->from($bilansM, 'COUNT(*) as nb') ->where('siren=?', $identifiant); $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 = ?', $identifiant) ->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 . 'association/bilans/' . $filename; $bilansList = new Bilan(); $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 { require_once 'Metier/Infogreffe/InfogreffeBi.php'; $infogreffe = new Metier_Infogreffe_Bi($identifiant); $list = $infogreffe->getList(); $nbBilans = count($list); } $this->wsLog('greffe_bilans', $identifiant, 'Liste'); $output = new Bilans(); $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 $dateCloture * Date de cloture du bilan (SSAAMMJJ) * @param string $type * Type de compte (null|sociaux|consolides) * @param string $diffusion * Mode de diffusion (T|C) * @param string $reference * Nom du fichier ou référence de commande * @param string $email * email pour la réception de la commande (si différent du compte utilisateur) * @throws SoapFault * @return string * URL ou identifiant de commande */ public function getBilan($identifiant, $dateCloture, $type, $diffusion, $reference = '', $email = '') { $this->authenticate(); $this->permission('actes'); if ( strlen($identifiant)!=9 ) { $this->sendError('1010'); } $output = ''; /** * Association */ 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 == $identifiant && $controlDate == $dateCloture) { $filename = substr($reference,4); $c = Zend_Registry::get('config'); $file = $c->profil->path->secure . DIRECTORY_SEPARATOR . 'association/bilans/' . $filename; $dest = $c->profil->path->files . DIRECTORY_SEPARATOR . '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 . '/fichier/associations/' . basename($dest); $dateClotureD = substr($dateCloture,4,2).'/'.substr($dateCloture,6,2).'/'.substr($dateCloture,0,4); $this->wsLog('greffe_bilans', $identifiant, 'Bilan association au '.$dateClotureD); } } } break; } } /** * Entreprise */ else { switch ( $diffusion ) { case 'T': require_once 'Metier/Infogreffe/InfogreffeBi.php'; $infogreffe = new Metier_Infogreffe_Bi($identifiant); $pdf = $infogreffe->getCommandeT($dateCloture, $type); if ( !empty($pdf) ) { $c = Zend_Registry::get('config'); $file = $c->profil->path->secure . DIRECTORY_SEPARATOR . $pdf; $dest = $c->profil->path->files . DIRECTORY_SEPARATOR . 'greffes' . DIRECTORY_SEPARATOR . $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); // @todo : Chemin du fichier $this->wsLog('greffe_bilans', $siren, basename($dest)); } else { throw new SoapFault('ERR', 'Fichier introuvable'); } } break; case 'C': //Génération identifiant de commande unique $refCommande = uniqid(); $iInsee = new MInsee(); $raisonSociale = $iInsee->getIdentiteLight($identifiant); //Sauvegarde dans la base $commandeM = new Application_Model_Sdv1GreffeCommandes(); $id = $commandeM->insert(array( 'refCommande' => $refCommande, 'login' => $this->tabInfoUser['login'], 'email' => empty($email) ? $this->tabInfoUser['email'] : $email, 'refClient' => $reference, 'type' => 'C', 'siren' => $identifiant, 'raisonSociale' => $raisonSociale, 'documentType' => 'BI', 'documentLib' => 'Bilan' . $type . ' ' . $dateCloture, 'dateInsert' => date('YmdHis'), )); //Commande chez Infogreffe require_once 'Metier/Infogreffe/InfogreffeBi.php'; $infogreffe = new Metier_Infogreffe_Bi($identifiant); if ( $infogreffe->getCommandeC($dateCloture, $type, 'G'.$refCommande) ) { $commandeM->update(array( 'dateCommande' => date('YmdHis'), ), 'id='.$id); } return $refCommande; break; } } return $output; } /** * Liste des actes au format image * @param string $identifiant * @return Actes */ public function getActes($identifiant) { require_once 'Metier/Infogreffe/InfogreffeAc.php'; $infogreffe = new Metier_Infogreffe_Ac($identifiant); $list = $infogreffe->getList(true); $nbActes = count($list); if ($nbActes>0) { //Information INPI $rncs = new MRncs(); foreach ($list as $i => $item) { $result = $rncs->getListeDepots($identifiant, $item->DepotDate); if (count($result)>0) { foreach ($result as $infos) { $list[$i]->infos[] = $infos['libDepot']; } } } } $this->wsLog('greffe_actes', $identifiant, 'Liste'); $output = new Actes(); $output->result = $list; $output->nbReponses = $nbActes; return $output; } /** * @todo : * @param string $identifiant * SIREN * @param string $diffusion * Mode de diffusion (C|T) * @param string $depotNum * * @param string $depotDate * * @param string $acteType * Type de l'acte * @param string $acteNum * Numéro de l'acte * @param string $acteDate * Date de l'acte * @param string $reference * A DETERMINER * @throws SoapFault * @return string * URL ou identifiant de commande */ public function getActe($identifiant, $diffusion, $depotNum, $depotDate, $acteType, $acteNum, $acteDate, $reference = '') { $this->authenticate(); $this->permission('actes'); if ( strlen($identifiant)!=9 ) { $this->sendError('1010'); } $output = ''; switch ( $diffusion ) { case 'T': require_once 'Metier/Infogreffe/InfogreffeAc.php'; $infogreffe = new Metier_Infogreffe_Ac($identifiant); $pdf = $infogreffe->getCommandeT($depotNum, $depotDate, $acteType, $acteNum, $acteDate); if ( !empty($pdf) ) { $c = Zend_Registry::get('config'); $file = $c->profil->path->secure . DIRECTORY_SEPARATOR . $pdf; $dest = $c->profil->path->files . DIRECTORY_SEPARATOR . 'greffes' . DIRECTORY_SEPARATOR . $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); //@todo : Surcharger la référence avec le nom du fichier $this->wsLog('greffe_actes', $siren, $reference); } else { throw new SoapFault('ERR', 'Fichier introuvable'); } } break; case 'C': //Génération identifiant de commande unique $refCommande = uniqid(); $iInsee = new MInsee(); $raisonSociale = $iInsee->getIdentiteLight($identifiant); //Sauvegarde dans la base $commandeM = new Application_Model_Sdv1GreffeCommandes(); $id = $commandeM->insert(array( 'refCommande' => $refCommande, 'login' => $this->tabInfoUser['login'], 'email' => empty($email) ? $this->tabInfoUser['email'] : $email, 'refClient' => $reference, 'type' => 'C', 'siren' => $identifiant, 'raisonSociale' => $raisonSociale, 'documentType' => 'AC', 'documentLib' => '', 'dateInsert' => date('YmdHis'), )); //Commande chez Infogreffe require_once 'Metier/Infogreffe/InfogreffeAc.php'; $infogreffe = new Metier_Infogreffe_Ac($identifiant); if ( $infogreffe->getCommandeC($dateCloture, $type, 'G'.$refCommande) ) { $commandeM->update(array( 'dateCommande' => date('YmdHis'), ), 'id='.$id); } return $refCommande; break; } return $output; } }