From dcc2b1767dbdaa47699afcfef86502e18c8ecd69 Mon Sep 17 00:00:00 2001 From: Michael RICOIS Date: Wed, 15 Apr 2015 13:30:19 +0000 Subject: [PATCH] =?UTF-8?q?Sytem=20:=20Class=20charg=C3=A9=20dans=20le=20s?= =?UTF-8?q?erver=20soap,=20nom=20du=20fichier=20dor=C3=A9navant=20"Service?= =?UTF-8?q?.php"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/controllers/ServiceController.php | 10 +- library/Scores/Ws/Doc.php | 2 +- library/WsScore/Catalog/v0.1/Service.php | 482 ++ .../WsScore/Clients/Afnic/v2.2/Service.php | 270 + .../WsScore/Clients/Mixdata/v0.1/Service.php | 304 + library/WsScore/Clients/Rrg/v0.1/Service.php | 173 + library/WsScore/Clients/Sfr/v0.1/Service.php | 71 + .../WsScore/Clients/Veolia/v0.1/Service.php | 707 +++ .../WsScore/Clients/Veolia/v0.2/Service.php | 790 +++ .../WsScore/Clients/Vwbank/v0.1/Service.php | 620 ++ .../WsScore/Clients/Vwbank/v0.2/Service.php | 806 +++ library/WsScore/Entreprise/v0.2/Service.php | 2881 +++++++++ library/WsScore/Entreprise/v0.3/Service.php | 3269 ++++++++++ library/WsScore/Entreprise/v0.4/Service.php | 3307 ++++++++++ library/WsScore/Entreprise/v0.5/Service.php | 3423 +++++++++++ library/WsScore/Entreprise/v0.6/Service.php | 3503 +++++++++++ library/WsScore/Entreprise/v0.7/Service.php | 4224 +++++++++++++ library/WsScore/Entreprise/v0.8/Service.php | 5393 +++++++++++++++++ library/WsScore/Gestion/v0.1/Service.php | 1075 ++++ library/WsScore/Gestion/v0.2/Service.php | 1300 ++++ library/WsScore/Gestion/v0.3/Service.php | 2114 +++++++ library/WsScore/Gestion/v0.4/Service.php | 1260 ++++ library/WsScore/Interne/v0.2/Service.php | 4217 +++++++++++++ library/WsScore/Interne/v0.3/Service.php | 3398 +++++++++++ library/WsScore/Interne/v0.4/Service.php | 3548 +++++++++++ library/WsScore/Interne/v0.5/Service.php | 2704 +++++++++ library/WsScore/Interne/v0.6/Service.php | 2887 +++++++++ library/WsScore/Order/v0.1/Service.php | 440 ++ library/WsScore/Pieces/v0.1/Service.php | 1092 ++++ library/WsScore/Saisie/v0.1/Service.php | 1184 ++++ library/WsScore/Saisie/v0.2/Service.php | 2813 +++++++++ 31 files changed, 58261 insertions(+), 6 deletions(-) create mode 100644 library/WsScore/Catalog/v0.1/Service.php create mode 100644 library/WsScore/Clients/Afnic/v2.2/Service.php create mode 100644 library/WsScore/Clients/Mixdata/v0.1/Service.php create mode 100644 library/WsScore/Clients/Rrg/v0.1/Service.php create mode 100644 library/WsScore/Clients/Sfr/v0.1/Service.php create mode 100644 library/WsScore/Clients/Veolia/v0.1/Service.php create mode 100644 library/WsScore/Clients/Veolia/v0.2/Service.php create mode 100644 library/WsScore/Clients/Vwbank/v0.1/Service.php create mode 100644 library/WsScore/Clients/Vwbank/v0.2/Service.php create mode 100644 library/WsScore/Entreprise/v0.2/Service.php create mode 100644 library/WsScore/Entreprise/v0.3/Service.php create mode 100644 library/WsScore/Entreprise/v0.4/Service.php create mode 100644 library/WsScore/Entreprise/v0.5/Service.php create mode 100644 library/WsScore/Entreprise/v0.6/Service.php create mode 100644 library/WsScore/Entreprise/v0.7/Service.php create mode 100644 library/WsScore/Entreprise/v0.8/Service.php create mode 100644 library/WsScore/Gestion/v0.1/Service.php create mode 100644 library/WsScore/Gestion/v0.2/Service.php create mode 100644 library/WsScore/Gestion/v0.3/Service.php create mode 100644 library/WsScore/Gestion/v0.4/Service.php create mode 100644 library/WsScore/Interne/v0.2/Service.php create mode 100644 library/WsScore/Interne/v0.3/Service.php create mode 100644 library/WsScore/Interne/v0.4/Service.php create mode 100644 library/WsScore/Interne/v0.5/Service.php create mode 100644 library/WsScore/Interne/v0.6/Service.php create mode 100644 library/WsScore/Order/v0.1/Service.php create mode 100644 library/WsScore/Pieces/v0.1/Service.php create mode 100644 library/WsScore/Saisie/v0.1/Service.php create mode 100644 library/WsScore/Saisie/v0.2/Service.php diff --git a/application/controllers/ServiceController.php b/application/controllers/ServiceController.php index 5015d0cf..771e3d67 100644 --- a/application/controllers/ServiceController.php +++ b/application/controllers/ServiceController.php @@ -77,8 +77,8 @@ class ServiceController extends Zend_Controller_Action // --- Charger les classes et les types pour le service suivant la version if ('clients' == $serviceName) { - $pathServiceClassIni = 'WsScore/Clients/'.$clientClassName.'/v'.$version.'/Config.php'; - $pathServiceClassPhp = 'WsScore/Clients/'.$clientClassName.'/v'.$version.'/Entreprise.php'; + $pathServiceClassIni = 'WsScore/Clients/'.$clientClassName.'/v'.$version.'/Config.php'; + $pathServiceClassPhp = 'WsScore/'.$serviceClassName.'/v'.$version.'/Service.php'; // --- Gestion du mode de génération du wsdl if ( APPLICATION_ENV == 'development' || array_key_exists('mode', $serviceVersions[$version]) @@ -94,8 +94,8 @@ class ServiceController extends Zend_Controller_Action else { $pathServiceClassIni = 'WsScore/'.$serviceClassName.'/v'.$version.'/Config.php'; - $pathServiceClassPhp = 'WsScore/'.$serviceClassName.'/v'.$version.'/'.$serviceClassName.'.php'; - //Gestion du mode de génération du wsdl + $pathServiceClassPhp = 'WsScore/'.$serviceClassName.'/v'.$version.'/Service.php'; + // --- Gestion du mode de génération du wsdl if ( APPLICATION_ENV == 'development' || array_key_exists('mode', $serviceVersions[$version]) && $serviceVersions[$version]['mode']=='auto') { @@ -149,7 +149,7 @@ class ServiceController extends Zend_Controller_Action // --- Génération/Fourniture du wsdl } elseif (isset($_GET['wsdl']) && !file_exists($wsdlPath . '/' . $fichierWsdl)) { $wsdl->dump($wsdlPath . '/' . $fichierWsdl); - if (!headers_sent()) { + if ( !headers_sent() ) { header('Content-Type: text/xml'); } echo file_get_contents($wsdlPath . '/' . $fichierWsdl); diff --git a/library/Scores/Ws/Doc.php b/library/Scores/Ws/Doc.php index df15eaa7..fc56ef54 100644 --- a/library/Scores/Ws/Doc.php +++ b/library/Scores/Ws/Doc.php @@ -13,7 +13,7 @@ class Scores_Ws_Doc { $this->serviceClass = $serviceClass; $this->classmap = $classmap; - require_once $path . $this->serviceClass . '.php'; + require_once $path . 'Service.php'; $this->parseService(); $this->parseTypes(); } diff --git a/library/WsScore/Catalog/v0.1/Service.php b/library/WsScore/Catalog/v0.1/Service.php new file mode 100644 index 00000000..c33f716e --- /dev/null +++ b/library/WsScore/Catalog/v0.1/Service.php @@ -0,0 +1,482 @@ +authenticate(); + + $columnsList = array( + 'codNaf5', + 'libNaf5', + 'libNaf5en', + 'codNaf4', + 'codNaf3', + 'codNaf2', + 'codNaf1', + ); + + if (empty($columns) || count($columns)==0) { + $columnsDisplay = array('codNaf5', 'libNaf5', 'codNaf4', 'codNaf3', 'codNaf2', 'codNaf1'); + } + // Check authorize column + else { + foreach ( $columns as $column ) { + if ( in_array($column, $columnsList) ) { + $columnsDisplay[] = $column; + } + } + } + + try { + $model = new Application_Model_JoTabNaf5(); + $sql = $model->select()->from($model, $columnsDisplay); + if ( $id!==null ) { + $sql->where('codNaf5=?', $id); + } + $result = $model->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + + $tab = array(); + if ( $result->count()>0 ) { + foreach ( $result as $item ) { + $tab[$item->codNaf5] = $item->toArray(); + } + } + + return json_encode($tab); + + } + + /** + * Cities + * @param string $id + * @param array $columns + * @throws SoapFault + * @return string + */ + public function getCity($id=null, $columns = array()) + { + $this->authenticate(); + + $columnsList = array( + 'codePostal', + 'LIBGEO', + ); + + if (empty($columns) || count($columns)==0) { + $columnsDisplay = array('codePostal', 'LIBGEO'); + } + // Check authorize column + else { + foreach ( $columns as $column ) { + if ( in_array($column, $columnsList) ) { + $columnsDisplay[] = $column; + } + } + } + + try { + $model = new Application_Model_InseeTabVilles(); + $sql = $model->select()->from($model, $columnsDisplay); + if ( $id!==null ) { + $sql->where('codePostal=?', $id); + } + + $result = $model->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + + $tab = array(); + if ( $result->count()>0 ) { + $i=0; + foreach ( $result as $item ) { + //$tab[] = $item->toArray(); + $tab[$i]['code'] = $item->codePostal; + $tab[$i]['libelle'] = $item->LIBGEO; + $i++; + } + } + return json_encode($tab); + } + + /** + * Departements + * @param string $id + * @param array $columns + * @throws SoapFault + * @return string + */ + public function getDepartements($id=null, $columns = array()) + { + $this->authenticate(); + + $columnsList = array( + 'numdep', + 'libdep', + ); + + if (empty($columns) || count($columns)==0) { + $columnsDisplay = array('numdep', 'libdep'); + } + // Check authorize column + else { + foreach ( $columns as $column ) { + if ( in_array($column, $columnsList) ) { + $columnsDisplay[] = $column; + } + } + } + + try { + $model = new Application_Model_InseeDepartements(); + $sql = $model->select()->from($model, $columnsDisplay); + if ( $id!==null ) { + $sql->where('numdep=?', $id); + } + + $result = $model->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + + $tab = array(); + if ( $result->count()>0 ) { + $i=0; + foreach ( $result as $item ) { + //$tab[] = $item->toArray(); + $tab[$i]['numdep'] = $item->numdep; + $tab[$i]['libdep'] = $item->libdep; + $i++; + } + } + return json_encode($tab); + } + + /** + * Legal Form + * @param string $id + * @param array $columns + * @throws SoapFault + * @return string + */ + public function getLegalForm($id=null, $columns = array()) + { + $this->authenticate(); + + $columnsList = array( + 'code', + 'libelle', + 'libelleEn', + ); + + if (empty($columns) || count($columns)==0) { + $columnsDisplay = array('code', 'libelle'); + } + // Check authorize column + else { + foreach ( $columns as $column ) { + if ( in_array($column, $columnsList) ) { + $columnsDisplay[] = $column; + } + } + } + + try { + $model = new Application_Model_JoTabFJur(); + $sql = $model->select()->from($model, $columnsDisplay); + if ( $id!==null ) { + $sql->where('code=?', $id); + } + $result = $model->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + + $tab = array(); + if ( $result->count()>0 ) { + foreach ( $result as $item ) { + $tab[$item->code] = $item->toArray(); + } + } + + return json_encode($tab); + } + + /** + * Event + * @param string $id + * @param array $columns + * @throws SoapFault + * @return string + */ + public function getEvent($id=null, $columns = array()) + { + $this->authenticate(); + + $columnsList = array( + 'codEven', + 'libEven', + 'libEvenEn', + 'Bodacc_Code', + 'Rubrique', + ); + + if (empty($columns) || count($columns)==0) { + $columnsDisplay = array('codEven', 'libEven','Bodacc_Code', 'Rubrique'); + } + // Check authorize column + else { + foreach ( $columns as $column ) { + if ( in_array($column, $columnsList) ) { + $columnsDisplay[] = $column; + } + } + } + + try { + $model = new Application_Model_JoTabEvenements(); + $sql = $model->select()->from($model, $columnsDisplay); + if ( $id!==null ) { + $sql->where('codeEven=?', $id); + } + $result = $model->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + + $tab = array(); + if ( $result->count()>0 ) { + foreach ( $result as $item ) { + $tab[$item->codEven] = $item->toArray(); + } + } + + return json_encode($tab); + } + + /** + * Countries List + * @param string $id Code Pays 3 + * @param array $columns Column list to be return + * @throws SoapFault + * @return string + */ + public function getCountry($id = null, $columns = array()) + { + $this->authenticate(); + + $columnsList = array( + 'codPays', + 'numPays', + 'codPays3', + 'codePaysInpi', + 'codePaysInsee', + 'codeFips', + 'codeTld', + 'codeIoc', + 'codeITU', + 'codeDS', + 'codeWMO', + 'codeGAUL', + 'codeMARC', + 'dependance', + 'libPaysEN', + 'libPays', + 'libPaysMajAuto', + 'zone', + 'drapeau', + 'devise', + 'indTel', + 'remarques', + ); + + if (empty($columns) || count($columns)==0) { + $columnsDisplay = array('codPays3', 'libPays'); + } + // Check authorize column + else { + foreach ( $columns as $column ) { + if ( in_array($column, $columnsList) ) { + $columnsDisplay[] = $column; + } + } + } + + try { + $countryM = new Application_Model_JoTabPays(); + $sql = $countryM->select()->from($countryM, $columnsDisplay); + if ( $id!==null ) { + $sql->where('codPays3=?', $id); + } else { + $sql->where('codPays3 IS NOT NULL'); + } + $result = $countryM->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + $tabPays = array(); + if ( $result->count()>0 ) { + foreach ( $result as $item ) { + $tabPays[$item->codPays3] = $item->toArray(); + } + } + + return json_encode($tabPays); + } + + /** + * Currencies + * @param string $id + * @throws SoapFault + * @return string + */ + public function getCurrency($id = null) + { + $this->authenticate(); + + $columnsDisplay = array('devIso', 'devNom'); + try { + $currencyM = new Application_Model_JoTabDevises(); + $sql = $currencyM->select()->from($currencyM, $columnsDisplay); + if ( $id!==null ) { + $sql->where('devIso=?', $id); + } else { + $sql->where("devIso!=''"); + } + $result = $currencyM->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + + $tab = array(); + if ( $result->count()>0 ) { + foreach ( $result as $item ) { + $tab[$item->devIso] = $item->toArray(); + } + } + + return json_encode($tab); + } + + /** + * Bodacc Fonctions + * @param string $id + * @param array $columns + * @throws SoapFault + * @return string + */ + public function getDirFonction($id = null, $columns = array()) + { + $this->authenticate(); + + $columnsList = array( + 'codeFct', + 'libelle', + 'libelleEn', + ); + + if (empty($columns) || count($columns)==0) { + $columnsDisplay = array('codeFct', 'libelle'); + } + // Check authorize column + else { + foreach ( $columns as $column ) { + if ( in_array($column, $columnsList) ) { + $columnsDisplay[] = $column; + } + } + } + + try { + $model = new Application_Model_JoBodaccFonctions(); + $sql = $model->select()->from($model, $columnsDisplay); + if ( $id!==null ) { + $sql->where('codeFct=?', $id); + } + $result = $model->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + + $tab = array(); + if ( $result->count()>0 ) { + foreach ( $result as $item ) { + $tab[$item->codeFct] = $item->toArray(); + } + } + + return json_encode($tab); + } + + protected function getHelp($app, $category, $name) + { + + } + + protected function setHelp($app, $category, $name, $label, $content) + { + + } + +} \ No newline at end of file diff --git a/library/WsScore/Clients/Afnic/v2.2/Service.php b/library/WsScore/Clients/Afnic/v2.2/Service.php new file mode 100644 index 00000000..ab5f1a64 --- /dev/null +++ b/library/WsScore/Clients/Afnic/v2.2/Service.php @@ -0,0 +1,270 @@ +serviceClient = true; + $this->serviceClientName = 'Afnic'; + $this->serviceName = 'Entreprise'; + } + + /** + * Retourne une fiche identite entreprise + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param int $id Identifiant interne + * @param int $dept + * @param string $waldec Identifiant Registre National des Associations ou Waldec + * @return EntrepResult + */ + public function getIdentite($siret, $id, $dept, $waldec) + { + $forceVerif=false; + debugLog('W',"Recherche par identifiant Siren=$siret, Dept=$dep, Id=$id, Waldec=$waldec",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $result = new EntrepResult(); + + + if ($waldec<>'' && substr($waldec,0,1)=='W' && $siret*1==0) { + debugLog('I',"AFNIC Recherche par identifiant Waldec $waldec (Siren=$siret, Dept=$dep, Id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $rep=$iInsee->getEtablissementsParId('AUTRE', $waldec, 0, 20, 20); + + $etabs=$rep['reponses']; + if ($rep['nbReponses']>0) { + foreach ($etabs as $nb=>$etab) { + $siret=$etab['Siret']; + $id=$etab['id']; + break; + } + } else { + debugLog('W', "Waldec $waldec non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $error = new ErrorElement(); + $error->errnum = 108; + $error->errmsg = 'Waldec inconnu'; + $result->error = $error; + return $result; + + } + } + + $tabRet=array(); + $siret=trim($siret); + $len=strlen($siret); + $id=trim($id)*1; + if ($len==14) $nic=substr(''.$siret,9,5)*1; + elseif ($len== 9) $nic=''; + elseif ($len== 0) { + $siren=0; $nic=''; + } + else { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error = new ErrorElement(); + $error->errnum = 102; + $error->errmsg = 'Siren Siret inexistant'; + $result->error = $error; + $result->result = $tabRet; + return $result; + } + $siren=substr(''.$siret,0,9)*1; + if ($siren==0 && $id==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error = new ErrorElement(); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + $result->error = $error; + $result->result = $tabRet; + return $result; + } + + if ($id==0 && !$iInsee->valideSiren($siren, $nic)) { + debugLog('W', "Siren $siren/$nic invalide (105)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error = new ErrorElement(); + $error->errnum = 105; + $error->errmsg = 'Siren invalide'; + $result->error = $error; + $result->result = $tabRet; + return $result; + } + + if ($dep==974) { + debugLog('I',"AFNIC Recherche par Siren/Dept (Waldec=$waldec, Siren=$siret, Dept=$dep, Id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $rep=$iInsee->getEtablissements($siren, $nic, 0, 20, 20, $dep); + $etabs=$rep['reponses']; + if ($rep['nbReponses']>0) { + foreach ($etabs as $nb=>$etab) { + $siren=$etab['siren']; + $nic=$etab['nic']; + $id=$etab['id']; + break; + } + } else { + debugLog('W', "Siren $siren/Waldec $waldec non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error = new ErrorElement(); + $error->errnum = 107; + $error->errmsg = 'Entreprise ou Association non présente dans le département demandé'; + $result->error = $error; + $result->result = $tabRet; + return $result; + } + } + + debugLog('I',"AFNIC Identités demandée pour siret ".strtr(print_r($siret, true),array("\r"=>'',"\n"=>'')). " (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $entrep=$iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error = new ErrorElement(); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + $result->error = $error; + $result->result = $tabRet; + return $result; + } + + $codePaysIso2='FR'; + if ($entrep['Dept']>98) { + $codePaysInsee=$entrep['codeCommune']; + $iDb=new WDB('jo'); + $tabTmp=$iDb->select( + 'jo.tabPays j, insee.insee_tabPays i', + 'j.codPays, j.numPays, j.codPays3, j.codePaysInpi, j.libPays, i.LIBCOG, i.ACTUAL', + "j.codePaysInsee=$codePaysInsee AND j.codePaysInsee=substring( i.COG, 3, 3 ) AND i.ACTUAL IN (1,4) AND j.numPays is NOT NULL", true, MYSQL_ASSOC); + if (count($tabTmp)==1) { + $codePaysIso2=$tabTmp[0]['codPays']; + } else { + $codePaysIso2=''; + foreach ($tabTmp as $tabTmp2) { + if (trim(strtoupper(strtr($tabTmp2['libPays'], + 'àáâãäåæçèéêëìíîïðñòóôõöùúûüýÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝ', + "aaaaaaaceeeeiiiionooooouuuuyyAAAAAAACEEEEIIIIONOOOOOUUUUY")))==trim(strtoupper($tabTmp2['LIBCOG']))) { + $codePaysIso2=$tabTmp2['codPays']; + break; + } + } + if ($codePaysIso2=='') { + sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Afnic $siret/$waldec ($dep) Plusieurs Codes Pays", "Siret $siret + Waldec $waldec + Département $dep + Id=$id".EOL. + print_r($entrep, true).EOL. + print_r($tabTmp, true)); + } + } + } + + $autreId=$entrep['AutreId']; + if ($params->siret>0 && $waldec<>'') + $autreId=$waldec; + + // Source RNCS prioritaire pour les infos entreprises + $nom=$entrep['nomLong']; + if ($nom=='') $nom=$entrep['Nom']; + $sigle=$entrep['sigleLong']; + if ($sigle=='') $sigle=$entrep['Sigle']; + + // Actif RNCS + if ($entrep['EntActiveRCS']) $actif=1; + // Inactif RNCS + elseif (isset($entrep['EntActiveRCS']) && $entrep['EntActiveRCS']==0) $actif=0; + // Actif Insee et périmètre Insee + elseif ($entrep['Actif'] || $entrep['NbEtab']) $actif=1; + else $actif=0; + + // Source INSEE prioritaire sur l'établissement + $enseigne=$entrep['Enseigne']; + if ($enseigne=='') $enseigne=$entrep['enseigneLong']; + $tabCarInvalides=array('/'=>' ','*'=>' ', '&'=>' ET ', '&'=>' ET ', '&'=>' ET ', + '"'=>' ', "'"=>' '); + + $item = new EntrepElement(); + $item->id = $entrep['id']; + $item->Siret = $entrep['Siret']; + $item->SiretSiege = $entrep['SiretSiege']; + $item->Siege = $entrep['Siege']; + $item->Actif = $actif; + $item->AutreId = $autreId; + $item->idSd = $entrep['Source'].'-'.$entrep['SourceId']; + $item->Nom = trim(prepareString(preg_replace('/ +/',' ', strtr($nom,$tabCarInvalides)))); + $item->Nom2 = trim(prepareString(preg_replace('/ +/',' ', strtr($entrep['Nom2'],$tabCarInvalides)))); + $item->NomCommercial = trim(prepareString(preg_replace('/ +/',' ', strtr($entrep['NomCommercial'],$tabCarInvalides)))); + $item->Sigle = trim(prepareString(preg_replace('/ +/',' ', strtr($sigle,$tabCarInvalides)))); + $item->Enseigne = trim(prepareString(preg_replace('/ +/',' ', strtr($enseigne,$tabCarInvalides)))); + $item->Adresse = prepareString($entrep['Adresse']); + $item->Adresse2 = prepareString($entrep['Adresse2']); + $item->AdresseNum = prepareString($entrep['AdresseNum']); + $item->AdresseBtq = prepareString($entrep['AdresseBtq']); + $item->AdresseVoie = prepareString($entrep['AdresseVoie']); + $item->AdresseRue = prepareString($entrep['AdresseRue']); + $item->CP = $entrep['CP']; + $item->Ville = prepareString($entrep['Ville']); + $item->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $item->PaysIso2 = $codePaysIso2; + $item->Civilite = $entrep['Civilite']; + $item->NbEtab = $entrep['NbEtab']; + $item->Tel = prepareString($entrep['Tel']); + $item->Fax = prepareString($entrep['Fax']); + $item->Web = prepareString($entrep['Web']); + $item->Mail = prepareString($entrep['Mail']); + $item->FJ = $entrep['FJ']; + $item->FJ_lib = trim(prepareString(preg_replace('/ +/',' ', strtr($entrep['FJ_lib'],$tabCarInvalides)))); + $item->Siren = $entrep['Siren']; + $item->Nic = $entrep['Nic']; + $item->NafEnt = $entrep['NafEnt']; + $item->NafEntLib = trim(prepareString(preg_replace('/ +/',' ', strtr($entrep['NafEntLib'],$tabCarInvalides)))); + $item->Capital = $entrep['Capital']; + $item->CapitalDev = $entrep['CapitalDev']; + $item->CapitalLib = prepareString($entrep['CapitalLib']); // Ajouté le 18 02 2008 + $item->DateCreaEt = $entrep['DateCreaEt']; + $item->DateCreaEn = $entrep['DateCreaEn']; + $item->DateClotEn = $entrep['DateClotEn']; + $item->EffEnTr = prepareString($entrep['EffEnTr']); + $item->EffEnTrLib = prepareString($entrep['EffEnTrLib']); + $item->Effectif = prepareString($entrep['Effectif']); + $item->Dept = $entrep['Dept']; + $item->codeCommune = prepareString($entrep['codeCommune']); + $item->TrancheCA = prepareString($entrep['TrancheCA']); + $item->TrancheCALib = prepareString($entrep['TrancheCALib']); + $item->dir1Titre = prepareString($entrep['dir1Titre']);//utf8 + $item->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $item->dir1DateFct = prepareString($entrep['dir1DateFct']); + $item->SituationJuridique = strtoupper(substr($entrep['SituationJuridique'],0,1)); + + if (preg_match('/NAF4/i', $this->User->pref)) { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $item->Naf4Ent = $entrep2['apen4']; + $item->Naf4Etab = $entrep2['apet4']; + $item->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $item->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + $error = new ErrorElement(); + $error->errmsg = ''; + $error->errnum = 0; + $result->result = $item; + return $result; + } + +} diff --git a/library/WsScore/Clients/Mixdata/v0.1/Service.php b/library/WsScore/Clients/Mixdata/v0.1/Service.php new file mode 100644 index 00000000..f84af413 --- /dev/null +++ b/library/WsScore/Clients/Mixdata/v0.1/Service.php @@ -0,0 +1,304 @@ +serviceClient = true; + $this->serviceClientName = 'Mixdata'; + $this->serviceName = 'Entreprise'; + } + + /** + * Méthode spécifique + * @param string $siren + * @return Data + */ + public function getData($siren) + { + $this->authenticate(); + + $len = strlen($siren); + if ($len != 9) + { + $this->sendError('1010'); + } + + if (intval($siren)<100) + { + $this->sendError('1020'); + } + + //Get default DB + $db = Zend_Db_Table_Abstract::getDefaultAdapter(); + $db->setFetchMode(Zend_Db::FETCH_OBJ); + + //Identite + $modelIdentite = new Data(); + $identiteEtabRncsSql = $db->select() + ->from('rncs_etab', array( + 'LPAD(siren,9,0) AS siren', + 'LPAD(nic,5,0) AS nic', + 'siege', + 'enseigne', + 'nomCommercial', + 'naf', + ), 'jo') + ->where('siren=?', $siren) + ->where('actif=1') + ->where('siege=1'); + $identiteEtabRncsResult = $db->fetchRow($identiteEtabRncsSql); + + if ($identiteEtabRncsResult === null) + { + $this->sendError('1020'); + } + $nic = $identiteEtabRncsResult->nic; + + $identiteEntrepRncsSql = $db->select() + ->from('rncs_entrep', array( + 'raisonSociale', + 'sigle', + 'naf', + 'cj', + 'dateImma', + 'capitalMontant', + 'capitalDevIso', + ), 'jo') + ->where('siren=?', $siren); + $identiteEntrepRncsResult = $db->fetchRow($identiteEntrepRncsSql); + + $modelIdentite->Siret = $identiteEtabRncsResult->siren.$identiteEtabRncsResult->nic; + $modelIdentite->Ape = $identiteEntrepRncsResult->naf; + $modelIdentite->Siege = $identiteEtabRncsResult->siege; + $modelIdentite->RaisonSociale = $identiteEntrepRncsResult->raisonSociale; + $modelIdentite->NomCommercial = $identiteEtabRncsResult->nomCommercial; + $modelIdentite->Enseigne = $identiteEtabRncsResult->enseigne; + $modelIdentite->Sigle = $identiteEntrepRncsResult->sigle; + $modelIdentite->FormeJuridique = substr($identiteEntrepRncsResult->cj, 0, 2); + $modelIdentite->ImmatDate = $identiteEntrepRncsResult->dateImma; + $modelIdentite->Capital = $identiteEntrepRncsResult->capitalMontant; + $modelIdentite->CapitalDev = $identiteEntrepRncsResult->capitalDevIso; + + $mTel = new MTel(); + $telephones = $mTel->getTel($siren, $nic, true, 1); + if ($telephones > 0) + { + $modelIdentite->Telephone = $telephones[0]['telephone']; + } + + try { + $identiteEntrepInseeSql = $db->select()->from('identite', array('EFF_ENT'), 'insee') + ->where('SIREN=?', $siren) + ->where('NIC=?', $nic); + $identiteEntrepInseeResult = $db->fetchRow($identiteEntrepInseeSql); + if ($identiteEntrepInseeResult !== null) { + $modelIdentite->Eff = $identiteEntrepInseeResult->EFF_ENT; + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', __LINE__ . ' : ' . $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $inseeM = new MInsee(); + $tabProcol = $inseeM->getAnnoncesLegales($siren, 0, 'P', false); + if ( count($tabProcol)>0 ) { + $modelIdentite->JugementDate = $tabProcol[0]['dateJugement']; + $modelIdentite->JugementTypeEven = $tabProcol[0]['evenements'][0]['CodeEven']; + } + + try { + $bilanSql = $db->select()->from('bilans_postes', array( + 'dateExercice', + 'YP', + 'FL', + 'FK', + 'HN', + ), 'jo') + ->where('consolide=0') + ->where('siren=?', $siren) + ->order('dateExercice DESC') + ->limit(1); + $bilanResult = $db->fetchRow($bilanSql); + if ($bilanResult !== null) + { + $modelIdentite->BilanYP = $bilanResult->YP; + $modelIdentite->BilanType = 'R'; + $modelIdentite->BilanClotureDate = substr($bilanResult->dateExercice,0,4).'-'.substr($bilanResult->dateExercice,4,2).'-'.substr($bilanResult->dateExercice,6,2); + $modelIdentite->BilanFL = round($bilanResult->FL/1000); + $modelIdentite->BilanFK = round($bilanResult->FK/1000); + $modelIdentite->BilanHN = round($bilanResult->HN/1000); + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', __LINE__ . ' : ' . $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + try { + $bodaccSql = $db->select()->from('bodacc_activite', array('activite'), 'jo') + ->where('siren=?', $siren) + ->limit(1); + $bodaccResult = $db->fetchRow($bilanSql); + if ($bilanResult !== null) + { + $modelIdentite->ActiviteReel = $bodaccResult->activite; + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', __LINE__ . ' : ' . $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + //Etablissemements actifs + $modelEtablissements = array(); + try { + $etabSql = $db->select() + ->from('etablissements', array( + 'LPAD(siren,9,0) AS siren', + 'LPAD(nic,5,0) AS nic', + 'siege', + 'adr_num', + 'adr_typeVoie', + 'adr_libVoie', + 'adr_comp', + 'adr_cp', + 'adr_ville' + ), 'jo') + ->where('actif=1') + ->where('siren=?', $siren) + ->order('siege DESC'); + $etabResult = $db->fetchAll($etabSql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', __LINE__ . ' : ' . $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if (count($etabResult) > 0) + { + foreach ($etabResult as $item) + { + if ($item->siege == 1) + { + $modelIdentite->AdrNum = $item->adr_num; + $modelIdentite->AdrTypeVoie = $item->adr_typeVoie; + $modelIdentite->AdrLibVoie = $item->adr_libVoie; + $modelIdentite->AdrComp = $item->adr_comp; + $modelIdentite->AdrCp = $item->adr_cp; + $modelIdentite->AdrVille = $item->adr_ville; + } + + $etablissement = new Etablissement(); + $etablissement->Siret = $item->siren.$item->nic; + $etablissement->Siege = $item->siege; + + $itemEtabRncsResult = null; + try { + $itemEtabRncsSql = $db->select() + ->from('rncs_etab', array( + 'LPAD(siren,9,0) AS siren', + 'LPAD(nic,5,0) AS nic', + 'siege', + 'enseigne', + 'nomCommercial', + 'naf', + ), 'jo') + ->where('siren=?', $item->siren) + ->where('nic=?', $item->nic); + $itemEtabRncsResult = $db->fetchRow($itemEtabRncsSql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', __LINE__ . ' : ' . $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ($itemEtabRncsResult) + { + $etablissement->Siret = $itemEtabRncsResult->siren.$itemEtabRncsResult->nic; + $etablissement->Ape = $itemEtabRncsResult->naf; + $etablissement->Siege = $itemEtabRncsResult->siege; + $etablissement->NomCommercial = $itemEtabRncsResult->nomCommercial; + $etablissement->Enseigne = $itemEtabRncsResult->enseigne; + } + + $etablissement->AdrNum = $item->adr_num; + $etablissement->AdrTypeVoie = $item->adr_typeVoie; + $etablissement->AdrLibVoie = $item->adr_libVoie; + $etablissement->AdrComp = $item->adr_comp; + $etablissement->AdrCp = $item->adr_cp; + $etablissement->AdrVille = $item->adr_ville; + + $mTel = new MTel(); + $telephones = $mTel->getTel($item->siren, $item->nic, true, 1); + if ($telephones > 0) + { + $etablissement->Telephone = $telephones[0]['telephone']; + } + + $modelEtablissements[] = $etablissement; + } + } + + //Dirigeants actifs + try { + $dirigeantSql = $db->select()->from('rncs_dirigeants', + array( + 'dirRS', + 'nom', + 'prenom', + 'naissance_nom', + 'fonction_code', + 'fonction_lib' + ), 'jo') + ->where('siren=?', $siren)->where('actif%10=1'); + $dirigeantResult = $db->fetchAll($dirigeantSql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', __LINE__ . ' : ' . $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $modelDirigeants = array(); + if (count($dirigeantResult) > 0) + { + foreach ($dirigeantResult as $item) + { + $dirigeant = new Dirigeant(); + $dirigeant->RaisonSociale = $item->dirRS; + $dirigeant->Nom = $item->nom; + $dirigeant->Prenom = $item->prenom; + $dirigeant->NomNaissance = $item->naissance_nom; + $dirigeant->FonctionCode = $item->fonction_code; + $dirigeant->FonctionLib = $item->fonction_lib; + $modelDirigeants[] = $dirigeant; + } + } + + //Return + $modelIdentite->Etablissements = $modelEtablissements; + $modelIdentite->Dirigeants = $modelDirigeants; + + $this->wsLog('identite', $siren); + + return $modelIdentite; + } + +} \ No newline at end of file diff --git a/library/WsScore/Clients/Rrg/v0.1/Service.php b/library/WsScore/Clients/Rrg/v0.1/Service.php new file mode 100644 index 00000000..10ca2c33 --- /dev/null +++ b/library/WsScore/Clients/Rrg/v0.1/Service.php @@ -0,0 +1,173 @@ +serviceClient = true; + $this->serviceClientName = 'Rrg'; + $this->serviceName = 'Entreprise'; + } + + /** + * Méthode spécifique + * @param string $siren + * @return Infos + */ + public function getData($siren) + { + $this->authenticate(); + + // --- Vérification du siren + if ( strlen($siren) != 9 ) { + $this->sendError('1010'); + } + + $classInsee = new MInsee(); + + // --- Vérifier SIREN valide + if( !$classInsee->valideSiren($siren) ) { + $this->sendError('1010'); + } + + // --- Vérifier SIREN existe + if ( !$classInsee->sirenExiste($siren) ) { + $this->sendError('1020'); + } + + // --- Evaluation + $evaluation = calculIndiScore($siren, 0, false, 1); + + $db = Zend_Db_Table::getDefaultAdapter(); + $sql = $db->select() + ->from('etablissements', array('LPAD(source_id,10,0) AS source_id'), 'jo') + ->where('siren=?', $evaluation['Siren'])->where('nic=?', $evaluation['Nic']); + $etablissement = $db->fetchRow($sql, null, Zend_Db::FETCH_OBJ); + + $Infos = new Infos(); + $Infos->SourceId = $etablissement->source_id; + $Infos->Siren = $evaluation['Siren']; + $Infos->Nic = $evaluation['Nic']; + $Infos->Nom = $evaluation['Nom']; + $Infos->Sigle = $evaluation['Sigle']; + $Infos->Enseigne = $evaluation['Enseigne']; + $Infos->FJ = $evaluation['FJ']; + + if ( $evaluation['DateCreaEt'] > 0 && $evaluation['DateCreaEt'] < $evaluation['DateCreaEn'] ) { + $DateCreaEn = $evaluation['DateCreaEt']; + } elseif ( $evaluation['DateCreaEn'] > 0 ) { + $DateCreaEn = $evaluation['DateCreaEn']; + } + if ( !empty($DateCreaEn) ) { + if (substr($DateCreaEn, -2) * 1 == 0) { + $Infos->DateCreaEn = substr($DateCreaEn,0,6).'01'; + } else { + $Infos->DateCreaEn = $DateCreaEn; + } + } + + $Infos->AdresseNum = str_pad($evaluation['AdresseNum'], 5, 0, STR_PAD_LEFT); + $Infos->AdresseBtq = $evaluation['AdresseBtq']; + $Infos->AdresseVoie = $evaluation['AdresseVoie']; + if ($evaluation['AdresseRue'] != '') { + $Infos->AdresseVoie.= ' '.$evaluation['AdresseRue']; + } + $Infos->CP = $evaluation['CP']; + $Infos->AdresseVille = $evaluation['Ville']; + + try { + $sql = $db->select()->from('identite', array( + 'insL1_NOMEN', + 'insL2_COMP', + 'insL3_CADR', + 'insL4_VOIE', + 'insL5_DISP', + 'insL6_POST', + ), 'insee')->where('SIREN=?', $Infos->Siren)->where('NIC=?', $Infos->Nic); + $inseeLResult = $db->fetchRow($sql, null, Zend_Db::FETCH_OBJ); + } catch (Zend_Db_Exception $e) { + + } + + if ($inseeLResult !== null) { + $rnvp = new MRnvp(); + $rnvpResult = $rnvp->normaliseAdresse( + $inseeLResult->insL1_NOMEN, + $inseeLResult->insL2_COMP, + $inseeLResult->insL3_CADR, + $inseeLResult->insL4_VOIE, + $inseeLResult->insL5_DISP, + $inseeLResult->insL6_POST + ); + } + + if (is_array($rnvpResult) && array_key_exists('HexaViaMat', $rnvpResult)) { + $Infos->AdresseComplement = $rnvpResult['L3']; + $Infos->AdresseDistributionSpecial = $rnvpResult['L5']; + $Infos->AdresseComplementPostal = $rnvpResult['L6']; + $Infos->AdresseHexaviaMatricule = $rnvpResult['HexaViaMat']; + } + + $Infos->PaiementCS = $evaluation['cs']; + + $PaiementInfo = ''; + if ( in_array($PaiementCS, array('0', 'I', 'P', 'D')) ) { + $iFacto = new MFacto(); + $info = $iFacto->getLibInfoCS($PaiementCS); + $PaiementInfo = $info['LibCS']; + } + $Infos->PaiementInfo = $PaiementInfo; + + if ($evaluation['NbBilansScore'] > 0) + { + $bilan = $evaluation['tabBilan'][0]; + $Infos->BilanCA = $bilan['FL']; + $Infos->BilanDateCloture = $bilan['DATE_CLOTURE']; + $Infos->BilanDuree = $bilan['DUREE_MOIS']; + $Infos->BilanUnite = $bilan['MONNAIE_LIV_UNITE']; + $Infos->BilanDevise = $bilan['MONNAIE']; + } + + $Infos->Indiscore = $evaluation['Indiscore20']; + $Infos->Encours = round($evaluation['encours']/1000) * 1000; + + // --- Ajouter en surveillance + $survM = new Application_Model_JoSurveillancesSite(); + try { + $sql = $survM->select()->where('login=?', $this->User->login)->where('siren=', $Infos->Siren); + $survExist = $survM->fetchRow($sql); + } catch (Zend_Db_Exception $e) {} + + if ( empty($survExist) ) { + $data = array( + 'source' => 'score', + 'login' => $this->User->login, + 'email' => '', + 'siren' => $Infos->Siren, + 'nic' => $Infos->Nic, + 'ref' => $Infos->SourceId, + 'encoursClient' => 0, + 'rs' => $Infos->Nom, + 'cp' => $Infos->CP, + 'ville' => $Infos->AdresseVille, + 'dateAjout' => date('Y-m-d'), + 'dateSuppr' => 0, + ); + try { + $survM->insert($data); + } catch (Zend_Db_Exception $e) {} + } + // --- Fin ajout surveillance + + $this->wsLog('identite', $siren); + + return $Infos; + } +} \ No newline at end of file diff --git a/library/WsScore/Clients/Sfr/v0.1/Service.php b/library/WsScore/Clients/Sfr/v0.1/Service.php new file mode 100644 index 00000000..cb0fa7a5 --- /dev/null +++ b/library/WsScore/Clients/Sfr/v0.1/Service.php @@ -0,0 +1,71 @@ +serviceClient = true; + $this->serviceClientName = 'Sfr'; + $this->serviceName = 'Entreprise'; + } + + /** + * Evaluation + * @param string $siren + * Identifiant de l'entreprise (9 chiffres) + * @return Evaluation + */ + public function getEvaluate($siren) + { + $this->authenticate(); + + if ( strlen($siren) != 9 ) { + $this->sendError('1010'); + } + + require_once 'Metier/insee/classMInsee.php'; + $classInsee = new MInsee(); + + //Vérifier SIREN valide + if( !$classInsee->valideSiren($siren) ) { + $this->sendError('1010'); + } + + //Vérifier SIREN existe + if ( !$classInsee->sirenExiste($siren) ) { + $this->sendError('1020'); + } + + $sfrM = new SdMetier_Sfr_Scoring(); + $sfrM->forceIdentite = true; + $sfrM->evaluate($siren); + + //Calculate + $eval = new Evaluation(); + $eval->indicateur = $sfrM->getIndicateur($value); + $eval->po = $sfrM->getPo(); + $eval->comment = $sfrM->getComment(); + $eval->dateScore = $sfrM->getDateCalculIndiscore(); + + $this->wsLog('indiscore', $siren); + + return $eval; + } + + +} \ No newline at end of file diff --git a/library/WsScore/Clients/Veolia/v0.1/Service.php b/library/WsScore/Clients/Veolia/v0.1/Service.php new file mode 100644 index 00000000..4d5893d6 --- /dev/null +++ b/library/WsScore/Clients/Veolia/v0.1/Service.php @@ -0,0 +1,707 @@ +serviceClient = true; + $this->serviceClientName = 'Veolia'; + $this->serviceName = 'Entreprise'; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param int $id Identifiant interne + * @return Identite + */ + public function getIdentite($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) { + $id = 0; + } + $forceVerif = false; + + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif, false); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep) || empty($entrep['id']) ) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + // Adresse Normalisé + $adresse = $iInsee->getAdresse($siren, $nic); + $adresseNorme = new AdresseNorme(); + $adresseNorme->L1 = $adresse['L1_NOM']; + $adresseNorme->L2 = $adresse['L2_NOM2']; + $adresseNorme->L3 = $adresse['L3_ADRCOMP']; + $adresseNorme->L4 = $adresse['L4_VOIE']; + $adresseNorme->L5 = $adresse['L5_DISTSP']; + $adresseNorme->L6 = $adresse['L6_POST']; + $adresseNorme->L7 = $adresse['L7_PAYS']; + + //Formattage du retour + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->ActifEco = $entrep['ActifEco']; // Etab éco actif, ajout le 28/04/2011 + $identite->ActifEcoDate = $entrep['ActifEcoDate']; // Date si éco inactif et jur actif + $identite->ActifEcoType = $entrep['ActifEcoType']; // vide ou NPAI ou PFER ou ECOF + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseNorme = $adresseNorme; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = prepareString($entrep['Tel']); + $identite->Fax = prepareString($entrep['Fax']); + $identite->Web = prepareString($entrep['Web']); + $identite->Mail = prepareString($entrep['Mail']); + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = prepareString($entrep['CapitalType']); // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = prepareString($entrep['codeCommune']); + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->TrancheCAType = $entrep['TrancheCAType']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = prepareString($entrep['dir1Titre']); + $identite->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $identite->dir1DateFct = prepareString($entrep['dir1DateFct']); //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = prepareString($entrep['dir1LieuNaiss']); // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = prepareString($entrep['dir2Titre']); + $identite->dir2NomPrenom = prepareString($entrep['dir2NomPrenom']); + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = prepareString($entrep['dir2DateNaiss']); //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = prepareString($entrep['dir2LieuNaiss']); // Ajouté le 4 08 2009 + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Millesime = $entrep['bilanAnnee']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->CAestime = $entrep['bilanFLestime']; + $identite->Bilan->Resultat = prepareString($entrep['bilanHN']); + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + return $identite; + } + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + empty($entCriteres->actif) ? false : $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + +/** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche au sièges (si true) + * @param boolean $actif Limitation aux établissements actifs (si true) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=false, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + + if ( $actif ) { + $actif = 1; + } else { + $actif = 2; + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + } + + $fp=@fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param integer $dep Département + * @return SearchReturn + */ + public function searchSiren($siret, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep); + if (count($rep['reponses'])==0 && $dep>0) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = utf8_encode(prepareString(utf8_decode($etab['FJLib']))); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + +} \ No newline at end of file diff --git a/library/WsScore/Clients/Veolia/v0.2/Service.php b/library/WsScore/Clients/Veolia/v0.2/Service.php new file mode 100644 index 00000000..79ac2f6b --- /dev/null +++ b/library/WsScore/Clients/Veolia/v0.2/Service.php @@ -0,0 +1,790 @@ +serviceClient = true; + $this->serviceClientName = 'Veolia'; + $this->serviceName = 'Entreprise'; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param int $id Identifiant interne + * @return Identite + */ + public function getIdentite($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) { + $id = 0; + } + $forceVerif = false; + + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif, false); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep) || empty($entrep['id']) ) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + // Adresse Normalisé + $adresse = $iInsee->getAdresse($siren, $nic); + $adresseNorme = new AdresseNorme(); + $adresseNorme->L1 = $adresse['L1_NOM']; + $adresseNorme->L2 = $adresse['L2_NOM2']; + $adresseNorme->L3 = $adresse['L3_ADRCOMP']; + $adresseNorme->L4 = $adresse['L4_VOIE']; + $adresseNorme->L5 = $adresse['L5_DISTSP']; + $adresseNorme->L6 = $adresse['L6_POST']; + $adresseNorme->L7 = $adresse['L7_PAYS']; + + //Formattage du retour + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->ActifEco = $entrep['ActifEco']; // Etab éco actif, ajout le 28/04/2011 + $identite->ActifEcoDate = $entrep['ActifEcoDate']; // Date si éco inactif et jur actif + $identite->ActifEcoType = $entrep['ActifEcoType']; // vide ou NPAI ou PFER ou ECOF + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseNorme = $adresseNorme; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = prepareString($entrep['Tel']); + $identite->Fax = prepareString($entrep['Fax']); + $identite->Web = prepareString($entrep['Web']); + $identite->Mail = prepareString($entrep['Mail']); + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = prepareString($entrep['CapitalType']); // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = prepareString($entrep['codeCommune']); + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->TrancheCAType = $entrep['TrancheCAType']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = prepareString($entrep['dir1Titre']); + $identite->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $identite->dir1DateFct = prepareString($entrep['dir1DateFct']); //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = prepareString($entrep['dir1LieuNaiss']); // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = prepareString($entrep['dir2Titre']); + $identite->dir2NomPrenom = prepareString($entrep['dir2NomPrenom']); + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = prepareString($entrep['dir2DateNaiss']); //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = prepareString($entrep['dir2LieuNaiss']); // Ajouté le 4 08 2009 + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Millesime = $entrep['bilanAnnee']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->CAestime = $entrep['bilanFLestime']; + $identite->Bilan->Resultat = prepareString($entrep['bilanHN']); + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + return $identite; + } + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + empty($entCriteres->actif) ? false : $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + +/** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche au sièges (si true) + * @param boolean $actif Limitation aux établissements actifs (si true) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=false, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + + if ( $actif ) { + $actif = 1; + } else { + $actif = 2; + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + } + + $fp=@fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param integer $dep Département + * @return SearchReturn + */ + public function searchSiren($siret, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep); + if (count($rep['reponses'])==0 && $dep>0) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = utf8_encode(prepareString(utf8_decode($etab['FJLib']))); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, -1=Tous + * @param integer $position + * @param integer $nbRep + * @return ListeEtablissementsReturn + */ + public function getListeEtablissements($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (empty($actif)) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + $departement = $dep; + + debugLog('I',"Liste des établissements demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + $result = array(); + if (count($etabs)>0) + { + foreach ($etabs as $nb => $etab) + { + $etablissement = new Etablissement(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + // Adresse Normalisé + $adresse = $iInsee->getAdresse($siren, $etab['Nic']); + $adresseNorme = new AdresseNorme(); + $adresseNorme->L1 = $adresse['L1_NOM']; + $adresseNorme->L2 = $adresse['L2_NOM2']; + $adresseNorme->L3 = $adresse['L3_ADRCOMP']; + $adresseNorme->L4 = $adresse['L4_VOIE']; + $adresseNorme->L5 = $adresse['L5_DISTSP']; + $adresseNorme->L6 = $adresse['L6_POST']; + $adresseNorme->L7 = $adresse['L7_PAYS']; + + $etablissement->AdresseNorme = $adresseNorme; + + $result[] = $etablissement; + } + } + debugLog('I', "Nb Etablissements retournés ($departement, $actif) = ". count($result), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('etablissements',$siren); + $output = new ListeEtablissementsReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } + + +} \ No newline at end of file diff --git a/library/WsScore/Clients/Vwbank/v0.1/Service.php b/library/WsScore/Clients/Vwbank/v0.1/Service.php new file mode 100644 index 00000000..470ccfa3 --- /dev/null +++ b/library/WsScore/Clients/Vwbank/v0.1/Service.php @@ -0,0 +1,620 @@ +serviceClient = true; + $this->serviceClientName = 'Vwbank'; + $this->serviceName = 'Entreprise'; + } + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param int $id Identifiant interne + * @return Identite + */ + public function getIdentite($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) { + $id = 0; + } + $forceVerif = false; + + $tdeb = microtime(1); + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep) || empty($entrep['id']) ) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('identite',$siret,$id); + return $identite; + } + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + empty($entCriteres->actif) ? false : $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + +/** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche au sièges (si true) + * @param boolean $actif Limitation aux établissements actifs (si true) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=false, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + + if ( $actif ) { + $actif = 1; + } else { + $actif = 2; + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + } + + $fp=@fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param integer $dep Département + * @return SearchReturn + */ + public function searchSiren($siret, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep); + if (count($rep['reponses'])==0 && $dep>0) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = utf8_encode(prepareString(utf8_decode($etab['FJLib']))); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + protected function searchAutreId($typeId, $identifiant, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + +} \ No newline at end of file diff --git a/library/WsScore/Clients/Vwbank/v0.2/Service.php b/library/WsScore/Clients/Vwbank/v0.2/Service.php new file mode 100644 index 00000000..10e81014 --- /dev/null +++ b/library/WsScore/Clients/Vwbank/v0.2/Service.php @@ -0,0 +1,806 @@ +serviceClient = true; + $this->serviceClientName = 'Vwbank'; + $this->serviceName = 'Entreprise'; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param int $id Identifiant interne + * @return Identite + */ + public function getIdentite($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) { + $id = 0; + } + $forceVerif = false; + + $tdeb = microtime(1); + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif, false); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep) || empty($entrep['id']) ) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; + $identite->CapitalType = prepareString($entrep['CapitalType']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + + //Présence de privilèges + $identite->Privileges = false; + $nbPrivileges = 0; + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesDetail($siren); + $nbPrivileges = count($ret); + if ($nbPrivileges>0) { + $identite->Privileges = true; + } else { + $iDb = new WDB('sdv1'); + $sql = "SELECT count(*) AS nbPriv FROM ge_cs2 WHERE cs = 'P' AND dateFin >= NOW() AND dateSuppr=0 AND siren=$siren;"; + $ret = $iDb->query($sql); + if ($ret[0]['nbPriv']>0) { + $identite->Privileges = true; + } + } + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('identite',$siret,$id); + return $identite; + } + + /** + * Retourne l'ensemble des informations identitaires des dirigeants de l'entreprise + * + * @param string $siren Siren de l'entreprise + * @param bool $histo Afficher l'historique des dirigeants + * @return DirigeantsReturn Liste des dirigeants actifs de l'entreprise + */ + public function getDirigeants( $siren , $histo = false) + { + $this->authenticate(); + $this->permission('dirigeants'); + + //Initialisation + if (empty($histo)) { $histo = false; } + + //Zend_Registry::get('WsLogger')->info('HISTO : '.$histo); + + debugLog('I',"Dirigeants demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeants($siren, $histo); + //debugLog('W', print_r($dirs, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $dirigeant = new Dirigeant(); + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Titre = $dir['Titre']; + $dirigeant->Societe = $dir['Societe']; + $dirigeant->Siren = (array_key_exists('Siren', $dir) && intval($dir['Siren'])!=0) ? $dir['Siren'] : '' ; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + $dirigeant->NomUsage = $dir['NomUsage']; + $dirigeant->NaissDate = $dir['NaissDate']; //@todo : date + $dirigeant->NaissVille = $dir['NaissVille']; + $dirigeant->NaissDepPays = $dir['NaissDepPays']; + $dirigeant->Ancien = $dir['Ancien']; + $dirigeant->DateFct = $dir['DateFct']; //@todo : date + $liste[] = $dirigeant; + } + $this->wsLog('dirigeants',$siren,$option); + debugLog('I', 'Nb Dirigeants retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $output = new DirigeantsReturn(); + $output->result = $liste; + return $output; + } + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + $entCriteres->codePostal, + ($entCriteres->actif==false) ? 2 : 1, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + $entCriteres->codePostal, + ($entCriteres->actif==false) ? 2 : 1, + $entCriteres->siege, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + ($entCriteres->actif==false) ? 2 : 1, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + ($entCriteres->actif==false) ? 2 : 1, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $dep Département + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $dep=0, $actif=2, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + if (!in_array($actif, array(0,1,2))) $actif = 2; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiant avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep, $actif); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $dep, $actif, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + protected function searchTelFax($telFax, $actif=2, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (!in_array($actif, array(0,1,2))) $actif = 2; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep, 0, $actif); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche aux sièges (si true) + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=2, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + if (!in_array($actif, array(0,1,2))) $actif = 2; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + } + + $fp=fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + fwrite($fp, $str.EOL); + fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + fwrite($fp, $str.EOL); + fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $dep Département + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $siege 1 : Filtre au siege, 0 : Filtre aux établissements + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchSiren($siret, $dep=0, $actif=2, $siege=null, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + if (!in_array($actif, array(0,1,2))) $actif = 2; + if ( $actif==2 ) $actif = -1; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep, $actif, $siege); + if ( count($rep['reponses'])==0 && $dep>0 ) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, 0, $actif, $siege); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + if (count($tabRet)==0) + { + if ($siege===null || $actif==2) + { + /** Si le siren est valide, on part chez Infogreffe **/ + if ($iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', array( + 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + $rep['info'] = 'Siren inexistant'; + } + } + } else { + if ($iInsee->sirenExiste($siren) ) { + $info = 'Aucun '; + if ( $siege == 1 ) $info.= 'siege'; + else $info.= 'etablissement'; + + if ( $actif == 0 ) $info.= ' inactif'; + elseif ( $actif == 1) $info.= ' actif'; + + $rep['info'] = $info; + + } else { + $rep['info'] = 'Siren inexistant'; + } + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + /** + * Retourne les liens financiers pour une entreprise. + * @param string $siren Siren de l'entreprise + * @return Actionnaire[] + */ + public function getLiens($siren) + { + $this->authenticate(); + + //Initialisation + $actifsUniquement = true; + + $tabAct = $tabPar = array(); + + debugLog('I',"Liens entreprises demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + //Actionnaires + require_once 'Metier/partenaires/classMLiens2.php'; + $mLiens = new MLiens2($siren, 'siren'); + $tabA = $mLiens->getActionnaires(null, $actifsUniquement); + $nbA = count($tabA); + $tabAct = array(); + if ($nbA > 0) { + foreach ($tabA as $i => $lien) { + $sirenLien = str_pad($lien->siren, 9, "0", STR_PAD_LEFT); + + $actionnaire = new Actionnaire(); + $actionnaire->Pmin = $lien->PDetention; + $actionnaire->MajMin = $lien->MajMin; + $actionnaire->RaisonSociale = $lien->RS; + if ($lien->PpPm=='PP') { + $actionnaire->RaisonSociale = $lien->civilite.' '.$lien->nom.' '.$lien->prenom; + } + + $actionnaire->TypeEntrep = $lien->PpPm; + $actionnaire->Pays = $lien->adresse_pays; + $actionnaire->Siren = $sirenLien; + $actionnaire->Actif = 1; + $actionnaire->DateLien = $lien->dateEffetLien; + + if ($item->dateUpdate=='0000-00-00 00:00:00'){ + $actionnaire->DateMaj = substr($lien->dateInsert,0,10); + } else { + $actionnaire->DateMaj = substr($lien->dateUpdate,0,10); + } + + $actionnaire->Identite = new ActionnaireIdentite(); + if ( intval($sirenLien)>1000 ) { + $iInsee = new MInsee(); + $identite = $iInsee->getIdentiteLight($sirenLien); + $actionnaire->Identite->Adresse = $identite['Adresse']; + $actionnaire->Identite->Adresse2 = $identite['Adresse2']; + $actionnaire->Identite->AdresseNum = $identite['AdresseNum']; + $actionnaire->Identite->AdresseBtq = $identite['AdresseBtq']; + $actionnaire->Identite->AdresseVoie = $identite['AdresseVoie']; + $actionnaire->Identite->CP = $identite['CP']; + $actionnaire->Identite->Ville = $identite['Ville']; + $actionnaire->Identite->DateCreaEn = $identite['DateCreaEn']; + $actionnaire->Identite->DateImmat = $identite['DateImmat']; + $actionnaire->Identite->FJ = $identite['FJ']; + $actionnaire->Identite->FJ_Lib = $identite['FJ_Lib']; + } + $tabAct[] = $actionnaire; + } + } + + $this->wsLog('liens',$siren); + return $tabAct; + } +} \ No newline at end of file diff --git a/library/WsScore/Entreprise/v0.2/Service.php b/library/WsScore/Entreprise/v0.2/Service.php new file mode 100644 index 00000000..8dc3c61c --- /dev/null +++ b/library/WsScore/Entreprise/v0.2/Service.php @@ -0,0 +1,2881 @@ +webservice->scores; + $wsdl = !empty($webservicesConfig->wsdl) ? $webservicesConfig->wsdl : null ; + $options = array(); + foreach ($webservicesConfig->options as $optionName => $optionValue){ + $options[$optionName] = $optionValue; + } + $options['login'] = $_SERVER['PHP_AUTH_USER']; + $options['password'] = $_SERVER['PHP_AUTH_PW']; + $this->wsdl = $wsdl; + $this->wsdlOptions = $options; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param int $id Identifiant interne + * @return Identite + */ + public function getIdentite($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) { $id = 0; } + $forceVerif = false; + + $tdeb = microtime(1); + $ligne = date('YmdHis').";$siret;Ws->getIdentite Avant ..."; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->TribunalCode = $entrep['Tribunal']; + $identite->TribunalLib = $entrep['TribunalLib']; + //'NumGreffe' = $entrep['numGreffe'], // Ajouté le 4 08 2009 + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = strtr($entrep['Nom'],'/*',' '); + $identite->Nom2 = $entrep['Nom2']; + $identite->NomLong = $entrep['nomLong']; // Ajouté le 4 08 2009 + $identite->NomCommercial = $entrep['NomCommercial']; // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = $entrep['Sigle']; + $identite->SigleLong = $entrep['sigleLong']; // Ajouté le 4 08 2009 + $identite->Enseigne = $entrep['Enseigne']; + $identite->EnseigneLong = $entrep['enseigneLong']; // Ajouté le 16 11 2010 + $identite->Adresse = $entrep['Adresse']; + $identite->Adresse2 = $entrep['Adresse2']; + $identite->AdresseNum = $entrep['AdresseNum']; + $identite->AdresseBtq = $entrep['AdresseBtq']; + $identite->AdresseVoie = $entrep['AdresseVoie']; + $identite->AdresseRue = $entrep['AdresseRue']; + $identite->CP = $entrep['CP']; + $identite->Ville = $entrep['Ville']; + $identite->Pays = $entrep['Pays']; // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = $entrep['Tel']; + $identite->Fax = $entrep['Fax']; + $identite->Web = $entrep['Web']; + $identite->Mail = $entrep['Mail']; + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->GeoInfos = $entrep['GeoInfos']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = $entrep['APRM_Lib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = $entrep['CapitalType']; // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + //'DateMajRCS' = $entrep['DateMajRCS'], // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = $entrep['codeCommune']; + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = $entrep['dir1Titre']; + $identite->dir1NomPrenom = $entrep['dir1NomPrenom']; + $identite->dir1DateFct = $entrep['dir1DateFct']; //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = $entrep['dir1LieuNaiss']; // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = $entrep['dir2Titre']; + $identite->dir2NomPrenom = $entrep['dir2NomPrenom']; + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = $entrep['dir2DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = $entrep['dir2LieuNaiss']; // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = $entrep['InfosIris']['libIris']; + $identite->InfosIris->typIris = $entrep['InfosIris']['typIris']; + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = $entrep['bilanHN']; + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + //'importExport' = $entrep['importExport'], + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = $entrep2['apen4_lib']; + $identite->Naf4EtabLib = $entrep2['apet4_lib']; + } + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + $duree=round(microtime(1)-$tdeb,3); + $ligne=date('YmdHis').";$siret;Ws->getIdentite APRES ($duree s) !!!"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + return $identite; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param integer $id Identifiant S&D de l'établissement + * @return IdentiteProcol Fiche d'identité de l'établissement + */ + public function getIdentiteProcol($siret, $id=0, $forceVerif=false) + { + debugLog('I',"Identité AGS demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if (intval($siren)==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identiteProcol = new IdentiteProcol(); + + //Element identite + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->TribunalCode = $entrep['Tribunal']; + $identite->TribunalLib = $entrep['TribunalLib']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = strtr($entrep['Nom'],'/*',' '); + $identite->Nom2 = $entrep['Nom2']; + $identite->NomLong = $entrep['nomLong']; // Ajouté le 4 08 2009 + $identite->NomCommercial = $entrep['NomCommercial']; // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = $entrep['Sigle']; + $identite->SigleLong = $entrep['sigleLong']; // Ajouté le 4 08 2009 + $identite->Enseigne = $entrep['Enseigne']; + $identite->EnseigneLong = $entrep['enseigneLong']; // Ajouté le 16 11 2010 + $identite->Adresse = $entrep['Adresse']; + $identite->Adresse2 = $entrep['Adresse2']; + $identite->AdresseNum = $entrep['AdresseNum']; + $identite->AdresseBtq = $entrep['AdresseBtq']; + $identite->AdresseVoie = $entrep['AdresseVoie']; + $identite->AdresseRue = $entrep['AdresseRue']; + $identite->CP = $entrep['CP']; + $identite->Ville = $entrep['Ville']; + $identite->Pays = $entrep['Pays']; // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = $entrep['Tel']; + $identite->Fax = $entrep['Fax']; + $identite->Web = $entrep['Web']; + $identite->Mail = $entrep['Mail']; + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->GeoInfos = $entrep['GeoInfos']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = $entrep['APRM_Lib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = $entrep['CapitalType']; // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = $entrep['codeCommune']; + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = $entrep['dir1Titre']; + $identite->dir1NomPrenom = $entrep['dir1NomPrenom']; + $identite->dir1DateFct = $entrep['dir1DateFct']; //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = $entrep['dir1LieuNaiss']; // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = $entrep['dir2Titre']; + $identite->dir2NomPrenom = $entrep['dir2NomPrenom']; + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = $entrep['dir2DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = $entrep['dir2LieuNaiss']; // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = $entrep['InfosIris']['libIris']; + $identite->InfosIris->typIris = $entrep['InfosIris']['typIris']; + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = $entrep['bilanHN']; + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = $entrep2['apen4_lib']; + $identite->Naf4EtabLib = $entrep2['apet4_lib']; + } + + $identiteProcol->Identite = $identite; + + //Eléments annonces légales + $anns = $this->getAnnonces($siren, 1); + $tabRetAnn = $tabLastEven = array(); + $anns = $anns->result; + $tribunalProcol = false; + foreach ($anns as $nb=>$ann) { + $tabRetEven = array(); + foreach ($ann->evenements as $tabEven) { + // On ignore les éléments suivants + if ($tabEven->CodeEven>=7000) continue; + if ($tabEven->CodeEven>=4000 && $tabEven->CodeEven<=4999) continue; + + // Par défaut, on force le tribunal à celui présent dans la dernière annonce de Procol + if ($tribunalProcol==false && $tabEven->CodeEven>=1000 && $tabEven->CodeEven<2000 && $ann->BodaccCode=='BODA') { + $identiteProcol->TribunalCode = $ann->TribunalCode; + $identiteProcol->TribunalLib = prepareString($ann->Tribunal); + $tribunalProcol=true; + } + + // On ne prend que le dernier élément de chaque type + if (in_array($tabEven->CodeEven, $tabLastEven)) continue; + + $tabLastEven[] = $tabEven->CodeEven; + $tabRetEven[] = $tabEven; + } + + if (count($tabRetEven)>0) { + $annonce = new Annonce(); + $annonce->id = $ann->id; + $annonce->BodaccCode = $ann->BodaccCode; + $annonce->BodaccNum = $ann->BodaccNum; + $annonce->NumAnnonce = $ann->NumAnnonce; + $annonce->DateParution = $ann->DateParution; //@todo : date + $annonce->Departement = $ann->Departement; + $annonce->Tribunal = $ann->Tribunal; + $annonce->TribunalCode = $ann->TribunalCode; + $annonce->TribunalSiret = $ann->TribunalSiret; + $annonce->Rubrique = $ann->Rubrique; + $annonce->typeAnnonce = $ann->typeAnnonce; + $annonce->texteRectificatif = $ann->texteRectificatif; + $annonce->texteAnnonce = utf8_encode($ann->texteAnnonce); + $annonce->dateEffet = $ann->dateEffet; //@todo : date + $annonce->dateJugement = $ann->dateJugement; //@todo : date + $annonce->dateInsertionSD = $ann->dateInsertionSD; //@todo : date + $annonce->evenements = $tabRetEven; + $annonce->Lien_Annonce_Pdf = $ann->Lien_Annonce_Pdf; + $tabRetAnn[] = $annonce; + } + } + $identiteProcol->Annonces = $tabRetAnn; + + $iRncs = new MRncs(); + if ($entrep['Siege']==1 || $entrep['Siege']==11) { + $identiteProcol->LibTypeEtab = 'Etablissement Siege'; + } else { + $tabEtabRncs = $iRncs->getIdentiteEtab($siren, $entrep['Nic']); + if ($tabEtabRncs['Siege']==2) $identiteProcol->LibTypeEtab = 'Etablissement Principal'; + elseif ($tabEtabRncs['Siege']==1) $identiteProcol->LibTypeEtab = 'Etablissement Complementaire'; + elseif ($tabEtabRncs['Siege']==0) $identiteProcol->LibTypeEtab = 'Etablissement Secondaire'; + } + + //@todo + $tabJuge = $iRncs->getIntervenants($siren); + $tabDepots=array(); + foreach ($tabJuge as $iDepot=>$depot) { + $organe = new Organe(); + $organe->codEven = $depot['codEven']; + $organe->libEven = prepareString($depot['libEven']); + $organe->dateEffet = $depot['dateEffet']; + $organe->admcode = $depot['admcode']; + $organe->admfonction = prepareString($depot['admfonction']); + $organe->admnom = prepareString($depot['admnom']); + $organe->admadrNum = $depot['admadrNum']; + $organe->admadrInd = $depot['admadrInd']; + $organe->admadrVoie = $depot['admadrVoie']; // @todo : adm1adr1, adm1adr2, adm1adr3, + $organe->admadrCP = $depot['admadrCP']; + $organe->admadrVille = $depot['admadrVille']; + $tabDepots[] = $organe; + } + $identiteProcol->Organes = $tabDepots; + + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, 1); + $nbA = count($tabA); + $tabAct = array(); + foreach ($tabA as $i=>$lien) { + $liens = new Actionnaire(); + $liens->Pmin = $lien['Pmin']; + $liens->MajMin = $lien['MajMin']; + $liens->RaisonSociale = $lien['RaisonSociale']; + $liens->Pays = $lien['Pays']; + $liens->Siren = $lien['Siren']; + $liens->Actif = $lien['Actif']; + $tabAct[] = $liens; + } + $identiteProcol->Actionnaires = $tabAct; + + $iGreffes = new MGreffes(); + $tabActes = $iGreffes->getListeActes($siren); + + $identiteProcol->StatutsModifDepot = $identiteProcol->StatutsModif = '0000-00-00'; + foreach ($tabActes as $i=>$acte) { + if ('_'.$acte['acte_type']=='_04') { // STATUTS CONSTITUTIFS + $identiteProcol->StatutsConstDepot = $acte['depot_date']; // => 1997-12-18 + $identiteProcol->StatutsConst = $acte['acte_date']; // => 1997-11-13 + break; + } elseif (in_array('_'.$acte['acte_type'], array( + //'_04', // STATUTS CONSTITUTIFS + '_06', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_07', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_08', // STATUTS A JOUR ET DECLARATION DE CONFORMITE 9 0000-00-00 2009-09-02 17:05:55 + '_09', // STATUTS APRES TRANSFERT DE SIEGE 9 0000-00-00 2009-09-02 17:05:55 + '_A1', // STATUTS 9 0000-00-00 2009-09-02 17:05:55 + '_AH', // AVENANT AUX STATUTS + ))) { + // On ne prend que la dernière modif + if ($identiteProcol->StatutsModifDepot=='0000-00-00' && $identiteProcol->StatutsModif=='0000-00-00') { + $identiteProcol->StatutsModifDepot = $acte['depot_date'];// => 1997-12-18 + $identiteProcol->StatutsModif = $acte['acte_date']; // => 1997-11-13 + } + } + } + + /** Y a t il eu des informations relatives à une cession ? **/ + $tabCes = $iGreffes->getInfosCessions($siren); + if ($tabCes) { + $identiteProcol->CessionJugeLib = $tabCes['cessJuge']; + $identiteProcol->CessionJugeDate = $tabCes['cessDateJuge']; + $identiteProcol->CessionAvisBodac = $tabCes['cessDateBod']; + $identiteProcol->CessionInvenDate = $tabCes['cessDateInv']; + $identiteProcol->CessionCAdeclare = $tabCes['cessCAdec']; + $identiteProcol->CessionEffectif = $tabCes['cessEffectif']; + $identiteProcol->CessionDesc = $tabCes['cessDesc']; + $identiteProcol->CessionDescDate = $tabCes['cessDateDesc']; + $identiteProcol->CessionOffreDate = $tabCes['cessDateLim']; + $identiteProcol->CessionMandataire = $tabCes['cessMand']; + } + + //sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug $siren", print_r($tabRet,true)) ; + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + Zend_Registry::get('WsLogger')->info("getIdentiteProcol : ".print_r($identiteProcol,1)); + + return $identiteProcol; + } + + /** + * Retourne les liens financiers pour une entreprise. + * + * @param integer $siren Siren de l'entreprise + * @param boolean $actifsUniquement Uniquement les liens Actifs + * @return LiensReturn + */ + public function getLiens($siren, $actifsUniquement = true) + { + $this->authenticate(); + //Initialisation + if (empty($actifsUniquement)) { $actifsUniquement = true; } + $tabAct = $tabPar = array(); + + debugLog('I',"Liens entreprises demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, $actifsUniquement); + $nbA = count($tabA); + $tabAct = array(); + if ($nbA > 0) { + foreach ($tabA as $i => $lien) { + $actionnaire = new Actionnaire(); + $actionnaire->Pmin = $lien['Pmin']; + $actionnaire->MajMin = $lien['MajMin']; + $actionnaire->RaisonSociale = $lien['RaisonSociale']; + $actionnaire->TypeEntrep = $lien['TypeEntrep']; + $actionnaire->Pays = $lien['Pays']; + $actionnaire->Siren = $lien['Siren']; + $actionnaire->Actif = $lien['Actif']; + $actionnaire->Source = $lien['Source']; + $actionnaire->DateLien = $lien['DateLien']; //@todo : date + $actionnaire->DateMaj = $lien['DateMaj']; //@todo : date + $tabAct[] = $actionnaire; + } + } + debugLog('W', "$nbA actionnaires pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $tabP = $mLiens->getParticipations($siren, $actifsUniquement); + $nbP = count($tabP); + $tabPar = array(); + if ($nbP > 0) { + foreach ($tabP as $i => $lien) { + $participation = new Participation(); + $participation->Pmin = $lien['Pmin']; + $participation->MajMin = $lien['MajMin']; + $participation->RaisonSociale = $lien['RaisonSociale']; + $participation->TypeEntrep = $lien['TypeEntrep']; + $participation->Pays = $lien['Pays']; + $participation->Siren = $lien['Siren']; + $participation->Actif = $lien['Actif']; + $participation->Source = $lien['Source']; + $participation->DateLien = $lien['DateLien']; //@todo : date + $participation->DateMaj = $lien['DateMaj']; //@todo : date + $tabPar[] = $participation; + } + } + debugLog('W', "$nbP participations pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('liens',$siren); + + $output = new LiensReturn(); + $output->actionnaires = $tabAct; + $output->participations = $tabPar; + return $output; + } + + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, Néant=Tous + * @param integer $position + * @param integer $nbRep + * + * @return ListeEtablissementsReturn + */ + public function getListeEtablissements($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (!in_array($actif, array(0,1))) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + $departement = $dep; + + debugLog('I',"Liste des établissements demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + $result = array(); + if (count($etabs)>0) + { + foreach ($etabs as $nb => $etab) + { + $etablissement = new Etablissement(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + $result[] = $etablissement; + } + } + debugLog('I', "Nb Etablissements retournés ($departement, $actif) = ". count($result), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('etablissements',$siren); + $output = new ListeEtablissementsReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } + + /** + * Retourne l'ensemble des informations identitaires des dirigeants de l'entreprise + * + * @param string $siren Siren de l'entreprise + * @param bool $histo Afficher l'historique des dirigeants + * @return DirigeantsReturn Liste des dirigeants actifs de l'entreprise + */ + public function getDirigeants( $siren , $histo = false) + { + $this->authenticate(); + + //Initialisation + if (empty($histo)) { $histo = false; } + + debugLog('I',"Dirigeants demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if ($histo) $option = 'histo'; + else $option = ''; + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeants($siren, $histo); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $dirigeant = new Dirigeant(); + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Titre = $dir['Titre']; + $dirigeant->Societe = $dir['Societe']; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + $dirigeant->NaissDate = $dir['NaissDate']; //@todo : date + $dirigeant->NaissVille = $dir['NaissVille']; + $dirigeant->NaissDepPays = $dir['NaissDepPays']; + $dirigeant->Ancien = $dir['Ancien']; + $dirigeant->DateFct = $dir['DateFct']; //@todo : date + $liste[] = $dirigeant; + } + $this->wsLog('dirigeants',$siren,$option); + debugLog('I', 'Nb Dirigeants retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $output = new DirigeantsReturn(); + $output->result = $liste; + return $output; + } + + /** + * Retourne la liste des annonces légales relative à une entreprise + * + * @todo Revoir cette fonction pour la faire marcher avec les associations + * + * @param string $siren Siren de l'entreprise + * @param integer $filtre 0=Pas de Filtre, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param integer $position + * @param integer $nbRep + * @return AnnoncesReturn + */ + public function getAnnonces($siren, $filtre = 0, $idAnn = '', $position = 0, $nbRep = 100) + { + $this->authenticate(); + + //Initialisation + if (empty($filtre)) { $filtre = 0; } + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = array(); + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + /* + if ($siren>100 && $filtre==3) $asso=true; + else { + $asso=false; + $tabIdentite=$this->iInsee->getIdentiteLight($siren); + if ($tabIdentite['FJ']>90 && $tabIdentite['FJ']<94 || + $tabIdentite['FJ']>9000 && $tabIdentite['FJ']<9400) $asso=true; + }*/ + if ($idAnn=='') { + $anns=$iInsee->getAnnoncesLegales($siren); + $annsB=$iInsee->getAnnoncesBalo($siren); + $annsA=$iInsee->getAnnoncesAsso($siren); + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + } elseif ($filtre==1) + $anns=$iInsee->getAnnoncesLegales($siren, $idAnn); + elseif ($filtre==2) + $annsB=$iInsee->getAnnoncesBalo($siren, $idAnn); + elseif ($filtre==3) + $annsA=$iInsee->getAnnoncesAsso($siren, $idAnn); + elseif ($filtre==4) + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($anns) && empty($annsB) && empty($annsA) && empty($annsM)) + { + debugLog('W', "Aucune annonce pour le siren $siren (source=$filtre, id=$idAnn)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant B '.$siren.' '.$idAnn; + } + else + { + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = $ann['texteRectificatif']; + $annonce->texteAnnonce = $ann['texteAnnonce']; + $annonce->libFJ = $ann['libFJ']; + $annonce->codFJ = $ann['codFJ']; + $annonce->capital = $ann['capital']; + $annonce->capitalDev = $ann['capitalDev']; + + $annonce->raisonSociale = $ann['raisonSociale']; + $annonce->nomCommercial = $ann['nomCommercial']; + $annonce->sigle = $ann['sigle']; + $annonce->adresse = $ann['adresse']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + + if (is_array($annsB)) + { + foreach ($annsB as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = $ann['texteRectificatif']; + $annonce->texteAnnonce = $ann['texteAnnonce']; + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsA)) + { + foreach ($annsA as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = $ann['texteRectificatif']; + $annonce->texteAnnonce = $ann['texteAnnonce']; + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsM)) + { + foreach ($annsM as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = $ann['texteRectificatif']; + $annonce->texteAnnonce = $ann['texteAnnonce']; + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + } + + $nbReponses = count($liste); + if ($nbReponses>0){ + $liste = array_slice($liste, $position, $nbRep); + } + debugLog('I', "Nb Annonces $filtre retournées pour $siren (source=$filtre, id=$idAnn) = ". count($liste), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('annonces',$siren,$filtre.'/'.$idAnn); + file_put_contents(LOG_PATH.'/annonces.log', print_r($liste,1)); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Evaluation indiScore d'une entreprise + * + * @param string $siren Siren de l'entreprise + * @param string $nic + * @param int $niveau + * @return Indiscore + */ + public function getIndiScore($siren, $nic=0, $niveau=2, $plus=false) + { + $this->authenticate(); + $perm = false; + switch($niveau){ + case 1: + if ( !$this->checkPerm('indiscore') || !$this->checkPerm('indiscorep') ){ + $this->permission('indiscore'); + } + break; + case 2: + if (!$this->checkPerm('indiscore2') || !$this->checkPerm('indiscore2p') ){ + $this->permission('indiscore2'); + } + break; + case 3: + if (!$this->checkPerm('indiscore3') || !$this->checkPerm('indiscore3p') ){ + $this->permission('indiscore3'); + } + break; + } + + //Initialisation + $accesDist = true; + if (empty($nic)) { $nic = 0; } + if (empty($niveau)) { $niveau = 2; } + if (empty($plus)) { $plus = false; } + if ( !in_array($niveau, array(0,1,2,3,4,5)) ) { $niveau = 2; } + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesDist, $niveau); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + /* + if ($plus) { + $this->setSurveillance($siren, $this->User->email, 'Indiscore+', 'privileges', false, 0); + $this->setSurveillance($siren, $this->User->email, 'Indiscore+', 'score'); + if ($this->User->idClient==89) + $this->setSurveillance($siren, $this->User->email, 'Indiscore+', 'annonces'); + }*/ + + Zend_Registry::get('WsLogger')->info("INDISCORE : ".print_r($tabRet,1)); + $output = new Indiscore(); + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $output->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $output->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $output->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $output->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $output->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $output->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + foreach($value as $comment) { + $tab[] = $comment; + } + $output->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $output->tabVariables = $variables; + + } else { + $output->$key = $value; + } + } + $this->wsLog('indiscore',$siren); + return $output; + } + + /** + * Liste de tous les évènements enregistrés à l'INSEE pour une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic + * @param integer $position + * @param integer $nbRep + * @return InseeReturn + **/ + public function getListeEvenements($siren, $nic=0, $position=0, $nbRep=1000) + { + $this->authenticate(); + $this->permission('eveninsee'); + + //Initialisation + if (empty($nic)) { $nic = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep) || $nbRep>1000) { $nbRep = 1000; } + + debugLog('I',"Liste des évènements pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $evens = $iInsee->getEvenements($siren, $nic, $position, $nbRep); + $tabRet = array(); + if (count($evens)>0) { + foreach ($evens as $nb=>$even) { + $iEven = new InseeEven(); + $iEven->Nic = $even['nic']; + $iEven->Siege = $even['siege']; + $iEven->SiretAss = $even['siretAssocie']; + $iEven->TypeSiretAss = $even['typeSiretAss']; + $iEven->EvenCode = $even['codeEven']; + $iEven->EvenLib = $even['libEven']; + $iEven->EvenLibDet = $even['libEvenDet']; + $iEven->EvenDate = $even['dateEven']; //@todo : date + $iEven->DateInfo = $even['dateMAJ']; //@todo : date + $tabRet[] = $iEven; + } + } + + debugLog('I', 'Nb évènements retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('evenements',$siren); + $output = new InseeReturn(); + $output->nbReponses = count($tabRet); // @todo : retrouver le nombre total d'évenements + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche + * @param string $type Type de la recherche (recherche entreprise : 'ent', recherche dirigeant : 'dir') + * @param RechercheEntrepriseCriteres $criteres + * @param int $position Position de parcours des résultats retournées (0 par défaut) + * @param int $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param int $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param bool $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param bool $avecSiren Seulement les entités sirénées (false par défaut) + * @return RechercheEntrepriseReturn + */ + public function rechercheEntreprise($type, $criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + //Enregistrement des accès à la requête getIdentite + Zend_Registry::get('WsLogger')->info("rechercheEntreprise - ip : ". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']); + + switch ($type) + { + case 'ent': + $entCriteres = new CriteresEntreprise(); + $entCriteres = $criteres->elementEntreprise; + $client = new SoapClient($this->wsdl, $this->wsdlOptions); + $identifiant = $entCriteres->identifiant; + $typeId = ''; + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId='R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + try { + $O = $client->searchAutreId( + $typeId, + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + } catch (SoapFault $fault) { + Zend_Registry::get('WsLogger')->info("rechercheEntreprise - ".serialize($criteres)); + throw new SoapFault($fault->faultcode, $fault->faultstring); + exit; + } + } elseif ($typeId == 'S'){ + try { + $O = $client->searchSiren( + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + } catch (SoapFault $fault) { + Zend_Registry::get('WsLogger')->info("rechercheEntreprise - ".serialize($criteres)); + throw new SoapFault($fault->faultcode, $fault->faultstring); + exit; + } + } else { + + try { + $O = $client->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + empty($entCriteres->actif) ? false : $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + } catch (SoapFault $fault) { + Zend_Registry::get('WsLogger')->info("rechercheEntreprise - ".serialize($criteres)); + throw new SoapFault($fault->faultcode, $fault->faultstring); + exit; + } + } + + break; + case 'dir': + $dirCriteres = new CriteresDirigeant(); + $dirCriteres = $criteres->elementDirigeant; + $client = new SoapClient($this->wsdl, $this->wsdlOptions); + try { + $O = $client->searchDir( + Scores_Locale_String::cleanstring($dirCriteres->nom), + Scores_Locale_String::cleanstring($dirCriteres->prenom), + $dirCriteres->dateNaiss, + Scores_Locale_String::cleanstring($dirCriteres->lieuNaiss), + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence + ); + } catch (SoapFault $fault) { + Zend_Registry::get('WsLogger')->info("rechercheEntreprise - ".serialize($criteres)); + throw new SoapFault($fault->faultcode, $fault->faultstring); + exit; + } + break; + } + + $error = new ErrorType(); + $error = arrayToClass($O['error'], 'ErrorType'); + + $results = new RechercheEntrepriseResult(); + switch($type){ + case 'ent': + $results->criteres = $entCriteres; + break; + case 'dir': + $results->criteres = $dirCriteres; + break; + } + $results->info = $O['results']['info']; + $results->nbReponses = $O['results']['nbReponses']; + $results->nbReponsesTotal = $O['results']['nbReponsesTotal']; + $results->duree = $O['results']['duree']; + $results->erreur = $O['results']['erreur']; + $results->pass = $O['results']['pass']; + $reponse = array(); + if ( count($O['results']['reponses'])>0 ){ + foreach ($O['results']['reponses'] as $item) { + $reponse[] = arrayToClass($item, 'RechercheEntrepriseReponses'); + } + } + $results->reponses = $reponse; + + $outputParams = new RechercheEntrepriseReturn(); + $outputParams->error = $error; + $outputParams->results = $results; + return $outputParams; + } + + /** + * Recherche entreprise par nom et adresse + * @param unknown_type $raisonSociale + * @param unknown_type $adresse + * @param unknown_type $codePostal + * @param unknown_type $ville + * @param unknown_type $siege + * @param unknown_type $actif + * @param integer $deb + * @param integer $nbRep + * @param integer $maxRep + * @param boolean $pertinence + * @param boolean $avecSiren + * @param string $ape_etab + */ + protected function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege='', $actif='', $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $recherche = new RechercheEntrepriseResult(); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $reponse = new RechercheEntrepriseReponses(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $this->iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + + + $fp=@fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return array('error'=>array('errnum'=>100, 'errmsg'=>'Pas de reponse'), 'results'=>$tabRet); + + } + else + { + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : ".$tabRet['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabRet); + + } + + + $results = new RechercheEntrepriseResult(); + $error = new ErrorType(); + + $searchNomAdr = new RechercheEntrepriseReturn(); + $searchNomAdr->error = $error; + $searchNomAdr->results = $results; + + } + + protected function searchSiren(){} + + + + + protected function searchDir(){} + + protected function searchTelFax(){} + + + /** + * Retourne la fiche d'identité simplifié d'une entreprise avec son numéro de TVA. + * + * @param string $siren Identifiant Siren de l'entreprise + * @return TvaReturn + */ + public function getTVA($siren) + { + $this->authenticate(); + + //Initialisation + $siren = trim($siren); + debugLog('I',"TVA demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren); + debugLog('I', "Après getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep)) + { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + debugLog('I', "Avant MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iTva = new MTva($siren); + if ($iTva->vatDefined) $tva=$iTva->vatNumber; + else $tva='N/A'; + debugLog('I', "Après MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new TvaReturn(); + $output->id = $entrep['id']; + $output->AutreId = $entrep['AutreId']; + $output->Nom = $entrep['Nom']; + $output->Sigle = $entrep['Sigle']; + $output->Enseigne = $entrep['Enseigne']; + $output->Adresse = $entrep['Adresse']; + $output->Adresse2 = $entrep['Adresse2']; + $output->CP = $entrep['CP']; + $output->Ville = $entrep['Ville']; + $output->Siren = $entrep['Siren']; + $output->Tva = $tva; + + debugLog('I', "TVA retournée = $tva (".$entrep['Nom'].')', __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('tva',$siren); + + return $output; + } + + /** + * Retourne tout ou patie des informations règlementées sur l'entreprise + * + * @param string $siren SIREN de l'entreprise + * @param mixed $id Id du communiqué + * @return InfosRegReturn + */ + public function getInfosReg( $siren, $id = false ) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) $id = false; + $tabRet = array(); + $siren = substr($siren,0,9); + + debugLog('I',"Infos règlementées demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + $iBourse = new MBourse($siren); + $anns = $iBourse->getInfosReg($siren, $id); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ( empty($anns) ){ + debugLog('W', "Aucune info règlementée pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ($id == false) { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } else { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->communique = $ann['communique']; + $infos->communiqueHtml = $ann['communiqueHtml']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } + } + debugLog('I', 'Nb infos retournés = '. count($anns), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('infosreg',$siren,$id); + $output = new InfosRegReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les informations boursières de l'entreprise + * @param string $siren SIREN de l'entreprise + * @return InfosBourse + */ + public function getInfosBourse($siren) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + debugLog('I',"Infos bourse demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $siren = substr($siren,0,9); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($bourse)) { + debugLog('W', "Aucune info bourse pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $result = new InfosBourse(); + $result->Siren = $bourse['siren']; + $result->RaisonSociale = $bourse['raisonSociale']; + $result->Adresse = $bourse['adresse']; + $result->Effectif = $bourse['effectif']; + $result->CodeSicovam = $bourse['code_sicovam']; + $result->CodeMnemo = $bourse['code_mnemo']; + $result->CodeBloomberg = $bourse['code_bloomberg']; + $result->CodeDatastream = $bourse['code_datastream']; + $result->Isin = $bourse['code_isin']; + $result->CodeRic = $bourse['code_ric']; + $result->DateIntroduction = $bourse['dateIntroduction']; //@todo : date + $result->DateDerAG = $bourse['dateDerAG']; //@todo : date + $result->DateRadiation = $bourse['dateRadiation']; //@todo : date + $result->AutreIsin = $bourse['autre_isin']; + $result->EligibleSRD = $bourse['eligibleSRD']; + $result->EligiblePEA = $bourse['eligiblePEA']; + $result->Tel = $bourse['tel1']; + $result->Tel2 = $bourse['tel2']; + $result->Fax = $bourse['fax1']; + $result->Fax2 = $bourse['fax2']; + $result->Web = $bourse['web']; + $result->Mail = $bourse['mail']; + + $result->Marche = $bourse['marche']; + $result->Description = $bourse['description']; + $result->Secteur = $bourse['secteur']; + $result->Activite = $bourse['activite']; + $result->ActiviteDet = $bourse['activiteDet']; + + $result->placeCotation = $bourse['placeCotation']; + $result->nombreTitres = $bourse['nombreTitres']; + $result->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $result->derCoursDate = $bourse['date']; //@todo : date + $result->derCoursCloture = $bourse['close']; + $result->derCoursOuverture = $bourse['open']; + $result->derCoursPlusHaut = $bourse['high']; + $result->derCoursPlusBas = $bourse['low']; + + $result->derCoursVolume = $bourse['volume']; + $result->coursMin = $bourse['coursMin']; + $result->coursMoy = $bourse['coursMoy']; + $result->coursMax = $bourse['coursMax']; + + $this->wsLog('bourse',$siren,$id); + return $result; + } + + /** + * Ajout d'une surveillance + * + * @param string $siret Siret/Siren + * @param string $email Adresse email du client + * @param string $ref Référence de la surveillance + * @param string $source Type de source en surveillance (insee, annonces, bilans, actes, privileges, score, dirigeants) + * @param boolean $delete Suppression de la ligne + * @param integer $encoursClient Encours demandé par le client + * @return SetSurveillanceReturn + */ + public function setSurveillance($siret, $email, $ref='', $source='annonces', $delete=false, $encoursClient=0) + { + $this->authenticate(); + $source = strtolower($source); + switch ($source) { + case 'insee': + $this->permission('survinsee'); + break; + case 'bilans': + $this->permission('survbilan'); + break; + case 'actes': + $this->permission('survactes'); + break; + case 'privileges': + $this->permission('survpriv'); + break; + case 'dirigeants': + $this->permission('survdirigeants'); + break; + case 'score': + $this->permission('survscore'); + break; + case 'annonces': + default: + $this->permission('survannonce'); + break; + } + + //Initialisation + if (empty($ref)) $ref = ''; + if (empty($delete)) $delete = false; + if (empty($encoursClient)) $encoursClient = false; + $tabRet = array(); + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + debugLog('I',"setSurveillances(siret=$siret, email=$email, ref=$ref, source=$source, delete=$delete)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic); + $iDb = new WDB(); + $login = $this->User->login; + switch ($source) { + case 'insee': + case 'annonces': + case 'bilans': + case 'actes': + case 'privileges': + case 'dirigeants': $encoursClient=0; break; + case 'score': $encoursClient=$encoursClient*1; break; + default: $source='annonces'; break; + } + $tabUpdate = array( + 'source' => $source, + 'login' => $login, + 'email' => $email, + 'siren' => $siren, + 'nic' => $nic, + 'ref' => $ref, + 'encoursClient' => $encoursClient, + 'rs' => $tabIdentite['Nom'], + 'cp' => $tabIdentite['CP'], + 'ville' => $tabIdentite['Ville'], + ); + if ($delete) { + $tabUpdate = array_merge( + $tabUpdate, + array('dateSuppr'=>date('Y-m-d')) + ); + } else { + $tabUpdate = array_merge( + $tabUpdate, + array('dateAjout'=>date('Y-m-d'), 'dateSuppr'=>0) + ); + } + if ( $delete || !$iDb->insert('surveillances_site', $tabUpdate)) { + /*@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "debugSurv pour $login", + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'".EOL. + print_r($tabUpdate,true).EOL + );*/ + if (!$iDb->update('surveillances_site', $tabUpdate, "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'")) + { + $this->sendError('1030'); + } + } + $output = new SetSurveillanceReturn(); + $output->result = true; + return $output; + } + + /** + * getSurveillances + * @param SurveillancesFiltre $filtre + * @param integer $deb + * @param integer $nbRep + * @return SurveillancesReturn + */ + public function getSurveillances($filtre, $position=0, $nbRep=100) + { + $this->authenticate(); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 100; + + $error = new ErrorType(); + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + + $tri = strtolower(trim($filtre->tri)); + switch ($tri){ + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + $iDb = new WDB(); + $login = $this->User->login; + + if ($filtre->detail) { + $strSelect = 'source, email, siren, nic, ref, dateAjout, encoursClient, rs, cp, ville, dateDerEnvoi'; + } else { + $strSelect = 'source, email, siren, nic, ref, dateAjout, dateDerEnvoi'; + } + if ($filtre->source!='') $strSource = " AND source='$filtre->source' "; + else $strSource = ''; + + if ($siren>0) $strSiren = " AND siren=$siren "; + else $strSiren = ''; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', "login='$login' AND dateSuppr=0 $strSiren $strSource", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site', $strSelect, "login='$login' AND dateSuppr=0 $strSiren $strSource $orderBy LIMIT $position,$nbRep", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv){ + if (!$filtre->detail){ + $liste = new Surveillance(); + $liste->source = $tabSurv['source']; + $liste->email = $tabSurv['email']; + $liste->siren = $tabSurv['siren']; + $liste->nic = $tabSurv['nic']; + $liste->ref = $tabSurv['ref']; + $liste->dateAjout = $tabSurv['dateAjout']; //@todo : date + $liste->dateDerEnvoi = $tabSurv['dateDerEnvoi']; //@todo : date + $tabRet[] = $liste; + } else { + if (trim($tabSurv['rs'])<>'') { + $rs = $tabSurv['rs']; + $cp = $tabSurv['cp']; + $ville = $tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs = $tabIdentite['Nom']; + $cp = $tabIdentite['CP']; + $ville = $tabIdentite['Ville']; + $iDb->update('surveillances_site', array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic']." $strSource", + false + ); + } + $liste = new Surveillance(); + $liste->source = $tabSurv['source']; + $liste->email = $tabSurv['email']; + $liste->siren = $tabSurv['siren']; + $liste->nic = $tabSurv['nic']; + $liste->ref = $tabSurv['ref']; + $liste->dateAjout = $tabSurv['dateAjout']; //@todo : date + $liste->encoursClient = $tabSurv['encoursClient']; + $liste->rs = $rs; + $liste->cp = $cp; + $liste->ville = $ville; + $liste->dateDerEnvoi = $tabSurv['dateDerEnvoi']; //@todo : date + $tabRet[] = $liste; + } + } + $output = new SurveillancesReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne le bilan correspondant au siren, à l'exercice et au formalisme demandé + * + * @param string $siren Siren de l'entreprise + * @param string $millesime Date du bilan au format AAAAMMJJ + * @param string $typeBilan N:Réel Normal, S:Réel Simplifié, C:Consolidé + * @param string $ref Référence S&D obligatoire + * @return Bilan + */ + public function getBilan($siren, $millesime, $typeBilan='N', $ref='') + { + $this->authenticate(); + + //Initialisation + if (empty($typeBilan)) { $typeBilan = 'N'; } + if (empty($ref)) { $ref = ''; } + + debugLog('I',"Bilan $millesime $typeBilan demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $millesime = WDate::dateT('Ymd','d/m/Y',$millesime); + $mBil = new MBilans($siren); + $tabBilan = $mBil->getBilan($millesime, $typeBilan, $ref, true); + + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($tabBilan as $key => $value){ + if(!in_array($key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $key; + $resultPoste->val = $value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$key = $value; + } + } + $this->wsLog('bilan',$siren, $millesime.':'.$typeBilan.':'.$ref); + $resultBilan->POSTES = $tabPoste; + return $resultBilan; + } + + /** + * Retourne la liste des bilans disponible pour une entreprise + * + * @param string $siren Siren de l'entreprise + * @return ListeBilansReturn + */ + public function getListeBilans($siren) + { + $this->authenticate(); + //Initialisation + $tabRet = array(); + debugLog('I',"Liste des Bilans demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(false); + foreach($tabBilans as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + + debugLog('I', 'Nb Bilans retournés = '. count($tabBilans), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('listebilans', $siren); + $output = new ListeBilansReturn(); + $output->nbReponses = count($tabRet); + $output->result = $tabRet; + return $output; + } + + /** + * Vérifie si un siren existe en base Scores & Décisions + * @param string $siren Siren de l'entité + * @return boolean + */ + public function isSirenExistant($siren) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $siren = trim(substr($siren,0,9)); + $result = false; + debugLog('I',"Siren existant demandée pour siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->sirenExiste($siren); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = false; + } else { + debugLog('I', "Siren $siren présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + $this->wsLog('sirenExiste',$siren); + return $result; + } + + /** + * Retourne une annonce en fonction de sa référence + * + * @param string $siren Siren de l'entreprise + * @param string $dateAnnee + * @param integer $numParution + * @param integer $numAnnonce + * @return RechercheAnnonceReturn + */ + public function rechercheAnnonce($source, $dateAnnee, $numParution, $numAnnonce) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + debugLog('I',"Annonce précise demandée pour $source, $dateAnnee, $numParution, $numAnnonce",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($dateAnnee)==4) $annee = $dateAnnee; + else $annee = substr($dateAnnee,0,4); + + $iDb = new WDB('jo'); + + switch (strtoupper($source)) + { + case 'BODA': + case 'BODB': + case 'BODC': + $lettre = substr(strtoupper($source),3,1); + if ($annee<2005) { + if ($lettre=='A'){ $numJAL=1; } + elseif ($lettre=='B'){ $numJAL=200; } + else{ break; } + $anneeDeb = $annee.'0101'; + $anneeFin = $annee.'1231'; + $res = $iDb->select('historiques.entrep e, texte t', + "$annee AS Annee_Parution, e.NOBOD AS Num_Parution, e.NOANN AS Num_Annonce, e.NOPAGE AS Num_Page, e.`DATE` AS Date_Parution, e.DEPT AS Departement, e.CODTRI AS Tribunal_Code, 'I' AS typeAnnonce, CONCAT(e.NOANN,' - ',t.annonceTxt) AS annonce", + "e.JAL=$numJAL AND e.NOBOD=$numParution AND e.`DATE` BETWEEN $anneeDeb AND $anneeFin AND e.NOANN=$numAnnonce AND e.ANBASE=t.annonceNum", false, MYSQL_ASSOC); + } else { + $res = $iDb->select('bodacc', + 'Bodacc_Annee_Parution AS Annee_Parution, Bodacc_Num AS Num_Parution, Num_Annonce, Bodacc_Page AS Num_Page, Bodacc_Date_Parution AS Date_Parution, Tribunal_Dept AS Departement, Tribunal_Code, typeAnnonce, annonce', + "Bodacc_Code='$lettre' AND Bodacc_Annee_Parution=$annee AND Bodacc_Num=$numParution AND Num_Annonce=$numAnnonce", false, MYSQL_ASSOC); + } + break; + case 'ASSO': + $res = $iDb->select('asso', + 'YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Annonce, pageDeb AS Num_Page, Date_Parution, Departement, codTribunal AS Tribunal_Code, typeAnnonce, Annonce_Html AS annonce', "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$annee".sprintf('%04d', $numParution)." AND Num_Annonce=$numAnnonce", + false, MYSQL_ASSOC); + break; + case 'BALO': + $res = $iDb->select('balo', + "YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Affaire AS Num_Annonce, '' AS Num_Page, Date_Parution, '' AS Departement, '' AS Tribunal_Code, 'Insertion' AS typeAnnonce, Annonce_Html AS annonce", "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$numParution AND Num_Affaire=$numAnnonce", + false, MYSQL_ASSOC); + break; + } + + if (count($res)>0) + { + $iBodacc = new MBodacc(); + foreach ($res as $i => $etab) + { + $annonces = new RechercheAnnonce(); + $annonces->Annee_Parution = $etab['Annee_Parution']; + $annonces->Num_Parution = $etab['Num_Parution']; + $annonces->Num_Annonce = $etab['Num_Annonce']; + $annonces->Num_Page = $etab['Num_Page']; + $annonces->Date_Parution = $etab['Date_Parution']; //@todo : date + $annonces->Departement = $etab['Departement']; + $annonces->Tribunal_Code = $etab['Tribunal_Code']; + $annonces->Tribunal = $iBodacc->getTribunalNom($etab['Tribunal_Code']); + $annonces->Type_Annonce = $etab['typeAnnonce']; + $annonces->Annonce = strip_tags(strtr( + html_entity_decode($etab['annonce']), + array('>'=>'>','&'=>'&','<'=>'<','’'=>"'") + )); + + $tabRet[] = $annonces; + } + } + $nbTot = count($tabRet); + $result = new RechercheAnnonceResult(); + $result->criteres = $criteres; + $result->nbReponses = $nbTot; + $result->nbReponsesTotal = $nbTot; + $result->liste = $tabRet; + $output = new RechercheAnnonceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getRatios + * @param string $siren + * @param string $page + * @return RatiosReturn + */ + public function getRatios($siren, $page='ratios') + { + global $tva, $mBil, $tabBilan, $efftr, $tabInfla; + $tabFormules = include APPLICATION_PATH . '/../library/Metier/scores/Variables/CacheTabFormules.php'; + require_once 'Metier/scores/Variables/configMRatios.php'; + $this->authenticate(); + //Initialisation + if (empty($page)) $page = 'ratios'; + $tabRatiosInfos = $tabRatiosSecteurs = $tabBilansR = array(); + $tabRatios2 = $tabRatiosEvol = array(); + $tabRet = array(); + debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false); + debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $naf = $tabIdentite['NafEnt']; + $nafLib = $tabIdentite['NafEntLib']; + $efftr = $tabIdentite['Effectif']*1; + $fj = $tabIdentite['FJ']; + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getRatios sur $siren", print_r($tabBilans, true)); + $nbBilans = count($tabBilans); + $tabBilan = $tabBil = array(); + if ($nbBilans>0){ + $tabRatios = calculRatios($tabBilans, $tabIdentite, true); + } + $nbRatios = count($tabRatios); + debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /** Tableau d'infos sur les formules **/ + $tabBorneMin = $tabBorneMax = array(); + foreach ($tabFormules as $formule) { + $id = $formule['id']*1; + $libelle = $formule['libelle']; + $unite = $formule['unite']; + $commentaires = $formule['commentaires']; + $tabFormulesInfos[$id] = $formule; //Pour la gestion des unités des ratios secteur + $ratiosInfos = new RatiosInfos(); + $ratiosInfos->id = 'r'.$id; + $ratiosInfos->libelle = $formule['libelle']; + $ratiosInfos->unite = $formule['unite']; + $ratiosInfos->commentaires = $formule['commentaires']; + $tabRatiosInfos[] = $ratiosInfos; + $tabBorneMin[$id] = $formule['borneMin']; + $tabBorneMax[$id] = $formule['borneMax']; + } + + $tabAnnees = array(); + foreach ($tabRatios as $i=>$R) { + + //Informations sur le bilan + $bilansInfos = new RatiosBilansInfos(); + $bilansInfos->dateCloture = $tabBilan[$i]['DATE_CLOTURE']; //@todo : date + $bilansInfos->duree = $tabBilan[$i]['DUREE_MOIS']; + $bilansInfos->devise = $tabBilan[$i]['MONNAIE']; + $bilansInfos->typeBilan = $tabBilan[$i]['CONSOLIDE']; + $bilansInfos->unite = 'U'; + if ( substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900 ){ + $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); + } + + $tabRatiosEntrep = array(); + $tabRatiosEntrepEvol = array(); + foreach ( $R as $Ridx=>$Rmont ){ + + if ($Rmont<>'NS') { + if ( $tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx] ){ + $Rmont='<'.$tabBorneMin[$Ridx]; + } elseif ( $tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx] ){ + $Rmont='>'.$tabBorneMax[$Ridx]; + } + } + + // RatiosEntrep + $ratiosEntrep = new Ratios(); + if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>'){ + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = $Rmont; + } else { + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = round($Rmont,2); + } + $tabRatiosEntrep[] = $ratiosEntrep; + + if (($tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='S'||($tabBilan[$i+1]['CONSOLIDE']=='N'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) || + ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N'||($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]); + elseif ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='S'||($tabBilan[$i+2]['CONSOLIDE']=='N'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + || ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='N'||($tabBilan[$i+2]['CONSOLIDE']=='S'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]); + else + $Rmont='NS'; + + // RatiosEntrepEvol + $ratiosEntrepEvol = new Ratios(); + if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800){ + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = 'NS'; + } else { + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = number_format($Rmont,2,',',' '); + } + $tabRatiosEntrepEvol[] = $ratiosEntrepEvol; + } + $bilansInfos->RatiosEntrep = $tabRatiosEntrep; + $bilansInfos->RatiosEntrepEvol = $tabRatiosEntrepEvol; + $tabBilansR[] = $bilansInfos; + } + + debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + // Tableau des ratios secteurs + $tabRatiosSecteurs = array(); + if (strlen($naf)>4) $strNaf = " AND naf5='$naf' "; + else $strNaf = " AND naf4='$naf' "; + $strAnnees = implode(',', $tabAnnees); + if ( count($tabAnnees)>0 ){ + $iDb = new WDB('jo'); + $tabTmp = $iDb->select('ratios_secteurs', + 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', + "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", + false, MYSQL_ASSOC); + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $tabTmp[0]['annee']; + $nbRatiosSec = 0; + $anneePre = $tabTmp[0]['annee']; + foreach ($tabTmp as $tabTmp2) { + if ($anneePre<>$tabTmp2['annee']) { + $tabRatiosSecteurs[] = $ratiosSecteur; + //On réinitialise tout + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $tabTmp2['annee']; + } + $Ridx = $tabTmp2['id']; + if ($tabTmp2['nombre']>$nbRatiosSec){ + $nbRatiosSec = $tabTmp2['nombre']; + } + + $unite = $tabFormulesInfos[$Ridx]['unite']; + if ($unite=='EUR'){ + $montant = round($tabTmp2['ratio']*1000); + } else { + $montant = round($tabTmp2['ratio']); + } + if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]){ + $montant='<'.$tabBorneMin[$Ridx]; + } elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]){ + $montant='>'.$tabBorneMax[$Ridx]; + } + + $ratiosSecteurListe = new Ratios(); + if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>'){ + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = $montant; + } else { + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = round($montant,2); + } + $ratiosSecteur->liste[] = $ratiosSecteurListe; + $anneePre = $tabTmp2['annee']; + } + } + //$tabRatiosSecteurs=array(count($tabTmp), "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC"); + + $output = new RatiosReturn(); + $output->Nom = $tabIdentite['Nom']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->FJ = $fj; + $output->FJ_lib = $tabIdentite['FJ_lib']; + $output->Siren = $siren; + $output->NbEntNaf = $nbRatiosSec; + $output->BilansInfos = $tabBilansR; + $output->RatiosInfos = $tabRatiosInfos; + $output->RatiosSecteur = $tabRatiosSecteurs; + + //Zend_Registry::get('WsLogger')->info(__FUNCTION__." : ".print_r($result,1)); + + debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->wsLog($page, $siren); + return $output; + + } + + /** + * getRapport + * @param string $siren + * @param integer $niveau + * @param integer $id + * @return Rapport + */ + public function getRapport($siren, $niveau=3, $id=0) + { + $this->authenticate(); + if (empty($niveau)) $niveau = 3; + if (empty($id)) $id = 0; + $result = new Rapport(); + $filtre = 0; + $idAnn = 0; + if ($niveau==1){ + $result->Indiscore = $this->getIndiScore($siren, 0); + } elseif ($niveau==2) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + } elseif ($niveau==3) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + $result->Annonces = $this->getAnnonces($siren, $filtre, $idAnn); + } + return $result; + } + + /** + * Retourne la liste des banques connues pour une entreprise + * @param string $siren Siren de l'entreprise + * @return BanquesReturn + **/ + public function getBanques($siren) + { + $this->authenticate(); + + //Initialisation + $iDb = new WDB('sdv1'); + $tabRet = array(); + debugLog('I',"Liste des banques demandée pour siren $siren", + __LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (intval($siren)<=1000) { + $this->sendError('1010'); + } + + $res=$iDb->select('banques', 'codeBanque, codeGuichet, libBanqueGuichet, precis, dateSource*1 AS dateSource', "siren=$siren", false, MYSQL_ASSOC); + $tmp=$iDb->select('fedRib', "codeBanque, codeGuichet, CONCAT(libBanque,' ',libGuichet) AS libBanqueGuichet, 0 AS precis, IF (dateInfo='0000-00-00', dateDispo*1, dateInfo*1) AS dateSource", "siren=$siren", false, MYSQL_ASSOC); + $res=array_merge($res, $tmp); + foreach ($res as $tabBanque){ + $dateSource=$tabBanque['dateSource']; + $codBanque=$tabBanque['codeBanque']; + $codGuichet=$tabBanque['codeGuichet']; + $libBanque=trim($tabBanque['libBanqueGuichet']); + $found=false; + $adrBanque1=$adrBanque2=$adrBanqueCP=$adrBanqueVille=''; + + if ($codBanque>0 && $codGuichet>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs b, insee.BDF_Guichets g', + 'g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville', "g.bdfFibCodeEtab=$codBanque AND g.bdfFibCodeGuichet=$codGuichet AND b.bdfFibCodeEtab=g.bdfFibCodeEtab", + false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + $found=true; + }; + } + if (!$found && $codBanque>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs', "bdfFibCodeEtab AS banque, '' AS guichet, bdfFibDenom40 AS nomBanque, '' AS nomGuichet, '' AS adresse1, '' AS adresse2, '' AS adresse3, '' AS CP, '' AS Ville", "bdfFibCodeEtab=$codBanque", false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + } else continue; + } else continue; + + $banque = new Banque(); + $banque->codeBanque = $codBanque; + $banque->codeGuichet = $codGuichet; + $banque->libBanque = $libBanque; + $banque->adresse1 = $adrBanque1; + $banque->adresse2 = $adrBanque2; + $banque->cp = $adrBanqueCP; + $banque->ville = $adrBanqueVille; + $tabRet[] = $banque; + } + debugLog('I',"Liste des banques pour siren $siren : ".count($tabRet).' banques',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('banque', $siren); + $output = new BanquesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des compétences territoriales pour un établissement à une adresse donnée. + * @param string $siret Siret de l'établissement + * @param string $type Type de compétence (pre:prefectures et s/prefectures, jal;journaux d'annonces légales, tri:tribunaux, adm:administrateurs et mandataires judiciaires, hui:huissiers, cfe:centres de formalités des entreprises) + * @param string $codeInsee Code Insee de la commune de l'établissement + * @return ListeCompetencesReturn + */ + public function getListeCompetences($siret, $type, $codeInsee) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $type = strtolower($type); + + debugLog('I',"Liste des compétences $type demandée pour la commune $codeInsee",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + $iBodacc = new MBodacc(); + $cp=$codeInsee*1; + $dep=false; + if (substr($codeInsee,0,2)=='2A' || substr($codeInsee,0,2)=='2B') + { + $dep=20; $cp=20000+(substr($codeInsee,2,3))*1; + } + elseif ($cp>0 && $cp<100) $dep=$cp; + elseif ($cp>970 && $cp<977) $dep=$cp; + elseif ($cp>999 && $cp<10000) $dep='0'.substr($cp,0,1); + elseif ($cp>=10000 && $cp<96000) $dep=substr($cp,0,2); + elseif ($cp>=99000) $dep=substr($cp,0,2); + elseif ($cp>=98000) $dep=substr($cp,0,3); + elseif ($cp>=97100 && $cp<97700) $dep=substr($cp,0,3); + + if ($type=='pre'){ + + $iDb = new WDB('jo'); + $tabTmp2 = $iDb->select('villes', 'DEP, COM, AR, CT', 'codeInsee='.$codeInsee, false, MYSQL_ASSOC); + $arrond = $tabTmp2[0]['AR']; + unset($iDb); + $iDb = new WDB('insee'); + $tabTmp2 = $iDb->select('insee_tabArrond', 'CHEFLIEU, ARTMAJ, NCC', "DEP='$dep' AND AR='$arrond'", false, MYSQL_ASSOC); + $nomSousPref = trim(strtr($tabTmp2[0]['ARTMAJ'],array('('=>'',')'=>'',' '=>'', "'"=>'')).' '.$tabTmp2[0]['NCC']); + unset($iDb); + $tabTmp = $iBodacc->getTribunauxParDep($dep); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='A' || $tribunal['triType']=='B') + { + $pref = levenshtein($tribunal['triNom'], 'PREFECTURE DE '.$nomSousPref); + $spref = levenshtein($tribunal['triNom'], 'SOUS PREFECTURE DE '.$nomSousPref); + + if ($tribunal['triType']=='B' && ($pref>7 || $spref>5)) continue; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType'].$typeP; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper( + preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + $tabRet[] = $competence; + + } + } + + } elseif ($type=='jal') { + + $tabTmp = $iBodacc->getJALparDep($dep); + foreach ($tabTmp as $i=>$comp) + { + $infos=''; + if (trim($comp['parution'])<>'') $infos.='Parution '.$comp['parution'].'. '; + if (trim($comp['aboAnnuel'])>0) $infos.='Abonnement Annuel : '.$comp['aboAnnuel'].' euros. '; + if (trim($comp['infos'])<>'') $infos.=$comp['infos']; + + $competence = new Competence(); + $competence->Id = 9000+$comp['id']*1; + $competence->IdSup = 0; + $competence->Code = ''; + $competence->Type = ''; + $competence->Nom = strtoupper($comp['nomJal']); + $competence->Siret = ''; + $competence->Adr = strtoupper($comp['adresse']); + $competence->AdrComp = ''; + $competence->CP = $comp['cp']; + $competence->Ville = strtoupper($comp['ville']); + $competence->CodeInsee = ''; + $competence->Tel = $comp['tel']; + $competence->Fax = $comp['fax']; + $competence->Web = $comp['siteWeb']; + $competence->Mail = $comp['email']; + $competence->Statut = 'Actif'; + $competence->DateCessation = ''; + $competence->Remarque = trim($infos); + $tabRet[] = $competence; + } + + } elseif ($type=='tri' || $type=='adm' || $type=='hui') { + + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if (//$tribunal['triType']=='C' || + $tribunal['triType']=='G'// || + /*$tribunal['triType']=='I'*/) { + $idCA = $tribunal['triIdSup']; + $codeTGI = $tribunal['triCode']; + $code = strtoupper(substr($tribunal['triCode'],0,3)); + } + debugLog('D',"Liste des compétences $type demandée pour la commune $codeInsee ($dep) : ". + "Type=".$tribunal['triType'].', '. + "Code=".$tribunal[$codeTGI],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($tribunal['triType']<>'E' && $tribunal['triType']<>'O' && + $tribunal['triType']<>'T' && $tribunal['triType']<>'R' && + $tribunal['triType']<>'N' && $tribunal['triType']<>'U' && + $tribunal['triType']<>'Z') + { + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper(Scores_Locale_String::cleanstring($tribunal['triNom'])); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(Scores_Locale_String::cleanstring(preg_replace('/ +/',' ', + $tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie']))); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + if ($tribunal['triNumGreffe']*1>0) + { + $competence->IdentifiantGreffe = $tribunal['triNumGreffe']; + } + $tabRet[] = $competence; + } + } + } + + if ($type=='adm') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getMandataires(array($idCA), false); + $tabRet = array(); + $nbAff=0; + foreach ($tabTmp as $i=>$tribunal) + { /** @todo A revoir Debut **/ + if (stripos($tribunal['tribunal'], $code)!==false || + stripos($tribunal['tribunal'], 'SAINT')!==false) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + $nbAff++; + } + } + if ($nbAff==0) + { + foreach ($tabTmp as $i=>$tribunal) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + } + }/** @todo A revoir Fin : Lier correctement les mandataires à un TI principal **/ + } + elseif ($type=='hui') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getHuissiers(array($codeTGI), false); + + $tabRet = array(); + $nbAff = 0; + foreach ($tabTmp as $i=>$tribunal) + { + $adr = $iInsee->structureVoie($tribunal['adresse']); + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($adr['num'].' '.$adr['adr_btq'].' '. + $adr['typeVoie'].' '.$adr['libVoie']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $adr['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation']; + $competence->Remarque = strtr($tribunal['contact'], + array( '
'=>', ', '
'=>', ', + '
'=>', ', + )); + $tabRet[] = $competence; + } + $nbComp = count($tabTmp); + debugLog('I',"$nbComp compétences $type trouvées pour le tribunal $codeTGI",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + elseif ($type=='cfe') + { + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='C' || $tribunal['triType']=='O' || + $tribunal['triType']=='T' || $tribunal['triType']=='R' || + $tribunal['triType']=='N' || $tribunal['triType']=='U' || + $tribunal['triType']=='Z') + { + if (strlen($tribunal['triCommentaire'])==32 && + strpos($tribunal['triCommentaire'], ' ')===false) + $remarque=''; + else $remarque=$tribunal['triCommentaire']; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '.$tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '.$tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $remarque; + $tabRet[] = $competence; + } + } + } + $this->wsLog('competences',$siret,$type.'/'.$codeInsee); + $output = new ListeCompetencesReturn(); + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + return $output; + } + + /** + * Retourne le statut du webservice + * @return StatusReturn + */ + public function status() + { + /* @todo tester les différents éléments qui peuvent conduire + * à un problème dans les services tel que la connexion à la + * base de données, l'accès FTP, l'accès HTTP, l'accès système de fichier + */ + + //Enregistrement des accès à la requête getIdentite + Zend_Registry::get('WsLogger')->info("status - ip:". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']. + ", hash:".$_SERVER['PHP_AUTH_PW']); + + $error = new StatusReturn(); + //Test connexion à la base de données + $db = new WDB('jo'); + if (!$db) { + $error->statusCode = 9000; + $error->statusMsg = $this->listError['9000']; + } else { + $error->statusCode = 3000; + $error->statusMsg = $this->listError['3000']; + } + return $error; + } + +} + +?> \ No newline at end of file diff --git a/library/WsScore/Entreprise/v0.3/Service.php b/library/WsScore/Entreprise/v0.3/Service.php new file mode 100644 index 00000000..9a7b7a0d --- /dev/null +++ b/library/WsScore/Entreprise/v0.3/Service.php @@ -0,0 +1,3269 @@ +authenticate(); + + //Initialisation + if (empty($id)) { $id = 0; } + $forceVerif = false; + + $tdeb = microtime(1); + $ligne = date('YmdHis').";$siret;Ws->getIdentite Avant ..."; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->AncienSiege = $entrep['AncienSiege']; + $identite->AncienSiegeDateFin = $entrep['AncienSiegeDateFin']; + $identite->TribunalCode = prepareString($entrep['Tribunal']); + $identite->TribunalLib = prepareString($entrep['TribunalLib']); + //'NumGreffe' = $entrep['numGreffe'], // Ajouté le 4 08 2009 + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->ActifEco = $entrep['ActifEco']; // Etab éco actif, ajout le 28/04/2011 + $identite->ActifEcoDate = $entrep['ActifEcoDate']; // Date si éco inactif et jur actif + $identite->ActifEcoType = $entrep['ActifEcoType']; // vide ou NPAI ou PFER ou ECOF + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = prepareString($entrep['Tel']); + $identite->Fax = prepareString($entrep['Fax']); + $identite->Web = prepareString($entrep['Web']); + $identite->Mail = prepareString($entrep['Mail']); + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + + $geoInfos = new GeoInfos(); + $geoInfos->CUCS = $entrep['GeoInfos']['CUCS']; + $geoInfos->NCUCS = $entrep['GeoInfos']['NCUCS']; + $geoInfos->ZRU = $entrep['GeoInfos']['ZRU']; + $geoInfos->NZRU = $entrep['GeoInfos']['NZRU']; + $geoInfos->ZFU = $entrep['GeoInfos']['ZFU']; + $geoInfos->NZFU = $entrep['GeoInfos']['NZFU']; + $geoInfos->ZUS = $entrep['GeoInfos']['ZUS']; + $geoInfos->NZUS = $entrep['GeoInfos']['NZUS']; + $geoInfos->AFR = $entrep['GeoInfos']['AFR']; + $geoInfos->NAFR = $entrep['GeoInfos']['NAFR']; + $geoInfos->ZRR = $entrep['GeoInfos']['ZRR']; + $geoInfos->NZRR = $entrep['GeoInfos']['NZRR']; + $identite->GeoInfos = $geoInfos; + + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = prepareString($entrep['NafEntLib']); + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = prepareString($entrep['NafEtabLib']); + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = prepareString($entrep['APRM_Lib']); + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = prepareString($entrep['CapitalType']); // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + //'DateMajRCS' = $entrep['DateMajRCS'], // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = prepareString($entrep['codeCommune']); + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = prepareString($entrep['dir1Titre']); + $identite->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $identite->dir1DateFct = prepareString($entrep['dir1DateFct']); //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = prepareString($entrep['dir1LieuNaiss']); // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = prepareString($entrep['dir2Titre']); + $identite->dir2NomPrenom = prepareString($entrep['dir2NomPrenom']); + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = prepareString($entrep['dir2DateNaiss']); //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = prepareString($entrep['dir2LieuNaiss']); // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = prepareString($entrep['InfosIris']['libIris']); + $identite->InfosIris->typIris = prepareString($entrep['InfosIris']['typIris']); + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SurfaceMagasin = $entrep['ACTISURF']*1; // 0=N/D, 1=inf. à 300m2,2=300 à 400m2, 3=400 à 2500m2, 4=sup. à 2500m2 + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = prepareString($entrep['bilanHN']); + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $tabAutreSiret = array(); + if (count($entrep['AutreSiret'])) { + foreach($entrep['AutreSiret'] as $type => $item) { + $autreSiret = new AutreSiret(); + $autreSiret->type = $type; + $autreSiret->siren = $item['siren']; + $autreSiret->nic = $item['nic']; + $autreSiret->apeEtab = $item['apeEtab']; + $autreSiret->codeEve = $item['codeEve']; + $autreSiret->dateEve = $item['dateEve']; + $autreSiret->adrL1 = $item['adrL1']; + $autreSiret->adrL2 = $item['adrL2']; + $autreSiret->adrL3 = $item['adrL3']; + $autreSiret->adrL4 = $item['adrL4']; + $autreSiret->adrL5 = $item['adrL5']; + $autreSiret->adrL6 = $item['adrL6']; + $autreSiret->adrL7 = $item['adrL7']; + $autreSiret->depCom = $item['depCom']; + $autreSiret->rivoli = $item['rivoli']; + $autreSiret->siege = $item['siege']; + $autreSiret->destinat = $item['destinat']; + $autreSiret->typEtab = $item['typeEtab']; + $autreSiret->origine = $item['origine']; + $tabAutreSiret[] = $autreSiret; + } + } + $identite->AutreSiret = $tabAutreSiret; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + //'importExport' = $entrep['importExport'], + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $identite->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + $duree=round(microtime(1)-$tdeb,3); + $ligne=date('YmdHis').";$siret;Ws->getIdentite APRES ($duree s) !!!"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + return $identite; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param integer $id Identifiant S&D de l'établissement + * @return IdentiteProcol Fiche d'identité de l'établissement + */ + public function getIdentiteProcol($siret, $id=0, $forceVerif=false) + { + $this->authenticate(); + + debugLog('I',"Identité AGS demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if (intval($siren)==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identiteProcol = new IdentiteProcol(); + + //Element identite + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->TribunalCode = $entrep['Tribunal']; + $identite->TribunalLib = $entrep['TribunalLib']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = strtr($entrep['Nom'],'/*',' '); + $identite->Nom2 = $entrep['Nom2']; + $identite->NomLong = $entrep['nomLong']; // Ajouté le 4 08 2009 + $identite->NomCommercial = $entrep['NomCommercial']; // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = $entrep['Sigle']; + $identite->SigleLong = $entrep['sigleLong']; // Ajouté le 4 08 2009 + $identite->Enseigne = $entrep['Enseigne']; + $identite->EnseigneLong = $entrep['enseigneLong']; // Ajouté le 16 11 2010 + $identite->Adresse = $entrep['Adresse']; + $identite->Adresse2 = $entrep['Adresse2']; + $identite->AdresseNum = $entrep['AdresseNum']; + $identite->AdresseBtq = $entrep['AdresseBtq']; + $identite->AdresseVoie = $entrep['AdresseVoie']; + $identite->AdresseRue = $entrep['AdresseRue']; + $identite->CP = $entrep['CP']; + $identite->Ville = $entrep['Ville']; + $identite->Pays = $entrep['Pays']; // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = $entrep['Tel']; + $identite->Fax = $entrep['Fax']; + $identite->Web = $entrep['Web']; + $identite->Mail = $entrep['Mail']; + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->GeoInfos = $entrep['GeoInfos']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = $entrep['APRM_Lib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = $entrep['CapitalType']; // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = $entrep['codeCommune']; + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = $entrep['dir1Titre']; + $identite->dir1NomPrenom = $entrep['dir1NomPrenom']; + $identite->dir1DateFct = $entrep['dir1DateFct']; //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = $entrep['dir1LieuNaiss']; // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = $entrep['dir2Titre']; + $identite->dir2NomPrenom = $entrep['dir2NomPrenom']; + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = $entrep['dir2DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = $entrep['dir2LieuNaiss']; // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = $entrep['InfosIris']['libIris']; + $identite->InfosIris->typIris = $entrep['InfosIris']['typIris']; + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = $entrep['bilanHN']; + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = $entrep2['apen4_lib']; + $identite->Naf4EtabLib = $entrep2['apet4_lib']; + } + + $identiteProcol->Identite = $identite; + + //Eléments annonces légales + $anns = $this->getAnnonces($siren, 1); + $tabRetAnn = $tabLastEven = array(); + $anns = $anns->result; + $tribunalProcol = false; + foreach ($anns as $nb=>$ann) { + $tabRetEven = array(); + foreach ($ann->evenements as $tabEven) { + // On ignore les éléments suivants + if ($tabEven->CodeEven>=7000) continue; + if ($tabEven->CodeEven>=4000 && $tabEven->CodeEven<=4999) continue; + + // Par défaut, on force le tribunal à celui présent dans la dernière annonce de Procol + if ($tribunalProcol==false && $tabEven->CodeEven>=1000 && $tabEven->CodeEven<2000 && $ann->BodaccCode=='BODA') { + $identiteProcol->TribunalCode = $ann->TribunalCode; + $identiteProcol->TribunalLib = prepareString($ann->Tribunal); + $tribunalProcol=true; + } + + // On ne prend que le dernier élément de chaque type + if (in_array($tabEven->CodeEven, $tabLastEven)) continue; + + $tabLastEven[] = $tabEven->CodeEven; + $tabRetEven[] = $tabEven; + } + + if (count($tabRetEven)>0) { + $annonce = new Annonce(); + $annonce->id = $ann->id; + $annonce->BodaccCode = $ann->BodaccCode; + $annonce->BodaccNum = $ann->BodaccNum; + $annonce->NumAnnonce = $ann->NumAnnonce; + $annonce->DateParution = $ann->DateParution; //@todo : date + $annonce->Departement = $ann->Departement; + $annonce->Tribunal = $ann->Tribunal; + $annonce->TribunalCode = $ann->TribunalCode; + $annonce->TribunalSiret = $ann->TribunalSiret; + $annonce->Rubrique = $ann->Rubrique; + $annonce->typeAnnonce = $ann->typeAnnonce; + $annonce->texteRectificatif = $ann->texteRectificatif; + $annonce->texteAnnonce = utf8_encode($ann->texteAnnonce); + $annonce->dateEffet = $ann->dateEffet; //@todo : date + $annonce->dateJugement = $ann->dateJugement; //@todo : date + $annonce->dateInsertionSD = $ann->dateInsertionSD; //@todo : date + $annonce->evenements = $tabRetEven; + $annonce->Lien_Annonce_Pdf = $ann->Lien_Annonce_Pdf; + $tabRetAnn[] = $annonce; + } + } + $identiteProcol->Annonces = $tabRetAnn; + + $iRncs = new MRncs(); + if ($entrep['Siege']==1 || $entrep['Siege']==11) { + $identiteProcol->LibTypeEtab = 'Etablissement Siege'; + } else { + $tabEtabRncs = $iRncs->getIdentiteEtab($siren, $entrep['Nic']); + if ($tabEtabRncs['Siege']==2) $identiteProcol->LibTypeEtab = 'Etablissement Principal'; + elseif ($tabEtabRncs['Siege']==1) $identiteProcol->LibTypeEtab = 'Etablissement Complementaire'; + elseif ($tabEtabRncs['Siege']==0) $identiteProcol->LibTypeEtab = 'Etablissement Secondaire'; + } + + //@todo + $tabJuge = $iRncs->getIntervenants($siren); + $tabDepots=array(); + foreach ($tabJuge as $iDepot=>$depot) { + $organe = new Organe(); + $organe->codEven = $depot['codEven']; + $organe->libEven = prepareString($depot['libEven']); + $organe->dateEffet = $depot['dateEffet']; + $organe->admcode = $depot['admcode']; + $organe->admfonction = prepareString($depot['admfonction']); + $organe->admnom = prepareString($depot['admnom']); + $organe->admadrNum = $depot['admadrNum']; + $organe->admadrInd = $depot['admadrInd']; + $organe->admadrVoie = $depot['admadrVoie']; // @todo : adm1adr1, adm1adr2, adm1adr3, + $organe->admadrCP = $depot['admadrCP']; + $organe->admadrVille = $depot['admadrVille']; + $tabDepots[] = $organe; + } + $identiteProcol->Organes = $tabDepots; + + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, 1); + $nbA = count($tabA); + $tabAct = array(); + foreach ($tabA as $i=>$lien) { + $liens = new Actionnaire(); + $liens->Pmin = $lien['Pmin']; + $liens->MajMin = $lien['MajMin']; + $liens->RaisonSociale = $lien['RaisonSociale']; + $liens->Pays = $lien['Pays']; + $liens->Siren = $lien['Siren']; + $liens->Actif = $lien['Actif']; + $tabAct[] = $liens; + } + $identiteProcol->Actionnaires = $tabAct; + + $iGreffes = new MGreffes(); + $tabActes = $iGreffes->getListeActes($siren); + + $identiteProcol->StatutsModifDepot = $identiteProcol->StatutsModif = '0000-00-00'; + foreach ($tabActes as $i=>$acte) { + if ('_'.$acte['acte_type']=='_04') { // STATUTS CONSTITUTIFS + $identiteProcol->StatutsConstDepot = $acte['depot_date']; // => 1997-12-18 + $identiteProcol->StatutsConst = $acte['acte_date']; // => 1997-11-13 + break; + } elseif (in_array('_'.$acte['acte_type'], array( + //'_04', // STATUTS CONSTITUTIFS + '_06', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_07', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_08', // STATUTS A JOUR ET DECLARATION DE CONFORMITE 9 0000-00-00 2009-09-02 17:05:55 + '_09', // STATUTS APRES TRANSFERT DE SIEGE 9 0000-00-00 2009-09-02 17:05:55 + '_A1', // STATUTS 9 0000-00-00 2009-09-02 17:05:55 + '_AH', // AVENANT AUX STATUTS + ))) { + // On ne prend que la dernière modif + if ($identiteProcol->StatutsModifDepot=='0000-00-00' && $identiteProcol->StatutsModif=='0000-00-00') { + $identiteProcol->StatutsModifDepot = $acte['depot_date'];// => 1997-12-18 + $identiteProcol->StatutsModif = $acte['acte_date']; // => 1997-11-13 + } + } + } + + /** Y a t il eu des informations relatives à une cession ? **/ + $tabCes = $iGreffes->getInfosCessions($siren); + if ($tabCes) { + $identiteProcol->CessionJugeLib = $tabCes['cessJuge']; + $identiteProcol->CessionJugeDate = $tabCes['cessDateJuge']; + $identiteProcol->CessionAvisBodac = $tabCes['cessDateBod']; + $identiteProcol->CessionInvenDate = $tabCes['cessDateInv']; + $identiteProcol->CessionCAdeclare = $tabCes['cessCAdec']; + $identiteProcol->CessionEffectif = $tabCes['cessEffectif']; + $identiteProcol->CessionDesc = $tabCes['cessDesc']; + $identiteProcol->CessionDescDate = $tabCes['cessDateDesc']; + $identiteProcol->CessionOffreDate = $tabCes['cessDateLim']; + $identiteProcol->CessionMandataire = $tabCes['cessMand']; + } + + //sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug $siren", print_r($tabRet,true)) ; + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + return $identiteProcol; + } + + /** + * Retourne les liens financiers pour une entreprise. + * + * @param integer $siren Siren de l'entreprise + * @param boolean $actifsUniquement Uniquement les liens Actifs + * @return LiensReturn + */ + public function getLiens($siren, $actifsUniquement = true) + { + $this->authenticate(); + + //Initialisation + if (empty($actifsUniquement)) { $actifsUniquement = true; } + $tabAct = $tabPar = array(); + + debugLog('I',"Liens entreprises demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, $actifsUniquement); + $nbA = count($tabA); + $tabAct = array(); + if ($nbA > 0) { + foreach ($tabA as $i => $lien) { + $actionnaire = new Actionnaire(); + $actionnaire->Pmin = $lien['Pmin']; + $actionnaire->MajMin = $lien['MajMin']; + $actionnaire->RaisonSociale = $lien['RaisonSociale']; + $actionnaire->TypeEntrep = $lien['TypeEntrep']; + $actionnaire->Pays = $lien['Pays']; + $actionnaire->Siren = $lien['Siren']; + $actionnaire->Actif = $lien['Actif']; + $actionnaire->Source = $lien['Source']; + $actionnaire->DateLien = $lien['DateLien']; //@todo : date + $actionnaire->DateMaj = $lien['DateMaj']; //@todo : date + $tabAct[] = $actionnaire; + } + } + debugLog('W', "$nbA actionnaires pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $tabP = $mLiens->getParticipations($siren, $actifsUniquement); + $nbP = count($tabP); + $tabPar = array(); + if ($nbP > 0) { + foreach ($tabP as $i => $lien) { + $participation = new Participation(); + $participation->Pmin = $lien['Pmin']; + $participation->MajMin = $lien['MajMin']; + $participation->RaisonSociale = $lien['RaisonSociale']; + $participation->TypeEntrep = $lien['TypeEntrep']; + $participation->Pays = $lien['Pays']; + $participation->Siren = $lien['Siren']; + $participation->Actif = $lien['Actif']; + $participation->Source = $lien['Source']; + $participation->DateLien = $lien['DateLien']; //@todo : date + $participation->DateMaj = $lien['DateMaj']; //@todo : date + $tabPar[] = $participation; + } + } + debugLog('W', "$nbP participations pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('liens',$siren); + + $output = new LiensReturn(); + $output->actionnaires = $tabAct; + $output->participations = $tabPar; + return $output; + } + + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, Néant=Tous + * @param integer $position + * @param integer $nbRep + * + * @return ListeEtablissementsReturn + */ + public function getListeEtablissements($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (!in_array($actif, array(0,1))) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + $departement = $dep; + + debugLog('I',"Liste des établissements demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + $result = array(); + if (count($etabs)>0) + { + foreach ($etabs as $nb => $etab) + { + $etablissement = new Etablissement(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + $result[] = $etablissement; + } + } + debugLog('I', "Nb Etablissements retournés ($departement, $actif) = ". count($result), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('etablissements',$siren); + $output = new ListeEtablissementsReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } + + /** + * Retourne l'ensemble des informations identitaires des dirigeants de l'entreprise + * + * @param string $siren Siren de l'entreprise + * @param bool $histo Afficher l'historique des dirigeants + * @return DirigeantsReturn Liste des dirigeants actifs de l'entreprise + */ + public function getDirigeants( $siren , $histo = false) + { + $this->authenticate(); + + //Initialisation + if (empty($histo)) { $histo = false; } + + //Zend_Registry::get('WsLogger')->info('HISTO : '.$histo); + + debugLog('I',"Dirigeants demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeants($siren, $histo); + //debugLog('W', print_r($dirs, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $dirigeant = new Dirigeant(); + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Titre = $dir['Titre']; + $dirigeant->Societe = $dir['Societe']; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + //$dirigeant->NomUsage = $dir['NomUsage']; //@todo : modifier la structure + $dirigeant->NaissDate = $dir['NaissDate']; //@todo : date + $dirigeant->NaissVille = $dir['NaissVille']; + $dirigeant->NaissDepPays = $dir['NaissDepPays']; + $dirigeant->Ancien = $dir['Ancien']; + $dirigeant->DateFct = $dir['DateFct']; //@todo : date + $liste[] = $dirigeant; + } + $this->wsLog('dirigeants',$siren,$option); + debugLog('I', 'Nb Dirigeants retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $output = new DirigeantsReturn(); + $output->result = $liste; + return $output; + } + + /** + * Retourne la liste des annonces légales relative à une entreprise + * + * @todo Revoir cette fonction pour la faire marcher avec les associations + * + * @param string $siren Siren de l'entreprise + * @param integer $filtre 0=Pas de Filtre, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param integer $position + * @param integer $nbRep + * @return AnnoncesReturn + */ + public function getAnnonces($siren, $filtre = 0, $idAnn = '', $position = 0, $nbRep = 100) + { + $this->authenticate(); + + //Initialisation + if (empty($filtre)) { $filtre = 0; } + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = array(); + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + /* + if ($siren>100 && $filtre==3) $asso=true; + else { + $asso=false; + $tabIdentite=$this->iInsee->getIdentiteLight($siren); + if ($tabIdentite['FJ']>90 && $tabIdentite['FJ']<94 || + $tabIdentite['FJ']>9000 && $tabIdentite['FJ']<9400) $asso=true; + }*/ + if ($idAnn=='') { + $anns=$iInsee->getAnnoncesLegales($siren); + $annsB=$iInsee->getAnnoncesBalo($siren); + $annsA=$iInsee->getAnnoncesAsso($siren); + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + } elseif ($filtre==1) + $anns=$iInsee->getAnnoncesLegales($siren, $idAnn); + elseif ($filtre==2) + $annsB=$iInsee->getAnnoncesBalo($siren, $idAnn); + elseif ($filtre==3) + $annsA=$iInsee->getAnnoncesAsso($siren, $idAnn); + elseif ($filtre==4) + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($anns) && empty($annsB) && empty($annsA) && empty($annsM)) + { + debugLog('W', "Aucune annonce pour le siren $siren (source=$filtre, id=$idAnn)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant B '.$siren.' '.$idAnn; + } + else + { + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = prepareString($ann['texteAnnonce']); + $annonce->libFJ = $ann['libFJ']; + $annonce->codFJ = $ann['codFJ']; + $annonce->capital = $ann['capital']; + $annonce->capitalDev = $ann['capitalDev']; + + $annonce->raisonSociale = $ann['raisonSociale']; + $annonce->nomCommercial = $ann['nomCommercial']; + $annonce->sigle = $ann['sigle']; + $annonce->adresse = $ann['adresse']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + + if (is_array($annsB)) + { + foreach ($annsB as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsA)) + { + foreach ($annsA as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsM)) + { + foreach ($annsM as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + } + + $nbReponses = count($liste); + if ($nbReponses>0){ + //$liste = array_slice($liste, $position, $nbRep); + } + debugLog('I', "Nb Annonces $filtre retournées pour $siren (source=$filtre, id=$idAnn) = ". count($liste), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('annonces',$siren,$filtre.'/'.$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Evaluation indiScore d'une entreprise + * + * @param string $siren Siren de l'entreprise + * @param string $nic + * @param int $niveau + * @return Indiscore + */ + public function getIndiScore($siren, $nic=0, $niveau=2, $plus=false) + { + $this->authenticate(); + + $perm = false; + switch($niveau){ + case 1: + if ( !$this->checkPerm('indiscore') || !$this->checkPerm('indiscorep') ){ + $this->permission('indiscore'); + } + break; + case 2: + if (!$this->checkPerm('indiscore2') || !$this->checkPerm('indiscore2p') ){ + $this->permission('indiscore2'); + } + break; + case 3: + if (!$this->checkPerm('indiscore3') || !$this->checkPerm('indiscore3p') ){ + $this->permission('indiscore3'); + } + break; + } + + //Initialisation + $accesDist = true; + if (empty($nic)) { $nic = 0; } + if (empty($niveau)) { $niveau = 2; } + if (empty($plus)) { $plus = false; } + if ( !in_array($niveau, array(0,1,2,3,4,5)) ) { $niveau = 2; } + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesDist, $niveau); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + /* + if ($plus) { + $this->setSurveillance($siren, $this->User->email, 'Indiscore+', 'privileges', false, 0); + $this->setSurveillance($siren, $this->User->email, 'Indiscore+', 'score'); + if ($this->User->idClient==89) + $this->setSurveillance($siren, $this->User->email, 'Indiscore+', 'annonces'); + }*/ + $output = new Indiscore(); + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $output->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $output->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $output->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $output->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $output->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $output->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + foreach($value as $comment) { + $tab[] = Scores_Locale_String::fixEncoding($comment); + } + $output->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $output->tabVariables = $variables; + + } elseif ($key=='Bilans') { + + $tab = array(); + foreach($value as $item) + { + $objet = new IndiscoreBilans(); + $objet->Millesime = $item['Millesime']; + $objet->FraisPerso = $item['FraisPerso']; + $objet->CA = $item['CA']; + $objet->EBE = $item['EBE']; + $objet->TxInvest = $item['TxInvest']; + $objet->TxEndett = $item['TxEndett']; + $objet->DettesCT = $item['DettesCT']; + $objet->FraisFi = $item['FraisFi']; + $objet->BFR = $item['BFR']; + $objet->FR = $item['FR']; + $objet->FondsPr = $item['FondsPr']; + $objet->DelaiCli = $item['DelaiCli']; + $objet->DelaiFour = $item['DelaiFour']; + $tab[] = $objet; + } + $output->$key = $tab; + } else { + $output->$key = $value; + } + } + $this->wsLog('indiscore',$siren); + return $output; + } + + /** + * Liste de tous les évènements enregistrés à l'INSEE pour une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic + * @param integer $position + * @param integer $nbRep + * @return InseeReturn + **/ + public function getListeEvenements($siren, $nic=0, $position=0, $nbRep=1000) + { + $this->authenticate(); + $this->permission('eveninsee'); + + //Initialisation + if (empty($nic)) { $nic = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep) || $nbRep>1000) { $nbRep = 1000; } + + debugLog('I',"Liste des évènements pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $evens = $iInsee->getEvenements($siren, $nic, $position, $nbRep); + $tabRet = array(); + if (count($evens)>0) { + foreach ($evens as $nb=>$even) { + $iEven = new InseeEven(); + $iEven->Nic = $even['nic']; + $iEven->Siege = $even['siege']; + $iEven->SiretAss = $even['siretAssocie']; + $iEven->TypeSiretAss = $even['typeSiretAss']; + $iEven->EvenCode = $even['codeEven']; + $iEven->EvenLib = $even['libEven']; + $iEven->EvenLibDet = $even['libEvenDet']; + $iEven->EvenDate = $even['dateEven']; //@todo : date + $iEven->DateInfo = $even['dateMAJ']; //@todo : date + $tabRet[] = $iEven; + } + } + + debugLog('I', 'Nb évènements retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('evenements',$siren); + $output = new InseeReturn(); + $output->nbReponses = count($tabRet); // @todo : retrouver le nombre total d'évenements + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + //Enregistrement des accès à la requête getIdentite + Zend_Registry::get('WsLogger')->info(__FUNCTION__."- ip : ". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']); + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + empty($entCriteres->actif) ? false : $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + + /** + * Recherche d'entreprise par dirigeants + * @param DirigeantCriteres $criteres + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchDirReturn + */ + public function searchDir($criteres, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + $nom = $criteres->nom; + $prenom = $criteres->prenom; + $dateNaiss = $criteres->dateNaiss; + $lieuNaiss = $criteres->lieuNaiss; + $pertinence = $criteres->pertinence; + + debugLog('I',"Recherche Dirigeant de $nom, $prenom, $dateNaiss, $lieuNaiss (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($prenom)) $prenom = ''; + if (empty($dateNaiss)) $dateNaiss = ''; + if (empty($lieuNaiss)) $lieuNaiss = ''; + if (empty($pertinence)) $pertinence = false; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheDir($nom, $prenom, '', $dateNaiss, $lieuNaiss, $deb, $nbRep, $maxRep, $pertinence); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $item = new EntrepriseDirItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + + // Dirigeant + $item->DirRs = prepareString($etab['DirRs']); + $item->DirNom = prepareString($etab['DirNom']); + $item->DirPrenom = prepareString($etab['DirPrenom']); + $item->DirNomUsage = prepareString($etab['DirNomUsage']); + $item->DirDateEffet = $etab['DirDateEffet']; + $item->DirFonction = prepareString($etab['DirFonction']); + $item->DirDepart = $etab['DirDepart']; + $tabRet[] = $item; + } + + if ($etabs['nbReponses']==0){ + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + $search = new SearchDirReturn(); + $search->nbReponses = $etabs['nbReponses']; + $search->nbReponsesTotal = $etabs['nbReponsesTotal']; + $search->result = $tabRet; + return $search; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche au sièges (si true) + * @param boolean $actif Limitation aux établissements actifs (si true) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=false, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + if (empty($actif)) $actif = false; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + + $fp=@fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param integer $dep Département + * @return SearchReturn + */ + public function searchSiren($siret, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep); + if (count($rep['reponses'])==0 && $dep>0) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep); + } + $etabs = $rep['reponses']; + $tabRet = array(); + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $reponse; + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = utf8_encode(prepareString(utf8_decode($etab['FJLib']))); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = prepareString($etab['NafEtabLib']); + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = prepareString($etab['NafEntLib']); + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + + return $output; + } + + + + + /** + * Retourne la fiche d'identité simplifié d'une entreprise avec son numéro de TVA. + * + * @param string $siren Identifiant Siren de l'entreprise + * @return TvaReturn + */ + public function getTVA($siren) + { + $this->authenticate(); + + //Initialisation + $siren = trim($siren); + debugLog('I',"TVA demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren); + debugLog('I', "Après getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep)) + { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + debugLog('I', "Avant MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iTva = new MTva($siren); + if ($iTva->vatDefined) $tva=$iTva->vatNumber; + else $tva='N/A'; + debugLog('I', "Après MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new TvaReturn(); + $output->id = $entrep['id']; + $output->AutreId = $entrep['AutreId']; + $output->Nom = $entrep['Nom']; + $output->Sigle = $entrep['Sigle']; + $output->Enseigne = $entrep['Enseigne']; + $output->Adresse = $entrep['Adresse']; + $output->Adresse2 = $entrep['Adresse2']; + $output->CP = $entrep['CP']; + $output->Ville = $entrep['Ville']; + $output->Siren = $entrep['Siren']; + $output->Tva = $tva; + + debugLog('I', "TVA retournée = $tva (".$entrep['Nom'].')', __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('tva',$siren); + + return $output; + } + + /** + * Retourne tout ou patie des informations règlementées sur l'entreprise + * + * @param string $siren SIREN de l'entreprise + * @param mixed $id Id du communiqué + * @return InfosRegReturn + */ + public function getInfosReg( $siren, $id = false ) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) $id = false; + $tabRet = array(); + $siren = substr($siren,0,9); + + debugLog('I',"Infos règlementées demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + $iBourse = new MBourse($siren); + $anns = $iBourse->getInfosReg($siren, $id); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ( empty($anns) ){ + debugLog('W', "Aucune info règlementée pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ($id == false) { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } else { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->communique = $ann['communique']; + $infos->communiqueHtml = $ann['communiqueHtml']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } + } + debugLog('I', 'Nb infos retournés = '. count($anns), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('infosreg',$siren,$id); + $output = new InfosRegReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les informations boursières de l'entreprise + * @param string $siren SIREN de l'entreprise + * @return InfosBourse + */ + public function getInfosBourse($siren) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + debugLog('I',"Infos bourse demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $siren = substr($siren,0,9); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($bourse)) { + debugLog('W', "Aucune info bourse pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + $result = new InfosBourse(); + $result->Siren = $bourse['siren']; + $result->RaisonSociale = $bourse['raisonSociale']; + $result->Adresse = $bourse['adresse']; + $result->Effectif = $bourse['effectif']; + $result->CodeSicovam = $bourse['code_sicovam']; + $result->CodeMnemo = $bourse['code_mnemo']; + $result->CodeBloomberg = $bourse['code_bloomberg']; + $result->CodeDatastream = $bourse['code_datastream']; + $result->Isin = $bourse['code_isin']; + $result->CodeRic = $bourse['code_ric']; + $result->DateIntroduction = $bourse['dateIntroduction']; //@todo : date + $result->DateDerAG = $bourse['dateDerAG']; //@todo : date + $result->DateRadiation = $bourse['dateRadiation']; //@todo : date + $result->AutreIsin = $bourse['autre_isin']; + $result->EligibleSRD = $bourse['eligibleSRD']; + $result->EligiblePEA = $bourse['eligiblePEA']; + $result->Tel = $bourse['tel1']; + $result->Tel2 = $bourse['tel2']; + $result->Fax = $bourse['fax1']; + $result->Fax2 = $bourse['fax2']; + $result->Web = $bourse['web']; + $result->Mail = $bourse['mail']; + + $result->Marche = $bourse['marche']; + $result->Description = $bourse['description']; + $result->Secteur = $bourse['secteur']; + $result->Activite = $bourse['activite']; + $result->ActiviteDet = $bourse['activiteDet']; + + $result->placeCotation = $bourse['placeCotation']; + $result->nombreTitres = $bourse['nombreTitres']; + $result->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $result->derCoursDate = $bourse['date']; //@todo : date + $result->derCoursCloture = $bourse['close']; + $result->derCoursOuverture = $bourse['open']; + $result->derCoursPlusHaut = $bourse['high']; + $result->derCoursPlusBas = $bourse['low']; + + $result->derCoursVolume = $bourse['volume']; + $result->coursMin = $bourse['coursMin']; + $result->coursMoy = $bourse['coursMoy']; + $result->coursMax = $bourse['coursMax']; + + $this->wsLog('bourse',$siren,$id); + return $result; + } + + /** + * Ajout d'une surveillance + * + * @param string $siret Siret/Siren + * @param string $email Adresse email du client + * @param string $ref Référence de la surveillance + * @param string $source Type de source en surveillance (insee, annonces, bilans, actes, privileges, score, dirigeants) + * @param boolean $delete Suppression de la ligne + * @param integer $encoursClient Encours demandé par le client + * @return SetSurveillanceReturn + */ + public function setSurveillance($siret, $email, $ref='', $source='annonces', $delete=false, $encoursClient=0) + { + $this->authenticate(); + $source = strtolower($source); + switch ($source) { + case 'insee': + $this->permission('survinsee'); + break; + case 'bilans': + $this->permission('survbilan'); + break; + case 'actes': + $this->permission('survactes'); + break; + case 'privileges': + $this->permission('survpriv'); + break; + case 'dirigeants': + $this->permission('survdirigeants'); + break; + case 'score': + $this->permission('survscore'); + break; + case 'annonces': + default: + $this->permission('survannonce'); + break; + } + + //Initialisation + if (empty($ref)) $ref = ''; + if (empty($delete)) $delete = false; + if (empty($encoursClient)) $encoursClient = false; + $tabRet = array(); + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + debugLog('I',"setSurveillances(siret=$siret, email=$email, ref=$ref, source=$source, delete=$delete)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic); + $iDb = new WDB(); + $login = $this->User->login; + switch ($source) { + case 'insee': + case 'annonces': + case 'bilans': + case 'actes': + case 'privileges': + case 'dirigeants': $encoursClient=0; break; + case 'score': $encoursClient=$encoursClient*1; break; + default: $source='annonces'; break; + } + $tabUpdate = array( + 'source' => $source, + 'login' => $login, + 'email' => $email, + 'siren' => $siren, + 'nic' => $nic, + 'ref' => $ref, + 'encoursClient' => $encoursClient, + 'rs' => $tabIdentite['Nom'], + 'cp' => $tabIdentite['CP'], + 'ville' => $tabIdentite['Ville'], + ); + if ($delete) { + $tabUpdate = array_merge( + $tabUpdate, + array('dateSuppr'=>date('Y-m-d')) + ); + } else { + $tabUpdate = array_merge( + $tabUpdate, + array('dateAjout'=>date('Y-m-d'), 'dateSuppr'=>0) + ); + } + if ( $delete || !$iDb->insert('surveillances_site', $tabUpdate)) { + /*@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "debugSurv pour $login", + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'".EOL. + print_r($tabUpdate,true).EOL + );*/ + if (!$iDb->update('surveillances_site', $tabUpdate, "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'")) + { + $this->sendError('1030'); + } + } + $output = new SetSurveillanceReturn(); + $output->result = true; + return $output; + } + + /** + * getSurveillances + * @param SurveillancesFiltre $filtre + * @param integer $deb + * @param integer $nbRep + * @return SurveillancesReturn + */ + public function getSurveillances($filtre, $position=0, $nbRep=100) + { + $this->authenticate(); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 100; + + $error = new ErrorType(); + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + + $tri = strtolower(trim($filtre->tri)); + switch ($tri){ + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + $iDb = new WDB(); + $login = $this->User->login; + + if ($filtre->detail) { + $strSelect = 'source, email, siren, nic, ref, dateAjout, encoursClient, rs, cp, ville, dateDerEnvoi'; + } else { + $strSelect = 'source, email, siren, nic, ref, dateAjout, dateDerEnvoi'; + } + if ($filtre->source!='') $strSource = " AND source='$filtre->source' "; + else $strSource = ''; + + if ($siren>0) $strSiren = " AND siren=$siren "; + else $strSiren = ''; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', "login='$login' AND dateSuppr=0 $strSiren $strSource", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site', $strSelect, "login='$login' AND dateSuppr=0 $strSiren $strSource $orderBy LIMIT $position,$nbRep", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv){ + if (!$filtre->detail){ + $liste = new Surveillance(); + $liste->source = $tabSurv['source']; + $liste->email = $tabSurv['email']; + $liste->siren = $tabSurv['siren']; + $liste->nic = $tabSurv['nic']; + $liste->ref = utf8_decode($tabSurv['ref']); + $liste->dateAjout = $tabSurv['dateAjout']; //@todo : date + $liste->dateDerEnvoi = $tabSurv['dateDerEnvoi']; //@todo : date + $tabRet[] = $liste; + } else { + if (trim($tabSurv['rs'])<>'') { + $rs = $tabSurv['rs']; + $cp = $tabSurv['cp']; + $ville = $tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs = $tabIdentite['Nom']; + $cp = $tabIdentite['CP']; + $ville = $tabIdentite['Ville']; + $iDb->update('surveillances_site', array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic']." $strSource", + false + ); + } + $liste = new Surveillance(); + $liste->source = $tabSurv['source']; + $liste->email = $tabSurv['email']; + $liste->siren = $tabSurv['siren']; + $liste->nic = $tabSurv['nic']; + $liste->ref = utf8_decode($tabSurv['ref']); + $liste->dateAjout = $tabSurv['dateAjout']; //@todo : date + $liste->encoursClient = $tabSurv['encoursClient']; + $liste->rs = $rs; + $liste->cp = $cp; + $liste->ville = $ville; + $liste->dateDerEnvoi = $tabSurv['dateDerEnvoi']; //@todo : date + $tabRet[] = $liste; + } + } + $output = new SurveillancesReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne le bilan correspondant au siren, à l'exercice et au formalisme demandé + * + * @param string $siren Siren de l'entreprise + * @param string $millesime Date du bilan au format AAAAMMJJ + * @param string $typeBilan N:Réel Normal, S:Réel Simplifié, C:Consolidé + * @param string $ref Référence S&D obligatoire + * @return Bilan + */ + public function getBilan($siren, $millesime, $typeBilan='N', $ref='') + { + $this->authenticate(); + + //Initialisation + if (empty($typeBilan)) { $typeBilan = 'N'; } + if (empty($ref)) { $ref = ''; } + + debugLog('I',"Bilan $millesime $typeBilan demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $millesime = WDate::dateT('Ymd','d/m/Y',$millesime); + $mBil = new MBilans($siren); + $tabBilan = $mBil->getBilan($millesime, $typeBilan, $ref, true); + + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($tabBilan as $key => $value){ + if(!in_array($key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $key; + $resultPoste->val = $value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$key = $value; + } + } + $this->wsLog('bilan',$siren, $millesime.':'.$typeBilan.':'.$ref); + $resultBilan->POSTES = $tabPoste; + return $resultBilan; + } + + /** + * Retourne la liste des bilans disponible pour une entreprise + * + * @param string $siren Siren de l'entreprise + * @return ListeBilansReturn + */ + public function getListeBilans($siren) + { + $this->authenticate(); + //Initialisation + $tabRet = array(); + debugLog('I',"Liste des Bilans demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + foreach($tabBilans as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + + debugLog('I', 'Nb Bilans retournés = '. count($tabBilans), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('listebilans', $siren); + $output = new ListeBilansReturn(); + $output->nbReponses = count($tabRet); + $output->result = $tabRet; + return $output; + } + + /** + * Vérifie si un siren existe en base Scores & Décisions + * @param string $siren Siren de l'entité + * @return boolean + */ + public function isSirenExistant($siren) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $siren = trim(substr($siren,0,9)); + $result = false; + debugLog('I',"Siren existant demandée pour siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->sirenExiste($siren); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = false; + } else { + debugLog('I', "Siren $siren présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + $this->wsLog('sirenExiste',$siren); + return $result; + } + + /** + * Retourne une annonce en fonction de sa référence + * + * @param string $siren Siren de l'entreprise + * @param string $dateAnnee + * @param integer $numParution + * @param integer $numAnnonce + * @return RechercheAnnonceReturn + */ + public function rechercheAnnonce($source, $dateAnnee, $numParution, $numAnnonce) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + + debugLog('I',"Annonce précise demandée pour $source, $dateAnnee, $numParution, $numAnnonce",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($dateAnnee)==4) $annee = $dateAnnee; + else $annee = substr($dateAnnee,0,4); + + $iDb = new WDB('jo'); + + switch (strtoupper($source)) + { + case 'BODA': + case 'BODB': + case 'BODC': + $lettre = substr(strtoupper($source),3,1); + if ($annee<2005) { + if ($lettre=='A'){ $numJAL=1; } + elseif ($lettre=='B'){ $numJAL=200; } + else{ break; } + $anneeDeb = $annee.'0101'; + $anneeFin = $annee.'1231'; + $res = $iDb->select('historiques.entrep e, texte t', + "$annee AS Annee_Parution, e.NOBOD AS Num_Parution, e.NOANN AS Num_Annonce, e.NOPAGE AS Num_Page, e.`DATE` AS Date_Parution, e.DEPT AS Departement, e.CODTRI AS Tribunal_Code, 'I' AS typeAnnonce, CONCAT(e.NOANN,' - ',t.annonceTxt) AS annonce", + "e.JAL=$numJAL AND e.NOBOD=$numParution AND e.`DATE` BETWEEN $anneeDeb AND $anneeFin AND e.NOANN=$numAnnonce AND e.ANBASE=t.annonceNum", false, MYSQL_ASSOC); + } else { + $res = $iDb->select('bodacc', + 'Bodacc_Annee_Parution AS Annee_Parution, Bodacc_Num AS Num_Parution, Num_Annonce, Bodacc_Page AS Num_Page, Bodacc_Date_Parution AS Date_Parution, Tribunal_Dept AS Departement, Tribunal_Code, typeAnnonce, annonce', + "Bodacc_Code='$lettre' AND Bodacc_Annee_Parution=$annee AND Bodacc_Num=$numParution AND Num_Annonce=$numAnnonce", false, MYSQL_ASSOC); + } + break; + case 'ASSO': + $res = $iDb->select('asso', + 'YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Annonce, pageDeb AS Num_Page, Date_Parution, Departement, codTribunal AS Tribunal_Code, typeAnnonce, Annonce_Html AS annonce', "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$annee".sprintf('%04d', $numParution)." AND Num_Annonce=$numAnnonce", + false, MYSQL_ASSOC); + break; + case 'BALO': + $res = $iDb->select('balo', + "YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Affaire AS Num_Annonce, '' AS Num_Page, Date_Parution, '' AS Departement, '' AS Tribunal_Code, 'Insertion' AS typeAnnonce, Annonce_Html AS annonce", "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$numParution AND Num_Affaire=$numAnnonce", + false, MYSQL_ASSOC); + break; + } + + if (count($res)>0) + { + $iBodacc = new MBodacc(); + foreach ($res as $i => $etab) + { + $annonces = new AnnonceItem(); + $annonces->Annee_Parution = $etab['Annee_Parution']; + $annonces->Num_Parution = $etab['Num_Parution']; + $annonces->Num_Annonce = $etab['Num_Annonce']; + $annonces->Num_Page = $etab['Num_Page']; + $annonces->Date_Parution = $etab['Date_Parution']; //@todo : date + $annonces->Departement = $etab['Departement']; + $annonces->Tribunal_Code = $etab['Tribunal_Code']; + $annonces->Tribunal = $iBodacc->getTribunalNom($etab['Tribunal_Code']); + $annonces->Type_Annonce = $etab['typeAnnonce']; + $annonces->Annonce = strip_tags(strtr( + html_entity_decode($etab['annonce']), + array('>'=>'>','&'=>'&','<'=>'<','’'=>"'") + )); + + $tabRet[] = $annonces; + } + } + $nbTot = count($tabRet); + $output = new RechercheAnnonceReturn(); + $output->criteres = $criteres; + $output->nbReponses = $nbTot; + $output->nbReponsesTotal = $nbTot; + $output->result = $tabRet; + return $output; + } + + /** + * getRatios + * @param string $siren + * @param string $page + * @return RatiosReturn + */ + public function getRatios($siren, $page='ratios') + { + global $tva, $mBil, $tabBilan, $efftr, $tabInfla; + $tabFormules = include APPLICATION_PATH . '/../library/Metier/scores/Variables/CacheTabFormules.php'; + require_once 'Metier/scores/Variables/configMRatios.php'; + $this->authenticate(); + //Initialisation + if (empty($page)) $page = 'ratios'; + $tabRatiosInfos = $tabRatiosSecteurs = $tabBilansR = array(); + $tabRatios2 = $tabRatiosEvol = array(); + $tabRet = array(); + debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false); + debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $naf = $tabIdentite['NafEnt']; + $nafLib = $tabIdentite['NafEntLib']; + $efftr = $tabIdentite['Effectif']*1; + $fj = $tabIdentite['FJ']; + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getRatios sur $siren", print_r($tabBilans, true)); + $nbBilans = count($tabBilans); + $tabBilan = $tabBil = array(); + if ($nbBilans>0){ + $tabRatios = calculRatios($tabBilans, $tabIdentite, true); + } + $nbRatios = count($tabRatios); + debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /** Tableau d'infos sur les formules **/ + $tabBorneMin = $tabBorneMax = array(); + foreach ($tabFormules as $formule) { + $id = $formule['id']*1; + $libelle = $formule['libelle']; + $unite = $formule['unite']; + $commentaires = $formule['commentaires']; + $tabFormulesInfos[$id] = $formule; //Pour la gestion des unités des ratios secteur + $ratiosInfos = new RatiosInfos(); + $ratiosInfos->id = 'r'.$id; + $ratiosInfos->libelle = $formule['libelle']; + $ratiosInfos->unite = $formule['unite']; + $ratiosInfos->commentaires = $formule['commentaires']; + $tabRatiosInfos[] = $ratiosInfos; + $tabBorneMin[$id] = $formule['borneMin']; + $tabBorneMax[$id] = $formule['borneMax']; + } + + $tabAnnees = array(); + foreach ($tabRatios as $i=>$R) { + + //Informations sur le bilan + $bilansInfos = new RatiosBilansInfos(); + $bilansInfos->dateCloture = $tabBilan[$i]['DATE_CLOTURE']; //@todo : date + $bilansInfos->duree = $tabBilan[$i]['DUREE_MOIS']; + $bilansInfos->devise = $tabBilan[$i]['MONNAIE']; + $bilansInfos->typeBilan = $tabBilan[$i]['CONSOLIDE']; + $bilansInfos->unite = 'U'; + if ( substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900 ){ + $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); + } + + $tabRatiosEntrep = array(); + $tabRatiosEntrepEvol = array(); + foreach ( $R as $Ridx=>$Rmont ){ + + if ($Rmont<>'NS') { + if ( $tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx] ){ + $Rmont='<'.$tabBorneMin[$Ridx]; + } elseif ( $tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx] ){ + $Rmont='>'.$tabBorneMax[$Ridx]; + } + } + + // RatiosEntrep + $ratiosEntrep = new Ratios(); + if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>'){ + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = $Rmont; + } else { + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = round($Rmont,2); + } + $tabRatiosEntrep[] = $ratiosEntrep; + + if (($tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='S'||($tabBilan[$i+1]['CONSOLIDE']=='N'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) || + ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N'||($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]); + elseif ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='S'||($tabBilan[$i+2]['CONSOLIDE']=='N'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + || ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='N'||($tabBilan[$i+2]['CONSOLIDE']=='S'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]); + else + $Rmont='NS'; + + // RatiosEntrepEvol + $ratiosEntrepEvol = new Ratios(); + if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800){ + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = 'NS'; + } else { + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = number_format($Rmont,2,',',' '); + } + $tabRatiosEntrepEvol[] = $ratiosEntrepEvol; + } + $bilansInfos->RatiosEntrep = $tabRatiosEntrep; + $bilansInfos->RatiosEntrepEvol = $tabRatiosEntrepEvol; + $tabBilansR[] = $bilansInfos; + } + + debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + // Tableau des ratios secteurs + + if (strlen($naf)>4) $strNaf = " AND naf5='$naf' "; + else $strNaf = " AND naf4='$naf' "; + $strAnnees = implode(',', $tabAnnees); + + $tabRatiosSecteurs = array(); + + $tabAnnees = array_unique($tabAnnees); + + if ( count($tabAnnees)>0 ) + { + $iDb = new WDB('jo'); + $tabTmp = $iDb->select('ratios_secteurs', + 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', + "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", + false, MYSQL_ASSOC); + + $nbRatiosSec = 0; + foreach($tabAnnees as $annee) + { + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $annee; + foreach ($tabTmp as $tmp) + { + if ($tmp['annee']== $annee) + { + $Ridx = $tmp['id']; + if ($tmp['nombre']>$nbRatiosSec){ + $nbRatiosSec = $tmp['nombre']; + } + + $unite = $tabFormulesInfos[$Ridx]['unite']; + if ($unite=='EUR'){ + $montant = round($tmp['ratio']*1000); + } else { + $montant = round($tmp['ratio']); + } + if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]){ + $montant='<'.$tabBorneMin[$Ridx]; + } elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]){ + $montant='>'.$tabBorneMax[$Ridx]; + } + + $ratiosSecteurListe = new Ratios(); + if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>'){ + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = $montant; + } else { + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = round($montant,2); + } + $ratiosSecteur->liste[] = $ratiosSecteurListe; + } + } + $tabRatiosSecteurs[] = $ratiosSecteur; + } + } + + //$tabRatiosSecteurs=array(count($tabTmp), "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC"); + + $output = new RatiosReturn(); + $output->Nom = $tabIdentite['Nom']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->FJ = $fj; + $output->FJ_lib = $tabIdentite['FJ_lib']; + $output->Siren = $siren; + $output->NbEntNaf = $nbRatiosSec; + $output->BilansInfos = $tabBilansR; + $output->RatiosInfos = $tabRatiosInfos; + $output->RatiosSecteur = $tabRatiosSecteurs; + + debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->wsLog($page, $siren); + return $output; + + } + + /** + * getRapport + * @param string $siren Siren de l'entreprise + * @param integer $niveau Niveau du rapport 1, 2 ou 3 + * @param integer $id Identifiant interne S&D de l'entreprise + * @param boolean $plus Si true, mise en surveillance privilèges + * @return Rapport + */ + public function getRapport($siren, $niveau=3, $id=0, $plus=false) + { + $this->authenticate(); + if (empty($niveau)) $niveau = 3; + if (empty($id)) $id = 0; + $result = new Rapport(); + $filtre = 0; + $idAnn = 0; + + $accesDist=true; + $nivComment=2; + if ($niveau==1){ + $result->Indiscore = $this->getIndiScore($siren, 0, $accessDist, $nivComment, $plus); + } elseif ($niveau==2) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $accessDist, $nivComment, $plus); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + } elseif ($niveau==3) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $accessDist, $nivComment, $plus); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + $result->Annonces = $this->getAnnonces($siren, $filtre, $idAnn); + } + return $result; + } + + /** + * Retourne la liste des banques connues pour une entreprise + * @param string $siren Siren de l'entreprise + * @return BanquesReturn + **/ + public function getBanques($siren) + { + $this->authenticate(); + + //Initialisation + $iDb = new WDB('sdv1'); + $tabRet = array(); + debugLog('I',"Liste des banques demandée pour siren $siren", + __LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (intval($siren)<=1000) { + $this->sendError('1010'); + } + + $res=$iDb->select('banques', 'codeBanque, codeGuichet, libBanqueGuichet, precis, dateSource*1 AS dateSource', "siren=$siren", false, MYSQL_ASSOC); + $tmp=$iDb->select('fedRib', "codeBanque, codeGuichet, CONCAT(libBanque,' ',libGuichet) AS libBanqueGuichet, 0 AS precis, IF (dateInfo='0000-00-00', dateDispo*1, dateInfo*1) AS dateSource", "siren=$siren", false, MYSQL_ASSOC); + $res=array_merge($res, $tmp); + foreach ($res as $tabBanque){ + $dateSource=$tabBanque['dateSource']; + $codBanque=$tabBanque['codeBanque']; + $codGuichet=$tabBanque['codeGuichet']; + $libBanque=trim($tabBanque['libBanqueGuichet']); + $found=false; + $adrBanque1=$adrBanque2=$adrBanqueCP=$adrBanqueVille=''; + + if ($codBanque>0 && $codGuichet>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs b, insee.BDF_Guichets g', + 'g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville', "g.bdfFibCodeEtab=$codBanque AND g.bdfFibCodeGuichet=$codGuichet AND b.bdfFibCodeEtab=g.bdfFibCodeEtab", + false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + $found=true; + }; + } + if (!$found && $codBanque>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs', "bdfFibCodeEtab AS banque, '' AS guichet, bdfFibDenom40 AS nomBanque, '' AS nomGuichet, '' AS adresse1, '' AS adresse2, '' AS adresse3, '' AS CP, '' AS Ville", "bdfFibCodeEtab=$codBanque", false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + } else continue; + } else continue; + + $banque = new Banque(); + $banque->codeBanque = $codBanque; + $banque->codeGuichet = $codGuichet; + $banque->libBanque = $libBanque; + $banque->adresse1 = $adrBanque1; + $banque->adresse2 = $adrBanque2; + $banque->cp = $adrBanqueCP; + $banque->ville = $adrBanqueVille; + $tabRet[] = $banque; + } + debugLog('I',"Liste des banques pour siren $siren : ".count($tabRet).' banques',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('banque', $siren); + $output = new BanquesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des compétences territoriales pour un établissement à une adresse donnée. + * @param string $siret Siret de l'établissement + * @param string $type Type de compétence (pre:prefectures et s/prefectures, jal;journaux d'annonces légales, tri:tribunaux, adm:administrateurs et mandataires judiciaires, hui:huissiers, cfe:centres de formalités des entreprises) + * @param string $codeInsee Code Insee de la commune de l'établissement + * @return ListeCompetencesReturn + */ + public function getListeCompetences($siret, $type, $codeInsee) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $type = strtolower($type); + + debugLog('I',"Liste des compétences $type demandée pour la commune $codeInsee",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + $iBodacc = new MBodacc(); + $cp=$codeInsee*1; + $dep=false; + if (substr($codeInsee,0,2)=='2A' || substr($codeInsee,0,2)=='2B') + { + $dep=20; $cp=20000+(substr($codeInsee,2,3))*1; + } + elseif ($cp>0 && $cp<100) $dep=$cp; + elseif ($cp>970 && $cp<977) $dep=$cp; + elseif ($cp>999 && $cp<10000) $dep='0'.substr($cp,0,1); + elseif ($cp>=10000 && $cp<96000) $dep=substr($cp,0,2); + elseif ($cp>=99000) $dep=substr($cp,0,2); + elseif ($cp>=98000) $dep=substr($cp,0,3); + elseif ($cp>=97100 && $cp<97700) $dep=substr($cp,0,3); + + if ($type=='pre'){ + + $iDb = new WDB('jo'); + $tabTmp2 = $iDb->select('villes', 'DEP, COM, AR, CT', 'codeInsee='.$codeInsee, false, MYSQL_ASSOC); + $arrond = $tabTmp2[0]['AR']; + unset($iDb); + $iDb = new WDB('insee'); + $tabTmp2 = $iDb->select('insee_tabArrond', 'CHEFLIEU, ARTMAJ, NCC', "DEP='$dep' AND AR='$arrond'", false, MYSQL_ASSOC); + $nomSousPref = trim(strtr($tabTmp2[0]['ARTMAJ'],array('('=>'',')'=>'',' '=>'', "'"=>'')).' '.$tabTmp2[0]['NCC']); + unset($iDb); + $tabTmp = $iBodacc->getTribunauxParDep($dep); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='A' || $tribunal['triType']=='B') + { + $pref = levenshtein($tribunal['triNom'], 'PREFECTURE DE '.$nomSousPref); + $spref = levenshtein($tribunal['triNom'], 'SOUS PREFECTURE DE '.$nomSousPref); + + if ($tribunal['triType']=='B' && ($pref>7 || $spref>5)) continue; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType'].$typeP; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper( + preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + $tabRet[] = $competence; + + } + } + + } elseif ($type=='jal') { + + $tabTmp = $iBodacc->getJALparDep($dep); + foreach ($tabTmp as $i=>$comp) + { + $infos=''; + if (trim($comp['parution'])<>'') $infos.='Parution '.$comp['parution'].'. '; + if (trim($comp['aboAnnuel'])>0) $infos.='Abonnement Annuel : '.$comp['aboAnnuel'].' euros. '; + if (trim($comp['infos'])<>'') $infos.=$comp['infos']; + + $competence = new Competence(); + $competence->Id = 9000+$comp['id']*1; + $competence->IdSup = 0; + $competence->Code = ''; + $competence->Type = ''; + $competence->Nom = strtoupper($comp['nomJal']); + $competence->Siret = ''; + $competence->Adr = strtoupper($comp['adresse']); + $competence->AdrComp = ''; + $competence->CP = $comp['cp']; + $competence->Ville = strtoupper($comp['ville']); + $competence->CodeInsee = ''; + $competence->Tel = $comp['tel']; + $competence->Fax = $comp['fax']; + $competence->Web = $comp['siteWeb']; + $competence->Mail = $comp['email']; + $competence->Statut = 'Actif'; + $competence->DateCessation = ''; + $competence->Remarque = trim($infos); + $tabRet[] = $competence; + } + + } elseif ($type=='tri' || $type=='adm' || $type=='hui') { + + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if (//$tribunal['triType']=='C' || + $tribunal['triType']=='G'// || + /*$tribunal['triType']=='I'*/) { + $idCA = $tribunal['triIdSup']; + $codeTGI = $tribunal['triCode']; + $code = strtoupper(substr($tribunal['triCode'],0,3)); + } + debugLog('D',"Liste des compétences $type demandée pour la commune $codeInsee ($dep) : ". + "Type=".$tribunal['triType'].', '. + "Code=".$tribunal[$codeTGI],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($tribunal['triType']<>'E' && $tribunal['triType']<>'O' && + $tribunal['triType']<>'T' && $tribunal['triType']<>'R' && + $tribunal['triType']<>'N' && $tribunal['triType']<>'U' && + $tribunal['triType']<>'Z') + { + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper(Scores_Locale_String::cleanstring($tribunal['triNom'])); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(Scores_Locale_String::cleanstring(preg_replace('/ +/',' ', + $tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie']))); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + if ($tribunal['triNumGreffe']*1>0) + { + $competence->IdentifiantGreffe = $tribunal['triNumGreffe']; + } + $tabRet[] = $competence; + } + } + } + + if ($type=='adm') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getMandataires(array($idCA), false); + $tabRet = array(); + $nbAff=0; + foreach ($tabTmp as $i=>$tribunal) + { /** @todo A revoir Debut **/ + if (stripos($tribunal['tribunal'], $code)!==false || + stripos($tribunal['tribunal'], 'SAINT')!==false) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + $nbAff++; + } + } + if ($nbAff==0) + { + foreach ($tabTmp as $i=>$tribunal) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + } + }/** @todo A revoir Fin : Lier correctement les mandataires à un TI principal **/ + } + elseif ($type=='hui') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getHuissiers(array($codeTGI), false); + + $tabRet = array(); + $nbAff = 0; + foreach ($tabTmp as $i=>$tribunal) + { + $adr = $iInsee->structureVoie($tribunal['adresse']); + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($adr['num'].' '.$adr['adr_btq'].' '. + $adr['typeVoie'].' '.$adr['libVoie']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $adr['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation']; + $competence->Remarque = strtr($tribunal['contact'], + array( '
'=>', ', '
'=>', ', + '
'=>', ', + )); + $tabRet[] = $competence; + } + $nbComp = count($tabTmp); + debugLog('I',"$nbComp compétences $type trouvées pour le tribunal $codeTGI",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + elseif ($type=='cfe') + { + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='C' || $tribunal['triType']=='O' || + $tribunal['triType']=='T' || $tribunal['triType']=='R' || + $tribunal['triType']=='N' || $tribunal['triType']=='U' || + $tribunal['triType']=='Z') + { + if (strlen($tribunal['triCommentaire'])==32 && + strpos($tribunal['triCommentaire'], ' ')===false) + $remarque=''; + else $remarque=$tribunal['triCommentaire']; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '.$tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '.$tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $remarque; + $tabRet[] = $competence; + } + } + } + $this->wsLog('competences',$siret,$type.'/'.$codeInsee); + $output = new ListeCompetencesReturn(); + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + return $output; + } + + /** + * Retourne le statut du webservice + * @return StatusReturn + */ + public function status() + { + /* @todo tester les différents éléments qui peuvent conduire + * à un problème dans les services tel que la connexion à la + * base de données, l'accès FTP, l'accès HTTP, l'accès système de fichier + */ + + //Enregistrement des accès à la requête getIdentite + Zend_Registry::get('WsLogger')->info("status - ip:". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']. + ", hash:".$_SERVER['PHP_AUTH_PW']); + + $error = new StatusReturn(); + //Test connexion à la base de données + $db = new WDB('jo'); + if (!$db) { + $error->statusCode = 9000; + $error->statusMsg = $this->listError['9000']; + } else { + $error->statusCode = 3000; + $error->statusMsg = $this->listError['3000']; + } + return $error; + } + +} + +?> \ No newline at end of file diff --git a/library/WsScore/Entreprise/v0.4/Service.php b/library/WsScore/Entreprise/v0.4/Service.php new file mode 100644 index 00000000..aefd4fa8 --- /dev/null +++ b/library/WsScore/Entreprise/v0.4/Service.php @@ -0,0 +1,3307 @@ +authenticate(); + $this->permission('identite'); + + //Initialisation + if (empty($id)) { $id = 0; } + $forceVerif = false; + + $tdeb = microtime(1); + $ligne = date('YmdHis').";$siret;Ws->getIdentite Avant ..."; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->AncienSiege = $entrep['AncienSiege']; + $identite->AncienSiegeDateFin = $entrep['AncienSiegeDateFin']; + $identite->TribunalCode = prepareString($entrep['Tribunal']); + $identite->TribunalLib = prepareString($entrep['TribunalLib']); + //'NumGreffe' = $entrep['numGreffe'], // Ajouté le 4 08 2009 + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->ActifEco = $entrep['ActifEco']; // Etab éco actif, ajout le 28/04/2011 + $identite->ActifEcoDate = $entrep['ActifEcoDate']; // Date si éco inactif et jur actif + $identite->ActifEcoType = $entrep['ActifEcoType']; // vide ou NPAI ou PFER ou ECOF + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = prepareString($entrep['Tel']); + $identite->Fax = prepareString($entrep['Fax']); + $identite->Web = prepareString($entrep['Web']); + $identite->Mail = prepareString($entrep['Mail']); + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + + $geoInfos = new GeoInfos(); + $geoInfos->CUCS = $entrep['GeoInfos']['CUCS']; + $geoInfos->NCUCS = $entrep['GeoInfos']['NCUCS']; + $geoInfos->ZRU = $entrep['GeoInfos']['ZRU']; + $geoInfos->NZRU = $entrep['GeoInfos']['NZRU']; + $geoInfos->ZFU = $entrep['GeoInfos']['ZFU']; + $geoInfos->NZFU = $entrep['GeoInfos']['NZFU']; + $geoInfos->ZUS = $entrep['GeoInfos']['ZUS']; + $geoInfos->NZUS = $entrep['GeoInfos']['NZUS']; + $geoInfos->AFR = $entrep['GeoInfos']['AFR']; + $geoInfos->NAFR = $entrep['GeoInfos']['NAFR']; + $geoInfos->ZRR = $entrep['GeoInfos']['ZRR']; + $geoInfos->NZRR = $entrep['GeoInfos']['NZRR']; + $identite->GeoInfos = $geoInfos; + + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = prepareString($entrep['APRM_Lib']); + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = prepareString($entrep['CapitalType']); // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + //'DateMajRCS' = $entrep['DateMajRCS'], // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = prepareString($entrep['codeCommune']); + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->TrancheCAType = $entrep['TrancheCAType']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = prepareString($entrep['dir1Titre']); + $identite->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $identite->dir1DateFct = prepareString($entrep['dir1DateFct']); //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = prepareString($entrep['dir1LieuNaiss']); // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = prepareString($entrep['dir2Titre']); + $identite->dir2NomPrenom = prepareString($entrep['dir2NomPrenom']); + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = prepareString($entrep['dir2DateNaiss']); //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = prepareString($entrep['dir2LieuNaiss']); // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = prepareString($entrep['InfosIris']['libIris']); + $identite->InfosIris->typIris = prepareString($entrep['InfosIris']['typIris']); + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SurfaceMagasin = $entrep['ACTISURF']*1; // 0=N/D, 1=inf. à 300m2,2=300 à 400m2, 3=400 à 2500m2, 4=sup. à 2500m2 + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Millesime = $entrep['bilanAnnee']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->CAestime = $entrep['bilanFLestime']; + $identite->Bilan->Resultat = prepareString($entrep['bilanHN']); + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $tabAutreSiret = array(); + if (count($entrep['AutreSiret'])) { + foreach($entrep['AutreSiret'] as $type => $item) { + $autreSiret = new AutreSiret(); + $autreSiret->type = $type; + $autreSiret->siren = $item['siren']; + $autreSiret->nic = $item['nic']; + $autreSiret->apeEtab = $item['apeEtab']; + $autreSiret->codeEve = $item['codeEve']; + $autreSiret->dateEve = $item['dateEve']; + $autreSiret->adrL1 = $item['adrL1']; + $autreSiret->adrL2 = $item['adrL2']; + $autreSiret->adrL3 = $item['adrL3']; + $autreSiret->adrL4 = $item['adrL4']; + $autreSiret->adrL5 = $item['adrL5']; + $autreSiret->adrL6 = $item['adrL6']; + $autreSiret->adrL7 = $item['adrL7']; + $autreSiret->depCom = $item['depCom']; + $autreSiret->rivoli = $item['rivoli']; + $autreSiret->siege = $item['siege']; + $autreSiret->destinat = $item['destinat']; + $autreSiret->typEtab = $item['typeEtab']; + $autreSiret->origine = $item['origine']; + $tabAutreSiret[] = $autreSiret; + } + } + $identite->AutreSiret = $tabAutreSiret; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + //'importExport' = $entrep['importExport'], + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $identite->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + $duree=round(microtime(1)-$tdeb,3); + $ligne=date('YmdHis').";$siret;Ws->getIdentite APRES ($duree s) !!!"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + return $identite; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param integer $id Identifiant S&D de l'établissement + * @return IdentiteProcol Fiche d'identité de l'établissement + */ + public function getIdentiteProcol($siret, $id=0, $forceVerif=false) + { + $this->authenticate(); + $this->permission('idprocol'); + + debugLog('I',"Identité AGS demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if (intval($siren)==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identiteProcol = new IdentiteProcol(); + + //Element identite + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->TribunalCode = $entrep['Tribunal']; + $identite->TribunalLib = $entrep['TribunalLib']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = strtr($entrep['Nom'],'/*',' '); + $identite->Nom2 = $entrep['Nom2']; + $identite->NomLong = $entrep['nomLong']; // Ajouté le 4 08 2009 + $identite->NomCommercial = $entrep['NomCommercial']; // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = $entrep['Sigle']; + $identite->SigleLong = $entrep['sigleLong']; // Ajouté le 4 08 2009 + $identite->Enseigne = $entrep['Enseigne']; + $identite->EnseigneLong = $entrep['enseigneLong']; // Ajouté le 16 11 2010 + $identite->Adresse = $entrep['Adresse']; + $identite->Adresse2 = $entrep['Adresse2']; + $identite->AdresseNum = $entrep['AdresseNum']; + $identite->AdresseBtq = $entrep['AdresseBtq']; + $identite->AdresseVoie = $entrep['AdresseVoie']; + $identite->AdresseRue = $entrep['AdresseRue']; + $identite->CP = $entrep['CP']; + $identite->Ville = $entrep['Ville']; + $identite->Pays = $entrep['Pays']; // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = $entrep['Tel']; + $identite->Fax = $entrep['Fax']; + $identite->Web = $entrep['Web']; + $identite->Mail = $entrep['Mail']; + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->GeoInfos = $entrep['GeoInfos']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = $entrep['APRM_Lib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = $entrep['CapitalType']; // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = $entrep['codeCommune']; + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = $entrep['dir1Titre']; + $identite->dir1NomPrenom = $entrep['dir1NomPrenom']; + $identite->dir1DateFct = $entrep['dir1DateFct']; //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = $entrep['dir1LieuNaiss']; // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = $entrep['dir2Titre']; + $identite->dir2NomPrenom = $entrep['dir2NomPrenom']; + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = $entrep['dir2DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = $entrep['dir2LieuNaiss']; // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = $entrep['InfosIris']['libIris']; + $identite->InfosIris->typIris = $entrep['InfosIris']['typIris']; + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = $entrep['bilanHN']; + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = $entrep2['apen4_lib']; + $identite->Naf4EtabLib = $entrep2['apet4_lib']; + } + + $identiteProcol->Identite = $identite; + + //Eléments annonces légales + $anns = $this->getAnnonces($siren, 1); + $tabRetAnn = $tabLastEven = array(); + $anns = $anns->result; + $tribunalProcol = false; + foreach ($anns as $nb=>$ann) { + $tabRetEven = array(); + foreach ($ann->evenements as $tabEven) { + // On ignore les éléments suivants + if ($tabEven->CodeEven>=7000) continue; + if ($tabEven->CodeEven>=4000 && $tabEven->CodeEven<=4999) continue; + + // Par défaut, on force le tribunal à celui présent dans la dernière annonce de Procol + if ($tribunalProcol==false && $tabEven->CodeEven>=1000 && $tabEven->CodeEven<2000 && $ann->BodaccCode=='BODA') { + $identiteProcol->TribunalCode = $ann->TribunalCode; + $identiteProcol->TribunalLib = prepareString($ann->Tribunal); + $tribunalProcol=true; + } + + // On ne prend que le dernier élément de chaque type + if (in_array($tabEven->CodeEven, $tabLastEven)) continue; + + $tabLastEven[] = $tabEven->CodeEven; + $tabRetEven[] = $tabEven; + } + + if (count($tabRetEven)>0) { + $annonce = new Annonce(); + $annonce->id = $ann->id; + $annonce->BodaccCode = $ann->BodaccCode; + $annonce->BodaccNum = $ann->BodaccNum; + $annonce->NumAnnonce = $ann->NumAnnonce; + $annonce->DateParution = $ann->DateParution; //@todo : date + $annonce->Departement = $ann->Departement; + $annonce->Tribunal = $ann->Tribunal; + $annonce->TribunalCode = $ann->TribunalCode; + $annonce->TribunalSiret = $ann->TribunalSiret; + $annonce->Rubrique = $ann->Rubrique; + $annonce->typeAnnonce = $ann->typeAnnonce; + $annonce->texteRectificatif = $ann->texteRectificatif; + $annonce->texteAnnonce = utf8_encode($ann->texteAnnonce); + $annonce->dateEffet = $ann->dateEffet; //@todo : date + $annonce->dateJugement = $ann->dateJugement; //@todo : date + $annonce->dateInsertionSD = $ann->dateInsertionSD; //@todo : date + $annonce->evenements = $tabRetEven; + $annonce->Lien_Annonce_Pdf = $ann->Lien_Annonce_Pdf; + $tabRetAnn[] = $annonce; + } + } + $identiteProcol->Annonces = $tabRetAnn; + + $iRncs = new MRncs(); + if ($entrep['Siege']==1 || $entrep['Siege']==11) { + $identiteProcol->LibTypeEtab = 'Etablissement Siege'; + } else { + $tabEtabRncs = $iRncs->getIdentiteEtab($siren, $entrep['Nic']); + if ($tabEtabRncs['Siege']==2) $identiteProcol->LibTypeEtab = 'Etablissement Principal'; + elseif ($tabEtabRncs['Siege']==1) $identiteProcol->LibTypeEtab = 'Etablissement Complementaire'; + elseif ($tabEtabRncs['Siege']==0) $identiteProcol->LibTypeEtab = 'Etablissement Secondaire'; + } + + //@todo + $tabJuge = $iRncs->getIntervenants($siren); + $tabDepots=array(); + foreach ($tabJuge as $iDepot=>$depot) { + $organe = new Organe(); + $organe->codEven = $depot['codEven']; + $organe->libEven = prepareString($depot['libEven']); + $organe->dateEffet = $depot['dateEffet']; + $organe->admcode = $depot['admcode']; + $organe->admfonction = prepareString($depot['admfonction']); + $organe->admnom = prepareString($depot['admnom']); + $organe->admadrNum = $depot['admadrNum']; + $organe->admadrInd = $depot['admadrInd']; + $organe->admadrVoie = $depot['admadrVoie']; // @todo : adm1adr1, adm1adr2, adm1adr3, + $organe->admadrCP = $depot['admadrCP']; + $organe->admadrVille = $depot['admadrVille']; + $tabDepots[] = $organe; + } + $identiteProcol->Organes = $tabDepots; + + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, 1); + $nbA = count($tabA); + $tabAct = array(); + foreach ($tabA as $i=>$lien) { + $liens = new Actionnaire(); + $liens->Pmin = $lien['Pmin']; + $liens->MajMin = $lien['MajMin']; + $liens->RaisonSociale = $lien['RaisonSociale']; + $liens->Pays = $lien['Pays']; + $liens->Siren = $lien['Siren']; + $liens->Actif = $lien['Actif']; + $tabAct[] = $liens; + } + $identiteProcol->Actionnaires = $tabAct; + + $iGreffes = new MGreffes(); + $tabActes = $iGreffes->getListeActes($siren); + + $identiteProcol->StatutsModifDepot = $identiteProcol->StatutsModif = '0000-00-00'; + foreach ($tabActes as $i=>$acte) { + if ('_'.$acte['acte_type']=='_04') { // STATUTS CONSTITUTIFS + $identiteProcol->StatutsConstDepot = $acte['depot_date']; // => 1997-12-18 + $identiteProcol->StatutsConst = $acte['acte_date']; // => 1997-11-13 + break; + } elseif (in_array('_'.$acte['acte_type'], array( + //'_04', // STATUTS CONSTITUTIFS + '_06', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_07', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_08', // STATUTS A JOUR ET DECLARATION DE CONFORMITE 9 0000-00-00 2009-09-02 17:05:55 + '_09', // STATUTS APRES TRANSFERT DE SIEGE 9 0000-00-00 2009-09-02 17:05:55 + '_A1', // STATUTS 9 0000-00-00 2009-09-02 17:05:55 + '_AH', // AVENANT AUX STATUTS + ))) { + // On ne prend que la dernière modif + if ($identiteProcol->StatutsModifDepot=='0000-00-00' && $identiteProcol->StatutsModif=='0000-00-00') { + $identiteProcol->StatutsModifDepot = $acte['depot_date'];// => 1997-12-18 + $identiteProcol->StatutsModif = $acte['acte_date']; // => 1997-11-13 + } + } + } + + /** Y a t il eu des informations relatives à une cession ? **/ + $tabCes = $iGreffes->getInfosCessions($siren); + if ($tabCes) { + $identiteProcol->CessionJugeLib = $tabCes['cessJuge']; + $identiteProcol->CessionJugeDate = $tabCes['cessDateJuge']; + $identiteProcol->CessionAvisBodac = $tabCes['cessDateBod']; + $identiteProcol->CessionInvenDate = $tabCes['cessDateInv']; + $identiteProcol->CessionCAdeclare = $tabCes['cessCAdec']; + $identiteProcol->CessionEffectif = $tabCes['cessEffectif']; + $identiteProcol->CessionDesc = $tabCes['cessDesc']; + $identiteProcol->CessionDescDate = $tabCes['cessDateDesc']; + $identiteProcol->CessionOffreDate = $tabCes['cessDateLim']; + $identiteProcol->CessionMandataire = $tabCes['cessMand']; + } + + //sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug $siren", print_r($tabRet,true)) ; + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + return $identiteProcol; + } + + /** + * Retourne les liens financiers pour une entreprise. + * + * @param string $siren Siren de l'entreprise + * @param boolean $actifsUniquement Uniquement les liens Actifs + * @return LiensReturn + */ + public function getLiens($siren, $actifsUniquement = true) + { + $this->authenticate(); + $this->permission('liens'); + + //Initialisation + if (empty($actifsUniquement)) { $actifsUniquement = true; } + $tabAct = $tabPar = array(); + + debugLog('I',"Liens entreprises demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, $actifsUniquement); + $nbA = count($tabA); + $tabAct = array(); + if ($nbA > 0) { + foreach ($tabA as $i => $lien) { + $actionnaire = new Actionnaire(); + $actionnaire->Pmin = $lien['Pmin']; + $actionnaire->MajMin = $lien['MajMin']; + $actionnaire->RaisonSociale = $lien['RaisonSociale']; + $actionnaire->TypeEntrep = $lien['TypeEntrep']; + $actionnaire->Pays = $lien['Pays']; + $actionnaire->Siren = $lien['Siren']; + $actionnaire->Actif = $lien['Actif']; + $actionnaire->Source = $lien['Source']; + $actionnaire->DateLien = $lien['DateLien']; //@todo : date + $actionnaire->DateMaj = $lien['DateMaj']; //@todo : date + $tabAct[] = $actionnaire; + } + } + debugLog('W', "$nbA actionnaires pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $tabP = $mLiens->getParticipations($siren, $actifsUniquement); + $nbP = count($tabP); + $tabPar = array(); + if ($nbP > 0) { + foreach ($tabP as $i => $lien) { + $participation = new Participation(); + $participation->Pmin = $lien['Pmin']; + $participation->MajMin = $lien['MajMin']; + $participation->RaisonSociale = $lien['RaisonSociale']; + $participation->TypeEntrep = $lien['TypeEntrep']; + $participation->Pays = $lien['Pays']; + $participation->Siren = $lien['Siren']; + $participation->Actif = $lien['Actif']; + $participation->Source = $lien['Source']; + $participation->DateLien = $lien['DateLien']; //@todo : date + $participation->DateMaj = $lien['DateMaj']; //@todo : date + $tabPar[] = $participation; + } + } + debugLog('W', "$nbP participations pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('liens',$siren); + + $output = new LiensReturn(); + $output->actionnaires = $tabAct; + $output->participations = $tabPar; + return $output; + } + + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, Néant=Tous + * @param integer $position + * @param integer $nbRep + * + * @return ListeEtablissementsReturn + */ + public function getListeEtablissements($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('etablissements'); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (!in_array($actif, array(0,1))) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + $departement = $dep; + + debugLog('I',"Liste des établissements demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + $result = array(); + if (count($etabs)>0) + { + foreach ($etabs as $nb => $etab) + { + $etablissement = new Etablissement(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + $result[] = $etablissement; + } + } + debugLog('I', "Nb Etablissements retournés ($departement, $actif) = ". count($result), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('etablissements',$siren); + $output = new ListeEtablissementsReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } + + /** + * Retourne l'ensemble des informations identitaires des dirigeants de l'entreprise + * + * @param string $siren Siren de l'entreprise + * @param bool $histo Afficher l'historique des dirigeants + * @return DirigeantsReturn Liste des dirigeants actifs de l'entreprise + */ + public function getDirigeants( $siren , $histo = false) + { + $this->authenticate(); + $this->permission('dirigeants'); + + //Initialisation + if (empty($histo)) { $histo = false; } + + //Zend_Registry::get('WsLogger')->info('HISTO : '.$histo); + + debugLog('I',"Dirigeants demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeants($siren, $histo); + //debugLog('W', print_r($dirs, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $dirigeant = new Dirigeant(); + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Titre = $dir['Titre']; + $dirigeant->Societe = $dir['Societe']; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + $dirigeant->NomUsage = $dir['NomUsage']; + $dirigeant->NaissDate = $dir['NaissDate']; //@todo : date + $dirigeant->NaissVille = $dir['NaissVille']; + $dirigeant->NaissDepPays = $dir['NaissDepPays']; + $dirigeant->Ancien = $dir['Ancien']; + $dirigeant->DateFct = $dir['DateFct']; //@todo : date + $liste[] = $dirigeant; + } + $this->wsLog('dirigeants',$siren,$option); + debugLog('I', 'Nb Dirigeants retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $output = new DirigeantsReturn(); + $output->result = $liste; + return $output; + } + + /** + * Retourne la liste des annonces légales relative à une entreprise + * + * @todo Revoir cette fonction pour la faire marcher avec les associations + * + * @param string $siren Siren de l'entreprise + * @param integer $filtre 0=Pas de Filtre, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param integer $position + * @param integer $nbRep + * @return AnnoncesReturn + */ + public function getAnnonces($siren, $filtre = 0, $idAnn = '', $position = 0, $nbRep = 100) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($filtre)) { $filtre = 0; } + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = array(); + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + /* + if ($siren>100 && $filtre==3) $asso=true; + else { + $asso=false; + $tabIdentite=$this->iInsee->getIdentiteLight($siren); + if ($tabIdentite['FJ']>90 && $tabIdentite['FJ']<94 || + $tabIdentite['FJ']>9000 && $tabIdentite['FJ']<9400) $asso=true; + }*/ + if ($idAnn=='') { + $anns=$iInsee->getAnnoncesLegales($siren); + $annsB=$iInsee->getAnnoncesBalo($siren); + $annsA=$iInsee->getAnnoncesAsso($siren); + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + } elseif ($filtre==1) + $anns=$iInsee->getAnnoncesLegales($siren, $idAnn); + elseif ($filtre==2) + $annsB=$iInsee->getAnnoncesBalo($siren, $idAnn); + elseif ($filtre==3) + $annsA=$iInsee->getAnnoncesAsso($siren, $idAnn); + elseif ($filtre==4) + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($anns) && empty($annsB) && empty($annsA) && empty($annsM)) + { + debugLog('W', "Aucune annonce pour le siren $siren (source=$filtre, id=$idAnn)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant B '.$siren.' '.$idAnn; + } + else + { + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = prepareString($ann['texteAnnonce']); + $annonce->libFJ = $ann['libFJ']; + $annonce->codFJ = $ann['codFJ']; + $annonce->capital = $ann['capital']; + $annonce->capitalDev = $ann['capitalDev']; + + $annonce->raisonSociale = $ann['raisonSociale']; + $annonce->nomCommercial = $ann['nomCommercial']; + $annonce->sigle = $ann['sigle']; + $annonce->adresse = $ann['adresse']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + + if (is_array($annsB)) + { + foreach ($annsB as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsA)) + { + foreach ($annsA as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsM)) + { + foreach ($annsM as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + } + + $nbReponses = count($liste); + if ($nbReponses>0){ + //$liste = array_slice($liste, $position, $nbRep); + } + debugLog('I', "Nb Annonces $filtre retournées pour $siren (source=$filtre, id=$idAnn) = ". count($liste), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('annonces',$siren,$filtre.'/'.$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Evaluation indiScore d'une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic Nic de l'établissement + * @param integer $niveau Niveau des commentaires + * @param bool $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence de la mise en Surveillance + * @param integer $encours Si $plus=true, encours client demandé lors de la mise en Surveillance + * @param string $email Si $plus=true, email client pour la mise en surveillance + * @return Indiscore + */ + public function getIndiScore($siren, $nic=0, $niveau=2, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + + //Initialisation + $accesDist = true; + if (empty($nic)) { $nic = 0; } + if (empty($niveau)) { $niveau = 2; } + if (empty($plus)) { $plus = false; } + if ( !in_array($niveau, array(0,1,2,3,4,5)) ) { $niveau = 2; } + + $perm = false; + switch($niveau) { + case 1: $perms = array('indiscore', 'indiscorep'); break; + case 2: $perms = array('indiscore2', 'indiscore2p'); break; + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + } + + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesDist, $niveau); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new Indiscore(); + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $output->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $output->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $output->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $output->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $output->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $output->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + foreach($value as $comment) { + $tab[] = Scores_Locale_String::fixEncoding($comment); + } + $output->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $output->tabVariables = $variables; + + } elseif ($key=='Bilans') { + + $tab = array(); + foreach($value as $item) + { + $objet = new IndiscoreBilans(); + $objet->Millesime = $item['Millesime']; + $objet->FraisPerso = $item['FraisPerso']; + $objet->CA = $item['CA']; + $objet->EBE = $item['EBE']; + $objet->TxInvest = $item['TxInvest']; + $objet->TxEndett = $item['TxEndett']; + $objet->DettesCT = $item['DettesCT']; + $objet->FraisFi = $item['FraisFi']; + $objet->BFR = $item['BFR']; + $objet->FR = $item['FR']; + $objet->FondsPr = $item['FondsPr']; + $objet->DelaiCli = $item['DelaiCli']; + $objet->DelaiFour = $item['DelaiFour']; + $tab[] = $objet; + } + $output->$key = $tab; + } else { + $output->$key = $value; + } + } + + if ($plus) { + if (empty($ref)) $ref='Indiscore+'; + if (empty($email)) $email=$this->User->email; + $this->setSurveillance($siren, $email, $ref, 'privileges'); + $this->setSurveillance($siren, $email, $ref, 'score', false, $encours); + if ($this->User->idClient==89) + $this->setSurveillance($siren, $email, $ref, 'annonces'); + $this->wsLog('indiscore+',$siren); + } else + $this->wsLog('indiscore',$siren); + return $output; + } + + /** + * Liste de tous les évènements enregistrés à l'INSEE pour une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic + * @param integer $position + * @param integer $nbRep + * @return InseeReturn + **/ + public function getListeEvenements($siren, $nic=0, $position=0, $nbRep=1000) + { + $this->authenticate(); + $this->permission('eveninsee'); + + //Initialisation + if (empty($nic)) { $nic = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep) || $nbRep>1000) { $nbRep = 1000; } + + debugLog('I',"Liste des évènements pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $evens = $iInsee->getEvenements($siren, $nic, $position, $nbRep); + $tabRet = array(); + if (count($evens)>0) { + foreach ($evens as $key => $row) { + $date[$key] = $row['dateMAJ']; + } + array_multisort($date, SORT_DESC, $evens); + foreach ($evens as $nb=>$even) { + $iEven = new InseeEven(); + $iEven->Nic = $even['nic']; + $iEven->Siege = $even['siege']; + $iEven->SiretAss = $even['siretAssocie']; + $iEven->TypeSiretAss = $even['typeSiretAss']; + $iEven->EvenCode = $even['codeEven']; + $iEven->EvenLib = $even['libEven']; + $iEven->EvenLibDet = $even['libEvenDet']; + $iEven->EvenDate = $even['dateEven']; //@todo : date + $iEven->DateInfo = $even['dateMAJ']; //@todo : date + $tabRet[] = $iEven; + } + } + + debugLog('I', 'Nb évènements retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('evenements',$siren); + $output = new InseeReturn(); + $output->nbReponses = count($tabRet); // @todo : retrouver le nombre total d'évenements + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + empty($entCriteres->actif) ? false : $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + + /** + * Recherche d'entreprise par dirigeants + * @param DirigeantCriteres $criteres + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchDirReturn + */ + public function searchDir($criteres, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + $nom = $criteres->nom; + $prenom = $criteres->prenom; + $dateNaiss = $criteres->dateNaiss; + $lieuNaiss = $criteres->lieuNaiss; + $pertinence = $criteres->pertinence; + + debugLog('I',"Recherche Dirigeant de $nom, $prenom, $dateNaiss, $lieuNaiss (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($prenom)) $prenom = ''; + if (empty($dateNaiss)) $dateNaiss = ''; + if (empty($lieuNaiss)) $lieuNaiss = ''; + if (empty($pertinence)) $pertinence = false; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheDir($nom, $prenom, '', $dateNaiss, $lieuNaiss, $deb, $nbRep, $maxRep, $pertinence); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $item = new EntrepriseDirItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + + // Dirigeant + $item->DirRs = prepareString($etab['DirRs']); + $item->DirNom = prepareString($etab['DirNom']); + $item->DirPrenom = prepareString($etab['DirPrenom']); + $item->DirNomUsage = prepareString($etab['DirNomUsage']); + $item->DirDateEffet = $etab['DirDateEffet']; + $item->DirFonction = prepareString($etab['DirFonction']); + $item->DirDepart = $etab['DirDepart']; + $tabRet[] = $item; + } + + if ($etabs['nbReponses']==0){ + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + $search = new SearchDirReturn(); + $search->nbReponses = $etabs['nbReponses']; + $search->nbReponsesTotal = $etabs['nbReponsesTotal']; + $search->result = $tabRet; + return $search; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche au sièges (si true) + * @param boolean $actif Limitation aux établissements actifs (si true) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=false, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + if ( $actif ) { + $actif = 1; + } else { + $actif = 2; + } + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + } + + $fp=@fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param integer $dep Département + * @return SearchReturn + */ + public function searchSiren($siret, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep); + if (count($rep['reponses'])==0 && $dep>0) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = utf8_encode(prepareString(utf8_decode($etab['FJLib']))); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + + + + /** + * Retourne la fiche d'identité simplifié d'une entreprise avec son numéro de TVA. + * + * @param string $siren Identifiant Siren de l'entreprise + * @return TvaReturn + */ + public function getTVA($siren) + { + $this->authenticate(); + + //Initialisation + $siren = trim($siren); + debugLog('I',"TVA demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren); + debugLog('I', "Après getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep)) + { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + debugLog('I', "Avant MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iTva = new MTva($siren); + if ($iTva->vatDefined) $tva=$iTva->vatNumber; + else $tva='N/A'; + debugLog('I', "Après MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new TvaReturn(); + $output->id = $entrep['id']; + $output->AutreId = $entrep['AutreId']; + $output->Nom = $entrep['Nom']; + $output->Sigle = $entrep['Sigle']; + $output->Enseigne = $entrep['Enseigne']; + $output->Adresse = $entrep['Adresse']; + $output->Adresse2 = $entrep['Adresse2']; + $output->CP = $entrep['CP']; + $output->Ville = $entrep['Ville']; + $output->Siren = $entrep['Siren']; + $output->Tva = $tva; + + debugLog('I', "TVA retournée = $tva (".$entrep['Nom'].')', __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('tva',$siren); + + return $output; + } + + /** + * Retourne tout ou patie des informations règlementées sur l'entreprise + * + * @param string $siren SIREN de l'entreprise + * @param mixed $id Id du communiqué + * @return InfosRegReturn + */ + public function getInfosReg( $siren, $id = false ) + { + $this->authenticate(); + $this->permission('infosreg'); + + //Initialisation + if (empty($id)) $id = false; + $tabRet = array(); + $siren = substr($siren,0,9); + + debugLog('I',"Infos règlementées demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + $iBourse = new MBourse($siren); + $anns = $iBourse->getInfosReg($siren, $id); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ( empty($anns) ){ + debugLog('W', "Aucune info règlementée pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ($id == false) { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } else { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->communique = $ann['communique']; + $infos->communiqueHtml = $ann['communiqueHtml']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } + } + debugLog('I', 'Nb infos retournés = '. count($anns), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('infosreg',$siren,$id); + $output = new InfosRegReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les informations boursières de l'entreprise + * @param string $siren SIREN de l'entreprise + * @return InfosBourse + */ + public function getInfosBourse($siren) + { + $this->authenticate(); + $this->permission('bourse'); + + //Initialisation + $error = new ErrorType(); + debugLog('I',"Infos bourse demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $siren = substr($siren,0,9); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($bourse)) { + debugLog('W', "Aucune info bourse pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + $result = new InfosBourse(); + $result->Siren = $bourse['siren']; + $result->RaisonSociale = $bourse['raisonSociale']; + $result->Adresse = $bourse['adresse']; + $result->Effectif = $bourse['effectif']; + $result->CodeSicovam = $bourse['code_sicovam']; + $result->CodeMnemo = $bourse['code_mnemo']; + $result->CodeBloomberg = $bourse['code_bloomberg']; + $result->CodeDatastream = $bourse['code_datastream']; + $result->Isin = $bourse['code_isin']; + $result->CodeRic = $bourse['code_ric']; + $result->DateIntroduction = $bourse['dateIntroduction']; //@todo : date + $result->DateDerAG = $bourse['dateDerAG']; //@todo : date + $result->DateRadiation = $bourse['dateRadiation']; //@todo : date + $result->AutreIsin = $bourse['autre_isin']; + $result->EligibleSRD = $bourse['eligibleSRD']; + $result->EligiblePEA = $bourse['eligiblePEA']; + $result->Tel = $bourse['tel1']; + $result->Tel2 = $bourse['tel2']; + $result->Fax = $bourse['fax1']; + $result->Fax2 = $bourse['fax2']; + $result->Web = $bourse['web']; + $result->Mail = $bourse['mail']; + + $result->Marche = $bourse['marche']; + $result->Description = $bourse['description']; + $result->Secteur = $bourse['secteur']; + $result->Activite = $bourse['activite']; + $result->ActiviteDet = $bourse['activiteDet']; + + $result->placeCotation = $bourse['placeCotation']; + $result->nombreTitres = $bourse['nombreTitres']; + $result->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $result->derCoursDate = $bourse['date']; //@todo : date + $result->derCoursCloture = $bourse['close']; + $result->derCoursOuverture = $bourse['open']; + $result->derCoursPlusHaut = $bourse['high']; + $result->derCoursPlusBas = $bourse['low']; + + $result->derCoursVolume = $bourse['volume']; + $result->coursMin = $bourse['coursMin']; + $result->coursMoy = $bourse['coursMoy']; + $result->coursMax = $bourse['coursMax']; + + $this->wsLog('bourse',$siren,$id); + return $result; + } + + /** + * Ajout d'une surveillance + * + * @param string $siret Siret/Siren + * @param string $email Adresse email du client + * @param string $ref Référence de la surveillance + * @param string $source Type de source en surveillance (insee, annonces, bilans, actes, privileges, score, dirigeants) + * @param boolean $delete Suppression de la ligne + * @param integer $encoursClient Encours demandé par le client + * @return SetSurveillanceReturn + */ + public function setSurveillance($siret, $email, $ref='', $source='annonces', $delete=false, $encoursClient=0) + { + $this->authenticate(); + $source = strtolower($source); + switch ($source) { + case 'insee': + $this->permission('survinsee'); + break; + case 'bilans': + $this->permission('survbilan'); + break; + case 'actes': + $this->permission('survactes'); + break; + case 'privileges': + $this->permission('survpriv'); + break; + case 'dirigeants': + $this->permission('survdirigeants'); + break; + case 'score': + $this->permission('survscore'); + break; + case 'annonces': + default: + $this->permission('survannonce'); + break; + } + + //Initialisation + if (empty($ref)) $ref = ''; + if (empty($delete)) $delete = false; + if (empty($encoursClient)) $encoursClient = false; + $result = false; + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + debugLog('I',"setSurveillances(siret=$siret, email=$email, ref=$ref, source=$source, delete=$delete)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic); + $iDb = new WDB(); + $login = $this->User->login; + switch ($source) { + case 'insee': + case 'annonces': + case 'bilans': + case 'actes': + case 'privileges': + case 'dirigeants': $encoursClient=0; break; + case 'score': $encoursClient=$encoursClient*1; break; + default: $source='annonces'; break; + } + + if ($delete) { + + $tabUpdate = array('dateSuppr'=>date('Y-m-d')); + $result = $iDb->update('surveillances_site', + $tabUpdate, + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'" + ); + + } else { + + $tabUpdate = array( + 'source' => $source, + 'login' => $login, + 'email' => $email, + 'siren' => $siren, + 'nic' => $nic, + 'ref' => $ref, + 'encoursClient' => $encoursClient, + 'rs' => $tabIdentite['Nom'], + 'cp' => $tabIdentite['CP'], + 'ville' => $tabIdentite['Ville'], + 'dateAjout'=>date('Y-m-d'), + 'dateSuppr'=>0, + ); + $result = $iDb->insert('surveillances_site', $tabUpdate); + //Si l'insertion echoue, alors c'est une mise à jour + if ( !$result ) { + $result = $iDb->update('surveillances_site', + $tabUpdate, + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'" + ); + } + } + $output = new SetSurveillanceReturn(); + $output->result = $result; + return $output; + } + + /** + * getSurveillances + * @param SurveillancesFiltre $filtre + * @param integer $deb + * @param integer $nbRep + * @return SurveillancesReturn + */ + public function getSurveillances($filtre, $position=0, $nbRep=100) + { + $this->authenticate(); + $this->permission('survliste'); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 100; + + $error = new ErrorType(); + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + + $tri = strtolower(trim($filtre->tri)); + switch ($tri){ + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + $iDb = new WDB(); + $login = $this->User->login; + + if ($filtre->detail) { + $strSelect = 'source, email, siren, nic, ref, dateAjout, encoursClient, rs, cp, ville, dateDerEnvoi'; + } else { + $strSelect = 'source, email, siren, nic, ref, dateAjout, dateDerEnvoi'; + } + if ($filtre->source!='') $strSource = " AND source='$filtre->source' "; + else $strSource = ''; + + if ($siren>0) $strSiren = " AND siren=$siren "; + else $strSiren = ''; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', "login='$login' AND dateSuppr=0 $strSiren $strSource", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site', $strSelect, "login='$login' AND dateSuppr=0 $strSiren $strSource $orderBy LIMIT $position,$nbRep", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv){ + if (!$filtre->detail){ + $liste = new Surveillance(); + $liste->source = $tabSurv['source']; + $liste->email = $tabSurv['email']; + $liste->siren = $tabSurv['siren']; + $liste->nic = $tabSurv['nic']; + $liste->ref = utf8_decode($tabSurv['ref']); + $liste->dateAjout = $tabSurv['dateAjout']; //@todo : date + $liste->dateDerEnvoi = $tabSurv['dateDerEnvoi']; //@todo : date + $tabRet[] = $liste; + } else { + if (trim($tabSurv['rs'])<>'') { + $rs = $tabSurv['rs']; + $cp = $tabSurv['cp']; + $ville = $tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs = $tabIdentite['Nom']; + $cp = $tabIdentite['CP']; + $ville = $tabIdentite['Ville']; + $iDb->update('surveillances_site', array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic']." $strSource", + false + ); + } + $liste = new Surveillance(); + $liste->source = $tabSurv['source']; + $liste->email = $tabSurv['email']; + $liste->siren = $tabSurv['siren']; + $liste->nic = $tabSurv['nic']; + $liste->ref = utf8_decode($tabSurv['ref']); + $liste->dateAjout = $tabSurv['dateAjout']; //@todo : date + $liste->encoursClient = $tabSurv['encoursClient']; + $liste->rs = $rs; + $liste->cp = $cp; + $liste->ville = $ville; + $liste->dateDerEnvoi = $tabSurv['dateDerEnvoi']; //@todo : date + $tabRet[] = $liste; + } + } + $output = new SurveillancesReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne le bilan correspondant au siren, à l'exercice et au formalisme demandé + * + * @param string $siren Siren de l'entreprise + * @param string $millesime Date du bilan au format AAAAMMJJ + * @param string $typeBilan N:Réel Normal, S:Réel Simplifié, C:Consolidé + * @param string $ref Référence S&D obligatoire + * @return Bilan + */ + public function getBilan($siren, $millesime, $typeBilan='N', $ref='') + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + if (empty($typeBilan)) { $typeBilan = 'N'; } + if (empty($ref)) { $ref = ''; } + + debugLog('I',"Bilan $millesime $typeBilan demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $millesime = WDate::dateT('Ymd','d/m/Y',$millesime); + $mBil = new MBilans($siren); + $tabBilan = $mBil->getBilan($millesime, $typeBilan, $ref, true); + + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($tabBilan as $key => $value){ + if(!in_array($key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $key; + $resultPoste->val = $value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$key = $value; + } + } + $this->wsLog('bilan',$siren, $millesime.':'.$typeBilan.':'.$ref); + $resultBilan->POSTES = $tabPoste; + return $resultBilan; + } + + /** + * Retourne la liste des bilans disponible pour une entreprise + * + * @param string $siren Siren de l'entreprise + * @return ListeBilansReturn + */ + public function getListeBilans($siren) + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + $tabRet = array(); + debugLog('I',"Liste des Bilans demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + foreach($tabBilans as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + + debugLog('I', 'Nb Bilans retournés = '. count($tabBilans), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('listebilans', $siren); + $output = new ListeBilansReturn(); + $output->nbReponses = count($tabRet); + $output->result = $tabRet; + return $output; + } + + /** + * Vérifie si un siren existe en base Scores & Décisions + * @param string $siren Siren de l'entité + * @return boolean + */ + public function isSirenExistant($siren) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $siren = trim(substr($siren,0,9)); + $result = false; + debugLog('I',"Siren existant demandée pour siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->sirenExiste($siren); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = false; + } else { + debugLog('I', "Siren $siren présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + $this->wsLog('sirenExiste',$siren); + return $result; + } + + /** + * Retourne une annonce en fonction de sa référence + * + * @param string $siren Siren de l'entreprise + * @param string $dateAnnee + * @param integer $numParution + * @param integer $numAnnonce + * @return RechercheAnnonceReturn + */ + public function rechercheAnnonce($source, $dateAnnee, $numParution, $numAnnonce) + { + $this->authenticate(); + $this->permission('histobodacc'); + + //Initialisation + $tabRet = array(); + + debugLog('I',"Annonce précise demandée pour $source, $dateAnnee, $numParution, $numAnnonce",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($dateAnnee)==4) $annee = $dateAnnee; + else $annee = substr($dateAnnee,0,4); + + $iDb = new WDB('jo'); + + switch (strtoupper($source)) + { + case 'BODA': + case 'BODB': + case 'BODC': + $lettre = substr(strtoupper($source),3,1); + if ($annee<2005) { + if ($lettre=='A'){ $numJAL=1; } + elseif ($lettre=='B'){ $numJAL=200; } + else{ break; } + $anneeDeb = $annee.'0101'; + $anneeFin = $annee.'1231'; + $res = $iDb->select('historiques.entrep e, texte t', + "$annee AS Annee_Parution, e.NOBOD AS Num_Parution, e.NOANN AS Num_Annonce, e.NOPAGE AS Num_Page, e.`DATE` AS Date_Parution, e.DEPT AS Departement, e.CODTRI AS Tribunal_Code, 'I' AS typeAnnonce, CONCAT(e.NOANN,' - ',t.annonceTxt) AS annonce", + "e.JAL=$numJAL AND e.NOBOD=$numParution AND e.`DATE` BETWEEN $anneeDeb AND $anneeFin AND e.NOANN=$numAnnonce AND e.ANBASE=t.annonceNum", false, MYSQL_ASSOC); + } else { + $res = $iDb->select('bodacc', + 'Bodacc_Annee_Parution AS Annee_Parution, Bodacc_Num AS Num_Parution, Num_Annonce, Bodacc_Page AS Num_Page, Bodacc_Date_Parution AS Date_Parution, Tribunal_Dept AS Departement, Tribunal_Code, typeAnnonce, annonce', + "Bodacc_Code='$lettre' AND Bodacc_Annee_Parution=$annee AND Bodacc_Num=$numParution AND Num_Annonce=$numAnnonce", false, MYSQL_ASSOC); + } + break; + case 'ASSO': + $res = $iDb->select('asso', + 'YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Annonce, pageDeb AS Num_Page, Date_Parution, Departement, codTribunal AS Tribunal_Code, typeAnnonce, Annonce_Html AS annonce', "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$annee".sprintf('%04d', $numParution)." AND Num_Annonce=$numAnnonce", + false, MYSQL_ASSOC); + break; + case 'BALO': + $res = $iDb->select('balo', + "YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Affaire AS Num_Annonce, '' AS Num_Page, Date_Parution, '' AS Departement, '' AS Tribunal_Code, 'Insertion' AS typeAnnonce, Annonce_Html AS annonce", "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$numParution AND Num_Affaire=$numAnnonce", + false, MYSQL_ASSOC); + break; + } + + if (count($res)>0) + { + $iBodacc = new MBodacc(); + foreach ($res as $i => $etab) + { + $annonces = new AnnonceItem(); + $annonces->Annee_Parution = $etab['Annee_Parution']; + $annonces->Num_Parution = $etab['Num_Parution']; + $annonces->Num_Annonce = $etab['Num_Annonce']; + $annonces->Num_Page = $etab['Num_Page']; + $annonces->Date_Parution = $etab['Date_Parution']; //@todo : date + $annonces->Departement = $etab['Departement']; + $annonces->Tribunal_Code = $etab['Tribunal_Code']; + $annonces->Tribunal = $iBodacc->getTribunalNom($etab['Tribunal_Code']); + $annonces->Type_Annonce = $etab['typeAnnonce']; + $annonces->Annonce = strip_tags(strtr( + html_entity_decode($etab['annonce']), + array('>'=>'>','&'=>'&','<'=>'<','’'=>"'") + )); + + $tabRet[] = $annonces; + } + } + $nbTot = count($tabRet); + $output = new RechercheAnnonceReturn(); + $output->criteres = $criteres; + $output->nbReponses = $nbTot; + $output->nbReponsesTotal = $nbTot; + $output->result = $tabRet; + return $output; + } + + /** + * getRatios + * @param string $siren + * @param string $page + * @return RatiosReturn + */ + public function getRatios($siren, $page='ratios') + { + $this->authenticate(); + $this->permission('ratios'); + + global $tva, $mBil, $tabBilan, $efftr, $tabInfla; + $tabFormules = include APPLICATION_PATH . '/../library/Metier/scores/Variables/CacheTabFormules.php'; + require_once 'Metier/scores/Variables/configMRatios.php'; + + //Initialisation + if (empty($page)) $page = 'ratios'; + $tabRatiosInfos = $tabRatiosSecteurs = $tabBilansR = array(); + $tabRatios2 = $tabRatiosEvol = array(); + $tabRet = array(); + debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false); + debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $naf = $tabIdentite['NafEnt']; + $nafLib = $tabIdentite['NafEntLib']; + $efftr = $tabIdentite['Effectif']*1; + $fj = $tabIdentite['FJ']; + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getRatios sur $siren", print_r($tabBilans, true)); + $nbBilans = count($tabBilans); + $tabBilan = $tabBil = array(); + if ($nbBilans>0){ + $tabRatios = calculRatios($tabBilans, $tabIdentite, true); + } + $nbRatios = count($tabRatios); + debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /** Tableau d'infos sur les formules **/ + $tabBorneMin = $tabBorneMax = array(); + foreach ($tabFormules as $formule) { + $id = $formule['id']*1; + $libelle = $formule['libelle']; + $unite = $formule['unite']; + $commentaires = $formule['commentaires']; + $tabFormulesInfos[$id] = $formule; //Pour la gestion des unités des ratios secteur + $ratiosInfos = new RatiosInfos(); + $ratiosInfos->id = 'r'.$id; + $ratiosInfos->libelle = $formule['libelle']; + $ratiosInfos->unite = $formule['unite']; + $ratiosInfos->commentaires = $formule['commentaires']; + $tabRatiosInfos[] = $ratiosInfos; + $tabBorneMin[$id] = $formule['borneMin']; + $tabBorneMax[$id] = $formule['borneMax']; + } + + $tabAnnees = array(); + foreach ($tabRatios as $i=>$R) { + + //Informations sur le bilan + $bilansInfos = new RatiosBilansInfos(); + $bilansInfos->dateCloture = $tabBilan[$i]['DATE_CLOTURE']; //@todo : date + $bilansInfos->duree = $tabBilan[$i]['DUREE_MOIS']; + $bilansInfos->devise = $tabBilan[$i]['MONNAIE']; + $bilansInfos->typeBilan = $tabBilan[$i]['CONSOLIDE']; + $bilansInfos->unite = 'U'; + if ( substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900 ){ + $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); + } + + $tabRatiosEntrep = array(); + $tabRatiosEntrepEvol = array(); + foreach ( $R as $Ridx=>$Rmont ){ + + if ($Rmont<>'NS') { + if ( $tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx] ){ + $Rmont='<'.$tabBorneMin[$Ridx]; + } elseif ( $tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx] ){ + $Rmont='>'.$tabBorneMax[$Ridx]; + } + } + + // RatiosEntrep + $ratiosEntrep = new Ratios(); + if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>'){ + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = $Rmont; + } else { + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = round($Rmont,2); + } + $tabRatiosEntrep[] = $ratiosEntrep; + + if (($tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='S'||($tabBilan[$i+1]['CONSOLIDE']=='N'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) || + ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N'||($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]); + elseif ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='S'||($tabBilan[$i+2]['CONSOLIDE']=='N'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + || ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='N'||($tabBilan[$i+2]['CONSOLIDE']=='S'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]); + else + $Rmont='NS'; + + // RatiosEntrepEvol + $ratiosEntrepEvol = new Ratios(); + if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800){ + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = 'NS'; + } else { + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = number_format($Rmont,2,',',' '); + } + $tabRatiosEntrepEvol[] = $ratiosEntrepEvol; + } + $bilansInfos->RatiosEntrep = $tabRatiosEntrep; + $bilansInfos->RatiosEntrepEvol = $tabRatiosEntrepEvol; + $tabBilansR[] = $bilansInfos; + } + + debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + // Tableau des ratios secteurs + + if (strlen($naf)>4) $strNaf = " AND naf5='$naf' "; + else $strNaf = " AND naf4='$naf' "; + $strAnnees = implode(',', $tabAnnees); + + $tabRatiosSecteurs = array(); + + $tabAnnees = array_unique($tabAnnees); + + if ( count($tabAnnees)>0 ) + { + $iDb = new WDB('jo'); + $tabTmp = $iDb->select('ratios_secteurs', + 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', + "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", + false, MYSQL_ASSOC); + + $nbRatiosSec = 0; + foreach($tabAnnees as $annee) + { + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $annee; + foreach ($tabTmp as $tmp) + { + if ($tmp['annee']== $annee) + { + $Ridx = $tmp['id']; + if ($tmp['nombre']>$nbRatiosSec){ + $nbRatiosSec = $tmp['nombre']; + } + + $unite = $tabFormulesInfos[$Ridx]['unite']; + if ($unite=='EUR'){ + $montant = round($tmp['ratio']*1000); + } else { + $montant = round($tmp['ratio']); + } + if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]){ + $montant='<'.$tabBorneMin[$Ridx]; + } elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]){ + $montant='>'.$tabBorneMax[$Ridx]; + } + + $ratiosSecteurListe = new Ratios(); + if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>'){ + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = $montant; + } else { + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = round($montant,2); + } + $ratiosSecteur->liste[] = $ratiosSecteurListe; + } + } + $tabRatiosSecteurs[] = $ratiosSecteur; + } + } + + //$tabRatiosSecteurs=array(count($tabTmp), "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC"); + + $output = new RatiosReturn(); + $output->Nom = $tabIdentite['Nom']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->FJ = $fj; + $output->FJ_lib = $tabIdentite['FJ_lib']; + $output->Siren = $siren; + $output->NbEntNaf = $nbRatiosSec; + $output->BilansInfos = $tabBilansR; + $output->RatiosInfos = $tabRatiosInfos; + $output->RatiosSecteur = $tabRatiosSecteurs; + + debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->wsLog($page, $siren); + return $output; + + } + + /** + * getRapport + * @param string $siren Siren de l'entreprise + * @param integer $niveau Niveau du rapport 1, 2 ou 3 + * @param integer $id Identifiant interne S&D de l'entreprise + * @param boolean $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence facultative de la mise en Surveillance + * @param integer $encours Si $plus=true, encours facultatif Demandé par le client lors de la mise en Surveillance + * @param string $email Si $plus=true, email facultatif pour le suivi + * @return Rapport + */ + public function getRapport($siren, $niveau=3, $id=0, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + if (empty($niveau)) $niveau = 3; + if (empty($id)) $id = 0; + $result = new Rapport(); + $filtre = 0; + $idAnn = 0; + + $accesDist=true; + $nivComment=2; + if ($niveau==1){ + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + } elseif ($niveau==2) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + } elseif ($niveau==3) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + $result->Annonces = $this->getAnnonces($siren, $filtre, $idAnn); + } + return $result; + } + + /** + * Retourne la liste des banques connues pour une entreprise + * @param string $siren Siren de l'entreprise + * @return BanquesReturn + **/ + public function getBanques($siren) + { + $this->authenticate(); + $this->permission('banque'); + + //Initialisation + $iDb = new WDB('sdv1'); + $tabRet = array(); + debugLog('I',"Liste des banques demandée pour siren $siren", + __LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (intval($siren)<=1000) { + $this->sendError('1010'); + } + + $res=$iDb->select('banques', 'codeBanque, codeGuichet, libBanqueGuichet, precis, dateSource*1 AS dateSource', "siren=$siren", false, MYSQL_ASSOC); + $tmp=$iDb->select('fedRib', "codeBanque, codeGuichet, CONCAT(libBanque,' ',libGuichet) AS libBanqueGuichet, 0 AS precis, IF (dateInfo='0000-00-00', dateDispo*1, dateInfo*1) AS dateSource", "siren=$siren", false, MYSQL_ASSOC); + $res=array_merge($res, $tmp); + foreach ($res as $tabBanque){ + $dateSource=$tabBanque['dateSource']; + $codBanque=$tabBanque['codeBanque']; + $codGuichet=$tabBanque['codeGuichet']; + $libBanque=trim($tabBanque['libBanqueGuichet']); + $found=false; + $adrBanque1=$adrBanque2=$adrBanqueCP=$adrBanqueVille=''; + + if ($codBanque>0 && $codGuichet>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs b, insee.BDF_Guichets g', + 'g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville', "g.bdfFibCodeEtab=$codBanque AND g.bdfFibCodeGuichet=$codGuichet AND b.bdfFibCodeEtab=g.bdfFibCodeEtab", + false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + $found=true; + }; + } + if (!$found && $codBanque>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs', "bdfFibCodeEtab AS banque, '' AS guichet, bdfFibDenom40 AS nomBanque, '' AS nomGuichet, '' AS adresse1, '' AS adresse2, '' AS adresse3, '' AS CP, '' AS Ville", "bdfFibCodeEtab=$codBanque", false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + } else continue; + } else continue; + + $banque = new Banque(); + $banque->codeBanque = $codBanque; + $banque->codeGuichet = $codGuichet; + $banque->libBanque = $libBanque; + $banque->adresse1 = $adrBanque1; + $banque->adresse2 = $adrBanque2; + $banque->cp = $adrBanqueCP; + $banque->ville = $adrBanqueVille; + $tabRet[] = $banque; + } + debugLog('I',"Liste des banques pour siren $siren : ".count($tabRet).' banques',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('banque', $siren); + $output = new BanquesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des compétences territoriales pour un établissement à une adresse donnée. + * @param string $siret Siret de l'établissement + * @param string $type Type de compétence (pre:prefectures et s/prefectures, jal;journaux d'annonces légales, tri:tribunaux, adm:administrateurs et mandataires judiciaires, hui:huissiers, cfe:centres de formalités des entreprises) + * @param string $codeInsee Code Insee de la commune de l'établissement + * @return ListeCompetencesReturn + */ + public function getListeCompetences($siret, $type, $codeInsee) + { + $this->authenticate(); + $this->permission('competences'); + + //Initialisation + $error = new ErrorType(); + $type = strtolower($type); + + debugLog('I',"Liste des compétences $type demandée pour la commune $codeInsee",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + $iBodacc = new MBodacc(); + $cp=$codeInsee*1; + $dep=false; + if (substr($codeInsee,0,2)=='2A' || substr($codeInsee,0,2)=='2B') + { + $dep=20; $cp=20000+(substr($codeInsee,2,3))*1; + } + elseif ($cp>0 && $cp<100) $dep=$cp; + elseif ($cp>970 && $cp<977) $dep=$cp; + elseif ($cp>999 && $cp<10000) $dep='0'.substr($cp,0,1); + elseif ($cp>=10000 && $cp<96000) $dep=substr($cp,0,2); + elseif ($cp>=99000) $dep=substr($cp,0,2); + elseif ($cp>=98000) $dep=substr($cp,0,3); + elseif ($cp>=97100 && $cp<97700) $dep=substr($cp,0,3); + + if ($type=='pre'){ + + $iDb = new WDB('jo'); + $tabTmp2 = $iDb->select('villes', 'DEP, COM, AR, CT', 'codeInsee='.$codeInsee, false, MYSQL_ASSOC); + $arrond = $tabTmp2[0]['AR']; + unset($iDb); + $iDb = new WDB('insee'); + $tabTmp2 = $iDb->select('insee_tabArrond', 'CHEFLIEU, ARTMAJ, NCC', "DEP='$dep' AND AR='$arrond'", false, MYSQL_ASSOC); + $nomSousPref = trim(strtr($tabTmp2[0]['ARTMAJ'],array('('=>'',')'=>'',' '=>'', "'"=>'')).' '.$tabTmp2[0]['NCC']); + unset($iDb); + $tabTmp = $iBodacc->getTribunauxParDep($dep); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='A' || $tribunal['triType']=='B') + { + $pref = levenshtein($tribunal['triNom'], 'PREFECTURE DE '.$nomSousPref); + $spref = levenshtein($tribunal['triNom'], 'SOUS PREFECTURE DE '.$nomSousPref); + + if ($tribunal['triType']=='B' && ($pref>7 || $spref>5)) continue; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType'].$typeP; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper( + preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + $tabRet[] = $competence; + + } + } + + } elseif ($type=='jal') { + + $tabTmp = $iBodacc->getJALparDep($dep); + foreach ($tabTmp as $i=>$comp) + { + $infos=''; + if (trim($comp['parution'])<>'') $infos.='Parution '.$comp['parution'].'. '; + if (trim($comp['aboAnnuel'])>0) $infos.='Abonnement Annuel : '.$comp['aboAnnuel'].' euros. '; + if (trim($comp['infos'])<>'') $infos.=$comp['infos']; + + $competence = new Competence(); + $competence->Id = 9000+$comp['id']*1; + $competence->IdSup = 0; + $competence->Code = ''; + $competence->Type = ''; + $competence->Nom = strtoupper($comp['nomJal']); + $competence->Siret = ''; + $competence->Adr = strtoupper($comp['adresse']); + $competence->AdrComp = ''; + $competence->CP = $comp['cp']; + $competence->Ville = strtoupper($comp['ville']); + $competence->CodeInsee = ''; + $competence->Tel = $comp['tel']; + $competence->Fax = $comp['fax']; + $competence->Web = $comp['siteWeb']; + $competence->Mail = $comp['email']; + $competence->Statut = 'Actif'; + $competence->DateCessation = ''; + $competence->Remarque = trim($infos); + $tabRet[] = $competence; + } + + } elseif ($type=='tri' || $type=='adm' || $type=='hui') { + + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if (//$tribunal['triType']=='C' || + $tribunal['triType']=='G'// || + /*$tribunal['triType']=='I'*/) { + $idCA = $tribunal['triIdSup']; + $codeTGI = $tribunal['triCode']; + $code = strtoupper(substr($tribunal['triCode'],0,3)); + } + debugLog('D',"Liste des compétences $type demandée pour la commune $codeInsee ($dep) : ". + "Type=".$tribunal['triType'].', '. + "Code=".$tribunal[$codeTGI],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($tribunal['triType']<>'E' && $tribunal['triType']<>'O' && + $tribunal['triType']<>'T' && $tribunal['triType']<>'R' && + $tribunal['triType']<>'N' && $tribunal['triType']<>'U' && + $tribunal['triType']<>'Z') + { + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper(Scores_Locale_String::cleanstring($tribunal['triNom'])); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(Scores_Locale_String::cleanstring(preg_replace('/ +/',' ', + $tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie']))); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + if ($tribunal['triNumGreffe']*1>0) + { + $competence->IdentifiantGreffe = $tribunal['triNumGreffe']; + } + $tabRet[] = $competence; + } + } + } + + if ($type=='adm') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getMandataires(array($idCA), false); + $tabRet = array(); + $nbAff=0; + foreach ($tabTmp as $i=>$tribunal) + { /** @todo A revoir Debut **/ + if (stripos($tribunal['tribunal'], $code)!==false || + stripos($tribunal['tribunal'], 'SAINT')!==false) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + $nbAff++; + } + } + if ($nbAff==0) + { + foreach ($tabTmp as $i=>$tribunal) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + } + }/** @todo A revoir Fin : Lier correctement les mandataires à un TI principal **/ + } + elseif ($type=='hui') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getHuissiers(array($codeTGI), false); + + $tabRet = array(); + $nbAff = 0; + foreach ($tabTmp as $i=>$tribunal) + { + $adr = $iInsee->structureVoie($tribunal['adresse']); + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($adr['num'].' '.$adr['adr_btq'].' '. + $adr['typeVoie'].' '.$adr['libVoie']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $adr['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation']; + $competence->Remarque = strtr($tribunal['contact'], + array( '
'=>', ', '
'=>', ', + '
'=>', ', + )); + $tabRet[] = $competence; + } + $nbComp = count($tabTmp); + debugLog('I',"$nbComp compétences $type trouvées pour le tribunal $codeTGI",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + elseif ($type=='cfe') + { + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='C' || $tribunal['triType']=='O' || + $tribunal['triType']=='T' || $tribunal['triType']=='R' || + $tribunal['triType']=='N' || $tribunal['triType']=='U' || + $tribunal['triType']=='Z') + { + if (strlen($tribunal['triCommentaire'])==32 && + strpos($tribunal['triCommentaire'], ' ')===false) + $remarque=''; + else $remarque=$tribunal['triCommentaire']; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '.$tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '.$tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $remarque; + $tabRet[] = $competence; + } + } + } + $this->wsLog('competences',$siret,$type.'/'.$codeInsee); + $output = new ListeCompetencesReturn(); + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + return $output; + } + + /** + * Retourne le statut du webservice + * @return StatusReturn + */ + public function status() + { + /* @todo tester les différents éléments qui peuvent conduire + * à un problème dans les services tel que la connexion à la + * base de données, l'accès FTP, l'accès HTTP, l'accès système de fichier + */ + + //Enregistrement des accès à la requête getIdentite + Zend_Registry::get('WsLogger')->info("status - ip:". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']. + ", hash:".$_SERVER['PHP_AUTH_PW']); + + $error = new StatusReturn(); + //Test connexion à la base de données + $db = new WDB('jo'); + if (!$db) { + $error->statusCode = 9000; + $error->statusMsg = $this->listError['9000']; + } else { + $error->statusCode = 3000; + $error->statusMsg = $this->listError['3000']; + } + return $error; + } + +} + +?> \ No newline at end of file diff --git a/library/WsScore/Entreprise/v0.5/Service.php b/library/WsScore/Entreprise/v0.5/Service.php new file mode 100644 index 00000000..99894f4b --- /dev/null +++ b/library/WsScore/Entreprise/v0.5/Service.php @@ -0,0 +1,3423 @@ +authenticate(); + $this->permission('identite'); + + //Initialisation + if (empty($id)) { $id = 0; } + $forceVerif = false; + + $tdeb = microtime(1); + $ligne = date('YmdHis').";$siret;Ws->getIdentite Avant ..."; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } + if ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep) || empty($entrep['id']) ) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->AncienSiege = $entrep['AncienSiege']; + $identite->AncienSiegeDateFin = $entrep['AncienSiegeDateFin']; + $identite->TribunalCode = prepareString($entrep['Tribunal']); + $identite->TribunalLib = prepareString($entrep['TribunalLib']); + //'NumGreffe' = $entrep['numGreffe'], // Ajouté le 4 08 2009 + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->ActifEco = $entrep['ActifEco']; // Etab éco actif, ajout le 28/04/2011 + $identite->ActifEcoDate = $entrep['ActifEcoDate']; // Date si éco inactif et jur actif + $identite->ActifEcoType = $entrep['ActifEcoType']; // vide ou NPAI ou PFER ou ECOF + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = prepareString($entrep['Tel']); + $identite->Fax = prepareString($entrep['Fax']); + $identite->Web = prepareString($entrep['Web']); + $identite->Mail = prepareString($entrep['Mail']); + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + + $geoInfos = new GeoInfos(); + $geoInfos->CUCS = $entrep['GeoInfos']['CUCS']; + $geoInfos->NCUCS = $entrep['GeoInfos']['NCUCS']; + $geoInfos->ZRU = $entrep['GeoInfos']['ZRU']; + $geoInfos->NZRU = $entrep['GeoInfos']['NZRU']; + $geoInfos->ZFU = $entrep['GeoInfos']['ZFU']; + $geoInfos->NZFU = $entrep['GeoInfos']['NZFU']; + $geoInfos->ZUS = $entrep['GeoInfos']['ZUS']; + $geoInfos->NZUS = $entrep['GeoInfos']['NZUS']; + $geoInfos->AFR = $entrep['GeoInfos']['AFR']; + $geoInfos->NAFR = $entrep['GeoInfos']['NAFR']; + $geoInfos->ZRR = $entrep['GeoInfos']['ZRR']; + $geoInfos->NZRR = $entrep['GeoInfos']['NZRR']; + $identite->GeoInfos = $geoInfos; + + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = prepareString($entrep['APRM_Lib']); + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = prepareString($entrep['CapitalType']); // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + //'DateMajRCS' = $entrep['DateMajRCS'], // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = prepareString($entrep['codeCommune']); + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->TrancheCAType = $entrep['TrancheCAType']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = prepareString($entrep['dir1Titre']); + $identite->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $identite->dir1DateFct = prepareString($entrep['dir1DateFct']); //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = prepareString($entrep['dir1LieuNaiss']); // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = prepareString($entrep['dir2Titre']); + $identite->dir2NomPrenom = prepareString($entrep['dir2NomPrenom']); + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = prepareString($entrep['dir2DateNaiss']); //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = prepareString($entrep['dir2LieuNaiss']); // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = prepareString($entrep['InfosIris']['libIris']); + $identite->InfosIris->typIris = prepareString($entrep['InfosIris']['typIris']); + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SurfaceMagasin = $entrep['ACTISURF']*1; // 0=N/D, 1=inf. à 300m2,2=300 à 400m2, 3=400 à 2500m2, 4=sup. à 2500m2 + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Millesime = $entrep['bilanAnnee']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->CAestime = $entrep['bilanFLestime']; + $identite->Bilan->Resultat = prepareString($entrep['bilanHN']); + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $tabAutreSiret = array(); + if (count($entrep['AutreSiret'])) { + foreach($entrep['AutreSiret'] as $type => $item) { + $autreSiret = new AutreSiret(); + $autreSiret->type = $type; + $autreSiret->siren = $item['siren']; + $autreSiret->nic = $item['nic']; + $autreSiret->apeEtab = $item['apeEtab']; + $autreSiret->codeEve = $item['codeEve']; + $autreSiret->dateEve = $item['dateEve']; + $autreSiret->adrL1 = $item['adrL1']; + $autreSiret->adrL2 = $item['adrL2']; + $autreSiret->adrL3 = $item['adrL3']; + $autreSiret->adrL4 = $item['adrL4']; + $autreSiret->adrL5 = $item['adrL5']; + $autreSiret->adrL6 = $item['adrL6']; + $autreSiret->adrL7 = $item['adrL7']; + $autreSiret->depCom = $item['depCom']; + $autreSiret->rivoli = $item['rivoli']; + $autreSiret->siege = $item['siege']; + $autreSiret->destinat = $item['destinat']; + $autreSiret->typEtab = $item['typeEtab']; + $autreSiret->origine = $item['origine']; + $tabAutreSiret[] = $autreSiret; + } + } + $identite->AutreSiret = $tabAutreSiret; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + //'importExport' = $entrep['importExport'], + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $identite->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + $duree=round(microtime(1)-$tdeb,3); + $ligne=date('YmdHis').";$siret;Ws->getIdentite APRES ($duree s) !!!"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + return $identite; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param integer $id Identifiant S&D de l'établissement + * @return IdentiteProcol Fiche d'identité de l'établissement + */ + public function getIdentiteProcol($siret, $id=0, $forceVerif=false) + { + $this->authenticate(); + $this->permission('idprocol'); + + debugLog('I',"Identité AGS demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + if (intval($siren)==0 && $id==0) { + $this->sendError('1010'); + } + if ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identiteProcol = new IdentiteProcol(); + + //Element identite + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->TribunalCode = $entrep['Tribunal']; + $identite->TribunalLib = $entrep['TribunalLib']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = strtr($entrep['Nom'],'/*',' '); + $identite->Nom2 = $entrep['Nom2']; + $identite->NomLong = $entrep['nomLong']; // Ajouté le 4 08 2009 + $identite->NomCommercial = $entrep['NomCommercial']; // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = $entrep['Sigle']; + $identite->SigleLong = $entrep['sigleLong']; // Ajouté le 4 08 2009 + $identite->Enseigne = $entrep['Enseigne']; + $identite->EnseigneLong = $entrep['enseigneLong']; // Ajouté le 16 11 2010 + $identite->Adresse = $entrep['Adresse']; + $identite->Adresse2 = $entrep['Adresse2']; + $identite->AdresseNum = $entrep['AdresseNum']; + $identite->AdresseBtq = $entrep['AdresseBtq']; + $identite->AdresseVoie = $entrep['AdresseVoie']; + $identite->AdresseRue = $entrep['AdresseRue']; + $identite->CP = $entrep['CP']; + $identite->Ville = $entrep['Ville']; + $identite->Pays = $entrep['Pays']; // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = $entrep['Tel']; + $identite->Fax = $entrep['Fax']; + $identite->Web = $entrep['Web']; + $identite->Mail = $entrep['Mail']; + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->GeoInfos = $entrep['GeoInfos']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = $entrep['APRM_Lib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = $entrep['CapitalType']; // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = $entrep['codeCommune']; + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = $entrep['dir1Titre']; + $identite->dir1NomPrenom = $entrep['dir1NomPrenom']; + $identite->dir1DateFct = $entrep['dir1DateFct']; //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = $entrep['dir1LieuNaiss']; // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = $entrep['dir2Titre']; + $identite->dir2NomPrenom = $entrep['dir2NomPrenom']; + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = $entrep['dir2DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = $entrep['dir2LieuNaiss']; // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = $entrep['InfosIris']['libIris']; + $identite->InfosIris->typIris = $entrep['InfosIris']['typIris']; + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = $entrep['bilanHN']; + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = $entrep2['apen4_lib']; + $identite->Naf4EtabLib = $entrep2['apet4_lib']; + } + + $identiteProcol->Identite = $identite; + + //Eléments annonces légales + $tabRetAnn = $tabLastEven = array(); + if (intval($siren)!=0) { + $anns = $this->getAnnonces($siren, 1); + $anns = $anns->result; + $tribunalProcol = false; + foreach ($anns as $nb=>$ann) + { + $tabRetEven = array(); + foreach ($ann->evenements as $tabEven) { + // On ignore les éléments suivants + if ($tabEven->CodeEven>=7000) continue; + if ($tabEven->CodeEven>=4000 && $tabEven->CodeEven<=4999) continue; + + // Par défaut, on force le tribunal à celui présent dans la dernière annonce de Procol + if ($tribunalProcol==false && $tabEven->CodeEven>=1000 && $tabEven->CodeEven<2000 && $ann->BodaccCode=='BODA') { + $identiteProcol->TribunalCode = $ann->TribunalCode; + $identiteProcol->TribunalLib = prepareString($ann->Tribunal); + $tribunalProcol=true; + } + + // On ne prend que le dernier élément de chaque type + if (in_array($tabEven->CodeEven, $tabLastEven)) continue; + + $tabLastEven[] = $tabEven->CodeEven; + $tabRetEven[] = $tabEven; + } + + if (count($tabRetEven)>0) { + $annonce = new Annonce(); + $annonce->id = $ann->id; + $annonce->BodaccCode = $ann->BodaccCode; + $annonce->BodaccNum = $ann->BodaccNum; + $annonce->NumAnnonce = $ann->NumAnnonce; + $annonce->DateParution = $ann->DateParution; //@todo : date + $annonce->Departement = $ann->Departement; + $annonce->Tribunal = $ann->Tribunal; + $annonce->TribunalCode = $ann->TribunalCode; + $annonce->TribunalSiret = $ann->TribunalSiret; + $annonce->Rubrique = $ann->Rubrique; + $annonce->typeAnnonce = $ann->typeAnnonce; + $annonce->texteRectificatif = $ann->texteRectificatif; + $annonce->texteAnnonce = utf8_encode($ann->texteAnnonce); + $annonce->dateEffet = $ann->dateEffet; //@todo : date + $annonce->dateJugement = $ann->dateJugement; //@todo : date + $annonce->dateInsertionSD = $ann->dateInsertionSD; //@todo : date + $annonce->evenements = $tabRetEven; + $annonce->Lien_Annonce_Pdf = $ann->Lien_Annonce_Pdf; + $tabRetAnn[] = $annonce; + } + } + + $identiteProcol->Annonces = $tabRetAnn; + + $iRncs = new MRncs(); + if ($entrep['Siege']==1 || $entrep['Siege']==11) { + $identiteProcol->LibTypeEtab = 'Etablissement Siege'; + } else { + $tabEtabRncs = $iRncs->getIdentiteEtab($siren, $entrep['Nic']); + if ($tabEtabRncs['Siege']==2) $identiteProcol->LibTypeEtab = 'Etablissement Principal'; + elseif ($tabEtabRncs['Siege']==1) $identiteProcol->LibTypeEtab = 'Etablissement Complementaire'; + elseif ($tabEtabRncs['Siege']==0) $identiteProcol->LibTypeEtab = 'Etablissement Secondaire'; + } + + //@todo + $tabJuge = $iRncs->getIntervenants($siren); + $tabDepots=array(); + foreach ($tabJuge as $iDepot=>$depot) { + $organe = new Organe(); + $organe->codEven = $depot['codEven']; + $organe->libEven = prepareString($depot['libEven']); + $organe->dateEffet = $depot['dateEffet']; + $organe->admcode = $depot['admcode']; + $organe->admfonction = prepareString($depot['admfonction']); + $organe->admnom = prepareString($depot['admnom']); + $organe->admadrNum = $depot['admadrNum']; + $organe->admadrInd = $depot['admadrInd']; + $organe->admadrVoie = $depot['admadrVoie']; // @todo : adm1adr1, adm1adr2, adm1adr3, + $organe->admadrCP = $depot['admadrCP']; + $organe->admadrVille = $depot['admadrVille']; + $tabDepots[] = $organe; + } + $identiteProcol->Organes = $tabDepots; + + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, 1); + $nbA = count($tabA); + $tabAct = array(); + foreach ($tabA as $i=>$lien) { + $liens = new Actionnaire(); + $liens->Pmin = $lien['Pmin']; + $liens->MajMin = $lien['MajMin']; + $liens->RaisonSociale = $lien['RaisonSociale']; + $liens->Pays = $lien['Pays']; + $liens->Siren = $lien['Siren']; + $liens->Actif = $lien['Actif']; + $tabAct[] = $liens; + } + $identiteProcol->Actionnaires = $tabAct; + + $iGreffes = new MGreffes(); + $tabActes = $iGreffes->getListeActes($siren); + + $identiteProcol->StatutsModifDepot = $identiteProcol->StatutsModif = '0000-00-00'; + foreach ($tabActes as $i=>$acte) { + if ('_'.$acte['acte_type']=='_04') { // STATUTS CONSTITUTIFS + $identiteProcol->StatutsConstDepot = $acte['depot_date']; // => 1997-12-18 + $identiteProcol->StatutsConst = $acte['acte_date']; // => 1997-11-13 + break; + } elseif (in_array('_'.$acte['acte_type'], array( + //'_04', // STATUTS CONSTITUTIFS + '_06', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_07', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_08', // STATUTS A JOUR ET DECLARATION DE CONFORMITE 9 0000-00-00 2009-09-02 17:05:55 + '_09', // STATUTS APRES TRANSFERT DE SIEGE 9 0000-00-00 2009-09-02 17:05:55 + '_A1', // STATUTS 9 0000-00-00 2009-09-02 17:05:55 + '_AH', // AVENANT AUX STATUTS + ))) { + // On ne prend que la dernière modif + if ($identiteProcol->StatutsModifDepot=='0000-00-00' && $identiteProcol->StatutsModif=='0000-00-00') { + $identiteProcol->StatutsModifDepot = $acte['depot_date'];// => 1997-12-18 + $identiteProcol->StatutsModif = $acte['acte_date']; // => 1997-11-13 + } + } + } + + /** Y a t il eu des informations relatives à une cession ? **/ + $tabCes = $iGreffes->getInfosCessions($siren); + if ($tabCes) { + $identiteProcol->CessionJugeLib = $tabCes['cessJuge']; + $identiteProcol->CessionJugeDate = $tabCes['cessDateJuge']; + $identiteProcol->CessionAvisBodac = $tabCes['cessDateBod']; + $identiteProcol->CessionInvenDate = $tabCes['cessDateInv']; + $identiteProcol->CessionCAdeclare = $tabCes['cessCAdec']; + $identiteProcol->CessionEffectif = $tabCes['cessEffectif']; + $identiteProcol->CessionDesc = $tabCes['cessDesc']; + $identiteProcol->CessionDescDate = $tabCes['cessDateDesc']; + $identiteProcol->CessionOffreDate = $tabCes['cessDateLim']; + $identiteProcol->CessionMandataire = $tabCes['cessMand']; + } + } + //sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug $siren", print_r($tabRet,true)) ; + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + return $identiteProcol; + } + + /** + * Retourne les liens financiers pour une entreprise. + * + * @param string $siren Siren de l'entreprise + * @param boolean $actifsUniquement Uniquement les liens Actifs + * @return LiensReturn + */ + public function getLiens($siren, $actifsUniquement = true) + { + $this->authenticate(); + $this->permission('liens'); + + //Initialisation + if (empty($actifsUniquement)) { $actifsUniquement = true; } + $tabAct = $tabPar = array(); + + debugLog('I',"Liens entreprises demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, $actifsUniquement); + $nbA = count($tabA); + $tabAct = array(); + if ($nbA > 0) { + foreach ($tabA as $i => $lien) { + $actionnaire = new Actionnaire(); + $actionnaire->Pmin = $lien['Pmin']; + $actionnaire->MajMin = $lien['MajMin']; + $actionnaire->RaisonSociale = $lien['RaisonSociale']; + $actionnaire->TypeEntrep = $lien['TypeEntrep']; + $actionnaire->Pays = $lien['Pays']; + $actionnaire->Siren = $lien['Siren']; + $actionnaire->Actif = $lien['Actif']; + $actionnaire->Source = $lien['Source']; + $actionnaire->DateLien = $lien['DateLien']; //@todo : date + $actionnaire->DateMaj = $lien['DateMaj']; //@todo : date + $tabAct[] = $actionnaire; + } + } + debugLog('W', "$nbA actionnaires pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $tabP = $mLiens->getParticipations($siren, $actifsUniquement); + $nbP = count($tabP); + $tabPar = array(); + if ($nbP > 0) { + foreach ($tabP as $i => $lien) { + $participation = new Participation(); + $participation->Pmin = $lien['Pmin']; + $participation->MajMin = $lien['MajMin']; + $participation->RaisonSociale = $lien['RaisonSociale']; + $participation->TypeEntrep = $lien['TypeEntrep']; + $participation->Pays = $lien['Pays']; + $participation->Siren = $lien['Siren']; + $participation->Actif = $lien['Actif']; + $participation->Source = $lien['Source']; + $participation->DateLien = $lien['DateLien']; //@todo : date + $participation->DateMaj = $lien['DateMaj']; //@todo : date + $tabPar[] = $participation; + } + } + debugLog('W', "$nbP participations pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('liens',$siren); + + $output = new LiensReturn(); + $output->actionnaires = $tabAct; + $output->participations = $tabPar; + return $output; + } + + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, Néant=Tous + * @param integer $position + * @param integer $nbRep + * + * @return ListeEtablissementsReturn + */ + public function getListeEtablissements($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('etablissements'); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (!in_array($actif, array(0,1))) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + $departement = $dep; + + debugLog('I',"Liste des établissements demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + $result = array(); + if (count($etabs)>0) + { + foreach ($etabs as $nb => $etab) + { + $etablissement = new Etablissement(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + $result[] = $etablissement; + } + } + debugLog('I', "Nb Etablissements retournés ($departement, $actif) = ". count($result), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('etablissements',$siren); + $output = new ListeEtablissementsReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } + + /** + * Retourne l'ensemble des informations identitaires des dirigeants de l'entreprise + * + * @param string $siren Siren de l'entreprise + * @param bool $histo Afficher l'historique des dirigeants + * @return DirigeantsReturn Liste des dirigeants actifs de l'entreprise + */ + public function getDirigeants( $siren , $histo = false) + { + $this->authenticate(); + $this->permission('dirigeants'); + + //Initialisation + if (empty($histo)) { $histo = false; } + + //Zend_Registry::get('WsLogger')->info('HISTO : '.$histo); + + debugLog('I',"Dirigeants demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeants($siren, $histo); + //debugLog('W', print_r($dirs, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $dirigeant = new Dirigeant(); + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Titre = $dir['Titre']; + $dirigeant->Societe = $dir['Societe']; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + $dirigeant->NomUsage = $dir['NomUsage']; + $dirigeant->NaissDate = $dir['NaissDate']; //@todo : date + $dirigeant->NaissVille = $dir['NaissVille']; + $dirigeant->NaissDepPays = $dir['NaissDepPays']; + $dirigeant->Ancien = $dir['Ancien']; + $dirigeant->DateFct = $dir['DateFct']; //@todo : date + $liste[] = $dirigeant; + } + $this->wsLog('dirigeants',$siren,$option); + debugLog('I', 'Nb Dirigeants retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $output = new DirigeantsReturn(); + $output->result = $liste; + return $output; + } + + /** + * Retourne la liste des annonces légales relative à une entreprise + * + * @todo Revoir cette fonction pour la faire marcher avec les associations + * + * @param string $siren Siren de l'entreprise + * @param integer $filtre 0=Pas de Filtre, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param integer $position + * @param integer $nbRep + * @return AnnoncesReturn + */ + public function getAnnonces($siren, $filtre = 0, $idAnn = '', $position = 0, $nbRep = 100) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($filtre)) { $filtre = 0; } + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = array(); + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + /* + if ($siren>100 && $filtre==3) $asso=true; + else { + $asso=false; + $tabIdentite=$this->iInsee->getIdentiteLight($siren); + if ($tabIdentite['FJ']>90 && $tabIdentite['FJ']<94 || + $tabIdentite['FJ']>9000 && $tabIdentite['FJ']<9400) $asso=true; + }*/ + if ($idAnn=='') { + $anns=$iInsee->getAnnoncesLegales($siren); + $annsB=$iInsee->getAnnoncesBalo($siren); + $annsA=$iInsee->getAnnoncesAsso($siren); + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + } elseif ($filtre==1) + $anns=$iInsee->getAnnoncesLegales($siren, $idAnn); + elseif ($filtre==2) + $annsB=$iInsee->getAnnoncesBalo($siren, $idAnn); + elseif ($filtre==3) + $annsA=$iInsee->getAnnoncesAsso($siren, $idAnn); + elseif ($filtre==4) + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($anns) && empty($annsB) && empty($annsA) && empty($annsM)) + { + debugLog('W', "Aucune annonce pour le siren $siren (source=$filtre, id=$idAnn)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant B '.$siren.' '.$idAnn; + } + else + { + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = prepareString($ann['texteAnnonce']); + $annonce->libFJ = $ann['libFJ']; + $annonce->codFJ = $ann['codFJ']; + $annonce->capital = $ann['capital']; + $annonce->capitalDev = $ann['capitalDev']; + + $annonce->raisonSociale = $ann['raisonSociale']; + $annonce->nomCommercial = $ann['nomCommercial']; + $annonce->sigle = $ann['sigle']; + $annonce->adresse = $ann['adresse']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + + if (is_array($annsB)) + { + foreach ($annsB as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsA)) + { + foreach ($annsA as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsM)) + { + foreach ($annsM as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + } + + $nbReponses = count($liste); + if ($nbReponses>0){ + //$liste = array_slice($liste, $position, $nbRep); + } + debugLog('I', "Nb Annonces $filtre retournées pour $siren (source=$filtre, id=$idAnn) = ". count($liste), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('annonces',$siren,$filtre.'/'.$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Evaluation indiScore d'une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic Nic de l'établissement + * @param integer $niveau Niveau des commentaires + * @param bool $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence de la mise en Surveillance + * @param integer $encours Si $plus=true, encours client demandé lors de la mise en Surveillance + * @param string $email Si $plus=true, email client pour la mise en surveillance + * @return Indiscore + */ + public function getIndiScore($siren, $nic=0, $niveau=2, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + + //Initialisation + $accesDist = true; + if (empty($nic)) { $nic = 0; } + if (empty($niveau)) { $niveau = 2; } + if (empty($plus)) { $plus = false; } + if ( !in_array($niveau, array(0,1,2,3,4,5)) ) { $niveau = 2; } + + $perm = false; + //@todo : Gestion des droits + /*switch($niveau){ + case 1: $perms = array('indiscore', 'indiscorep'); break; + case 2: $perms = array('indiscore2', 'indiscore2p'); break; + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + }*/ + + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesDist, $niveau); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new Indiscore(); + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $output->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $output->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $output->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $output->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $output->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $output->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + foreach($value as $comment) { + $tab[] = Scores_Locale_String::fixEncoding($comment); + } + $output->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $output->tabVariables = $variables; + + } elseif ($key=='Bilans') { + + $tab = array(); + foreach($value as $item) + { + $objet = new IndiscoreBilans(); + $objet->Millesime = $item['Millesime']; + $objet->FraisPerso = $item['FraisPerso']; + $objet->CA = $item['CA']; + $objet->EBE = $item['EBE']; + $objet->TxInvest = $item['TxInvest']; + $objet->TxEndett = $item['TxEndett']; + $objet->DettesCT = $item['DettesCT']; + $objet->FraisFi = $item['FraisFi']; + $objet->BFR = $item['BFR']; + $objet->FR = $item['FR']; + $objet->FondsPr = $item['FondsPr']; + $objet->DelaiCli = $item['DelaiCli']; + $objet->DelaiFour = $item['DelaiFour']; + $tab[] = $objet; + } + $output->$key = $tab; + } else { + $output->$key = $value; + } + } + + if ($plus) { + if (empty($ref)) $ref='Indiscore+'; + if (empty($email)) $email=$this->User->email; + $this->setSurveillance($siren, $email, $ref, 'privileges'); + $this->setSurveillance($siren, $email, $ref, 'score', false, $encours); + if ($this->User->idClient==89) + $this->setSurveillance($siren, $email, $ref, 'annonces'); + $this->wsLog('indiscore+',$siren); + } else + $this->wsLog('indiscore',$siren); + return $output; + } + + /** + * Liste de tous les évènements enregistrés à l'INSEE pour une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic + * @param integer $position + * @param integer $nbRep + * @return InseeReturn + **/ + public function getListeEvenements($siren, $nic=0, $position=0, $nbRep=1000) + { + $this->authenticate(); + $this->permission('eveninsee'); + + //Initialisation + if (empty($nic)) { $nic = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep) || $nbRep>1000) { $nbRep = 1000; } + + debugLog('I',"Liste des évènements pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $evens = $iInsee->getEvenements($siren, $nic, $position, $nbRep); + $tabRet = array(); + if (count($evens)>0) { + foreach ($evens as $key => $row) { + $date[$key] = $row['dateMAJ']; + } + array_multisort($date, SORT_DESC, $evens); + foreach ($evens as $nb=>$even) { + $iEven = new InseeEven(); + $iEven->Nic = $even['nic']; + $iEven->Siege = $even['siege']; + $iEven->SiretAss = $even['siretAssocie']; + $iEven->TypeSiretAss = $even['typeSiretAss']; + $iEven->EvenCode = $even['codeEven']; + $iEven->EvenLib = $even['libEven']; + $iEven->EvenLibDet = $even['libEvenDet']; + $iEven->EvenDate = $even['dateEven']; //@todo : date + $iEven->DateInfo = $even['dateMAJ']; //@todo : date + $tabRet[] = $iEven; + } + } + + debugLog('I', 'Nb évènements retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('evenements',$siren); + $output = new InseeReturn(); + $output->nbReponses = count($tabRet); // @todo : retrouver le nombre total d'évenements + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + empty($entCriteres->actif) ? false : $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + + /** + * Recherche d'entreprise par dirigeants + * @param DirigeantCriteres $criteres + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchDirReturn + */ + public function searchDir($criteres, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + $nom = $criteres->nom; + $prenom = $criteres->prenom; + $dateNaiss = $criteres->dateNaiss; + $lieuNaiss = $criteres->lieuNaiss; + $pertinence = $criteres->pertinence; + + debugLog('I',"Recherche Dirigeant de $nom, $prenom, $dateNaiss, $lieuNaiss (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($prenom)) $prenom = ''; + if (empty($dateNaiss)) $dateNaiss = ''; + if (empty($lieuNaiss)) $lieuNaiss = ''; + if (empty($pertinence)) $pertinence = false; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheDir($nom, $prenom, '', $dateNaiss, $lieuNaiss, $deb, $nbRep, $maxRep, $pertinence); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $item = new EntrepriseDirItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + + // Dirigeant + $item->DirRs = prepareString($etab['DirRs']); + $item->DirNom = prepareString($etab['DirNom']); + $item->DirPrenom = prepareString($etab['DirPrenom']); + $item->DirNomUsage = prepareString($etab['DirNomUsage']); + $item->DirDateEffet = $etab['DirDateEffet']; + $item->DirFonction = prepareString($etab['DirFonction']); + $item->DirDepart = $etab['DirDepart']; + $tabRet[] = $item; + } + + if ($etabs['nbReponses']==0){ + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + $search = new SearchDirReturn(); + $search->nbReponses = $etabs['nbReponses']; + $search->nbReponsesTotal = $etabs['nbReponsesTotal']; + $search->result = $tabRet; + return $search; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche au sièges (si true) + * @param boolean $actif Limitation aux établissements actifs (si true) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=false, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + + if ( $actif ) { + $actif = 1; + } else { + $actif = 2; + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + } + + $fp=@fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + @fwrite($fp, $str.EOL); + @fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param integer $dep Département + * @return SearchReturn + */ + public function searchSiren($siret, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep); + if (count($rep['reponses'])==0 && $dep>0) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = utf8_encode(prepareString(utf8_decode($etab['FJLib']))); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + + + + /** + * Retourne la fiche d'identité simplifié d'une entreprise avec son numéro de TVA. + * + * @param string $siren Identifiant Siren de l'entreprise + * @return TvaReturn + */ + public function getTVA($siren) + { + $this->authenticate(); + + //Initialisation + $siren = trim($siren); + debugLog('I',"TVA demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren); + debugLog('I', "Après getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep)) + { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + debugLog('I', "Avant MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iTva = new MTva($siren); + if ($iTva->vatDefined) $tva=$iTva->vatNumber; + else $tva='N/A'; + debugLog('I', "Après MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new TvaReturn(); + $output->id = $entrep['id']; + $output->AutreId = $entrep['AutreId']; + $output->Nom = $entrep['Nom']; + $output->Sigle = $entrep['Sigle']; + $output->Enseigne = $entrep['Enseigne']; + $output->Adresse = $entrep['Adresse']; + $output->Adresse2 = $entrep['Adresse2']; + $output->CP = $entrep['CP']; + $output->Ville = $entrep['Ville']; + $output->Siren = $entrep['Siren']; + $output->Tva = $tva; + + debugLog('I', "TVA retournée = $tva (".$entrep['Nom'].')', __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('tva',$siren); + + return $output; + } + + /** + * Retourne tout ou patie des informations règlementées sur l'entreprise + * + * @param string $siren SIREN de l'entreprise + * @param mixed $id Id du communiqué + * @return InfosRegReturn + */ + public function getInfosReg( $siren, $id = false ) + { + $this->authenticate(); + $this->permission('infosreg'); + + //Initialisation + if (empty($id)) $id = false; + $tabRet = array(); + $siren = substr($siren,0,9); + + debugLog('I',"Infos règlementées demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + $iBourse = new MBourse($siren); + $anns = $iBourse->getInfosReg($siren, $id); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ( empty($anns) ){ + debugLog('W', "Aucune info règlementée pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ($id == false) { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } else { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->communique = $ann['communique']; + $infos->communiqueHtml = $ann['communiqueHtml']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } + } + debugLog('I', 'Nb infos retournés = '. count($anns), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('infosreg',$siren,$id); + $output = new InfosRegReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les informations boursières de l'entreprise + * @param string $siren SIREN de l'entreprise + * @return InfosBourse + */ + public function getInfosBourse($siren) + { + $this->authenticate(); + $this->permission('bourse'); + + //Initialisation + $error = new ErrorType(); + debugLog('I',"Infos bourse demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $siren = substr($siren,0,9); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($bourse)) { + debugLog('W', "Aucune info bourse pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + $result = new InfosBourse(); + $result->Siren = $bourse['siren']; + $result->RaisonSociale = $bourse['raisonSociale']; + $result->Adresse = $bourse['adresse']; + $result->Effectif = $bourse['effectif']; + $result->CodeSicovam = $bourse['code_sicovam']; + $result->CodeMnemo = $bourse['code_mnemo']; + $result->CodeBloomberg = $bourse['code_bloomberg']; + $result->CodeDatastream = $bourse['code_datastream']; + $result->Isin = $bourse['code_isin']; + $result->CodeRic = $bourse['code_ric']; + $result->DateIntroduction = $bourse['dateIntroduction']; //@todo : date + $result->DateDerAG = $bourse['dateDerAG']; //@todo : date + $result->DateRadiation = $bourse['dateRadiation']; //@todo : date + $result->AutreIsin = $bourse['autre_isin']; + $result->EligibleSRD = $bourse['eligibleSRD']; + $result->EligiblePEA = $bourse['eligiblePEA']; + $result->Tel = $bourse['tel1']; + $result->Tel2 = $bourse['tel2']; + $result->Fax = $bourse['fax1']; + $result->Fax2 = $bourse['fax2']; + $result->Web = $bourse['web']; + $result->Mail = $bourse['mail']; + + $result->Marche = $bourse['marche']; + $result->Description = $bourse['description']; + $result->Secteur = $bourse['secteur']; + $result->Activite = $bourse['activite']; + $result->ActiviteDet = $bourse['activiteDet']; + + $result->placeCotation = $bourse['placeCotation']; + $result->nombreTitres = $bourse['nombreTitres']; + $result->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $result->derCoursDate = $bourse['date']; //@todo : date + $result->derCoursCloture = $bourse['close']; + $result->derCoursOuverture = $bourse['open']; + $result->derCoursPlusHaut = $bourse['high']; + $result->derCoursPlusBas = $bourse['low']; + + $result->derCoursVolume = $bourse['volume']; + $result->coursMin = $bourse['coursMin']; + $result->coursMoy = $bourse['coursMoy']; + $result->coursMax = $bourse['coursMax']; + + $this->wsLog('bourse',$siren,$id); + return $result; + } + + /** + * Ajout d'une surveillance + * + * @param string $siret Siret/Siren + * @param string $email Adresse email du client + * @param string $ref Référence de la surveillance + * @param string $source Type de source en surveillance (insee, annonces, bilans, actes, privileges, score, dirigeants) + * @param boolean $delete Suppression de la ligne + * @param integer $encoursClient Encours demandé par le client + * @return SetSurveillanceReturn + */ + public function setSurveillance($siret, $email, $ref='', $source='annonces', $delete=false, $encoursClient=0) + { + $this->authenticate(); + $source = strtolower($source); + switch ($source) { + case 'insee': + $this->permission('survinsee'); + break; + case 'bilans': + $this->permission('survbilan'); + break; + case 'actes': + $this->permission('survactes'); + break; + case 'privileges': + $this->permission('survpriv'); + break; + case 'dirigeants': + $this->permission('survdirigeants'); + break; + case 'score': + $this->permission('survscore'); + break; + case 'annonces': + default: + $this->permission('survannonce'); + break; + } + + //Initialisation + if (empty($ref)) $ref = ''; + if (empty($delete)) $delete = false; + if (empty($encoursClient)) $encoursClient = false; + $result = false; + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + debugLog('I',"setSurveillances(siret=$siret, email=$email, ref=$ref, source=$source, delete=$delete)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic); + $iDb = new WDB(); + $login = $this->User->login; + switch ($source) { + case 'insee': + case 'annonces': + case 'bilans': + case 'actes': + case 'privileges': + case 'dirigeants': $encoursClient=0; break; + case 'score': $encoursClient=$encoursClient*1; break; + default: $source='annonces'; break; + } + + if ($delete) { + + $tabUpdate = array('dateSuppr'=>date('Y-m-d')); + $result = $iDb->update('surveillances_site', + $tabUpdate, + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'" + ); + + } else { + + $tabUpdate = array( + 'source' => $source, + 'login' => $login, + 'email' => $email, + 'siren' => $siren, + 'nic' => $nic, + 'ref' => $ref, + 'encoursClient' => $encoursClient, + 'rs' => $tabIdentite['Nom'], + 'cp' => $tabIdentite['CP'], + 'ville' => $tabIdentite['Ville'], + 'dateAjout'=>date('Y-m-d'), + 'dateSuppr'=>0, + ); + $result = $iDb->insert('surveillances_site', $tabUpdate); + //Si l'insertion echoue, alors c'est une mise à jour + if ( !$result ) { + $result = $iDb->update('surveillances_site', + $tabUpdate, + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'" + ); + } + } + $output = new SetSurveillanceReturn(); + $output->result = $result; + return $output; + } + + /** + * getSurveillances + * @param SurveillancesFiltre $filtre + * @param integer $deb + * @param integer $nbRep + * @return SurveillancesReturn + */ + public function getSurveillances($filtre, $position=0, $nbRep=100) + { + $this->authenticate(); + $this->permission('survliste'); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 100; + + $error = new ErrorType(); + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + + $tri = strtolower(trim($filtre->tri)); + switch ($tri){ + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + $iDb = new WDB(); + $login = $this->User->login; + + if ($filtre->detail) { + $strSelect = 'source, email, siren, nic, ref, dateAjout, encoursClient, rs, cp, ville, dateDerEnvoi'; + } else { + $strSelect = 'source, email, siren, nic, ref, dateAjout, dateDerEnvoi'; + } + if ($filtre->source!='') $strSource = " AND source='$filtre->source' "; + else $strSource = ''; + + if ($siren>0) $strSiren = " AND siren=$siren "; + else $strSiren = ''; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', "login='$login' AND dateSuppr=0 $strSiren $strSource", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site', $strSelect, "login='$login' AND dateSuppr=0 $strSiren $strSource $orderBy LIMIT $position,$nbRep", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv){ + if (!$filtre->detail){ + $liste = new Surveillance(); + $liste->source = $tabSurv['source']; + $liste->email = $tabSurv['email']; + $liste->siren = $tabSurv['siren']; + $liste->nic = $tabSurv['nic']; + $liste->ref = $tabSurv['ref']; + $liste->dateAjout = $tabSurv['dateAjout']; //@todo : date + $liste->dateDerEnvoi = $tabSurv['dateDerEnvoi']; //@todo : date + $tabRet[] = $liste; + } else { + if (trim($tabSurv['rs'])<>'') { + $rs = $tabSurv['rs']; + $cp = $tabSurv['cp']; + $ville = $tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs = $tabIdentite['Nom']; + $cp = $tabIdentite['CP']; + $ville = $tabIdentite['Ville']; + $iDb->update('surveillances_site', array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic']." $strSource", + false + ); + } + $liste = new Surveillance(); + $liste->source = $tabSurv['source']; + $liste->email = $tabSurv['email']; + $liste->siren = $tabSurv['siren']; + $liste->nic = $tabSurv['nic']; + $liste->ref = $tabSurv['ref']; + $liste->dateAjout = $tabSurv['dateAjout']; //@todo : date + $liste->encoursClient = $tabSurv['encoursClient']; + $liste->rs = $rs; + $liste->cp = $cp; + $liste->ville = $ville; + $liste->dateDerEnvoi = $tabSurv['dateDerEnvoi']; //@todo : date + $tabRet[] = $liste; + } + } + $output = new SurveillancesReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Recherche par référence client + * @param string $search + * @param integer $position + * @param integer $nbRep + * @return SearchRefClientReturn + */ + public function searchRefClient($search, $position=0, $nbRep=20) + { + $this->authenticate(); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 20; + + $iDb = new WDB(); + $login = $this->User->login; + $orderBy = " ORDER BY dateAjout ASC"; + + if ($this->User->rechRefType=='CLI'){ + //On cherche les logins actifs pour le client + $idClient = $this->User->idClient; + + $where = "u.idClient='$idClient' AND u.actif=1 AND s.dateSuppr=0 AND ( s.siren='$search' OR s.ref='$search' OR s.rs='$search' )"; + // Il faut compter le nombre au total + $tabTmp = $iDb->select('surveillances_site s, utilisateurs u', 'count(*) as nb', $where.$orderBy, false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + // Execution de la requete + $tabTmp = $iDb->select('surveillances_site s, utilisateurs u', + "siren, nic, ref, source, DATE_FORMAT(dateAjout, '%Y-%m-%d') as dateAjout, DATE_FORMAT(dateDerEnvoi, '%Y-%m-%d') as dateEnvoi", + $where.$orderBy." LIMIT $position,$nbRep", false, MYSQL_ASSOC); + } else { + $where = "login='$login' AND dateSuppr=0 AND ( siren='$search' OR ref='$search' OR rs='$search' )"; + // Il faut compter le nombre au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', $where.$orderBy, false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + // Execution de la requete + $tabTmp = $iDb->select('surveillances_site', + "siren, nic, ref, source, DATE_FORMAT(dateAjout, '%Y-%m-%d') as dateAjout, DATE_FORMAT(dateDerEnvoi, '%Y-%m-%d') as dateEnvoi", + $where.$orderBy." LIMIT $position,$nbRep", false, MYSQL_ASSOC); + } + + $tabRet = array(); + if (count($tabTmp)>0) + { + foreach ($tabTmp as $i => $item) + { + $info = new SearchRefClientInfo(); + $info->ref = $item['ref']; + $info->source = $item['source']; + $info->dateAjout = $item['dateAjout']; + $info->dateEnvoi = $item['dateEnvoi']; + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($item['siren'], $item['nic']); + + $reponse = new SearchRefClient(); + $reponse->id = $tabIdentite['id']; + $reponse->Siret = $tabIdentite['Siret']; + $reponse->Siege = $tabIdentite['Siege']; + $reponse->Nom = prepareString(strtr($tabIdentite['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($tabIdentite['Nom2']); + $reponse->Sigle = prepareString($tabIdentite['Sigle']); + $reponse->Enseigne = prepareString($tabIdentite['Enseigne']); + $reponse->Adresse = prepareString($tabIdentite['Adresse']); + $reponse->Adresse2 = prepareString($tabIdentite['Adresse2']); + $reponse->CP = $tabIdentite['CP']; + $reponse->Ville = prepareString($tabIdentite['Ville']); + $reponse->Tel = $tabIdentite['Tel']; + $reponse->Fax = $tabIdentite['Fax']; + $reponse->FJ = $tabIdentite['FJ']; + $reponse->FJLib = prepareString($tabIdentite['FJ_lib']); + $reponse->Siren = $tabIdentite['Siren']; + $reponse->Nic = $tabIdentite['Nic']; + $reponse->Actif = $tabIdentite['Actif']; + $reponse->NafEtab = $tabIdentite['NafEtab']; + $reponse->NafEtabLib = $tabIdentite['NafEtabLib']; + $reponse->NafEnt = $tabIdentite['NafEnt']; + $reponse->NafEntLib = $tabIdentite['NafEntLib']; + $reponse->Infos = $info; + $tabRet[] = $reponse; + } + } + $output = new SearchRefClientReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne le bilan correspondant au siren, à l'exercice et au formalisme demandé + * + * @param string $siren Siren de l'entreprise + * @param string $millesime Date du bilan au format AAAAMMJJ + * @param string $typeBilan N:Réel Normal, S:Réel Simplifié, C:Consolidé + * @param string $ref Référence S&D obligatoire + * @return Bilan + */ + public function getBilan($siren, $millesime, $typeBilan='N', $ref='') + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + if (empty($typeBilan)) { $typeBilan = 'N'; } + if (empty($ref)) { $ref = ''; } + + debugLog('I',"Bilan $millesime $typeBilan demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $millesime = WDate::dateT('Ymd','d/m/Y',$millesime); + $mBil = new MBilans($siren); + $tabBilan = $mBil->getBilan($millesime, $typeBilan, $ref, true); + + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($tabBilan as $key => $value){ + if(!in_array($key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $key; + $resultPoste->val = $value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$key = $value; + } + } + $this->wsLog('bilan',$siren, $millesime.':'.$typeBilan.':'.$ref); + $resultBilan->POSTES = $tabPoste; + return $resultBilan; + } + + /** + * Retourne la liste des bilans disponible pour une entreprise + * + * @param string $siren Siren de l'entreprise + * @return ListeBilansReturn + */ + public function getListeBilans($siren) + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + $tabRet = array(); + debugLog('I',"Liste des Bilans demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + foreach($tabBilans as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + + debugLog('I', 'Nb Bilans retournés = '. count($tabBilans), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('listebilans', $siren); + $output = new ListeBilansReturn(); + $output->nbReponses = count($tabRet); + $output->result = $tabRet; + return $output; + } + + /** + * Vérifie si un siren existe en base Scores & Décisions + * @param string $siren Siren de l'entité + * @return boolean + */ + public function isSirenExistant($siren) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $siren = trim(substr($siren,0,9)); + $result = false; + debugLog('I',"Siren existant demandée pour siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->sirenExiste($siren); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = false; + } else { + debugLog('I', "Siren $siren présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + $this->wsLog('sirenExiste',$siren); + return $result; + } + + /** + * Retourne une annonce en fonction de sa référence + * + * @param string $siren Siren de l'entreprise + * @param string $dateAnnee + * @param integer $numParution + * @param integer $numAnnonce + * @return RechercheAnnonceReturn + */ + public function rechercheAnnonce($source, $dateAnnee, $numParution, $numAnnonce) + { + $this->authenticate(); + $this->permission('histobodacc'); + + //Initialisation + $tabRet = array(); + + debugLog('I',"Annonce précise demandée pour $source, $dateAnnee, $numParution, $numAnnonce",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($dateAnnee)==4) $annee = $dateAnnee; + else $annee = substr($dateAnnee,0,4); + + $iDb = new WDB('jo'); + + switch (strtoupper($source)) + { + case 'BODA': + case 'BODB': + case 'BODC': + $lettre = substr(strtoupper($source),3,1); + if ($annee<2005) { + if ($lettre=='A'){ $numJAL=1; } + elseif ($lettre=='B'){ $numJAL=200; } + else{ break; } + $anneeDeb = $annee.'0101'; + $anneeFin = $annee.'1231'; + $res = $iDb->select('historiques.entrep e, texte t', + "$annee AS Annee_Parution, e.NOBOD AS Num_Parution, e.NOANN AS Num_Annonce, e.NOPAGE AS Num_Page, e.`DATE` AS Date_Parution, e.DEPT AS Departement, e.CODTRI AS Tribunal_Code, 'I' AS typeAnnonce, CONCAT(e.NOANN,' - ',t.annonceTxt) AS annonce", + "e.JAL=$numJAL AND e.NOBOD=$numParution AND e.`DATE` BETWEEN $anneeDeb AND $anneeFin AND e.NOANN=$numAnnonce AND e.ANBASE=t.annonceNum", false, MYSQL_ASSOC); + } else { + $res = $iDb->select('bodacc', + 'Bodacc_Annee_Parution AS Annee_Parution, Bodacc_Num AS Num_Parution, Num_Annonce, Bodacc_Page AS Num_Page, Bodacc_Date_Parution AS Date_Parution, Tribunal_Dept AS Departement, Tribunal_Code, typeAnnonce, annonce', + "Bodacc_Code='$lettre' AND Bodacc_Annee_Parution=$annee AND Bodacc_Num=$numParution AND Num_Annonce=$numAnnonce", false, MYSQL_ASSOC); + } + break; + case 'ASSO': + $res = $iDb->select('asso', + 'YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Annonce, pageDeb AS Num_Page, Date_Parution, Departement, codTribunal AS Tribunal_Code, typeAnnonce, Annonce_Html AS annonce', "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$annee".sprintf('%04d', $numParution)." AND Num_Annonce=$numAnnonce", + false, MYSQL_ASSOC); + break; + case 'BALO': + $res = $iDb->select('balo', + "YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Affaire AS Num_Annonce, '' AS Num_Page, Date_Parution, '' AS Departement, '' AS Tribunal_Code, 'Insertion' AS typeAnnonce, Annonce_Html AS annonce", "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$numParution AND Num_Affaire=$numAnnonce", + false, MYSQL_ASSOC); + break; + } + + if (count($res)>0) + { + $iBodacc = new MBodacc(); + foreach ($res as $i => $etab) + { + $annonces = new AnnonceItem(); + $annonces->Annee_Parution = $etab['Annee_Parution']; + $annonces->Num_Parution = $etab['Num_Parution']; + $annonces->Num_Annonce = $etab['Num_Annonce']; + $annonces->Num_Page = $etab['Num_Page']; + $annonces->Date_Parution = $etab['Date_Parution']; //@todo : date + $annonces->Departement = $etab['Departement']; + $annonces->Tribunal_Code = $etab['Tribunal_Code']; + $annonces->Tribunal = $iBodacc->getTribunalNom($etab['Tribunal_Code']); + $annonces->Type_Annonce = $etab['typeAnnonce']; + $annonces->Annonce = strip_tags(strtr( + html_entity_decode($etab['annonce']), + array('>'=>'>','&'=>'&','<'=>'<','’'=>"'") + )); + + $tabRet[] = $annonces; + } + } + $nbTot = count($tabRet); + $output = new RechercheAnnonceReturn(); + $output->criteres = $criteres; + $output->nbReponses = $nbTot; + $output->nbReponsesTotal = $nbTot; + $output->result = $tabRet; + return $output; + } + + /** + * getRatios + * @param string $siren + * @param string $page + * @return RatiosReturn + */ + public function getRatios($siren, $page='ratios') + { + $this->authenticate(); + $this->permission('ratios'); + + global $tva, $mBil, $tabBilan, $efftr, $tabInfla; + $tabFormules = include APPLICATION_PATH . '/../library/Metier/scores/Variables/CacheTabFormules.php'; + require_once 'Metier/scores/Variables/configMRatios.php'; + + //Initialisation + if (empty($page)) $page = 'ratios'; + $tabRatiosInfos = $tabRatiosSecteurs = $tabBilansR = array(); + $tabRatios2 = $tabRatiosEvol = array(); + $tabRet = array(); + debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false); + debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $naf = $tabIdentite['NafEnt']; + $nafLib = $tabIdentite['NafEntLib']; + $efftr = $tabIdentite['Effectif']*1; + $fj = $tabIdentite['FJ']; + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getRatios sur $siren", print_r($tabBilans, true)); + $nbBilans = count($tabBilans); + $tabBilan = $tabBil = array(); + if ($nbBilans>0){ + $tabRatios = calculRatios($tabBilans, $tabIdentite, true); + } + $nbRatios = count($tabRatios); + debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /** Tableau d'infos sur les formules **/ + $tabBorneMin = $tabBorneMax = array(); + foreach ($tabFormules as $formule) { + $id = $formule['id']*1; + $libelle = $formule['libelle']; + $unite = $formule['unite']; + $commentaires = $formule['commentaires']; + $tabFormulesInfos[$id] = $formule; //Pour la gestion des unités des ratios secteur + $ratiosInfos = new RatiosInfos(); + $ratiosInfos->id = 'r'.$id; + $ratiosInfos->libelle = $formule['libelle']; + $ratiosInfos->unite = $formule['unite']; + $ratiosInfos->commentaires = $formule['commentaires']; + $tabRatiosInfos[] = $ratiosInfos; + $tabBorneMin[$id] = $formule['borneMin']; + $tabBorneMax[$id] = $formule['borneMax']; + } + + $tabAnnees = array(); + foreach ($tabRatios as $i=>$R) { + + //Informations sur le bilan + $bilansInfos = new RatiosBilansInfos(); + $bilansInfos->dateCloture = $tabBilan[$i]['DATE_CLOTURE']; //@todo : date + $bilansInfos->duree = $tabBilan[$i]['DUREE_MOIS']; + $bilansInfos->devise = $tabBilan[$i]['MONNAIE']; + $bilansInfos->typeBilan = $tabBilan[$i]['CONSOLIDE']; + $bilansInfos->unite = 'U'; + if ( substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900 ){ + $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); + } + + $tabRatiosEntrep = array(); + $tabRatiosEntrepEvol = array(); + foreach ( $R as $Ridx=>$Rmont ){ + + if ($Rmont<>'NS') { + if ( $tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx] ){ + $Rmont='<'.$tabBorneMin[$Ridx]; + } elseif ( $tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx] ){ + $Rmont='>'.$tabBorneMax[$Ridx]; + } + } + + // RatiosEntrep + $ratiosEntrep = new Ratios(); + if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>'){ + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = $Rmont; + } else { + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = round($Rmont,2); + } + $tabRatiosEntrep[] = $ratiosEntrep; + + if (($tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='S'||($tabBilan[$i+1]['CONSOLIDE']=='N'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) || + ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N'||($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]); + elseif ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='S'||($tabBilan[$i+2]['CONSOLIDE']=='N'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + || ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='N'||($tabBilan[$i+2]['CONSOLIDE']=='S'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]); + else + $Rmont='NS'; + + // RatiosEntrepEvol + $ratiosEntrepEvol = new Ratios(); + if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800){ + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = 'NS'; + } else { + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = number_format($Rmont,2,',',' '); + } + $tabRatiosEntrepEvol[] = $ratiosEntrepEvol; + } + $bilansInfos->RatiosEntrep = $tabRatiosEntrep; + $bilansInfos->RatiosEntrepEvol = $tabRatiosEntrepEvol; + $tabBilansR[] = $bilansInfos; + } + + debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + // Tableau des ratios secteurs + + if (strlen($naf)>4) $strNaf = " AND naf5='$naf' "; + else $strNaf = " AND naf4='$naf' "; + $strAnnees = implode(',', $tabAnnees); + + $tabRatiosSecteurs = array(); + + $tabAnnees = array_unique($tabAnnees); + + if ( count($tabAnnees)>0 ) + { + $iDb = new WDB('jo'); + $tabTmp = $iDb->select('ratios_secteurs', + 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', + "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", + false, MYSQL_ASSOC); + + $nbRatiosSec = 0; + foreach($tabAnnees as $annee) + { + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $annee; + foreach ($tabTmp as $tmp) + { + if ($tmp['annee']== $annee) + { + $Ridx = $tmp['id']; + if ($tmp['nombre']>$nbRatiosSec){ + $nbRatiosSec = $tmp['nombre']; + } + + $unite = $tabFormulesInfos[$Ridx]['unite']; + if ($unite=='EUR'){ + $montant = round($tmp['ratio']*1000); + } else { + $montant = round($tmp['ratio']); + } + if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]){ + $montant='<'.$tabBorneMin[$Ridx]; + } elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]){ + $montant='>'.$tabBorneMax[$Ridx]; + } + + $ratiosSecteurListe = new Ratios(); + if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>'){ + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = $montant; + } else { + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = round($montant,2); + } + $ratiosSecteur->liste[] = $ratiosSecteurListe; + } + } + $tabRatiosSecteurs[] = $ratiosSecteur; + } + } + + //$tabRatiosSecteurs=array(count($tabTmp), "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC"); + + $output = new RatiosReturn(); + $output->Nom = $tabIdentite['Nom']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->FJ = $fj; + $output->FJ_lib = $tabIdentite['FJ_lib']; + $output->Siren = $siren; + $output->NbEntNaf = $nbRatiosSec; + $output->BilansInfos = $tabBilansR; + $output->RatiosInfos = $tabRatiosInfos; + $output->RatiosSecteur = $tabRatiosSecteurs; + + debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->wsLog($page, $siren); + return $output; + + } + + /** + * getRapport + * @param string $siren Siren de l'entreprise + * @param integer $niveau Niveau du rapport 1, 2 ou 3 + * @param integer $id Identifiant interne S&D de l'entreprise + * @param boolean $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence facultative de la mise en Surveillance + * @param integer $encours Si $plus=true, encours facultatif Demandé par le client lors de la mise en Surveillance + * @param string $email Si $plus=true, email facultatif pour le suivi + * @return Rapport + */ + public function getRapport($siren, $niveau=3, $id=0, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + if (empty($niveau)) $niveau = 3; + if (empty($id)) $id = 0; + $result = new Rapport(); + $filtre = 0; + $idAnn = 0; + + //@todo : Gestion des droits + $perm = false; + switch($niveau){ + case 1: $perms = array('indiscore', 'indiscorep'); break; + case 2: $perms = array('indiscore2', 'indiscore2p'); break; + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + } + + $accesDist=true; + $nivComment=2; + if ($niveau==1){ + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + } elseif ($niveau==2) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + } elseif ($niveau==3) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + $result->Annonces = $this->getAnnonces($siren, $filtre, $idAnn); + } + return $result; + } + + /** + * Retourne la liste des banques connues pour une entreprise + * @param string $siren Siren de l'entreprise + * @return BanquesReturn + **/ + public function getBanques($siren) + { + $this->authenticate(); + $this->permission('banque'); + + //Initialisation + $iDb = new WDB('sdv1'); + $tabRet = array(); + debugLog('I',"Liste des banques demandée pour siren $siren", + __LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (intval($siren)<=1000) { + $this->sendError('1010'); + } + + $res=$iDb->select('banques', 'codeBanque, codeGuichet, libBanqueGuichet, precis, dateSource*1 AS dateSource', "siren=$siren", false, MYSQL_ASSOC); + $tmp=$iDb->select('fedRib', "codeBanque, codeGuichet, CONCAT(libBanque,' ',libGuichet) AS libBanqueGuichet, 0 AS precis, IF (dateInfo='0000-00-00', dateDispo*1, dateInfo*1) AS dateSource", "siren=$siren", false, MYSQL_ASSOC); + $res=array_merge($res, $tmp); + foreach ($res as $tabBanque){ + $dateSource=$tabBanque['dateSource']; + $codBanque=$tabBanque['codeBanque']; + $codGuichet=$tabBanque['codeGuichet']; + $libBanque=trim($tabBanque['libBanqueGuichet']); + $found=false; + $adrBanque1=$adrBanque2=$adrBanqueCP=$adrBanqueVille=''; + + if ($codBanque>0 && $codGuichet>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs b, insee.BDF_Guichets g', + 'g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville', "g.bdfFibCodeEtab=$codBanque AND g.bdfFibCodeGuichet=$codGuichet AND b.bdfFibCodeEtab=g.bdfFibCodeEtab", + false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + $found=true; + }; + } + if (!$found && $codBanque>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs', "bdfFibCodeEtab AS banque, '' AS guichet, bdfFibDenom40 AS nomBanque, '' AS nomGuichet, '' AS adresse1, '' AS adresse2, '' AS adresse3, '' AS CP, '' AS Ville", "bdfFibCodeEtab=$codBanque", false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + } else continue; + } else continue; + + $banque = new Banque(); + $banque->codeBanque = $codBanque; + $banque->codeGuichet = $codGuichet; + $banque->libBanque = $libBanque; + $banque->adresse1 = $adrBanque1; + $banque->adresse2 = $adrBanque2; + $banque->cp = $adrBanqueCP; + $banque->ville = $adrBanqueVille; + $tabRet[] = $banque; + } + debugLog('I',"Liste des banques pour siren $siren : ".count($tabRet).' banques',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('banque', $siren); + $output = new BanquesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des compétences territoriales pour un établissement à une adresse donnée. + * @param string $siret Siret de l'établissement + * @param string $type Type de compétence (pre:prefectures et s/prefectures, jal;journaux d'annonces légales, tri:tribunaux, adm:administrateurs et mandataires judiciaires, hui:huissiers, cfe:centres de formalités des entreprises) + * @param string $codeInsee Code Insee de la commune de l'établissement + * @return ListeCompetencesReturn + */ + public function getListeCompetences($siret, $type, $codeInsee) + { + $this->authenticate(); + $this->permission('competences'); + + //Initialisation + $error = new ErrorType(); + $type = strtolower($type); + + debugLog('I',"Liste des compétences $type demandée pour la commune $codeInsee",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + $iBodacc = new MBodacc(); + $cp=$codeInsee*1; + $dep=false; + if (substr($codeInsee,0,2)=='2A' || substr($codeInsee,0,2)=='2B') + { + $dep=20; $cp=20000+(substr($codeInsee,2,3))*1; + } + elseif ($cp>0 && $cp<100) $dep=$cp; + elseif ($cp>970 && $cp<977) $dep=$cp; + elseif ($cp>999 && $cp<10000) $dep='0'.substr($cp,0,1); + elseif ($cp>=10000 && $cp<96000) $dep=substr($cp,0,2); + elseif ($cp>=99000) $dep=substr($cp,0,2); + elseif ($cp>=98000) $dep=substr($cp,0,3); + elseif ($cp>=97100 && $cp<97700) $dep=substr($cp,0,3); + + if ($type=='pre'){ + + $iDb = new WDB('jo'); + $tabTmp2 = $iDb->select('villes', 'DEP, COM, AR, CT', 'codeInsee='.$codeInsee, false, MYSQL_ASSOC); + $arrond = $tabTmp2[0]['AR']; + unset($iDb); + $iDb = new WDB('insee'); + $tabTmp2 = $iDb->select('insee_tabArrond', 'CHEFLIEU, ARTMAJ, NCC', "DEP='$dep' AND AR='$arrond'", false, MYSQL_ASSOC); + $nomSousPref = trim(strtr($tabTmp2[0]['ARTMAJ'],array('('=>'',')'=>'',' '=>'', "'"=>'')).' '.$tabTmp2[0]['NCC']); + unset($iDb); + $tabTmp = $iBodacc->getTribunauxParDep($dep); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='A' || $tribunal['triType']=='B') + { + $pref = levenshtein($tribunal['triNom'], 'PREFECTURE DE '.$nomSousPref); + $spref = levenshtein($tribunal['triNom'], 'SOUS PREFECTURE DE '.$nomSousPref); + + if ($tribunal['triType']=='B' && ($pref>7 || $spref>5)) continue; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType'].$typeP; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper( + preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + $tabRet[] = $competence; + + } + } + + } elseif ($type=='jal') { + + $tabTmp = $iBodacc->getJALparDep($dep); + foreach ($tabTmp as $i=>$comp) + { + $infos=''; + if (trim($comp['parution'])<>'') $infos.='Parution '.$comp['parution'].'. '; + if (trim($comp['aboAnnuel'])>0) $infos.='Abonnement Annuel : '.$comp['aboAnnuel'].' euros. '; + if (trim($comp['infos'])<>'') $infos.=$comp['infos']; + + $competence = new Competence(); + $competence->Id = 9000+$comp['id']*1; + $competence->IdSup = 0; + $competence->Code = ''; + $competence->Type = ''; + $competence->Nom = strtoupper($comp['nomJal']); + $competence->Siret = ''; + $competence->Adr = strtoupper($comp['adresse']); + $competence->AdrComp = ''; + $competence->CP = $comp['cp']; + $competence->Ville = strtoupper($comp['ville']); + $competence->CodeInsee = ''; + $competence->Tel = $comp['tel']; + $competence->Fax = $comp['fax']; + $competence->Web = $comp['siteWeb']; + $competence->Mail = $comp['email']; + $competence->Statut = 'Actif'; + $competence->DateCessation = ''; + $competence->Remarque = trim($infos); + $tabRet[] = $competence; + } + + } elseif ($type=='tri' || $type=='adm' || $type=='hui') { + + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if (//$tribunal['triType']=='C' || + $tribunal['triType']=='G'// || + /*$tribunal['triType']=='I'*/) { + $idCA = $tribunal['triIdSup']; + $codeTGI = $tribunal['triCode']; + $code = strtoupper(substr($tribunal['triCode'],0,3)); + } + debugLog('D',"Liste des compétences $type demandée pour la commune $codeInsee ($dep) : ". + "Type=".$tribunal['triType'].', '. + "Code=".$tribunal[$codeTGI],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($tribunal['triType']<>'E' && $tribunal['triType']<>'O' && + $tribunal['triType']<>'T' && $tribunal['triType']<>'R' && + $tribunal['triType']<>'N' && $tribunal['triType']<>'U' && + $tribunal['triType']<>'Z') + { + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper(Scores_Locale_String::cleanstring($tribunal['triNom'])); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(Scores_Locale_String::cleanstring(preg_replace('/ +/',' ', + $tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie']))); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + if ($tribunal['triNumGreffe']*1>0) + { + $competence->IdentifiantGreffe = $tribunal['triNumGreffe']; + } + $tabRet[] = $competence; + } + } + } + + if ($type=='adm') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getMandataires(array($idCA), false); + $tabRet = array(); + $nbAff=0; + foreach ($tabTmp as $i=>$tribunal) + { /** @todo A revoir Debut **/ + if (stripos($tribunal['tribunal'], $code)!==false || + stripos($tribunal['tribunal'], 'SAINT')!==false) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + $nbAff++; + } + } + if ($nbAff==0) + { + foreach ($tabTmp as $i=>$tribunal) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + } + }/** @todo A revoir Fin : Lier correctement les mandataires à un TI principal **/ + } + elseif ($type=='hui') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getHuissiers(array($codeTGI), false); + + $tabRet = array(); + $nbAff = 0; + foreach ($tabTmp as $i=>$tribunal) + { + $adr = $iInsee->structureVoie($tribunal['adresse']); + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($adr['num'].' '.$adr['adr_btq'].' '. + $adr['typeVoie'].' '.$adr['libVoie']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $adr['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation']; + $competence->Remarque = strtr($tribunal['contact'], + array( '
'=>', ', '
'=>', ', + '
'=>', ', + )); + $tabRet[] = $competence; + } + $nbComp = count($tabTmp); + debugLog('I',"$nbComp compétences $type trouvées pour le tribunal $codeTGI",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + elseif ($type=='cfe') + { + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='C' || $tribunal['triType']=='O' || + $tribunal['triType']=='T' || $tribunal['triType']=='R' || + $tribunal['triType']=='N' || $tribunal['triType']=='U' || + $tribunal['triType']=='Z') + { + if (strlen($tribunal['triCommentaire'])==32 && + strpos($tribunal['triCommentaire'], ' ')===false) + $remarque=''; + else $remarque=$tribunal['triCommentaire']; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '.$tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '.$tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $remarque; + $tabRet[] = $competence; + } + } + } + $this->wsLog('competences',$siret,$type.'/'.$codeInsee); + $output = new ListeCompetencesReturn(); + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + return $output; + } + + /** + * Retourne le statut du webservice + * @return StatusReturn + */ + public function status() + { + /* @todo tester les différents éléments qui peuvent conduire + * à un problème dans les services tel que la connexion à la + * base de données, l'accès FTP, l'accès HTTP, l'accès système de fichier + */ + + //Enregistrement des accès à la requête getIdentite + Zend_Registry::get('WsLogger')->info("status - ip:". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']. + ", hash:".$_SERVER['PHP_AUTH_PW']); + + $error = new StatusReturn(); + //Test connexion à la base de données + $db = new WDB('jo'); + if (!$db) { + $error->statusCode = 9000; + $error->statusMsg = $this->listError['9000']; + } else { + $error->statusCode = 3000; + $error->statusMsg = $this->listError['3000']; + } + return $error; + } + +} + +?> \ No newline at end of file diff --git a/library/WsScore/Entreprise/v0.6/Service.php b/library/WsScore/Entreprise/v0.6/Service.php new file mode 100644 index 00000000..31041b65 --- /dev/null +++ b/library/WsScore/Entreprise/v0.6/Service.php @@ -0,0 +1,3503 @@ +authenticate(); + $this->permission('identite'); + + //Initialisation + if (empty($id)) { $id = 0; } + $forceVerif = false; + + $tdeb = microtime(1); + $ligne = date('YmdHis').";$siret;Ws->getIdentite Avant ..."; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep) || empty($entrep['id']) ) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->AncienSiege = $entrep['AncienSiege']; + $identite->AncienSiegeDateFin = $entrep['AncienSiegeDateFin']; + $identite->TribunalCode = prepareString($entrep['Tribunal']); + $identite->TribunalLib = prepareString($entrep['TribunalLib']); + //'NumGreffe' = $entrep['numGreffe'], // Ajouté le 4 08 2009 + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->ActifEco = $entrep['ActifEco']; // Etab éco actif, ajout le 28/04/2011 + $identite->ActifEcoDate = $entrep['ActifEcoDate']; // Date si éco inactif et jur actif + $identite->ActifEcoType = $entrep['ActifEcoType']; // vide ou NPAI ou PFER ou ECOF + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = prepareString($entrep['Tel']); + $identite->Fax = prepareString($entrep['Fax']); + $identite->Web = prepareString($entrep['Web']); + $identite->Mail = prepareString($entrep['Mail']); + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + + $geoInfos = new GeoInfos(); + $geoInfos->CUCS = $entrep['GeoInfos']['CUCS']; + $geoInfos->NCUCS = $entrep['GeoInfos']['NCUCS']; + $geoInfos->ZRU = $entrep['GeoInfos']['ZRU']; + $geoInfos->NZRU = $entrep['GeoInfos']['NZRU']; + $geoInfos->ZFU = $entrep['GeoInfos']['ZFU']; + $geoInfos->NZFU = $entrep['GeoInfos']['NZFU']; + $geoInfos->ZUS = $entrep['GeoInfos']['ZUS']; + $geoInfos->NZUS = $entrep['GeoInfos']['NZUS']; + $geoInfos->AFR = $entrep['GeoInfos']['AFR']; + $geoInfos->NAFR = $entrep['GeoInfos']['NAFR']; + $geoInfos->ZRR = $entrep['GeoInfos']['ZRR']; + $geoInfos->NZRR = $entrep['GeoInfos']['NZRR']; + $identite->GeoInfos = $geoInfos; + + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = prepareString($entrep['APRM_Lib']); + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = prepareString($entrep['CapitalType']); // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + //'DateMajRCS' = $entrep['DateMajRCS'], // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = prepareString($entrep['codeCommune']); + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->TrancheCAType = $entrep['TrancheCAType']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = prepareString($entrep['dir1Titre']); + $identite->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $identite->dir1DateFct = prepareString($entrep['dir1DateFct']); //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = prepareString($entrep['dir1LieuNaiss']); // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = prepareString($entrep['dir2Titre']); + $identite->dir2NomPrenom = prepareString($entrep['dir2NomPrenom']); + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = prepareString($entrep['dir2DateNaiss']); //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = prepareString($entrep['dir2LieuNaiss']); // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = prepareString($entrep['InfosIris']['libIris']); + $identite->InfosIris->typIris = prepareString($entrep['InfosIris']['typIris']); + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SurfaceMagasin = $entrep['ACTISURF']*1; // 0=N/D, 1=inf. à 300m2,2=300 à 400m2, 3=400 à 2500m2, 4=sup. à 2500m2 + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Millesime = $entrep['bilanAnnee']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->CAestime = $entrep['bilanFLestime']; + $identite->Bilan->Resultat = prepareString($entrep['bilanHN']); + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $tabAutreSiret = array(); + if (count($entrep['AutreSiret'])) { + foreach($entrep['AutreSiret'] as $type => $item) { + $autreSiret = new AutreSiret(); + $autreSiret->type = $type; + $autreSiret->siren = $item['siren']; + $autreSiret->nic = $item['nic']; + $autreSiret->apeEtab = $item['apeEtab']; + $autreSiret->codeEve = $item['codeEve']; + $autreSiret->dateEve = $item['dateEve']; + $autreSiret->adrL1 = $item['adrL1']; + $autreSiret->adrL2 = $item['adrL2']; + $autreSiret->adrL3 = $item['adrL3']; + $autreSiret->adrL4 = $item['adrL4']; + $autreSiret->adrL5 = $item['adrL5']; + $autreSiret->adrL6 = $item['adrL6']; + $autreSiret->adrL7 = $item['adrL7']; + $autreSiret->depCom = $item['depCom']; + $autreSiret->rivoli = $item['rivoli']; + $autreSiret->siege = $item['siege']; + $autreSiret->destinat = $item['destinat']; + $autreSiret->typEtab = $item['typeEtab']; + $autreSiret->origine = $item['origine']; + $tabAutreSiret[] = $autreSiret; + } + } + $identite->AutreSiret = $tabAutreSiret; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + //'importExport' = $entrep['importExport'], + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $identite->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + $duree=round(microtime(1)-$tdeb,3); + $ligne=date('YmdHis').";$siret;Ws->getIdentite APRES ($duree s) !!!"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + return $identite; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param integer $id Identifiant S&D de l'établissement + * @return IdentiteProcol Fiche d'identité de l'établissement + */ + public function getIdentiteProcol($siret, $id=0, $forceVerif=false) + { + $this->authenticate(); + $this->permission('idprocol'); + + debugLog('I',"Identité AGS demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if (intval($siren)==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identiteProcol = new IdentiteProcol(); + + //Element identite + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->TribunalCode = $entrep['Tribunal']; + $identite->TribunalLib = $entrep['TribunalLib']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = strtr($entrep['Nom'],'/*',' '); + $identite->Nom2 = $entrep['Nom2']; + $identite->NomLong = $entrep['nomLong']; // Ajouté le 4 08 2009 + $identite->NomCommercial = $entrep['NomCommercial']; // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = $entrep['Sigle']; + $identite->SigleLong = $entrep['sigleLong']; // Ajouté le 4 08 2009 + $identite->Enseigne = $entrep['Enseigne']; + $identite->EnseigneLong = $entrep['enseigneLong']; // Ajouté le 16 11 2010 + $identite->Adresse = $entrep['Adresse']; + $identite->Adresse2 = $entrep['Adresse2']; + $identite->AdresseNum = $entrep['AdresseNum']; + $identite->AdresseBtq = $entrep['AdresseBtq']; + $identite->AdresseVoie = $entrep['AdresseVoie']; + $identite->AdresseRue = $entrep['AdresseRue']; + $identite->CP = $entrep['CP']; + $identite->Ville = $entrep['Ville']; + $identite->Pays = $entrep['Pays']; // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = $entrep['Tel']; + $identite->Fax = $entrep['Fax']; + $identite->Web = $entrep['Web']; + $identite->Mail = $entrep['Mail']; + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->GeoInfos = $entrep['GeoInfos']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = $entrep['APRM_Lib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = $entrep['CapitalType']; // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = $entrep['codeCommune']; + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = $entrep['dir1Titre']; + $identite->dir1NomPrenom = $entrep['dir1NomPrenom']; + $identite->dir1DateFct = $entrep['dir1DateFct']; //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = $entrep['dir1LieuNaiss']; // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = $entrep['dir2Titre']; + $identite->dir2NomPrenom = $entrep['dir2NomPrenom']; + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = $entrep['dir2DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = $entrep['dir2LieuNaiss']; // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = $entrep['InfosIris']['libIris']; + $identite->InfosIris->typIris = $entrep['InfosIris']['typIris']; + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = $entrep['bilanHN']; + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = $entrep2['apen4_lib']; + $identite->Naf4EtabLib = $entrep2['apet4_lib']; + } + + $identiteProcol->Identite = $identite; + + //Eléments annonces légales + $tabRetAnn = $tabLastEven = array(); + if (intval($siren)!=0) { + $anns = $this->getAnnonces($siren, 1); + $anns = $anns->result; + $tribunalProcol = false; + foreach ($anns as $nb=>$ann) + { + $tabRetEven = array(); + foreach ($ann->evenements as $tabEven) { + // On ignore les éléments suivants + if ($tabEven->CodeEven>=7000) continue; + if ($tabEven->CodeEven>=4000 && $tabEven->CodeEven<=4999) continue; + + // Par défaut, on force le tribunal à celui présent dans la dernière annonce de Procol + if ($tribunalProcol==false && $tabEven->CodeEven>=1000 && $tabEven->CodeEven<2000 && $ann->BodaccCode=='BODA') { + $identiteProcol->TribunalCode = $ann->TribunalCode; + $identiteProcol->TribunalLib = prepareString($ann->Tribunal); + $tribunalProcol=true; + } + + // On ne prend que le dernier élément de chaque type + if (in_array($tabEven->CodeEven, $tabLastEven)) continue; + + $tabLastEven[] = $tabEven->CodeEven; + $tabRetEven[] = $tabEven; + } + + if (count($tabRetEven)>0) { + $annonce = new Annonce(); + $annonce->id = $ann->id; + $annonce->BodaccCode = $ann->BodaccCode; + $annonce->BodaccNum = $ann->BodaccNum; + $annonce->NumAnnonce = $ann->NumAnnonce; + $annonce->DateParution = $ann->DateParution; //@todo : date + $annonce->Departement = $ann->Departement; + $annonce->Tribunal = $ann->Tribunal; + $annonce->TribunalCode = $ann->TribunalCode; + $annonce->TribunalSiret = $ann->TribunalSiret; + $annonce->Rubrique = $ann->Rubrique; + $annonce->typeAnnonce = $ann->typeAnnonce; + $annonce->texteRectificatif = $ann->texteRectificatif; + $annonce->texteAnnonce = utf8_encode($ann->texteAnnonce); + $annonce->dateEffet = $ann->dateEffet; //@todo : date + $annonce->dateJugement = $ann->dateJugement; //@todo : date + $annonce->dateInsertionSD = $ann->dateInsertionSD; //@todo : date + $annonce->evenements = $tabRetEven; + $annonce->Lien_Annonce_Pdf = $ann->Lien_Annonce_Pdf; + $tabRetAnn[] = $annonce; + } + } + $identiteProcol->Annonces = $tabRetAnn; + + $iRncs = new MRncs(); + if ($entrep['Siege']==1 || $entrep['Siege']==11) { + $identiteProcol->LibTypeEtab = 'Etablissement Siege'; + } else { + $tabEtabRncs = $iRncs->getIdentiteEtab($siren, $entrep['Nic']); + if ($tabEtabRncs['Siege']==2) $identiteProcol->LibTypeEtab = 'Etablissement Principal'; + elseif ($tabEtabRncs['Siege']==1) $identiteProcol->LibTypeEtab = 'Etablissement Complementaire'; + elseif ($tabEtabRncs['Siege']==0) $identiteProcol->LibTypeEtab = 'Etablissement Secondaire'; + } + + //@todo + $tabJuge = $iRncs->getIntervenants($siren); + $tabDepots=array(); + foreach ($tabJuge as $iDepot=>$depot) { + $organe = new Organe(); + $organe->codEven = $depot['codEven']; + $organe->libEven = prepareString($depot['libEven']); + $organe->dateEffet = $depot['dateEffet']; + $organe->admcode = $depot['admcode']; + $organe->admfonction = prepareString($depot['admfonction']); + $organe->admnom = prepareString($depot['admnom']); + $organe->admadrNum = $depot['admadrNum']; + $organe->admadrInd = $depot['admadrInd']; + $organe->admadrVoie = $depot['admadrVoie']; // @todo : adm1adr1, adm1adr2, adm1adr3, + $organe->admadrCP = $depot['admadrCP']; + $organe->admadrVille = $depot['admadrVille']; + $tabDepots[] = $organe; + } + $identiteProcol->Organes = $tabDepots; + + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, 1); + $nbA = count($tabA); + $tabAct = array(); + foreach ($tabA as $i=>$lien) { + $liens = new Actionnaire(); + $liens->Pmin = $lien['Pmin']; + $liens->MajMin = $lien['MajMin']; + $liens->RaisonSociale = $lien['RaisonSociale']; + $liens->Pays = $lien['Pays']; + $liens->Siren = $lien['Siren']; + $liens->Actif = $lien['Actif']; + $tabAct[] = $liens; + } + $identiteProcol->Actionnaires = $tabAct; + + $iGreffes = new MGreffes(); + $tabActes = $iGreffes->getListeActes($siren); + + $identiteProcol->StatutsModifDepot = $identiteProcol->StatutsModif = '0000-00-00'; + foreach ($tabActes as $i=>$acte) { + if ('_'.$acte['acte_type']=='_04') { // STATUTS CONSTITUTIFS + $identiteProcol->StatutsConstDepot = $acte['depot_date']; // => 1997-12-18 + $identiteProcol->StatutsConst = $acte['acte_date']; // => 1997-11-13 + break; + } elseif (in_array('_'.$acte['acte_type'], array( + //'_04', // STATUTS CONSTITUTIFS + '_06', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_07', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_08', // STATUTS A JOUR ET DECLARATION DE CONFORMITE 9 0000-00-00 2009-09-02 17:05:55 + '_09', // STATUTS APRES TRANSFERT DE SIEGE 9 0000-00-00 2009-09-02 17:05:55 + '_A1', // STATUTS 9 0000-00-00 2009-09-02 17:05:55 + '_AH', // AVENANT AUX STATUTS + ))) { + // On ne prend que la dernière modif + if ($identiteProcol->StatutsModifDepot=='0000-00-00' && $identiteProcol->StatutsModif=='0000-00-00') { + $identiteProcol->StatutsModifDepot = $acte['depot_date'];// => 1997-12-18 + $identiteProcol->StatutsModif = $acte['acte_date']; // => 1997-11-13 + } + } + } + + /** Y a t il eu des informations relatives à une cession ? **/ + $tabCes = $iGreffes->getInfosCessions($siren); + if ($tabCes) { + $identiteProcol->CessionJugeLib = $tabCes['cessJuge']; + $identiteProcol->CessionJugeDate = $tabCes['cessDateJuge']; + $identiteProcol->CessionAvisBodac = $tabCes['cessDateBod']; + $identiteProcol->CessionInvenDate = $tabCes['cessDateInv']; + $identiteProcol->CessionCAdeclare = $tabCes['cessCAdec']; + $identiteProcol->CessionEffectif = $tabCes['cessEffectif']; + $identiteProcol->CessionDesc = $tabCes['cessDesc']; + $identiteProcol->CessionDescDate = $tabCes['cessDateDesc']; + $identiteProcol->CessionOffreDate = $tabCes['cessDateLim']; + $identiteProcol->CessionMandataire = $tabCes['cessMand']; + } + } + //sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug $siren", print_r($tabRet,true)) ; + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + return $identiteProcol; + } + + /** + * Retourne les liens financiers pour une entreprise. + * @param string $siren Siren de l'entreprise + * @param boolean $actifsUniquement Uniquement les liens Actifs + * @return LiensReturn + */ + public function getLiens($siren, $actifsUniquement = true) + { + $this->authenticate(); + $this->permission('liens'); + + //Initialisation + if (empty($actifsUniquement)) { $actifsUniquement = true; } + $tabAct = $tabPar = array(); + + debugLog('I',"Liens entreprises demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, $actifsUniquement); + $nbA = count($tabA); + $tabAct = array(); + if ($nbA > 0) { + foreach ($tabA as $i => $lien) { + $actionnaire = new Actionnaire(); + $actionnaire->Pmin = $lien['Pmin']; + $actionnaire->MajMin = $lien['MajMin']; + $actionnaire->RaisonSociale = $lien['RaisonSociale']; + $actionnaire->TypeEntrep = $lien['TypeEntrep']; + $actionnaire->Pays = $lien['Pays']; + $actionnaire->Siren = $lien['Siren']; + $actionnaire->Actif = $lien['Actif']; + $actionnaire->Source = $lien['Source']; + $actionnaire->DateLien = $lien['DateLien']; //@todo : date + $actionnaire->DateMaj = $lien['DateMaj']; //@todo : date + $tabAct[] = $actionnaire; + } + } + debugLog('W', "$nbA actionnaires pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $tabP = $mLiens->getParticipations($siren, $actifsUniquement); + $nbP = count($tabP); + $tabPar = array(); + if ($nbP > 0) { + foreach ($tabP as $i => $lien) { + $participation = new Participation(); + $participation->Pmin = $lien['Pmin']; + $participation->MajMin = $lien['MajMin']; + $participation->RaisonSociale = $lien['RaisonSociale']; + $participation->TypeEntrep = $lien['TypeEntrep']; + $participation->Pays = $lien['Pays']; + $participation->Siren = $lien['Siren']; + $participation->Actif = $lien['Actif']; + $participation->Source = $lien['Source']; + $participation->DateLien = $lien['DateLien']; //@todo : date + $participation->DateMaj = $lien['DateMaj']; //@todo : date + $tabPar[] = $participation; + } + } + debugLog('W', "$nbP participations pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('liens',$siren); + + $output = new LiensReturn(); + $output->actionnaires = $tabAct; + $output->participations = $tabPar; + return $output; + } + + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, Néant=Tous + * @param integer $position + * @param integer $nbRep + * @return ListeEtablissementsReturn + */ + public function getListeEtablissements($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('etablissements'); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (!in_array($actif, array(0,1))) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + $departement = $dep; + + debugLog('I',"Liste des établissements demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + $result = array(); + if (count($etabs)>0) + { + foreach ($etabs as $nb => $etab) + { + $etablissement = new Etablissement(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + $result[] = $etablissement; + } + } + debugLog('I', "Nb Etablissements retournés ($departement, $actif) = ". count($result), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('etablissements',$siren); + $output = new ListeEtablissementsReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } + + /** + * Retourne l'ensemble des informations identitaires des dirigeants de l'entreprise + * @param string $siren Siren de l'entreprise + * @param bool $histo Afficher l'historique des dirigeants + * @return DirigeantsReturn Liste des dirigeants actifs de l'entreprise + */ + public function getDirigeants( $siren , $histo = false) + { + $this->authenticate(); + $this->permission('dirigeants'); + + //Initialisation + if (empty($histo)) { $histo = false; } + + //Zend_Registry::get('WsLogger')->info('HISTO : '.$histo); + + debugLog('I',"Dirigeants demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeants($siren, $histo); + //debugLog('W', print_r($dirs, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $dirigeant = new Dirigeant(); + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Titre = $dir['Titre']; + $dirigeant->Societe = $dir['Societe']; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + $dirigeant->NomUsage = $dir['NomUsage']; + $dirigeant->NaissDate = $dir['NaissDate']; //@todo : date + $dirigeant->NaissVille = $dir['NaissVille']; + $dirigeant->NaissDepPays = $dir['NaissDepPays']; + $dirigeant->Ancien = $dir['Ancien']; + $dirigeant->DateFct = $dir['DateFct']; //@todo : date + $liste[] = $dirigeant; + } + $this->wsLog('dirigeants',$siren,$option); + debugLog('I', 'Nb Dirigeants retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $output = new DirigeantsReturn(); + $output->result = $liste; + return $output; + } + + /** + * Retourne la liste des annonces légales relative à une entreprise + * + * @todo Revoir cette fonction pour la faire marcher avec les associations + * + * @param string $siren Siren de l'entreprise + * @param integer $filtre 0=Pas de Filtre, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param integer $position + * @param integer $nbRep + * @return AnnoncesReturn + */ + public function getAnnonces($siren, $filtre = 0, $idAnn = '', $position = 0, $nbRep = 100) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($filtre)) { $filtre = 0; } + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = array(); + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + /* + if ($siren>100 && $filtre==3) $asso=true; + else { + $asso=false; + $tabIdentite=$this->iInsee->getIdentiteLight($siren); + if ($tabIdentite['FJ']>90 && $tabIdentite['FJ']<94 || + $tabIdentite['FJ']>9000 && $tabIdentite['FJ']<9400) $asso=true; + }*/ + if ($idAnn=='') { + $anns=$iInsee->getAnnoncesLegales($siren); + $annsB=$iInsee->getAnnoncesBalo($siren); + $annsA=$iInsee->getAnnoncesAsso($siren); + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + } elseif ($filtre==1) + $anns=$iInsee->getAnnoncesLegales($siren, $idAnn); + elseif ($filtre==2) + $annsB=$iInsee->getAnnoncesBalo($siren, $idAnn); + elseif ($filtre==3) + $annsA=$iInsee->getAnnoncesAsso($siren, $idAnn); + elseif ($filtre==4) + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($anns) && empty($annsB) && empty($annsA) && empty($annsM)) + { + debugLog('W', "Aucune annonce pour le siren $siren (source=$filtre, id=$idAnn)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant B '.$siren.' '.$idAnn; + } + else + { + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = prepareString($ann['texteAnnonce']); + $annonce->libFJ = $ann['libFJ']; + $annonce->codFJ = $ann['codFJ']; + $annonce->capital = $ann['capital']; + $annonce->capitalDev = $ann['capitalDev']; + + $annonce->raisonSociale = $ann['raisonSociale']; + $annonce->nomCommercial = $ann['nomCommercial']; + $annonce->sigle = $ann['sigle']; + $annonce->adresse = $ann['adresse']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + + if (is_array($annsB)) + { + foreach ($annsB as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsA)) + { + foreach ($annsA as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsM)) + { + foreach ($annsM as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + } + + $nbReponses = count($liste); + if ($nbReponses>0){ + //$liste = array_slice($liste, $position, $nbRep); + } + debugLog('I', "Nb Annonces $filtre retournées pour $siren (source=$filtre, id=$idAnn) = ". count($liste), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('annonces',$siren,$filtre.'/'.$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Evaluation indiScore d'une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic Nic de l'établissement + * @param integer $niveau Niveau des commentaires + * @param bool $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence de la mise en Surveillance + * @param integer $encours Si $plus=true, encours client demandé lors de la mise en Surveillance + * @param string $email Si $plus=true, email client pour la mise en surveillance + * @return Indiscore + */ + public function getIndiScore($siren, $nic=0, $niveau=2, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + + //Initialisation + $accesDist = true; + if (empty($nic)) { $nic = 0; } + if (empty($niveau)) { $niveau = 2; } + if (empty($plus)) { $plus = false; } + if ( !in_array($niveau, array(0,1,2,3,4,5)) ) { $niveau = 2; } + $perm = false; + //@todo : Gestion des droits + switch($niveau){ + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + case 2: $perms = array('indiscore2', 'indiscore2p', 'indiscore3', 'indiscore3p'); break; + case 1: $perms = array('indiscore', 'indiscorep'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + } + + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesDist, $niveau); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new Indiscore(); + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $output->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $output->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $output->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $output->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $output->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $output->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + foreach($value as $comment) { + $tab[] = Scores_Locale_String::fixEncoding($comment); + } + $output->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + if (count($tab)>0) { + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $output->tabVariables = $variables; + + } elseif ($key=='Bilans') { + + $tab = array(); + foreach($value as $item) + { + $objet = new IndiscoreBilans(); + $objet->Millesime = $item['Millesime']; + $objet->FraisPerso = $item['FraisPerso']; + $objet->CA = $item['CA']; + $objet->EBE = $item['EBE']; + $objet->TxInvest = $item['TxInvest']; + $objet->TxEndett = $item['TxEndett']; + $objet->DettesCT = $item['DettesCT']; + $objet->FraisFi = $item['FraisFi']; + $objet->BFR = $item['BFR']; + $objet->FR = $item['FR']; + $objet->FondsPr = $item['FondsPr']; + $objet->DelaiCli = $item['DelaiCli']; + $objet->DelaiFour = $item['DelaiFour']; + $tab[] = $objet; + } + $output->$key = $tab; + } else { + $output->$key = $value; + } + } + + if ($plus) { + if (empty($ref)) $ref='Indiscore+'; + if (empty($email)) $email=$this->User->email; + $this->setSurveillance($siren, $email, $ref, 'privileges'); + $this->setSurveillance($siren, $email, $ref, 'score', false, $encours); + if ($this->User->idClient==89) + $this->setSurveillance($siren, $email, $ref, 'annonces'); + $this->wsLog('indiscore+',$siren); + } else + $this->wsLog('indiscore',$siren); + return $output; + } + + /** + * Liste de tous les évènements enregistrés à l'INSEE pour une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic + * @param integer $position + * @param integer $nbRep + * @return InseeReturn + **/ + public function getListeEvenements($siren, $nic=0, $position=0, $nbRep=1000) + { + $this->authenticate(); + $this->permission('eveninsee'); + + //Initialisation + if (empty($nic)) { $nic = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep) || $nbRep>1000) { $nbRep = 1000; } + + debugLog('I',"Liste des évènements pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $evens = $iInsee->getEvenements($siren, $nic, $position, $nbRep); + $tabRet = array(); + if (count($evens)>0) { + foreach ($evens as $key => $row) { + $date[$key] = $row['dateMAJ']; + } + array_multisort($date, SORT_DESC, $evens); + foreach ($evens as $nb=>$even) { + $iEven = new InseeEven(); + $iEven->Nic = $even['nic']; + $iEven->Siege = $even['siege']; + $iEven->SiretAss = $even['siretAssocie']; + $iEven->TypeSiretAss = $even['typeSiretAss']; + $iEven->EvenCode = $even['codeEven']; + $iEven->EvenLib = $even['libEven']; + $iEven->EvenLibDet = $even['libEvenDet']; + $iEven->EvenDate = $even['dateEven']; //@todo : date + $iEven->DateInfo = $even['dateMAJ']; //@todo : date + $tabRet[] = $iEven; + } + } + + debugLog('I', 'Nb évènements retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('evenements',$siren); + $output = new InseeReturn(); + $output->nbReponses = count($tabRet); // @todo : retrouver le nombre total d'évenements + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + $entCriteres->codePostal + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + empty($entCriteres->actif) ? false : $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + + /** + * Recherche d'entreprise par dirigeants + * @param DirigeantCriteres $criteres + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchDirReturn + */ + public function searchDir($criteres, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + $nom = $criteres->nom; + $prenom = $criteres->prenom; + $dateNaiss = $criteres->dateNaiss; + $lieuNaiss = $criteres->lieuNaiss; + $pertinence = $criteres->pertinence; + + debugLog('I',"Recherche Dirigeant de $nom, $prenom, $dateNaiss, $lieuNaiss (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($prenom)) $prenom = ''; + if (empty($dateNaiss)) $dateNaiss = ''; + if (empty($lieuNaiss)) $lieuNaiss = ''; + if (empty($pertinence)) $pertinence = false; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheDir($nom, $prenom, '', $dateNaiss, $lieuNaiss, $deb, $nbRep, $maxRep, $pertinence); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $item = new EntrepriseDirItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + + // Dirigeant + $item->DirRs = prepareString($etab['DirRs']); + $item->DirNom = prepareString($etab['DirNom']); + $item->DirPrenom = prepareString($etab['DirPrenom']); + $item->DirNomUsage = prepareString($etab['DirNomUsage']); + $item->DirDateEffet = $etab['DirDateEffet']; + $item->DirFonction = prepareString($etab['DirFonction']); + $item->DirDepart = $etab['DirDepart']; + $tabRet[] = $item; + } + + if ($etabs['nbReponses']==0){ + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + $search = new SearchDirReturn(); + $search->nbReponses = $etabs['nbReponses']; + $search->nbReponsesTotal = $etabs['nbReponsesTotal']; + $search->result = $tabRet; + return $search; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche au sièges (si true) + * @param boolean $actif Limitation aux établissements actifs (si true) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=false, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + + if ( $actif ) { + $actif = 1; + } else { + $actif = 2; + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + } + + $fp=fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + fwrite($fp, $str.EOL); + fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + fwrite($fp, $str.EOL); + fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param integer $dep Département + * @return SearchReturn + */ + public function searchSiren($siret, $deb=0, $nbRep=20, $maxRep=200, $dep=0) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep); + if (count($rep['reponses'])==0 && $dep>0) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = utf8_encode(prepareString(utf8_decode($etab['FJLib']))); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + + + + /** + * Retourne la fiche d'identité simplifié d'une entreprise avec son numéro de TVA. + * @param string $siren Identifiant Siren de l'entreprise + * @return TvaReturn + */ + public function getTVA($siren) + { + $this->authenticate(); + + //Initialisation + $siren = trim($siren); + debugLog('I',"TVA demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren); + debugLog('I', "Après getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep)) + { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + debugLog('I', "Avant MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iTva = new MTva($siren); + if ($iTva->vatDefined) $tva=$iTva->vatNumber; + else $tva='N/A'; + debugLog('I', "Après MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new TvaReturn(); + $output->id = $entrep['id']; + $output->AutreId = $entrep['AutreId']; + $output->Nom = $entrep['Nom']; + $output->Sigle = $entrep['Sigle']; + $output->Enseigne = $entrep['Enseigne']; + $output->Adresse = $entrep['Adresse']; + $output->Adresse2 = $entrep['Adresse2']; + $output->CP = $entrep['CP']; + $output->Ville = $entrep['Ville']; + $output->Siren = $entrep['Siren']; + $output->Tva = $tva; + + debugLog('I', "TVA retournée = $tva (".$entrep['Nom'].')', __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('tva',$siren); + + return $output; + } + + /** + * Retourne tout ou patie des informations règlementées sur l'entreprise + * @param string $siren SIREN de l'entreprise + * @param mixed $id Id du communiqué + * @return InfosRegReturn + */ + public function getInfosReg( $siren, $id = false ) + { + $this->authenticate(); + $this->permission('infosreg'); + + //Initialisation + if (empty($id)) $id = false; + $tabRet = array(); + $siren = substr($siren,0,9); + + debugLog('I',"Infos règlementées demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + $iBourse = new MBourse($siren); + $anns = $iBourse->getInfosReg($siren, $id); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ( empty($anns) ){ + debugLog('W', "Aucune info règlementée pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ($id == false) { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } else { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->communique = $ann['communique']; + $infos->communiqueHtml = $ann['communiqueHtml']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } + } + debugLog('I', 'Nb infos retournés = '. count($anns), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('infosreg',$siren,$id); + $output = new InfosRegReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les informations boursières de l'entreprise + * @param string $siren SIREN de l'entreprise + * @return InfosBourse + */ + public function getInfosBourse($siren) + { + $this->authenticate(); + $this->permission('bourse'); + + //Initialisation + $error = new ErrorType(); + debugLog('I',"Infos bourse demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $siren = substr($siren,0,9); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($bourse)) { + debugLog('W', "Aucune info bourse pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + $result = new InfosBourse(); + $result->Siren = $bourse['siren']; + $result->RaisonSociale = $bourse['raisonSociale']; + $result->Adresse = $bourse['adresse']; + $result->Effectif = $bourse['effectif']; + $result->CodeSicovam = $bourse['code_sicovam']; + $result->CodeMnemo = $bourse['code_mnemo']; + $result->CodeBloomberg = $bourse['code_bloomberg']; + $result->CodeDatastream = $bourse['code_datastream']; + $result->Isin = $bourse['code_isin']; + $result->CodeRic = $bourse['code_ric']; + $result->DateIntroduction = $bourse['dateIntroduction']; //@todo : date + $result->DateDerAG = $bourse['dateDerAG']; //@todo : date + $result->DateRadiation = $bourse['dateRadiation']; //@todo : date + $result->AutreIsin = $bourse['autre_isin']; + $result->EligibleSRD = $bourse['eligibleSRD']; + $result->EligiblePEA = $bourse['eligiblePEA']; + $result->Tel = $bourse['tel1']; + $result->Tel2 = $bourse['tel2']; + $result->Fax = $bourse['fax1']; + $result->Fax2 = $bourse['fax2']; + $result->Web = $bourse['web']; + $result->Mail = $bourse['mail']; + + $result->Marche = $bourse['marche']; + $result->Description = $bourse['description']; + $result->Secteur = $bourse['secteur']; + $result->Activite = $bourse['activite']; + $result->ActiviteDet = $bourse['activiteDet']; + + $result->placeCotation = $bourse['placeCotation']; + $result->nombreTitres = $bourse['nombreTitres']; + $result->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $result->derCoursDate = $bourse['date']; //@todo : date + $result->derCoursCloture = $bourse['close']; + $result->derCoursOuverture = $bourse['open']; + $result->derCoursPlusHaut = $bourse['high']; + $result->derCoursPlusBas = $bourse['low']; + + $result->derCoursVolume = $bourse['volume']; + $result->coursMin = $bourse['coursMin']; + $result->coursMoy = $bourse['coursMoy']; + $result->coursMax = $bourse['coursMax']; + + $this->wsLog('bourse',$siren,$id); + return $result; + } + + /** + * Ajout d'une surveillance + * @param string $siret Siret/Siren + * @param string $email Adresse email du client + * @param string $ref Référence de la surveillance + * @param string $source Type de source en surveillance (insee, annonces, bilans, actes, privileges, score, dirigeants, paiements, liens) + * @param boolean $delete Suppression de la ligne + * @param integer $encoursClient Encours demandé par le client + * @return SetSurveillanceReturn + */ + public function setSurveillance($siret, $email, $ref='', $source='annonces', $delete=false, $encoursClient=0) + { + $this->authenticate(); + $source = strtolower($source); + switch ($source) { + case 'insee': + $this->permission('survinsee'); + break; + case 'bilans': + $this->permission('survbilan'); + break; + case 'actes': + $this->permission('survactes'); + break; + case 'privileges': + $this->permission('survpriv'); + break; + case 'dirigeants': + $this->permission('survdirigeants'); + break; + case 'score': + $this->permission('survscore'); + break; + case 'paiements': + $this->permission('survpaiements'); + break; + case 'liens': + $this->permission('survliens'); + break; + case 'annonces': + default: + $this->permission('survannonce'); + break; + } + + //Initialisation + if (empty($ref)) $ref = ''; + if (empty($delete)) $delete = false; + if (empty($encoursClient)) $encoursClient = false; + $result = false; + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + debugLog('I',"setSurveillances(siret=$siret, email=$email, ref=$ref, source=$source, delete=$delete)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iDb = new WDB(); + $login = $this->User->login; + switch ($source) { + case 'insee': + case 'annonces': + case 'bilans': + case 'actes': + case 'privileges': + case 'paiements': + case 'liens': + case 'dirigeants': $encoursClient=0; break; + case 'score': $encoursClient=$encoursClient*1; break; + default: $source='annonces'; break; + } + + if ($delete) { + + $tabUpdate = array('dateSuppr'=>date('Y-m-d')); + $result = $iDb->update('surveillances_site', + $tabUpdate, + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'" + ); + + } else { + + $where = "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'"; + + //Si la donnée existe déjà alors il faut mettre à jour l'encours client + $detect = $iDb->select('surveillances_site', 'siren', $where, false, MYSQL_ASSOC); + if ( count($detect)>0 ) { + + $data = array( + 'encoursClient' => $encoursClient, + ); + $result = $iDb->update('surveillances_site', $data, $where); + + } else { + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic); + + $data = array( + 'source' => $source, + 'login' => $login, + 'email' => $email, + 'siren' => $siren, + 'nic' => $nic, + 'ref' => $ref, + 'encoursClient' => $encoursClient, + 'rs' => $tabIdentite['Nom'], + 'cp' => $tabIdentite['CP'], + 'ville' => $tabIdentite['Ville'], + 'dateAjout'=>date('Y-m-d'), + 'dateSuppr'=>0, + ); + $result = $iDb->insert('surveillances_site', $data); + } + } + $output = new SetSurveillanceReturn(); + $output->result = $result; + return $output; + } + + /** + * getSurveillances + * @param SurveillancesFiltre $filtre + * @param integer $deb + * @param integer $nbRep + * @return SurveillancesReturn + */ + public function getSurveillances($filtre, $position=0, $nbRep=100) + { + $this->authenticate(); + $this->permission('survliste'); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 100; + + $error = new ErrorType(); + $tabRet = array(); + $siren = 0; + $login = $this->User->login; + + $strSiren = ""; + if (!empty($filtre->item) && $filtre->itemMode == 'siren'){ + $siren = substr($filtre->item,0,9); + $nic = substr($filtre->item,9,5); + $strSiren = " AND siren='$siren'"; + } elseif (!empty($filtre->item) && $filtre->itemMode == 'search') { + $strSiren = " AND ( siren='$filtre->item' OR ref='$filtre->item' OR rs='$filtre->item' )"; + } + + //Ordre pour le tri + $triMode = strtoupper(trim($filtre->triMode)); + if ($triMode == 'DESC') { + $triMode = 'DESC'; + } else { + $triMode = 'ASC'; + } + + //Option de tri + $tri = strtolower(trim($filtre->tri)); + switch ($tri) { + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi': $orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + $orderBy = $orderBy.' '.$triMode; + + if ($filtre->detail) { + $strSelect = 'source, email, siren, nic, ref, dateAjout, encoursClient, rs, cp, ville, dateDerEnvoi'; + } else { + $strSelect = 'source, email, siren, nic, ref, dateAjout, dateDerEnvoi'; + } + if ($filtre->source!='') $strSource = " AND source='$filtre->source' "; + else $strSource = ''; + + $iDb = new WDB(); + + if ($filtre->source!='') { + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select( + 'surveillances_site', + 'count(*) as nb', "login='$login' AND dateSuppr=0 $strSiren $strSource", + false, MYSQL_ASSOC + ); + $nbRepTot = $tabTmp[0]['nb']; + + // Récupération des résultats + $tabTmp = $iDb->select( + 'surveillances_site', $strSelect, + "login='$login' AND dateSuppr=0 $strSiren $strSource $orderBy LIMIT $position,$nbRep", + false, MYSQL_ASSOC + ); + + } else { + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select( + 'surveillances_site', + 'siren', "login='$login' AND dateSuppr=0 $strSiren GROUP BY siren", + false, MYSQL_ASSOC + ); + $nbRepTot = count($tabTmp); + + // Récupération des résultats + if ($nbRepTot>0){ + $tabTmp = $iDb->select( + 'surveillances_site', + 'siren', "login='$login' AND dateSuppr=0 $strSiren GROUP BY siren ORDER BY siren LIMIT $position,$nbRep", + false, MYSQL_ASSOC + ); + $listeSiren = array(); + foreach($tabTmp as $i => $v) { + $listeSiren[] = $v['siren']; + } + $tabTmp = $iDb->select( + 'surveillances_site', $strSelect, + "login='$login' AND dateSuppr=0 AND siren IN (".join(',',$listeSiren).") $strSiren ORDER BY siren", + false, MYSQL_ASSOC + ); + } + } + + if (count($tabTmp)>0) + { + //Tri pour avoir le nombre de réponse correct suivant la structure + $listeRetour = array(); + foreach ($tabTmp as $i => $tabSurv) + { + $rs = ''; + $cp = ''; + $ville = ''; + if ($filtre->detail) { + if (trim($tabSurv['rs'])<>'') { + $rs = $tabSurv['rs']; + $cp = $tabSurv['cp']; + $ville = $tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs = $tabIdentite['Nom']; + $cp = $tabIdentite['CP']; + $ville = $tabIdentite['Ville']; + $iDb->update('surveillances_site', array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic']." $strSource", + false + ); + } + } + + $listeRetour[$tabSurv['siren']][] = array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville, + 'source' => $tabSurv['source'], + 'email' => $tabSurv['email'], + 'nic' => $tabSurv['nic'], + 'ref' => $tabSurv['ref'], + 'dateAjout' => $tabSurv['dateAjout'], + 'dateDerEnvoi' => $tabSurv['dateDerEnvoi'], + ); + } + + foreach ($listeRetour as $siren => $item) + { + $liste = new Surveillance(); + $liste->siren = $siren; + foreach($item as $s) { + $source = new stdClass(); + $source->rs = $s['rs']; + $source->cp = $s['cp']; + $source->ville = $s['ville']; + $source->source = $s['source']; + $source->email = $s['email']; + $source->nic = $s['nic']; + $source->ref = $s['ref']; + $source->encoursClient = $s['encoursClient']; + $source->dateAjout = $s['dateAjout']; //@todo : date + $source->dateDerEnvoi = $s['dateDerEnvoi']; //@todo : date + $liste->sources[] = $source; + } + $tabRet[] = $liste; + } + } + $output = new SurveillancesReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Recherche par référence client + * @param string $search + * @param integer $position + * @param integer $nbRep + * @return SearchRefClientReturn + */ + public function searchRefClient($search, $position=0, $nbRep=20) + { + $this->authenticate(); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 20; + + $iDb = new WDB(); + $login = $this->User->login; + $orderBy = " ORDER BY dateAjout ASC"; + + if ($this->User->rechRefType=='CLI'){ + //On cherche les logins actifs pour le client + $idClient = $this->User->idClient; + + $where = "u.idClient='$idClient' AND u.actif=1 AND s.dateSuppr=0 AND ( s.siren='$search' OR s.ref='$search' OR s.rs='$search' )"; + // Il faut compter le nombre au total + $tabTmp = $iDb->select('surveillances_site s, utilisateurs u', 'count(*) as nb', $where.$orderBy, false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + // Execution de la requete + $tabTmp = $iDb->select('surveillances_site s, utilisateurs u', + "siren, nic, ref, source, login, email, DATE_FORMAT(dateAjout, '%Y-%m-%d') as dateAjout, DATE_FORMAT(dateDerEnvoi, '%Y-%m-%d') as dateEnvoi", + $where.$orderBy." LIMIT $position,$nbRep", false, MYSQL_ASSOC); + } else { + $where = "login='$login' AND dateSuppr=0 AND ( siren='$search' OR ref='$search' OR rs='$search' )"; + // Il faut compter le nombre au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', $where.$orderBy, false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + // Execution de la requete + $tabTmp = $iDb->select('surveillances_site', + "siren, nic, ref, source, login, email, DATE_FORMAT(dateAjout, '%Y-%m-%d') as dateAjout, DATE_FORMAT(dateDerEnvoi, '%Y-%m-%d') as dateEnvoi", + $where.$orderBy." LIMIT $position,$nbRep", false, MYSQL_ASSOC); + } + + $tabRet = array(); + if (count($tabTmp)>0) + { + foreach ($tabTmp as $i => $item) + { + $info = new SearchRefClientInfo(); + $info->ref = $item['ref']; + $info->source = $item['source']; + $info->login = $item['login']; + $info->email = $item['email']; + $info->dateAjout = $item['dateAjout']; + $info->dateEnvoi = $item['dateEnvoi']; + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($item['siren'], $item['nic']); + + $reponse = new SearchRefClient(); + $reponse->id = $tabIdentite['id']; + $reponse->Siret = $tabIdentite['Siret']; + $reponse->Siege = $tabIdentite['Siege']; + $reponse->Nom = prepareString(strtr($tabIdentite['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($tabIdentite['Nom2']); + $reponse->Sigle = prepareString($tabIdentite['Sigle']); + $reponse->Enseigne = prepareString($tabIdentite['Enseigne']); + $reponse->Adresse = prepareString($tabIdentite['Adresse']); + $reponse->Adresse2 = prepareString($tabIdentite['Adresse2']); + $reponse->CP = $tabIdentite['CP']; + $reponse->Ville = prepareString($tabIdentite['Ville']); + $reponse->Tel = $tabIdentite['Tel']; + $reponse->Fax = $tabIdentite['Fax']; + $reponse->FJ = $tabIdentite['FJ']; + $reponse->FJLib = prepareString($tabIdentite['FJ_lib']); + $reponse->Siren = $tabIdentite['Siren']; + $reponse->Nic = $tabIdentite['Nic']; + $reponse->Actif = $tabIdentite['Actif']; + $reponse->NafEtab = $tabIdentite['NafEtab']; + $reponse->NafEtabLib = $tabIdentite['NafEtabLib']; + $reponse->NafEnt = $tabIdentite['NafEnt']; + $reponse->NafEntLib = $tabIdentite['NafEntLib']; + $reponse->Infos = $info; + $tabRet[] = $reponse; + } + } + $output = new SearchRefClientReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne le bilan correspondant au siren, à l'exercice et au formalisme demandé + * @param string $siren Siren de l'entreprise + * @param string $millesime Date du bilan au format AAAAMMJJ + * @param string $typeBilan N:Réel Normal, S:Réel Simplifié, C:Consolidé + * @param string $ref Référence S&D obligatoire + * @return Bilan + */ + public function getBilan($siren, $millesime, $typeBilan='N', $ref='') + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + if (empty($typeBilan)) { $typeBilan = 'N'; } + if (empty($ref)) { $ref = ''; } + + debugLog('I',"Bilan $millesime $typeBilan demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $millesime = WDate::dateT('Ymd','d/m/Y',$millesime); + $mBil = new MBilans($siren); + $tabBilan = $mBil->getBilan($millesime, $typeBilan, $ref, true); + + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($tabBilan as $key => $value){ + if(!in_array($key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $key; + $resultPoste->val = $value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$key = $value; + } + } + $this->wsLog('bilan',$siren, $millesime.':'.$typeBilan.':'.$ref); + $resultBilan->POSTES = $tabPoste; + return $resultBilan; + } + + /** + * Retourne la liste des bilans disponible pour une entreprise + * @param string $siren Siren de l'entreprise + * @return ListeBilansReturn + */ + public function getListeBilans($siren) + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + $tabRet = array(); + debugLog('I',"Liste des Bilans demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + foreach($tabBilans as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + + debugLog('I', 'Nb Bilans retournés = '. count($tabBilans), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('listebilans', $siren); + $output = new ListeBilansReturn(); + $output->nbReponses = count($tabRet); + $output->result = $tabRet; + return $output; + } + + /** + * Vérifie si un siren existe en base Scores & Décisions + * @param string $siren Siren de l'entité + * @return boolean + */ + public function isSirenExistant($siren) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $siren = trim(substr($siren,0,9)); + $result = false; + debugLog('I',"Siren existant demandée pour siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->sirenExiste($siren); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = false; + } else { + debugLog('I', "Siren $siren présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + $this->wsLog('sirenExiste',$siren); + return $result; + } + + /** + * Retourne une annonce en fonction de sa référence + * @param string $siren Siren de l'entreprise + * @param string $dateAnnee + * @param integer $numParution + * @param integer $numAnnonce + * @return RechercheAnnonceReturn + */ + public function rechercheAnnonce($source, $dateAnnee, $numParution, $numAnnonce) + { + $this->authenticate(); + $this->permission('histobodacc'); + + //Initialisation + $tabRet = array(); + + debugLog('I',"Annonce précise demandée pour $source, $dateAnnee, $numParution, $numAnnonce",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($dateAnnee)==4) $annee = $dateAnnee; + else $annee = substr($dateAnnee,0,4); + + $iDb = new WDB('jo'); + + switch (strtoupper($source)) + { + case 'BODA': + case 'BODB': + case 'BODC': + $lettre = substr(strtoupper($source),3,1); + if ($annee<2005) { + if ($lettre=='A'){ $numJAL=1; } + elseif ($lettre=='B'){ $numJAL=200; } + else{ break; } + $anneeDeb = $annee.'0101'; + $anneeFin = $annee.'1231'; + $res = $iDb->select('historiques.entrep e, texte t', + "$annee AS Annee_Parution, e.NOBOD AS Num_Parution, e.NOANN AS Num_Annonce, e.NOPAGE AS Num_Page, e.`DATE` AS Date_Parution, e.DEPT AS Departement, e.CODTRI AS Tribunal_Code, 'I' AS typeAnnonce, CONCAT(e.NOANN,' - ',t.annonceTxt) AS annonce", + "e.JAL=$numJAL AND e.NOBOD=$numParution AND e.`DATE` BETWEEN $anneeDeb AND $anneeFin AND e.NOANN=$numAnnonce AND e.ANBASE=t.annonceNum", false, MYSQL_ASSOC); + } else { + $res = $iDb->select('bodacc', + 'Bodacc_Annee_Parution AS Annee_Parution, Bodacc_Num AS Num_Parution, Num_Annonce, Bodacc_Page AS Num_Page, Bodacc_Date_Parution AS Date_Parution, Tribunal_Dept AS Departement, Tribunal_Code, typeAnnonce, annonce', + "Bodacc_Code='$lettre' AND Bodacc_Annee_Parution=$annee AND Bodacc_Num=$numParution AND Num_Annonce=$numAnnonce", false, MYSQL_ASSOC); + } + break; + case 'ASSO': + $res = $iDb->select('asso', + 'YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Annonce, pageDeb AS Num_Page, Date_Parution, Departement, codTribunal AS Tribunal_Code, typeAnnonce, Annonce_Html AS annonce', "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$annee".sprintf('%04d', $numParution)." AND Num_Annonce=$numAnnonce", + false, MYSQL_ASSOC); + break; + case 'BALO': + $res = $iDb->select('balo', + "YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Affaire AS Num_Annonce, '' AS Num_Page, Date_Parution, '' AS Departement, '' AS Tribunal_Code, 'Insertion' AS typeAnnonce, Annonce_Html AS annonce", "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$numParution AND Num_Affaire=$numAnnonce", + false, MYSQL_ASSOC); + break; + } + + if (count($res)>0) + { + $iBodacc = new MBodacc(); + foreach ($res as $i => $etab) + { + $annonces = new AnnonceItem(); + $annonces->Annee_Parution = $etab['Annee_Parution']; + $annonces->Num_Parution = $etab['Num_Parution']; + $annonces->Num_Annonce = $etab['Num_Annonce']; + $annonces->Num_Page = $etab['Num_Page']; + $annonces->Date_Parution = $etab['Date_Parution']; //@todo : date + $annonces->Departement = $etab['Departement']; + $annonces->Tribunal_Code = $etab['Tribunal_Code']; + $annonces->Tribunal = $iBodacc->getTribunalNom($etab['Tribunal_Code']); + $annonces->Type_Annonce = $etab['typeAnnonce']; + $annonces->Annonce = strip_tags(strtr( + html_entity_decode($etab['annonce']), + array('>'=>'>','&'=>'&','<'=>'<','’'=>"'") + )); + + $tabRet[] = $annonces; + } + } + $nbTot = count($tabRet); + $output = new RechercheAnnonceReturn(); + $output->criteres = $criteres; + $output->nbReponses = $nbTot; + $output->nbReponsesTotal = $nbTot; + $output->result = $tabRet; + return $output; + } + + /** + * getRatios + * @param string $siren + * @param string $page + * @return RatiosReturn + */ + public function getRatios($siren, $page='ratios') + { + $this->authenticate(); + $this->permission('ratios'); + + global $tva, $tabFormules, $mBil, $tabBilan, $efftr, $tabInfla; + $tabFormules = include APPLICATION_PATH . '/../library/Metier/scores/Variables/CacheTabFormules.php'; + require_once 'Metier/scores/Variables/configMRatios.php'; + + //Initialisation + if (empty($page)) $page = 'ratios'; + $tabRatiosInfos = $tabRatiosSecteurs = $tabBilansR = array(); + $tabRatios2 = $tabRatiosEvol = array(); + $tabRet = array(); + debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false); + debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $naf = $tabIdentite['NafEnt']; + $nafLib = $tabIdentite['NafEntLib']; + $efftr = $tabIdentite['Effectif']*1; + $fj = $tabIdentite['FJ']; + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getRatios sur $siren", print_r($tabBilans, true)); + $nbBilans = count($tabBilans); + $tabBilan = $tabBil = array(); + if ($nbBilans>0){ + $tabRatios = calculRatios($tabBilans, $tabIdentite, true); + } + $nbRatios = count($tabRatios); + debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /** Tableau d'infos sur les formules **/ + $tabBorneMin = $tabBorneMax = array(); + foreach ($tabFormules as $formule) { + $id = $formule['id']*1; + $libelle = $formule['libelle']; + $unite = $formule['unite']; + $commentaires = $formule['commentaires']; + $tabFormulesInfos[$id] = $formule; //Pour la gestion des unités des ratios secteur + $ratiosInfos = new RatiosInfos(); + $ratiosInfos->id = 'r'.$id; + $ratiosInfos->libelle = $formule['libelle']; + $ratiosInfos->unite = $formule['unite']; + $ratiosInfos->commentaires = $formule['commentaires']; + $tabRatiosInfos[] = $ratiosInfos; + $tabBorneMin[$id] = $formule['borneMin']; + $tabBorneMax[$id] = $formule['borneMax']; + } + + $tabAnnees = array(); + foreach ($tabRatios as $i=>$R) { + + //Informations sur le bilan + $bilansInfos = new RatiosBilansInfos(); + $bilansInfos->dateCloture = $tabBilan[$i]['DATE_CLOTURE']; //@todo : date + $bilansInfos->duree = $tabBilan[$i]['DUREE_MOIS']; + $bilansInfos->devise = $tabBilan[$i]['MONNAIE']; + $bilansInfos->typeBilan = $tabBilan[$i]['CONSOLIDE']; + $bilansInfos->unite = 'U'; + if ( substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900 ){ + $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); + } + + $tabRatiosEntrep = array(); + $tabRatiosEntrepEvol = array(); + foreach ( $R as $Ridx=>$Rmont ){ + + if ($Rmont<>'NS') { + if ( $tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx] ){ + $Rmont='<'.$tabBorneMin[$Ridx]; + } elseif ( $tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx] ){ + $Rmont='>'.$tabBorneMax[$Ridx]; + } + } + + // RatiosEntrep + $ratiosEntrep = new Ratios(); + if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>'){ + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = $Rmont; + } else { + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = round($Rmont,2); + } + $tabRatiosEntrep[] = $ratiosEntrep; + + if (($tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='S'||($tabBilan[$i+1]['CONSOLIDE']=='N'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) || + ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N'||($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]); + elseif ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='S'||($tabBilan[$i+2]['CONSOLIDE']=='N'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + || ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='N'||($tabBilan[$i+2]['CONSOLIDE']=='S'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]); + else + $Rmont='NS'; + + // RatiosEntrepEvol + $ratiosEntrepEvol = new Ratios(); + if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800){ + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = 'NS'; + } else { + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = number_format($Rmont,2,',',' '); + } + $tabRatiosEntrepEvol[] = $ratiosEntrepEvol; + } + $bilansInfos->RatiosEntrep = $tabRatiosEntrep; + $bilansInfos->RatiosEntrepEvol = $tabRatiosEntrepEvol; + $tabBilansR[] = $bilansInfos; + } + + debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + // Tableau des ratios secteurs + + if (strlen($naf)>4) $strNaf = " AND naf5='$naf' "; + else $strNaf = " AND naf4='$naf' "; + $strAnnees = implode(',', $tabAnnees); + + $tabRatiosSecteurs = array(); + + $tabAnnees = array_unique($tabAnnees); + + if ( count($tabAnnees)>0 ) + { + $iDb = new WDB('jo'); + $tabTmp = $iDb->select('ratios_secteurs', + 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', + "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", + false, MYSQL_ASSOC); + + $nbRatiosSec = 0; + foreach($tabAnnees as $annee) + { + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $annee; + foreach ($tabTmp as $tmp) + { + if ($tmp['annee']== $annee) + { + $Ridx = $tmp['id']; + if ($tmp['nombre']>$nbRatiosSec){ + $nbRatiosSec = $tmp['nombre']; + } + + $unite = $tabFormulesInfos[$Ridx]['unite']; + if ($unite=='EUR'){ + $montant = round($tmp['ratio']*1000); + } else { + $montant = round($tmp['ratio']); + } + if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]){ + $montant='<'.$tabBorneMin[$Ridx]; + } elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]){ + $montant='>'.$tabBorneMax[$Ridx]; + } + + $ratiosSecteurListe = new Ratios(); + if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>'){ + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = $montant; + } else { + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = round($montant,2); + } + $ratiosSecteur->liste[] = $ratiosSecteurListe; + } + } + $tabRatiosSecteurs[] = $ratiosSecteur; + } + } + + //$tabRatiosSecteurs=array(count($tabTmp), "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC"); + + $output = new RatiosReturn(); + $output->Nom = $tabIdentite['Nom']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->FJ = $fj; + $output->FJ_lib = $tabIdentite['FJ_lib']; + $output->Siren = $siren; + $output->NbEntNaf = $nbRatiosSec; + $output->BilansInfos = $tabBilansR; + $output->RatiosInfos = $tabRatiosInfos; + $output->RatiosSecteur = $tabRatiosSecteurs; + + debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->wsLog($page, $siren); + return $output; + + } + + /** + * getRapport + * @param string $siren Siren de l'entreprise + * @param integer $niveau Niveau du rapport 1, 2 ou 3 + * @param integer $id Identifiant interne S&D de l'entreprise + * @param boolean $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence facultative de la mise en Surveillance + * @param integer $encours Si $plus=true, encours facultatif Demandé par le client lors de la mise en Surveillance + * @param string $email Si $plus=true, email facultatif pour le suivi + * @return Rapport + */ + public function getRapport($siren, $niveau=3, $id=0, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + if (empty($niveau)) $niveau = 3; + if (empty($id)) $id = 0; + $result = new Rapport(); + $filtre = 0; + $idAnn = 0; + + //@todo : Gestion des droits + $perm = false; + switch($niveau){ + case 1: $perms = array('indiscore', 'indiscorep'); break; + case 2: $perms = array('indiscore2', 'indiscore2p'); break; + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + } + + $accesDist=true; + $nivComment=2; + if ($niveau==1){ + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + } elseif ($niveau==2) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + } elseif ($niveau==3) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + $result->Annonces = $this->getAnnonces($siren, $filtre, $idAnn); + } + return $result; + } + + /** + * Retourne la liste des banques connues pour une entreprise + * @param string $siren Siren de l'entreprise + * @return BanquesReturn + */ + public function getBanques($siren) + { + $this->authenticate(); + $this->permission('banque'); + + //Initialisation + $iDb = new WDB('sdv1'); + $tabRet = array(); + debugLog('I',"Liste des banques demandée pour siren $siren", + __LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (intval($siren)<=1000) { + $this->sendError('1010'); + } + + $res=$iDb->select('banques', 'codeBanque, codeGuichet, libBanqueGuichet, precis, dateSource*1 AS dateSource', "siren=$siren", false, MYSQL_ASSOC); + $tmp=$iDb->select('fedRib', "codeBanque, codeGuichet, CONCAT(libBanque,' ',libGuichet) AS libBanqueGuichet, 0 AS precis, IF (dateInfo='0000-00-00', dateDispo*1, dateInfo*1) AS dateSource", "siren=$siren", false, MYSQL_ASSOC); + $res=array_merge($res, $tmp); + foreach ($res as $tabBanque){ + $dateSource=$tabBanque['dateSource']; + $codBanque=$tabBanque['codeBanque']; + $codGuichet=$tabBanque['codeGuichet']; + $libBanque=trim($tabBanque['libBanqueGuichet']); + $found=false; + $adrBanque1=$adrBanque2=$adrBanqueCP=$adrBanqueVille=''; + + if ($codBanque>0 && $codGuichet>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs b, insee.BDF_Guichets g', + 'g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville', "g.bdfFibCodeEtab=$codBanque AND g.bdfFibCodeGuichet=$codGuichet AND b.bdfFibCodeEtab=g.bdfFibCodeEtab", + false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + $found=true; + }; + } + if (!$found && $codBanque>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs', "bdfFibCodeEtab AS banque, '' AS guichet, bdfFibDenom40 AS nomBanque, '' AS nomGuichet, '' AS adresse1, '' AS adresse2, '' AS adresse3, '' AS CP, '' AS Ville", "bdfFibCodeEtab=$codBanque", false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + } else continue; + } else continue; + + $banque = new Banque(); + $banque->codeBanque = $codBanque; + $banque->codeGuichet = $codGuichet; + $banque->libBanque = $libBanque; + $banque->adresse1 = $adrBanque1; + $banque->adresse2 = $adrBanque2; + $banque->cp = $adrBanqueCP; + $banque->ville = $adrBanqueVille; + $tabRet[] = $banque; + } + debugLog('I',"Liste des banques pour siren $siren : ".count($tabRet).' banques',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('banque', $siren); + $output = new BanquesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des compétences territoriales pour un établissement à une adresse donnée. + * @param string $siret Siret de l'établissement + * @param string $type Type de compétence (pre:prefectures et s/prefectures, jal;journaux d'annonces légales, tri:tribunaux, adm:administrateurs et mandataires judiciaires, hui:huissiers, cfe:centres de formalités des entreprises) + * @param string $codeInsee Code Insee de la commune de l'établissement + * @return ListeCompetencesReturn + */ + public function getListeCompetences($siret, $type, $codeInsee) + { + $this->authenticate(); + $this->permission('competences'); + + //Initialisation + $error = new ErrorType(); + $type = strtolower($type); + + debugLog('I',"Liste des compétences $type demandée pour la commune $codeInsee",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + $iBodacc = new MBodacc(); + $cp=$codeInsee*1; + $dep=false; + if (substr($codeInsee,0,2)=='2A' || substr($codeInsee,0,2)=='2B') + { + $dep=20; $cp=20000+(substr($codeInsee,2,3))*1; + } + elseif ($cp>0 && $cp<100) $dep=$cp; + elseif ($cp>970 && $cp<977) $dep=$cp; + elseif ($cp>999 && $cp<10000) $dep='0'.substr($cp,0,1); + elseif ($cp>=10000 && $cp<96000) $dep=substr($cp,0,2); + elseif ($cp>=99000) $dep=substr($cp,0,2); + elseif ($cp>=98000) $dep=substr($cp,0,3); + elseif ($cp>=97100 && $cp<97700) $dep=substr($cp,0,3); + + if ($type=='pre'){ + + $iDb = new WDB('jo'); + $tabTmp2 = $iDb->select('villes', 'DEP, COM, AR, CT', 'codeInsee='.$codeInsee, false, MYSQL_ASSOC); + $arrond = $tabTmp2[0]['AR']; + unset($iDb); + $iDb = new WDB('insee'); + $tabTmp2 = $iDb->select('insee_tabArrond', 'CHEFLIEU, ARTMAJ, NCC', "DEP='$dep' AND AR='$arrond'", false, MYSQL_ASSOC); + $nomSousPref = trim(strtr($tabTmp2[0]['ARTMAJ'],array('('=>'',')'=>'',' '=>'', "'"=>'')).' '.$tabTmp2[0]['NCC']); + unset($iDb); + $tabTmp = $iBodacc->getTribunauxParDep($dep); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='A' || $tribunal['triType']=='B') + { + $pref = levenshtein($tribunal['triNom'], 'PREFECTURE DE '.$nomSousPref); + $spref = levenshtein($tribunal['triNom'], 'SOUS PREFECTURE DE '.$nomSousPref); + + if ($tribunal['triType']=='B' && ($pref>7 || $spref>5)) continue; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType'].$typeP; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper( + preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + $tabRet[] = $competence; + + } + } + + } elseif ($type=='jal') { + + $tabTmp = $iBodacc->getJALparDep($dep); + foreach ($tabTmp as $i=>$comp) + { + $infos=''; + if (trim($comp['parution'])<>'') $infos.='Parution '.$comp['parution'].'. '; + if (trim($comp['aboAnnuel'])>0) $infos.='Abonnement Annuel : '.$comp['aboAnnuel'].' euros. '; + if (trim($comp['infos'])<>'') $infos.=$comp['infos']; + + $competence = new Competence(); + $competence->Id = 9000+$comp['id']*1; + $competence->IdSup = 0; + $competence->Code = ''; + $competence->Type = ''; + $competence->Nom = strtoupper($comp['nomJal']); + $competence->Siret = ''; + $competence->Adr = strtoupper($comp['adresse']); + $competence->AdrComp = ''; + $competence->CP = $comp['cp']; + $competence->Ville = strtoupper($comp['ville']); + $competence->CodeInsee = ''; + $competence->Tel = $comp['tel']; + $competence->Fax = $comp['fax']; + $competence->Web = $comp['siteWeb']; + $competence->Mail = $comp['email']; + $competence->Statut = 'Actif'; + $competence->DateCessation = ''; + $competence->Remarque = trim($infos); + $tabRet[] = $competence; + } + + } elseif ($type=='tri' || $type=='adm' || $type=='hui') { + + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if (//$tribunal['triType']=='C' || + $tribunal['triType']=='G'// || + /*$tribunal['triType']=='I'*/) { + $idCA = $tribunal['triIdSup']; + $codeTGI = $tribunal['triCode']; + $code = strtoupper(substr($tribunal['triCode'],0,3)); + } + debugLog('D',"Liste des compétences $type demandée pour la commune $codeInsee ($dep) : ". + "Type=".$tribunal['triType'].', '. + "Code=".$tribunal[$codeTGI],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($tribunal['triType']<>'E' && $tribunal['triType']<>'O' && + $tribunal['triType']<>'T' && $tribunal['triType']<>'R' && + $tribunal['triType']<>'N' && $tribunal['triType']<>'U' && + $tribunal['triType']<>'Z') + { + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper(Scores_Locale_String::cleanstring($tribunal['triNom'])); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(Scores_Locale_String::cleanstring(preg_replace('/ +/',' ', + $tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie']))); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + if ($tribunal['triNumGreffe']*1>0) + { + $competence->IdentifiantGreffe = $tribunal['triNumGreffe']; + } + $tabRet[] = $competence; + } + } + } + + if ($type=='adm') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getMandataires(array($idCA), false); + $tabRet = array(); + $nbAff=0; + foreach ($tabTmp as $i=>$tribunal) + { /** @todo A revoir Debut **/ + if (stripos($tribunal['tribunal'], $code)!==false || + stripos($tribunal['tribunal'], 'SAINT')!==false) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + $nbAff++; + } + } + if ($nbAff==0) + { + foreach ($tabTmp as $i=>$tribunal) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + } + }/** @todo A revoir Fin : Lier correctement les mandataires à un TI principal **/ + } + elseif ($type=='hui') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getHuissiers(array($codeTGI), false); + + $tabRet = array(); + $nbAff = 0; + foreach ($tabTmp as $i=>$tribunal) + { + $adr = $iInsee->structureVoie($tribunal['adresse']); + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($adr['num'].' '.$adr['adr_btq'].' '. + $adr['typeVoie'].' '.$adr['libVoie']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $adr['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation']; + $competence->Remarque = strtr($tribunal['contact'], + array( '
'=>', ', '
'=>', ', + '
'=>', ', + )); + $tabRet[] = $competence; + } + $nbComp = count($tabTmp); + debugLog('I',"$nbComp compétences $type trouvées pour le tribunal $codeTGI",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + elseif ($type=='cfe') + { + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='C' || $tribunal['triType']=='O' || + $tribunal['triType']=='T' || $tribunal['triType']=='R' || + $tribunal['triType']=='N' || $tribunal['triType']=='U' || + $tribunal['triType']=='Z') + { + if (strlen($tribunal['triCommentaire'])==32 && + strpos($tribunal['triCommentaire'], ' ')===false) + $remarque=''; + else $remarque=$tribunal['triCommentaire']; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '.$tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '.$tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $remarque; + $tabRet[] = $competence; + } + } + } + $this->wsLog('competences',$siret,$type.'/'.$codeInsee); + $output = new ListeCompetencesReturn(); + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + return $output; + } + + /** + * Retourne le statut du webservice + * @return StatusReturn + */ + public function status() + { + /* @todo tester les différents éléments qui peuvent conduire + * à un problème dans les services tel que la connexion à la + * base de données, l'accès FTP, l'accès HTTP, l'accès système de fichier + */ + + //Enregistrement des accès à la requête getIdentite + Zend_Registry::get('WsLogger')->info("status - ip:". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']. + ", hash:".$_SERVER['PHP_AUTH_PW']); + + $error = new StatusReturn(); + //Test connexion à la base de données + $db = new WDB('jo'); + if (!$db) { + $error->statusCode = 9000; + $error->statusMsg = $this->listError['9000']; + } else { + $error->statusCode = 3000; + $error->statusMsg = $this->listError['3000']; + } + return $error; + } + +} + +?> \ No newline at end of file diff --git a/library/WsScore/Entreprise/v0.7/Service.php b/library/WsScore/Entreprise/v0.7/Service.php new file mode 100644 index 00000000..e249a2d0 --- /dev/null +++ b/library/WsScore/Entreprise/v0.7/Service.php @@ -0,0 +1,4224 @@ +authenticate(); + $this->permission('identite'); + + //Initialisation + if (empty($id)) { $id = 0; } + $forceVerif = false; + + $tdeb = microtime(1); + $ligne = date('YmdHis').";$siret;Ws->getIdentite Avant ..."; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + debugLog('I',"Identités demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep) || empty($entrep['id']) ) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->AncienSiege = $entrep['AncienSiege']; + $identite->AncienSiegeDateFin = $entrep['AncienSiegeDateFin']; + $identite->TribunalCode = prepareString($entrep['Tribunal']); + $identite->TribunalLib = prepareString($entrep['TribunalLib']); + //'NumGreffe' = $entrep['numGreffe'], // Ajouté le 4 08 2009 + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->ActifEco = $entrep['ActifEco']; // Etab éco actif, ajout le 28/04/2011 + $identite->ActifEcoDate = $entrep['ActifEcoDate']; // Date si éco inactif et jur actif + $identite->ActifEcoType = $entrep['ActifEcoType']; // vide ou NPAI ou PFER ou ECOF + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = prepareString($entrep['Tel']); + $identite->Fax = prepareString($entrep['Fax']); + $identite->Web = prepareString($entrep['Web']); + $identite->Mail = prepareString($entrep['Mail']); + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + + $geoInfos = new GeoInfos(); + $geoInfos->CUCS = $entrep['GeoInfos']['CUCS']; + $geoInfos->NCUCS = $entrep['GeoInfos']['NCUCS']; + $geoInfos->ZRU = $entrep['GeoInfos']['ZRU']; + $geoInfos->NZRU = $entrep['GeoInfos']['NZRU']; + $geoInfos->ZFU = $entrep['GeoInfos']['ZFU']; + $geoInfos->NZFU = $entrep['GeoInfos']['NZFU']; + $geoInfos->ZUS = $entrep['GeoInfos']['ZUS']; + $geoInfos->NZUS = $entrep['GeoInfos']['NZUS']; + $geoInfos->AFR = $entrep['GeoInfos']['AFR']; + $geoInfos->NAFR = $entrep['GeoInfos']['NAFR']; + $geoInfos->ZRR = $entrep['GeoInfos']['ZRR']; + $geoInfos->NZRR = $entrep['GeoInfos']['NZRR']; + $identite->GeoInfos = $geoInfos; + + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = prepareString($entrep['APRM_Lib']); + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = prepareString($entrep['CapitalType']); // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + //'DateMajRCS' = $entrep['DateMajRCS'], // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = prepareString($entrep['codeCommune']); + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->TrancheCAType = $entrep['TrancheCAType']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = prepareString($entrep['dir1Titre']); + $identite->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $identite->dir1DateFct = prepareString($entrep['dir1DateFct']); //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = prepareString($entrep['dir1LieuNaiss']); // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = prepareString($entrep['dir2Titre']); + $identite->dir2NomPrenom = prepareString($entrep['dir2NomPrenom']); + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = prepareString($entrep['dir2DateNaiss']); //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = prepareString($entrep['dir2LieuNaiss']); // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = prepareString($entrep['InfosIris']['libIris']); + $identite->InfosIris->typIris = prepareString($entrep['InfosIris']['typIris']); + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SurfaceMagasin = $entrep['ACTISURF']*1; // 0=N/D, 1=inf. à 300m2,2=300 à 400m2, 3=400 à 2500m2, 4=sup. à 2500m2 + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Millesime = $entrep['bilanAnnee']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->CAestime = $entrep['bilanFLestime']; + $identite->Bilan->Resultat = prepareString($entrep['bilanHN']); + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $tabAutreSiret = array(); + if (count($entrep['AutreSiret'])) { + foreach($entrep['AutreSiret'] as $type => $item) { + $autreSiret = new AutreSiret(); + $autreSiret->type = $type; + $autreSiret->siren = $item['siren']; + $autreSiret->nic = $item['nic']; + $autreSiret->apeEtab = $item['apeEtab']; + $autreSiret->codeEve = $item['codeEve']; + $autreSiret->dateEve = $item['dateEve']; + $autreSiret->adrL1 = $item['adrL1']; + $autreSiret->adrL2 = $item['adrL2']; + $autreSiret->adrL3 = $item['adrL3']; + $autreSiret->adrL4 = $item['adrL4']; + $autreSiret->adrL5 = $item['adrL5']; + $autreSiret->adrL6 = $item['adrL6']; + $autreSiret->adrL7 = $item['adrL7']; + $autreSiret->depCom = $item['depCom']; + $autreSiret->rivoli = $item['rivoli']; + $autreSiret->siege = $item['siege']; + $autreSiret->destinat = $item['destinat']; + $autreSiret->typEtab = $item['typeEtab']; + $autreSiret->origine = $item['origine']; + $tabAutreSiret[] = $autreSiret; + } + } + $identite->AutreSiret = $tabAutreSiret; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + //'importExport' = $entrep['importExport'], + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + if ( $entrep2 !== false ) { + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $identite->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + } + + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + $duree=round(microtime(1)-$tdeb,3); + $ligne=date('YmdHis').";$siret;Ws->getIdentite APRES ($duree s) !!!"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + return $identite; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param integer $id Identifiant S&D de l'établissement + * @return IdentiteProcol Fiche d'identité de l'établissement + */ + public function getIdentiteProcol($siret, $id=0, $forceVerif=false) + { + $this->authenticate(); + $this->permission('idprocol'); + + debugLog('I',"Identité AGS demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if (intval($siren)==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + debugLog('I', "Après getIdentiteEntreprise($siren, $nic, $id)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $duree = round(microtime(1)-$tdeb,3); + $ligne = date('YmdHis').";$siret;Ws->getIdentite juste apres iInsee->... ($duree s)"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identiteProcol = new IdentiteProcol(); + + //Element identite + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->TribunalCode = $entrep['Tribunal']; + $identite->TribunalLib = $entrep['TribunalLib']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = strtr($entrep['Nom'],'/*',' '); + $identite->Nom2 = $entrep['Nom2']; + $identite->NomLong = $entrep['nomLong']; // Ajouté le 4 08 2009 + $identite->NomCommercial = $entrep['NomCommercial']; // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = $entrep['Sigle']; + $identite->SigleLong = $entrep['sigleLong']; // Ajouté le 4 08 2009 + $identite->Enseigne = $entrep['Enseigne']; + $identite->EnseigneLong = $entrep['enseigneLong']; // Ajouté le 16 11 2010 + $identite->Adresse = $entrep['Adresse']; + $identite->Adresse2 = $entrep['Adresse2']; + $identite->AdresseNum = $entrep['AdresseNum']; + $identite->AdresseBtq = $entrep['AdresseBtq']; + $identite->AdresseVoie = $entrep['AdresseVoie']; + $identite->AdresseRue = $entrep['AdresseRue']; + $identite->CP = $entrep['CP']; + $identite->Ville = $entrep['Ville']; + $identite->Pays = $entrep['Pays']; // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = $entrep['Tel']; + $identite->Fax = $entrep['Fax']; + $identite->Web = $entrep['Web']; + $identite->Mail = $entrep['Mail']; + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->GeoInfos = $entrep['GeoInfos']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = $entrep['APRM_Lib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = $entrep['CapitalType']; // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = $entrep['codeCommune']; + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = $entrep['dir1Titre']; + $identite->dir1NomPrenom = $entrep['dir1NomPrenom']; + $identite->dir1DateFct = $entrep['dir1DateFct']; //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = $entrep['dir1LieuNaiss']; // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = $entrep['dir2Titre']; + $identite->dir2NomPrenom = $entrep['dir2NomPrenom']; + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = $entrep['dir2DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = $entrep['dir2LieuNaiss']; // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = $entrep['InfosIris']['libIris']; + $identite->InfosIris->typIris = $entrep['InfosIris']['typIris']; + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = $entrep['bilanHN']; + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + if ( $entrep2 !== false ) { + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $identite->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + } + + $identiteProcol->Identite = $identite; + + //Eléments annonces légales + $tabRetAnn = $tabLastEven = array(); + if (intval($siren)!=0) { + $anns = $this->getAnnonces($siren, 1); + $anns = $anns->result; + $tribunalProcol = false; + foreach ($anns as $nb=>$ann) + { + $tabRetEven = array(); + foreach ($ann->evenements as $tabEven) { + // On ignore les éléments suivants + if ($tabEven->CodeEven>=7000) continue; + if ($tabEven->CodeEven>=4000 && $tabEven->CodeEven<=4999) continue; + + // Par défaut, on force le tribunal à celui présent dans la dernière annonce de Procol + if ($tribunalProcol==false && $tabEven->CodeEven>=1000 && $tabEven->CodeEven<2000 && $ann->BodaccCode=='BODA') { + $identiteProcol->TribunalCode = $ann->TribunalCode; + $identiteProcol->TribunalLib = prepareString($ann->Tribunal); + $tribunalProcol=true; + } + + // On ne prend que le dernier élément de chaque type + if (in_array($tabEven->CodeEven, $tabLastEven)) continue; + + $tabLastEven[] = $tabEven->CodeEven; + $tabRetEven[] = $tabEven; + } + + if (count($tabRetEven)>0) { + $annonce = new Annonce(); + $annonce->id = $ann->id; + $annonce->BodaccCode = $ann->BodaccCode; + $annonce->BodaccNum = $ann->BodaccNum; + $annonce->NumAnnonce = $ann->NumAnnonce; + $annonce->DateParution = $ann->DateParution; //@todo : date + $annonce->Departement = $ann->Departement; + $annonce->Tribunal = $ann->Tribunal; + $annonce->TribunalCode = $ann->TribunalCode; + $annonce->TribunalSiret = $ann->TribunalSiret; + $annonce->Rubrique = $ann->Rubrique; + $annonce->typeAnnonce = $ann->typeAnnonce; + $annonce->texteRectificatif = $ann->texteRectificatif; + $annonce->texteAnnonce = utf8_encode($ann->texteAnnonce); + $annonce->dateEffet = $ann->dateEffet; //@todo : date + $annonce->dateJugement = $ann->dateJugement; //@todo : date + $annonce->dateInsertionSD = $ann->dateInsertionSD; //@todo : date + $annonce->evenements = $tabRetEven; + $annonce->Lien_Annonce_Pdf = $ann->Lien_Annonce_Pdf; + $tabRetAnn[] = $annonce; + } + } + $identiteProcol->Annonces = $tabRetAnn; + + $iRncs = new MRncs(); + if ($entrep['Siege']==1 || $entrep['Siege']==11) { + $identiteProcol->LibTypeEtab = 'Etablissement Siege'; + } else { + $tabEtabRncs = $iRncs->getIdentiteEtab($siren, $entrep['Nic']); + if ($tabEtabRncs['Siege']==2) $identiteProcol->LibTypeEtab = 'Etablissement Principal'; + elseif ($tabEtabRncs['Siege']==1) $identiteProcol->LibTypeEtab = 'Etablissement Complementaire'; + elseif ($tabEtabRncs['Siege']==0) $identiteProcol->LibTypeEtab = 'Etablissement Secondaire'; + } + + //@todo + $tabJuge = $iRncs->getIntervenants($siren); + $tabDepots=array(); + foreach ($tabJuge as $iDepot=>$depot) { + $organe = new Organe(); + $organe->codEven = $depot['codEven']; + $organe->libEven = prepareString($depot['libEven']); + $organe->dateEffet = $depot['dateEffet']; + $organe->admcode = $depot['admcode']; + $organe->admfonction = prepareString($depot['admfonction']); + $organe->admnom = prepareString($depot['admnom']); + $organe->admadrNum = $depot['admadrNum']; + $organe->admadrInd = $depot['admadrInd']; + $organe->admadrVoie = $depot['admadrVoie']; // @todo : adm1adr1, adm1adr2, adm1adr3, + $organe->admadrCP = $depot['admadrCP']; + $organe->admadrVille = $depot['admadrVille']; + $tabDepots[] = $organe; + } + $identiteProcol->Organes = $tabDepots; + + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, 1); + $nbA = count($tabA); + $tabAct = array(); + foreach ($tabA as $i=>$lien) { + $liens = new Actionnaire(); + $liens->Pmin = $lien['Pmin']; + $liens->MajMin = $lien['MajMin']; + $liens->RaisonSociale = $lien['RaisonSociale']; + $liens->Pays = $lien['Pays']; + $liens->Siren = $lien['Siren']; + $liens->Actif = $lien['Actif']; + $tabAct[] = $liens; + } + $identiteProcol->Actionnaires = $tabAct; + + $iGreffes = new MGreffes(); + $tabActes = $iGreffes->getListeActes($siren); + + $identiteProcol->StatutsModifDepot = $identiteProcol->StatutsModif = '0000-00-00'; + foreach ($tabActes as $i=>$acte) { + if ('_'.$acte['acte_type']=='_04') { // STATUTS CONSTITUTIFS + $identiteProcol->StatutsConstDepot = $acte['depot_date']; // => 1997-12-18 + $identiteProcol->StatutsConst = $acte['acte_date']; // => 1997-11-13 + break; + } elseif (in_array('_'.$acte['acte_type'], array( + //'_04', // STATUTS CONSTITUTIFS + '_06', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_07', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_08', // STATUTS A JOUR ET DECLARATION DE CONFORMITE 9 0000-00-00 2009-09-02 17:05:55 + '_09', // STATUTS APRES TRANSFERT DE SIEGE 9 0000-00-00 2009-09-02 17:05:55 + '_A1', // STATUTS 9 0000-00-00 2009-09-02 17:05:55 + '_AH', // AVENANT AUX STATUTS + ))) { + // On ne prend que la dernière modif + if ($identiteProcol->StatutsModifDepot=='0000-00-00' && $identiteProcol->StatutsModif=='0000-00-00') { + $identiteProcol->StatutsModifDepot = $acte['depot_date'];// => 1997-12-18 + $identiteProcol->StatutsModif = $acte['acte_date']; // => 1997-11-13 + } + } + } + + /** Y a t il eu des informations relatives à une cession ? **/ + $tabCes = $iGreffes->getInfosCessions($siren); + if ($tabCes) { + $identiteProcol->CessionJugeLib = $tabCes['cessJuge']; + $identiteProcol->CessionJugeDate = $tabCes['cessDateJuge']; + $identiteProcol->CessionAvisBodac = $tabCes['cessDateBod']; + $identiteProcol->CessionInvenDate = $tabCes['cessDateInv']; + $identiteProcol->CessionCAdeclare = $tabCes['cessCAdec']; + $identiteProcol->CessionEffectif = $tabCes['cessEffectif']; + $identiteProcol->CessionDesc = $tabCes['cessDesc']; + $identiteProcol->CessionDescDate = $tabCes['cessDateDesc']; + $identiteProcol->CessionOffreDate = $tabCes['cessDateLim']; + $identiteProcol->CessionMandataire = $tabCes['cessMand']; + } + } + //sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug $siren", print_r($tabRet,true)) ; + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite',$siret,$id); + + return $identiteProcol; + } + + /** + * Retourne les liens financiers pour une entreprise. + * + * @param string $siren Siren de l'entreprise + * @param boolean $actifsUniquement Uniquement les liens Actifs + * @return LiensReturn + */ + public function getLiens($siren, $actifsUniquement = true) + { + $this->authenticate(); + $this->permission('liens'); + + //Initialisation + if (empty($actifsUniquement)) { $actifsUniquement = true; } + $tabAct = $tabPar = array(); + + debugLog('I',"Liens entreprises demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, $actifsUniquement); + $nbA = count($tabA); + $tabAct = array(); + if ($nbA > 0) { + foreach ($tabA as $i => $lien) { + $actionnaire = new Actionnaire(); + $actionnaire->Pmin = $lien['Pmin']; + $actionnaire->MajMin = $lien['MajMin']; + $actionnaire->RaisonSociale = $lien['RaisonSociale']; + $actionnaire->TypeEntrep = $lien['TypeEntrep']; + $actionnaire->Pays = $lien['Pays']; + $actionnaire->Siren = $lien['Siren']; + $actionnaire->Actif = $lien['Actif']; + $actionnaire->Source = $lien['Source']; + $actionnaire->DateLien = $lien['DateLien']; //@todo : date + $actionnaire->DateMaj = $lien['DateMaj']; //@todo : date + $tabAct[] = $actionnaire; + } + } + debugLog('W', "$nbA actionnaires pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $tabP = $mLiens->getParticipations($siren, $actifsUniquement); + $nbP = count($tabP); + $tabPar = array(); + if ($nbP > 0) { + foreach ($tabP as $i => $lien) { + $participation = new Participation(); + $participation->Pmin = $lien['Pmin']; + $participation->MajMin = $lien['MajMin']; + $participation->RaisonSociale = $lien['RaisonSociale']; + $participation->TypeEntrep = $lien['TypeEntrep']; + $participation->Pays = $lien['Pays']; + $participation->Siren = $lien['Siren']; + $participation->Actif = $lien['Actif']; + $participation->Source = $lien['Source']; + $participation->DateLien = $lien['DateLien']; //@todo : date + $participation->DateMaj = $lien['DateMaj']; //@todo : date + $tabPar[] = $participation; + } + } + debugLog('W', "$nbP participations pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('liens',$siren); + + $output = new LiensReturn(); + $output->actionnaires = $tabAct; + $output->participations = $tabPar; + return $output; + } + + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, Néant=Tous + * @param integer $position + * @param integer $nbRep + * + * @return ListeEtablissementsReturn + */ + public function getListeEtablissements($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('etablissements'); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (!in_array($actif, array(0,1))) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + $departement = $dep; + + debugLog('I',"Liste des établissements demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + $result = array(); + if (count($etabs)>0) + { + foreach ($etabs as $nb => $etab) + { + $etablissement = new Etablissement(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + $result[] = $etablissement; + } + } + debugLog('I', "Nb Etablissements retournés ($departement, $actif) = ". count($result), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('etablissements',$siren); + $output = new ListeEtablissementsReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } + + /** + * Retourne l'ensemble des informations identitaires des dirigeants de l'entreprise + * + * @param string $siren Siren de l'entreprise + * @param bool $histo Afficher l'historique des dirigeants + * @return DirigeantsReturn Liste des dirigeants actifs de l'entreprise + */ + public function getDirigeants( $siren , $histo = false) + { + $this->authenticate(); + $this->permission('dirigeants'); + + //Initialisation + if (empty($histo)) { $histo = false; } + + //Zend_Registry::get('WsLogger')->info('HISTO : '.$histo); + + debugLog('I',"Dirigeants demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeants($siren, $histo); + //debugLog('W', print_r($dirs, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $dirigeant = new Dirigeant(); + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Titre = $dir['Titre']; + $dirigeant->Societe = $dir['Societe']; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + $dirigeant->NomUsage = $dir['NomUsage']; + $dirigeant->NaissDate = $dir['NaissDate']; //@todo : date + $dirigeant->NaissVille = $dir['NaissVille']; + $dirigeant->NaissDepPays = $dir['NaissDepPays']; + $dirigeant->Ancien = $dir['Ancien']; + $dirigeant->DateFct = $dir['DateFct']; //@todo : date + $liste[] = $dirigeant; + } + $this->wsLog('dirigeants',$siren,$option); + debugLog('I', 'Nb Dirigeants retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $output = new DirigeantsReturn(); + $output->result = $liste; + return $output; + } + + /** + * Retourne la liste des annonces légales relative à une entreprise + * + * @todo Revoir cette fonction pour la faire marcher avec les associations + * + * @param string $siren Siren de l'entreprise + * @param integer $filtre 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param integer $position + * @param integer $nbRep + * @return AnnoncesReturn + */ + public function getAnnonces($siren, $filtre = 1, $idAnn = '', $position = 0, $nbRep = 100) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($filtre)) { $filtre = 1; } + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = array(); + + if (strlen($siren)!=9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + /* + if ($siren>100 && $filtre==3) $asso=true; + else { + $asso=false; + $tabIdentite=$this->iInsee->getIdentiteLight($siren); + if ($tabIdentite['FJ']>90 && $tabIdentite['FJ']<94 || + $tabIdentite['FJ']>9000 && $tabIdentite['FJ']<9400) $asso=true; + }*/ + + //@todo : Connaitre le nombre d'annonce + + /* + getAnnoncesBoamp => Avis de marché, Avis d'attribution + getAnnoncesAsso => Rien de particulier + getAnnoncesBalo => Rien de particulier + getAnnoncesLegales => Plusieurs requetes SQL suivant la situation + */ + + if ($idAnn=='') { + $anns=$iInsee->getAnnoncesLegales($siren); + $annsB=$iInsee->getAnnoncesBalo($siren); + $annsA=$iInsee->getAnnoncesAsso($siren); + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + } elseif ($filtre==1) + $anns=$iInsee->getAnnoncesLegales($siren, $idAnn); + elseif ($filtre==2) + $annsB=$iInsee->getAnnoncesBalo($siren, $idAnn); + elseif ($filtre==3) + $annsA=$iInsee->getAnnoncesAsso($siren, $idAnn); + elseif ($filtre==4) + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($anns) && empty($annsB) && empty($annsA) && empty($annsM)) + { + debugLog('W', "Aucune annonce pour le siren $siren (source=$filtre, id=$idAnn)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant B '.$siren.' '.$idAnn; + } + else + { + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = prepareString($ann['texteAnnonce']); + $annonce->libFJ = $ann['libFJ']; + $annonce->codFJ = $ann['codFJ']; + $annonce->capital = $ann['capital']; + $annonce->capitalDev = $ann['capitalDev']; + + $annonce->raisonSociale = $ann['raisonSociale']; + $annonce->nomCommercial = $ann['nomCommercial']; + $annonce->sigle = $ann['sigle']; + $annonce->adresse = $ann['adresse']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + + if (is_array($annsB)) + { + foreach ($annsB as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsA)) + { + foreach ($annsA as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsM)) + { + foreach ($annsM as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + } + + $nbReponses = count($liste); + if ($nbReponses>0){ + //$liste = array_slice($liste, $position, $nbRep); + } + debugLog('I', "Nb Annonces $filtre retournées pour $siren (source=$filtre, id=$idAnn) = ". count($liste), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('annonces',$siren,$filtre.'/'.$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Retourne le nombre d'élément pour chaque type + * @param string $siren + * @return AnnonceNum[] + */ + public function getAnnoncesNum($siren) + { + $this->authenticate(); + + $output = array(); + + if ( substr($siren,0,1)=='W' ) { + $iInsee = new MInsee(); + $nb = new AnnonceNum(); + $nb->type = 'asso'; + $nb->num = $iInsee->getAnnoncesAssoCount($siren); + $output[] = $nb; + } elseif (intval($siren)!=0) { + $types = array('bodacc', 'balo', 'boamp', 'asso'); + $iInsee = new MInsee(); + foreach ($types as $type) { + switch($type) { + case 'bodacc': + $anns = $iInsee->getAnnoncesLegales($siren); + $total = count($anns); + break; + case 'balo': + $total = $iInsee->getAnnoncesBaloCount($siren); + break; + case 'boamp': + $total = $iInsee->getAnnoncesBoampCount($siren); + break; + case 'asso': + $total = $iInsee->getAnnoncesAssoCount($siren); + break; + } + $nb = new AnnonceNum(); + $nb->type = $type; + $nb->num = $total; + $output[] = $nb; + } + } + return $output; + } + + /** + * Retourne les annonces légales + * @param string $siren + * @param string $idAnn + * @param AnnonceFilter[] $filtre + * @param int $position + * @param int $nbRep + * @return AnnoncesReturn + */ + public function getAnnoncesLegales($siren, $idAnn = null, $filtre = null, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($idAnn)) { $idAnn = null; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)!=9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + + $isList = false; + + if ( is_null($idAnn) ) { + $anns = $iInsee->getAnnoncesLegales($siren); + $nbReponses = count($anns); + $isList = true; + } else { + $anns = $iInsee->getAnnoncesLegales($siren, $idAnn); + $nbReponses = count($anns); + } + + $liste = array(); + $cpt = 0; + + if (is_array($anns)) + { + foreach ($anns as $nb => $ann) + { + if ($isList===true && $nb<$position) { continue; } + $cpt++; + if ($isList===true && $cpt>$nbRep) { break; } + + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = prepareString($ann['texteAnnonce']); + $annonce->libFJ = $ann['libFJ']; + $annonce->codFJ = $ann['codFJ']; + $annonce->capital = $ann['capital']; + $annonce->capitalDev = $ann['capitalDev']; + + $annonce->raisonSociale = $ann['raisonSociale']; + $annonce->nomCommercial = $ann['nomCommercial']; + $annonce->sigle = $ann['sigle']; + $annonce->adresse = $ann['adresse']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + $this->wsLog('annonces',$siren,$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Retourne les annonces du journal officiel des associations + * @param string $siren + * @param string $idAnn + * @param AnnonceFilter[] $filtre + * @param int $position + * @param int $nbRep + * @return AnnoncesReturn + */ + public function getAnnoncesAsso($siren, $idAnn = null, $filtre = null, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($idAnn)) { $idAnn = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)!=9 && substr($siren,0,1)!='W') { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && is_null($idAnn)) { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + + $nbReponses = $iInsee->getAnnoncesAssoCount($siren, $idAnn); + $anns = $iInsee->getAnnoncesAsso($siren, $idAnn, $position, $nbRep); + + $liste = array(); + + if (is_array($anns)) + { + foreach ($anns as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + $this->wsLog('annonces',$siren,$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Retourne les annonces de marché public + * @param string $siren + * @param string $idAnn + * @param AnnonceFilter[] $filtre + * @param int $position + * @param int $nbRep + * @return AnnoncesReturn + */ + public function getAnnoncesBoamp($siren, $idAnn = null, $filtre = null, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + $type = array('A', 'M'); + + if (is_array($filtre->item) && count($filtre->item)>0) { + foreach($filtre->item as $item) { + if ( $item->key == 'type' ) { + $type = $item->value; + } + } + } + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && is_null($idAnn)) { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + if ( empty($idAnn) ) { + $nbReponses = $iInsee->getAnnoncesBoampCount($siren, $type); + $anns = $iInsee->getAnnoncesBoamp($siren, $idAnn, $type, $position, $nbRep); + } else { + $anns = $iInsee->getAnnoncesBoamp($siren, $idAnn, $type, 0, 1); + $nbReponses = count($anns); + } + + $liste = array(); + if (is_array($anns) && count($anns)>0) + { + foreach ($anns as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + $this->wsLog('annonces',$siren,$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + + } + + /** + * Retourne les annonces du bulletins des annonces légales obligatoires + * @param string $siren + * @param string $idAnn + * @param AnnonceFilter[] $filtre + * @param int $position + * @param int $nbRep + * @return AnnoncesReturn + */ + public function getAnnoncesBalo($siren, $idAnn = null, $filtre = null, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($idAnn)) { $idAnn = null; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && is_null($idAnn)) { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + + if ( is_null($idAnn) ) { + $nbReponses = $iInsee->getAnnoncesBaloCount($siren); + $anns = $iInsee->getAnnoncesBalo($siren, $idAnn, $position, $nbRep); + } else { + $anns = $iInsee->getAnnoncesBalo($siren, $idAnn, 0, 1); + $nbReponses = count($anns); + } + + $liste = array(); + if (is_array($anns) && count($anns)>0) + { + foreach ($anns as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + $this->wsLog('annonces',$siren,$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Evaluation indiScore d'une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic Nic de l'établissement + * @param integer $niveau Niveau des commentaires + * @param bool $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence de la mise en Surveillance + * @param integer $encours Si $plus=true, encours client demandé lors de la mise en Surveillance + * @param string $email Si $plus=true, email client pour la mise en surveillance + * @return Indiscore + */ + public function getIndiScore($siren, $nic=0, $niveau=2, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + + //Initialisation + $accesDist = true; + if (empty($nic)) { $nic = 0; } + if (empty($niveau)) { $niveau = 2; } + if (empty($plus)) { $plus = false; } + if ( !in_array($niveau, array(0,1,2,3,4,5)) ) { $niveau = 2; } + $perm = false; + //@todo : Gestion des droits + switch($niveau){ + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + case 2: $perms = array('indiscore2', 'indiscore2p', 'indiscore3', 'indiscore3p'); break; + case 1: $perms = array('indiscore', 'indiscorep'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + } + + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesDist, $niveau, false, 'scores'); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new Indiscore(); + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $output->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $output->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $output->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $output->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $output->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $output->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + foreach($value as $comment) { + $tab[] = Scores_Locale_String::fixEncoding($comment); + } + $output->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + if (count($tab)>0) { + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $output->tabVariables = $variables; + + } elseif ($key=='Bilans') { + + $tab = array(); + foreach($value as $item) + { + $objet = new IndiscoreBilans(); + $objet->Millesime = $item['Millesime']; + $objet->FraisPerso = $item['FraisPerso']; + $objet->CA = $item['CA']; + $objet->EBE = $item['EBE']; + $objet->TxInvest = $item['TxInvest']; + $objet->TxEndett = $item['TxEndett']; + $objet->DettesCT = $item['DettesCT']; + $objet->FraisFi = $item['FraisFi']; + $objet->BFR = $item['BFR']; + $objet->FR = $item['FR']; + $objet->FondsPr = $item['FondsPr']; + $objet->DelaiCli = $item['DelaiCli']; + $objet->DelaiFour = $item['DelaiFour']; + $tab[] = $objet; + } + $output->$key = $tab; + } else { + $output->$key = $value; + } + } + + if ($plus) { + if (empty($ref)) $ref='Indiscore+'; + if (empty($email)) $email=$this->User->email; + $this->setSurveillance($siren, $email, $ref, 'privileges'); + $this->setSurveillance($siren, $email, $ref, 'score', false, $encours); + if ($this->User->idClient==89) + $this->setSurveillance($siren, $email, $ref, 'annonces'); + $this->wsLog('indiscore+',$siren); + } else + $this->wsLog('indiscore',$siren); + return $output; + } + + /** + * Evaluation valorsation d'une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic Nic de l'établissement + * @param integer $niveau Niveau des commentaires + * @return Indiscore + */ + public function getValo($siren, $nic=0, $niveau=2) + { + $this->authenticate(); + $this->permission('indiscore'); + + //Initialisation + $accesDist = true; + if (empty($nic)) { + $nic = 0; + } + if (empty($niveau)) { + $niveau = 2; + } + if (empty($plus)) { + $plus = false; + } + if ( !in_array($niveau, array(0,1,2,3,4,5)) ) { + $niveau = 2; + } + $perm = false; + //@todo : Gestion des droits + /*switch($niveau){ + case 1: $perms = array('indiscore', 'indiscorep'); break; + case 2: $perms = array('indiscore2', 'indiscore2p'); break; + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + }*/ + + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesDist, $niveau, false, 'valo'); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new Indiscore(); + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $output->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $output->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $output->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $output->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $output->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $output->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + foreach($value as $comment) { + $tab[] = Scores_Locale_String::fixEncoding($comment); + } + $output->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + if (count($tab)>0) { + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $output->tabVariables = $variables; + + } elseif ($key=='Bilans') { + + $tab = array(); + foreach($value as $item) + { + $objet = new IndiscoreBilans(); + $objet->Millesime = $item['Millesime']; + $objet->FraisPerso = $item['FraisPerso']; + $objet->CA = $item['CA']; + $objet->EBE = $item['EBE']; + $objet->TxInvest = $item['TxInvest']; + $objet->TxEndett = $item['TxEndett']; + $objet->DettesCT = $item['DettesCT']; + $objet->FraisFi = $item['FraisFi']; + $objet->BFR = $item['BFR']; + $objet->FR = $item['FR']; + $objet->FondsPr = $item['FondsPr']; + $objet->DelaiCli = $item['DelaiCli']; + $objet->DelaiFour = $item['DelaiFour']; + $tab[] = $objet; + } + $output->$key = $tab; + } else { + $output->$key = $value; + } + } + + $this->wsLog('indiscore',$siren); + return $output; + } + + /** + * Liste de tous les évènements enregistrés à l'INSEE pour une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic + * @param integer $position + * @param integer $nbRep + * @return InseeReturn + **/ + public function getListeEvenements($siren, $nic=0, $position=0, $nbRep=1000) + { + $this->authenticate(); + $this->permission('eveninsee'); + + //Initialisation + if (empty($nic)) { $nic = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep) || $nbRep>1000) { $nbRep = 1000; } + + debugLog('I',"Liste des évènements pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + + //@todo : compter la liste des événéments pour pouvoir faire la pagination + + $evens = $iInsee->getEvenements($siren, $nic, $position, $nbRep); + $tabRet = array(); + if (count($evens)>0) { + foreach ($evens as $key => $row) { + $date[$key] = $row['dateMAJ']; + } + array_multisort($date, SORT_DESC, $evens); + foreach ($evens as $nb=>$even) { + $iEven = new InseeEven(); + $iEven->Nic = $even['nic']; + $iEven->Siege = $even['siege']; + $iEven->SiretAss = $even['siretAssocie']; + $iEven->TypeSiretAss = $even['typeSiretAss']; + $iEven->EvenCode = $even['codeEven']; + $iEven->EvenLib = $even['libEven']; + $iEven->EvenLibDet = $even['libEvenDet']; + $iEven->EvenDate = $even['dateEven']; //@todo : date + $iEven->DateInfo = $even['dateMAJ']; //@todo : date + $tabRet[] = $iEven; + } + } + + debugLog('I', 'Nb évènements retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('evenements',$siren); + $output = new InseeReturn(); + $output->nbReponses = count($tabRet); // @todo : retrouver le nombre total d'évenements + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + $entCriteres->codePostal, + $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + $entCriteres->codePostal, + $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + + /** + * Recherche d'entreprise par dirigeants + * @param DirigeantCriteres $criteres + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchDirReturn + */ + public function searchDir($criteres, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + $nom = $criteres->nom; + $prenom = $criteres->prenom; + $dateNaiss = $criteres->dateNaiss; + $lieuNaiss = $criteres->lieuNaiss; + $pertinence = $criteres->pertinence; + + debugLog('I',"Recherche Dirigeant de $nom, $prenom, $dateNaiss, $lieuNaiss (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($prenom)) $prenom = ''; + if (empty($dateNaiss)) $dateNaiss = ''; + if (empty($lieuNaiss)) $lieuNaiss = ''; + if (empty($pertinence)) $pertinence = false; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheDir($nom, $prenom, '', $dateNaiss, $lieuNaiss, $deb, $nbRep, $maxRep, $pertinence); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $item = new EntrepriseDirItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + + // Dirigeant + $item->DirRs = prepareString($etab['DirRs']); + $item->DirNom = prepareString($etab['DirNom']); + $item->DirPrenom = prepareString($etab['DirPrenom']); + $item->DirNomUsage = prepareString($etab['DirNomUsage']); + $item->DirDateEffet = $etab['DirDateEffet']; + $item->DirFonction = prepareString($etab['DirFonction']); + $item->DirDepart = $etab['DirDepart']; + $tabRet[] = $item; + } + + if ($etabs['nbReponses']==0){ + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + $search = new SearchDirReturn(); + $search->nbReponses = $etabs['nbReponses']; + $search->nbReponsesTotal = $etabs['nbReponsesTotal']; + $search->result = $tabRet; + return $search; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $dep Département + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $dep=0, $actif=2, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + if (!in_array($actif, array(0,1,2))) $actif = 2; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep, $actif); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $dep, $actif, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $actif=2, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (!in_array($actif, array(0,1,2))) $actif = 2; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep, 0, $actif); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche aux sièges (si true) + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=2, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='') + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + if (!in_array($actif, array(0,1,2))) $actif = 2; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren, $ape_etab); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $iInsee->getLibelleNaf($etab['NafEtab']); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $iInsee->getLibelleNaf($etab['NafEnt']); + + $tabRet[] = $reponse; + } + } + + $fp=fopen(LOG_PATH.'/recherches.log','a'); + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + $str="NbRep=0, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + fwrite($fp, $str.EOL); + fclose($fp); + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + $str="NbRep=".$etabs['nbReponses'].", S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab, ($deb, $nbRep, $maxRep, $siege, $actif, $pertinence, $avecSiren), SiretTrouve=$siretTrouve"; + fwrite($fp, $str.EOL); + fclose($fp); + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $dep Département + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchSiren($siret, $dep=0, $actif=2, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + + if (!in_array($actif, array(0,1,2))) $actif = 2; + if ( $actif==2 ) $actif = -1; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep, $actif); + if ( count($rep['reponses'])==0 && $dep>0 ) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, 0, $actif); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = utf8_encode(prepareString(utf8_decode($etab['FJLib']))); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + + + + /** + * Retourne la fiche d'identité simplifié d'une entreprise avec son numéro de TVA. + * + * @param string $siren Identifiant Siren de l'entreprise + * @return TvaReturn + */ + public function getTVA($siren) + { + $this->authenticate(); + + //Initialisation + $siren = trim($siren); + debugLog('I',"TVA demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren); + debugLog('I', "Après getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep)) + { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + debugLog('I', "Avant MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iTva = new MTva($siren); + if ($iTva->vatDefined) $tva=$iTva->vatNumber; + else $tva='N/A'; + debugLog('I', "Après MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new TvaReturn(); + $output->id = $entrep['id']; + $output->AutreId = $entrep['AutreId']; + $output->Nom = $entrep['Nom']; + $output->Sigle = $entrep['Sigle']; + $output->Enseigne = $entrep['Enseigne']; + $output->Adresse = $entrep['Adresse']; + $output->Adresse2 = $entrep['Adresse2']; + $output->CP = $entrep['CP']; + $output->Ville = $entrep['Ville']; + $output->Siren = $entrep['Siren']; + $output->Tva = $tva; + + debugLog('I', "TVA retournée = $tva (".$entrep['Nom'].')', __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('tva',$siren); + + return $output; + } + + /** + * Retourne tout ou patie des informations règlementées sur l'entreprise + * + * @param string $siren SIREN de l'entreprise + * @param mixed $id Id du communiqué + * @return InfosRegReturn + */ + public function getInfosReg( $siren, $id = false ) + { + $this->authenticate(); + $this->permission('infosreg'); + + //Initialisation + if (empty($id)) $id = false; + $tabRet = array(); + $siren = substr($siren,0,9); + + debugLog('I',"Infos règlementées demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + $iBourse = new MBourse($siren); + $anns = $iBourse->getInfosReg($siren, $id); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ( empty($anns) ){ + debugLog('W', "Aucune info règlementée pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ($id == false) { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } else { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->communique = $ann['communique']; + $infos->communiqueHtml = $ann['communiqueHtml']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } + } + debugLog('I', 'Nb infos retournés = '. count($anns), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('infosreg',$siren,$id); + $output = new InfosRegReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les informations boursières de l'entreprise + * @param string $siren SIREN de l'entreprise + * @return InfosBourse + */ + public function getInfosBourse($siren) + { + $this->authenticate(); + $this->permission('bourse'); + + //Initialisation + $error = new ErrorType(); + debugLog('I',"Infos bourse demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $siren = substr($siren,0,9); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($bourse)) { + debugLog('W', "Aucune info bourse pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + $result = new InfosBourse(); + $result->Siren = $bourse['siren']; + $result->RaisonSociale = $bourse['raisonSociale']; + $result->Adresse = $bourse['adresse']; + $result->Effectif = $bourse['effectif']; + $result->CodeSicovam = $bourse['code_sicovam']; + $result->CodeMnemo = $bourse['code_mnemo']; + $result->CodeBloomberg = $bourse['code_bloomberg']; + $result->CodeDatastream = $bourse['code_datastream']; + $result->Isin = $bourse['code_isin']; + $result->CodeRic = $bourse['code_ric']; + $result->DateIntroduction = $bourse['dateIntroduction']; //@todo : date + $result->DateDerAG = $bourse['dateDerAG']; //@todo : date + $result->DateRadiation = $bourse['dateRadiation']; //@todo : date + $result->AutreIsin = $bourse['autre_isin']; + $result->EligibleSRD = $bourse['eligibleSRD']; + $result->EligiblePEA = $bourse['eligiblePEA']; + $result->Tel = $bourse['tel1']; + $result->Tel2 = $bourse['tel2']; + $result->Fax = $bourse['fax1']; + $result->Fax2 = $bourse['fax2']; + $result->Web = $bourse['web']; + $result->Mail = $bourse['mail']; + + $result->Marche = $bourse['marche']; + $result->Description = $bourse['description']; + $result->Secteur = $bourse['secteur']; + $result->Activite = $bourse['activite']; + $result->ActiviteDet = $bourse['activiteDet']; + + $result->placeCotation = $bourse['placeCotation']; + $result->nombreTitres = $bourse['nombreTitres']; + $result->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $result->derCoursDate = $bourse['date']; //@todo : date + $result->derCoursCloture = $bourse['close']; + $result->derCoursOuverture = $bourse['open']; + $result->derCoursPlusHaut = $bourse['high']; + $result->derCoursPlusBas = $bourse['low']; + + $result->derCoursVolume = $bourse['volume']; + $result->coursMin = $bourse['coursMin']; + $result->coursMoy = $bourse['coursMoy']; + $result->coursMax = $bourse['coursMax']; + + $this->wsLog('bourse',$siren,$id); + return $result; + } + + /** + * Ajout d'une surveillance + * + * @param string $siret Siret/Siren + * @param string $email Adresse email du client + * @param string $ref Référence de la surveillance + * @param string $source Type de source en surveillance (insee, annonces, bilans, actes, privileges, score, dirigeants, paiements, liens) + * @param boolean $delete Suppression de la ligne + * @param integer $encoursClient Encours demandé par le client + * @return SetSurveillanceReturn + */ + public function setSurveillance($siret, $email, $ref='', $source='annonces', $delete=false, $encoursClient=0) + { + $this->authenticate(); + $source = strtolower($source); + switch ($source) { + case 'insee': + $this->permission('survinsee'); + break; + case 'bilans': + $this->permission('survbilan'); + break; + case 'actes': + $this->permission('survactes'); + break; + case 'privileges': + $this->permission('survpriv'); + break; + case 'dirigeants': + $this->permission('survdirigeants'); + break; + case 'score': + $this->permission('survscore'); + break; + case 'paiements': + $this->permission('survpaiements'); + break; + case 'liens': + $this->permission('survliens'); + break; + case 'annonces': + default: + $this->permission('survannonce'); + break; + } + + //Initialisation + if (empty($ref)) $ref = ''; + if (empty($delete)) $delete = false; + if (empty($encoursClient)) $encoursClient = false; + $result = false; + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + if (empty($nic)) { + $nic = '00000'; + } + + debugLog('I',"setSurveillances(siret=$siret, email=$email, ref=$ref, source=$source, delete=$delete)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iDb = new WDB(); + $login = $this->User->login; + switch ($source) { + case 'insee': + case 'annonces': + case 'bilans': + case 'actes': + case 'privileges': + case 'paiements': + case 'liens': + case 'dirigeants': $encoursClient=0; break; + case 'score': $encoursClient=$encoursClient*1; break; + default: $source='annonces'; break; + } + + if ($delete) { + + $tabUpdate = array('dateSuppr'=>date('Y-m-d')); + $result = $iDb->update('surveillances_site', + $tabUpdate, + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'" + ); + + } else { + + $where = "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'"; + + //Si la donnée existe déjà alors il faut mettre à jour l'encours client + $detect = $iDb->select('surveillances_site', 'siren', $where, false, MYSQL_ASSOC); + if ( count($detect)>0 ) { + + $data = array( + 'encoursClient' => $encoursClient, + ); + $result = $iDb->update('surveillances_site', $data, $where); + + } else { + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic); + + $data = array( + 'source' => $source, + 'login' => $login, + 'email' => $email, + 'siren' => $siren, + 'nic' => $nic, + 'ref' => $ref, + 'encoursClient' => $encoursClient, + 'rs' => $tabIdentite['Nom'], + 'cp' => $tabIdentite['CP'], + 'ville' => $tabIdentite['Ville'], + 'dateAjout'=>date('Y-m-d'), + 'dateSuppr'=>0, + ); + $result = $iDb->insert('surveillances_site', $data); + } + } + $output = new SetSurveillanceReturn(); + $output->result = $result; + return $output; + } + + /** + * getSurveillances + * @param SurveillancesFiltre $filtre + * @param integer $deb + * @param integer $nbRep + * @return SurveillancesReturn + */ + public function getSurveillances($filtre, $position=0, $nbRep=100) + { + $this->authenticate(); + $this->permission('survliste'); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 100; + + $error = new ErrorType(); + $tabRet = array(); + $siren = 0; + $login = $this->User->login; + + $strSiren = ""; + if (!empty($filtre->item) && $filtre->itemMode == 'siren'){ + $siren = substr($filtre->item,0,9); + $nic = substr($filtre->item,9,5); + $strSiren = " AND siren='$siren'"; + } elseif (!empty($filtre->item) && $filtre->itemMode == 'search') { + $strSiren = " AND ( siren='$filtre->item' OR ref='$filtre->item' OR rs='$filtre->item' )"; + } + + //Ordre pour le tri + $triMode = strtoupper(trim($filtre->triMode)); + if ($triMode == 'DESC') { + $triMode = 'DESC'; + } else { + $triMode = 'ASC'; + } + + //Option de tri + $tri = strtolower(trim($filtre->tri)); + switch ($tri) { + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi': $orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + $orderBy = $orderBy.' '.$triMode; + + if ($filtre->detail) { + $strSelect = 'source, email, siren, nic, ref, dateAjout, encoursClient, rs, cp, ville, dateDerEnvoi'; + } else { + $strSelect = 'source, email, siren, nic, ref, dateAjout, dateDerEnvoi'; + } + if ($filtre->source!='') $strSource = " AND source='$filtre->source' "; + else $strSource = ''; + + $iDb = new WDB(); + + if ($filtre->source!='') { + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select( + 'surveillances_site', + 'count(*) as nb', "login='$login' AND dateSuppr=0 $strSiren $strSource", + false, MYSQL_ASSOC + ); + $nbRepTot = $tabTmp[0]['nb']; + + // Récupération des résultats + $tabTmp = $iDb->select( + 'surveillances_site', $strSelect, + "login='$login' AND dateSuppr=0 $strSiren $strSource $orderBy LIMIT $position,$nbRep", + false, MYSQL_ASSOC + ); + + } else { + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select( + 'surveillances_site', + 'siren', "login='$login' AND dateSuppr=0 $strSiren GROUP BY siren", + false, MYSQL_ASSOC + ); + $nbRepTot = count($tabTmp); + + // Récupération des résultats + if ($nbRepTot>0){ + $tabTmp = $iDb->select( + 'surveillances_site', + 'siren', "login='$login' AND dateSuppr=0 $strSiren GROUP BY siren ORDER BY siren LIMIT $position,$nbRep", + false, MYSQL_ASSOC + ); + $listeSiren = array(); + foreach($tabTmp as $i => $v) { + $listeSiren[] = $v['siren']; + } + $tabTmp = $iDb->select( + 'surveillances_site', $strSelect, + "login='$login' AND dateSuppr=0 AND siren IN (".join(',',$listeSiren).") $strSiren ORDER BY siren", + false, MYSQL_ASSOC + ); + } + } + + if (count($tabTmp)>0) + { + //Tri pour avoir le nombre de réponse correct suivant la structure + $listeRetour = array(); + foreach ($tabTmp as $i => $tabSurv) + { + $rs = ''; + $cp = ''; + $ville = ''; + if ($filtre->detail) { + if (trim($tabSurv['rs'])<>'') { + $rs = $tabSurv['rs']; + $cp = $tabSurv['cp']; + $ville = $tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs = $tabIdentite['Nom']; + $cp = $tabIdentite['CP']; + $ville = $tabIdentite['Ville']; + $iDb->update('surveillances_site', array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic']." $strSource", + false + ); + } + } + + $listeRetour[$tabSurv['siren']][] = array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville, + 'source' => $tabSurv['source'], + 'email' => $tabSurv['email'], + 'nic' => $tabSurv['nic'], + 'ref' => $tabSurv['ref'], + 'dateAjout' => $tabSurv['dateAjout'], + 'dateDerEnvoi' => $tabSurv['dateDerEnvoi'], + ); + } + + foreach ($listeRetour as $siren => $item) + { + $liste = new Surveillance(); + $liste->siren = $siren; + foreach($item as $s) { + $source = new stdClass(); + $source->rs = $s['rs']; + $source->cp = $s['cp']; + $source->ville = $s['ville']; + $source->source = $s['source']; + $source->email = $s['email']; + $source->nic = $s['nic']; + $source->ref = $s['ref']; + $source->encoursClient = $s['encoursClient']; + $source->dateAjout = $s['dateAjout']; //@todo : date + $source->dateDerEnvoi = $s['dateDerEnvoi']; //@todo : date + $liste->sources[] = $source; + } + $tabRet[] = $liste; + } + } + $output = new SurveillancesReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Recherche par référence client + * @param string $search + * @param integer $position + * @param integer $nbRep + * @return SearchRefClientReturn + */ + public function searchRefClient($search, $position=0, $nbRep=20) + { + $this->authenticate(); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 20; + + $iDb = new WDB(); + $login = $this->User->login; + $orderBy = " ORDER BY dateAjout ASC"; + + if ($this->User->rechRefType=='CLI'){ + //On cherche les logins actifs pour le client + $idClient = $this->User->idClient; + + $where = "u.idClient='$idClient' AND u.actif=1 AND s.dateSuppr=0 AND ( s.siren='$search' OR s.ref='$search' OR s.rs='$search' )"; + // Il faut compter le nombre au total + $tabTmp = $iDb->select('surveillances_site s, utilisateurs u', 'count(*) as nb', $where.$orderBy, false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + // Execution de la requete + $tabTmp = $iDb->select('surveillances_site s, utilisateurs u', + "siren, nic, ref, source, login, email, DATE_FORMAT(dateAjout, '%Y-%m-%d') as dateAjout, DATE_FORMAT(dateDerEnvoi, '%Y-%m-%d') as dateEnvoi", + $where.$orderBy." LIMIT $position,$nbRep", false, MYSQL_ASSOC); + } else { + $where = "login='$login' AND dateSuppr=0 AND ( siren='$search' OR ref='$search' OR rs='$search' )"; + // Il faut compter le nombre au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', $where.$orderBy, false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + // Execution de la requete + $tabTmp = $iDb->select('surveillances_site', + "siren, nic, ref, source, login, email, DATE_FORMAT(dateAjout, '%Y-%m-%d') as dateAjout, DATE_FORMAT(dateDerEnvoi, '%Y-%m-%d') as dateEnvoi", + $where.$orderBy." LIMIT $position,$nbRep", false, MYSQL_ASSOC); + } + + $tabRet = array(); + if (count($tabTmp)>0) + { + foreach ($tabTmp as $i => $item) + { + $info = new SearchRefClientInfo(); + $info->ref = $item['ref']; + $info->source = $item['source']; + $info->login = $item['login']; + $info->email = $item['email']; + $info->dateAjout = $item['dateAjout']; + $info->dateEnvoi = $item['dateEnvoi']; + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($item['siren'], $item['nic']); + + $reponse = new SearchRefClient(); + $reponse->id = $tabIdentite['id']; + $reponse->Siret = $tabIdentite['Siret']; + $reponse->Siege = $tabIdentite['Siege']; + $reponse->Nom = prepareString(strtr($tabIdentite['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($tabIdentite['Nom2']); + $reponse->Sigle = prepareString($tabIdentite['Sigle']); + $reponse->Enseigne = prepareString($tabIdentite['Enseigne']); + $reponse->Adresse = prepareString($tabIdentite['Adresse']); + $reponse->Adresse2 = prepareString($tabIdentite['Adresse2']); + $reponse->CP = $tabIdentite['CP']; + $reponse->Ville = prepareString($tabIdentite['Ville']); + $reponse->Tel = $tabIdentite['Tel']; + $reponse->Fax = $tabIdentite['Fax']; + $reponse->FJ = $tabIdentite['FJ']; + $reponse->FJLib = prepareString($tabIdentite['FJ_lib']); + $reponse->Siren = $tabIdentite['Siren']; + $reponse->Nic = $tabIdentite['Nic']; + $reponse->Actif = $tabIdentite['Actif']; + $reponse->NafEtab = $tabIdentite['NafEtab']; + $reponse->NafEtabLib = $tabIdentite['NafEtabLib']; + $reponse->NafEnt = $tabIdentite['NafEnt']; + $reponse->NafEntLib = $tabIdentite['NafEntLib']; + $reponse->Infos = $info; + $tabRet[] = $reponse; + } + } + $output = new SearchRefClientReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne le bilan correspondant au siren, à l'exercice et au formalisme demandé + * + * @param string $siren Siren de l'entreprise + * @param string $millesime Date du bilan au format AAAAMMJJ + * @param string $typeBilan N:Réel Normal, S:Réel Simplifié, C:Consolidé + * @param string $ref Référence S&D obligatoire + * @return Bilan + */ + public function getBilan($siren, $millesime, $typeBilan='N', $ref='') + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + if (empty($typeBilan)) { $typeBilan = 'N'; } + if (empty($ref)) { $ref = ''; } + + debugLog('I',"Bilan $millesime $typeBilan demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $millesime = WDate::dateT('Ymd','d/m/Y',$millesime); + $mBil = new MBilans($siren); + $tabBilan = $mBil->getBilan($millesime, $typeBilan, $ref, true); + + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($tabBilan as $key => $value){ + if(!in_array($key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $key; + $resultPoste->val = $value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$key = $value; + } + } + $this->wsLog('bilan',$siren, $millesime.':'.$typeBilan.':'.$ref); + $resultBilan->POSTES = $tabPoste; + return $resultBilan; + } + + /** + * Retourne la liste des bilans disponible pour une entreprise + * + * @param string $siren Siren de l'entreprise + * @return ListeBilansReturn + */ + public function getListeBilans($siren) + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + $tabRet = array(); + debugLog('I',"Liste des Bilans demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + foreach($tabBilans as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + + debugLog('I', 'Nb Bilans retournés = '. count($tabBilans), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('listebilans', $siren); + $output = new ListeBilansReturn(); + $output->nbReponses = count($tabRet); + $output->result = $tabRet; + return $output; + } + + /** + * Vérifie si un siren existe en base Scores & Décisions + * @param string $siren Siren de l'entité + * @return boolean + */ + public function isSirenExistant($siren) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $siren = trim(substr($siren,0,9)); + $result = false; + debugLog('I',"Siren existant demandée pour siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->sirenExiste($siren); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = false; + } else { + debugLog('I', "Siren $siren présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + $this->wsLog('sirenExiste',$siren); + return $result; + } + + /** + * Retourne une annonce en fonction de sa référence + * + * @param string $siren Siren de l'entreprise + * @param string $dateAnnee + * @param integer $numParution + * @param integer $numAnnonce + * @return RechercheAnnonceReturn + */ + public function rechercheAnnonce($source, $dateAnnee, $numParution, $numAnnonce) + { + $this->authenticate(); + $this->permission('histobodacc'); + + //Initialisation + $tabRet = array(); + + debugLog('I',"Annonce précise demandée pour $source, $dateAnnee, $numParution, $numAnnonce",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($dateAnnee)==4) $annee = $dateAnnee; + else $annee = substr($dateAnnee,0,4); + + $iDb = new WDB('jo'); + + switch (strtoupper($source)) + { + case 'BODA': + case 'BODB': + case 'BODC': + $lettre = substr(strtoupper($source),3,1); + if ($annee<2005) { + if ($lettre=='A'){ $numJAL=1; } + elseif ($lettre=='B'){ $numJAL=200; } + else{ break; } + $anneeDeb = $annee.'0101'; + $anneeFin = $annee.'1231'; + $res = $iDb->select('historiques.entrep e, texte t', + "$annee AS Annee_Parution, e.NOBOD AS Num_Parution, e.NOANN AS Num_Annonce, e.NOPAGE AS Num_Page, e.`DATE` AS Date_Parution, e.DEPT AS Departement, e.CODTRI AS Tribunal_Code, 'I' AS typeAnnonce, CONCAT(e.NOANN,' - ',t.annonceTxt) AS annonce", + "e.JAL=$numJAL AND e.NOBOD=$numParution AND e.`DATE` BETWEEN $anneeDeb AND $anneeFin AND e.NOANN=$numAnnonce AND e.ANBASE=t.annonceNum", false, MYSQL_ASSOC); + } else { + $res = $iDb->select('bodacc', + 'Bodacc_Annee_Parution AS Annee_Parution, Bodacc_Num AS Num_Parution, Num_Annonce, Bodacc_Page AS Num_Page, Bodacc_Date_Parution AS Date_Parution, Tribunal_Dept AS Departement, Tribunal_Code, typeAnnonce, annonce', + "Bodacc_Code='$lettre' AND Bodacc_Annee_Parution=$annee AND Bodacc_Num=$numParution AND Num_Annonce=$numAnnonce", false, MYSQL_ASSOC); + } + break; + case 'ASSO': + $res = $iDb->select('asso', + 'YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Annonce, pageDeb AS Num_Page, Date_Parution, Departement, codTribunal AS Tribunal_Code, typeAnnonce, Annonce_Html AS annonce', "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$annee".sprintf('%04d', $numParution)." AND Num_Annonce=$numAnnonce", + false, MYSQL_ASSOC); + break; + case 'BALO': + $res = $iDb->select('balo', + "YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Affaire AS Num_Annonce, '' AS Num_Page, Date_Parution, '' AS Departement, '' AS Tribunal_Code, 'Insertion' AS typeAnnonce, Annonce_Html AS annonce", "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$numParution AND Num_Affaire=$numAnnonce", + false, MYSQL_ASSOC); + break; + } + + if (count($res)>0) + { + $iBodacc = new MBodacc(); + foreach ($res as $i => $etab) + { + $annonces = new AnnonceItem(); + $annonces->Annee_Parution = $etab['Annee_Parution']; + $annonces->Num_Parution = $etab['Num_Parution']; + $annonces->Num_Annonce = $etab['Num_Annonce']; + $annonces->Num_Page = $etab['Num_Page']; + $annonces->Date_Parution = $etab['Date_Parution']; //@todo : date + $annonces->Departement = $etab['Departement']; + $annonces->Tribunal_Code = $etab['Tribunal_Code']; + $annonces->Tribunal = $iBodacc->getTribunalNom($etab['Tribunal_Code']); + $annonces->Type_Annonce = $etab['typeAnnonce']; + $annonces->Annonce = strip_tags(strtr( + html_entity_decode($etab['annonce']), + array('>'=>'>','&'=>'&','<'=>'<','’'=>"'") + )); + + $tabRet[] = $annonces; + } + } + $nbTot = count($tabRet); + $output = new RechercheAnnonceReturn(); + $output->criteres = $criteres; + $output->nbReponses = $nbTot; + $output->nbReponsesTotal = $nbTot; + $output->result = $tabRet; + return $output; + } + + /** + * getRatios + * @param string $siren + * @param string $page + * @return RatiosReturn + */ + public function getRatios($siren, $page='ratios') + { + $this->authenticate(); + $this->permission('ratios'); + + global $tva, $tabFormules, $mBil, $tabBilan, $efftr, $tabInfla; + $tabFormules = include APPLICATION_PATH . '/../library/Metier/scores/Data/TabFormules.php'; + require_once 'Metier/scores/classMRatios.php'; + + //Initialisation + if (empty($page)) $page = 'ratios'; + $tabRatiosInfos = $tabRatiosSecteurs = $tabBilansR = array(); + $tabRatios2 = $tabRatiosEvol = array(); + $tabRet = array(); + debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false); + debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $naf = $tabIdentite['NafEnt']; + $nafLib = $tabIdentite['NafEntLib']; + $efftr = $tabIdentite['Effectif']*1; + $fj = $tabIdentite['FJ']; + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getRatios sur $siren", print_r($tabBilans, true)); + $nbBilans = count($tabBilans); + $tabBilan = $tabBil = array(); + if ($nbBilans>0){ + $tabRatios = calculRatios($tabBilans, $tabIdentite, true); + } + $nbRatios = count($tabRatios); + debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /** Tableau d'infos sur les formules **/ + $tabBorneMin = $tabBorneMax = array(); + foreach ($tabFormules as $formule) { + $id = $formule['id']*1; + $libelle = $formule['libelle']; + $unite = $formule['unite']; + $commentaires = $formule['commentaires']; + $tabFormulesInfos[$id] = $formule; //Pour la gestion des unités des ratios secteur + $ratiosInfos = new RatiosInfos(); + $ratiosInfos->id = 'r'.$id; + $ratiosInfos->libelle = $formule['libelle']; + $ratiosInfos->unite = $formule['unite']; + $ratiosInfos->commentaires = $formule['commentaires']; + $tabRatiosInfos[] = $ratiosInfos; + $tabBorneMin[$id] = $formule['borneMin']; + $tabBorneMax[$id] = $formule['borneMax']; + } + + $tabAnnees = array(); + foreach ($tabRatios as $i=>$R) { + + //Informations sur le bilan + $bilansInfos = new RatiosBilansInfos(); + $bilansInfos->dateCloture = $tabBilan[$i]['DATE_CLOTURE']; //@todo : date + $bilansInfos->duree = $tabBilan[$i]['DUREE_MOIS']; + $bilansInfos->devise = $tabBilan[$i]['MONNAIE']; + $bilansInfos->typeBilan = $tabBilan[$i]['CONSOLIDE']; + $bilansInfos->unite = 'U'; + if ( substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900 ){ + $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); + } + + $tabRatiosEntrep = array(); + $tabRatiosEntrepEvol = array(); + foreach ( $R as $Ridx=>$Rmont ){ + + if ($Rmont<>'NS') { + if ( $tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx] ){ + $Rmont='<'.$tabBorneMin[$Ridx]; + } elseif ( $tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx] ){ + $Rmont='>'.$tabBorneMax[$Ridx]; + } + } + + // RatiosEntrep + $ratiosEntrep = new Ratios(); + if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>'){ + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = $Rmont; + } else { + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = round($Rmont,2); + } + $tabRatiosEntrep[] = $ratiosEntrep; + + if (($tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='S'||($tabBilan[$i+1]['CONSOLIDE']=='N'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) || + ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N'||($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]); + elseif ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='S'||($tabBilan[$i+2]['CONSOLIDE']=='N'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + || ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='N'||($tabBilan[$i+2]['CONSOLIDE']=='S'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']))) + ) + $Rmont=(($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]); + else + $Rmont='NS'; + + // RatiosEntrepEvol + $ratiosEntrepEvol = new Ratios(); + if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800){ + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = 'NS'; + } else { + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = number_format($Rmont,2,',',' '); + } + $tabRatiosEntrepEvol[] = $ratiosEntrepEvol; + } + $bilansInfos->RatiosEntrep = $tabRatiosEntrep; + $bilansInfos->RatiosEntrepEvol = $tabRatiosEntrepEvol; + $tabBilansR[] = $bilansInfos; + } + + debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + // Tableau des ratios secteurs + + if (strlen($naf)>4) $strNaf = " AND naf5='$naf' "; + else $strNaf = " AND naf4='$naf' "; + $strAnnees = implode(',', $tabAnnees); + + $tabRatiosSecteurs = array(); + + $tabAnnees = array_unique($tabAnnees); + + if ( count($tabAnnees)>0 ) + { + $iDb = new WDB('jo'); + $tabTmp = $iDb->select('ratios_secteurs', + 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', + "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", + false, MYSQL_ASSOC); + + $nbRatiosSec = 0; + foreach($tabAnnees as $annee) + { + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $annee; + foreach ($tabTmp as $tmp) + { + if ($tmp['annee']== $annee) + { + $Ridx = $tmp['id']; + if ($tmp['nombre']>$nbRatiosSec){ + $nbRatiosSec = $tmp['nombre']; + } + + $unite = $tabFormulesInfos[$Ridx]['unite']; + if ($unite=='EUR'){ + $montant = round($tmp['ratio']*1000); + } else { + $montant = round($tmp['ratio']); + } + if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]){ + $montant='<'.$tabBorneMin[$Ridx]; + } elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]){ + $montant='>'.$tabBorneMax[$Ridx]; + } + + $ratiosSecteurListe = new Ratios(); + if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>'){ + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = $montant; + } else { + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = round($montant,2); + } + $ratiosSecteur->liste[] = $ratiosSecteurListe; + } + } + $tabRatiosSecteurs[] = $ratiosSecteur; + } + } + + //$tabRatiosSecteurs=array(count($tabTmp), "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC"); + + $output = new RatiosReturn(); + $output->Nom = $tabIdentite['Nom']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->FJ = $fj; + $output->FJ_lib = $tabIdentite['FJ_lib']; + $output->Siren = $siren; + $output->NbEntNaf = $nbRatiosSec; + $output->BilansInfos = $tabBilansR; + $output->RatiosInfos = $tabRatiosInfos; + $output->RatiosSecteur = $tabRatiosSecteurs; + + debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->wsLog($page, $siren); + return $output; + + } + + /** + * getRapport + * @param string $siren Siren de l'entreprise + * @param integer $niveau Niveau du rapport 1, 2 ou 3 + * @param integer $id Identifiant interne S&D de l'entreprise + * @param boolean $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence facultative de la mise en Surveillance + * @param integer $encours Si $plus=true, encours facultatif Demandé par le client lors de la mise en Surveillance + * @param string $email Si $plus=true, email facultatif pour le suivi + * @return Rapport + */ + public function getRapport($siren, $niveau=3, $id=0, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + if (empty($niveau)) $niveau = 3; + if (empty($id)) $id = 0; + $result = new Rapport(); + $filtre = 0; + $idAnn = 0; + + //@todo : Gestion des droits + $perm = false; + switch($niveau){ + case 1: $perms = array('indiscore', 'indiscorep'); break; + case 2: $perms = array('indiscore2', 'indiscore2p'); break; + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + } + + $accesDist=true; + $nivComment=2; + if ($niveau==1){ + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + } elseif ($niveau==2) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + } elseif ($niveau==3) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + $result->Annonces = $this->getAnnonces($siren, $filtre, $idAnn); + } + return $result; + } + + /** + * Retourne la liste des banques connues pour une entreprise + * @param string $siren Siren de l'entreprise + * @return BanquesReturn + **/ + public function getBanques($siren) + { + $this->authenticate(); + + //Initialisation + $iDb = new WDB('sdv1'); + $tabRet = array(); + debugLog('I',"Liste des banques demandée pour siren $siren", + __LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (intval($siren)<=1000) { + $this->sendError('1010'); + } + + $res=$iDb->select('banques', 'codeBanque, codeGuichet, libBanqueGuichet, precis, dateSource*1 AS dateSource', "siren=$siren", false, MYSQL_ASSOC); + $tmp=$iDb->select('fedRib', "codeBanque, codeGuichet, CONCAT(libBanque,' ',libGuichet) AS libBanqueGuichet, 0 AS precis, IF (dateInfo='0000-00-00', dateDispo*1, dateInfo*1) AS dateSource", "siren=$siren", false, MYSQL_ASSOC); + $res=array_merge($res, $tmp); + foreach ($res as $tabBanque){ + $dateSource=$tabBanque['dateSource']; + $codBanque=$tabBanque['codeBanque']; + $codGuichet=$tabBanque['codeGuichet']; + $libBanque=trim($tabBanque['libBanqueGuichet']); + $found=false; + $adrBanque1=$adrBanque2=$adrBanqueCP=$adrBanqueVille=''; + + if ($codBanque>0 && $codGuichet>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs b, insee.BDF_Guichets g', + 'g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville', "g.bdfFibCodeEtab=$codBanque AND g.bdfFibCodeGuichet=$codGuichet AND b.bdfFibCodeEtab=g.bdfFibCodeEtab", + false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + $found=true; + }; + } + if (!$found && $codBanque>0 && + $dateSource>(date('Y')-4)*10000+101 && + $dateSourceselect('insee.BDF_Etabs', "bdfFibCodeEtab AS banque, '' AS guichet, bdfFibDenom40 AS nomBanque, '' AS nomGuichet, '' AS adresse1, '' AS adresse2, '' AS adresse3, '' AS CP, '' AS Ville", "bdfFibCodeEtab=$codBanque", false, MYSQL_ASSOC); + if (isset($tmp[0])){ + $libBanque=trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $adrBanque1=$tmp[0]['adresse1']; + $adrBanque2=trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $adrBanqueCP=$tmp[0]['CP']; + $adrBanqueVille=$tmp[0]['Ville']; + } else continue; + } else continue; + + $banque = new Banque(); + $banque->codeBanque = $codBanque; + $banque->codeGuichet = $codGuichet; + $banque->libBanque = $libBanque; + $banque->adresse1 = $adrBanque1; + $banque->adresse2 = $adrBanque2; + $banque->cp = $adrBanqueCP; + $banque->ville = $adrBanqueVille; + $tabRet[] = $banque; + } + debugLog('I',"Liste des banques pour siren $siren : ".count($tabRet).' banques',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('banque', $siren); + $output = new BanquesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des compétences territoriales pour un établissement à une adresse donnée. + * @param string $siret Siret de l'établissement + * @param string $type Type de compétence (pre:prefectures et s/prefectures, jal;journaux d'annonces légales, tri:tribunaux, adm:administrateurs et mandataires judiciaires, hui:huissiers, cfe:centres de formalités des entreprises) + * @param string $codeInsee Code Insee de la commune de l'établissement + * @return ListeCompetencesReturn + */ + public function getListeCompetences($siret, $type, $codeInsee) + { + $this->authenticate(); + $this->permission('competences'); + + //Initialisation + $error = new ErrorType(); + $type = strtolower($type); + + debugLog('I',"Liste des compétences $type demandée pour la commune $codeInsee",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + $iBodacc = new MBodacc(); + $cp=$codeInsee*1; + $dep=false; + if (substr($codeInsee,0,2)=='2A' || substr($codeInsee,0,2)=='2B') + { + $dep=20; $cp=20000+(substr($codeInsee,2,3))*1; + } + elseif ($cp>0 && $cp<100) $dep=$cp; + elseif ($cp>970 && $cp<977) $dep=$cp; + elseif ($cp>999 && $cp<10000) $dep='0'.substr($cp,0,1); + elseif ($cp>=10000 && $cp<96000) $dep=substr($cp,0,2); + elseif ($cp>=99000) $dep=substr($cp,0,2); + elseif ($cp>=98000) $dep=substr($cp,0,3); + elseif ($cp>=97100 && $cp<97700) $dep=substr($cp,0,3); + + if ($type=='pre'){ + + $iDb = new WDB('jo'); + $tabTmp2 = $iDb->select('villes', 'DEP, COM, AR, CT', 'codeInsee='.$codeInsee, false, MYSQL_ASSOC); + $arrond = $tabTmp2[0]['AR']; + unset($iDb); + $iDb = new WDB('insee'); + $tabTmp2 = $iDb->select('insee_tabArrond', 'CHEFLIEU, ARTMAJ, NCC', "DEP='$dep' AND AR='$arrond'", false, MYSQL_ASSOC); + $nomSousPref = trim(strtr($tabTmp2[0]['ARTMAJ'],array('('=>'',')'=>'',' '=>'', "'"=>'')).' '.$tabTmp2[0]['NCC']); + unset($iDb); + $tabTmp = $iBodacc->getTribunauxParDep($dep); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='A' || $tribunal['triType']=='B') + { + $pref = levenshtein($tribunal['triNom'], 'PREFECTURE DE '.$nomSousPref); + $spref = levenshtein($tribunal['triNom'], 'SOUS PREFECTURE DE '.$nomSousPref); + + if ($tribunal['triType']=='B' && ($pref>7 || $spref>5)) continue; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType'].$typeP; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper( + preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + $tabRet[] = $competence; + + } + } + + } elseif ($type=='jal') { + + $tabTmp = $iBodacc->getJALparDep($dep); + foreach ($tabTmp as $i=>$comp) + { + $infos=''; + if (trim($comp['parution'])<>'') $infos.='Parution '.$comp['parution'].'. '; + if (trim($comp['aboAnnuel'])>0) $infos.='Abonnement Annuel : '.$comp['aboAnnuel'].' euros. '; + if (trim($comp['infos'])<>'') $infos.=$comp['infos']; + + $competence = new Competence(); + $competence->Id = 9000+$comp['id']*1; + $competence->IdSup = 0; + $competence->Code = ''; + $competence->Type = ''; + $competence->Nom = strtoupper($comp['nomJal']); + $competence->Siret = ''; + $competence->Adr = strtoupper($comp['adresse']); + $competence->AdrComp = ''; + $competence->CP = $comp['cp']; + $competence->Ville = strtoupper($comp['ville']); + $competence->CodeInsee = ''; + $competence->Tel = $comp['tel']; + $competence->Fax = $comp['fax']; + $competence->Web = $comp['siteWeb']; + $competence->Mail = $comp['email']; + $competence->Statut = 'Actif'; + $competence->DateCessation = ''; + $competence->Remarque = trim($infos); + $tabRet[] = $competence; + } + + } elseif ($type=='tri' || $type=='adm' || $type=='hui') { + + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if (//$tribunal['triType']=='C' || + $tribunal['triType']=='G'// || + /*$tribunal['triType']=='I'*/) { + $idCA = $tribunal['triIdSup']; + $codeTGI = $tribunal['triCode']; + $code = strtoupper(substr($tribunal['triCode'],0,3)); + } + debugLog('D',"Liste des compétences $type demandée pour la commune $codeInsee ($dep) : ". + "Type=".$tribunal['triType'].', '. + "Code=".$tribunal[$codeTGI],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($tribunal['triType']<>'E' && $tribunal['triType']<>'O' && + $tribunal['triType']<>'T' && $tribunal['triType']<>'R' && + $tribunal['triType']<>'N' && $tribunal['triType']<>'U' && + $tribunal['triType']<>'Z') + { + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper(Scores_Locale_String::cleanstring($tribunal['triNom'])); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(Scores_Locale_String::cleanstring(preg_replace('/ +/',' ', + $tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie']))); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + if ($tribunal['triNumGreffe']*1>0) + { + $competence->IdentifiantGreffe = $tribunal['triNumGreffe']; + } + $tabRet[] = $competence; + } + } + } + + if ($type=='adm') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getMandataires(array($idCA), false); + $tabRet = array(); + $nbAff=0; + foreach ($tabTmp as $i=>$tribunal) + { /** @todo A revoir Debut **/ + if (stripos($tribunal['tribunal'], $code)!==false || + stripos($tribunal['tribunal'], 'SAINT')!==false) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + $nbAff++; + } + } + if ($nbAff==0) + { + foreach ($tabTmp as $i=>$tribunal) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + } + }/** @todo A revoir Fin : Lier correctement les mandataires à un TI principal **/ + } + elseif ($type=='hui') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getHuissiers(array($codeTGI), false); + + $tabRet = array(); + $nbAff = 0; + foreach ($tabTmp as $i=>$tribunal) + { + $adr = $iInsee->structureVoie($tribunal['adresse']); + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($adr['num'].' '.$adr['adr_btq'].' '. + $adr['typeVoie'].' '.$adr['libVoie']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $adr['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation']; + $competence->Remarque = strtr($tribunal['contact'], + array( '
'=>', ', '
'=>', ', + '
'=>', ', + )); + $tabRet[] = $competence; + } + $nbComp = count($tabTmp); + debugLog('I',"$nbComp compétences $type trouvées pour le tribunal $codeTGI",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + elseif ($type=='cfe') + { + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='C' || $tribunal['triType']=='O' || + $tribunal['triType']=='T' || $tribunal['triType']=='R' || + $tribunal['triType']=='N' || $tribunal['triType']=='U' || + $tribunal['triType']=='Z') + { + if (strlen($tribunal['triCommentaire'])==32 && + strpos($tribunal['triCommentaire'], ' ')===false) + $remarque=''; + else $remarque=$tribunal['triCommentaire']; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '.$tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '.$tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $remarque; + $tabRet[] = $competence; + } + } + } + $this->wsLog('competences',$siret,$type.'/'.$codeInsee); + $output = new ListeCompetencesReturn(); + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + return $output; + } + + /** + * Retourne le statut du webservice + * @return StatusReturn + */ + public function status() + { + /* @todo tester les différents éléments qui peuvent conduire + * à un problème dans les services tel que la connexion à la + * base de données, l'accès FTP, l'accès HTTP, l'accès système de fichier + */ + + //Enregistrement des accès à la requête getIdentite + Zend_Registry::get('WsLogger')->info("status - ip:". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']. + ", hash:".$_SERVER['PHP_AUTH_PW']); + + $error = new StatusReturn(); + //Test connexion à la base de données + $db = new WDB('jo'); + if (!$db) { + $error->statusCode = 9000; + $error->statusMsg = $this->listError['9000']; + } else { + $error->statusCode = 3000; + $error->statusMsg = $this->listError['3000']; + } + return $error; + } + +} + +?> \ No newline at end of file diff --git a/library/WsScore/Entreprise/v0.8/Service.php b/library/WsScore/Entreprise/v0.8/Service.php new file mode 100644 index 00000000..fe0401d0 --- /dev/null +++ b/library/WsScore/Entreprise/v0.8/Service.php @@ -0,0 +1,5393 @@ +authenticate(); + $this->permission('identite'); + + //Initialisation + if (empty($id)) { $id = 0; } + $forceVerif = false; + + $tabRet = array(); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + if (empty($entrep) || empty($entrep['id']) ) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->AncienSiege = $entrep['AncienSiege']; + $identite->AncienSiegeDateFin = $entrep['AncienSiegeDateFin']; + $identite->TribunalCode = prepareString($entrep['Tribunal']); + $identite->TribunalLib = prepareString($entrep['TribunalLib']); + //'NumGreffe' = $entrep['numGreffe'], // Ajouté le 4 08 2009 + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->ActifEco = $entrep['ActifEco']; // Etab éco actif, ajout le 28/04/2011 + $identite->ActifEcoDate = $entrep['ActifEcoDate']; // Date si éco inactif et jur actif + $identite->ActifEcoType = $entrep['ActifEcoType']; // vide ou NPAI ou PFER ou ECOF + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = $entrep['NOMEN_LONG']; + if (empty($identite->Nom)) { + $identite->Nom = prepareString(strtr($entrep['Nom'],'/*',' ')); + } + $identite->Nom2 = prepareString($entrep['Nom2']); + $identite->NomLong = prepareString($entrep['nomLong']); // Ajouté le 4 08 2009 + $identite->NomCommercial = prepareString($entrep['NomCommercial']); // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = prepareString($entrep['Sigle']); + $identite->SigleLong = prepareString($entrep['sigleLong']); // Ajouté le 4 08 2009 + $identite->Enseigne = prepareString($entrep['Enseigne']); + $identite->EnseigneLong = prepareString($entrep['enseigneLong']); // Ajouté le 16 11 2010 + $identite->Adresse = prepareString($entrep['Adresse']); + $identite->Adresse2 = prepareString($entrep['Adresse2']); + $identite->AdresseNum = prepareString($entrep['AdresseNum']); + $identite->AdresseBtq = prepareString($entrep['AdresseBtq']); + $identite->AdresseVoie = prepareString($entrep['AdresseVoie']); + $identite->AdresseRue = prepareString($entrep['AdresseRue']); + $identite->CP = $entrep['CP']; + $identite->Ville = prepareString($entrep['Ville']); + $identite->Pays = prepareString($entrep['Pays']); // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = prepareString($entrep['Tel']); + $identite->Fax = prepareString($entrep['Fax']); + $identite->Web = prepareString($entrep['Web']); + $identite->Mail = prepareString($entrep['Mail']); + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + + $geoInfos = new GeoInfos(); + $geoInfos->CUCS = $entrep['GeoInfos']['CUCS']; + $geoInfos->NCUCS = $entrep['GeoInfos']['NCUCS']; + $geoInfos->ZRU = $entrep['GeoInfos']['ZRU']; + $geoInfos->NZRU = $entrep['GeoInfos']['NZRU']; + $geoInfos->ZFU = $entrep['GeoInfos']['ZFU']; + $geoInfos->NZFU = $entrep['GeoInfos']['NZFU']; + $geoInfos->ZUS = $entrep['GeoInfos']['ZUS']; + $geoInfos->NZUS = $entrep['GeoInfos']['NZUS']; + $geoInfos->AFR = $entrep['GeoInfos']['AFR']; + $geoInfos->NAFR = $entrep['GeoInfos']['NAFR']; + $geoInfos->ZRR = $entrep['GeoInfos']['ZRR']; + $geoInfos->NZRR = $entrep['GeoInfos']['NZRR']; + $identite->GeoInfos = $geoInfos; + + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = prepareString($entrep['APRM_Lib']); + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = prepareString($entrep['CapitalType']); // Ajouté le 4 08 2009 + + $classWdate = new WDate(); + $identite->DateCreaEt = $classWdate->dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = $classWdate->dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + //'DateMajRCS' = $entrep['DateMajRCS'], // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = prepareString($entrep['codeCommune']); + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->TrancheCAType = $entrep['TrancheCAType']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = prepareString($entrep['dir1Titre']); + $identite->dir1NomPrenom = prepareString($entrep['dir1NomPrenom']); + $identite->dir1DateFct = prepareString($entrep['dir1DateFct']); //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = prepareString($entrep['dir1LieuNaiss']); // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = prepareString($entrep['dir2Titre']); + $identite->dir2NomPrenom = prepareString($entrep['dir2NomPrenom']); + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = prepareString($entrep['dir2DateNaiss']); //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = prepareString($entrep['dir2LieuNaiss']); // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = prepareString($entrep['InfosIris']['libIris']); + $identite->InfosIris->typIris = prepareString($entrep['InfosIris']['typIris']); + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SurfaceMagasin = $entrep['ACTISURF']*1; // 0=N/D, 1=inf. à 300m2,2=300 à 400m2, 3=400 à 2500m2, 4=sup. à 2500m2 + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Millesime = $entrep['bilanAnnee']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->CAestime = $entrep['bilanFLestime']; + $identite->Bilan->Resultat = prepareString($entrep['bilanHN']); + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $tabAutreSiret = array(); + if (count($entrep['AutreSiret'])) { + foreach($entrep['AutreSiret'] as $type => $item) { + $autreSiret = new AutreSiret(); + $autreSiret->type = $type; + $autreSiret->siren = $item['siren']; + $autreSiret->nic = $item['nic']; + $autreSiret->apeEtab = $item['apeEtab']; + $autreSiret->codeEve = $item['codeEve']; + $autreSiret->dateEve = $item['dateEve']; + $autreSiret->adrL1 = $item['adrL1']; + $autreSiret->adrL2 = $item['adrL2']; + $autreSiret->adrL3 = $item['adrL3']; + $autreSiret->adrL4 = $item['adrL4']; + $autreSiret->adrL5 = $item['adrL5']; + $autreSiret->adrL6 = $item['adrL6']; + $autreSiret->adrL7 = $item['adrL7']; + $autreSiret->depCom = $item['depCom']; + $autreSiret->rivoli = $item['rivoli']; + $autreSiret->siege = $item['siege']; + $autreSiret->destinat = $item['destinat']; + $autreSiret->typEtab = $item['typeEtab']; + $autreSiret->origine = $item['origine']; + $tabAutreSiret[] = $autreSiret; + } + } + $identite->AutreSiret = $tabAutreSiret; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + if ( $entrep2 !== false ) { + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $identite->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + } + + $this->wsLog('identite',$siret,$id); + + return $identite; + } + + /** + * Avis RNCS + * @param string $siren + * @return AvisRncs + */ + public function getAvisRncs($siren) + { + $this->authenticate(); + $this->permission('avisrncs'); + + $len = strlen($siren); + if ( $len != 9 ) { + $this->sendError('1020'); + } + + $db = Zend_Db_Table_Abstract::getDefaultAdapter(); + + $output = new AvisRncs(); + $iDb = new WDB(); + $rncs = new MRncs($iDb); + + //jo.etablissements => insee uniquement, rncs ? + + //Entreprise + $infosEtab = $rncs->getIdentiteEtab($siren); + if ( $infosEtab === false ) { + throw new SoapFault('MSG', "Cette entreprise n'est pas inscrite au RNCS ou radié depuis plus de 5 ans."); + } + + $output->Nom = $infosEtab['raisonSociale']; //@todo personne physique + $output->Sigle = $infosEtab['sigle']; + $output->Enseigne = $infosEtab['enseigne']; + $output->NomCommercial = $infosEtab['nomCommercial']; + + $output->Siren = $infosEtab['siren']; + $output->NumGest = $infosEtab['numRC']; + $output->RadiationDate = $infosEtab['dateRad']; + $output->ImmatDate = $infosEtab['dateImma']; + $output->NafCode = $infosEtab['nafEnt']; + $output->NafLabel = $infosEtab['nafEntLib']; + + if (empty($infosEtab['dateRad']) || $infosEtab['dateRad'] = '0000-00-00') { + $output->TribunalCode = $infosEtab['triCode']; //@todo + $output->TribunalLabel = $infosEtab['libGreffe']; // @todo + $output->FjCode = $infosEtab['cj']; + $output->FjLabel = $infosEtab['cjLib']; + $output->Capital = $infosEtab['capital']; + $output->CapitalDev = 'EUR'; + if ( !empty($infosEtab['capitalDevIso'])) { + $output->CapitalDev = $infosEtab['capitalDevIso']; + } + $output->CapitalType = $infosEtab['capitalType']; + + $output->SiegeAdresseNum = intval($infosEtab['adrNumVoie']); + $output->SiegeAdresseBtq = $infosEtab['adrIndRep']; + $output->SiegeAdresseVoieType = $infosEtab['adrTypeVoie'] ; + $output->SiegeAdresseVoieLabel = $infosEtab['adrVoie']; + $output->SiegeAdresseComp = $infosEtab['adrComp']; + $output->SiegeAdresseCP = $infosEtab['cp']; + $output->SiegeAdresseVille = $infosEtab['commune']; + + $output->DateMajRCS = $infosEtab['DateMajRCS']; + + //Durée de la société - impossible + $output->DureeDate = ''; + + //Date du dernier bilan - MOIS/JOUR au pire chercher dans l'annonce + try { + $bilanM = new Application_Model_JoBilans(); + $sql = $bilanM->select(true) + ->columns(array('dateExercice')) + ->where('siren=?', $siren) + ->order('dateExercice DESC')->limit(1); + $result = $bilanM->fetchRow($sql); + if ($result !== null) { + $output->CompteArretMois = substr($result->dateExercice,4,2); + $output->CompteArretJour = substr($result->dateExercice,6,2); + } + } catch(Zend_Db_Exception $e) {} + + //=> Avec l'adresse du premier siège + $output->ConstitutionTribunalCode = ''; + $output->ConstitutionTribunalLabel = ''; + + $iInsee = new MInsee($iDb); + $dirs = $iInsee->getDirigeants($siren, false); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + $dirigeant = new AvisRncsAdmin(); + + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Label = $dir['Titre']; + $dirigeant->CompanyName = $dir['Societe']; + $dirigeant->CompanyId = (array_key_exists('Siren', $dir) && intval($dir['Siren'])!=0) ? $dir['Siren'] : '' ; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + $dirigeant->NomUsage = $dir['NomUsage']; + $dirigeant->NaissanceDate = $dir['NaissDate']; + $dirigeant->NaissanceVille = $dir['NaissVille']; + $dirigeant->NaissanceCp = $dir['NaissDepPays']; + $liste[] = $dirigeant; + } + $output->Administration = $liste; + + $insee = $iInsee->getIdentiteEntreprise($siren); + + //Origine, code à transformer - getIdentiteEntreprise - insee + $output->Origine = $insee['OrigineCreation']; + + //Activité réelle - getIdentiteEntreprise - insee + $output->Activite = $insee['Activite']; + $output->BodaccActivite = $insee['Activite']; + + //Date de création à l'insee - getIdentiteEntreprise - insee + //@todo : Aller cherche dans les annonces bodacc création + acquisition + $output->ActiviteDate = substr($insee['DateCreaEn'],0,4).'-'.substr($insee['DateCreaEn'],4,2).'-'.substr($insee['DateCreaEn'],6,2); + + //Type d'exploitation - getIdentiteEntreprise - insee + $output->Exploitation = $insee['TypeExploitation']; + + //Liste des jugements + $output->Evenements = array(); + $evens = $rncs->getListeJugements($siren); + if ( count($evens)>0 ) { + foreach ( $evens as $even ) { + $output->Evenements[] = $even['dateEffet'] . ' - ' . $even['libEven']; + } + } + + //Liste des dépots + $output->Depots = array(); + $infogreffe = new SdMetier_Infogreffe_DocAC($siren); + $depots = $infogreffe->getList(); + if ( count($depots)>0 ) { + $i = 0; + $listNumDepot = array(); + foreach ( $depots as $depot ) { + $acte = new AvisRncsDepot(); + $acte->DepotNum = $depot->DepotNum; + $acte->DepotDate = $depot->DepotDate; + $acte->ActeNum = $depot->ActeNum; + $acte->ActeDate = $depot->ActeDate; + $acte->ActeType = $depot->ActeType; + $acte->ActeTypeLabel = $depot->ActeTypeLabel; + $acte->infos = $depot->infos; + $result = $rncs->getListeDepots($siren, $depot->DepotDate); + if (count($result)>0) { + foreach ($result as $infos) { + $acte->infos[] = $infos['libDepot']; + } + } + + //Acte constitutif - Statut + //@todo : STATUTS CONSTITUTIFS + $date = substr($depot->ActeDate,0,4); + if ( in_array($depot->ActeType, array('04')) && intval($date)>1995 ) { + $output->ConstitutionActeDate = $depot->ActeDate; + $output->ConstitutionDepotDate = $depot->DepotDate; + } + + $i++; + if ($i < 4 || $i > count($depots)-4) { + $output->Depots[] = $acte; + } + } + } + + + //Liste des établissements actifs au RNCS + $output->Etablissements = array(); + $result = $iInsee->getEtablissements($siren, '', 0, 200, 200, 0, 1); + if ( count($result['reponses'])>0 ) { + foreach ( $result['reponses'] as $item ) { + $output->Etablissements[] = $item['Adresse'] . ' ' . $item['Adresse2'] . ' - ' . + $item['CP'] . ' ' . strtoupper($item['Ville']); + } + } + } + + $this->wsLog('avisrncs', $siren); + + return $output; + } + + /** + * Retourne les informations identitaires de l'entreprise ou de l'établissement demandé + * @param string $siret Siren de l'entreprise ou siret de l'établissement + * @param integer $id Identifiant S&D de l'établissement + * @return IdentiteProcol Fiche d'identité de l'établissement + */ + public function getIdentiteProcol($siret, $id=0, $forceVerif=false) + { + $this->authenticate(); + $this->permission('idprocol'); + + debugLog('I',"Identité AGS demandée pour siret $siret (id=$id)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if (intval($siren)==0 && $id==0) { + $this->sendError('1010'); + } elseif ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren, $nic, $id, $forceVerif); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + + $identiteProcol = new IdentiteProcol(); + + //Element identite + $identite = new Identite(); + $identite->id = $entrep['id']; + $identite->Siret = $entrep['Siret']; + $identite->SiretSiege = $entrep['SiretSiege']; + $identite->Siege = $entrep['Siege']; + $identite->TribunalCode = $entrep['Tribunal']; + $identite->TribunalLib = $entrep['TribunalLib']; + $identite->NumRC = $entrep['numRC']; // Ajouté le 4 08 2009 + $identite->Actif = $entrep['Actif']; + $identite->EntActiveRCS = $entrep['EntActiveRCS']; + $identite->AutreId = $entrep['AutreId']; + $identite->Source = $entrep['Source']; + $identite->SourceId = $entrep['SourceId']; + $identite->Isin = $entrep['Isin']; + $identite->Nom = strtr($entrep['Nom'],'/*',' '); + $identite->Nom2 = $entrep['Nom2']; + $identite->NomLong = $entrep['nomLong']; // Ajouté le 4 08 2009 + $identite->NomCommercial = $entrep['NomCommercial']; // Ajouté le 16 11 2010 + $identite->Siret = $entrep['Siret']; + $identite->Sigle = $entrep['Sigle']; + $identite->SigleLong = $entrep['sigleLong']; // Ajouté le 4 08 2009 + $identite->Enseigne = $entrep['Enseigne']; + $identite->EnseigneLong = $entrep['enseigneLong']; // Ajouté le 16 11 2010 + $identite->Adresse = $entrep['Adresse']; + $identite->Adresse2 = $entrep['Adresse2']; + $identite->AdresseNum = $entrep['AdresseNum']; + $identite->AdresseBtq = $entrep['AdresseBtq']; + $identite->AdresseVoie = $entrep['AdresseVoie']; + $identite->AdresseRue = $entrep['AdresseRue']; + $identite->CP = $entrep['CP']; + $identite->Ville = $entrep['Ville']; + $identite->Pays = $entrep['Pays']; // Ajouté le 18 02 2008 + $identite->PaysIso2 = $entrep['PaysIso2']; + $identite->AdresseDom = $entrep['AdresseDom']; + + $tabAdresseDomEnt = array(); + if (isset($entrep['AdresseDomEnt']) && count($entrep['AdresseDomEnt'])>0){ + foreach ($entrep['AdresseDomEnt'] as $element){ + $adresseDomEnt = new AdresseDomEnt(); + $adresseDomEnt->siren = $element['siren']; + $adresseDomEnt->nom = $element['nom']; + $tabAdresseDomEnt[] = $adresseDomEnt; + } + } + $identite->AdresseDomEnt = $tabAdresseDomEnt; + + $identite->AdresseDomNb = $entrep['AdresseDomNb']; + $identite->Civilite = $entrep['Civilite']; + $identite->NbEtab = $entrep['NbEtab']; + $identite->Tel = $entrep['Tel']; + $identite->Fax = $entrep['Fax']; + $identite->Web = $entrep['Web']; + $identite->Mail = $entrep['Mail']; + $identite->GeoLat = $entrep['GeoLat']; + $identite->GeoLon = $entrep['GeoLon']; + $identite->GeoPrecis = $entrep['GeoPrecis']; + $identite->GeoInfos = $entrep['GeoInfos']; + $identite->TvaNumero = $entrep['TvaNumero']; + $identite->TvaAttribue = $entrep['TvaAttribue']; + $identite->FJ = $entrep['FJ']; + $identite->FJ_Lib = $entrep['FJ_lib']; + $identite->FJ2 = $entrep['FJ2']; // Ajouté le 4 08 2009 + $identite->FJ2_Lib = $entrep['FJ2_Lib']; // Ajouté le 4 08 2009 + $identite->Siren = $entrep['Siren']; + $identite->Nic = $entrep['Nic']; + $identite->NafEnt = $entrep['NafEnt']; + $identite->NafEntLib = $entrep['NafEntLib']; + $identite->NafEtab = $entrep['NafEtab']; + $identite->NafEtabLib = $entrep['NafEtabLib']; + $identite->NaceEtab = $entrep['NaceEtab']; + $identite->NaceEnt = $entrep['NaceEnt']; + $identite->Nafa = $entrep['APRM']; + $identite->NafaLib = $entrep['APRM_Lib']; + $identite->NumRM = $entrep['NumRM']; + $identite->Activite = $entrep['Activite']; + $identite->Capital = $entrep['Capital']; + $identite->CapitalDev = $entrep['CapitalDev']; + $identite->CapitalLib = $entrep['CapitalLib']; // Ajouté le 18 02 2008 + $identite->CapitalType = $entrep['CapitalType']; // Ajouté le 4 08 2009 + $identite->DateCreaEt = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEt']); + $identite->DateCreaEn = WDate::dateT('Ymd','Y-m-d',$entrep['DateCreaEn']); + $identite->DateClotEt = $entrep['DateClotEt']; //@todo : date + $identite->DateImmat = $entrep['dateImmat']; // Ajouté le 4 08 2009 + $identite->DateRadiation = $entrep['dateRad']; // Ajouté le 4 08 2009 + $identite->EffEnTr = $entrep['EffEnTr']; + $identite->EffEnTrLib = $entrep['EffEnTrLib']; + $identite->Effectif = $entrep['Effectif']; + $identite->EffEtTr = $entrep['EffEtTr']; // Ajout le 11 08 2010 + $identite->EffEtTrLib = $entrep['EffEtTrLib']; // Ajout le 11 08 2010 + $identite->EffectifEtab = $entrep['EffectifEtab']; // Ajout le 11 08 2010 + $identite->Dept = $entrep['Dept']; + $identite->codeCommune = $entrep['codeCommune']; + $identite->AnneeEffEn = $entrep['AnneeEffEn']; + $identite->AnneeEffEt = $entrep['AnneeEffEt']; + $identite->AnneeTCA = $entrep['AnneeTCA']; + $identite->TrancheCA = $entrep['TrancheCA']; + $identite->TrancheCALib = $entrep['TrancheCALib']; + $identite->dir1Code = $entrep['dir1Code']; + $identite->dir1Titre = $entrep['dir1Titre']; + $identite->dir1NomPrenom = $entrep['dir1NomPrenom']; + $identite->dir1DateFct = $entrep['dir1DateFct']; //@todo : date + $identite->dir1DateNaiss = $entrep['dir1DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir1LieuNaiss = $entrep['dir1LieuNaiss']; // Ajouté le 4 08 2009 + $identite->dir2Code = $entrep['dir2Code']; + $identite->dir2Titre = $entrep['dir2Titre']; + $identite->dir2NomPrenom = $entrep['dir2NomPrenom']; + $identite->dir2DateFct = $entrep['dir2DateFct']; //@todo : date + $identite->dir2DateNaiss = $entrep['dir2DateNaiss']; //@todo : date // Ajouté le 4 08 2009 + $identite->dir2LieuNaiss = $entrep['dir2LieuNaiss']; // Ajouté le 4 08 2009 + $identite->Rivoli = $entrep['Rivoli']; + $identite->InfosIris->codIris = $entrep['InfosIris']['codIris']; + $identite->InfosIris->codComIris = $entrep['InfosIris']['codComIris']; + $identite->InfosIris->libIris = $entrep['InfosIris']['libIris']; + $identite->InfosIris->typIris = $entrep['InfosIris']['typIris']; + $identite->InfosIris->evoIris = $entrep['InfosIris']['evoIris']; + $identite->InfosIris->trIris = $entrep['InfosIris']['trIris']; + $identite->InfosIris->grdQuartier = $entrep['InfosIris']['grdQuartier']; + $identite->NatureActivite = $entrep['NatureActivite']; // Nature de l'activité + $identite->OrigineCreation = $entrep['OrigineCreation']; // Origine de la création + $identite->TypeExploitation = $entrep['TypeExploitation']; + $identite->Auxiliaire = $entrep['Auxiliaire']; // 1=Auxiliaire / 0=Non auxiliaire + $identite->Saisonnalite = $entrep['Saisonnalite']; // P=Activité permanente / S=Activité saisonnière + $identite->SituationJuridique = $entrep['SituationJuridique']; + $identite->Bilan->Cloture = $entrep['bilanDate']; //@todo : date + $identite->Bilan->Duree = $entrep['bilanMois']; + $identite->Bilan->Devise = $entrep['bilanDevise']; + $identite->Bilan->Capital = $entrep['bilanDA']; + $identite->Bilan->CA = $entrep['bilanFL']; + $identite->Bilan->Resultat = $entrep['bilanHN']; + $identite->Bilan->Effectif = $entrep['bilanYP']; + $identite->Bourse->placeCotation = $bourse['placeCotation']; + $identite->Bourse->nombreTitres = $bourse['nombreTitres']; + $identite->Bourse->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $identite->Bourse->derCoursDate = $bourse['date']; //@todo : date + $identite->Bourse->derCoursCloture = $bourse['close']; //@todo : date + + $tabAutreSiren = array(); + if (isset($entrep['AutreSiren'])) { + $autreSiren = new AutreSiren(); + $autreSiren->siren = $entrep['AutreSiren']['listeSiren']['siren']; + $autreSiren->type = $entrep['AutreSiren']['listeSiren']['type']; + $tabAutreSiren[] = $autreSiren; + } + $identite->AutreSiren = $tabAutreSiren; + + $identite->DateMajINSEE = $entrep['DateMajINSEE']; //@todo : date + $identite->DateMajRCS = $entrep['DateMajRCS']; //@todo : date + $identite->DateMajBILAN = $entrep['bilanDateMaj']; //@todo : date + $identite->DateMajANN = $entrep['dateMajANN']; //@todo : date + $identite->DateMajID = $entrep['dateMajIdentite']; //@todo : date + + if (preg_match('/NAF4/i', $this->User->pref)) + { + $entrep2 = $iInsee->getNaf4($siren, $nic, $id); + if ( $entrep2 !== false ) { + $identite->Naf4Ent = $entrep2['apen4']; + $identite->Naf4Etab = $entrep2['apet4']; + $identite->Naf4EntLib = prepareString($entrep2['apen4_lib']); + $identite->Naf4EtabLib = prepareString($entrep2['apet4_lib']); + } + } + + $identiteProcol->Identite = $identite; + + //Eléments annonces légales + $tabRetAnn = $tabLastEven = array(); + if (intval($siren)!=0) { + $anns = $this->getAnnonces($siren, 1); + $anns = $anns->result; + $tribunalProcol = false; + foreach ($anns as $nb=>$ann) + { + $tabRetEven = array(); + foreach ($ann->evenements as $tabEven) { + // On ignore les éléments suivants + if ($tabEven->CodeEven>=7000) continue; + if ($tabEven->CodeEven>=4000 && $tabEven->CodeEven<=4999) continue; + + // Par défaut, on force le tribunal à celui présent dans la dernière annonce de Procol + if ($tribunalProcol==false && $tabEven->CodeEven>=1000 && $tabEven->CodeEven<2000 && $ann->BodaccCode=='BODA') { + $identiteProcol->TribunalCode = $ann->TribunalCode; + $identiteProcol->TribunalLib = prepareString($ann->Tribunal); + $tribunalProcol=true; + } + + // On ne prend que le dernier élément de chaque type + if (in_array($tabEven->CodeEven, $tabLastEven)) continue; + + $tabLastEven[] = $tabEven->CodeEven; + $tabRetEven[] = $tabEven; + } + + if (count($tabRetEven)>0) { + $annonce = new Annonce(); + $annonce->id = $ann->id; + $annonce->BodaccCode = $ann->BodaccCode; + $annonce->BodaccNum = $ann->BodaccNum; + $annonce->NumAnnonce = $ann->NumAnnonce; + $annonce->DateParution = $ann->DateParution; //@todo : date + $annonce->Departement = $ann->Departement; + $annonce->Tribunal = $ann->Tribunal; + $annonce->TribunalCode = $ann->TribunalCode; + $annonce->TribunalSiret = $ann->TribunalSiret; + $annonce->Rubrique = $ann->Rubrique; + $annonce->typeAnnonce = $ann->typeAnnonce; + $annonce->texteRectificatif = $ann->texteRectificatif; + $annonce->texteAnnonce = utf8_encode($ann->texteAnnonce); + $annonce->dateEffet = $ann->dateEffet; //@todo : date + $annonce->dateJugement = $ann->dateJugement; //@todo : date + $annonce->dateInsertionSD = $ann->dateInsertionSD; //@todo : date + $annonce->evenements = $tabRetEven; + $annonce->Lien_Annonce_Pdf = $ann->Lien_Annonce_Pdf; + $tabRetAnn[] = $annonce; + } + } + $identiteProcol->Annonces = $tabRetAnn; + + $iRncs = new MRncs(); + if ($entrep['Siege']==1 || $entrep['Siege']==11) { + $identiteProcol->LibTypeEtab = 'Etablissement Siege'; + } else { + $tabEtabRncs = $iRncs->getIdentiteEtab($siren, $entrep['Nic']); + if ($tabEtabRncs['Siege']==2) $identiteProcol->LibTypeEtab = 'Etablissement Principal'; + elseif ($tabEtabRncs['Siege']==1) $identiteProcol->LibTypeEtab = 'Etablissement Complementaire'; + elseif ($tabEtabRncs['Siege']==0) $identiteProcol->LibTypeEtab = 'Etablissement Secondaire'; + } + + //@todo + $tabJuge = $iRncs->getIntervenants($siren); + $tabDepots=array(); + foreach ($tabJuge as $iDepot=>$depot) { + $organe = new Organe(); + $organe->codEven = $depot['codEven']; + $organe->libEven = prepareString($depot['libEven']); + $organe->dateEffet = $depot['dateEffet']; + $organe->admcode = $depot['admcode']; + $organe->admfonction = prepareString($depot['admfonction']); + $organe->admnom = prepareString($depot['admnom']); + $organe->admadrNum = $depot['admadrNum']; + $organe->admadrInd = $depot['admadrInd']; + $organe->admadrVoie = $depot['admadrVoie']; // @todo : adm1adr1, adm1adr2, adm1adr3, + $organe->admadrCP = $depot['admadrCP']; + $organe->admadrVille = $depot['admadrVille']; + $tabDepots[] = $organe; + } + $identiteProcol->Organes = $tabDepots; + + require_once 'Metier/partenaires/classMLiens.php'; + $mLiens = new MLiens($siren); + $tabA = $mLiens->getActionnaires($siren, 1); + $nbA = count($tabA); + $tabAct = array(); + foreach ($tabA as $i=>$lien) { + $liens = new Actionnaire(); + $liens->Pmin = $lien['Pmin']; + $liens->MajMin = $lien['MajMin']; + $liens->RaisonSociale = $lien['RaisonSociale']; + $liens->Pays = $lien['Pays']; + $liens->Siren = $lien['Siren']; + $liens->Actif = $lien['Actif']; + $tabAct[] = $liens; + } + $identiteProcol->Actionnaires = $tabAct; + + $iGreffes = new MGreffes(); + $tabActes = $iGreffes->getListeActes($siren); + + $identiteProcol->StatutsModifDepot = $identiteProcol->StatutsModif = '0000-00-00'; + foreach ($tabActes as $i=>$acte) { + if ('_'.$acte['acte_type']=='_04') { // STATUTS CONSTITUTIFS + $identiteProcol->StatutsConstDepot = $acte['depot_date']; // => 1997-12-18 + $identiteProcol->StatutsConst = $acte['acte_date']; // => 1997-11-13 + break; + } elseif (in_array('_'.$acte['acte_type'], array( + //'_04', // STATUTS CONSTITUTIFS + '_06', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_07', // STATUTS A JOUR 9 0000-00-00 2009-09-02 17:05:55 + '_08', // STATUTS A JOUR ET DECLARATION DE CONFORMITE 9 0000-00-00 2009-09-02 17:05:55 + '_09', // STATUTS APRES TRANSFERT DE SIEGE 9 0000-00-00 2009-09-02 17:05:55 + '_A1', // STATUTS 9 0000-00-00 2009-09-02 17:05:55 + '_AH', // AVENANT AUX STATUTS + ))) { + // On ne prend que la dernière modif + if ($identiteProcol->StatutsModifDepot=='0000-00-00' && $identiteProcol->StatutsModif=='0000-00-00') { + $identiteProcol->StatutsModifDepot = $acte['depot_date'];// => 1997-12-18 + $identiteProcol->StatutsModif = $acte['acte_date']; // => 1997-11-13 + } + } + } + + /** Y a t il eu des informations relatives à une cession ? **/ + $tabCes = $iGreffes->getInfosCessions($siren); + if ($tabCes) { + $identiteProcol->CessionJugeLib = $tabCes['cessJuge']; + $identiteProcol->CessionJugeDate = $tabCes['cessDateJuge']; + $identiteProcol->CessionAvisBodac = $tabCes['cessDateBod']; + $identiteProcol->CessionInvenDate = $tabCes['cessDateInv']; + $identiteProcol->CessionCAdeclare = $tabCes['cessCAdec']; + $identiteProcol->CessionEffectif = $tabCes['cessEffectif']; + $identiteProcol->CessionDesc = $tabCes['cessDesc']; + $identiteProcol->CessionDescDate = $tabCes['cessDateDesc']; + $identiteProcol->CessionOffreDate = $tabCes['cessDateLim']; + $identiteProcol->CessionMandataire = $tabCes['cessMand']; + } + } + //sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug $siren", print_r($tabRet,true)) ; + debugLog('I', 'Etablissement retourné = '. $entrep['Nom'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('identite', $siret, $id); + + return $identiteProcol; + } + + /** + * Retourne les liens financiers pour une entreprise. + * @param string $siren Siren de l'entreprise + * @param string $type Type de lien (actionnaire|participation) + * @return LiensReturn + */ + public function getLiens($siren, $type = null) + { + $this->authenticate(); + $this->permission('liens'); + + //Load country table + try { + $countryM = new Application_Model_JoTabPays(); + $sql = $countryM->select()->from($countryM, array('codPays3', 'libPays')); + $result = $countryM->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + $tabPays = array(); + if ( $result->count()>0 ) { + foreach ( $result as $item ) { + $tabPays[$item->codPays3] = $item->libPays; + } + } + + $tabAct = $tabPar = $tabDir = array(); + + try + { + require_once 'Metier/partenaires/classMLiens2.php'; + $liensM = new MLiens2($siren, 'siren'); + + //Actionnaires + $liens = $liensM->getActionnaires(null, true); + if (count($liens)>0) { + foreach ( $liens as $item ) { + $detail = new Lien(); + $detail->id = $item->id; + $detail->idFiche = $item->idAct; + $detail->nom = $item->RS; + $detail->sigle = $item->sigle; + + $libPays = ''; + if ($item->adresse_pays!='') { + $libPays = array_key_exists($item->adresse_pays, $tabPays) ? + $tabPays[$item->adresse_pays] : $item->adresse_pays; + } else { + $libPays = $tabPays['FRA']; + } + $detail->pays = $libPays; + + if ($item->PpPm=='PP' && intval($siren)==0) { + $detail->nom = $item->civilite.' '.$item->nom.' '.$item->prenom; + } + $detail->siren = str_pad($item->siren, 9, "0", STR_PAD_LEFT); + $detail->PDetention = $item->PDetention; + $detail->Pvote = $item->Pvote; + $detail->MajMin = $item->MajMin; + + if ($item->dateUpdate=='0000-00-00 00:00:00'){ + $detail->date = substr($item->dateInsert,0,10); + } else { + $detail->date = substr($item->dateUpdate,0,10); + } + + $nbIdNum = 3; + $refs = array(); + $idM = new Application_Model_Sdv1TabIdLocal(); + for ($i=0;$i<$nbIdNum;$i++) { + if( !empty($item->{'idLoc'.$i.'Num'}) ) { + $ref = new LienRefId(); + $ref->num = $item->{'idLoc'.$i.'Num'}; + + if ( !empty($item->{'idLoc'.$i.'Type'}) ) { + $sql = $idM->select()->from($idM, array('idLocal', 'idPrincipal')) + ->where('id=?', $item->{'idLoc'.$i.'Type'}); + $result = $idM->fetchRow($sql); + if (null!==$result) { + $ref->label = $result->idLocal; + $ref->type = $result->idPrincipal; + } else { + $ref->label = ''; + $ref->type = 0; + } + } else { + $ref->label = 'Identifiant local'; + $ref->type = 1; + } + + $refs[] = $ref; + } + } + $detail->identification = $refs; + + $tabAct[] = $detail; + } + } + + //Participations + $liens = $liensM->getParticipations(null, true); + if (count($liens)>0) { + foreach ( $liens as $item ) { + $detail = new Lien(); + $detail->id = $item->id; + $detail->idFiche = $item->idPar; + $detail->nom = $item->RS; + $detail->sigle = $item->sigle; + + $libPays = ''; + if ($item->adresse_pays!='') { + $libPays = array_key_exists($item->adresse_pays, $tabPays) ? + $tabPays[$item->adresse_pays] : $item->adresse_pays; + } else { + $libPays = $tabPays['FRA']; + } + $detail->pays = $libPays; + + if ($item->PpPm=='PP' && intval($siren)==0) { + $detail->nom = $item->civilite.' '.$item->nom.' '.$item->prenom; + } + $detail->siren = str_pad($item->siren, 9, "0", STR_PAD_LEFT); + $detail->PDetention = $item->PDetention; + $detail->Pvote = $item->Pvote; + $detail->MajMin = $item->MajMin; + + if ($item->dateUpdate=='0000-00-00 00:00:00'){ + $detail->date = substr($item->dateInsert,0,10); + } else { + $detail->date = substr($item->dateUpdate,0,10); + } + + $nbIdNum = 3; + $refs = array(); + $idM = new Application_Model_Sdv1TabIdLocal(); + for ($i=0;$i<$nbIdNum;$i++) { + if( !empty($item->{'idLoc'.$i.'Num'}) ) { + $ref = new LienRefId(); + $ref->num = $item->{'idLoc'.$i.'Num'}; + + if ( !empty($item->{'idLoc'.$i.'Type'}) ) { + $sql = $idM->select()->from($idM, array('idLocal', 'idPrincipal')) + ->where('id=?', $item->{'idLoc'.$i.'Type'}); + $result = $idM->fetchRow($sql); + if (null!==$result) { + $ref->label = $result->idLocal; + $ref->type = $result->idPrincipal; + } else { + $ref->label = ''; + $ref->type = 0; + } + } else { + $ref->label = 'Identifiant local'; + $ref->type = 1; + } + + $refs[] = $ref; + } + } + $detail->identification = $refs; + + $tabPar[] = $detail; + } + } + + //Directions + $liens = $liensM->getDirections(true); + if (count($liens)>0) { + foreach ( $liens as $item ) { + $detail = new LienDirection(); + $detail->siren = $item->siren; + $detail->nom = $item->raisonSociale; + $detail->fonction = $item->fonction_lib; + $detail->dirRS = $item->dirRS; + + $nom = ''; + if (!empty($item->civilite)) { + $nom.= $item->civilite.'. '; + } + if (!empty($item->nom)) { + $nom.= $item->nom.' '; + } + if (!empty($item->prenom)) { + $nom.= $item->prenom; + } + $detail->dirNom = $nom; + $detail->dirNaissLieu = $item->naissance_lieu; + $detail->dirNaissDate = $item->naissance_date; + + $tabDir[] = $detail; + } + } + } catch(Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $output = new LiensReturn(); + $output->actionnaires = $tabAct; + $output->participations = $tabPar; + $output->directions = $tabDir; + + $this->wsLog('liens', $siren); + + return $output; + } + + /** + * Retourne les liens financiers pour une entreprise. + * @param int $id Identifiant de référence de l'entreprise + * @param string $type Type de lien (actionnaire|participation) + * @return LiensReturn + */ + public function getLiensById($id, $type = null) + { + $this->authenticate(); + $this->permission('liens'); + + try { + $countryM = new Application_Model_JoTabPays(); + $sql = $countryM->select()->from($countryM, array('codPays3', 'libPays')); + $result = $countryM->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + $tabPays = array(); + if ( $result->count()>0 ) { + foreach ( $result as $item ) { + $tabPays[$item->codPays3] = $item->libPays; + } + } + + $tabAct = $tabPar = $tabDir = array(); + + try + { + require_once 'Metier/partenaires/classMLiens2.php'; + $liensM = new MLiens2($id); + + //Actionnaires + $liens = $liensM->getActionnaires(null, true); + if (count($liens)>0) { + foreach ( $liens as $item ) { + $detail = new Lien(); + $detail->id = $item->id; + $detail->idFiche = $item->idAct; + $detail->nom = $item->RS; + $detail->sigle = $item->sigle; + + $libPays = ''; + if ($item->adresse_pays!='') { + $libPays = array_key_exists($item->adresse_pays, $tabPays) ? + $tabPays[$item->adresse_pays] : $item->adresse_pays; + } else { + $libPays = $tabPays['FRA']; + } + $detail->pays = $libPays; + + if ($item->PpPm=='PP') { + $detail->nom = $item->civilite.' '.$item->nom.' '.$item->prenom; + } + $detail->siren = str_pad($item->siren, 9, "0", STR_PAD_LEFT); + $detail->PDetention = $item->PDetention; + $detail->Pvote = $item->Pvote; + $detail->MajMin = $item->MajMin; + + if ($item->dateUpdate=='0000-00-00 00:00:00'){ + $detail->date = substr($item->dateInsert,0,10); + } else { + $detail->date = substr($item->dateUpdate,0,10); + } + + $nbIdNum = 3; + $refs = array(); + $idM = new Application_Model_Sdv1TabIdLocal(); + for ($i=0;$i<$nbIdNum;$i++) { + if( !empty($item->{'idLoc'.$i.'Num'}) ) { + $ref = new LienRefId(); + $ref->num = $item->{'idLoc'.$i.'Num'}; + + if ( !empty($item->{'idLoc'.$i.'Type'}) ) { + $sql = $idM->select()->from($idM, array('idLocal', 'idPrincipal')) + ->where('id=?', $item->{'idLoc'.$i.'Type'}); + $result = $idM->fetchRow($sql); + if (null!==$result) { + $ref->label = $result->idLocal; + $ref->type = $result->idPrincipal; + } else { + $ref->label = ''; + $ref->type = 0; + } + } else { + $ref->label = 'Identifiant local'; + $ref->type = 1; + } + + $refs[] = $ref; + } + } + $detail->identification = $refs; + + $tabAct[] = $detail; + } + } + + //Participations + $liens = $liensM->getParticipations(null, true); + if (count($liens)>0) { + foreach ( $liens as $item ) { + $detail = new Lien(); + $detail->id = $item->id; + $detail->idFiche = $item->idPar; + $detail->nom = $item->RS; + $detail->sigle = $item->sigle; + + $libPays = ''; + if ($item->adresse_pays!='') { + $libPays = array_key_exists($item->adresse_pays, $tabPays) ? + $tabPays[$item->adresse_pays] : $item->adresse_pays; + } else { + $libPays = $tabPays['FRA']; + } + $detail->pays = $libPays; + + if ($item->PpPm=='PP') { + $detail->nom = $item->civilite.' '.$item->nom.' '.$item->prenom; + } + $detail->siren = str_pad($item->siren, 9, "0", STR_PAD_LEFT); + $detail->PDetention = $item->PDetention; + $detail->Pvote = $item->Pvote; + $detail->MajMin = $item->MajMin; + + if ($item->dateUpdate=='0000-00-00 00:00:00'){ + $detail->date = substr($item->dateInsert,0,10); + } else { + $detail->date = substr($item->dateUpdate,0,10); + } + + $nbIdNum = 3; + $refs = array(); + $idM = new Application_Model_Sdv1TabIdLocal(); + for ($i=0;$i<$nbIdNum;$i++) { + if( !empty($item->{'idLoc'.$i.'Num'}) ) { + $ref = new LienRefId(); + $ref->num = $item->{'idLoc'.$i.'Num'}; + + if ( !empty($item->{'idLoc'.$i.'Type'}) ) { + $sql = $idM->select()->from($idM, array('idLocal', 'idPrincipal')) + ->where('id=?', $item->{'idLoc'.$i.'Type'}); + $result = $idM->fetchRow($sql); + if (null!==$result) { + $ref->label = $result->idLocal; + $ref->type = $result->idPrincipal; + } else { + $ref->label = ''; + $ref->type = 0; + } + } else { + $ref->label = 'Identifiant local'; + $ref->type = 1; + } + + $refs[] = $ref; + } + } + $detail->identification = $refs; + + $tabPar[] = $detail; + } + } + + //Directions + $liens = $liensM->getDirections(true); + if (count($liens)>0) { + foreach ( $liens as $item ) { + $detail = new LienDirection(); + $detail->siren = $item->siren; + $detail->nom = $item->raisonSociale; + $detail->fonction = $item->fonction_lib; + $detail->dirRS = $item->dirRS; + + $nom = ''; + if (!empty($item->civilite)) { + $nom.= $item->civilite.'. '; + } + if (!empty($item->nom)) { + $nom.= $item->nom.' '; + } + if (!empty($item->prenom)) { + $nom.= $item->prenom; + } + $detail->dirNom = $nom; + $detail->dirNaissLieu = $item->naissance_lieu; + $detail->dirNaissDate = $item->naissance_date; + + $tabDir[] = $detail; + } + } + } catch(Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $output = new LiensReturn(); + $output->actionnaires = $tabAct; + $output->participations = $tabPar; + $output->directions = $tabDir; + + $this->wsLog('liens', '', $id); + + return $output; + } + + /** + * Fiche identite Référence lien + * @param int $id + * Identifiant interne SD + * @throws SoapFault + * @return LienRef + */ + public function getLienRef($id) + { + $this->authenticate(); + $this->permission('liens'); + + $refM = new Application_Model_JoLiensRef(); + + try { + $rows = $refM->find($id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + if ($rows->count()==0) { + throw new SoapFault('MSG', 'Aucun résultat'); + } + + $result = $rows->current()->toArray(); + + $output = new LienRef(); + $output->siren = $result['siren']; + $output->actif = $result['actif']; + $output->PpPm = $result['PpPm']; + $output->raisonSociale = $result['RS']; + $output->civilite = $result['civilite']; + $output->nom = $result['nom']; + $output->prenom = $result['prenom']; + $output->nomUsage = $result['nom_usage']; + $output->naissanceDate = $result['naissance_date']; + $output->naissanceDeptPays = $result['naissance_dept_pays']; + $output->naissanceLieu = $result['naissance_lieu']; + $output->nat = $result['nat']; + $output->isin = $result['isin']; + $output->adresseNum = $result['adresse_num']; + $output->adresseBtq = $result['adresse_btq']; + $output->adresseCodeVoie = $result['adresse_codvoie']; + $output->adresseLibVoie = $result['adresse_libvoie']; + $output->adressComp = $result['adresse_comp']; + $output->adresseCp = $result['adresse_cp']; + $output->adresseVille = $result['adresse_ville']; + + $output->capital = new stdClass(); + $output->capital->amount = $result['capital']; + $output->capital->currency = $result['devCapital']; + + //@todo : Utiliser le libellé du pays + $output->adressePays = $result['adresse_pays']; + + if ($result['dateUpdate']=='0000-00-00 00:00:00'){ + $output->date = substr($result['dateInsert'],0,10); + } else { + $output->date = substr($result['dateUpdate'],0,10); + } + + $refs = array(); + + $nbIdNum = 3; + $refs = array(); + $idM = new Application_Model_Sdv1TabIdLocal(); + for ($i=0;$i<$nbIdNum;$i++) { + if( !empty($result['idLoc'.$i.'Type']) ) { + $ref = new LienRefId(); + $ref->num = $result['idLoc'.$i.'Num']; + $sql = $idM->select()->from($idM, array('idLocal', 'idPrincipal')) + ->where('id=?', $result['idLoc'.$i.'Type']); + $result = $idM->fetchRow($sql); + if (null!==$result) { + $ref->label = $result->idLocal; + $ref->type = $result->idPrincipal; + } else { + $ref->label = ''; + $ref->type = 0; + } + + $refs[] = $ref; + } + } + $output->identification = $refs; + + $this->wsLog('liens', 0, $id); + + return $output; + } + + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, Néant=Tous + * @param integer $position + * @param integer $nbRep + * + * @return ListeEtablissementsReturn + */ + public function getListeEtablissements($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('etablissements'); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (!in_array($actif, array(0,1))) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + $departement = $dep; + + debugLog('I',"Liste des établissements demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + + $result = array(); + if (count($etabs)>0) { + foreach ($etabs as $nb => $etab) { + $etablissement = new Etablissement(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + $result[] = $etablissement; + } + } + debugLog('I', "Nb Etablissements retournés ($departement, $actif) = ". count($result), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('etablissements',$siren); + $output = new ListeEtablissementsReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } + + /** + * Retourne l'ensemble des informations identitaires des dirigeants de l'entreprise + * + * @param string $siren Siren de l'entreprise + * @param bool $histo Afficher l'historique des dirigeants + * @return DirigeantsReturn Liste des dirigeants actifs de l'entreprise + */ + public function getDirigeants( $siren , $histo = false) + { + $this->authenticate(); + $this->permission('dirigeants'); + + //Initialisation + if (empty($histo)) { $histo = false; } + + //Zend_Registry::get('WsLogger')->info('HISTO : '.$histo); + + debugLog('I',"Dirigeants demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeants($siren, $histo); + //debugLog('W', print_r($dirs, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $liste = array(); + foreach ($dirs as $nb => $dir) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $dirigeant = new Dirigeant(); + $dirigeant->Code = $dir['Fonction']; + $dirigeant->Titre = $dir['Titre']; + $dirigeant->Societe = $dir['Societe']; + $dirigeant->Siren = (array_key_exists('Siren', $dir) && intval($dir['Siren'])!=0) ? $dir['Siren'] : '' ; + $dirigeant->Civilite = $dir['Civilite']; + $dirigeant->Nom = $dir['Nom']; + $dirigeant->Prenom = $dir['Prenom']; + $dirigeant->NomUsage = $dir['NomUsage']; + $dirigeant->NaissDate = $dir['NaissDate']; //@todo : date + $dirigeant->NaissVille = $dir['NaissVille']; + $dirigeant->NaissDepPays = $dir['NaissDepPays']; + $dirigeant->Ancien = $dir['Ancien']; + $dirigeant->DateFct = $dir['DateFct']; //@todo : date + $liste[] = $dirigeant; + } + $this->wsLog('dirigeants',$siren,$option); + debugLog('I', 'Nb Dirigeants retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $output = new DirigeantsReturn(); + $output->result = $liste; + return $output; + } + + /** + * Retourne la liste des annonces légales relative à une entreprise + * + * @todo Revoir cette fonction pour la faire marcher avec les associations + * + * @param string $siren Siren de l'entreprise + * @param integer $filtre 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param integer $position + * @param integer $nbRep + * @return AnnoncesReturn + */ + protected function getAnnonces($siren, $filtre = 1, $idAnn = '', $position = 0, $nbRep = 100) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($filtre)) { $filtre = 1; } + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = array(); + + if (strlen($siren)!=9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + /* + if ($siren>100 && $filtre==3) $asso=true; + else { + $asso=false; + $tabIdentite=$this->iInsee->getIdentiteLight($siren); + if ($tabIdentite['FJ']>90 && $tabIdentite['FJ']<94 || + $tabIdentite['FJ']>9000 && $tabIdentite['FJ']<9400) $asso=true; + }*/ + + //@todo : Connaitre le nombre d'annonce + + /* + getAnnoncesBoamp => Avis de marché, Avis d'attribution + getAnnoncesAsso => Rien de particulier + getAnnoncesBalo => Rien de particulier + getAnnoncesLegales => Plusieurs requetes SQL suivant la situation + */ + + if ($idAnn=='') { + $anns=$iInsee->getAnnoncesLegales($siren); + $annsB=$iInsee->getAnnoncesBalo($siren); + $annsA=$iInsee->getAnnoncesAsso($siren); + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + } elseif ($filtre==1) { + $anns=$iInsee->getAnnoncesLegales($siren, $idAnn); + } elseif ($filtre==2) { + $annsB=$iInsee->getAnnoncesBalo($siren, $idAnn); + } elseif ($filtre==3) { + $annsA=$iInsee->getAnnoncesAsso($siren, $idAnn); + } elseif ($filtre==4) { + $annsM=$iInsee->getAnnoncesBoamp($siren, $idAnn); + } + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($anns) && empty($annsB) && empty($annsA) && empty($annsM)) + { + debugLog('W', "Aucune annonce pour le siren $siren (source=$filtre, id=$idAnn)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant B '.$siren.' '.$idAnn; + } + else + { + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = prepareString($ann['texteAnnonce']); + $annonce->libFJ = $ann['libFJ']; + $annonce->codFJ = $ann['codFJ']; + $annonce->capital = $ann['capital']; + $annonce->capitalDev = $ann['capitalDev']; + + $annonce->raisonSociale = $ann['raisonSociale']; + $annonce->nomCommercial = $ann['nomCommercial']; + $annonce->sigle = $ann['sigle']; + $annonce->adresse = $ann['adresse']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + + if (is_array($annsB)) + { + foreach ($annsB as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsA)) + { + foreach ($annsA as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + + if (is_array($annsM)) + { + foreach ($annsM as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + + $liste[] = $annonce; + } + } + } + + $nbReponses = count($liste); + if ($nbReponses>0){ + //$liste = array_slice($liste, $position, $nbRep); + } + debugLog('I', "Nb Annonces $filtre retournées pour $siren (source=$filtre, id=$idAnn) = ". count($liste), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('annonces',$siren,$filtre.'/'.$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Retourne le nombre d'élément pour chaque type + * @param string $siren + * @return AnnonceNum[] + */ + public function getAnnoncesNum($siren) + { + $this->authenticate(); + + $output = array(); + + if ( substr($siren,0,1)=='W' ) { + $iInsee = new MInsee(); + $nb = new AnnonceNum(); + $nb->type = 'asso'; + $nb->num = $iInsee->getAnnoncesAssoCount($siren); + $output[] = $nb; + } elseif (intval($siren)!=0) { + $types = array('bodacc', 'balo', 'boamp', 'asso'); + $iInsee = new MInsee(); + foreach ($types as $type) { + switch($type) { + case 'bodacc': + $anns = $iInsee->getAnnoncesLegales($siren); + $total = count($anns); + break; + case 'balo': + $total = $iInsee->getAnnoncesBaloCount($siren); + break; + case 'boamp': + $total = $iInsee->getAnnoncesBoampCount($siren); + break; + case 'asso': + $total = $iInsee->getAnnoncesAssoCount($siren); + break; + } + $nb = new AnnonceNum(); + $nb->type = $type; + $nb->num = $total; + $output[] = $nb; + } + } + return $output; + } + + /** + * Retourne les annonces légales + * @param string $siren + * @param string $idAnn + * @param AnnonceFilter[] $filtre + * @param int $position + * @param int $nbRep + * @return AnnoncesReturn + */ + public function getAnnoncesLegales($siren, $idAnn = null, $filtre = null, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($idAnn)) { $idAnn = null; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 100; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)!=9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && $idAnn=='') { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + + $isList = false; + + if ( is_null($idAnn) ) { + $anns = $iInsee->getAnnoncesLegales($siren, 0, '', false, false, true); + $nbReponses = count($anns); + $isList = true; + } else { + $anns = $iInsee->getAnnoncesLegales($siren, $idAnn, '', false, false, true); + $nbReponses = count($anns); + } + + $liste = array(); + $cpt = 0; + + if (is_array($anns)) + { + foreach ($anns as $nb => $ann) { + if ($isList===true && $nb<$position) { continue; } + $cpt++; + if ($isList===true && $cpt>$nbRep) { break; } + + //@todo : Entites + $entites = array(); + if (in_array($ann['BodaccCode'], array('BODA', 'BODB', 'BODC'))) { + $detailM = new Application_Model_JoBodaccDetail(); + $sql = $detailM->select()->from($detailM, array( + 'LPAD(siren, 9, 000000000) AS siren', + 'LPAD(nic, 5, 00000) AS nic', + 'raisonSociale','adresse', 'codePostal', 'ville', 'typeEven') + )->where('id=?', $ann['id']); + $result = $detailM->fetchAll($sql); + if (count($result)>1) { + foreach ($result as $entity) { + $entite = new AnnonceEntite(); + $entite->siret = $entity->siren.$entity->nic; + $entite->raisonSociale = $entity->raisonSociale; + + $iBodacc = new MBodacc(); + $even = new AnnonceEvenement(); + $even->CodeEven = $entity->typeEven; + $even->LibEven = $iBodacc->getEvenement($entity->typeEven); + + $entite->event = $even; + $entites[] = $entite; + } + } + } + + //List events + $evens = array(); + foreach ($ann['evenements'] as $tabEven) { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteAnnonce = $ann['texteAnnonce']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->entites = $entites; + $annonce->deleted = $ann['deleted']; + + $liste[] = $annonce; + } + } + + $this->wsLog('annonces',$siren,$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Retourne les annonces du journal officiel des associations + * @param string $siren + * @param string $idAnn + * @param AnnonceFilter[] $filtre + * @param int $position + * @param int $nbRep + * @return AnnoncesReturn + */ + public function getAnnoncesAsso($siren, $idAnn = null, $filtre = null, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($idAnn)) { $idAnn = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)!=9 && substr($siren,0,1)!='W') { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && is_null($idAnn)) { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + + $nbReponses = $iInsee->getAnnoncesAssoCount($siren, $idAnn); + $anns = $iInsee->getAnnoncesAsso($siren, $idAnn, $position, $nbRep); + + $liste = array(); + + if (is_array($anns)) + { + foreach ($anns as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + //@todo : date + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + $annonce->deleted = $ann['deleted']; + + $liste[] = $annonce; + } + } + + $this->wsLog('annonces',$siren,$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + protected function getAnnoncesBoampList($siren, $filtre = null, $position = 0, $nbRep = 20) + { + + } + + /** + * Retourne les annonces de marché public + * @param string $siren + * @param string $idAnn + * @param AnnonceFilter[] $filtre + * @param int $position + * @param int $nbRep + * @return AnnoncesReturn + */ + public function getAnnoncesBoamp($siren, $idAnn = null, $filtre = null, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($idAnn)) { $idAnn = ''; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + $type = array('A', 'M'); + + if (is_array($filtre->item) && count($filtre->item)>0) { + foreach($filtre->item as $item) { + if ( $item->key == 'type' ) { + $type = $item->value; + } + } + } + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && is_null($idAnn)) { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + if ( empty($idAnn) ) { + $nbReponses = $iInsee->getAnnoncesBoampCount($siren, $type); + $anns = $iInsee->getAnnoncesBoamp($siren, $idAnn, $type, $position, $nbRep); + } else { + $anns = $iInsee->getAnnoncesBoamp($siren, $idAnn, $type, 0, 1); + $nbReponses = count($anns); + } + + $liste = array(); + if (is_array($anns) && count($anns)>0) { + foreach ($anns as $nb=>$ann) { + $entites = array(); + + //Add acheteur + $identite = $iInsee->getIdentiteLight($siren); + $entite = new AnnonceEntite(); + $entite->siret = $identite['Siret']; + $entite->raisonSociale = $identite['Nom']; + $even = new AnnonceEvenement(); + //$even->CodeEven = ''; + $even->LibEven = 'Acheteur'; + $entite->event = $even; + $entites[] = $entite; + + //Search titulaire + $boamplotsM = new Application_Model_JoBoampLots(); + $sql = $boamplotsM->select()->from($boamplotsM, array( + 'LPAD(siren, 9, 000000000) AS siren', + 'LPAD(nic, 5, 00000) AS nic', 'nom','adresse','cp', 'ville', 'pays') + )->where('idAnn=?', substr($ann['id'],2)); + + $result = $boamplotsM->fetchAll($sql); + + if (count($result)>0) { + foreach ($result as $entity) { + $entite = new AnnonceEntite(); + $entite->siret = $entity->siren.$entity->nic; + $entite->raisonSociale = $entity->nom; + + $even = new AnnonceEvenement(); + //$even->CodeEven = ''; + $even->LibEven = 'Attributaire'; + $entite->event = $even; + $entites[] = $entite; + } + } + + //Events + $evens = array(); + foreach ($ann['evenements'] as $tabEven) { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + //$annonce->TribunalCode = $ann['TribunalCode']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = $ann['texteAnnonce']; + //$annonce->libFJ = $ann['libFJ']; + //$annonce->codFJ = $ann['codFJ']; + //$annonce->capital = $ann['capital']; + //$annonce->capitalDev = $ann['capitalDev']; + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->entites = $entites; + $annonce->deleted = $ann['deleted']; + + $liste[] = $annonce; + } + } + + $this->wsLog('annonces',$siren,$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + + } + + /** + * Retourne les annonces du bulletins des annonces légales obligatoires + * @param string $siren + * @param string $idAnn + * @param AnnonceFilter[] $filtre + * @param int $position + * @param int $nbRep + * @return AnnoncesReturn + */ + public function getAnnoncesBalo($siren, $idAnn = null, $filtre = null, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('annonces'); + + //Initialisation + if (empty($idAnn)) { $idAnn = null; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + //Valeur max + if($nbRep > 200) { $nbRep = 200; } + + debugLog('I',"Annonces demandées pour $siren ($filtre, $idAnn)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)<>9) { + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif (intval($siren)==0 && is_null($idAnn)) { + debugLog('W', "Siren $siren ou annonce $idAnn inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + + if ( is_null($idAnn) ) { + $nbReponses = $iInsee->getAnnoncesBaloCount($siren); + $anns = $iInsee->getAnnoncesBalo($siren, $idAnn, $position, $nbRep); + } else { + $anns = $iInsee->getAnnoncesBalo($siren, $idAnn, 0, 1); + $nbReponses = count($anns); + } + + $liste = array(); + if (is_array($anns) && count($anns)>0) + { + foreach ($anns as $nb=>$ann) + { + $evens = array(); + foreach ($ann['evenements'] as $tabEven) + { + $even = new AnnonceEvenement(); + $even->CodeEven = $tabEven['CodeEven']; + $even->LibEven = $tabEven['LibEven']; + $evens[] = $even; + } + $annonce = new Annonce(); + $annonce->id = $ann['id']; + $annonce->BodaccCode = $ann['BodaccCode']; + $annonce->BodaccNum = $ann['BodaccNum']; + $annonce->NumAnnonce = $ann['NumAnnonce']; + $annonce->DateParution = $ann['DateParution']; //@todo : date + $annonce->Departement = $ann['Departement']; + $annonce->Tribunal = $ann['Tribunal']; + $annonce->TribunalSiret = $ann['TribunalSiret']; + $annonce->Rubrique = $ann['Rubrique']; + $annonce->typeAnnonce = $ann['typeAnnonce']; + $annonce->texteRectificatif = prepareString($ann['texteRectificatif']); + $annonce->texteAnnonce = utf8_encode($ann['texteAnnonce']); + $annonce->dateEffet = $ann['dateEffet']; //@todo : date + $annonce->dateJugement = $ann['dateJugement']; //@todo : date + $annonce->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $annonce->evenements = $evens; + $annonce->Lien_Annonce_Pdf = $ann['Lien_Annonce_Pdf']; + $annonce->deleted = $ann['deleted']; + + $liste[] = $annonce; + } + } + + $this->wsLog('annonces',$siren,$idAnn); + + $output = new AnnoncesReturn(); + $output->nbReponses = $nbReponses; + $output->result = $liste; + return $output; + } + + /** + * Evaluation indiScore d'une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic Nic de l'établissement + * @param integer $niveau Niveau des commentaires (Suivant droits d'accès 1=INDISCORE, 2=INDISCORE2, 3=INDISCORE3) + * @param bool $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence de la mise en Surveillance + * @param integer $encours Si $plus=true, encours client demandé lors de la mise en Surveillance + * @param string $email Si $plus=true, email client pour la mise en surveillance + * @return Indiscore + */ + public function getIndiScore($siren, $nic=0, $niveau=2, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + + //Initialisation + $accesDist = true; + if (empty($nic)) { $nic = 0; } + if (empty($niveau)) { $niveau = 2; } + if (empty($plus)) { $plus = false; } + if ( !in_array($niveau, array(0,1,2,3,4,5)) ) { $niveau = 2; } + $perm = false; + //@todo : Gestion des droits + switch($niveau){ + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + case 2: $perms = array('indiscore2', 'indiscore2p', 'indiscore3', 'indiscore3p'); break; + case 1: $perms = array('indiscore', 'indiscorep'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + } + + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesDist, $niveau, false, 'scores'); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new Indiscore(); + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $output->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $output->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $output->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $output->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $output->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $output->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + if (count($value)>0) { + foreach($value as $comment) { + $tab[] = Scores_Locale_String::fixEncoding($comment); + } + } + $output->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + if (count($tab)>0) { + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $output->tabVariables = $variables; + + } elseif ($key=='Bilans') { + + $tab = array(); + foreach($value as $item) + { + $objet = new IndiscoreBilans(); + $objet->Millesime = $item['Millesime']; + $objet->FraisPerso = $item['FraisPerso']; + $objet->CA = $item['CA']; + $objet->EBE = $item['EBE']; + $objet->TxInvest = $item['TxInvest']; + $objet->TxEndett = $item['TxEndett']; + $objet->DettesCT = $item['DettesCT']; + $objet->FraisFi = $item['FraisFi']; + $objet->BFR = $item['BFR']; + $objet->FR = $item['FR']; + $objet->FondsPr = $item['FondsPr']; + $objet->DelaiCli = $item['DelaiCli']; + $objet->DelaiFour = $item['DelaiFour']; + $tab[] = $objet; + } + $output->$key = $tab; + } else { + $output->$key = $value; + } + } + + if ($plus) { + if (empty($ref)) $ref='Indiscore+'; + if (empty($email)) $email=$this->User->email; + $this->setSurveillance($siren, $email, $ref, 'privileges'); + $this->setSurveillance($siren, $email, $ref, 'score', false, $encours); + if ($this->User->idClient==89) + $this->setSurveillance($siren, $email, $ref, 'annonces'); + $this->wsLog('indiscore+',$siren); + } else + $this->wsLog('indiscore',$siren); + return $output; + } + + /** + * Evaluation valorsation d'une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic Nic de l'établissement + * @param integer $niveau Niveau des commentaires + * @return Valo + */ + public function getValo($siren, $nic=0, $niveau=2) + { + $this->authenticate(); + $this->permission('VALORISATION'); + + //Initialisation + $accesPartenaire = true; + if (APPLICATION_ENV == 'development') { + $accesPartenaire = false; + } + if (empty($nic)) { + $nic = 0; + } + $niveau = 2; + + $tabRet = array(); + debugLog('I',"IndiScore demandée pour $siren en niveau $niveau",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $tDeb = microtime(true); + require_once 'Metier/scores/classMScores.php'; + $tabRet = calculIndiScore($siren, $nic, $accesPartenaire, $niveau, false, 'valo'); + $duree = round(microtime(true)-$tDeb,3); + debugLog('W', "indiscore DUREE = $duree s", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $ouput = new Valo(); + + $Indiscore = new Indiscore(); + + foreach($tabRet as $key => $value){ + if ($key=='paiements'){ + $parMont = $value['parMont']; + $parTrim = $value['parTrim']; + $tabMont = array(); + foreach($parMont as $parMontK => $parMontV){ + $paiementMont = new IndiscorePaiementDetail(); + $paiementMont->id = $parMontK; + $paiementMont->nb = $parMontV['nb']; + if (array_key_exists('d=180', $parMontV)){ + $paiementMont->d180 = $parMontV['d=180']; + } + if (array_key_exists('d=150', $parMontV)){ + $paiementMont->d150 = $parMontV['d=150']; + } + if (array_key_exists('d=120', $parMontV)){ + $paiementMont->d120 = $parMontV['d=120']; + } + if (array_key_exists('d=90', $parMontV)){ + $paiementMont->d90 = $parMontV['d=90']; + } + if (array_key_exists('d=60', $parMontV)){ + $paiementMont->d60 = $parMontV['d=60']; + } + if (array_key_exists('d=30', $parMontV)){ + $paiementMont->d30 = $parMontV['d=30']; + } + $tabMont[] = $paiementMont; + } + $tabTrim = array(); + foreach($parTrim as $parTrimK => $parTrimV){ + $paiementTrim = new IndiscorePaiementDetail(); + $paiementTrim->id = $parTrimK; + $paiementTrim->nb = $parTrimV['nb']; + if (array_key_exists('d=180', $parTrimV)){ + $paiementTrim->d180 = $parTrimV['d=180']; + } + if (array_key_exists('d=150', $parTrimV)){ + $paiementTrim->d150 = $parTrimV['d=150']; + } + if (array_key_exists('d=120', $parTrimV)){ + $paiementTrim->d120 = $parTrimV['d=120']; + } + if (array_key_exists('d=90', $parTrimV)){ + $paiementTrim->d90 = $parTrimV['d=90']; + } + if (array_key_exists('d=60', $parTrimV)){ + $paiementTrim->d60 = $parTrimV['d=60']; + } + if (array_key_exists('d=30', $parTrimV)){ + $paiementTrim->d30 = $parTrimV['d=30']; + } + $tabTrim[] = $paiementTrim; + } + $paiement = new IndiscorePaiement(); + $paiement->parMont = $tabMont; + $paiement->parTrim = $tabTrim; + $Indiscore->paiements = $paiement; + + } elseif ($key=='Notes_Structure') { + + $notesStructure = new IndiscoreNotesStructure(); + $notesStructure->activite = $value['activite']; + $notesStructure->naf4 = $value['naf4']; + $notesStructure->age = $value['age']; + $notesStructure->capital = $value['capital']; + $notesStructure->effectif = $value['effectif']; + $notesStructure->fj = $value['fj']; + $notesStructure->localite = $value['localite']; + $notesStructure->singulier = $value['singulier']; + $Indiscore->Notes_Structure = $notesStructure; + + } elseif ($key=='tabBilans') { + + $tabRet = array(); + foreach($value as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + $Indiscore->tabBilans = $tabRet; + + } elseif ($key=='tabBilan') { + + $tabRet = array(); + foreach($value as $bilan){ + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($bilan as $bilan_key => $bilan_value){ + if(!in_array($bilan_key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $bilan_key; + $resultPoste->val = $bilan_value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$bilan_key = $bilan_value; + } + } + $resultBilan->POSTES = $tabPoste; + $tabRet[] = $resultBilan; + } + $Indiscore->tabBilan = $tabRet; + + } elseif ($key=='tabInfosNotations') { + + $infosNotation = new IndiscoreInfosNotations(); + $infosNotation->SituationFinanciere = $value['SituationFinanciere']; + $infosNotation->Notation = $value['Notation']; + $infosNotation->ProbabiliteDefaut = $value['ProbabiliteDefaut']; + $Indiscore->tabInfosNotations = $infosNotation; + + } elseif ($key=='tabImportExport') { + + $tabRet = array(); + foreach($value as $element){ + $importExport = new IndiscoreImportExport(); + $importExport->importExport = $element['importExport']; + $importExport->annee = $element['annee']; + $importExport->rangNational = $element['rangNational']; + $importExport->deptSiege = $element['deptSiege']; + $tabRet[] = $importExport; + } + $Indiscore->tabImportExport = $tabRet; + + } elseif ($key=='tabCommentaires') { + + $tab = array(); + foreach($value as $comment) { + $tab[] = Scores_Locale_String::fixEncoding($comment); + } + $Indiscore->tabCommentaires = $tab; + + } elseif ($key=='tabVariables') { + + $tab = $value['CA_Y']; + $tabVar = array(); + if (count($tab)>0) { + foreach($tab as $varName => $varVal){ + $var = new CA_Y(); + $var->id = $varName; + $var->val = $varVal; + $tabVar[] = $var; + } + } + $variables = new IndiscoreVariables(); + $variables->CA_Y = $tabVar; + $Indiscore->tabVariables = $variables; + + } elseif ($key=='Bilans') { + + $tab = array(); + foreach($value as $item) + { + $objet = new IndiscoreBilans(); + $objet->Millesime = $item['Millesime']; + $objet->FraisPerso = $item['FraisPerso']; + $objet->CA = $item['CA']; + $objet->EBE = $item['EBE']; + $objet->TxInvest = $item['TxInvest']; + $objet->TxEndett = $item['TxEndett']; + $objet->DettesCT = $item['DettesCT']; + $objet->FraisFi = $item['FraisFi']; + $objet->BFR = $item['BFR']; + $objet->FR = $item['FR']; + $objet->FondsPr = $item['FondsPr']; + $objet->DelaiCli = $item['DelaiCli']; + $objet->DelaiFour = $item['DelaiFour']; + $tab[] = $objet; + } + $Indiscore->$key = $tab; + } else { + $Indiscore->$key = $value; + } + } + + $output->Indiscore = $Indiscore; + + //Tableau d'infos sur les formules + $tabFormules = include APPLICATION_PATH . '/../library/Metier/scores/Data/Formules.php'; + $tabBorneMin = $tabBorneMax = array(); + foreach ($tabFormules as $formule) { + $id = $formule['id']*1; + $libelle = $formule['libelle']; + $unite = $formule['unite']; + $commentaires = $formule['commentaires']; + $tabFormulesInfos[$id] = $formule; //Pour la gestion des unités des ratios secteur + $ratiosInfos = new RatiosInfos(); + $ratiosInfos->id = 'r'.$id; + $ratiosInfos->libelle = $formule['libelle']; + $ratiosInfos->unite = $formule['unite']; + $ratiosInfos->commentaires = $formule['commentaires']; + $tabRatiosInfos[] = $ratiosInfos; + $tabBorneMin[$id] = $formule['borneMin']; + $tabBorneMax[$id] = $formule['borneMax']; + } + + //Ratios + global $tva, $mBil, $efftr, $tabInfla; + require_once 'Metier/scores/classMRatios.php'; + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans($accesPartenaire); + $nbBilans = count($tabBilans); + $tabBilan = $tabBil = array(); + if ($nbBilans>0) + { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false); + debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $naf = $tabIdentite['NafEnt']; + $nafLib = $tabIdentite['NafEntLib']; + $efftr = $tabIdentite['Effectif']*1; + $fj = $tabIdentite['FJ']; + $i = 0; + foreach ($tabBilans as $millesime => $item) { + if ($i > 4) { + break; + } + if ( $item['typeBilan'] == 'N' ) { + $tabBilan[] = $mBil->getBilan(substr($millesime,-10), substr($millesime,0,1), ''); + $i++; + } elseif ( $item['typeBilan'] == 'S' ) { + $tabN = $mBil->getBilan(substr($millesime,-10), substr($millesime,0,1), ''); + $tabS = $mBil->bilanSimplifie2Normal($tabN); + $tabBilan[] = array_merge($tabN, $tabS); + $i++; + } + } + $mRatios = new MRatios(); + $mRatios->setTrancheEffectif($efftr); + $tabRatios = $mRatios->calcul($tabBilan); + } + + $nbRatios = count($tabRatios); + debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabAnnees = array(); + if ( $nbRatios > 0 ) { + foreach ( $tabRatios as $i=>$R ) { + //Informations sur le bilan + $bilansInfos = new RatiosBilansInfos(); + $bilansInfos->dateCloture = $tabBilan[$i]['DATE_CLOTURE']; //@todo : date + $bilansInfos->duree = $tabBilan[$i]['DUREE_MOIS']; + $bilansInfos->devise = $tabBilan[$i]['MONNAIE']; + $bilansInfos->typeBilan = $tabBilan[$i]['CONSOLIDE']; + $bilansInfos->unite = 'U'; + if ( substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900 ){ + $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); + } + + $tabRatiosEntrep = array(); + $tabRatiosEntrepEvol = array(); + foreach ( $R as $Ridx=>$Rmont ) { + if ($Rmont<>'NS') { + if ( $tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx] ){ + $Rmont='<'.$tabBorneMin[$Ridx]; + } elseif ( $tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx] ){ + $Rmont='>'.$tabBorneMax[$Ridx]; + } + } + + // RatiosEntrep + $ratiosEntrep = new Ratios(); + if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>'){ + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = $Rmont; + } else { + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = round($Rmont,2); + } + $tabRatiosEntrep[] = $ratiosEntrep; + + if ( ( $tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1]) && ($tabBilan[$i+1]['CONSOLIDE']=='S' + || ($tabBilan[$i+1]['CONSOLIDE']=='N' && $tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']) ) ) + || ( $tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N' + || ($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])) ) + ) { + $Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]); + } + elseif ( ( $tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1]) && ($tabBilan[$i+2]['CONSOLIDE']=='S' + || ($tabBilan[$i+2]['CONSOLIDE']=='N' && $tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])) ) + || ( $tabBilan[$i]['CONSOLIDE']=='N' && isset($tabRatios[$i+1]) && ($tabBilan[$i+2]['CONSOLIDE']=='N' + || ($tabBilan[$i+2]['CONSOLIDE']=='S'&& $tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])) ) + ) { + $Rmont = (($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]); + } else { + $Rmont = 'NS'; + } + + // RatiosEntrepEvol + $ratiosEntrepEvol = new Ratios(); + if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800){ + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = 'NS'; + } else { + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = number_format($Rmont,2,',',' '); + } + $tabRatiosEntrepEvol[] = $ratiosEntrepEvol; + } + $bilansInfos->RatiosEntrep = $tabRatiosEntrep; + $bilansInfos->RatiosEntrepEvol = $tabRatiosEntrepEvol; + $tabBilansR[] = $bilansInfos; + } + } + debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + // Tableau des ratios secteurs + if (strlen($naf)>4) $strNaf = " AND naf5='$naf' "; + else $strNaf = " AND naf4='$naf' "; + $strAnnees = implode(',', $tabAnnees); + + $tabRatiosSecteurs = array(); + + $tabAnnees = array_unique($tabAnnees); + + if ( count($tabAnnees)>0 ) { + $iDb = new WDB('jo'); + $tabTmp = $iDb->select('ratios_secteurs', + 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', + "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", + false, MYSQL_ASSOC); + + $nbRatiosSec = 0; + foreach($tabAnnees as $annee) { + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $annee; + foreach ($tabTmp as $tmp) + { + if ($tmp['annee']== $annee) + { + $Ridx = $tmp['id']; + if ($tmp['nombre']>$nbRatiosSec){ + $nbRatiosSec = $tmp['nombre']; + } + + $unite = $tabFormulesInfos[$Ridx]['unite']; + if ($unite=='EUR'){ + $montant = round($tmp['ratio']*1000); + } else { + $montant = round($tmp['ratio']); + } + if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]){ + $montant='<'.$tabBorneMin[$Ridx]; + } elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]){ + $montant='>'.$tabBorneMax[$Ridx]; + } + + $ratiosSecteurListe = new Ratios(); + if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>'){ + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = $montant; + } else { + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = round($montant,2); + } + $ratiosSecteur->liste[] = $ratiosSecteurListe; + } + } + $tabRatiosSecteurs[] = $ratiosSecteur; + } + } + + $output->RatiosBilansInfos = $tabBilansR; + $output->RatiosInfos = $tabRatiosInfos; + $output->RatiosSecteur = $tabRatiosSecteurs; + + $this->wsLog('valorisation',$siren); + return $output; + } + + /** + * Liste de tous les évènements enregistrés à l'INSEE pour une entreprise + * @param string $siren Siren de l'entreprise + * @param string $nic Nic de l'entreprise (Si définit filtre les événéments à l'établissements) + * @param integer $position + * @param integer $nbRep + * @return InseeReturn + **/ + public function getListeEvenements($siren, $nic=0, $position=0, $nbRep=50) + { + $this->authenticate(); + $this->permission('eveninsee'); + + //Initialisation + if (empty($nic)) { $nic = 0; } + if (empty($position)) { $position = 0; } + if (empty($nbRep) || $nbRep>50) { $nbRep = 50; } + + $tabRet = array(); + if (strlen($siren)<>9) { + $this->sendError('1010'); + } elseif ($siren*1==0) { + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $nbReponses = $iInsee->getEvenementsCount($siren, $nic); + $output = new InseeReturn(); + $output->nbReponses = $nbReponses; + if ( $nbReponses > 0 ) { + $evens = $iInsee->getEvenements($siren, $nic, $position, $nbRep); + $tabRet = array(); + if (count($evens)>0) { + foreach ($evens as $nb=>$even) { + $iEven = new InseeEven(); + $iEven->Nic = $even['nic']; + $iEven->Siege = $even['siege']; + $iEven->SiretAss = $even['siretAssocie']; + $iEven->TypeSiretAss = $even['typeSiretAss']; + $iEven->EvenCode = $even['codeEven']; + $iEven->EvenLib = $even['libEven']; + $iEven->EvenLibDet = $even['libEvenDet']; + $iEven->EvenDate = $even['dateEven']; + $iEven->DateInfo = $even['dateMAJ']; + $tabRet[] = $iEven; + } + } + $output->result = $tabRet; + } + + $this->wsLog('evenements',$siren); + return $output; + } + + + /** + * Recherche + * @param EntrepriseCriteres $criteres + * @param integer $position Position de parcours des résultats retournées (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut) + * @param integer $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut) + * @param boolean $avecSiren Seulement les entités sirénées (false par défaut) + * @return SearchEntrepriseReturn + */ + public function searchEntreprise($criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false) + { + $this->authenticate(); + + if (empty($position)) { $position = 0;} + if (empty($nbRep)) { $nbRep = 20; } + if (empty($maxRep)) { $maxRep = 200; } + + $entCriteres = new EntrepriseCriteres(); + $entCriteres = $criteres; + $identifiant = $entCriteres->identifiant; + $typeId = ''; + + //Detection autour de l'identifiant + if ($identifiant!='') { + $len = strlen($identifiant); + //Numéro WALDEC + if (strtoupper(substr($identifiant,0,1))=='W') { + $typeId = 'W'; + //Code ISIN + } elseif ($len==12){ + $typeId = 'I'; + //TVA Intracommunautaire + } elseif (in_array(substr($identifiant,0,2), + array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES', + 'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL', + 'PT','RO','SE','SI','SK'))){ + //"La recherche par numéro de TVA n'est pas encore possible sur ce pays !"; + //Pour la france + } elseif (substr($identifiant,0,2)=='FR') { + $typeId = 'S'; + if ($len==13) $identifiant = substr($identifiant,4,9); + else $identifiant = ''; + //Numéro RC + } elseif (preg_match('/A|B|C|D/i', $identifiant)) { + $typeId = 'R'; + //Siren normal on enleve tout ce qui n'est pas un chiffre + } else { + $typeId = 'S'; + } + } + + $adresse = trim($entCriteres->adresse); + + //Détection Tel/Fax uniquement + if ( empty($typeId) + && empty($entCriteres->raisonSociale) + && empty($adresse) + && empty($entCriteres->codePostal) + && empty($entCriteres->ville) + && empty($entCriteres->naf) ){ + $typeId = 'TEL'; + } + + if (in_array($typeId, array('R', 'W', 'I'))){ + + $O = $this->searchAutreId( + $typeId, + $identifiant, + $entCriteres->codePostal, + $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } elseif ($typeId == 'S'){ + + $O = $this->searchSiren( + $identifiant, + $entCriteres->codePostal, + $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + $output->info = $O->info; + return $output; + + } elseif ($typeId == 'TEL'){ + + $O = $this->searchTelFax( + $entCriteres->telFax, + $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + + } else { + + $O = $this->searchNomAdr( + Scores_Locale_String::cleanstring($entCriteres->raisonSociale), + Scores_Locale_String::cleanstring($entCriteres->adresse), + $entCriteres->codePostal, + Scores_Locale_String::cleanstring($entCriteres->ville), + empty($entCriteres->siege) ? false : $entCriteres->siege, + $entCriteres->actif, + empty($position) ? 0 : $position, + empty($nbRep) ? 20 : $nbRep, + empty($maxRep) ? 200 : $maxRep, + empty($pertinence) ? false : $pertinence, + empty($avecSiren) ? false : $avecSiren, + $entCriteres->naf, + $entCriteres->fj + ); + + $output = new SearchEntrepriseReturn(); + $output->nbReponses = $O->nbReponses; + $output->nbReponsesTotal = $O->nbReponsesTotal; + $output->result = $O->result; + return $output; + } + } + + /** + * Recherche d'entreprise par dirigeants + * @param DirigeantCriteres $criteres + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchDirReturn + */ + public function searchDir($criteres, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + $nom = $criteres->nom; + $prenom = $criteres->prenom; + $dateNaiss = $criteres->dateNaiss; + $lieuNaiss = $criteres->lieuNaiss; + $pertinence = $criteres->pertinence; + + debugLog('I',"Recherche Dirigeant de $nom, $prenom, $dateNaiss, $lieuNaiss (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($prenom)) $prenom = ''; + if (empty($dateNaiss)) $dateNaiss = ''; + if (empty($lieuNaiss)) $lieuNaiss = ''; + if (empty($pertinence)) $pertinence = false; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheDir($nom, $prenom, '', $dateNaiss, $lieuNaiss, $deb, $nbRep, $maxRep, $pertinence); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $item = new EntrepriseDirItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Pays = $etab['Pays']; + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + + // Dirigeant + $item->DirRs = prepareString($etab['DirRs']); + $item->DirNom = prepareString($etab['DirNom']); + $item->DirPrenom = prepareString($etab['DirPrenom']); + $item->DirNomUsage = prepareString($etab['DirNomUsage']); + $item->DirDateEffet = $etab['DirDateEffet']; + $item->DirFonction = prepareString($etab['DirFonction']); + $item->DirDepart = $etab['DirDepart']; + $tabRet[] = $item; + } + + if ($etabs['nbReponses']==0){ + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + $search = new SearchDirReturn(); + $search->nbReponses = $etabs['nbReponses']; + $search->nbReponsesTotal = $etabs['nbReponsesTotal']; + $search->result = $tabRet; + return $search; + } + + /** + * Recherche d'entreprise ou d'établissement par un autre Identifiant + * + * @param string $typeId I=Code Isin, W=N°Waldec (Associations) ou R=N°RC (Registre Greffe) + * @param string $identifiant Identifiant recherché + * @param integer $dep Département + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchAutreId($typeId, $identifiant, $dep=0, $actif=2, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (empty($dep)) $dep = 0; + if (!in_array($actif, array(0,1,2))) $actif = 2; + + $typeId = substr(trim(strtoupper($typeId)),0,1); + + if ($typeId!='I' && $typeId!='W' && $typeId!='R') { + debugLog('I',"Type d'identifiant $typeId inexistant",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1021'); + } + $tabRet = array(); + debugLog('I',"Recherche par identifiant $typeId de $identifiantavec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if ($typeId=='W' || $typeId=='R') + { + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('AUTRE', $identifiant, $deb, $nbRep, $maxRep, $dep, $actif); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Source = $etab['Source']; + $item->SourceId = $etab['SourceId']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Pays = $etab['Pays']; + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } else { + $iBourse = new MBourse($siren); + $siren = $iBourse->getCodeSiren($identifiant); + return $this->searchSiren($siren, $dep, $actif, $deb, $nbRep, $maxRep); + } + } + + + /** + * Recherche d'entreprise ou d'établissement par leur TEL FAX + * + * @param string $telFax Téléphone ou fax de l'établissement (ex: 0175438010) + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchTelFax($telFax, $actif=2, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 0; + if (empty($maxRep)) $maxRep = 0; + if (!in_array($actif, array(0,1,2))) $actif = 2; + + $tabRet = array(); + debugLog('I',"Recherche par Tel/Fax de $telFax avec un maximum de $nbRep réponses",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //$assocs=$this->iInsee->rechercheEtab($raisonSociale, $adresse, $codePostal, $ville, $siege, $nbRep, $pertinence); + /** @todo A FAIRE **/ + if (strlen($telFax)<10 || strlen($telFax)>14) { + debugLog('W', "Tel/Fax $telFax incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1011'); + } + + $iInsee = new MInsee(); + $rep = $iInsee->getEtablissementsParId('TEL', $telFax, $deb, $nbRep, $maxRep, 0, $actif); + $etabs = $rep['reponses']; + foreach ($etabs as $nb=>$etab) + { + $pays = 'France'; + if ( $etab['adr_dep']==99 ) { + $resultPays = $this->iDb->select("tabPays", "libPays", "codePaysInsee = ".$etab['adr_com'], false, MYSQL_ASSOC); + $pays = $resultPays[0]['libPays']; + } + + $item = new EntrepriseItem(); + $item->id = $etab['id']; + $item->Pertinence = $etab['Pertinence']; + $item->Siret = $etab['Siret']; + $item->Siege = $etab['Siege']; + $item->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $item->Nom2 = prepareString($etab['Nom2']); + $item->Sigle = prepareString($etab['Sigle']); + $item->Enseigne = prepareString($etab['Enseigne']); + $item->Adresse = prepareString($etab['Adresse']); + $item->Adresse2 = prepareString($etab['Adresse2']); + $item->CP = $etab['CP']; + $item->Ville = prepareString($etab['Ville']); + $item->Pays = $etab['Pays']; + $item->Tel = $etab['Tel']; + $item->Fax = $etab['Fax']; + $item->FJ = $etab['FJ']; + $item->FJLib = prepareString($etab['FJLib']); + $item->Siren = $etab['Siren']; + $item->Nic = $etab['Nic']; + $item->Actif = $etab['Actif']; + $item->NafEtab = $etab['NafEtab']; // Etablissement + $item->NafEtabLib = prepareString($etab['NafEtabLib']); // Etablissement + $item->NafEnt = $etab['NafEnt']; // Entreprise + $item->NafEntLib = prepareString($etab['NafEntLib']); + $tabRet[] = $item; + } + + $output = new SearchReturn(); + $output->nbReponses = $rep['nbReponses']; + $output->nbReponsesTotal = $rep['nbReponsesTotal']; + $output->result = $tabRet; + return $output; + } + + + /** + * Recherche entreprise par nom et adresse + * @param string $raisonSociale Raison Sociale ou Enseigne ou Sigle + * @param string $adresse Adresse de l'entreprise, du type : 3 rue des Plantes + * @param string $codePostal Code postal (ex: 75014) + * @param string $ville Ville + * @param boolean $siege Limitation de la recherche aux sièges (si true) + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (si true) + * @param boolean $avecSiren Ne proposer que les entités sirénées + * @param string $ape_etab + * @param integer $fj Code Forme juridique + * @return SearchReturn + */ + public function searchNomAdr($raisonSociale, $adresse='', $codePostal='', $ville='', $siege=false, $actif=2, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $avecSiren=false, $ape_etab='', $fj=null) + { + $this->authenticate(); + + debugLog('I',"Recherche Entreprise de $raisonSociale, $adresse, $codePostal $ville (Siège=$siege / Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($adresse)) $adresse = ''; + if (empty($codePostal)) $codePostal = ''; + if (empty($ville)) $ville = ''; + if (empty($siege)) $siege = false; + if (!in_array($actif, array(0,1,2))) $actif = 2; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + if (empty($avecSiren)) $avecSiren = false; + if (empty($ape_etab)) $ape_etab = ''; + if (!preg_match('/[0-9]{4}/',$fj)) $fj = null; + + $iInsee = new MInsee(); + $etabs = $iInsee->rechercheEtab( + $raisonSociale, + $adresse, + $codePostal, + $ville, + $siege, + $actif, + $deb, + $nbRep, + $maxRep, + $pertinence, + $avecSiren, + $ape_etab, + $fj + ); + + $result = new SearchReturn(); + $tabRet = array(); + if (count($etabs['reponses'])) { + foreach ($etabs['reponses'] as $etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Source = $etab['Source']; + $reponse->SourceId = $etab['SourceId']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = strtr($etab['Nom'],'/*',' '); + $reponse->Nom2 = $etab['Nom2']; + $reponse->Sigle = $etab['Sigle']; + $reponse->Enseigne = $etab['Enseigne']; + $reponse->Adresse = $etab['Adresse']; + $reponse->Adresse2 = $etab['Adresse2']; + $reponse->CP = $etab['CP']; + $reponse->Ville = $etab['Ville']; + $reponse->Pays = $etab['Pays']; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $iInsee->getLibelleFJ($etab['FJ']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + + $tabRet[] = $reponse; + } + } + + $siretTrouve = 0; + if ($etabs['nbReponses']==0) { + + debugLog('I', "rechercheEtab : AUCUN RESULTAT, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = count($tabRet); + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + + return $result; + } + + if ($etabs['nbReponses']==1) $siretTrouve=$etabs['reponses'][0]['Siret']; + debugLog('I', "rechercheEtab : ".$etabs['nbReponses']." RESULTATS, S=$raisonSociale, R=$adresse, L=$codePostal, V=$ville, A=$ape_etab ($siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $result->nbReponses = $etabs['nbReponses']; + $result->nbReponsesTotal = $etabs['nbReponsesTotal']; + $result->result = $tabRet; + return $result; + } + + /** + * Recherche d'entreprise ou d'établissement par leur identifiant SIREN ou SIRET + * @param string $siret Siren ou Siret de l'entreprise ou de l'établissement sur 9 ou 14 chiffres significatifs + * @param integer $dep Département + * @param integer $actif 0 : Filtre sur les inactfis, 1: Filtre sur les actifs, 2 : Tous (defaut) + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @return SearchReturn + */ + public function searchSiren($siret, $dep=0, $actif=2, $deb=0, $nbRep=20, $maxRep=200) + { + $this->authenticate(); + + debugLog('I',"Recherche par Siret de $siret (dep=$dep) avec un maximum de $maxRep réponses pour la tranche $deb à $nbRep",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ( strlen($siret)!=14 && strlen($siret)!=9 ){ + debugLog('W', "Siren/Siret $siret incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($dep)) $dep = 0; + if (empty($siege)) $siege = null; + + if (!in_array($actif, array(0,1,2))) $actif = 2; + if ( $actif==2 ) $actif = -1; + + $nbReponsesTotal = $nbReponses = 0; + + $siren = substr($siret,0,9); + if (strlen($siret)==14) $nic = substr($siret,9,5); + elseif (strlen($siret)== 9) $nic = ''; + + $iInsee = new MInsee(); + + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, $dep, $actif, $siege); + if ( count($rep['reponses'])==0 && $dep>0 ) { + $rep = $iInsee->getEtablissements($siren, $nic, $deb, $nbRep, $maxRep, 0, $actif, $siege); + } + $etabs = $rep['reponses']; + $tabRet = array(); + if (count($etabs)>0){ + foreach ($etabs as $nb=>$etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Source = $etab['Source']; + $reponse->SourceId = $etab['sourceId']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Pays = prepareString($etab['Pays']); + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = prepareString($etab['FJLib']); + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; // Etablissement + $reponse->NafEtabLib = $etab['NafEtabLib']; // Etablissement + $reponse->NafEnt = $etab['NafEnt']; // Entreprise + $reponse->NafEntLib = $etab['NafEntLib']; + $tabRet[] = $reponse; + } + } + $nbReponsesTotal = $rep['nbReponsesTotal']; + $nbReponses = $rep['nbReponses']; + + /** Si le siren est valide, on part chez Infogreffe **/ + if (count($tabRet)==0 && $iInsee->valideSiren($siren)) { + $iGeffes = new MGreffes(); + $etab = $iGeffes->getIdentite($siren); + if ($etab) { + $reponse = new EntrepriseItem(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Siret = $etab['Siret']; + $reponse->Siege = $etab['Siege']; + $reponse->Nom = prepareString($etab['Nom']); + $reponse->Nom2 = prepareString($etab['Nom2']); + $reponse->Sigle = prepareString($etab['Sigle']); + $reponse->Enseigne = prepareString($etab['Enseigne']); + $reponse->Adresse = prepareString($etab['Adresse']); + $reponse->Adresse2 = prepareString($etab['Adresse2']); + $reponse->CP = $etab['CP']; + $reponse->Ville = prepareString($etab['Ville']); + $reponse->Pays = 'France'; + $reponse->Tel = $etab['Tel']; + $reponse->Fax = $etab['Fax']; + $reponse->FJ = $etab['FJ']; + $reponse->FJLib = $etab['FJLib']; + $reponse->Siren = $etab['Siren']; + $reponse->Nic = $etab['Nic']; + $reponse->Actif = $etab['Actif']; + $reponse->NafEtab = $etab['NafEtab']; + $reponse->NafEtabLib = $etab['NafEtabLib']; + $reponse->NafEnt = $etab['NafEnt']; + $reponse->NafEntLib = $etab['NafEntLib']; + + $tabRet[] = $reponse; + $nbReponses = 1; + $nbReponsesTotal = 1; + + } else { + $iDb = new WDB(); + $iDb->insert('siren_inexistants', + array( 'siren'=>$siren, + 'nic'=>$nic, + 'dep'=>$dep, + 'login'=>$this->User->login, + 'client'=>$this->User->idClient, + 'dateInsert'=>date('YmdHis'))); + $nbReponses = 0; + $nbReponsesTotal = 0; + } + } + + $output = new SearchReturn(); + $output->nbReponses = $nbReponses; + $output->nbReponsesTotal = $nbReponsesTotal; + $output->result = $tabRet; + $output->info = $rep['info']; + return $output; + } + + + + + /** + * Retourne la fiche d'identité simplifié d'une entreprise avec son numéro de TVA. + * + * @param string $siren Identifiant Siren de l'entreprise + * @return TvaReturn + */ + public function getTVA($siren) + { + $this->authenticate(); + + //Initialisation + $siren = trim($siren); + debugLog('I',"TVA demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I', "Avant getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteEntreprise($siren); + debugLog('I', "Après getIdentiteEntreprise($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($entrep)) + { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1020'); + } + + debugLog('I', "Avant MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $iTva = new MTva($siren); + if ($iTva->vatDefined) $tva=$iTva->vatNumber; + else $tva='N/A'; + debugLog('I', "Après MTva($siren)", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + + $output = new TvaReturn(); + $output->id = $entrep['id']; + $output->AutreId = $entrep['AutreId']; + $output->Nom = $entrep['Nom']; + $output->Sigle = $entrep['Sigle']; + $output->Enseigne = $entrep['Enseigne']; + $output->Adresse = $entrep['Adresse']; + $output->Adresse2 = $entrep['Adresse2']; + $output->CP = $entrep['CP']; + $output->Ville = $entrep['Ville']; + $output->Siren = $entrep['Siren']; + $output->Tva = $tva; + + debugLog('I', "TVA retournée = $tva (".$entrep['Nom'].')', __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('tva',$siren); + + return $output; + } + + /** + * Retourne tout ou patie des informations règlementées sur l'entreprise + * + * @param string $siren SIREN de l'entreprise + * @param integer $id Id du communiqué + * @return InfosRegReturn + */ + public function getInfosReg( $siren, $id = null ) + { + $this->authenticate(); + $this->permission('infosreg'); + + //Initialisation + if (empty($id)) $id = null; + $tabRet = array(); + $siren = substr($siren,0,9); + + debugLog('I',"Infos règlementées demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + $iBourse = new MBourse($siren); + $anns = $iBourse->getInfosReg($siren, $id); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ( empty($anns) ){ + debugLog('W', "Aucune info règlementée pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + foreach ($anns as $nb=>$ann) + { + //debugLog('I', "Siren/Siret $siren trouvé : ".$etab['Siren'].' '.$etab['Nic'].', '.$etab['Nom'] .', '.$etab['CP'].', '.$etab['Ville'], __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if ($id === null) { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } else { + $infos = new InfosReg(); + $infos->id = $ann['id']; + $infos->source = $ann['source']; + $infos->DateParution = $ann['DateParution']; //@todo : date + $infos->raisonSociale = $ann['raisonSociale']; + $infos->titre = $ann['titre']; + $infos->communique = $ann['communique']; + $infos->communiqueHtml = $ann['communiqueHtml']; + $infos->pj = $ann['pj']; + $infos->url = $ann['url']; + $infos->dateInsertionSD = $ann['dateInsertionSD']; //@todo : date + $tabRet[] = $infos; + } + } + debugLog('I', 'Nb infos retournés = '. count($anns), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('infosreg',$siren,$id); + $output = new InfosRegReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les informations boursières de l'entreprise + * @param string $siren SIREN de l'entreprise + * @return InfosBourse + */ + public function getInfosBourse($siren) + { + $this->authenticate(); + $this->permission('bourse'); + + //Initialisation + $error = new ErrorType(); + debugLog('I',"Infos bourse demandées pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $siren = substr($siren,0,9); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iBourse = new MBourse($siren); + $bourse = $iBourse->getInfosBourse($siren); + //debugLog('W', print_r($entrep, true), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + if (empty($bourse)) { + debugLog('W', "Aucune info bourse pour le siren $siren", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1030'); + } + + $result = new InfosBourse(); + $result->Siren = $bourse['siren']; + $result->RaisonSociale = $bourse['raisonSociale']; + $result->Adresse = $bourse['adresse']; + $result->Effectif = $bourse['effectif']; + $result->CodeSicovam = $bourse['code_sicovam']; + $result->CodeMnemo = $bourse['code_mnemo']; + $result->CodeBloomberg = $bourse['code_bloomberg']; + $result->CodeDatastream = $bourse['code_datastream']; + $result->Isin = $bourse['code_isin']; + $result->CodeRic = $bourse['code_ric']; + $result->DateIntroduction = $bourse['dateIntroduction']; //@todo : date + $result->DateDerAG = $bourse['dateDerAG']; //@todo : date + $result->DateRadiation = $bourse['dateRadiation']; //@todo : date + $result->AutreIsin = $bourse['autre_isin']; + $result->EligibleSRD = $bourse['eligibleSRD']; + $result->EligiblePEA = $bourse['eligiblePEA']; + $result->Tel = $bourse['tel1']; + $result->Tel2 = $bourse['tel2']; + $result->Fax = $bourse['fax1']; + $result->Fax2 = $bourse['fax2']; + $result->Web = $bourse['web']; + $result->Mail = $bourse['mail']; + + $result->Marche = $bourse['marche']; + $result->Description = $bourse['description']; + $result->Secteur = $bourse['secteur']; + $result->Activite = $bourse['activite']; + $result->ActiviteDet = $bourse['activiteDet']; + + $result->placeCotation = $bourse['placeCotation']; + $result->nombreTitres = $bourse['nombreTitres']; + $result->capitalisation = $bourse['close']*$bourse['nombreTitres']; + $result->derCoursDate = $bourse['date']; //@todo : date + $result->derCoursCloture = $bourse['close']; + $result->derCoursOuverture = $bourse['open']; + $result->derCoursPlusHaut = $bourse['high']; + $result->derCoursPlusBas = $bourse['low']; + + $result->derCoursVolume = $bourse['volume']; + $result->coursMin = $bourse['coursMin']; + $result->coursMoy = $bourse['coursMoy']; + $result->coursMax = $bourse['coursMax']; + + $this->wsLog('bourse',$siren,$id); + return $result; + } + + /** + * Ajout d'une surveillance + * + * @param string $siret Siret/Siren + * @param string $email Adresse email du client + * @param string $ref Référence de la surveillance + * @param string $source Type de source en surveillance (insee, annonces, bilans, actes, privileges, score, dirigeants, paiements, liens) + * @param boolean $delete Suppression de la ligne + * @param integer $encoursClient Encours demandé par le client + * @return SetSurveillanceReturn + */ + public function setSurveillance($siret, $email, $ref='', $source='annonces', $delete=false, $encoursClient=0) + { + $this->authenticate(); + $source = strtolower($source); + switch ($source) { + case 'insee': + $this->permission('survinsee'); + break; + case 'bilans': + $this->permission('survbilan'); + break; + case 'actes': + $this->permission('survactes'); + break; + case 'privileges': + $this->permission('survpriv'); + break; + case 'dirigeants': + $this->permission('survdirigeants'); + break; + case 'score': + $this->permission('survscore'); + break; + case 'paiements': + $this->permission('survpaiements'); + break; + case 'liens': + $this->permission('survliens'); + break; + case 'annonces': + default: + $this->permission('survannonce'); + break; + } + + //Initialisation + if (empty($ref)) $ref = ''; + if (empty($delete)) $delete = false; + if (empty($encoursClient)) $encoursClient = false; + $result = false; + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + if (empty($nic)) { + $nic = '00000'; + } + + debugLog('I',"setSurveillances(siret=$siret, email=$email, ref=$ref, source=$source, delete=$delete)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iDb = new WDB(); + $login = $this->User->login; + switch ($source) { + case 'insee': + case 'annonces': + case 'bilans': + case 'actes': + case 'privileges': + case 'paiements': + case 'liens': + case 'dirigeants': $encoursClient=0; break; + case 'score': $encoursClient=$encoursClient*1; break; + default: $source='annonces'; break; + } + + /** + * Suppression de la surveillance + * @todo : Déplacer dans la table de mouvement + */ + if ($delete) { + + $tabUpdate = array('dateSuppr'=>date('Y-m-d')); + $result = $iDb->update('surveillances_site', + $tabUpdate, + "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'" + ); + + } else { + + /** + * Calcul d'initialisation du score lors d'un ajout + */ + if ( $source == 'score' ) { + $survM = new Application_Model_JoScoresSurveillance(); + $item = $survM->find($siren); + if ( $item === null ) { + require_once 'Metier/scores/classMScores.php'; + calculIndiScore($siren, 0, false, 0); + } + } + + $where = "source='$source' AND login='$login' AND email='$email' AND siren=$siren AND nic=$nic AND ref='$ref'"; + $detect = $iDb->select('surveillances_site', 'siren', $where, false, MYSQL_ASSOC); + + if ( count($detect)>0 ) { + + //Si la donnée existe déjà et que la source=score alors il faut mettre à jour l'encours client + if ($source == 'score' && $detect[0]['dateSuppr']=='0000-00-00 00:00:00') { + + $data = array ( + 'encoursClient' => $encoursClient, + ); + $result = $iDb->update('surveillances_site', $data, $where, false, 0, true); + + } elseif ( $detect[0]['dateSuppr']!='0000-00-00 00:00:00') { + + $data = array ( + 'dateAjout' => date('Y-m-d'), + 'dateSuppr' => '0000-00-00 00:00:00', + ); + $result = $iDb->update('surveillances_site', $data, $where, false, 0, true); + + } + + } else { + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic); + + $data = array( + 'source' => $source, + 'login' => $login, + 'email' => $email, + 'siren' => $siren, + 'nic' => $nic, + 'ref' => $ref, + 'encoursClient' => $encoursClient, + 'rs' => $tabIdentite['Nom'], + 'cp' => $tabIdentite['CP'], + 'ville' => $tabIdentite['Ville'], + 'dateAjout'=>date('Y-m-d'), + 'dateSuppr'=>0, + ); + $result = $iDb->insert('surveillances_site', $data, false, true); + } + } + $output = new SetSurveillanceReturn(); + $output->result = $result; + return $output; + } + + /** + * getSurveillances + * @param SurveillancesFiltre $filtre + * @param integer $deb + * @param integer $nbRep + * @return SurveillancesReturn + */ + public function getSurveillances($filtre, $position=0, $nbRep=100) + { + $this->authenticate(); + //$this->permission('survliste'); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 100; + + $error = new ErrorType(); + $tabRet = array(); + $siren = 0; + $login = $this->User->login; + + $strSiren = ""; + if (!empty($filtre->item) && $filtre->itemMode == 'siren'){ + $siren = substr($filtre->item,0,9); + $nic = substr($filtre->item,9,5); + $strSiren = " AND siren='$siren'"; + } elseif (!empty($filtre->item) && $filtre->itemMode == 'search') { + $identifiant = trim($filtre->item); + if (preg_match('/([0-9]{9})|([0-9]{3}\s[0-9]{3}\s[0-9]{3})/',$identifiant, $matches)){ + $identifiant = str_replace(' ', '', $identifiant); + $strSiren = " AND ( siren='$identifiant' )"; + } else { + $strSiren = " AND ( ref='$filtre->item' OR rs='$filtre->item' )"; + } + } + + //Ordre pour le tri + $triMode = strtoupper(trim($filtre->triMode)); + if ($triMode == 'DESC') { + $triMode = 'DESC'; + } else { + $triMode = 'ASC'; + } + + //Option de tri + $tri = strtolower(trim($filtre->tri)); + switch ($tri) { + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi': $orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + $orderBy = $orderBy.' '.$triMode; + + if ($filtre->detail) { + $strSelect = 'source, email, siren, nic, ref, dateAjout, encoursClient, rs, cp, ville, dateDerEnvoi'; + } else { + $strSelect = 'source, email, siren, nic, ref, dateAjout, dateDerEnvoi'; + } + if ($filtre->source!='') $strSource = " AND source='$filtre->source' "; + else $strSource = ''; + + $iDb = new WDB(); + + if ($filtre->source!='') { + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select( + 'surveillances_site', + 'count(*) as nb', "login='$login' AND dateSuppr=0 $strSiren $strSource", + false, MYSQL_ASSOC + ); + $nbRepTot = $tabTmp[0]['nb']; + + // Récupération des résultats + $tabTmp = $iDb->select( + 'surveillances_site', $strSelect, + "login='$login' AND dateSuppr=0 $strSiren $strSource $orderBy LIMIT $position,$nbRep", + false, MYSQL_ASSOC + ); + + } else { + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select( + 'surveillances_site', + 'siren', "login='$login' AND dateSuppr=0 $strSiren GROUP BY siren", + false, MYSQL_ASSOC + ); + $nbRepTot = count($tabTmp); + + // Récupération des résultats + if ($nbRepTot>0){ + $tabTmp = $iDb->select( + 'surveillances_site', + 'siren', "login='$login' AND dateSuppr=0 $strSiren GROUP BY siren ORDER BY siren LIMIT $position,$nbRep", + false, MYSQL_ASSOC + ); + $listeSiren = array(); + foreach($tabTmp as $i => $v) { + $listeSiren[] = $v['siren']; + } + $tabTmp = $iDb->select( + 'surveillances_site', $strSelect, + "login='$login' AND dateSuppr=0 AND siren IN (".join(',',$listeSiren).") $strSiren ORDER BY siren", + false, MYSQL_ASSOC + ); + } + } + + if (count($tabTmp)>0) + { + //Tri pour avoir le nombre de réponse correct suivant la structure + $listeRetour = array(); + foreach ($tabTmp as $i => $tabSurv) + { + $rs = ''; + $cp = ''; + $ville = ''; + $encoursClient = 0; + if ($filtre->detail) { + $encoursClient = $tabSurv['encoursClient']; + if (trim($tabSurv['rs'])<>'') { + $rs = $tabSurv['rs']; + $cp = $tabSurv['cp']; + $ville = $tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs = $tabIdentite['Nom']; + $cp = $tabIdentite['CP']; + $ville = $tabIdentite['Ville']; + $iDb->update('surveillances_site', array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic']." $strSource", + false + ); + } + } + + $listeRetour[$tabSurv['siren']][] = array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville, + 'source' => $tabSurv['source'], + 'email' => $tabSurv['email'], + 'nic' => $tabSurv['nic'], + 'ref' => $tabSurv['ref'], + 'encoursClient' => $encoursClient, + 'dateAjout' => $tabSurv['dateAjout'], + 'dateDerEnvoi' => $tabSurv['dateDerEnvoi'], + ); + } + + foreach ($listeRetour as $siren => $item) + { + $liste = new Surveillance(); + $liste->siren = $siren; + foreach($item as $s) { + $source = new stdClass(); + $source->rs = $s['rs']; + $source->cp = $s['cp']; + $source->ville = $s['ville']; + $source->source = $s['source']; + $source->email = $s['email']; + $source->nic = $s['nic']; + $source->ref = $s['ref']; + $source->encoursClient = $s['encoursClient']; + $source->dateAjout = $s['dateAjout']; //@todo : date + $source->dateDerEnvoi = $s['dateDerEnvoi']; //@todo : date + $liste->sources[] = $source; + } + $tabRet[] = $liste; + } + } + $output = new SurveillancesReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Recherche par référence client + * @param string $search + * @param integer $position + * @param integer $nbRep + * @return SearchRefClientReturn + */ + public function searchRefClient($search, $position=0, $nbRep=20) + { + $this->authenticate(); + + //Initialisation + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 20; + + $iDb = new WDB(); + $login = $this->User->login; + $orderBy = " ORDER BY dateAjout ASC"; + + if ($this->User->rechRefType=='CLI'){ + //On cherche les logins actifs pour le client + $idClient = $this->User->idClient; + + $where = "u.idClient='$idClient' AND u.actif=1 AND s.dateSuppr=0 AND ( s.siren='$search' OR s.ref='$search' OR s.rs='$search' )"; + // Il faut compter le nombre au total + $tabTmp = $iDb->select('surveillances_site s, utilisateurs u', 'count(*) as nb', $where.$orderBy, false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + // Execution de la requete + $tabTmp = $iDb->select('surveillances_site s, utilisateurs u', + "siren, nic, ref, source, login, email, DATE_FORMAT(dateAjout, '%Y-%m-%d') as dateAjout, DATE_FORMAT(dateDerEnvoi, '%Y-%m-%d') as dateEnvoi", + $where.$orderBy." LIMIT $position,$nbRep", false, MYSQL_ASSOC); + } else { + $where = "login='$login' AND dateSuppr=0 AND ( siren='$search' OR ref='$search' OR rs='$search' )"; + // Il faut compter le nombre au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', $where.$orderBy, false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + // Execution de la requete + $tabTmp = $iDb->select('surveillances_site', + "siren, nic, ref, source, login, email, DATE_FORMAT(dateAjout, '%Y-%m-%d') as dateAjout, DATE_FORMAT(dateDerEnvoi, '%Y-%m-%d') as dateEnvoi", + $where.$orderBy." LIMIT $position,$nbRep", false, MYSQL_ASSOC); + } + + $tabRet = array(); + if (count($tabTmp)>0) + { + foreach ($tabTmp as $i => $item) + { + $info = new SearchRefClientInfo(); + $info->ref = $item['ref']; + $info->source = $item['source']; + $info->login = $item['login']; + $info->email = $item['email']; + $info->dateAjout = $item['dateAjout']; + $info->dateEnvoi = $item['dateEnvoi']; + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($item['siren'], $item['nic']); + + $reponse = new SearchRefClient(); + $reponse->id = $tabIdentite['id']; + $reponse->Siret = $tabIdentite['Siret']; + $reponse->Siege = $tabIdentite['Siege']; + $reponse->Nom = prepareString(strtr($tabIdentite['Nom'],'/*',' ')); + $reponse->Nom2 = prepareString($tabIdentite['Nom2']); + $reponse->Sigle = prepareString($tabIdentite['Sigle']); + $reponse->Enseigne = prepareString($tabIdentite['Enseigne']); + $reponse->Adresse = prepareString($tabIdentite['Adresse']); + $reponse->Adresse2 = prepareString($tabIdentite['Adresse2']); + $reponse->CP = $tabIdentite['CP']; + $reponse->Ville = prepareString($tabIdentite['Ville']); + $reponse->Tel = $tabIdentite['Tel']; + $reponse->Fax = $tabIdentite['Fax']; + $reponse->FJ = $tabIdentite['FJ']; + $reponse->FJLib = prepareString($tabIdentite['FJ_lib']); + $reponse->Siren = $tabIdentite['Siren']; + $reponse->Nic = $tabIdentite['Nic']; + $reponse->Actif = $tabIdentite['Actif']; + $reponse->NafEtab = $tabIdentite['NafEtab']; + $reponse->NafEtabLib = $tabIdentite['NafEtabLib']; + $reponse->NafEnt = $tabIdentite['NafEnt']; + $reponse->NafEntLib = $tabIdentite['NafEntLib']; + $reponse->Infos = $info; + $tabRet[] = $reponse; + } + } + $output = new SearchRefClientReturn(); + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne le bilan correspondant au siren, à l'exercice et au formalisme demandé + * + * @param string $siren Siren de l'entreprise + * @param string $millesime Date du bilan au format AAAAMMJJ + * @param string $typeBilan N:Réel Normal, S:Réel Simplifié, C:Consolidé + * @param string $ref Référence S&D obligatoire + * @return Bilan + */ + public function getBilan($siren, $millesime, $typeBilan='N', $ref='') + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + if (empty($typeBilan)) { $typeBilan = 'N'; } + if (empty($ref)) { $ref = ''; } + + debugLog('I',"Bilan $millesime $typeBilan demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $millesime = WDate::dateT('Ymd','d/m/Y',$millesime); + $mBil = new MBilans($siren); + $tabBilan = $mBil->getBilan($millesime, $typeBilan, $ref, true); + + $resultBilan = new Bilan(); + $tabPoste = array(); + foreach($tabBilan as $key => $value){ + if(!in_array($key, array('SIREN', 'DATE_FRAICHE_BILAN', + 'DATE_CLOTURE', 'DATE_CLOTURE_PRE', 'DUREE_MOIS', + 'DUREE_MOIS_PRE', 'MONNAIE', 'CONSOLIDE', 'MONNAIE_ORI', + 'MONNAIE_LIV_UNITE', 'SOURCE', 'devise'))){ + $resultPoste = new BilanPoste(); + $resultPoste->id = $key; + $resultPoste->val = $value; + $tabPoste[] = $resultPoste; + } else { + $resultBilan->$key = $value; + } + } + $this->wsLog('bilan',$siren, $millesime.':'.$typeBilan.':'.$ref); + $resultBilan->POSTES = $tabPoste; + return $resultBilan; + } + + /** + * Retourne la liste des bilans disponible pour une entreprise + * + * @param string $siren Siren de l'entreprise + * @return ListeBilansReturn + */ + public function getListeBilans($siren) + { + $this->authenticate(); + $this->permission('liasse'); + + //Initialisation + $tabRet = array(); + debugLog('I',"Liste des Bilans demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9) { + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans(true); + foreach($tabBilans as $bilan) + { + $element = new ListeBilans(); + $element->dateProvPartenaire = $bilan['dateProvPartenaire']; //@todo : date + $element->dateInsert = $bilan['dateInsert']; //@todo : date + $element->typeBilan = $bilan['typeBilan']; + $element->dureeExercice = $bilan['dureeExercice']; + $element->dateExercice = $bilan['dateExercice']; //@todo : date + $element->millesime = $bilan['millesime']; + $element->dateExercicePre = $bilan['dateExercicePre']; //@todo : date + $element->dureeExercicePre = $bilan['dureeExercicePre']; + $element->monnaie = $bilan['monnaie']; + $element->source = $bilan['source']; + $tabRet[] = $element; + } + + debugLog('I', 'Nb Bilans retournés = '. count($tabBilans), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->wsLog('listebilans', $siren); + $output = new ListeBilansReturn(); + $output->nbReponses = count($tabRet); + $output->result = $tabRet; + return $output; + } + + /** + * Informations date de cloture du dernier bilan et état de saisie + * + * @param string $siren + * @return LiasseInfos|null + */ + public function getLiasseInfos($siren) + { + $this->authenticate(); + //$this->permission('liasse'); + + //Check SIREN + + //Lecture de la base de données + try { + $bilansM = new Application_Model_JoGreffesBilans(); + $sql = $bilansM->select() + ->where('siren=?', $siren) + ->where('actif=1') + ->order('date_cloture DESC') + ->order('num_depot DESC') + ->order('dateInsert DESC') + ->limit(1); + $row = $bilansM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + if ( $row === null ) { + return null; + } + + $liasseInfos = new LiasseInfos(); + $liasseInfos->Id = $row->id; + $liasseInfos->BilanDateCloture = $row->date_cloture; + + switch ( $row->type_comptes ) { + case '': + case 'sociaux': + $liasseInfos->BilanType = 'N'; + break; + case 'consolides': + $liasseInfos->BilanType = 'C'; + break; + } + + $liasseInfos->SaisieDate = $row->saisie_date; + $liasseInfos->SaisieCode = $row->saisie_code; + switch ( $row->saisie_code ) { + case '00': $liasseInfos->SaisieLabel = "Bilan saisi sans anomalie"; break; + case '01': $liasseInfos->SaisieLabel = "Bilan saisi avec des incohérences comptables à la source du document (issues du remettant)"; break; + case '02': $liasseInfos->SaisieLabel = "Bilan avec Actif, Passif ou Compte de Résultat nul"; break; + case '03': $liasseInfos->SaisieLabel = "Bilan incomplet (des pages manquent)"; break; + case '04': $liasseInfos->SaisieLabel = "Bilan complet non détaillé (seuls les totaux et sous totaux sont renseignés)"; break; + case '05': $liasseInfos->SaisieLabel = "Bilan reçu en double exemplaire"; break; + case '06': $liasseInfos->SaisieLabel = "Bilan intermédiaire - Situation provisoire"; break; + case '07': $liasseInfos->SaisieLabel = "Bilan illisible"; break; + case 'A7': $liasseInfos->SaisieLabel = "Bilan illisible, présentant un cadre gris très foncés (dans lesquels sont inscrits en général les totaux)"; break; + case 'B7': $liasseInfos->SaisieLabel = "Bilan manuscrits"; break; + case 'C7': $liasseInfos->SaisieLabel = "Bilan illisible, présentant des caractères trop gras"; break; + case 'D7': $liasseInfos->SaisieLabel = "Bilan scanné en biais ou qui présentent des pages rognées"; break; + case 'E7': $liasseInfos->SaisieLabel = "Bilan numérisés trop clairement (comme une imprimante dont la cartouche est presque vide)"; break; + case 'F7': $liasseInfos->SaisieLabel = "Bilan illisible"; break; + case '08': $liasseInfos->SaisieLabel = "Bilan consolidé"; break; + case '09': $liasseInfos->SaisieLabel = "Déclaration d'impôts"; break; + case '10': $liasseInfos->SaisieLabel = "Document autre que bilan"; break; + case '11': $liasseInfos->SaisieLabel = "Bilan de clôture de liquidation"; break; + case '12': $liasseInfos->SaisieLabel = "Bilan de Société financière"; break; + case '13': $liasseInfos->SaisieLabel = "Bilan de Société d'assurance"; break; + case '14': $liasseInfos->SaisieLabel = "Bilan de Société immobilière"; break; + case '15': $liasseInfos->SaisieLabel = "Bilan de Société étrangère"; break; + default: $liasseInfos->SaisieLabel = ""; break; + } + + if ( $row->saisie_code != '00' ) { + //Surcharge des codes de saisie + $date = new Zend_Date($row->date_cloture, 'yyyy-MM-dd'); + try { + $liasseM = new Application_Model_JoBilans(); + $sql = $liasseM->select() + ->where('siren=?', $siren) + ->where('typeBilan=?', $liasseInfos->BilanType) + ->where('dateExercice=?', $date->toString('yyyyMMdd')); + $row = $liasseM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + //file_put_contents('debug.log', $e->getMessage()."\n", FILE_APPEND); + } + if ( $row !== null ) { + $liasseInfos->SaisieDate = substr($row->dateProvPartenaire,0,4) . + '-' . substr($row->dateProvPartenaire,4,2) . + '-' . substr($row->dateProvPartenaire,6,2); + $liasseInfos->SaisieCode = '00'; + } + } + + return $liasseInfos; + } + + /** + * Vérifie si un siren existe en base Scores & Décisions + * @param string $siren Siren de l'entité + * @return boolean + */ + public function isSirenExistant($siren) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $siren = trim(substr($siren,0,9)); + $result = false; + debugLog('I',"Siren existant demandée pour siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $entrep = $iInsee->sirenExiste($siren); + if (empty($entrep)) { + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = false; + } else { + debugLog('I', "Siren $siren présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + $this->wsLog('sirenExiste',$siren); + return $result; + } + + /** + * Retourne une annonce en fonction de sa référence + * + * @param string $siren Siren de l'entreprise + * @param string $dateAnnee + * @param integer $numParution + * @param integer $numAnnonce + * @return RechercheAnnonceReturn + */ + public function rechercheAnnonce($source, $dateAnnee, $numParution, $numAnnonce) + { + $this->authenticate(); + $this->permission('histobodacc'); + + //Initialisation + $tabRet = array(); + + debugLog('I',"Annonce précise demandée pour $source, $dateAnnee, $numParution, $numAnnonce",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($dateAnnee)==4) $annee = $dateAnnee; + else $annee = substr($dateAnnee,0,4); + + $iDb = new WDB('jo'); + + switch (strtoupper($source)) + { + case 'BODA': + case 'BODB': + case 'BODC': + $lettre = substr(strtoupper($source),3,1); + if ($annee<2005) { + if ($lettre=='A'){ $numJAL=1; } + elseif ($lettre=='B'){ $numJAL=200; } + else{ break; } + $anneeDeb = $annee.'0101'; + $anneeFin = $annee.'1231'; + $res = $iDb->select('historiques.entrep e, texte t', + "$annee AS Annee_Parution, e.NOBOD AS Num_Parution, e.NOANN AS Num_Annonce, e.NOPAGE AS Num_Page, e.`DATE` AS Date_Parution, e.DEPT AS Departement, e.CODTRI AS Tribunal_Code, 'I' AS typeAnnonce, CONCAT(e.NOANN,' - ',t.annonceTxt) AS annonce", + "e.JAL=$numJAL AND e.NOBOD=$numParution AND e.`DATE` BETWEEN $anneeDeb AND $anneeFin AND e.NOANN=$numAnnonce AND e.ANBASE=t.annonceNum", false, MYSQL_ASSOC); + } else { + $res = $iDb->select('bodacc', + 'Bodacc_Annee_Parution AS Annee_Parution, Bodacc_Num AS Num_Parution, Num_Annonce, Bodacc_Page AS Num_Page, Bodacc_Date_Parution AS Date_Parution, Tribunal_Dept AS Departement, Tribunal_Code, typeAnnonce, annonce', + "Bodacc_Code='$lettre' AND Bodacc_Annee_Parution=$annee AND Bodacc_Num=$numParution AND Num_Annonce=$numAnnonce", false, MYSQL_ASSOC); + } + break; + case 'ASSO': + $res = $iDb->select('asso', + 'YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Annonce, pageDeb AS Num_Page, Date_Parution, Departement, codTribunal AS Tribunal_Code, typeAnnonce, Annonce_Html AS annonce', "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$annee".sprintf('%04d', $numParution)." AND Num_Annonce=$numAnnonce", + false, MYSQL_ASSOC); + break; + case 'BALO': + $res = $iDb->select('balo', + "YEAR(Date_Parution) AS Annee_Parution, Num_Parution, Num_Affaire AS Num_Annonce, '' AS Num_Page, Date_Parution, '' AS Departement, '' AS Tribunal_Code, 'Insertion' AS typeAnnonce, Annonce_Html AS annonce", "Date_Parution BETWEEN '$annee-01-01' AND '$annee-12-31' AND Num_Parution=$numParution AND Num_Affaire=$numAnnonce", + false, MYSQL_ASSOC); + break; + } + + if (count($res)>0) + { + $iBodacc = new MBodacc(); + foreach ($res as $i => $etab) + { + $annonces = new AnnonceItem(); + $annonces->Annee_Parution = $etab['Annee_Parution']; + $annonces->Num_Parution = $etab['Num_Parution']; + $annonces->Num_Annonce = $etab['Num_Annonce']; + $annonces->Num_Page = $etab['Num_Page']; + $annonces->Date_Parution = $etab['Date_Parution']; //@todo : date + $annonces->Departement = $etab['Departement']; + $annonces->Tribunal_Code = $etab['Tribunal_Code']; + $annonces->Tribunal = $iBodacc->getTribunalNom($etab['Tribunal_Code']); + $annonces->Type_Annonce = $etab['typeAnnonce']; + $annonces->Annonce = strip_tags(strtr( + html_entity_decode($etab['annonce']), + array('>'=>'>','&'=>'&','<'=>'<','’'=>"'") + )); + + $tabRet[] = $annonces; + } + } + $nbTot = count($tabRet); + $output = new RechercheAnnonceReturn(); + $output->criteres = $criteres; + $output->nbReponses = $nbTot; + $output->nbReponsesTotal = $nbTot; + $output->result = $tabRet; + return $output; + } + + /** + * getRatios + * @param string $siren + * @param string $page + * @return RatiosReturn + */ + public function getRatios($siren, $page='ratios') + { + $this->authenticate(); + $this->permission('ratios'); + + //Initialisation + if (empty($page)) $page = 'ratios'; + + debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + if (strlen($siren)<>9){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } elseif ($siren*1==0) { + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false); + debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $naf = $tabIdentite['NafEnt']; + $nafLib = $tabIdentite['NafEntLib']; + $efftr = $tabIdentite['Effectif']*1; + $fj = $tabIdentite['FJ']; + + $accesPartenaire = true; + if (APPLICATION_ENV == 'development') { + $accesPartenaire = false; + } + + $tabRatiosInfos = $tabRatiosSecteurs = $tabBilansR = array(); + $tabRatios = $tabRatiosEvol = array(); + $tabRet = array(); + + /** + * Tableau d'infos sur les formules + */ + $tabFormules = include APPLICATION_PATH . '/../library/Metier/scores/Data/Formules.php'; + $tabBorneMin = $tabBorneMax = array(); + foreach ($tabFormules as $formule) { + $id = $formule['id']*1; + $libelle = $formule['libelle']; + $unite = $formule['unite']; + $commentaires = $formule['commentaires']; + $tabFormulesInfos[$id] = $formule; //Pour la gestion des unités des ratios secteur + $ratiosInfos = new RatiosInfos(); + $ratiosInfos->id = 'r'.$id; + $ratiosInfos->libelle = $formule['libelle']; + $ratiosInfos->unite = $formule['unite']; + $ratiosInfos->commentaires = $formule['commentaires']; + $tabRatiosInfos[] = $ratiosInfos; + $tabBorneMin[$id] = $formule['borneMin']; + $tabBorneMax[$id] = $formule['borneMax']; + } + + //Ratios + $mBil = new MBilans($siren); + $tabBilans = $mBil->listeBilans($accesPartenaire); + $nbBilans = count($tabBilans); + $tabBilan = $tabBil = array(); + if ($nbBilans > 0) { + $i = 0; + foreach ($tabBilans as $millesime => $item) { + if ( $item['typeBilan'] == 'N' ) { + $tabBilan[] = $mBil->getBilan(substr($millesime, -10), substr($millesime, 0, 1)); + $i++; + } elseif ( $item['typeBilan'] == 'S' ) { + $tabN = $mBil->getBilan(substr($millesime, -10), substr($millesime, 0, 1)); + $tabS = $mBil->bilanSimplifie2Normal($tabN); + $tabBilan[] = array_merge($tabN, $tabS); + $i++; + } elseif ( $item['typeBilan'] == 'C' ) { + $tabBilan[] = $mBil->getBilan(substr($millesime, -10), substr($millesime, 0, 1)); + $i++; + } + } + require_once 'Metier/scores/classMRatios.php'; + $mRatios = new MRatios(); + $mRatios->setTrancheEffectif($efftr); + $tabRatios = $mRatios->calcul($tabBilan); + //file_put_contents('debug.log', print_r($tabRatios,1)); + } + + $nbRatios = count($tabRatios); + debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabAnnees = array(); + if ( $nbRatios > 0 ) { + foreach ( $tabRatios as $i => $R ) { + //Informations sur le bilan + $bilansInfos = new RatiosBilansInfos(); + $bilansInfos->dateCloture = $tabBilan[$i]['DATE_CLOTURE']; //@todo : date + $bilansInfos->duree = $tabBilan[$i]['DUREE_MOIS']; + $bilansInfos->devise = $tabBilan[$i]['MONNAIE']; + $bilansInfos->typeBilan = $tabBilan[$i]['CONSOLIDE']; + $bilansInfos->unite = 'U'; + if ( substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900 ){ + $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); + } + + $tabRatiosEntrep = array(); + $tabRatiosEntrepEvol = array(); + foreach ( $R as $Ridx => $Rmont ) { + if ($Rmont<>'NS') { + if ( $tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx] ){ + $Rmont='<'.$tabBorneMin[$Ridx]; + } elseif ( $tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx] ){ + $Rmont='>'.$tabBorneMax[$Ridx]; + } + } + + // RatiosEntrep + $ratiosEntrep = new Ratios(); + if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>'){ + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = $Rmont; + } else { + $ratiosEntrep->id = 'r'.$Ridx; + $ratiosEntrep->val = round($Rmont,2); + } + $tabRatiosEntrep[] = $ratiosEntrep; + + if ( ( $tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1]) && ($tabBilan[$i+1]['CONSOLIDE']=='S' + || ($tabBilan[$i+1]['CONSOLIDE']=='N' && $tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE']) ) ) + || ( $tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N' + || ($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])) ) + ) { + $Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]); + } + elseif ( ( $tabBilan[$i]['CONSOLIDE']=='S' && isset($tabRatios[$i+1]) && ($tabBilan[$i+2]['CONSOLIDE']=='S' + || ($tabBilan[$i+2]['CONSOLIDE']=='N' && $tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])) ) + || ( $tabBilan[$i]['CONSOLIDE']=='N' && isset($tabRatios[$i+1]) && ($tabBilan[$i+2]['CONSOLIDE']=='N' + || ($tabBilan[$i+2]['CONSOLIDE']=='S'&& $tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])) ) + ) { + $Rmont = (($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]); + } else { + $Rmont = 'NS'; + } + + // RatiosEntrepEvol + $ratiosEntrepEvol = new Ratios(); + if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800){ + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = 'NS'; + } else { + $ratiosEntrepEvol->id = 'r'.$Ridx; + $ratiosEntrepEvol->val = number_format($Rmont,2,',',' '); + } + $tabRatiosEntrepEvol[] = $ratiosEntrepEvol; + } + $bilansInfos->RatiosEntrep = $tabRatiosEntrep; + $bilansInfos->RatiosEntrepEvol = $tabRatiosEntrepEvol; + $tabBilansR[] = $bilansInfos; + } + } + debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + // Tableau des ratios secteurs + if (strlen($naf)>4) $strNaf = " AND naf5='$naf' "; + else $strNaf = " AND naf4='$naf' "; + $strAnnees = implode(',', $tabAnnees); + + $tabRatiosSecteurs = array(); + + $tabAnnees = array_unique($tabAnnees); + + if ( count($tabAnnees)>0 ) { + $iDb = new WDB('jo'); + $tabTmp = $iDb->select('ratios_secteurs', + 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', + "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", + false, MYSQL_ASSOC); + + $nbRatiosSec = 0; + foreach($tabAnnees as $annee) { + $ratiosSecteur = new RatiosSecteur(); + $ratiosSecteur->annee = $annee; + foreach ($tabTmp as $tmp) + { + if ($tmp['annee']== $annee) + { + $Ridx = $tmp['id']; + if ($tmp['nombre']>$nbRatiosSec){ + $nbRatiosSec = $tmp['nombre']; + } + + $unite = $tabFormulesInfos[$Ridx]['unite']; + if ($unite=='EUR'){ + $montant = round($tmp['ratio']*1000); + } else { + $montant = round($tmp['ratio']); + } + if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]){ + $montant='<'.$tabBorneMin[$Ridx]; + } elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]){ + $montant='>'.$tabBorneMax[$Ridx]; + } + + $ratiosSecteurListe = new Ratios(); + if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>'){ + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = $montant; + } else { + $ratiosSecteurListe->id = 'r'.$Ridx; + $ratiosSecteurListe->val = round($montant,2); + } + $ratiosSecteur->liste[] = $ratiosSecteurListe; + } + } + $tabRatiosSecteurs[] = $ratiosSecteur; + } + } + + $output = new RatiosReturn(); + $output->Nom = $tabIdentite['Nom']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->FJ = $fj; + $output->FJ_lib = $tabIdentite['FJ_lib']; + $output->Siren = $siren; + $output->NbEntNaf = $nbRatiosSec; + $output->BilansInfos = $tabBilansR; + $output->RatiosInfos = $tabRatiosInfos; + $output->RatiosSecteur = $tabRatiosSecteurs; + + debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->wsLog($page, $siren); + return $output; + + } + + /** + * getRapport + * @param string $siren Siren de l'entreprise + * @param integer $niveau Niveau du rapport 1, 2 ou 3 + * @param integer $id Identifiant interne S&D de l'entreprise + * @param boolean $plus Si true, mise en surveillance privilèges + * @param string $ref Si $plus=true, référence facultative de la mise en Surveillance + * @param integer $encours Si $plus=true, encours facultatif Demandé par le client lors de la mise en Surveillance + * @param string $email Si $plus=true, email facultatif pour le suivi + * @return Rapport + */ + public function getRapport($siren, $niveau=3, $id=0, $plus=false, $ref='', $encours=0, $email='') + { + $this->authenticate(); + if (empty($niveau)) $niveau = 3; + if (empty($id)) $id = 0; + $result = new Rapport(); + $filtre = 0; + $idAnn = 0; + + //@todo : Gestion des droits + $perm = false; + switch($niveau){ + case 1: $perms = array('indiscore', 'indiscorep'); break; + case 2: $perms = array('indiscore2', 'indiscore2p'); break; + case 3: $perms = array('indiscore3', 'indiscore3p'); break; + } + foreach($perms as $item){ + if ( $this->checkPerm($item) ){ + $perm = true; + break; + } + } + if ($perm === false) { + $this->sendError('0902'); + } + + $accesDist=true; + $nivComment=2; + if ($niveau==1){ + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + } elseif ($niveau==2) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + } elseif ($niveau==3) { + $result->Identite = $this->getIdentite($siren, $id=0); + $result->Indiscore = $this->getIndiScore($siren, 0, $nivComment, $plus, $ref, $encours, $email); + $result->Dirigeants = $this->getDirigeants($siren, false); + $result->Liens = $this->getLiens($siren, true); + $result->Ratios = $this->getRatios($siren, $page="rapport$niveau"); + $result->Annonces = $this->getAnnonces($siren, $filtre, $idAnn); + } + return $result; + } + + /** + * Retourne la liste des banques connues pour une entreprise + * @param string $siren Siren de l'entreprise + * @return BanquesReturn + **/ + public function getBanques($siren) + { + $this->authenticate(); + $this->permission('banque'); + + //Initialisation + $iDb = new WDB('sdv1'); + $tabRet = array(); + debugLog('I',"Liste des banques demandée pour siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (intval($siren)<=1000) { + $this->sendError('1010'); + } + + $res=$iDb->select('banques', 'codeBanque, codeGuichet, libBanqueGuichet, precis, dateSource*1 AS dateSource', "siren=$siren", true, MYSQL_ASSOC); + $tmp=$iDb->select('fedRib', "codeBanque, codeGuichet, CONCAT(libBanque,' ',libGuichet) AS libBanqueGuichet, 0 AS precis, IF (dateInfo='0000-00-00', dateDispo*1, dateInfo*1) AS dateSource", "siren=$siren", true, MYSQL_ASSOC); + $res=array_merge($res, $tmp); + foreach ($res as $tabBanque) + { + $dateSource = $tabBanque['dateSource']; + $codBanque = $tabBanque['codeBanque']; + $codGuichet = $tabBanque['codeGuichet']; + $libBanque = trim($tabBanque['libBanqueGuichet']); + $found = false; + $adrBanque1=$adrBanque2=$adrBanqueCP=$adrBanqueVille=''; + + if ( $codBanque>0 && $codGuichet>0 ) { + $tmp = $iDb->select('insee.BDF_Etabs b, insee.BDF_Guichets g', + 'g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville', "g.bdfFibCodeEtab=$codBanque AND g.bdfFibCodeGuichet=$codGuichet AND b.bdfFibCodeEtab=g.bdfFibCodeEtab", + true, MYSQL_ASSOC); + if (count($tmp)>0) { + $found = true; + + $banque = new Banque(); + $banque->codeBanque = $codBanque; + $banque->codeGuichet = $codGuichet; + $banque->libBanque = trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $banque->adresse1 = $tmp[0]['adresse1']; + $banque->adresse2 = trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $banque->cp = $tmp[0]['CP']; + $banque->ville = $tmp[0]['Ville']; + $tabRet[] = $banque; + } + } + + if ($found===false && $codBanque>0 ) { + $tmp = $iDb->select('insee.BDF_Etabs', "bdfFibCodeEtab AS banque, '' AS guichet, bdfFibDenom40 AS nomBanque, '' AS nomGuichet, '' AS adresse1, '' AS adresse2, '' AS adresse3, '' AS CP, '' AS Ville", "bdfFibCodeEtab=$codBanque", true, MYSQL_ASSOC); + if (count($tmp)>0) { + $banque = new Banque(); + $banque->codeBanque = $codBanque; + $banque->codeGuichet = $codGuichet; + $banque->libBanque = trim($tmp[0]['nomBanque'].' '.$tmp[0]['nomGuichet']); + $banque->adresse1 = $tmp[0]['adresse1']; + $banque->adresse2 = trim($tmp[0]['adresse2'].' '.$tmp[0]['adresse3']); + $banque->cp = $tmp[0]['CP']; + $banque->ville = $tmp[0]['Ville']; + $tabRet[] = $banque; + } + } + + } + debugLog('I',"Liste des banques pour siren $siren : ".count($tabRet).' banques',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->wsLog('banque', $siren); + $output = new BanquesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des compétences territoriales pour un établissement à une adresse donnée. + * @param string $siret Siret de l'établissement + * @param string $type Type de compétence (pre:prefectures et s/prefectures, jal;journaux d'annonces légales, tri:tribunaux, adm:administrateurs et mandataires judiciaires, hui:huissiers, cfe:centres de formalités des entreprises) + * @param string $codeInsee Code Insee de la commune de l'établissement + * @return ListeCompetencesReturn + */ + public function getListeCompetences($siret, $type, $codeInsee) + { + $this->authenticate(); + $this->permission('competences'); + + //Initialisation + $error = new ErrorType(); + $type = strtolower($type); + + debugLog('I',"Liste des compétences $type demandée pour la commune $codeInsee",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabRet = array(); + $iBodacc = new MBodacc(); + $cp=$codeInsee*1; + $dep=false; + if (substr($codeInsee,0,2)=='2A' || substr($codeInsee,0,2)=='2B') + { + $dep=20; $cp=20000+(substr($codeInsee,2,3))*1; + } + elseif ($cp>0 && $cp<100) $dep=$cp; + elseif ($cp>970 && $cp<977) $dep=$cp; + elseif ($cp>999 && $cp<10000) $dep='0'.substr($cp,0,1); + elseif ($cp>=10000 && $cp<96000) $dep=substr($cp,0,2); + elseif ($cp>=99000) $dep=substr($cp,0,2); + elseif ($cp>=98000) $dep=substr($cp,0,3); + elseif ($cp>=97100 && $cp<97700) $dep=substr($cp,0,3); + + if ($type=='pre') { + + $iDb = new WDB('jo'); + $tabTmp2 = $iDb->select('villes', 'DEP, COM, AR, CT', 'codeInsee='.$codeInsee, false, MYSQL_ASSOC); + $arrond = $tabTmp2[0]['AR']; + + $tabTmp2 = $iDb->select('insee.insee_tabArrond', 'CHEFLIEU, ARTMAJ, NCC', "DEP='$dep' AND AR='$arrond'", false, MYSQL_ASSOC); + $nomSousPref = trim(strtr($tabTmp2[0]['ARTMAJ'],array('('=>'',')'=>'',' '=>'', "'"=>'')).' '.$tabTmp2[0]['NCC']); + + $tabTmp = $iBodacc->getTribunauxParDep($dep); + + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='A' || $tribunal['triType']=='B') + { + $pref = levenshtein($tribunal['triNom'], 'PREFECTURE DE '.$nomSousPref); + $spref = levenshtein($tribunal['triNom'], 'SOUS PREFECTURE DE '.$nomSousPref); + + if ($tribunal['triType']=='B' && ($pref>7 || $spref>5)) continue; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType'].$typeP; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper( + preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + $tabRet[] = $competence; + + } + } + + } elseif ($type=='jal') { + + $tabTmp = $iBodacc->getJALparDep($dep); + foreach ($tabTmp as $i=>$comp) + { + $infos=''; + if (trim($comp['parution'])<>'') $infos.='Parution '.$comp['parution'].'. '; + if (trim($comp['aboAnnuel'])>0) $infos.='Abonnement Annuel : '.$comp['aboAnnuel'].' euros. '; + if (trim($comp['infos'])<>'') $infos.=$comp['infos']; + + $competence = new Competence(); + $competence->Id = 9000+$comp['id']*1; + $competence->IdSup = 0; + $competence->Code = ''; + $competence->Type = ''; + $competence->Nom = strtoupper($comp['nomJal']); + $competence->Siret = ''; + $competence->Adr = strtoupper($comp['adresse']); + $competence->AdrComp = ''; + $competence->CP = $comp['cp']; + $competence->Ville = strtoupper($comp['ville']); + $competence->CodeInsee = ''; + $competence->Tel = $comp['tel']; + $competence->Fax = $comp['fax']; + $competence->Web = $comp['siteWeb']; + $competence->Mail = $comp['email']; + $competence->Statut = 'Actif'; + $competence->DateCessation = ''; + $competence->Remarque = trim($infos); + $tabRet[] = $competence; + } + + } elseif ($type=='tri' || $type=='adm' || $type=='hui') { + + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if (//$tribunal['triType']=='C' || + $tribunal['triType']=='G'// || + /*$tribunal['triType']=='I'*/) { + $idCA = $tribunal['triIdSup']; + $codeTGI = $tribunal['triCode']; + $code = strtoupper(substr($tribunal['triCode'],0,3)); + } + debugLog('D',"Liste des compétences $type demandée pour la commune $codeInsee ($dep) : ". + "Type=".$tribunal['triType'].', '. + "Code=".$tribunal[$codeTGI],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if ($tribunal['triType']<>'E' && $tribunal['triType']<>'O' && + $tribunal['triType']<>'T' && $tribunal['triType']<>'R' && + $tribunal['triType']<>'N' && $tribunal['triType']<>'U' && + $tribunal['triType']<>'Z') + { + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper(Scores_Locale_String::cleanstring($tribunal['triNom'])); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(Scores_Locale_String::cleanstring(preg_replace('/ +/',' ', + $tribunal['triAdrNum'].' '. + $tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '. + $tribunal['triAdrVoie']))); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $tribunal['triCommentaire']; + if ($tribunal['triNumGreffe']*1>0) + { + $competence->IdentifiantGreffe = $tribunal['triNumGreffe']; + } + $tabRet[] = $competence; + } + } + } + + if ($type=='adm') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getMandataires(array($idCA), false); + $tabRet = array(); + $nbAff=0; + foreach ($tabTmp as $i=>$tribunal) + { /** @todo A revoir Debut **/ + if (stripos($tribunal['tribunal'], $code)!==false || + stripos($tribunal['tribunal'], 'SAINT')!==false) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + $nbAff++; + } + } + if ($nbAff==0) + { + foreach ($tabTmp as $i=>$tribunal) + { + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($tribunal['adresse']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $tribunal['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation'], + $competence->Remarque = $tribunal['contact']; + //,,,,Prenom,,,Statut,,,cp,ville,tel,fax,email,web,contact + $tabRet[] = $competence; + } + }/** @todo A revoir Fin : Lier correctement les mandataires à un TI principal **/ + } + elseif ($type=='hui') + { + $iInsee = new MInsee(); + $tabTmp = $iInsee->getHuissiers(array($codeTGI), false); + + $tabRet = array(); + $nbAff = 0; + foreach ($tabTmp as $i=>$tribunal) + { + $adr = $iInsee->structureVoie($tribunal['adresse']); + $competence = new Competence(); + $competence->Id = $tribunal['id']; + $competence->IdSup = $tribunal['sirenGrp']; + $competence->Code = $tribunal['tribunal'].'/'.$code; + $competence->Type = $tribunal['type']; + $competence->Nom = $tribunal['Nom'].' '.$tribunal['Prenom']; + $competence->Siret = $tribunal['sirenMand']; + $competence->Adr = strtoupper($adr['num'].' '.$adr['adr_btq'].' '. + $adr['typeVoie'].' '.$adr['libVoie']); + $competence->AdrComp = strtoupper($tribunal['adresseComp']); + $competence->CP = $adr['cp']; + $competence->Ville = strtoupper($tribunal['ville']); + //'CodeInsee'=>$tribunal['CodeInsee'], + $competence->Tel = $tribunal['tel']; + $competence->Fax = $tribunal['fax']; + $competence->Web = $tribunal['web']; + $competence->Mail = $tribunal['email']; + $competence->Statut = $tribunal['Statut']; + //'DateCessation'=>$tribunal['triDateCessation']; + $competence->Remarque = strtr($tribunal['contact'], + array( '
'=>', ', '
'=>', ', + '
'=>', ', + )); + $tabRet[] = $competence; + } + $nbComp = count($tabTmp); + debugLog('I',"$nbComp compétences $type trouvées pour le tribunal $codeTGI",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + elseif ($type=='cfe') + { + $tabTmp = $iBodacc->getTribunauxParCommune($codeInsee); + foreach ($tabTmp as $i=>$tribunal) + { + if ($tribunal['triType']=='C' || $tribunal['triType']=='O' || + $tribunal['triType']=='T' || $tribunal['triType']=='R' || + $tribunal['triType']=='N' || $tribunal['triType']=='U' || + $tribunal['triType']=='Z') + { + if (strlen($tribunal['triCommentaire'])==32 && + strpos($tribunal['triCommentaire'], ' ')===false) + $remarque=''; + else $remarque=$tribunal['triCommentaire']; + + $competence = new Competence(); + $competence->Id = $tribunal['triId']; + $competence->IdSup = $tribunal['triIdSup']; + $competence->Code = $tribunal['triCode']; + $competence->Type = $tribunal['triType']; + $competence->Nom = strtoupper($tribunal['triNom']); + $competence->Siret = $tribunal['triSiret']; + $competence->Adr = strtoupper(preg_replace('/ +/',' ',$tribunal['triAdrNum'].' '.$tribunal['triAdrIndRep'].' '. + $tribunal['triAdrTypeVoie'].' '.$tribunal['triAdrVoie'])); + $competence->AdrComp = strtoupper($tribunal['triAdrComp']); + $competence->CP = $tribunal['triCP']; + $competence->Ville = strtoupper($tribunal['triVille']); + $competence->CodeInsee = $tribunal['CodeInsee']; + $competence->Tel = $tribunal['triTel']; + $competence->Fax = $tribunal['triFax']; + $competence->Web = $tribunal['triWeb']; + $competence->Mail = $tribunal['triMail']; + $competence->Statut = $tribunal['triStatut']; + $competence->DateCessation = $tribunal['triDateCessation']; //@todo : date + $competence->Remarque = $remarque; + $tabRet[] = $competence; + } + } + } + $this->wsLog('competences',$siret,$type.'/'.$codeInsee); + $output = new ListeCompetencesReturn(); + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + return $output; + } + + /** + * Liste des subventions + * @param string $companyId + * SIREN + * @param string $type + * Type de subvention reçues (IN) ou versées (OUT) + * @param int $offset + * @param int $nbItems + * @throws SoapFault + * @return SubventionList[] + */ + public function getSubventionList($companyId, $type = null, $offset = 0, $nbItems = 100) + { + $this->authenticate(); + + //Init + if ( intval($companyId) == 0 ) { + $this->sendError('1010'); + } elseif ( strlen($companyId)!=9 ) { + $this->sendError('1020'); + } + if ( empty($offset) ) { $offset = 0; } + if ( empty($nbItems) || $nbItems > 100 ) { $nbItems = 100; } + if ( !empty($type) ) { $type = strtoupper($type); } + + //SQL + $listM = new Application_Model_JoAssoSubventions(); + $countsql = $listM->select()->from($listM, array('COUNT(*) AS num')); + $sql = $listM->select()->from($listM, array( + 'id', + 'millesime', //Annee + 'sirenAsso', //sirenIn + 'nomAsso', + 'sirenOrigine', //sirenOut + 'libOrigine', //Origine + 'libImputation', //Programme + 'mtSubvention', //Montant + )); + + //Subvention reçues => sirenAsso = companyId + if ($type == 'IN') { + $sql->where('sirenAsso=?', $companyId); + $countsql->where('sirenAsso=?', $companyId); + } + //Subvention reçues => sirenOrigine = companyId + elseif ($type == 'OUT') { + $sql->where('sirenOrigine=?', $companyId); + $countsql->where('sirenOrigine=?', $companyId); + } + //All + else { + $sql->where('sirenAsso=?', $companyId) + ->orWhere('sirenOrigine=?', $companyId); + $countsql->where('sirenAsso=?', $companyId) + ->orWhere('sirenOrigine=?', $companyId); + } + $sql->order('millesime DESC')->limit($nbItems, $offset); + + $count = $listM->fetchRow($countsql); + $nbReponsesTotal = 0; + if ( $count!==null ) { + $nbReponsesTotal = $count->num; + } + + if ( $nbReponsesTotal != 0 ) { + + $rows = $listM->fetchAll($sql); + + $output = new SubventionList(); + $output->nbReponsesTotal = $nbReponsesTotal; + $result = array(); + + if ( $rows !== null ) { + foreach ( $rows as $row ) { + + $item = new Subvention(); + $item->Id = $row->id; + if ( $row->sirenAsso == $companyId ) { + $item->Type = 'IN'; + } elseif ( $row->sirenOrigine == $companyId ) { + $item->Type = 'OUT'; + } + $item->Millesime = $row->millesime; + $item->AssoSiren = $row->sirenAsso; + $item->AssoNom = $row->nomAsso; + $item->OrigineSiren = $row->sirenOrigine; + $item->OrigineLib = $row->libOrigine; + $item->Programme = $row->libImputation; + $item->Montant = $row->mtSubvention; + + $result[] = $item; + } + $output->result = $result; + $this->wsLog('subventionlist', $companyId); + } + + } + + return $output; + } + + /** + * Détail d'une subvention + * @param int $id + * @throws SoapFault + * @return SubventionDetail + */ + public function getSubventionDetail($id) + { + $this->authenticate(); + + $subventionM = new Application_Model_JoAssoSubventions(); + $row = $subventionM->find($id); + + if (null === row) { + throw new SoapFault('MSG', "Aucun résultat"); + } + + $data = $row->current(); + + $item = new SubventionDetail(); + $item->Millesime = $data->millesime; + $item->Budget = $data->typeBudget; + $item->AssoSiren = $data->sirenAsso; + $item->AssoNom = $data->nomAsso; + $item->OrigineSiren = $data->sirenOrigine; + $item->OrigineLib = $data->libOrigine; + $item->Programme = $data->libImputation; + $item->Montant = $data->mtSubvention; + $item->SubventionObjet = $data->objetSubvention; + $item->SubventionEval = $data->evalSubvention; + $item->Mission = $data->mission; + + $this->wsLog('subventiondetail', $item->AssoSiren, 'id:'.$id); + + return $item; + } + + /** + * Retourne le statut du webservice + * @return StatusReturn + */ + public function status() + { + /* @todo tester les différents éléments qui peuvent conduire + * à un problème dans les services tel que la connexion à la + * base de données, l'accès FTP, l'accès HTTP, l'accès système de fichier + */ + + //Enregistrement des accès à la requête getIdentite + /*Zend_Registry::get('WsLogger')->info("status - ip:". + $_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']. + ", hash:".$_SERVER['PHP_AUTH_PW']);*/ + + $error = new StatusReturn(); + //Test connexion à la base de données + $db = new WDB('jo'); + if (!$db) { + $error->statusCode = 9000; + $error->statusMsg = $this->listError['9000']; + } else { + $error->statusCode = 3000; + $error->statusMsg = $this->listError['3000']; + } + return $error; + } + +} + +?> \ No newline at end of file diff --git a/library/WsScore/Gestion/v0.1/Service.php b/library/WsScore/Gestion/v0.1/Service.php new file mode 100644 index 00000000..59c07382 --- /dev/null +++ b/library/WsScore/Gestion/v0.1/Service.php @@ -0,0 +1,1075 @@ +authenticate(); + + //Initialisation + if (empty($ipUtilisateur)) $ipUtilisateur = $_SERVER['REMOTE_ADDR']; + $error = new ErrorType(); + $result = new InfosLogin(); + + //Filtre IP + $filtre = trim($this->User->filtre_ip); + if ( !empty($filtre) && !checkPlagesIp($filtre, $ipUtilisateur) ){ + debugLog('I',"getInfosLogin Adresse IP $ipUtilisateur non declaree pour le compte $login",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('0904'); + } + + debugLog('I',"getInfosLogin pour $login (IP=$ipUtilisateur)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + //L'utilisateur qui demande les informations est différent + if ( $this->User->login<>$login + && in_array($this->User->profil, array('Administrateur', 'SuperAdministrateur') ) + ) { + /** Un administrateur veut il des infos sur un login ? **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select( + 'utilisateurs u, clients c', + 'u.login, u.id, u.email, u.password, u.idClient, u.typeCompte, u.actif, u.filtre_ip, u.civilite, u.nom, u.prenom, u.tel, u.fax, u.mobile, u.profil, u.raisonSociale, u.siret, u.adrNum, u.adrIndRep, u.adrTypeVoie, u.adrLibVoie, u.adrCp, u.adrVille, u.adrComp, u.tel, u.fax, u.mobile, u.pref, u.profil, u.dateInscription, u.dateValidation, u.nombreConnexions, u.dateDerniereConnexion, u.droits, u.referenceParDefaut, u.nbReponses, u.formatMail, u.dateDebutCompte, u.dateFinCompte, u.maxFicheId, c.droits AS droitsClients, c.test AS clientTest, c.timeout, c.typeScore AS typeScore', + "u.login='$login' AND u.idClient=c.id AND u.deleted=0", + false, MYSQL_ASSOC + ); + $tabRep = $rep[0]; + if (count($rep)>0) + { + $timeOutSec = $tabRep['timeout']; + if ($timeOutSec==0) $timeOutSec = 1800; + $result->login = $login; + $result->id = $tabRep['id']; + $result->email = $tabRep['email']; + $result->typeCompte = $tabRep['typeCompte']; + $result->idClient = $tabRep['idClient']; + $result->filtre_ip = $tabRep['filtre_ip']; + $result->civilite = $tabRep['civilite']; + $result->nom = $tabRep['nom']; + $result->prenom = $tabRep['prenom']; + $result->raisonSociale = $tabRep['raisonSociale']; + $result->siret = $tabRep['siret']; + $result->adrNum = $tabRep['adrNum']; + $result->adrIndRep = $tabRep['adrIndRep']; + $result->adrTypeVoie = $tabRep['adrTypeVoie']; + $result->adrLibVoie = $tabRep['adrLibVoie']; + $result->adrCp = $tabRep['adrCp']; + $result->adrVille = $tabRep['adrVille']; + $result->adrComp = $tabRep['adrComp']; + $result->tel = $tabRep['tel']; + $result->fax = $tabRep['fax']; + $result->mobile = $tabRep['mobile']; + $result->pref = $tabRep['pref']; + $result->profil = $tabRep['profil']; + $result->dateInscription = $tabRep['dateInscription']; + $result->dateValidation = $tabRep['dateValidation']; + $result->nombreConnexions = $tabRep['nombreConnexions']; + $result->dateDerniereConnexion = $tabRep['dateDerniereConnexion']; + $result->droits = $tabRep['droits']; + $result->droitsClients = $tabRep['droitsClients']; + $result->timeout = $timeOutSec; + $result->clientTest = $tabRep['clientTest']; + $result->typeScore = $tabRep['typeScore']; + $result->nbReponses = $tabRep['nbReponses']; + $result->formatMail = $tabRep['formatMail']; + $result->reference = $tabRep['referenceParDefaut']; + $result->dateDebutCompte = $tabRep['dateDebutCompte']; + $result->dateFinCompte = $tabRep['dateFinCompte']; + $result->maxFicheId = $tabRep['maxFicheId']; + } else { + /** On log l'erreur d'authentification **/ + $tabInsert=array( + 'login' => $login, + 'page' => 'infosLogin', + 'params' => 'Erreur Login/Password', + 'ipClient' => $ipUtilisateur); + $iDbCrm->insert('logs', $tabInsert); + } + } + //Authentification de l'utilisateur + else + { + $ref='OK'; + //Identification utilisateur + $connected = true; + + $result->connected = $connected; + $result->login = $this->User->login; + $result->id = $this->User->id; + $result->idClient = $this->User->idClient; + $result->email = $this->User->email; + $result->typeCompte = $this->User->typeCompte; + $result->filtre_ip = $this->User->filtre_ip; + $result->ipPasserelle = $this->User->ipConnexion; + $result->ipConnexion = $ipUtilisateur; + $result->civilite = $this->User->civilite; + $result->nom = $this->User->nom; + $result->prenom = $this->User->prenom; + $result->raisonSociale = $this->User->raisonSociale; + $result->siret = $this->User->siret; + $result->adrNum = $this->User->adrNum; + $result->adrIndRep = $this->User->adrIndRep; + $result->adrTypeVoie = $this->User->adrTypeVoie; + $result->adrLibVoie = $this->User->adrLibVoie; + $result->adrCp = $this->User->adrCp; + $result->adrVille = $this->User->adrVille; + $result->adrComp = $this->User->adrComp; + $result->tel = $this->User->tel; + $result->fax = $this->User->fax; + $result->mobile = $this->User->mobile; + $result->pref = $this->User->pref; + $result->profil = $this->User->profil; + $result->dateInscription = $this->User->dateInscription; + $result->dateValidation = $this->User->dateValidation; + $result->nombreConnexions = $this->User->nombreConnexions; + $result->dateDerniereConnexion = $this->User->dateDerniereConnexion; + $result->droits = $this->User->droits; + $result->droitsClients = $this->User->droitsClients; + $result->timeout = $this->User->timeout; + $result->clientTest = $this->User->clientTest; + $result->typeScore = $this->User->typeScore; + $result->nbReponses = $this->User->nbReponses; + $result->formatMail = $this->User->formatMail; + $result->reference = $this->User->referenceParDefaut; + $result->dateDebutCompte = $this->User->dateDebutCompte; + $result->dateFinCompte = $this->User->dateFinCompte; + $result->maxFicheId = $this->User->maxFicheId; + $result->typeScore = $this->User->typeScore; + + // On log l'accès à l'authentification + if ( $this->User->clientTest=='Oui' || $this->User->typeCompte=='TEST' ) { + $test = 1; + } else { + $test = 0; + } + $tabInsert = array( + 'login' => $this->User->login, + 'idClient' => $this->User->idClient, + 'page' => 'infosLogin', + 'params' => $ref, + 'test' => $test, + 'ipClient' => $ipUtilisateur + ); + $iDbCrm = new WDB('sdv1'); + $iDbCrm->insert('logs', $tabInsert); + + //Date de dernière connexion + $iDbCrm->update('utilisateurs', + array('dateDerniereConnexion'=> date('Y-m-d H:i:s')), + "idClient=".$this->User->idClient." AND login='".$this->User->login."'" + ); + } + + //Retour + $output = new InfosLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + + + /** + * Mise à jour des informations du profil connecté + * @param string $login + * @param string $action (delete|actif|desactif|changepwd|new|update) + * @param InfosLoginData $infos + * @return SetInfosLoginReturn + */ + public function setInfosLogin($login, $action, $infos = null) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $result = false; + + switch($action) + { + case 'delete': + + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') { + $tabUpdate = array( 'deleted' => 1, 'dateUpdate' => date('Y-m-d H:i:s') ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'")){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } + } + break; + + case 'actif': + case 'desactif': + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur'){ + if ($action=='actif') $actif = 1; + if ($action=='desactif') $actif = 0; + $tabUpdate = array( 'actif' => $actif, 'dateUpdate' => date('Y-m-d H:i:s') ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'")){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } + } + + break; + + case 'changepwd': + + $tabUpdate = array( + 'password' => stripslashes($infos->password), + 'dateUpdate' => date('Y-m-d H:i:s') + ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'", true)){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } + + break; + + case 'new': + + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') { + + $idClient = $this->User->idClient; + if ( $this->User->profil=='SuperAdministrateur' && $infos->idClient!=''){ + $idClient = $infos->idClient; + } + + $typeCompte = 'PROD'; + if ( $this->User->profil=='SuperAdministrateur' && $infos->typeCompte=='TEST'){ + $typeCompte = 'TEST'; + } + + $tabUpdate = array( + 'idClient' => $idClient, + 'login' => $login, + 'password' => stripslashes($infos->password), + 'nom' => stripslashes($infos->nom), + 'prenom' => stripslashes($infos->prenom), + 'referenceParDefaut' => stripslashes($infos->reference), + 'email' => strtolower(stripslashes($infos->email)), + 'tel' => stripslashes($infos->tel_fix), + 'fax' => stripslashes($infos->tel_fax), + 'mobile' => stripslashes($infos->tel_mob), + 'nbReponses' => $infos->rech_nbrep, + //'formatMail' => $infos->formatMail, + 'profil' => (isset($infos->profil) || !in_array($infos->profil, array('SuperAdministrateur','Administrateur', 'Utilisateur')) ) ? $infos->profil : 'Utilisateur', + 'pref' => implode(' ',$infos->pref->item), + 'droits' => implode(' ', $infos->droits->item), + 'typeCompte' => $typeCompte, + 'dateInsert' => date('Y-m-d H:i:s'), + ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->insert('utilisateurs', $tabUpdate)){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Création impossible'; + } + } + + break; + + case 'update': + + if (!empty($infos->password)){ + $tabUpdate['password'] = stripslashes($infos->password); + } + $tabUpdate['email'] = stripslashes($infos->email); + $tabUpdate['tel'] = stripslashes($infos->tel_fix); + $tabUpdate['fax'] = stripslashes($infos->tel_fax); + $tabUpdate['mobile'] = stripslashes($infos->tel_mb); + $tabUpdate['nbReponses'] = $infos->rech_nbrep; + //$tabUpdate['formatMail'] = $infos->formatMail; + $tabUpdate['pref'] = implode(' ',$infos->pref->item); + $tabUpdate['dateUpdate'] = date('Y-m-d H:i:s'); + if ($this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur') { + $tabUpdate['droits'] = implode(' ', $infos->droits->item); + $tabUpdate['nom'] = stripslashes($infos->nom); + $tabUpdate['prenom'] = stripslashes($infos->prenom); + $tabUpdate['referenceParDefaut'] = stripslashes($infos->reference); + $tabUpdate['profil'] = isset($infos->profil) ? $infos->profil : 'Utilisateur'; + } + + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'", true)){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } + + break; + default; + $result = false; + break; + } + + $output = new SetInfosLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Affecter aux utilisateurs les paramètres du client + * @param integer $idClient + * @param string $element + * @param string[] $utilisateurs + * @return boolean + */ + public function setClientsParamsOnUtilisateurs( $idClient , $element = null, $utilisateurs = null ) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0901'); + } + if (empty($element)){ + throw new SoapFault('Error', 'Erreur dans les paramètres'); + } + switch(strtolower($element)){ + //Mettre à jour les ips des utilisateurs en fonction de celles du client + case 'ip': + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', 'filtre_ip', "id='$idClient'", false, MYSQL_ASSOC); + if (count($rep)==0){ + throw new SoapFault('Error', 'Client inexistant'); + } + $data = array( + 'filtre_ip' => $rep[0]['filtre_ip'], + 'dateUpdate' => date('Y-m-d H:i:s'), + ); + $where = ' WHERE idClient='.$idClient; + if (!empty($utilisateurs) && is_array($utilisateurs->item)){ + $where.= ' AND login IN ('.join(',',$utilisateurs->item).')'; + } + if($iDbCrm->update('utilisateurs', $data, $where)){ + return true; + } + return false; + break; + } + } + + /** + * Obtention automatique d'un nouveau login pour un client + * @param string $login + * @return NextLoginReturn + */ + public function getNextLogin( $login ) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + if ($this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur') { + + /** Un administrateur veut créer un nouveau login **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('utilisateurs u, clients c', 'u.idClient, c.racineLogin, c.droits', "u.login='$login' AND u.idClient=c.id"); + $racine = $rep[0]['racineLogin']; + $idClient = $rep[0]['idClient']; + $droitsClients = $rep[0]['droits']; + $rep = $iDbCrm->select('utilisateurs', 'login, length(login) as taille', "login like '$racine%' group by login order by taille desc, login desc LIMIT 0,1"); + if (count($rep)==0) { + $racine.='1'; + } else { + $last_i = preg_replace("/\D/", '',$rep[0]['login'])*1; + $racine.= $last_i+1; + } + $result = new NextLoginResult(); + $result->racine = $racine; + $result->idClient = $idClient; + $result->droitsClients = $droitsClients; + + } else { + + $error->errnum = 0; + $error->errmsg = 'Acces non authorisé!'; + } + $output = new NextLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère la liste des clients ou les informations d'un client + * @param integer|boolean $idClient + * @param ClientFiltre $filtre + * @return ListeClientsReturn + */ + public function getListeClients($idClient=false, $filtre=null) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($idClient)) $idClient = false; + + $isAuthorized = false; + + if ($this->User->profil=='Administrateur' && + ($idClient=='false' || $idClient==$this->User->idClient)){ + $idClient = $this->User->idClient; + $isAuthorized = true; + } + + if ($this->User->profil<>'SuperAdministrateur'){ + $error->errnum = 1; + $error->errmsg = 'Profil non administrateur'; + } else { + $isAuthorized = true; + } + + if ($isAuthorized) + { + $strClient = ''; + + if (is_numeric($idClient)) $strClient.=" AND id='$idClient' "; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', + 'id, nom, actif, test, racineLogin, siren, nic, tva, editerFacture, fact_detail, fac_dest, fac_adr1, fac_adr2, fac_adr3, fac_email, fac_tel, fact_rib, liv_dest, liv_adr1, liv_adr2, liv_adr3, liv_email, liv_tel, droits, filtres_ip, dateInsert, dateUpdate, respComSD, typeContrat, dateSignature, typeAcces, typeScore, timeout, accesPieces, accesKbis, accesInvestigations, accesInternationnal, accesEnquetes, miseSousSurveillance, forfaitExtranetPeriode, forfaitExtranetMontant, reconductionAuto, remarque, forfaitPiecesNb, forfaitPiecesMt, forfaitPiecesDep, forfaitInvestigNb, forfaitInvestigMt, forfaitInvestigDep, tarifIndiscore', + "1 $strClient", + false, + MYSQL_ASSOC); + $tabRet = array(); + foreach ($rep as $uti) + { + $client = new Client(); + $client->idClient = $uti['id']; + $client->nom = $uti['nom']; + $client->actif = $uti['actif']; + $client->test = $uti['test']; + $client->racineLogin = $uti['racineLogin']; + $client->siren = $uti['siren']; + $client->nic = $uti['nic']; + $client->tva = $uti['tva']; + $client->editerFacture = $uti['editerFacture']; + $client->fact_detail = $uti['fact_detail']; + $client->fac_dest = $uti['fac_dest']; + $client->fac_adr1 = $uti['fac_adr1']; + $client->fac_adr2 = $uti['fac_adr2']; + $client->fac_adr3 = $uti['fac_adr3']; + $client->fac_email = $uti['fac_email']; + $client->fac_tel = $uti['fac_tel']; + $client->fact_rib = $uti['fact_rib']; + $client->liv_dest = $uti['liv_dest']; + $client->liv_adr1 = $uti['liv_adr1']; + $client->liv_adr2 = $uti['liv_adr2']; + $client->liv_adr3 = $uti['liv_adr3']; + $client->liv_email = $uti['liv_email']; + $client->liv_tel = $uti['liv_tel']; + $client->droits = strtolower($uti['droits']); + $client->timeout = $uti['timeout']; + $client->filtres_ip = $uti['filtres_ip']; + $client->dateInsert = $uti['dateInsert']; + $client->dateUpdate = $uti['dateUpdate']; + $client->respComSD = $uti['respComSD']; + $client->typeContrat = $uti['typeContrat']; + $client->dateSignature = $uti['dateSignature']; + $client->typeAcces = $uti['typeAcces']; + $client->typeScore = $uti['typeScore']; + $client->accesPieces = $uti['accesPieces']; + $client->accesKbis = $uti['accesKbis']; + $client->accesInvestigations = $uti['accesInvestigations']; + $client->accesInternationnal = $uti['accesInternationnal']; + $client->accesEnquetes = $uti['accesEnquetes']; + $client->miseSousSurveillance = $uti['miseSousSurveillance']; + $client->forfaitExtranetPeriode = $uti['forfaitExtranetPeriode']; + $client->forfaitExtranetMontant = $uti['forfaitExtranetMontant']; + $client->reconductionAuto = $uti['reconductionAuto']; + $client->remarque = $uti['remarque']; + $client->forfaitPiecesNb = $uti['forfaitPiecesNb']; + $client->forfaitPiecesMt = $uti['forfaitPiecesMt']; + $client->forfaitPiecesDep = $uti['forfaitPiecesDep']; + $client->forfaitInvestigNb = $uti['forfaitInvestigNb']; + $client->forfaitInvestigMt = $uti['forfaitInvestigMt']; + $client->forfaitInvestigDep = $uti['forfaitInvestigDep']; + $client->tarifIndiscore = $uti['tarifIndiscore']; + + $tabRet[] = $client; + } + } + $output = new ListeClientsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des droits + * @return ListeDroitsReturn[] + */ + public function getListeDroits() + { + $tabRet = array(); + foreach($this->listeDroits as $code => $desc){ + $droit = new ListeDroitsReturn(); + $droit->code = $code; + $droit->desc = $desc; + $tabRet[] = $droit; + } + return $tabRet; + } + + /** + * Retourne la liste des préférences + * @return ListePrefsReturn[] + */ + public function getListePrefs() + { + $tabRet = array(); + foreach($this->listePrefs as $code => $desc){ + $pref = new ListePrefsReturn(); + $pref->code = $code; + $pref->desc = $desc; + $tabRet[] = $pref; + } + return $tabRet; + } + + /** + * Récupère les informations du profil connecté + * @param string $login + * @param int $idClient + * @return ListeUtilisateursReturn + */ + public function getListeUtilisateurs($login, $idClient=null) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + if ($this->User->profil<>'Administrateur' && + $this->User->profil<>'SuperAdministrateur') + { + $error->errnum = 1; + $error->errmsg = 'Profil non administrateur'; + } else { + $iDbCrm = new WDB('sdv1'); + if (!isset($idClient)){ + $rep = $iDbCrm->select('utilisateurs', 'idClient', "login='$login'"); + $idClient = $rep[0][0]; + } + if ($idClient==-1){ + $error->errnum = 1; + $error->errmsg = 'idClient=0'; + } else { + $rep = $iDbCrm->select('utilisateurs', 'id, idClient, login, email, actif, nom, prenom, referenceParDefaut', "idClient='$idClient' AND deleted=0 ORDER BY login ASC", false, MYSQL_ASSOC); + foreach ($rep as $uti){ + $utilisateur = new Utilisateur(); + $utilisateur->idUti = $uti['id']; + $utilisateur->idClient= $uti['idClient']; + $utilisateur->login = $uti['login']; + $utilisateur->email = $uti['email']; + $utilisateur->actif= $uti['actif']; + $utilisateur->nom = $uti['nom']; + $utilisateur->prenom = $uti['prenom']; + $utilisateur->reference = $uti['referenceParDefaut']; + $tabRet[]= $utilisateur; + } + } + } + $output = new ListeUtilisateursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getLogsClients + * @param string $mois (Format : AAAA-MM ou AAAA/MM) + * @param int $detail + * @param int $idClient + * @param string $login + * @param int $all + * @return LogsClientsReturn + */ + public function getLogsClients($mois, $detail=0, $idClient=0, $login='', $all=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($detail)) $detail = 0; + if (empty($idClient)) $idClient = 0; + if (empty($login)) $login = ''; + if (empty($all)) $all = 0; + + $strDetail = $strClient = $strLogin=''; + + // Vue détaillée ou uniquement les infos payantes + if ($detail==0) { + $detail='Non'; + //$strDetail=" AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis' OR page LIKE 'indiscore%' OR page='privileges' OR page='commandeAsso') AND (params<>'' OR page LIKE 'indiscore%' AND tarifIndiscore<>0) AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + $strDetail = ' AND ( '; + $pages = array('greffe_actes', 'greffe_bilans', 'kbis', 'indiscore', 'indiscore2', 'indiscore3', 'rapport2', 'rapport3', 'privileges', 'privcumul'); + $totalPages = count($pages); + $i=0; + foreach( $pages as $page ) { + switch($page) + { + case 'greffe_actes': + case 'greffe_bilans': + $strDetail.= "(l.page = '".$page."' AND l.params<>'' AND (l.params NOT LIKE '%erreur%' OR l.params LIKE '%erreur 17%'))"; + break; + case 'kbis': + $strDetail.= "(l.page = '".$page."' AND l.params<>'' AND l.params<>'1/1/0//' AND l.params<>'0/1/0//')"; + break; + default: + $strDetail.= "(l.page = '".$page."')"; + break; + } + $i++; + if ( $i<$totalPages) { + $strDetail.= ' OR '; + } + } + $strDetail.= ' ) '; + } elseif($detail==1) { + $detail='Oui'; + } + + // On veut uniquement le client précis + if ($all && $this->User->profil=='SuperAdministrateur') { + $all = 'Oui'; + } else { + $all = 'Non'; + } + // Pas d'idClient mentionné ou tentative sur autre client et non SAD + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = " AND u.idClient=$idClient "; + + // On veut uniquement le login précis + if ($login!='') { + $strLogin=" AND l.login='$login' "; + } else { + $login='Non'; + } + + // Dates de début et de fin + $mois = strtr($mois, array('-'=>'','/'=>'')); + $annee = substr($mois,0,4); + $mois = substr($mois,4,2); + $dateDeb=date('Y-m-d', mktime(0,0,0,$mois,1,$annee)); + $dateFin=date('Y-m-t', mktime(0,0,0,$mois,15,$annee)); + + $c = Zend_Registry::get('config'); + $fichierCsv=$c->profil->path->files."/logs-$annee-$mois-$detail-$idClient-$login-$all.csv"; + + if (file_exists($fichierCsv) && + date('Ymd', filemtime($fichierCsv))==date('Ymd') && + filesize($fichierCsv)>60 ) { + $size=filesize($fichierCsv); + $erreur=false; + $tabNom=array(); + $cache=1; + } else { + @unlink($fichierCsv); + $sql="SELECT LOWER(l.login) as loginUti, page, l.siren, l.nic, l.params, l.dateHeure, u.idClient, c.nom, u.referenceParDefaut AS refUti + FROM `logs` l, utilisateurs u, clients c + WHERE 1 $strDetail $strClient $strLogin AND dateHeure BETWEEN '$dateDeb 00:00:00' AND '$dateFin 23:59:59' AND l.login=u.login AND u.idClient=c.id + GROUP BY l.login, l.siren, l.page, date(dateHeure), l.params + ORDER BY l.login ASC, l.dateHeure ASC"; + $fp = fopen($c->profil->path->cache."/logs-$annee-$mois-$detail-$idClient-$login-$all.sql", 'w'); + fwrite($fp, $sql.EOL); + fclose($fp); + exec("php ".$c->profil->path->batch."/sql2csv.php sdv1 ".$c->profil->path->cache."/logs-$annee-$mois-$detail-$idClient-$login-$all.sql $fichierCsv > /dev/null &"); + $size = $cache = 0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new LogsClients(); + $result->Url = $hostname."/fichier/logs/logs-$annee-$mois-$detail-$idClient-$login-$all.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + $output = new LogsClientsReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Création/Modification d'un client + * @param string $infos + * @return ClientReturn + */ + public function setClient($infos) + { + $this->authenticate(); + $result = false; + //Pas SuperAdministrateur + if ($this->User->profil!='SuperAdministrateur') { + throw new SoapFault(1, 'Profil insuffisant pour cette méthode'); + } else { + $infos = json_decode($infos); + + /** + * - Protégé les chaines de caractères + * - Gérer les champs select + */ + + $idClient = null; + $tabInfos = array(); + foreach($infos as $nom => $value) + { + switch($nom) + { + case 'idClient': + $idClient = $value; + break; + case 'nom': + $tabInfos['nom'] = $value; + break; + case 'actif': + $tabInfos['actif'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'test': + $tabInfos['test'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'racineLogin': + $tabInfos['racineLogin'] = $infos->racineLogin; + break; + case 'siren': + $tabInfos['siren'] = (int) $value; + break; + case 'nic': + $tabInfos['nic'] = (int) $value; + break; + case 'tva': + $tabInfos['tva'] = $value; + break; + case 'idClientFacture': + $tabInfos['idClientFacture'] = $value; + break; + case 'editerFacture': + $tabInfos['editerFacture'] = ($value=='Non') ? 'Non' : 'Oui'; + break; + case 'fact_detail': + $tabInfos['fact_detail'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'fac_dest': + $tabInfos['fac_dest'] = $value; + break; + case 'fac_adr1': + $tabInfos['fac_adr1'] = $value; + break; + case 'fac_adr2': + $tabInfos['fac_adr2'] = $value; + break; + case 'fac_adr3': + $tabInfos['fac_adr3'] = $value; + break; + case 'fac_email': + $tabInfos['fac_email'] = $value; + break; + case 'fac_tel': + $tabInfos['fac_tel'] = $value; + break; + case 'fact_rib': + if (in_array($value, array('BPOSTALE','CCOOP', 'CDNORD'))){ + $tabInfos['fact_rib'] = $value; + } + break; + case 'liv_dest': + $tabInfos['liv_dest'] = $value; + break; + case 'liv_adr1': + $tabInfos['liv_adr1'] = $value; + break; + case 'liv_adr2': + $tabInfos['liv_adr2'] = $value; + break; + case 'liv_adr3': + $tabInfos['liv_adr3'] = $value; + break; + case 'liv_email': + $tabInfos['liv_email'] = $value; + break; + case 'liv_tel': + $tabInfos['liv_tel'] = $value; + break; + case 'droits': + if (count($value)>0){ + $tabInfos['droits'] = strtolower(implode(' ',$value)); + } else { + $tabInfos['droits'] = array(); + } + break; + case 'filtres_ip': + $tabInfos['filtres_ip'] = $value; + break; + case 'typeContrat': + if (in_array($value, array('Contrat','Marché'))){ + $tabInfos['typeContrat'] = $value; + } + break; + case 'typeAcces': + if (in_array($value, array('userPassword','userPasswordIP', 'IP'))){ + $tabInfos['typeAcces'] = $value; + } + break; + case 'typeScore': + if (in_array($value, array('20','100'))){ + $tabInfos['typeScore'] = $value; + } + break; + case 'timeout': + if (!empty($value)){ + $tabInfos['timeout'] = $value; + } + break; + case 'accesPieces': + $tabInfos['accesPieces'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesKbis': + $tabInfos['accesKbis'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesInvestigations': + $tabInfos['value'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesInternationnal': + $tabInfos['accesInternationnal'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesEnquetes': + $tabInfos['accesEnquetes'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'miseSousSurveillance': + $tabInfos['miseSousSurveillance'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'forfaitExtranetPeriode': + if (in_array($value, array('Mensuel','Trimestriel','Semestriel', 'Annuel'))){ + $tabInfos['forfaitExtranetPeriode'] = $value; + } + break; + case 'forfaitExtranetMontant': + $tabInfos['forfaitExtranetMontant'] = $value; + break; + case 'reconductionAuto': + if ($value=='Non') { + $tabInfos['reconductionAuto'] = 'Non'; + } + break; + case 'remarque': + $tabInfos['remarque'] = $value; + break; + case 'forfaitPiecesNb': + $tabInfos['forfaitPiecesNb'] = $value; + break; + case 'forfaitPiecesMt': + $tabInfos['forfaitPiecesMt'] = $value; + break; + case 'forfaitPiecesDep': + $tabInfos['forfaitPiecesDep'] = $value; + break; + case 'forfaitInvestigNb': + $tabInfos['forfaitInvestigNb'] = $value; + break; + case 'forfaitInvestigMt': + $tabInfos['forfaitInvestigMt'] = $value; + break; + case 'forfaitInvestigDep': + $tabInfos['forfaitInvestigDep'] = $value; + break; + case 'tarifIndiscore': + $tabInfos['tarifIndiscore'] = $value; + break; + case 'InterSudLogin': + $tabInfos['InterSudLogin'] = $value; + break; + case 'InterSudPass': + $tabInfos['InterSudPass'] = $value; + break; + } + + } + + $iDbCrm = new WDB('sdv1'); + if (empty($idClient)){ + //Ajout + $tabInfos['dateInsert'] = date('Y-m-d H:i:s'); + $result = $iDbCrm->insert('clients', $tabInfos, true); + } else { + //Droits client actuel avant modification + if (isset($tabInfos['droits'])){ + $rep = $iDbCrm->select('clients', 'droits', "id='$idClient'", false, MYSQL_ASSOC); + $droitsPre = explode(' ', $rep[0]['droits']); + $droitsSui = explode(' ', $tabInfos['droits']); + //Détection suppression d'un droit client + if (count($droitsSui)0 ){ + foreach($droitsDiff as $droit){ + $query = "UPDATE utilisateurs set droits=TRIM(REPLACE(droits, '$droit', '')) WHERE idClient='$idClient'"; + $iDbCrm->query($query, true); + } + } + } + } + //Modification + $tabInfos['dateUpdate'] = date('Y-m-d H:i:s'); + if ($iDbCrm->update('clients', $tabInfos, "id='$idClient'", true)){ + $result = true; + } + } + } + $output = new ClientReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Création d'un modele pour le préremplisage des données utilisateurs + * @param integer $idClient + * @param string $nom + * @param ModeleUtilisateur $infos + * @return ModeleUtilisateurReturn + */ + protected function setModeleUtilisateur($idClient, $nom, $infos) + { + $this->authenticate(); + } + + /** + * Création/Modification d'utilisateurs + * @param integer $idClient + * @param SetUtilisateurs[] $users + * @return UtilisateursReturn + */ + protected function setUtilisateurs($idClient, $users) + { + $this->authenticate(); + $error = new ErrorType(); + $result = false; + //idClient existe + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', 'id, nom, actif, test, racineLogin, siren, nic, droits, filtres_ip, typeAcces, typeScore, accesPieces, accesKbis, accesInvestigations, accesInternationnal, accesEnquetes, miseSousSurveillance', "1 AND id='$idClient'", false, MYSQL_ASSOC); + if (count($rep)>0){ + $client = $rep[0]; + $idClient = $client['id']; + if (count($users)>0){ + foreach($users as $user){ + $tabInfos = array(); + $tabInfos['idClient'] = $idClient; + $tabInfos['login'] = $user->login; + $tabInfos['email'] = ''; + $tabInfos['password'] = $user->password; + $tabInfos['actif'] = ''; + //$tabInfos['deleted'] = ''; + + if (in_array($user->typeCompte, array('TEST', 'PROD'))){ + $tabInfos['typeCompte'] = $user->typeCompte; + } else { + $tabInfos['typeCompte'] = 'PROD'; + } + + //$tabInfos['filtre_ip'] = ''; + + //SetInfosLogin + $tabInfos['civilite'] = ''; + $tabInfos['nom'] = ''; + $tabInfos['prenom'] = ''; + + //Identique au client + $tabInfos['raisonSociale'] = ''; + $tabInfos['siret'] = ''; + $tabInfos['adrNum'] = ''; + $tabInfos['adrInRep'] = ''; + $tabInfos['adrTypeVoie'] = ''; + $tabInfos['adrLibVoie'] = ''; + $tabInfos['adrCp'] = ''; + $tabInfos['adrVille'] = ''; + $tabInfos['adrComp'] = ''; + $tabInfos['tel'] = ''; + $tabInfos['fax'] = ''; + $tabInfos['mobile'] = ''; + + $tabInfos['pref'] = ''; + + if (in_array($user->typeCompte, array('Administrateur', 'Utilisateur'))){ + $tabInfos['profil'] = $user->profil; + } else { + $tabInfos['profil'] = 'Utilisateur'; + } + /* + $tabInfos['dateInscription'] = ''; + $tabInfos['dateValidation'] = ''; + */ + + if (empty($user->droits)){ + $tabInfos['droits'] = $client->droits; + } else { + $tabInfos['droits'] = $user->droits; + } + $tabInfos['referenceParDefaut'] = ''; + $tabInfos['nbReponses'] = ''; + $tabInfos['listeEven'] = ''; + $tabInfos['maxFicheId'] = $user->maxFicheId; + + //$tabInfos['dateInsert'] = ''; + + if (empty($user->id)){ + $iDbCrm->insert('utilisateurs', $tabInfos); + } else { + $iDbCrm->update('utilisateurs', $tabInfos, "id='$user->id'"); + } + + } + } else { + $error->errnum = 1; + $error->errmsg = 'Aucun utilisateur'; + } + } else { + $error->errnum = 1; + $error->errmsg = 'Identifiant client inconnu!'; + } + $output = new UtilisateursReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } +} \ No newline at end of file diff --git a/library/WsScore/Gestion/v0.2/Service.php b/library/WsScore/Gestion/v0.2/Service.php new file mode 100644 index 00000000..69e0ff01 --- /dev/null +++ b/library/WsScore/Gestion/v0.2/Service.php @@ -0,0 +1,1300 @@ +authenticate(); + + //Initialisation + if (empty($ipUtilisateur)) $ipUtilisateur = $_SERVER['REMOTE_ADDR']; + $error = new ErrorType(); + $result = new InfosLogin(); + + //Filtre IP + $filtre = trim($this->User->filtre_ip); + if ( !empty($filtre) && !checkPlagesIp($filtre, $ipUtilisateur) ){ + debugLog('I',"getInfosLogin Adresse IP $ipUtilisateur non declaree pour le compte $login",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('0904'); + } + + debugLog('I',"getInfosLogin pour $login (IP=$ipUtilisateur)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + //L'utilisateur qui demande les informations est différent + if ( $this->User->login<>$login + && in_array($this->User->profil, array('Administrateur', 'SuperAdministrateur') ) + ) { + /** Un administrateur veut il des infos sur un login ? **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select( + 'utilisateurs u, clients c', + 'u.login, u.id, u.email, u.password, u.idClient, u.typeCompte, u.actif, u.filtre_ip, u.civilite, u.nom, u.prenom, u.tel, u.fax, u.mobile, u.profil, u.raisonSociale, u.siret, u.adrNum, u.adrIndRep, u.adrTypeVoie, u.adrLibVoie, u.adrCp, u.adrVille, u.adrComp, u.tel, u.fax, u.mobile, u.pref, u.profil, u.dateInscription, u.dateValidation, u.nombreConnexions, u.dateDerniereConnexion, u.droits, u.referenceParDefaut, u.nbReponses, u.formatMail, u.dateDebutCompte, u.dateFinCompte, u.maxFicheId, c.droits AS droitsClients, c.test AS clientTest, c.timeout, c.typeScore AS typeScore', + "u.login='$login' AND u.idClient=c.id AND u.deleted=0", + false, MYSQL_ASSOC + ); + $tabRep = $rep[0]; + if (count($rep)>0) + { + $timeOutSec = $tabRep['timeout']; + if ($timeOutSec==0) $timeOutSec = 1800; + $result->login = $login; + $result->id = $tabRep['id']; + $result->email = $tabRep['email']; + $result->typeCompte = $tabRep['typeCompte']; + $result->idClient = $tabRep['idClient']; + $result->filtre_ip = $tabRep['filtre_ip']; + $result->civilite = $tabRep['civilite']; + $result->nom = $tabRep['nom']; + $result->prenom = $tabRep['prenom']; + $result->raisonSociale = $tabRep['raisonSociale']; + $result->siret = $tabRep['siret']; + $result->adrNum = $tabRep['adrNum']; + $result->adrIndRep = $tabRep['adrIndRep']; + $result->adrTypeVoie = $tabRep['adrTypeVoie']; + $result->adrLibVoie = $tabRep['adrLibVoie']; + $result->adrCp = $tabRep['adrCp']; + $result->adrVille = $tabRep['adrVille']; + $result->adrComp = $tabRep['adrComp']; + $result->tel = $tabRep['tel']; + $result->fax = $tabRep['fax']; + $result->mobile = $tabRep['mobile']; + $result->pref = $tabRep['pref']; + $result->profil = $tabRep['profil']; + $result->dateInscription = $tabRep['dateInscription']; + $result->dateValidation = $tabRep['dateValidation']; + $result->nombreConnexions = $tabRep['nombreConnexions']; + $result->dateDerniereConnexion = $tabRep['dateDerniereConnexion']; + $result->droits = $tabRep['droits']; + $result->droitsClients = $tabRep['droitsClients']; + $result->timeout = $timeOutSec; + $result->clientTest = $tabRep['clientTest']; + $result->typeScore = $tabRep['typeScore']; + $result->nbReponses = $tabRep['nbReponses']; + $result->formatMail = $tabRep['formatMail']; + $result->reference = $tabRep['referenceParDefaut']; + $result->dateDebutCompte = $tabRep['dateDebutCompte']; + $result->dateFinCompte = $tabRep['dateFinCompte']; + $result->maxFicheId = $tabRep['maxFicheId']; + } else { + /** On log l'erreur d'authentification **/ + $tabInsert=array( + 'login' => $login, + 'page' => 'infosLogin', + 'params' => 'Erreur Login/Password', + 'ipClient' => $ipUtilisateur); + $iDbCrm->insert('logs', $tabInsert); + } + } + //Authentification de l'utilisateur + else + { + $ref='OK'; + //Identification utilisateur + $connected = true; + + $result->connected = $connected; + $result->login = $this->User->login; + $result->id = $this->User->id; + $result->idClient = $this->User->idClient; + $result->email = $this->User->email; + $result->typeCompte = $this->User->typeCompte; + $result->filtre_ip = $this->User->filtre_ip; + $result->ipPasserelle = $this->User->ipConnexion; + $result->ipConnexion = $ipUtilisateur; + $result->civilite = $this->User->civilite; + $result->nom = $this->User->nom; + $result->prenom = $this->User->prenom; + $result->raisonSociale = $this->User->raisonSociale; + $result->siret = $this->User->siret; + $result->adrNum = $this->User->adrNum; + $result->adrIndRep = $this->User->adrIndRep; + $result->adrTypeVoie = $this->User->adrTypeVoie; + $result->adrLibVoie = $this->User->adrLibVoie; + $result->adrCp = $this->User->adrCp; + $result->adrVille = $this->User->adrVille; + $result->adrComp = $this->User->adrComp; + $result->tel = $this->User->tel; + $result->fax = $this->User->fax; + $result->mobile = $this->User->mobile; + $result->pref = $this->User->pref; + $result->profil = $this->User->profil; + $result->dateInscription = $this->User->dateInscription; + $result->dateValidation = $this->User->dateValidation; + $result->nombreConnexions = $this->User->nombreConnexions; + $result->dateDerniereConnexion = $this->User->dateDerniereConnexion; + $result->droits = $this->User->droits; + $result->droitsClients = $this->User->droitsClients; + $result->timeout = $this->User->timeout; + $result->clientTest = $this->User->clientTest; + $result->typeScore = $this->User->typeScore; + $result->nbReponses = $this->User->nbReponses; + $result->formatMail = $this->User->formatMail; + $result->reference = $this->User->referenceParDefaut; + $result->dateDebutCompte = $this->User->dateDebutCompte; + $result->dateFinCompte = $this->User->dateFinCompte; + $result->maxFicheId = $this->User->maxFicheId; + $result->typeScore = $this->User->typeScore; + $result->acceptationCGU = $this->User->acceptationCGU; + + // On log l'accès à l'authentification + if ( $this->User->clientTest=='Oui' || $this->User->typeCompte=='TEST' ) { + $test = 1; + } else { + $test = 0; + } + $tabInsert = array( + 'login' => $this->User->login, + 'idClient' => $this->User->idClient, + 'page' => 'infosLogin', + 'params' => $ref, + 'test' => $test, + 'ipClient' => $ipUtilisateur + ); + $iDbCrm = new WDB('sdv1'); + $iDbCrm->insert('logs', $tabInsert); + + //Date de dernière connexion + $iDbCrm->update('utilisateurs', + array('dateDerniereConnexion'=> date('Y-m-d H:i:s')), + "idClient=".$this->User->idClient." AND login='".$this->User->login."'" + ); + } + + //Retour + $output = new InfosLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + + /** + * Mise à jour des informations du profil connecté + * @param string $login + * @param string $action (delete|enable|disable|changepwd|new|update) + * @param string $infos + * @return boolean + */ + public function setInfosLogin($login, $action, $infos = null) + { + $this->authenticate(); + //Initialisation + $result = false; + + $infos = json_decode($infos, true); + + switch($action) + { + case 'delete': + + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') { + $tabUpdate = array( 'deleted' => 1, 'dateUpdate' => date('Y-m-d H:i:s') ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'")){ + $result = true; + } + } + break; + + case 'enable': + case 'disable': + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') { + $actif = 1; + if ($action=='disable') { + $actif = 0; + } + $tabUpdate = array( 'actif' => $actif, 'dateUpdate' => date('YmdHis') ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'")){ + $result = true; + } + } + + break; + + case 'changepwd': + + $tabUpdate = array( + 'password' => stripslashes($infos['password']), + 'dateUpdate' => date('Y-m-d H:i:s') + ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'", true)){ + $result = true; + } + + break; + + case 'new': + + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') + { + $tabUpdate = array(); + + $idClient = $this->User->idClient; + if ( $this->User->profil=='SuperAdministrateur' && $infos['idClient']!=''){ + $idClient = $infos['idClient']; + } + $tabUpdate['idClient'] = $idClient; + + $tabUpdate['login'] = $login; + $tabUpdate['email'] = strtolower(stripslashes($infos['email'])); + $tabUpdate['password'] = stripslashes($infos['password']); + $tabUpdate['actif'] = 0; + $tabUpdate['deleted'] = 0; + + $typeCompte = 'PROD'; + if ( $this->User->profil=='SuperAdministrateur' && $infos['typeCompte']=='TEST'){ + $typeCompte = 'TEST'; + } + $tabUpdate['typeCompte'] = $typeCompte; + + //@todo : See issue #0001209 + /* + if ($this->User->profil=='SuperAdministrateur' && !empty($infos['filtre_ip'])) { + $tabUpdate['filtre_ip'] = $infos['filtre_ip']; + } else { + $rep = $iDbCrm->select('clients', 'filtre_ip', "id='$idClinet'",false, MYSQL_ASSOC); + $tabUpdate['filtre_ip'] = $rep[0]['filtre_ip']; + } + */ + //$tabUpdate['civilite'] = 'M'; + $tabUpdate['nom'] = stripslashes($infos['nom']); + $tabUpdate['prenom'] = stripslashes($infos['prenom']); + //$tabUpdate['raisonSociale'] = ''; + //$tabUpdate['siret'] = 00000000; + //adrNum + //adrIndRep + //adrTypeVoie + //adrLibVoie + //adrCp + //adrVille + //adrComp + $tabUpdate['tel'] = stripslashes($infos['tel_fix']); + $tabUpdate['fax'] = stripslashes($infos['tel_fax']); + $tabUpdate['mobile'] = stripslashes($infos['tel_mob']); + $tabUpdate['pref'] = implode(' ',$infos['pref']); + $tabUpdate['profil'] = (isset($infos['profil']) + || !in_array($infos->profil, array('SuperAdministrateur','Administrateur', 'Utilisateur')) ) ? + $infos['profil'] : 'Utilisateur'; + //dateInscription + //dateValidation + //nombreConnexions 0 + //dateDerniereConnexion + $tabUpdate['droits'] = implode(' ', $infos['droits']); + $tabUpdate['referenceParDefaut'] = stripslashes($infos['reference']); + $tabUpdate['nbReponses'] = $infos['nbReponses']; + + if ($this->User->profil=='SuperAdministrateur') { + $tabUpdate['formatMail'] = $infos['formatMail']; + $tabUpdate['lienExtranetMail'] = $infos['lienExtranetMail']; + $tabUpdate['listeEven'] = $infos['listeEven']; + $tabUpdate['dateDebutCompte'] = $infos['dateDebutCompte']; + $tabUpdate['dateFinCompte'] = $infos['dateFinCompte']; + $tabUpdate['accesWS'] = $infos['accesWS']; + $tabUpdate['rechRefType'] = $infos['rechRefType']; + } + //lienSurvFic + //idSurvFic + //loginCptSurvFic + + $tabUpdate['dateInsert'] = date('YmdHis'); + //dateUpdate => MySql automatic update + + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->insert('utilisateurs', $tabUpdate)){ + $result = true; + } + } + + break; + + case 'update': + + //Don't update password if nothind is send + if (!empty($infos['password'])){ + $tabUpdate['password'] = stripslashes($infos['password']); + } + + //Only this data could be updated by the user himself + $tabUpdate['email'] = stripslashes($infos['email']); + $tabUpdate['tel'] = stripslashes($infos['tel_fix']); + $tabUpdate['fax'] = stripslashes($infos['tel_fax']); + $tabUpdate['mobile'] = stripslashes($infos['tel_mb']); + $tabUpdate['nbReponses'] = $infos['nbReponses']; + $tabUpdate['pref'] = implode(' ',$infos['pref']); + + //User with Administrateur or SuperAdministrateur can update these data + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') + { + $tabUpdate['droits'] = implode(' ', $infos['droits']); + $tabUpdate['nom'] = stripslashes($infos['nom']); + $tabUpdate['prenom'] = stripslashes($infos['prenom']); + $tabUpdate['referenceParDefaut'] = stripslashes($infos['reference']); + $tabUpdate['profil'] = isset($infos['profil']) ? $infos['profil'] : 'Utilisateur'; + } + + //Only update as SuperAdministrateur + if ($this->User->profil=='SuperAdministrateur') + { + $typeCompte = 'PROD'; + if ( $this->User->profil=='SuperAdministrateur' && $infos['typeCompte']=='TEST'){ + $typeCompte = 'TEST'; + } + $tabUpdate['typeCompte'] = $typeCompte; + + $formatMail = 'txt1'; + if ( !empty($infos['formatMail']) ) { + $formatMail = $infos['formatMail']; + } + $tabUpdate['formatMail'] = $formatMail; + + if (array_key_exists('lienExtranetMail', $infos) && !empty($infos['lienExtranetMail'])) { + $tabUpdate['lienExtranetMail'] = $infos['lienExtranetMail']; + } + + if (array_key_exists('listeEven', $infos) && !empty($infos['listeEven'])) { + $tabUpdate['listeEven'] = $infos['listeEven']; + } + + if (array_key_exists('dateDebutCompte', $infos) && !empty($infos['dateDebutCompte'])) { + $tabUpdate['dateDebutCompte'] = $infos['dateDebutCompte']; + } + + if (array_key_exists('dateFinCompte', $infos) && !empty($infos['dateFinCompte'])) { + $tabUpdate['dateFinCompte'] = $infos['dateFinCompte']; + } + + if (array_key_exists('accesWS', $infos) && !empty($infos['accesWS'])) { + $tabUpdate['accesWS'] = $infos['accesWS']; + } + + $rechRefType = 'UTI'; + if (array_key_exists('rechRefType', $infos) && !empty($infos['rechRefType'])) { + $rechRefType = $infos['rechRefType']; + } + $tabUpdate['rechRefType'] = $rechRefType; + + } + $tabUpdate['dateUpdate'] = date('YmdHis'); + + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'", true)){ + $result = true; + } + + break; + + default: $result = false; break; + } + + return $result; + } + + /** + * Obtention automatique d'un nouveau login pour un client + * @param string $login + * @return NextLoginReturn + */ + public function getNextLogin( $login ) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + if ($this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur') { + + /** Un administrateur veut créer un nouveau login **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('utilisateurs u, clients c', 'u.idClient, c.racineLogin, c.droits', "u.login='$login' AND u.idClient=c.id"); + $racine = $rep[0]['racineLogin']; + $idClient = $rep[0]['idClient']; + $droitsClients = $rep[0]['droits']; + $rep = $iDbCrm->select('utilisateurs', 'login, length(login) as taille', "login like '$racine%' group by login order by taille desc, login desc LIMIT 0,1"); + if (count($rep)==0) { + $racine.='1'; + } else { + $last_i = preg_replace("/\D/", '',$rep[0]['login'])*1; + $racine.= $last_i+1; + } + $result = new NextLoginResult(); + $result->racine = $racine; + $result->idClient = $idClient; + $result->droitsClients = $droitsClients; + + } else { + + $error->errnum = 0; + $error->errmsg = 'Acces non authorisé!'; + } + $output = new NextLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère la liste des clients ou les informations d'un client + * @param integer|boolean $idClient + * @param ClientFiltre $filtre + * @return ListeClientsReturn + */ + public function getListeClients($idClient=false, $filtre=null) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($idClient)) $idClient = false; + + $isAuthorized = false; + + if ($this->User->profil=='Administrateur' && + ($idClient=='false' || $idClient==$this->User->idClient)){ + $idClient = $this->User->idClient; + $isAuthorized = true; + } + + if ($this->User->profil<>'SuperAdministrateur'){ + $error->errnum = 1; + $error->errmsg = 'Profil non administrateur'; + } else { + $isAuthorized = true; + } + + if ($isAuthorized) + { + $strClient = ''; + + if (is_numeric($idClient)) $strClient.=" AND id='$idClient' "; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', + 'id, nom, actif, test, racineLogin, siren, nic, tva, editerFacture, fact_detail, fac_dest, fac_adr1, fac_adr2, fac_adr3, fac_email, fac_tel, fact_rib, liv_dest, liv_adr1, liv_adr2, liv_adr3, liv_email, liv_tel, droits, filtres_ip, dateInsert, dateUpdate, respComSD, typeContrat, dateSignature, typeAcces, typeScore, timeout, accesPieces, accesKbis, accesInvestigations, accesInternationnal, accesEnquetes, miseSousSurveillance, forfaitExtranetPeriode, forfaitExtranetMontant, reconductionAuto, remarque, forfaitPiecesNb, forfaitPiecesMt, forfaitPiecesDep, forfaitInvestigNb, forfaitInvestigMt, forfaitInvestigDep, tarifIndiscore', + "1 $strClient", + false, + MYSQL_ASSOC); + $tabRet = array(); + foreach ($rep as $uti) + { + $client = new Client(); + $client->idClient = $uti['id']; + $client->nom = $uti['nom']; + $client->actif = $uti['actif']; + $client->test = $uti['test']; + $client->racineLogin = $uti['racineLogin']; + $client->siren = $uti['siren']; + $client->nic = $uti['nic']; + $client->tva = $uti['tva']; + $client->editerFacture = $uti['editerFacture']; + $client->fact_detail = $uti['fact_detail']; + $client->fac_dest = $uti['fac_dest']; + $client->fac_adr1 = $uti['fac_adr1']; + $client->fac_adr2 = $uti['fac_adr2']; + $client->fac_adr3 = $uti['fac_adr3']; + $client->fac_email = $uti['fac_email']; + $client->fac_tel = $uti['fac_tel']; + $client->fact_rib = $uti['fact_rib']; + $client->liv_dest = $uti['liv_dest']; + $client->liv_adr1 = $uti['liv_adr1']; + $client->liv_adr2 = $uti['liv_adr2']; + $client->liv_adr3 = $uti['liv_adr3']; + $client->liv_email = $uti['liv_email']; + $client->liv_tel = $uti['liv_tel']; + $client->droits = strtolower($uti['droits']); + $client->timeout = $uti['timeout']; + $client->filtres_ip = $uti['filtres_ip']; + $client->dateInsert = $uti['dateInsert']; + $client->dateUpdate = $uti['dateUpdate']; + $client->respComSD = $uti['respComSD']; + $client->typeContrat = $uti['typeContrat']; + $client->dateSignature = $uti['dateSignature']; + $client->typeAcces = $uti['typeAcces']; + $client->typeScore = $uti['typeScore']; + $client->accesPieces = $uti['accesPieces']; + $client->accesKbis = $uti['accesKbis']; + $client->accesInvestigations = $uti['accesInvestigations']; + $client->accesInternationnal = $uti['accesInternationnal']; + $client->accesEnquetes = $uti['accesEnquetes']; + $client->miseSousSurveillance = $uti['miseSousSurveillance']; + $client->forfaitExtranetPeriode = $uti['forfaitExtranetPeriode']; + $client->forfaitExtranetMontant = $uti['forfaitExtranetMontant']; + $client->reconductionAuto = $uti['reconductionAuto']; + $client->remarque = $uti['remarque']; + $client->forfaitPiecesNb = $uti['forfaitPiecesNb']; + $client->forfaitPiecesMt = $uti['forfaitPiecesMt']; + $client->forfaitPiecesDep = $uti['forfaitPiecesDep']; + $client->forfaitInvestigNb = $uti['forfaitInvestigNb']; + $client->forfaitInvestigMt = $uti['forfaitInvestigMt']; + $client->forfaitInvestigDep = $uti['forfaitInvestigDep']; + $client->tarifIndiscore = $uti['tarifIndiscore']; + + $tabRet[] = $client; + } + } + $output = new ListeClientsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des droits + * @return ListeDroitsReturn[] + */ + public function getListeDroits() + { + $tabRet = array(); + foreach($this->listeDroits as $code => $desc){ + $droit = new ListeDroitsReturn(); + $droit->code = $code; + $droit->desc = $desc; + $tabRet[] = $droit; + } + return $tabRet; + } + + /** + * Retourne la liste des préférences + * @return ListePrefsReturn[] + */ + public function getListePrefs() + { + $tabRet = array(); + foreach($this->listePrefs as $code => $desc){ + $pref = new ListePrefsReturn(); + $pref->code = $code; + $pref->desc = $desc; + $tabRet[] = $pref; + } + return $tabRet; + } + + /** + * Récupère les informations du profil connecté + * @param string $login + * @param int $idClient + * @return ListeUtilisateursReturn + */ + public function getListeUtilisateurs($login, $idClient=null) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + if ($this->User->profil<>'Administrateur' && + $this->User->profil<>'SuperAdministrateur') + { + $error->errnum = 1; + $error->errmsg = 'Profil non administrateur'; + } else { + $iDbCrm = new WDB('sdv1'); + if (!isset($idClient)){ + $rep = $iDbCrm->select('utilisateurs', 'idClient', "login='$login'"); + $idClient = $rep[0][0]; + } + if ($idClient==-1){ + $error->errnum = 1; + $error->errmsg = 'idClient=0'; + } else { + $rep = $iDbCrm->select('utilisateurs', 'id, idClient, login, email, actif, nom, prenom, referenceParDefaut', "idClient='$idClient' AND deleted=0 ORDER BY login ASC", false, MYSQL_ASSOC); + foreach ($rep as $uti){ + $utilisateur = new Utilisateur(); + $utilisateur->idUti = $uti['id']; + $utilisateur->idClient= $uti['idClient']; + $utilisateur->login = $uti['login']; + $utilisateur->email = $uti['email']; + $utilisateur->actif= $uti['actif']; + $utilisateur->nom = $uti['nom']; + $utilisateur->prenom = $uti['prenom']; + $utilisateur->reference = $uti['referenceParDefaut']; + $tabRet[]= $utilisateur; + } + } + } + $output = new ListeUtilisateursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getLogsClients + * @param string $mois (Format : AAAA-MM ou AAAA/MM) + * @param int $detail + * @param int $idClient + * @param string $login + * @param int $all + * @return LogsClientsReturn + */ + public function getLogsClients($mois, $detail=0, $idClient=0, $login='', $all=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($detail)) $detail = 0; + if (empty($idClient)) $idClient = 0; + if (empty($login)) $login = ''; + if (empty($all)) $all = 0; + + $strDetail = $strClient = $strLogin=''; + + // Vue détaillée ou uniquement les infos payantes + if ($detail==0) { + $detail='Non'; + //$strDetail=" AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis' OR page LIKE 'indiscore%' OR page='privileges' OR page='commandeAsso') AND (params<>'' OR page LIKE 'indiscore%' AND tarifIndiscore<>0) AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + $strDetail = ' AND ( '; + $pages = array('greffe_actes', 'greffe_bilans', 'kbis', 'indiscore', 'indiscore2', 'indiscore3', 'rapport2', 'rapport3', 'privileges', 'privcumul'); + $totalPages = count($pages); + $i=0; + foreach( $pages as $page ) { + switch($page) + { + case 'greffe_actes': + case 'greffe_bilans': + $strDetail.= "(l.page = '".$page."' AND l.params<>'' AND (l.params NOT LIKE '%erreur%' OR l.params LIKE '%erreur 17%'))"; + break; + case 'kbis': + $strDetail.= "(l.page = '".$page."' AND l.params<>'' AND l.params<>'1/1/0//' AND l.params<>'0/1/0//')"; + break; + default: + $strDetail.= "(l.page = '".$page."')"; + break; + } + $i++; + if ( $i<$totalPages) { + $strDetail.= ' OR '; + } + } + $strDetail.= ' ) '; + } elseif($detail==1) { + $detail='Oui'; + } + + // On veut uniquement le client précis + if ($all && $this->User->profil=='SuperAdministrateur') { + $all = 'Oui'; + } else { + $all = 'Non'; + } + // Pas d'idClient mentionné ou tentative sur autre client et non SAD + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = " AND u.idClient=$idClient "; + + // On veut uniquement le login précis + if ($login!='') { + $strLogin=" AND l.login='$login' "; + } else { + $login='Non'; + } + + // Dates de début et de fin + $mois = strtr($mois, array('-'=>'','/'=>'')); + $annee = substr($mois,0,4); + $mois = substr($mois,4,2); + $dateDeb=date('Y-m-d', mktime(0,0,0,$mois,1,$annee)); + $dateFin=date('Y-m-t', mktime(0,0,0,$mois,15,$annee)); + + $c = Zend_Registry::get('config'); + $fichierCsv=$c->profil->path->files."/logs-$annee-$mois-$detail-$idClient-$login-$all.csv"; + + if (file_exists($fichierCsv) && + date('Ymd', filemtime($fichierCsv))==date('Ymd') && + filesize($fichierCsv)>60 ) { + $size=filesize($fichierCsv); + $erreur=false; + $tabNom=array(); + $cache=1; + } else { + @unlink($fichierCsv); + $sql="SELECT LOWER(l.login) as loginUti, page, l.siren, l.nic, l.params, l.dateHeure, u.idClient, c.nom, u.referenceParDefaut AS refUti + FROM `logs` l, utilisateurs u, clients c + WHERE 1 $strDetail $strClient $strLogin AND dateHeure BETWEEN '$dateDeb 00:00:00' AND '$dateFin 23:59:59' AND l.login=u.login AND u.idClient=c.id + GROUP BY l.login, l.siren, l.page, date(dateHeure), l.params + ORDER BY l.login ASC, l.dateHeure ASC"; + $fp = fopen($c->profil->path->cache."/logs-$annee-$mois-$detail-$idClient-$login-$all.sql", 'w'); + fwrite($fp, $sql.EOL); + fclose($fp); + exec("php ".$c->profil->path->batch."/sql2csv.php sdv1 ".$c->profil->path->cache."/logs-$annee-$mois-$detail-$idClient-$login-$all.sql $fichierCsv > /dev/null &"); + $size = $cache = 0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new LogsClients(); + $result->Url = $hostname."/fichier/logs/logs-$annee-$mois-$detail-$idClient-$login-$all.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + $output = new LogsClientsReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Création/Modification d'un client + * @param string $infos + * @return ClientReturn + */ + public function setClient($infos) + { + $this->authenticate(); + $result = false; + //Pas SuperAdministrateur + if ($this->User->profil!='SuperAdministrateur') { + throw new SoapFault(1, 'Profil insuffisant pour cette méthode'); + } else { + $infos = json_decode($infos); + + /** + * - Protéger les chaines de caractères + * - Gérer les champs select + */ + + $idClient = null; + $tabInfos = array(); + foreach($infos as $nom => $value) + { + switch($nom) + { + case 'idClient': + $idClient = $value; + break; + case 'nom': + $tabInfos['nom'] = $value; + break; + case 'actif': + $tabInfos['actif'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'test': + $tabInfos['test'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'racineLogin': + $tabInfos['racineLogin'] = $infos->racineLogin; + break; + case 'siren': + $tabInfos['siren'] = (int) $value; + break; + case 'nic': + $tabInfos['nic'] = (int) $value; + break; + case 'tva': + $tabInfos['tva'] = $value; + break; + case 'idClientFacture': + $tabInfos['idClientFacture'] = $value; + break; + case 'editerFacture': + $tabInfos['editerFacture'] = ($value=='Non') ? 'Non' : 'Oui'; + break; + case 'fact_detail': + $tabInfos['fact_detail'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'fac_dest': + $tabInfos['fac_dest'] = $value; + break; + case 'fac_adr1': + $tabInfos['fac_adr1'] = $value; + break; + case 'fac_adr2': + $tabInfos['fac_adr2'] = $value; + break; + case 'fac_adr3': + $tabInfos['fac_adr3'] = $value; + break; + case 'fac_email': + $tabInfos['fac_email'] = $value; + break; + case 'fac_tel': + $tabInfos['fac_tel'] = $value; + break; + case 'fact_rib': + if (in_array($value, array('BPOSTALE','CCOOP', 'CDNORD'))){ + $tabInfos['fact_rib'] = $value; + } + break; + case 'liv_dest': + $tabInfos['liv_dest'] = $value; + break; + case 'liv_adr1': + $tabInfos['liv_adr1'] = $value; + break; + case 'liv_adr2': + $tabInfos['liv_adr2'] = $value; + break; + case 'liv_adr3': + $tabInfos['liv_adr3'] = $value; + break; + case 'liv_email': + $tabInfos['liv_email'] = $value; + break; + case 'liv_tel': + $tabInfos['liv_tel'] = $value; + break; + case 'droits': + if (count($value)>0){ + $tabInfos['droits'] = strtolower(implode(' ',$value)); + } else { + $tabInfos['droits'] = array(); + } + break; + case 'filtres_ip': + $tabInfos['filtres_ip'] = $value; + break; + case 'typeContrat': + if (in_array($value, array('Contrat','Marché'))){ + $tabInfos['typeContrat'] = $value; + } + break; + case 'typeAcces': + if (in_array($value, array('userPassword','userPasswordIP', 'IP'))){ + $tabInfos['typeAcces'] = $value; + } + break; + case 'typeScore': + if (in_array($value, array('20','100'))){ + $tabInfos['typeScore'] = $value; + } + break; + case 'timeout': + if (!empty($value)){ + $tabInfos['timeout'] = $value; + } + break; + case 'accesPieces': + $tabInfos['accesPieces'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesKbis': + $tabInfos['accesKbis'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesInvestigations': + $tabInfos['value'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesInternationnal': + $tabInfos['accesInternationnal'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesEnquetes': + $tabInfos['accesEnquetes'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'miseSousSurveillance': + $tabInfos['miseSousSurveillance'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'forfaitExtranetPeriode': + if (in_array($value, array('Mensuel','Trimestriel','Semestriel', 'Annuel'))){ + $tabInfos['forfaitExtranetPeriode'] = $value; + } + break; + case 'forfaitExtranetMontant': + $tabInfos['forfaitExtranetMontant'] = $value; + break; + case 'reconductionAuto': + if ($value=='Non') { + $tabInfos['reconductionAuto'] = 'Non'; + } + break; + case 'remarque': + $tabInfos['remarque'] = $value; + break; + case 'forfaitPiecesNb': + $tabInfos['forfaitPiecesNb'] = $value; + break; + case 'forfaitPiecesMt': + $tabInfos['forfaitPiecesMt'] = $value; + break; + case 'forfaitPiecesDep': + $tabInfos['forfaitPiecesDep'] = $value; + break; + case 'forfaitInvestigNb': + $tabInfos['forfaitInvestigNb'] = $value; + break; + case 'forfaitInvestigMt': + $tabInfos['forfaitInvestigMt'] = $value; + break; + case 'forfaitInvestigDep': + $tabInfos['forfaitInvestigDep'] = $value; + break; + case 'tarifIndiscore': + $tabInfos['tarifIndiscore'] = $value; + break; + case 'InterSudLogin': + $tabInfos['InterSudLogin'] = $value; + break; + case 'InterSudPass': + $tabInfos['InterSudPass'] = $value; + break; + } + + } + + $iDbCrm = new WDB('sdv1'); + if (empty($idClient)){ + //Ajout + $tabInfos['dateInsert'] = date('Y-m-d H:i:s'); + $result = $iDbCrm->insert('clients', $tabInfos, true); + } else { + //Droits client actuel avant modification + if (isset($tabInfos['droits'])){ + $rep = $iDbCrm->select('clients', 'droits', "id='$idClient'", false, MYSQL_ASSOC); + $droitsPre = explode(' ', $rep[0]['droits']); + $droitsSui = explode(' ', $tabInfos['droits']); + //Détection suppression d'un droit client + if (count($droitsSui)0 ){ + foreach($droitsDiff as $droit){ + $query = "UPDATE utilisateurs set droits=TRIM(REPLACE(droits, '$droit', '')) WHERE idClient='$idClient'"; + $iDbCrm->query($query, true); + } + } + } + } + //Modification + $tabInfos['dateUpdate'] = date('Y-m-d H:i:s'); + if ($iDbCrm->update('clients', $tabInfos, "id='$idClient'", true)){ + $result = true; + } + } + } + $output = new ClientReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Création d'un modele pour le préremplisage des données utilisateurs + * @param integer $idClient + * @param string $nom + * @param ModeleUtilisateur $infos + * @return ModeleUtilisateurReturn + */ + protected function setUserModel($idClient, $nom, $infos) + { + $this->authenticate(); + } + + /** + * Get all user params (only for admin) + * @param string $login + * @return string + */ + public function getUser($login) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0901'); + } + try { + $userM = new Application_Model_Utilisateurs(); + $sql = $userM->select()->where('login = ?', $login); + $rowset = $userM->fetchRow($sql); + if ($rowset) { + $user = $rowset->toArray(); + return json_encode($user); + } else { + throw new SoapFault('1','Erreur'); + } + } catch (Zend_Db_Exception $e) { + throw new SoapFault('Database',$e->getMessage()); + } + } + + + /** + * Création/Modification d'utilisateurs + * @param integer $idClient + * @param SetUtilisateurs[] $users + * @return UtilisateursReturn + */ + protected function setUsers($idClient, $users) + { + $this->authenticate(); + $error = new ErrorType(); + $result = false; + //idClient existe + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', 'id, nom, actif, test, racineLogin, siren, nic, droits, filtres_ip, typeAcces, typeScore, accesPieces, accesKbis, accesInvestigations, accesInternationnal, accesEnquetes, miseSousSurveillance', "1 AND id='$idClient'", false, MYSQL_ASSOC); + if (count($rep)>0){ + $client = $rep[0]; + $idClient = $client['id']; + if (count($users)>0){ + foreach($users as $user){ + $tabInfos = array(); + $tabInfos['idClient'] = $idClient; + $tabInfos['login'] = $user->login; + $tabInfos['email'] = ''; + $tabInfos['password'] = $user->password; + $tabInfos['actif'] = ''; + //$tabInfos['deleted'] = ''; + + if (in_array($user->typeCompte, array('TEST', 'PROD'))){ + $tabInfos['typeCompte'] = $user->typeCompte; + } else { + $tabInfos['typeCompte'] = 'PROD'; + } + + //$tabInfos['filtre_ip'] = ''; + + //SetInfosLogin + $tabInfos['civilite'] = ''; + $tabInfos['nom'] = ''; + $tabInfos['prenom'] = ''; + + //Identique au client + $tabInfos['raisonSociale'] = ''; + $tabInfos['siret'] = ''; + $tabInfos['adrNum'] = ''; + $tabInfos['adrInRep'] = ''; + $tabInfos['adrTypeVoie'] = ''; + $tabInfos['adrLibVoie'] = ''; + $tabInfos['adrCp'] = ''; + $tabInfos['adrVille'] = ''; + $tabInfos['adrComp'] = ''; + $tabInfos['tel'] = ''; + $tabInfos['fax'] = ''; + $tabInfos['mobile'] = ''; + + $tabInfos['pref'] = ''; + + if (in_array($user->typeCompte, array('Administrateur', 'Utilisateur'))){ + $tabInfos['profil'] = $user->profil; + } else { + $tabInfos['profil'] = 'Utilisateur'; + } + /* + $tabInfos['dateInscription'] = ''; + $tabInfos['dateValidation'] = ''; + */ + + if (empty($user->droits)){ + $tabInfos['droits'] = $client->droits; + } else { + $tabInfos['droits'] = $user->droits; + } + $tabInfos['referenceParDefaut'] = ''; + $tabInfos['nbReponses'] = ''; + $tabInfos['listeEven'] = ''; + $tabInfos['maxFicheId'] = $user->maxFicheId; + + //$tabInfos['dateInsert'] = ''; + + if (empty($user->id)){ + $iDbCrm->insert('utilisateurs', $tabInfos); + } else { + $iDbCrm->update('utilisateurs', $tabInfos, "id='$user->id'"); + } + + } + } else { + $error->errnum = 1; + $error->errmsg = 'Aucun utilisateur'; + } + } else { + $error->errnum = 1; + $error->errmsg = 'Identifiant client inconnu!'; + } + $output = new UtilisateursReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Affecter aux utilisateurs les paramètres du client + * @param integer $idClient + * @param string $element + * @param string[] $utilisateurs + * @return boolean + */ + public function setClientsParamsOnUtilisateurs( $idClient , $element = null, $utilisateurs = null ) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0901'); + } + if (empty($element)){ + throw new SoapFault('Error', 'Erreur dans les paramètres'); + } + switch(strtolower($element)){ + //Mettre à jour les ips des utilisateurs en fonction de celles du client + case 'ip': + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', 'filtre_ip', "id='$idClient'", false, MYSQL_ASSOC); + if (count($rep)==0){ + throw new SoapFault('Error', 'Client inexistant'); + } + $data = array( + 'filtre_ip' => $rep[0]['filtre_ip'], + 'dateUpdate' => date('Y-m-d H:i:s'), + ); + $where = ' WHERE idClient='.$idClient; + if (!empty($utilisateurs) && is_array($utilisateurs->item)){ + $where.= ' AND login IN ('.join(',',$utilisateurs->item).')'; + } + if($iDbCrm->update('utilisateurs', $data, $where)){ + return true; + } + return false; + break; + } + } + + /** + * Enregistre l'acceptation des CGU pour une application + * @param string $application Nom de l'outil utilisé + * @return boolean + */ + public function setCGU($application = null) + { + $this->authenticate(); + $idUser = $this->User->id; + + try { + $userM = new Application_Model_Utilisateurs(); + $data = array('acceptationCGU' => date('YmdHis')); + $result = $userM->update($data, 'id='.$idUser); + } catch (Zend_Db_Exception $e) { + throw new SoapFault('Erreur', $e->getMessage()); + } catch (Zend_Exception $e) { + throw new SoapFault('Erreur', $e->getMessage()); + } + if ( 1 == $result ) { + return true; + } + return false; + } + + /** + * Definir la méthode de tarification + * @param string $log Nom de l'élément à facturer + * @param ClientTarif $tarif Informations de facturation + * @return boolean + */ + public function setClientTarif($log, $tarif) + { + /** + * Une tarification est toujours affecté à un élément $log. + * Celle ci est définie sur un compte client (tous les utilisateurs) ou un service, + * voir un seul utilisateur. + * Pour un type de facturation + * - Unitaire : Chaque élement est à facturer + * - Forfait limité : Si tarif unitaire>0 alors on applique le prix unitaire pour chaque + * dépassement, sinon on coupe + * - Forfait illimité : + */ + + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + $tarifM = new Application_Model_ClientsTarif(); + + if (!in_array($tarif->log, array_keys($this->listeDroits))) { + throw new SoapFault('ClientTarif', 'log inexistant'); + } + + if (!in_array($tarif->type, array('Unitaire','ForfaitLimit','ForfaitIllimit'))) { + throw new SoapFault('ClientTarif', 'Erreur type'); + } + + if (!in_array($tarif->terme, array('fin','debut'))) { + throw new SoapFault('ClientTarif', 'Erreur terme'); + } + + if (!in_array($tarif->doublon, array('jour','mois', 'period'))) { + throw new SoapFault('ClientTarif', 'Erreur doublon'); + } + + $time = mktime(0,0,0,substr($tarif->date,4,2), substr($tarif->date,6,2), substr($tarif->date,0,4)); + + $data = array( + 'idClient' => $tarif->idClient, + 'service' => $tarif->service, + 'login' => $tarif->login, + 'log' => $tarif->log, + 'type' => $tarif->type, + 'priceForfait' => $tarif->priceForfait, + 'priceUnit' => $tarif->priceUnit, + 'limit' => $tarif->limit, + 'dateDebut' => date('YmdHis', $time), + 'duree' => $tarif->duree, + 'terme' => $tarif->terme, + 'doublon' => $tarif->doublon, + ); + + if ($tarifM->insert($data)) { + return true; + } + return false; + } + + /** + * Retourne les tarifs + * @param integer $id IdClient + * @return ClientTarifReturn[] + */ + protected function getClientTarif($id) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + $tarifM = new Application_Model_ClientsTarif(); + + //Au client + $sql = $tarifM->select() + ->where('idClient=?', $id) + ->where("service=''") + ->where("login=''") + ->order('dateDebut DESC')->limit(1); + + //Au service + + + //Au login + + + } + +} \ No newline at end of file diff --git a/library/WsScore/Gestion/v0.3/Service.php b/library/WsScore/Gestion/v0.3/Service.php new file mode 100644 index 00000000..7ac71e70 --- /dev/null +++ b/library/WsScore/Gestion/v0.3/Service.php @@ -0,0 +1,2114 @@ +authIp = $ipUtilisateur; + + //Authenticate + $this->authenticate(); + + $error = new ErrorType(); + $result = new InfosLogin(); + + //Filtre IP + $filtre = trim($this->User->filtre_ip); + if ( !empty($filtre) && !checkPlagesIp($filtre, $ipUtilisateur) && APPLICATION_ENV!='development' ){ + debugLog('I',"getInfosLogin Adresse IP $ipUtilisateur non declaree pour le compte $login",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $this->sendError('0904'); + } + + debugLog('I',"getInfosLogin pour $login (IP=$ipUtilisateur)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + //L'utilisateur qui demande les informations est différent + if ($this->User->login!=$login && in_array($this->User->profil, array('Administrateur', 'SuperAdministrateur'))) + { + /** Un administrateur veut il des infos sur un login ? **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select( + 'utilisateurs u, clients c', + 'u.login, u.id, u.email, u.password, u.idClient, u.typeCompte, u.actif, u.filtre_ip, u.civilite, u.nom, u.prenom, u.tel, u.fax, u.mobile, u.profil, u.raisonSociale, u.siret, u.adrNum, u.adrIndRep, u.adrTypeVoie, u.adrLibVoie, u.adrCp, u.adrVille, u.adrComp, u.pref, u.profil, u.dateInscription, u.dateValidation, u.nombreConnexions, u.dateDerniereConnexion, u.droits, u.referenceParDefaut, u.nbReponses, u.lang, u.formatMail, u.dateDebutCompte, u.dateFinCompte, u.maxFicheId, c.droits AS droitsClients, c.test AS clientTest, c.timeout, c.typeScore AS typeScore', + "u.login='$login' AND u.idClient=c.id AND u.deleted=0", + false, MYSQL_ASSOC + ); + $tabRep = $rep[0]; + if (count($rep)>0) + { + $timeOutSec = $tabRep['timeout']; + if ($timeOutSec==0) $timeOutSec = 1800; + $result->login = $login; + $result->id = $tabRep['id']; + $result->email = $tabRep['email']; + $result->typeCompte = $tabRep['typeCompte']; + $result->idClient = $tabRep['idClient']; + $result->filtre_ip = $tabRep['filtre_ip']; + $result->civilite = $tabRep['civilite']; + $result->nom = $tabRep['nom']; + $result->prenom = $tabRep['prenom']; + $result->raisonSociale = $tabRep['raisonSociale']; + $result->siret = $tabRep['siret']; + $result->adrNum = $tabRep['adrNum']; + $result->adrIndRep = $tabRep['adrIndRep']; + $result->adrTypeVoie = $tabRep['adrTypeVoie']; + $result->adrLibVoie = $tabRep['adrLibVoie']; + $result->adrCp = $tabRep['adrCp']; + $result->adrVille = $tabRep['adrVille']; + $result->adrComp = $tabRep['adrComp']; + $result->tel = $tabRep['tel']; + $result->fax = $tabRep['fax']; + $result->mobile = $tabRep['mobile']; + $result->pref = $tabRep['pref']; + $result->profil = $tabRep['profil']; + $result->dateInscription = $tabRep['dateInscription']; + $result->dateValidation = $tabRep['dateValidation']; + $result->nombreConnexions = $tabRep['nombreConnexions']; + $result->dateDerniereConnexion = $tabRep['dateDerniereConnexion']; + $result->droits = $tabRep['droits']; + $result->droitsClients = $tabRep['droitsClients']; + $result->timeout = $timeOutSec; + $result->clientTest = $tabRep['clientTest']; + $result->typeScore = $tabRep['typeScore']; + $result->nbReponses = $tabRep['nbReponses']; + $result->lang = $tabRep['lang']; + $result->formatMail = $tabRep['formatMail']; + $result->reference = $tabRep['referenceParDefaut']; + $result->dateDebutCompte = $tabRep['dateDebutCompte']; + $result->dateFinCompte = $tabRep['dateFinCompte']; + $result->maxFicheId = $tabRep['maxFicheId']; + } else { + /** On log l'erreur d'authentification **/ + $tabInsert = array( + 'login' => $login, + 'page' => 'infosLogin', + 'params' => 'Erreur Login/Password', + 'ipClient' => $ipUtilisateur + ); + $iDbCrm->insert('logs', $tabInsert); + } + } + //Authentification de l'utilisateur + else + { + $ref='OK'; + //Identification utilisateur + $connected = true; + + $result->connected = $connected; + $result->login = $this->User->login; + $result->id = $this->User->id; + $result->idClient = $this->User->idClient; + $result->email = $this->User->email; + $result->typeCompte = $this->User->typeCompte; + $result->filtre_ip = $this->User->filtre_ip; + $result->ipPasserelle = $this->User->ipConnexion; + $result->ipConnexion = $ipUtilisateur; + $result->civilite = $this->User->civilite; + $result->nom = $this->User->nom; + $result->prenom = $this->User->prenom; + $result->raisonSociale = $this->User->raisonSociale; + $result->siret = $this->User->siret; + $result->adrNum = $this->User->adrNum; + $result->adrIndRep = $this->User->adrIndRep; + $result->adrTypeVoie = $this->User->adrTypeVoie; + $result->adrLibVoie = $this->User->adrLibVoie; + $result->adrCp = $this->User->adrCp; + $result->adrVille = $this->User->adrVille; + $result->adrComp = $this->User->adrComp; + $result->tel = $this->User->tel; + $result->fax = $this->User->fax; + $result->mobile = $this->User->mobile; + $result->pref = $this->User->pref; + $result->profil = $this->User->profil; + $result->dateInscription = $this->User->dateInscription; + $result->dateValidation = $this->User->dateValidation; + $result->nombreConnexions = $this->User->nombreConnexions; + $result->dateDerniereConnexion = $this->User->dateDerniereConnexion; + // v2 auth return an array + if ( is_array($this->User->droits) ) { + $result->droits = join(' ', $this->User->droits); + } else { + $result->droits = $this->User->droits; + } + $result->droitsClients = $this->User->droitsClients; + $result->timeout = $this->User->timeout; + $result->clientTest = $this->User->clientTest; + $result->typeScore = $this->User->typeScore; + $result->nbReponses = $this->User->nbReponses; + $result->lang = $this->User->lang; + $result->formatMail = $this->User->formatMail; + $result->reference = $this->User->referenceParDefaut; + $result->dateDebutCompte = $this->User->dateDebutCompte; + $result->dateFinCompte = $this->User->dateFinCompte; + $result->maxFicheId = $this->User->maxFicheId; + $result->typeScore = $this->User->typeScore; + $result->acceptationCGU = $this->User->acceptationCGU; + + // On log l'accès à l'authentification + if ( $this->User->clientTest=='Oui' || $this->User->typeCompte=='TEST' ) { + $test = 1; + } else { + $test = 0; + } + $tabInsert = array( + 'login' => $this->User->login, + 'idClient' => $this->User->idClient, + 'page' => 'infosLogin', + 'params' => $ref, + 'test' => $test, + 'ipClient' => $ipUtilisateur + ); + $iDbCrm = new WDB('sdv1'); + $iDbCrm->insert('logs', $tabInsert); + + //Date de dernière connexion + $iDbCrm->update('utilisateurs', + array('dateDerniereConnexion'=> date('Y-m-d H:i:s')), + "idClient=".$this->User->idClient." AND login='".$this->User->login."'" + ); + } + + //Retour + $output = new InfosLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Recherche de login + * @param string $idClient + * @param string $query + * @return string + */ + public function searchLogin($idClient, $query) + { + $this->authenticate(); + + $userM = new Application_Model_Sdv1Utilisateurs(); + $sql = $userM->select() + ->from($userM, array('id','login','actif','deleted')) + ->where('idClient=?', $idClient) + ->where('login LIKE "'.$query.'%"') + ->limit(20); + $result = $userM->fetchAll($sql); + + if ($result->count()>0) { + return json_encode($result->toArray()); + } + + return false; + } + + /** + * Mise à jour des informations du profil connecté + * @param string $login + * @param string $action (delete|enable|disable|changepwd|new|update) + * @param string $infos + * @return boolean + */ + public function setInfosLogin($login, $action, $infos = null) + { + $this->authenticate(); + + //Initialisation + $result = false; + $infos = json_decode($infos, true); + + //Get user infos + $userM = new Application_Model_Sdv1Utilisateurs(); + $row = $userM->select()->where('login=?',$login); + + //isExist + if ( null === $row ) { + throw new SoapFault('ERR', "User doesn't exist"); + } + + //isEditable + if ( $row->accesWS == 1 + && !in_array($this->User->profil, array('Administrateur', 'SuperAdministrateur')) ) { + throw new SoapFault('MSG', "User not editable"); + } + + //Make action + switch($action) { + + case 'delete': + + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') { + $tabUpdate = array( 'deleted' => 1, 'dateUpdate' => date('Y-m-d H:i:s') ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'")){ + $result = true; + } + } + break; + + case 'enable': + case 'disable': + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') { + $actif = 1; + if ($action=='disable') { + $actif = 0; + } + $tabUpdate = array( 'actif' => $actif, 'dateUpdate' => date('YmdHis') ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'")){ + $result = true; + } + } + + break; + + case 'changepwd': + + $tabUpdate = array( + 'password' => stripslashes($infos['password']), + 'dateUpdate' => date('Y-m-d H:i:s') + ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'", true)){ + $result = true; + } + + break; + + case 'new': + + if ( $this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') { + + $iDbCrm = new WDB('sdv1'); + $existLogin = $iDbCrm->select('utilisateurs', 'deleted', 'login="'.$login.'"', false, MYSQL_ASSOC); + if (count($existLogin)>0) { + $message = "Utilisateur existant dans le référentiel"; + if ($existLogin[0]['deleted']==1) { + $message.=" (supprimé)"; + } + throw new SoapFault('ERR', $message); + } + + $tabUpdate = array(); + + $idClient = $this->User->idClient; + if ( $this->User->profil=='SuperAdministrateur' && $infos['idClient']!=''){ + $idClient = $infos['idClient']; + } + $tabUpdate['idClient'] = $idClient; + + $tabUpdate['login'] = $login; + $tabUpdate['email'] = strtolower(stripslashes($infos['email'])); + $tabUpdate['password'] = stripslashes($infos['password']); + $tabUpdate['actif'] = 0; + $tabUpdate['deleted'] = 0; + + $typeCompte = 'PROD'; + if ( $this->User->profil=='SuperAdministrateur' && $infos['typeCompte']=='TEST'){ + $typeCompte = 'TEST'; + } + $tabUpdate['typeCompte'] = $typeCompte; + + //@todo : See issue #0001209 + /* + if ($this->User->profil=='SuperAdministrateur' && !empty($infos['filtre_ip'])) { + $tabUpdate['filtre_ip'] = $infos['filtre_ip']; + } else { + $rep = $iDbCrm->select('clients', 'filtre_ip', "id='$idClient'",false, MYSQL_ASSOC); + $tabUpdate['filtre_ip'] = $rep[0]['filtre_ip']; + } + */ + //$tabUpdate['civilite'] = 'M'; + $tabUpdate['nom'] = stripslashes($infos['nom']); + $tabUpdate['prenom'] = stripslashes($infos['prenom']); + //$tabUpdate['raisonSociale'] = ''; + //$tabUpdate['siret'] = 00000000; + //adrNum + //adrIndRep + //adrTypeVoie + //adrLibVoie + //adrCp + //adrVille + //adrComp + $tabUpdate['tel'] = stripslashes($infos['tel_fix']); + $tabUpdate['fax'] = stripslashes($infos['tel_fax']); + $tabUpdate['mobile'] = stripslashes($infos['tel_mob']); + $tabUpdate['pref'] = implode(' ',$infos['pref']); + $tabUpdate['profil'] = (isset($infos['profil']) + || !in_array($infos->profil, array('SuperAdministrateur','Administrateur', 'Utilisateur')) ) ? + $infos['profil'] : 'Utilisateur'; + //dateInscription + //dateValidation + //nombreConnexions 0 + //dateDerniereConnexion + $tabUpdate['droits'] = implode(' ', $infos['droits']); + $tabUpdate['referenceParDefaut'] = stripslashes($infos['reference']); + $tabUpdate['nbReponses'] = $infos['nbReponses']; + + $tabUpdate['lang'] = $infos['lang']; + + if ($this->User->profil=='SuperAdministrateur') { + $tabUpdate['formatMail'] = $infos['formatMail']; + $tabUpdate['lienExtranetMail'] = $infos['lienExtranetMail']; + $tabUpdate['listeEven'] = $infos['listeEven']; + $tabUpdate['dateDebutCompte'] = $infos['dateDebutCompte']; + $tabUpdate['dateFinCompte'] = $infos['dateFinCompte']; + $tabUpdate['accesWS'] = $infos['accesWS']; + $tabUpdate['rechRefType'] = $infos['rechRefType']; + } + //lienSurvFic + //idSurvFic + //loginCptSurvFic + + $tabUpdate['dateInsert'] = date('YmdHis'); + //dateUpdate => MySql automatic update + + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->insert('utilisateurs', $tabUpdate)){ + $result = true; + } + } + + break; + + case 'update': + + //Don't update password if nothing is send + if (!empty($infos['password'])){ + $tabUpdate['password'] = stripslashes($infos['password']); + } + + //Only this data could be updated by the user himself + $tabUpdate['email'] = stripslashes($infos['email']); + $tabUpdate['tel'] = stripslashes($infos['tel_fix']); + $tabUpdate['fax'] = stripslashes($infos['tel_fax']); + $tabUpdate['mobile'] = stripslashes($infos['tel_mb']); + $tabUpdate['nbReponses'] = $infos['nbReponses']; + if (!empty($infos['lang'])) { + $tabUpdate['lang'] = $infos['lang']; + } + + $tabUpdate['pref'] = implode(' ',$infos['pref']); + + //User with Administrateur or SuperAdministrateur can update these data + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') + { + $tabUpdate['droits'] = implode(' ', $infos['droits']); + $tabUpdate['nom'] = stripslashes($infos['nom']); + $tabUpdate['prenom'] = stripslashes($infos['prenom']); + $tabUpdate['referenceParDefaut'] = stripslashes($infos['reference']); + $tabUpdate['profil'] = isset($infos['profil']) ? $infos['profil'] : 'Utilisateur'; + } + + //Only update as SuperAdministrateur + if ($this->User->profil=='SuperAdministrateur') + { + $typeCompte = 'PROD'; + if ( $this->User->profil=='SuperAdministrateur' && $infos['typeCompte']=='TEST'){ + $typeCompte = 'TEST'; + } + $tabUpdate['typeCompte'] = $typeCompte; + + $formatMail = 'txt1'; + if ( !empty($infos['formatMail']) ) { + $formatMail = $infos['formatMail']; + } + $tabUpdate['formatMail'] = $formatMail; + + if (array_key_exists('lienExtranetMail', $infos) && !empty($infos['lienExtranetMail'])) { + $tabUpdate['lienExtranetMail'] = $infos['lienExtranetMail']; + } + + if (array_key_exists('listeEven', $infos) && !empty($infos['listeEven'])) { + $tabUpdate['listeEven'] = $infos['listeEven']; + } + + if (array_key_exists('dateDebutCompte', $infos) && !empty($infos['dateDebutCompte'])) { + $tabUpdate['dateDebutCompte'] = $infos['dateDebutCompte']; + } + + if (array_key_exists('dateFinCompte', $infos) && !empty($infos['dateFinCompte'])) { + $tabUpdate['dateFinCompte'] = $infos['dateFinCompte']; + } + + if (array_key_exists('accesWS', $infos) && !empty($infos['accesWS'])) { + $tabUpdate['accesWS'] = $infos['accesWS']; + } + + $rechRefType = 'UTI'; + if (array_key_exists('rechRefType', $infos) && !empty($infos['rechRefType'])) { + $rechRefType = $infos['rechRefType']; + } + $tabUpdate['rechRefType'] = $rechRefType; + + } + $tabUpdate['dateUpdate'] = date('YmdHis'); + + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'", true)){ + $result = true; + } + + break; + + default: $result = false; break; + } + + return $result; + } + + /** + * Obtention automatique d'un nouveau login pour un client + * @param int idClient + * @return NextLoginReturn + */ + public function getNextLogin( $idClient ) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + if ($this->User->profil=='Administrateur' + || $this->User->profil=='SuperAdministrateur') + { + /** Un administrateur veut créer un nouveau login **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients c', 'c.racineLogin, c.droits', "c.id='$idClient'"); + $racine = $rep[0]['racineLogin']; + $droitsClients = $rep[0]['droits']; + $rep = $iDbCrm->select('utilisateurs', 'login', "idClient='$idClient'"); + if (count($rep)==0) { + $racine.='1'; + } else { + $last_i = count($rep); + $cpt = 1; + while (true) { + $racine.= $last_i+$cpt; + $rep = $iDbCrm->select('utilisateurs', 'login', "idClient='$idClient' AND login='$racine'"); + if (count($rep)==0) break; + $cpt++; + } + } + $result = new NextLoginResult(); + $result->racine = $racine; + $result->idClient = $idClient; + $result->droitsClients = $droitsClients; + + } else { + + $error->errnum = 0; + $error->errmsg = 'Acces non authorisé!'; + } + $output = new NextLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère la liste des clients ou les informations d'un client + * @param integer|boolean $idClient + * @param ClientFiltre $filtre + * @return ListeClientsReturn + */ + public function getListeClients($idClient=false, $filtre=null) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($idClient)) $idClient = false; + + $isAuthorized = false; + + if ($this->User->profil=='Administrateur' && + ($idClient=='false' || $idClient==$this->User->idClient)){ + $idClient = $this->User->idClient; + $isAuthorized = true; + } + + if ($this->User->profil<>'SuperAdministrateur'){ + $error->errnum = 1; + $error->errmsg = 'Profil non administrateur'; + } else { + $isAuthorized = true; + } + + if ($isAuthorized) + { + $strClient = ''; + + if (is_numeric($idClient)) $strClient.=" AND id='$idClient' "; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', + 'id, nom, actif, test, racineLogin, siren, nic, tva, editerFacture, fact_detail, fac_dest, fac_adr1, fac_adr2, fac_adr3, fac_email, fac_tel, fact_rib, liv_dest, liv_adr1, liv_adr2, liv_adr3, liv_email, liv_tel, droits, filtres_ip, dateInsert, dateUpdate, respComSD, typeContrat, dateSignature, typeAcces, typeScore, timeout, accesPieces, accesKbis, accesInvestigations, accesInternationnal, accesEnquetes, miseSousSurveillance, forfaitExtranetPeriode, forfaitExtranetMontant, reconductionAuto, remarque, forfaitPiecesNb, forfaitPiecesMt, forfaitPiecesDep, forfaitInvestigNb, forfaitInvestigMt, forfaitInvestigDep, tarifIndiscore', + "1 $strClient", + false, + MYSQL_ASSOC); + $tabRet = array(); + foreach ($rep as $uti) + { + $client = new Client(); + $client->idClient = $uti['id']; + $client->nom = $uti['nom']; + $client->actif = $uti['actif']; + $client->test = $uti['test']; + $client->racineLogin = $uti['racineLogin']; + $client->siren = $uti['siren']; + $client->nic = $uti['nic']; + $client->tva = $uti['tva']; + $client->editerFacture = $uti['editerFacture']; + $client->fact_detail = $uti['fact_detail']; + $client->fac_dest = $uti['fac_dest']; + $client->fac_adr1 = $uti['fac_adr1']; + $client->fac_adr2 = $uti['fac_adr2']; + $client->fac_adr3 = $uti['fac_adr3']; + $client->fac_email = $uti['fac_email']; + $client->fac_tel = $uti['fac_tel']; + $client->fact_rib = $uti['fact_rib']; + $client->liv_dest = $uti['liv_dest']; + $client->liv_adr1 = $uti['liv_adr1']; + $client->liv_adr2 = $uti['liv_adr2']; + $client->liv_adr3 = $uti['liv_adr3']; + $client->liv_email = $uti['liv_email']; + $client->liv_tel = $uti['liv_tel']; + $client->droits = strtolower($uti['droits']); + $client->timeout = $uti['timeout']; + $client->filtres_ip = $uti['filtres_ip']; + $client->dateInsert = $uti['dateInsert']; + $client->dateUpdate = $uti['dateUpdate']; + $client->respComSD = $uti['respComSD']; + $client->typeContrat = $uti['typeContrat']; + $client->dateSignature = $uti['dateSignature']; + $client->typeAcces = $uti['typeAcces']; + $client->typeScore = $uti['typeScore']; + $client->accesPieces = $uti['accesPieces']; + $client->accesKbis = $uti['accesKbis']; + $client->accesInvestigations = $uti['accesInvestigations']; + $client->accesInternationnal = $uti['accesInternationnal']; + $client->accesEnquetes = $uti['accesEnquetes']; + $client->miseSousSurveillance = $uti['miseSousSurveillance']; + $client->forfaitExtranetPeriode = $uti['forfaitExtranetPeriode']; + $client->forfaitExtranetMontant = $uti['forfaitExtranetMontant']; + $client->reconductionAuto = $uti['reconductionAuto']; + $client->remarque = $uti['remarque']; + $client->forfaitPiecesNb = $uti['forfaitPiecesNb']; + $client->forfaitPiecesMt = $uti['forfaitPiecesMt']; + $client->forfaitPiecesDep = $uti['forfaitPiecesDep']; + $client->forfaitInvestigNb = $uti['forfaitInvestigNb']; + $client->forfaitInvestigMt = $uti['forfaitInvestigMt']; + $client->forfaitInvestigDep = $uti['forfaitInvestigDep']; + $client->tarifIndiscore = $uti['tarifIndiscore']; + + $tabRet[] = $client; + } + } + $output = new ListeClientsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des droits + * @return ListeDroitsReturn[] + */ + public function getListeDroits() + { + $tabRet = array(); + foreach($this->listeDroits as $code => $desc){ + $droit = new ListeDroitsReturn(); + $droit->code = $code; + $droit->desc = $desc; + $tabRet[] = $droit; + } + return $tabRet; + } + + /** + * Catégorie des accès + * @param string $code + * @return ListCategoryReturn[] + */ + public function getCategory($code = null) + { + $tabRet = array(); + foreach($this->listeCategory as $code => $desc){ + $c = new ListCategoryReturn(); + $c->code = $code; + $c->desc = $desc['label']; + $c->droits = $desc['droits']; + $tabRet[] = $c; + } + return $tabRet; + } + + + /** + * Retourne la liste des préférences + * @return ListePrefsReturn[] + */ + public function getListePrefs() + { + $tabRet = array(); + foreach ( $this->listePrefs as $code => $desc ) { + $pref = new ListePrefsReturn(); + $pref->code = $code; + $pref->desc = $desc; + $tabRet[] = $pref; + } + return $tabRet; + } + + /** + * Retourne la liste des logs + * @return ListeLogsReturn[] + */ + public function getLogs() + { + $tabRet = array(); + foreach ( $this->logs as $code => $desc ) { + $log = new ListeLogsReturn(); + $log->code = $code; + $log->desc = $desc['label']; + $tabRet[] = $log; + } + return $tabRet; + } + + /** + * Récupère les informations du profil connecté + * @param string $login + * @param int $idClient + * @return ListeUtilisateursReturn + */ + public function getListeUtilisateurs($login, $idClient=null) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + if ($this->User->profil<>'Administrateur' && + $this->User->profil<>'SuperAdministrateur') + { + $error->errnum = 1; + $error->errmsg = 'Profil non administrateur'; + } else { + $iDbCrm = new WDB('sdv1'); + if (!isset($idClient)){ + $rep = $iDbCrm->select('utilisateurs', 'idClient', "login='$login'"); + $idClient = $rep[0][0]; + } + if ($idClient==-1) { + $error->errnum = 1; + $error->errmsg = 'idClient=0'; + } else { + $rep = $iDbCrm->select( + 'utilisateurs', + 'id, idClient, login, email, actif, nom, prenom, referenceParDefaut', + "idClient='$idClient' AND deleted=0 ORDER BY login ASC", + false, MYSQL_ASSOC); + foreach ($rep as $uti){ + $utilisateur = new Utilisateur(); + $utilisateur->idUti = $uti['id']; + $utilisateur->idClient= $uti['idClient']; + $utilisateur->login = $uti['login']; + $utilisateur->email = $uti['email']; + $utilisateur->actif= $uti['actif']; + $utilisateur->nom = $uti['nom']; + $utilisateur->prenom = $uti['prenom']; + $utilisateur->reference = $uti['referenceParDefaut']; + $tabRet[]= $utilisateur; + } + } + } + $output = new ListeUtilisateursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getLogsClients + * @param string $mois (Format : AAAA-MM ou AAAA/MM) + * @param int $detail + * @param int $idClient + * @param string $login + * @param int $all + * @return LogsClientsReturn + */ + public function getLogsClients($mois, $detail=0, $idClient=0, $login='', $all=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($detail)) $detail = 0; + if (empty($idClient)) $idClient = 0; + if (empty($login)) $login = ''; + if (empty($all)) $all = 0; + + $strDetail = $strClient = $strLogin=''; + + // Vue détaillée ou uniquement les infos payantes + if ($detail==0) { + $detail='Non'; + //$strDetail=" AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis' OR page LIKE 'indiscore%' OR page='privileges' OR page='commandeAsso') AND (params<>'' OR page LIKE 'indiscore%' AND tarifIndiscore<>0) AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + $strDetail = ' AND ( '; + $pages = array('greffe_actes', 'greffe_bilans', 'kbis', 'indiscore', 'indiscore2', 'indiscore3', 'rapport2', 'rapport3', 'privileges', 'privcumul'); + $totalPages = count($pages); + $i=0; + foreach( $pages as $page ) { + switch($page) + { + case 'greffe_actes': + case 'greffe_bilans': + $strDetail.= "(l.page = '".$page."' AND l.params<>'' AND (l.params NOT LIKE '%erreur%' OR l.params LIKE '%erreur 17%'))"; + break; + case 'kbis': + $strDetail.= "(l.page = '".$page."' AND l.params<>'' AND l.params<>'1/1/0//' AND l.params<>'0/1/0//')"; + break; + default: + $strDetail.= "(l.page = '".$page."')"; + break; + } + $i++; + if ( $i<$totalPages) { + $strDetail.= ' OR '; + } + } + $strDetail.= ' ) '; + } elseif($detail==1) { + $detail='Oui'; + } + + // On veut uniquement le client précis + if ($all && $this->User->profil=='SuperAdministrateur') { + $all = 'Oui'; + } else { + $all = 'Non'; + } + // Pas d'idClient mentionné ou tentative sur autre client et non SAD + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = " AND u.idClient=$idClient "; + + // On veut uniquement le login précis + if ($login!='') { + $strLogin=" AND l.login='$login' "; + } else { + $login='Non'; + } + + // Dates de début et de fin + $mois = strtr($mois, array('-'=>'','/'=>'')); + $annee = substr($mois,0,4); + $mois = substr($mois,4,2); + $dateDeb=date('Y-m-d', mktime(0,0,0,$mois,1,$annee)); + $dateFin=date('Y-m-t', mktime(0,0,0,$mois,15,$annee)); + + $c = Zend_Registry::get('config'); + $fichierCsv=$c->profil->path->files."/logs-$annee-$mois-$detail-$idClient-$login-$all.csv"; + + if (file_exists($fichierCsv) + && date('Ymd', filemtime($fichierCsv))==date('Ymd') + && filesize($fichierCsv)>60 ) { + $size=filesize($fichierCsv); + $erreur=false; + $tabNom=array(); + $cache=1; + } else { + $sql = "SELECT LOWER(l.login) as loginUti, page, l.siren, l.nic, l.params, l.dateHeure, u.idClient, c.nom, u.referenceParDefaut AS refUti + FROM sdv1.logs l, sdv1.utilisateurs u, sdv1.clients c + WHERE 1 $strDetail $strClient $strLogin + AND dateHeure BETWEEN '$dateDeb 00:00:00' AND '$dateFin 23:59:59' + AND l.login=u.login AND u.idClient=c.id + ORDER BY l.login ASC, l.dateHeure ASC"; + file_put_contents($c->profil->path->cache."/logs-$annee-$mois-$detail-$idClient-$login-$all.sql", $sql); + exec("php ".$c->profil->path->batch."/sql2csv.php --sqlfile ".$c->profil->path->cache."/logs-$annee-$mois-$detail-$idClient-$login-$all.sql --csvfile $fichierCsv > /dev/null &"); + $size = $cache = 0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new LogsClients(); + $result->Url = $hostname."/fichier/logs/logs-$annee-$mois-$detail-$idClient-$login-$all.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + $output = new LogsClientsReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Création/Modification d'un client + * @param string $infos + * @return ClientReturn + */ + public function setClient($infos) + { + $this->authenticate(); + $result = false; + //Pas SuperAdministrateur + if ($this->User->profil!='SuperAdministrateur') { + throw new SoapFault(1, 'Profil insuffisant pour cette méthode'); + } else { + $infos = json_decode($infos); + + /** + * - Protéger les chaines de caractères + * - Gérer les champs select + */ + + $idClient = null; + $tabInfos = array(); + foreach($infos as $nom => $value) + { + switch($nom) + { + case 'idClient': + $idClient = $value; + break; + case 'nom': + $tabInfos['nom'] = $value; + break; + case 'actif': + $tabInfos['actif'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'test': + $tabInfos['test'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'racineLogin': + $tabInfos['racineLogin'] = $infos->racineLogin; + break; + case 'siren': + $tabInfos['siren'] = (int) $value; + break; + case 'nic': + $tabInfos['nic'] = (int) $value; + break; + case 'tva': + $tabInfos['tva'] = $value; + break; + case 'idClientFacture': + $tabInfos['idClientFacture'] = $value; + break; + case 'editerFacture': + $tabInfos['editerFacture'] = ($value=='Non') ? 'Non' : 'Oui'; + break; + case 'fact_detail': + $tabInfos['fact_detail'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'fac_dest': + $tabInfos['fac_dest'] = $value; + break; + case 'fac_adr1': + $tabInfos['fac_adr1'] = $value; + break; + case 'fac_adr2': + $tabInfos['fac_adr2'] = $value; + break; + case 'fac_adr3': + $tabInfos['fac_adr3'] = $value; + break; + case 'fac_email': + $tabInfos['fac_email'] = $value; + break; + case 'fac_tel': + $tabInfos['fac_tel'] = $value; + break; + case 'fact_rib': + if (in_array($value, array('BPOSTALE','CCOOP', 'CDNORD'))){ + $tabInfos['fact_rib'] = $value; + } + break; + case 'liv_dest': + $tabInfos['liv_dest'] = $value; + break; + case 'liv_adr1': + $tabInfos['liv_adr1'] = $value; + break; + case 'liv_adr2': + $tabInfos['liv_adr2'] = $value; + break; + case 'liv_adr3': + $tabInfos['liv_adr3'] = $value; + break; + case 'liv_email': + $tabInfos['liv_email'] = $value; + break; + case 'liv_tel': + $tabInfos['liv_tel'] = $value; + break; + case 'droits': + if (count($value)>0){ + $tabInfos['droits'] = strtolower(implode(' ',$value)); + } else { + $tabInfos['droits'] = array(); + } + break; + case 'filtres_ip': + $tabInfos['filtres_ip'] = trim($value, ';'); + break; + case 'typeContrat': + if (in_array($value, array('Contrat','Marché'))){ + $tabInfos['typeContrat'] = $value; + } + break; + case 'typeAcces': + if (in_array($value, array('userPassword','userPasswordIP', 'IP'))){ + $tabInfos['typeAcces'] = $value; + } + break; + case 'typeScore': + if (in_array($value, array('20','100'))){ + $tabInfos['typeScore'] = $value; + } + break; + case 'timeout': + if (!empty($value)){ + $tabInfos['timeout'] = $value; + } + break; + case 'accesPieces': + $tabInfos['accesPieces'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesKbis': + $tabInfos['accesKbis'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesInvestigations': + $tabInfos['value'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesInternationnal': + $tabInfos['accesInternationnal'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'accesEnquetes': + $tabInfos['accesEnquetes'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'miseSousSurveillance': + $tabInfos['miseSousSurveillance'] = ($value=='Oui') ? 'Oui' : 'Non' ; + break; + case 'forfaitExtranetPeriode': + if (in_array($value, array('Mensuel','Trimestriel','Semestriel', 'Annuel'))){ + $tabInfos['forfaitExtranetPeriode'] = $value; + } + break; + case 'forfaitExtranetMontant': + $tabInfos['forfaitExtranetMontant'] = $value; + break; + case 'reconductionAuto': + if ($value=='Non') { + $tabInfos['reconductionAuto'] = 'Non'; + } + break; + case 'remarque': + $tabInfos['remarque'] = $value; + break; + case 'forfaitPiecesNb': + $tabInfos['forfaitPiecesNb'] = $value; + break; + case 'forfaitPiecesMt': + $tabInfos['forfaitPiecesMt'] = $value; + break; + case 'forfaitPiecesDep': + $tabInfos['forfaitPiecesDep'] = $value; + break; + case 'forfaitInvestigNb': + $tabInfos['forfaitInvestigNb'] = $value; + break; + case 'forfaitInvestigMt': + $tabInfos['forfaitInvestigMt'] = $value; + break; + case 'forfaitInvestigDep': + $tabInfos['forfaitInvestigDep'] = $value; + break; + case 'tarifIndiscore': + $tabInfos['tarifIndiscore'] = $value; + break; + case 'InterSudLogin': + $tabInfos['InterSudLogin'] = $value; + break; + case 'InterSudPass': + $tabInfos['InterSudPass'] = $value; + break; + } + + } + + $iDbCrm = new WDB('sdv1'); + if (empty($idClient)){ + //Ajout + $tabInfos['dateInsert'] = date('Y-m-d H:i:s'); + $result = $iDbCrm->insert('clients', $tabInfos, true); + } else { + //Droits client actuel avant modification + if ( isset($tabInfos['droits']) ) { + $rep = $iDbCrm->select('clients', 'droits', "id='$idClient'", false, MYSQL_ASSOC); + $droitsPre = explode(' ', $rep[0]['droits']); + $droitsSui = explode(' ', $tabInfos['droits']); + //Détection suppression d'un droit client + if ( count($droitsSui)0 ){ + $this->_deleteAccess($droitsDiff, $idClient); + } + } + } + //Modification + $tabInfos['dateUpdate'] = date('Y-m-d H:i:s'); + if ($iDbCrm->update('clients', $tabInfos, "id='$idClient'", true)){ + $result = true; + } + } + } + $output = new ClientReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Get all user params (only for admin) + * @param string $login + * @return string + */ + public function getUser($login) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0901'); + } + try { + $userM = new Application_Model_Sdv1Utilisateurs(); + $sql = $userM->select()->where('login = ?', $login); + $rowset = $userM->fetchRow($sql); + if ($rowset) { + $user = $rowset->toArray(); + return json_encode($user); + } else { + throw new SoapFault('1','Erreur'); + } + } catch (Zend_Db_Exception $e) { + throw new SoapFault('Database',$e->getMessage()); + } + } + + /** + * Enregistre l'acceptation des CGU pour une application + * @param string $application Nom de l'outil utilisé + * @return boolean + */ + public function setCGU($application = null) + { + $this->authenticate(); + $idUser = $this->User->id; + + try { + $userM = new Application_Model_Sdv1Utilisateurs(); + $data = array('acceptationCGU' => date('YmdHis')); + $result = $userM->update($data, 'id='.$idUser); + } catch (Zend_Db_Exception $e) { + throw new SoapFault('Erreur', $e->getMessage()); + } catch (Zend_Exception $e) { + throw new SoapFault('Erreur', $e->getMessage()); + } + if ( 1 == $result ) { + return true; + } + return false; + } + + /** + * Definir la méthode de tarification + * @param int $idClient Nom de l'élément à facturer + * @param ClientTarif $tarif Informations de facturation + * @param int $id Identifiant pour l'update + * @return int + */ + public function setClientTarif($idClient, $tarif, $id=null) + { + /** + * Une tarification est toujours affecté à un élément $log. + * Celle ci est définie sur un compte client (tous les utilisateurs) ou un service, + * Pour un type de facturation + * - Unitaire : Chaque élement est à facturer + * - Forfait limité : Si tarif unitaire>0 alors on applique le prix unitaire pour chaque + * dépassement, sinon on coupe + * - Forfait illimité : + */ + + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + if (!in_array($tarif->log, array_keys($this->logs))) { + throw new SoapFault('ClientTarif', 'log inexistant'); + } + + if (!in_array($tarif->type, array('Unitaire','ForfaitLimit','ForfaitNoLimit'))) { + throw new SoapFault('ClientTarif', 'Erreur type'); + } + + if (!in_array($tarif->doublon, array('jour','mois', 'period','none'))) { + throw new SoapFault('ClientTarif', 'Erreur doublon'); + } + + $time = mktime(0,0,0,substr($tarif->date,4,2), substr($tarif->date,6,2), substr($tarif->date,0,4)); + + $data = array( + 'idClient' => $idClient, + 'service' => $tarif->service, + 'log' => $tarif->log, + 'type' => $tarif->type, + 'priceUnit' => $tarif->priceUnit, + 'limit' => $tarif->limit, + 'dateDebut' => date('Y-m-d H:i:s', $time), + 'duree' => $tarif->duree, + 'doublon' => $tarif->doublon, + ); + + try { + $tarifM = new Application_Model_Sdv1ClientsTarifs(); + if ( null === $id) { + $result = $tarifM->insert($data); + } else { + $result = $tarifM->update($data, 'id='.$id); + } + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + return $result; + } + + /** + * Get list of tarif + * @param int $idClient + * @param string $service + * @throws SoapFault + * @return ClientContrat[] + */ + public function getClientTarifs($idClient, $service = null) + { + $this->authenticate(); + + if ( null === $service ) { + $service = 'DEFAULT'; + } + + //Liste dateDebut-duree disponible + $tarifM = new Application_Model_Sdv1ClientsTarifs(); + try { + $sql = $tarifM->select()->from($tarifM,array( + 'dateDebut', + 'duree' + )) + ->where('service=?',$service) + ->order('dateDebut DESC') + ->group(array('dateDebut', 'duree')); + $contrats = $tarifM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $listeContrat = array(); + //Retrouver les éléments à facturer + if ( count($contrats)>0 ) { + foreach ( $contrats as $contrat ) { + try { + $sql = $tarifM->select() + ->where('idClient=?', $idClient) + ->where('service=?',$service) + ->where('dateDebut=?',$contrat->dateDebut) + ->where('duree=?',$contrat->duree); + $rows = $tarifM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $output = array(); + if ( $rows->count()>0 ) { + foreach ( $rows as $row ) { + $item = new ClientTarif(); + $item->id = $row->id; + $item->idClient = $row->idClient; + $item->service = $row->service; + $item->log = $row->log; + $item->type = $row->type; + $item->priceUnit = $row->priceUnit; + $item->limit = $row->limit; + $item->date = substr($row->dateDebut,0,10); + $item->duree = $row->duree; + $item->doublon = $row->doublon; + + $output[] = $item; + } + } + + $date = new Zend_Date($contrat->dateDebut, false); + $dateBegin = $date->toString('Y-MM-dd'); + $dateEnd = $date->add($contrat->duree, Zend_Date::DAY)->toString('YYYY-MM-dd'); + + $ElementContrat = new ClientContrat(); + $ElementContrat->dateBegin = $dateBegin; + $ElementContrat->dateEnd = $dateEnd; + $ElementContrat->tarifs = $output; + + $listeContrat[] = $ElementContrat; + } + } + + return $listeContrat; + } + + /** + * Get a tarif and his details by date + * @param string $log + * @param int $idClient + * @param string $service + * @param string $date + * @throws SoapFault + * @return ClientTarif + */ + public function getClientTarif($log, $idClient, $service='default', $date=null) + { + $this->authenticate(); + + if ( empty($service) ) { + $service = 'default'; + } + + //Date not define, looks for the actual price + if ( empty($date) ) { + + } + + try { + $tarifM = new Application_Model_Sdv1ClientsTarifs(); + $sql = $tarifM->select() + ->from($tarifM, array( + 'id', 'idClient', 'service', 'log', 'type', 'priceUnit', 'limit', 'dateDebut', + 'duree', 'doublon', 'DATE_ADD(dateDebut, INTERVAL duree DAY) AS dateFin' + )) + ->where('log=?',$log) + ->where('idClient=?', $idClient) + ->where('service=?',$service); + //->where('dateDebut<=?', $date); + //->where('dateFin>?',$date); + //@todo : get date between + + $row = $tarifM->fetchRow($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + return $row; + } + + /** + * Liste des prestations pour un client + * @param int $idClient + * @return ClientPrestation[] + * @throws SoapFault + */ + public function getPrestations($idClient) + { + $this->authenticate(); + + //Read prestations + try { + $prestationsM = new Application_Model_Sdv1Prestations(); + $sql = $prestationsM->select() + ->from($prestationsM, array('id', 'typeprestation', 'datemiseenplace', + 'datefinprestation' ,'identifiantPrestation', 'prestationactive')) + ->where('idClient=?', $idClient); + $result = $prestationsM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + $output = array(); + if ($result->count()>0) { + foreach ( $result as $item ) { + $clientprestation = new ClientPrestation(); + $clientprestation->id = $item->id; + $clientprestation->type = $item->typeprestation; + $clientprestation->identifiant = $item->identifiantPrestation; + $clientprestation->active = $item->prestationactive; + $clientprestation->dateDebut = $item->datemiseenplace; + $clientprestation->dateFin = $item->datefinprestation; + + $output[] = $clientprestation; + } + } + + return $output; + } + + + /** + * Liste des paramètres d'une prestation + * @param int $id + * @return string + * @throws SoapFault + */ + public function getPrestation($id) + { + $this->authenticate(); + + //Read prestations + try { + $prestationsM = new Application_Model_Sdv1Prestations(); + $sql = $prestationsM->select()->where('id=?', $id); + $result = $prestationsM->fetchRow($sql); + if ($result!==null) { + return json_encode($result->toArray()); + } else { + return ''; + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + } + + /** + * Enregistre les paramètres des la prestation + * @param int $idClient + * @param string $prestation + * @return int + * @throws SoapFault + */ + public function setPrestation($idClient, $prestation) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + $prestationParameters = json_decode($prestation, true); + + //Insert or update a prestation + try { + $prestationsM = new Application_Model_Sdv1Prestations(); + + //Update + if (!empty($prestationParameters['id'])) { + $id = $prestationParameters['id']; + unset($prestationParameters['id']); + $result = $prestationsM->update($prestationParameters, 'id='.$id); + } + + //Insert + else { + //@todo : Some control before save + + $result = $prestationsM->insert($prestationParameters); + } + + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + return $result; + } + + /** + * Define a Service in Client + * @param int $idClient + * @param string $infos + * @throws SoapFault + * @return int + */ + public function setService($idClient, $infos=null) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + try { + $serviceM = new Application_Model_Sdv1ClientsServices(); + + $dataIn = json_decode($infos, true); + $code = $dataIn['code']; + $label = $dataIn['label']; + $droits = $dataIn['droits']; + + //Check if code exist in idClient + $sql = $serviceM->select() + ->where('idClient=?',$idClient) + ->where('code=?',$code); + + $row = $serviceM->fetchAll($sql); + + if ($row->count()>0) { + $data = array( + 'label' => $label, + 'droits' => $droits + ); + $result = $serviceM->update($data, array('idClient='.$idClient, 'code='.$code)); + + //Delete + if ( isset($row->droits) ) { + $droitsPre = explode(' ', $row->droits); + $droitsSui = explode(' ', $droits); + //Détection suppression d'un droit client + if ( count($droitsSui)0 ){ + $this->_deleteAccess($droitsDiff, $idClient, $code); + } + } + } + } else { + $data = array( + 'code' => $code, + 'label' => $label, + 'droits' => $droits, + 'idClient' => $idClient + ); + $result = $serviceM->insert($data); + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return $result; + } + + /** + * Set a User in a Service + * @param string $login + * @param string $code + * @throws SoapFault + * @return int + */ + public function setUserService($login, $code) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + try { + $serviceM = new Application_Model_Sdv1UtilisateursService(); + + //Check if a login exist + $sql = $serviceM->select()->where('login=?',$login); + $row = $serviceM->fetchAll($sql); + + if ($row->count()>0) { + $data = array( + 'serviceCode' => $code, + ); + $result = $serviceM->update($data, 'login='.$login); + } else { + $data = array( + 'login' => $login, + 'serviceCode' => $code, + ); + $result = $serviceM->insert($data); + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + //Override login right access - always + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select()->where('code=?',$code); + $serviceInfo = $serviceM->fetchRow($sql); + if ( null !== $serviceInfo ) { + $userM = new Application_Model_Sdv1Utilisateurs(); + $userM->update(array('droits'=>$serviceInfo->droits), 'login='.$login); + } + + return $result; + } + + /** + * List Services + * @param int $idClient + * @throws SoapFault + * @return Service[] + */ + public function getServices($idClient) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + try { + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select() + ->where('idClient=?', $idClient) + ->order('label ASC'); + $rows = $serviceM->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + $output = array(); + if ($rows->count()>0) { + foreach($rows as $item) { + $service = new Service(); + $service->code = $item->code; + $service->label = $item->label; + $output[] = $service; + } + } + return $output; + } + + /** + * Get service parameters + * @param int $idClient + * @param string $code + * @throws SoapFault + * @return string|boolean + */ + public function getService($idClient, $code) + { + $this->authenticate(); + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + try { + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select() + ->where('idClient=?', $idClient) + ->where('serviceCode=?', $code); + $row = $serviceM->fetchRow($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + if (null !== $row) { + return json_encode($row->toArray()); + } + return false; + } + + /** + * Retourne la liste des utilisateurs par service + * @param int $idClient + * @param string $serviceCode + * @throws SoapFault + * @return Utilisateur[] + */ + public function getServiceUsers($idClient, $serviceCode=null) + { + $this->authenticate(); + + if ( null === $serviceCode ) { + $serviceCode = 'DEFAULT'; + } + + if ($this->User->profil!='SuperAdministrateur') { + $this->sendError('0902'); + } + + $output = array(); + + //Login by service + if ($serviceCode != 'DEFAULT') { + + //Check if service exist + try { + $servicesM = new Application_Model_Sdv1ClientsServices(); + $sql = $servicesM->select() + ->from($servicesM, array('code')) + ->where('idClient=?', $idClient); + $result = $servicesM->fetchAll($sql); + if ($result->count()==0) { + throw new SoapFault('ERR', 'Service inexistant'); + } + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + //List login + try { + $userserviceM = new Application_Model_Sdv1UtilisateursService(); + $sql = $userserviceM->select() + ->where('serviceCode=?', $serviceCode) + ->order('login ASC'); + $logins = $userserviceM->fetchAll($sql); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + + //Get login informations + $userM = new Application_Model_Sdv1Utilisateurs(); + + if ($logins->count()>0) { + foreach($logins as $login) { + $sql = $userM->select() + ->where('login=?', $login->login) + ->where('deleted=0'); + $result = $userM->fetchRow($sql); + $utilisateur = new Utilisateur(); + $utilisateur->idUti = $result->id; + $utilisateur->login = $result->login; + $utilisateur->actif = $result->actif; + $utilisateur->nom = $result->nom; + $utilisateur->prenom = $result->prenom; + $utilisateur->email = $result->email; + $utilisateur->reference = $result->reference; + $output[] = $utilisateur; + } + } + + } + + //Select all logins which have service to display only login without service + else { + + $servicesM = new Application_Model_Sdv1ClientsServices(); + $sql = $servicesM->select() + ->from($servicesM, array('code')) + ->where('idClient=?', $idClient); + $result = $servicesM->fetchAll($sql); + $codes = array(); + $notlogins = array(); + if ($result->count()>0) { + foreach ($result as $item) { + $codes[] = $item->code; + } + } + + if (count($codes)>0) { + + try { + $userserviceM = new Application_Model_Sdv1UtilisateursService(); + $sql = $userserviceM->select() + ->where('serviceCode IN ("'.join(',',$codes).'")'); + $result = $userserviceM->fetchAll($sql); + } catch (Zend_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + if ($result->count()>0) { + foreach ($result as $item) { + $notlogins[] = $item->login; + } + } + } + + $userM = new Application_Model_Sdv1Utilisateurs(); + if (count($notlogins)>0) { + $sql = $userM->select() + ->from($userM, array('id', 'login', 'actif', 'nom', 'prenom', 'email', 'referenceParDefaut')) + ->where('login NOT IN('.join(',',$notlogins).')') + ->where('idClient=?',$idClient) + ->where('deleted=0') + ->order('login ASC'); + } else { + $sql = $userM->select() + ->from($userM, array('id', 'login', 'actif', 'nom', 'prenom', 'email', 'referenceParDefaut')) + ->where('idClient=?',$idClient) + ->where('deleted=0') + ->order('login ASC'); + } + + $logins = $userM->fetchAll($sql); + + if ($logins->count()>0) { + foreach ($logins as $result) { + $utilisateur = new Utilisateur(); + $utilisateur->idUti = $result->id; + $utilisateur->login = $result->login; + $utilisateur->actif = $result->actif; + $utilisateur->nom = $result->nom; + $utilisateur->prenom = $result->prenom; + $utilisateur->email = $result->email; + $utilisateur->reference = $result->referenceParDefaut; + $output[] = $utilisateur; + } + } + } + + return $output; + } + + /** + * Override user params + * @param string $element + * @param int $idClient + * @param string $service + * @param string $login + * @throws SoapFault + * @return boolean + */ + public function setParam($element, $idClient, $service, $login=null) + { + $this->authenticate(); + + $element = strtoupper($element); + if ( !in_array($element, array('IP', 'ACCESS')) ) { + throw new SoapFault('ERR', 'Invalid parameters'); + } + + switch ($element) { + case 'IP': + break; + case 'ACCESS': + $logins = $this->_serviceLogins($idClient, $service); + + if ( $login !== null ) { + if ( !in_array($login,$logins) ) { + throw new SoapFault('ERR', "Login not found"); + } else { + $logins = array($login); + } + } + + if ( count($logins)>0 ) { + //Get access + if ($service == 'DEFAULT') { + $clientM = new Application_Model_Sdv1Clients(); + $sql = $clientM->select()->where('idClient=?', $idClient); + $row = $clientM->fetchRow($sql); + $droits = $row->droits; + } else { + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select()->where('code=?', $service); + $row = $serviceM->fetchRow($sql); + $droits = $row->droits; + } + //Override access + $userM = new Application_Model_Sdv1Utilisateurs(); + $result = $userM->update(array('droits'=>$droits), 'login IN ('.join(',',$logins).')'); + } + break; + } + + if (empty($result)) { + return false; + } + + return true; + } + + /** + * Override email(s) in surveillances + * @param string $login + * @param string $email + * @throws SoapFault + * @return int + */ + public function setSurveillancesMail($login, $email) + { + $this->authenticate(); + + try { + $surveillanceM = new Application_Model_JoSurveillancesSite(); + $result = $surveillanceM->update(array('email'=>$email), "login='$login'"); + } catch (Zend_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return $result; + } + + /** + * Set secondary email + * @param string $email + * @param string $login + * @param string $id Id pour edition (set) ou suppression (del) + * @param string $action (set|del) + * @throws SoapFault + * @return int + */ + public function setEmail($email, $login, $id = null, $action = 'set') + { + $this->authenticate(); + + $idClient = $this->User->idClient; + + if ( $action == 'set' ) { + + if ( $id === null ) { + + try { + $emailsM = new Application_Model_Sdv1UtilisateursEmails(); + $data = array( + 'email' => $email, + 'login' => $login, + 'idClient' => $idClient, + ); + $result = $emailsM->insert($data); + } catch (Zend_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + } else { + + try { + $emailsM = new Application_Model_Sdv1UtilisateursEmails(); + $data = array( + 'email' => $email, + ); + $result = $emailsM->update($data, array( + 'login="'.$login.'"', + 'idClient='.$idClient, + 'id='.$id, + )); + } catch (Zend_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + } + + } elseif ( $action == 'del' ) { + + try { + $emailsM = new Application_Model_Sdv1UtilisateursEmails(); + $result = $emailsM->delete(array( + 'login="'.$login.'"', + 'idClient='.$idClient, + 'id='.$id, + )); + } catch (Zend_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + } + + return $result; + } + + /** + * Secondary Emails + * @param string $login + * @param int $id + * @throws SoapFault + * @return Email[] + */ + public function getEmail($login, $id = null) + { + $this->authenticate(); + + $idClient = $this->User->idClient; + + try { + $emailsM = new Application_Model_Sdv1UtilisateursEmails(); + $sql = $emailsM->select() + ->where('login=?', $login) + ->where('idClient=?', $idClient); + $result = $emailsM->fetchAll($sql); + } catch (Zend_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $emails = array(); + if ( count($result)>0 ) { + foreach ( $result as $item ) { + $email = new Email(); + $email->id = $item->id; + $email->value = $item->email; + + $emails[] = $email; + } + } + + return $emails; + } + + /** + * Remove access to the children + * @param array $toDelete + * @param int $idClient + * @param string $service + */ + protected function _deleteAccess($toDelete, $idClient, $service=null) + { + $iDbCrm = new WDB('sdv1'); + $strLogin = ''; + + //Modification sur les droits des services + /*if ( count(toDelete)>0 ) { + foreach ($toDelete as $droit) { + $query = "UPDATE clients_services SET droits=TRIM(REPLACE(droits, ' $droit ', ' ')) WHERE idClient='$idClient'"; + $iDbCrm->query($query); + } + }*/ + + if (null !== $service) { + //Récupération des logins utilisateurs du service + $logins = $this->_serviceLogins($idClient, $service); + if (count($logins)>0) { + $strLogin = ' AND login IN('.join(',',$logins->toArray()).')'; + } + } + + //Modification sur les droits utilisateurs + if ( count(toDelete)>0 ) { + foreach ($toDelete as $droit) { + $query = "UPDATE utilisateurs set droits=TRIM(REPLACE(droits, ' $droit ', ' ')) WHERE idClient='$idClient'"; + $query.= $strLogin; + $iDbCrm->query($query); + } + } + } + + /** + * Give a list of logins in a service + * @param int $idClient + * @param string $serviceCode + * @return array + */ + protected function _serviceLogins($idClient, $serviceCode) + { + $serviceCode = strtoupper($serviceCode); + + $userM = new Application_Model_Sdv1Utilisateurs(); + $sql = $userM->select() + ->from(array('u'=>'utilisateurs'), array('login')) + ->join(array('s'=>'utilisateurs_service'), 'u.login=s.login'); + + if ($serviceCode == 'DEFAULT') { + $sql->where('serviceCode=?', null); + } else { + $sql->where('serviceCode=?', $serviceCode); + } + + $logins = $userM->fetchAll($sql)->toArray(); + + return $logins; + } + +} \ No newline at end of file diff --git a/library/WsScore/Gestion/v0.4/Service.php b/library/WsScore/Gestion/v0.4/Service.php new file mode 100644 index 00000000..9601c2aa --- /dev/null +++ b/library/WsScore/Gestion/v0.4/Service.php @@ -0,0 +1,1260 @@ +authApp = 'extranet'; + $this->authIp = $ip; + break; + case 'odea': + $this->authApp = 'odea'; + $this->authIp = $ip; + break; + case 'starlinks': + $this->authApp = 'starlinks'; + $this->authIp = $ip; + break; + } + + //Authentification des applications par login + $this->authenticate(); + + //Enregistrement authentification OK + try { + $authLogM = new Application_Model_Sdv1UtilisateursAuthLog(); + $authLogM->insert(array( + 'login' => $login, + 'authenticate' => 'OK', + 'ip' => $ip, + )); + } catch (Zend_Db_Exception $e) {} + + + //Check App authorization - Find Service parameters + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select() + ->where('IdClient=?', $this->User->idClient) + ->where('Code=?', $this->User->serviceCode); + $serviceParams = $serviceM->fetchRow($sql); + + //Save information in database + //id, clientId, userId, login, ip, userAgent, dateLogin + //Enregistrement informations navigateur uniquement si bien identifié + if ($browser !== null) { + try { + $browserLogM = new Application_Model_Sdv1UtilisateursBrowserLog(); + $browserLogM->insert(array( + 'idClient' => $this->User->idClient, + 'idUser' => $this->User->id, + 'service' => $this->User->serviceCode, + 'login' => $this->User->login, + 'authenticate' => 'OK', + 'ip' => $ip, + )); + } catch (Zend_Db_Exception $e) {} + } + + //Retourne un minimum d'information pour les applications + //login + //civilite + //nom + //prenom + //email + //profil + //pref + //droits + //typeScore + //acceptationCGU + + } + + /** + * Authentication by key + * @param string $app + */ + protected function keyAuthenticate($app) + { + //Authentification par clé - @define + $this->authApp = 'extranet'; + + //Reception du login + + //Reception de la clé (key:md5(login + '|' + key)) + + //Vérification nécessaire : application - enable - date debut - date fin + + + + } + + /** + * Authentication by SSO + * @param int $client + * @param string $login + * @param string $token + * @param AuthParam[] $params + * @throws SoapFault + * @return mixed + * Retourne FALSE or HASH to connect + */ + public function ssoAuthenticate($client, $login, $token, $params) + { + /** + * login ? + * nom@mon.tld => extract nom + */ + $part = strstr($login, '@', true); + if ($part !== false) { + $login = $part; + } + + /** + * Extract login from database + */ + try { + $userM = new Application_Model_Sdv1Utilisateurs(); + $sql = $userM->select() + ->setIntegrityCheck(false) + ->from(array('u'=>'utilisateurs'), array('u.id', 'u.login', 'u.idClient', 'u.actif',)) + ->join(array('c'=>'clients'), 'u.idClient = c.id', array('c.actif AS clientActif')) + ->joinLeft(array('s'=>'sdv1.utilisateurs_service'), 'u.login=s.login', array('Service AS serviceCode')) + ->where('u.login=?', $login) + ->where('c.id=?', $client); + $result = $userM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + /** + * Client disable + */ + if ( $result !== null && $result->clientActif == 'Non') { + throw new SoapFault('SSO', 'Compte client inactif'); //Client désactivé + } + + /** + * No user + */ + if ( null === $result ) { + return false; //Utilisateur inexistant + } + + /** + * User not activated + */ + if ( $result->actif == 0) { + throw new SoapFault('SSO', 'Utilisateur non activé'); //Utilisateur non activé + } + + /** + * Process token - uniquement compatible In Extenso + */ + $key = 'rh5s4z'; + $maxTime = time() + (15 * 60); + $time = 0; + $user = ''; + if (count($params->item) > 0) { + foreach ($params->item as $k => $param) { + if ($param->label == 'time') { + $time = $param->value; + } + if ($param->label == 'MAIL') { + $user = $param->value; + } + } + } + + /** + * Limite de temps + */ + if ($time > $maxTime) { + throw new SoapFault('SSO', 'Délai dépassé pour la connexion'); //Limite de temps dépassé pour la connexion + } + + /** + * Check token + */ + $data = $user . '/' . $time . '/' . $key; + $internalToken = hash('sha256', $data); + if ($internalToken == $token) { + //Generate random password + $hash = password_hash ( uniqid() , PASSWORD_BCRYPT ); + try { + $userM->update(array('password' => $hash), 'id='.$result->id); + } catch (Zend_Db_Exception $e) { + throw new SoapFault('SSO', "Activation de l'utilisateur impossible"); + } + return $hash; + } + + throw new SoapFault('SSO', 'Token invalide'); //Token invalide + } + + /** + * Liste des clients + * @throws SoapFault + * @return Client[] + */ + public function getClients() + { + $this->authenticate(); + + if ( $this->User->idClient != 1 ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + $clientM = new Application_Model_Sdv1Clients(); + $sql = $clientM->select(true)->columns(array( + 'nom AS Nom', + 'LPAD(siren,9,0) AS Siren', + 'LPAD(nic,5,0) AS Nic', + 'IF(actif="Oui",1,0) AS Actif', + 'IF(test="Oui",1,0) AS Test' + ))->where('actif=?', 'Oui'); + $result = $clientM->fetchAll($sql); + + if ( count($result) > 0 ) { + foreach ( $result as $item ) { + $client = new Client(); + $client->Nom = $item->Nom; + $client->Siren = $item->Siren; + $client->Nic = $item->Nic; + $client->Actif = $item->Actif; + $client->Test = $item->Test; + + $clients[] = $client; + } + } + + return $clients; + } + + /** + * Information client + * @param int $id + * ID du client + * @throws SoapFault + * @return Client + */ + public function getClient($id = null) + { + $this->authenticate(); + + if ( $id === null || $this->User->idClient != 1 ) { + $id = $this->User->idClient; + } + + $clientM = new Application_Model_Sdv1Clients(); + $sql = $clientM->select(true)->columns(array( + 'nom AS Nom', + 'LPAD(siren,9,0) AS Siren', + 'LPAD(nic,5,0) AS Nic', + 'IF(actif="Oui",1,0) AS Actif', + 'IF(test="Oui",1,0) AS Test' + ))->where('id=?', $id); + $result = $clientM->fetchRow($sql); + + if ( $result === null ) { + throw new SoapFault('ERR', 'Information client introuvable.'); + } + + $client = new Client(); + $client->Nom = $result->Nom; + $client->Siren = $result->Siren; + $client->Nic = $result->Nic; + $client->Actif = $result->Actif; + $client->Test = $result->Test; + + return $client; + } + + /** + * Information client avec la liste des services + * @param int $id + * ID du client + * @throws SoapFault + * @return ClientServices + */ + public function getClientServices($id = null) + { + $this->authenticate(); + + if ( $id === null || $this->User->idClient != 1 ) { + $id = $this->User->idClient; + } + + $clientM = new Application_Model_Sdv1Clients(); + $sql = $clientM->select()->from($clientM, array( + 'nom AS Nom', + 'LPAD(siren,9,0) AS Siren', + 'LPAD(nic,5,0) AS Nic', + 'IF(actif="Oui",1,0) AS Actif', + 'IF(test="Oui",1,0) AS Test' + ))->where('id=?', $id); + $result = $clientM->fetchRow($sql); + + if ( $result === null ) { + throw new SoapFault('ERR', 'Information client introuvable.'); + } + + $client = new ClientServices(); + $client->Nom = $result->Nom; + $client->Siren = $result->Siren; + $client->Nic = $result->Nic; + $client->Actif = $result->Actif; + $client->Test = $result->Test; + + //Get Services + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select() + ->from($serviceM, array('id', 'Code', 'Label', 'Editable', 'Active')) + ->where('Deleted=?', 0) + ->where('IdClient=?', $id); + $result = $serviceM->fetchAll($sql); + $services = array(); + if (count($result) > 0) { + foreach ($result as $item) { + $clientService = new ClientServicesList(); + $clientService->id = $item->id; + $clientService->Code = $item->Code; + $clientService->Label = $item->Label; + $clientService->Editable = $item->Editable; + $clientService->Active = $item->Active; + $services[] = $clientService; + } + } + $client->Services = $services; + + return $client; + } + + protected function getContrats() + { + //Liste des contrats, par service résumé + + //Vérification des droits d'utilisation + if ( $this->User->profil != 'Administrateur' ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + } + + protected function getContrat($id) + { + //Détail d'un contrat + + //Vérification des droits d'utilisation + if ( $this->User->profil != 'Administrateur' ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + } + + /** + * Liste des services + * @param string $client + * Id client + * @return ServiceList[] + */ + public function getServices($client = null) + { + //Liste des services + $this->authenticate(); + + if ( $client === null ) { + $client = $this->User->idClient; + } + + //Uniquement si l'utilisateur est administrateur et dans le service DEFAULT + if ( $this->User->profil != 'Administrateur' ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select() + ->where('IdClient=?', $client) + ->where('Deleted=0'); + + $result = $serviceM->fetchAll($sql); + + $services = array(); + if ( count($result) > 0 ) { + foreach ( $result as $item ) { + $service = new ServiceList(); + $service->id = $item->id; + $service->IdClient = $item->IdClient; + $service->Code = $item->Code; + $service->Label = $item->Label; + $service->TypeCompte = $item->TypeCompte; + $service->TypeAcces = $item->TypeAcces; + $service->TypeScore = $item->TypeScore; + $service->Timeout = $item->Timeout; + $service->Editable = $item->Editable; + $service->Active = $item->Active; + $service->DateInsert = $item->DateInsert; + $service->DateUpdate = $item->DateUpdate; + + $services[] = $service; + } + } + + return $services; + } + + /** + * Détail d'un service + * @param int $id + * @throws SoapFault + * @return Service + */ + public function getService($id) + { + $this->authenticate(); + + $client = $this->User->idClient; + + //Détail d'un service + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select() + ->where('IdClient=?', $client) + ->where('Deleted=?', 0) + ->where('id=?', $id); + $result = $serviceM->fetchRow($sql); + + if ( $result === null ) { + throw new SoapFault('ERR', 'Service introuvable.'); + } + + $output = new Service(); + $output->id = $result->id; + $output->Code = $result->Code; + $output->Label = $result->Label; + $output->TypeCompte = $result->TypeCompte; + $output->TypeAcess = $result->TypeAcess; + $output->TypeScore = $result->TypeScore; + $output->Timeout = $result->Timeout; + $output->Editable = $result->Editable; + $output->Active = $result->Active; + $output->DateInsert = $result->DateInsert; + $output->DateUpdate = $result->DateUpdate; + + //Droits + $output->Acces = array(); + $serviceDroitsM = new Application_Model_Sdv1ClientsServicesDroits(); + $sql = $serviceDroitsM->select() + ->where('IdClient=?', $client) + ->where('Service=?', $serviceCode); + $result = $serviceDroitsM->fetchAll($sql); + if ( count($result)>0 ) { + foreach ( $result as $item ) { + $acces = new AccesDetails(); + $acces->Code = $item->Acces; + $acces->Label = $this->listeDroits[$item->Acces]; + $output->Acces[] = $acces; + } + } + + //IP + $output->IP = array(); + $serviceIPM = new Application_Model_Sdv1ClientsServicesIP(); + $sql = $serviceIPM->select() + ->where('IdClient=?', $client) + ->where('Service=?', $serviceCode); + $result = $serviceDroitsM->fetchAll($sql); + if ( count($result)>0 ) { + foreach ( $result as $item ) { + $output->IP[] = $item->IP; + } + } + + return $output; + } + + protected function getServiceConso($id){} + + protected function getServiceLogByFile(){} + + /** + * Modification des éléments d'un service par un administrateur + * @param string $code Element à modifier (label | active | delete) + * @param mixed $value Valeur + * @param string $id Id du service + * @throws SoapFault + * @return boolean + */ + public function setService($code, $value, $id) + { + $this->authenticate(); + + //Vérification des droits d'utilisation + if ( $this->User->profil != 'Administrateur' ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + $client = $this->User->idClient; + + //Définir les éléments du service + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select() + ->where('IdClient=?', $client) + ->where('Deleted=?', 0) + ->where('id=?', $id); + $result = $serviceM->fetchRow($sql); + + if ( $result === null ) { + throw new SoapFault('ERR', 'Service introuvable.'); + } + + if ( $result->Editable == 0) { + throw new SoapFault('MSG', "Impossible d'éditer le service"); + } + + $data = json_decode($data); + $dataToUpdate = array(); + + //Suppression d'un service + if ( $code == 'delete' && $value==1 ) { + $dataToUpdate = array('Deleted'=>1); + } + + if ( $code == 'active' && in_array($value,array(0,1)) ) { + $dataToUpdate = array('Active'=>$value); + } + + if ( $code == 'label' && is_string($value) ) { + $dataToUpdate = array('Label'=>$value); + } + + if ( count($dataToUpdate) > 0 ) { + $dataToUpdate['DateUpdate'] = date('Y-m-d H:i:s'); + try { + $serviceM->update($dataToUpdate, 'id='.$id); + return true; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + + return false; + } + + /** + * Définit les paramètres d'un service + * @param string $type + * @param string $value + * @param string $id + * @throws SoapFault + * @return boolean + */ + public function setServiceParam($type, $value, $id, $delete = false) + { + //Définir un paramètre du service + $this->authenticate(); + + //Vérification des droits d'utilisation + if ( $this->User->profil != 'Administrateur' ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + $client = $this->User->idClient; + + $serviceM = new Application_Model_Sdv1ClientsServices(); + $sql = $serviceM->select() + ->where('IdClient=?', $client) + ->where('Deleted=?', 0) + ->where('id=?', $id); + $result = $serviceM->fetchRow($sql); + + if ( $result === null ) { + throw new SoapFault('ERR', 'Service introuvable.'); + } + + if ( $result->Editable == 0) { + throw new SoapFault('MSG', "Impossible d'éditer le service"); + } + + //Acces + if ( $type == 'acces' ) { + + if ( in_array($value, $this->listeDroits) ) { + + } + } + + //IP + if ( $type == 'ip' ) { + + if ( $delete ) { + + + } else { + //Control de la plage IP ou de l'IP + $validate = new Zend_Validate_Ip(); + if ( $validate->isValid($value) ) { + + } + } + } + + return false; + } + + /** + * Liste des utilisateurs + * @param int $actif (0|1) + * @param string $service Code du service + * @param string $client Id du client + * @return UserList[] + */ + public function getUsers($actif = null, $service = null, $client = null) + { + //Liste des utilisateurs - filtre au service + $this->authenticate(); + + if ( $client === null ) { + $client = $this->User->idClient; + } + + //Administrateur + if ( !in_array($this->User->profil, array('Administrateur', 'SuperAdministrateur')) ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + //Administrateur d'un service + if ( $this->User->Service != '' && $this->User->Service !== null && $this->User->Service !== 'DEFAULT' ) { + $service = $this->User->Service; + } + + try { + $userM = new Application_Model_Sdv1Utilisateurs(); + $sql = $userM->select() + ->setIntegrityCheck(false) + ->from(array('u'=>'sdv1.utilisateurs'), array('id','idClient','login','email','civilite','nom','prenom','actif','deleted')) + ->joinLeft(array('s'=>'sdv1.utilisateurs_service'), 'u.login=s.login', array('Service')) + ->joinLeft(array('sd'=>'sdv1.clients_services'), 'sd.Code=s.Service', array('Label')) + ->where('u.idClient=?',$client); + + if ( $actif !== null && in_array($actif, array(0,1)) ) { + $sql->where('u.actif=?', $actif); + } + $sql->where('u.deleted=?',0); + + if ($service == 'DEFAULT') { + $sql->where('(s.Service IS NULL AND u.idClient='.$client.') OR (s.Service IS NOT NULL AND u.idClient='.$client.' AND u.idClient='.$client.' AND sd.idClient='.$client.') OR sd.Code="'.$service.'"'); + } else if ( $service !== null ) { + $sql->where('s.Service=?', $service); + } + + $result = $userM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $users = array(); + if (count($result) > 0) { + foreach ($result as $item) { + $user = new UserList(); + $user->id = $item->id; + $user->IdClient = $item->idClient; + $user->ServiceCode = $item->Service; + $user->ServiceLabel = $item->Label; + $user->Login = $item->login; + $user->Email = $item->email; + $user->Civilite = $item->civilite; + $user->Nom = $item->nom; + $user->Prenom = $item->prenom; + $user->Enable = $item->actif; + $user->Delete = $item->deleted; + + $users[] = $user; + + } + } + + return $users; + } + + protected function getUsersByFile($actif = null, $service = null, $client = null) + { + + } + + /** + * Information Utilisateur + * @param string $id + * ID de l'utilisateur + * @throws SoapFault + * @return User + */ + public function getUser($id = null) + { + //Détail d'un utilisateur + $this->authenticate(); + + $idClient = $this->User->idClient; + + if ( $id === null ) { + $id = $this->User->id; + } + + // Get Data + try { + $userM = new Application_Model_Sdv1Utilisateurs(); + $sql = $userM->select()->from(array('u'=>'utilisateurs')) + ->setIntegrityCheck(false) + ->joinLeft(array('s'=>'sdv1.utilisateurs_service'), 'u.login=s.login', array('Service')) + ->joinLeft(array('sd'=>'sdv1.clients_services'), 'sd.Code=s.Service', array('Label AS ServiceLabel')) + ->where('u.id=?', $id); + + $user = $userM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + if ( $user === null ) { + throw new SoapFault('ERR', 'Utilisateur inexistant !'); + } + + // Service + $serviceCode = 'DEFAULT'; + $serviceLabel = 'Standard'; + if ( $user->Service !== null ) { + $serviceCode = $user->Service; + $serviceLabel = $user->ServiceLabel; + } + + $output = new User(); + $output->id = $user->id; + $output->IdClient = $user->idClient; + $output->ServiceCode = $serviceCode; + $output->ServiceLabel = $serviceLabel; + $output->Login = $user->login; + $output->Email = $user->email; + $output->Civilite = $user->civilite; + $output->Nom = $user->nom; + $output->Prenom = $user->prenom; + $output->Enable = $user->actif; + $output->Delete = $user->deleted; + + // Service - Droits + $acces = array(); + try { + $droitsM = new Application_Model_Sdv1ClientsServicesDroits(); + $sql = $droitsM->select()->where('IdClient=?', $idClient)->where('Service=?', $serviceCode); + $droits = $droitsM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ( count($droits) > 0 ) { + foreach ($droits as $item) { + $acces = new Acces(); + $acces->Code = $item->Acces; + $acces->Label = $this->listeDroits[$item->Acces]; + $output->Acces[] = $acces; + } + } + + // Si l'utilisateur a pour Service = DEFAULT et pas de service DEFAULT alors droits de l'utilisateur + if ( count($droits) == 0 ) { + $droits = explode(' ', $user->droits); + foreach ($droits as $item) { + $acces = new Acces(); + $acces->Code = $item; + $acces->Label = $this->listeDroits[strtoupper($item)]; + $output->Acces[] = $acces; + } + } + + + // Service - IP + try { + $ipM = new Application_Model_Sdv1ClientsServicesIP(); + $sql = $ipM->select()->where('IdClient=?', $idClient)->where('Service=?', $serviceCode); + $ips = $ipM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ( count($ips) > 0 ) { + foreach ($ips as $item) { + $output->IP[] = $item; + } + } + + return $output; + } + + protected function getUserActivity($id = null) + { + //Retourner la liste des dernières connexions + } + + /** + * Emails secondaires + * @param int $id + * @throws SoapFault + * @return string[] + */ + public function getUserEmail($id) + { + $this->authenticate(); + + $idClient = $this->User->idClient; + + try { + $emailsM = new Application_Model_Sdv1UtilisateursEmails(); + $sql = $emailsM->select() + ->where('id=?', $id) + ->where('idClient=?', $idClient); + $result = $emailsM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $emails = array(); + if ( count($result)>0 ) { + foreach ( $result as $item ) { + $email = new Email(); + $email->id = $item->id; + $email->value = $item->email; + + $emails[] = $email; + } + } + + return $emails; + } + + protected function getUserLogByFile($id){} + + /** + * Définition d'un utilisateur + * @param string $data + * @param int $id + * @throws SoapFault + * @return boolean + */ + public function setUser($data, $id = null) + { + $this->authenticate(); + + //Vérification des droits de création d'utilisateur + if ( $this->User->id != $id || !in_array($this->User->profil, array('SuperAdministrateur', 'Administrateur')) ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + $infos = json_decode($data); + + $userM = new Application_Model_Sdv1Utilisateurs(); + + $userData = array( + 'idClient', + 'login', + 'email', + 'password' => '', + 'actif' => 0, + 'deleted' => 0, + 'typeCompte' => 'PROD', + 'filtre_ip' => '', + 'civilite' => 'M', + 'nom' => '', + 'prenom' => '', + 'raisonSociale' => '', + 'siret' => '000000000', + 'adrNum' => null, + 'adrIndRep' => null, + 'adrTypeVoie' => null, + 'adrLibVoie' => '', + 'adrCp' => null, + `adrVille` => null, + `adrComp` => '', + 'tel' => '', + 'fax' => null, + 'mobile' => null, + 'pref' => '', + 'profil' => 'Utilisateur', + 'dateInscription' => '0000-00-00 00:00:00', + 'dateValidation' => '0000-00-00 00:00:00', + 'nombreConnexions' => '0', + 'dateDerniereConnexion' => '0000-00-00 00:00:00', + 'droits' => '', + 'referenceParDefaut' => '', + 'nbReponses' => '020', + 'lang' => null, + 'formatMail' => 'txt1', + 'lienExtranetMail' => 0, + 'lienSurvFic' => 0, + 'idSurvFic' => '', + 'loginCptSurvFic' => '', + 'listeEven' => '', + 'dateDebutCompte' => null, + 'dateFinCompte' => null, + 'maxFicheId' => null, + 'accesWS' => '0', + 'rechRefType' => 'UTI', + 'acceptationCGU' => null, + ); + + if ( $id === null ) { + + $sql = $userM->select()->where('login=?', $infos->login); + $row = $userM->fetchRow($sql); + //Utilisateur existant + if ( null !== $row ) { + throw new SoapFault('ERR', "User exist"); + } + //Prepare data to insert + foreach ($infos as $key => $value) { + if (array_key_exists($key, $userData)) { + $userData[$key] = $value; + } + } + $userData['dateInsert'] = date('YmdHis'); + + try { + $userM->insert($userData); + } catch (Zend_Db_Exception $e) { + return false; + } + + //Définition du service + $serviceM = new Application_Model_Sdv1UtilisateursService(); + try { + $serviceM->insert(array( + 'login' => $infos->login, + 'idClient'=> $infos->idClient, + 'Service'=> $infos->Service + )); + } catch (Zend_Db_Exception $e) { + return false; + } + + return true; + + } else { + + $sql = $userM->select()->where('id=?', $id); + $row = $userM->fetchRow($sql); + if ( null === $row ) { + throw new SoapFault('ERR', "User doesn't exist"); + } + //Prepare data to update + foreach ($row as $key => $value) { + if (array_key_exists($key, $userData)) { + $userData[$key] = $value; + } + } + foreach ($infos as $key => $value) { + if (array_key_exists($key, $userData)) { + $userData[$key] = $value; + } + } + + try { + $userM->update($userData, 'id='.$id); + } catch (Zend_Db_Exception $e) { + return false; + } + + return true; + } + } + + /** + * Création de compte client partenaire + * @param string $data + * @return boolean + */ + public function setUserSSO ( $data ) + { + //Check IP application + /*$ip = $_SERVER['REMOTE_ADDR']; + if ( !in_array($ip, $this->listApplicationIp) ) { + $this->sendError('0901'); + }*/ + + //Decodage + $infos = json_decode($data); + + $userData = array( + 'idClient' => null, + 'login' => null, + 'email' => '', + 'password' => '', + 'actif' => 0, + 'deleted' => 0, + 'typeCompte' => 'PROD', + 'filtre_ip' => '', + 'civilite' => 'M', + 'nom' => '', + 'prenom' => '', + 'raisonSociale' => '', + 'siret' => '000000000', + 'adrNum' => null, + 'adrIndRep' => null, + 'adrTypeVoie' => null, + 'adrLibVoie' => '', + 'adrCp' => null, + 'adrVille' => null, + 'adrComp' => '', + 'tel' => '', + 'fax' => null, + 'mobile' => null, + 'pref' => '', + 'profil' => 'Utilisateur', + 'dateInscription' => '0000-00-00 00:00:00', + 'dateValidation' => '0000-00-00 00:00:00', + 'nombreConnexions' => '0', + 'dateDerniereConnexion' => '0000-00-00 00:00:00', + 'droits' => '', + 'referenceParDefaut' => '', + 'nbReponses' => '020', + 'lang' => null, + 'formatMail' => 'txt1', + 'lienExtranetMail' => 0, + 'lienSurvFic' => 0, + 'idSurvFic' => '', + 'loginCptSurvFic' => '', + 'listeEven' => '', + 'dateDebutCompte' => null, + 'dateFinCompte' => null, + 'maxFicheId' => null, + 'accesWS' => '0', + 'rechRefType' => 'UTI', + 'acceptationCGU' => null, + ); + + //Définition du service + $serviceM = new Application_Model_Sdv1UtilisateursService(); + try { + $serviceM->insert(array( + 'login' => $infos->login, + 'idClient'=> $infos->idClient, + 'Service'=> $infos->Service + )); + } catch ( Zend_Db_Exception $e ) { + return false; + } + + //Prepare data to insert + foreach ($infos as $key => $value) { + if (array_key_exists($key, $userData)) { + $userData[$key] = $value; + } + } + $userData['password'] = password_hash ( uniqid() , PASSWORD_BCRYPT ); + $userData['dateInsert'] = date('YmdHis'); + $userData['dateDebutCompte'] = date('YmdHis'); + + //Insertion dans la base de données + try { + $userM = new Application_Model_Sdv1Utilisateurs(); + $userM->insert($userData); + } catch ( Zend_Db_Exception $e ) { + return false; + } + + return true; + } + + protected function setUserService($service, $id) + { + //Déplacer un utilisateur de service - ne pas activer tout de suite + + } + + public function setUserEmail($id, $email, $op = null) + { + //Which operation + switch ( $op ) { + //Ajouter un email secondaire + case null: + case 'add': + break; + //Supprimer un email secondaire + case 'del': + break; + } + + + } + + /** + * Change password + * @param string $password + * @param int $id + * @throws SoapFault + * @return boolean + */ + public function setUserPassword($password, $id = null) + { + $this->authenticate(); + + if ( $id === null ) { + $id = $this->User->id; + } elseif ( $id !== null && $this->User->profil != 'Administrateur' ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + //@todo : Prise en compte de la version + + //Changer le mot de passe + $userM = new Application_Model_Sdv1Utilisateurs(); + $result = $userM->update(array('password'=>$password), 'id='.$id); + if ( $result == 1 ) { + return true; + } + return false; + } + + public function getCategory() + { + $output = array(); + foreach ( $this->listeCategory as $code => $desc ) { + $c = new AccesCategory(); + $c->Code = $code; + $c->Label = $desc['label']; + $c->Acces = $desc['droits']; + $output[] = $c; + } + return $output; + } + + protected function getAccess() + { + //Liste des accès - Code, Label, Category, Description, + } + + protected function getPref() + { + //Liste des préférences - Code, Label, Description, Values + } + + protected function setPref(){} + + /** + * Acceptation des CGUs + * @param string $app + * @throws SoapFault + * @return boolean + */ + public function setCGU($app = null) + { + $this->authenticate(); + + $id = $this->User->id; + + try { + $userM = new Application_Model_Sdv1Utilisateurs(); + $data = array('acceptationCGU' => date('YmdHis')); + $result = $userM->update($data, 'id='.$idUser); + } catch (Zend_Db_Exception $e) { + throw new SoapFault('Erreur', $e->getMessage()); + } catch (Zend_Exception $e) { + throw new SoapFault('Erreur', $e->getMessage()); + } + if ( 1 == $result ) { + return true; + } + return false; + } + + protected function setUserEnable($id) + { + //Un administrateur force l'activation d'un utilisateur ? + $userM = new Application_Model_Sdv1Utilisateurs(); + //actif = 1 + + /** + * L'utilisateur n'a pas reçu ou a perdu l'email avec son mot de passe, vous pouvez activez sont compte + * (attention son email ne sera pas validé, et certaines prestations nécessitant un email valide ne peuvent fonctionner) + */ + + } + + protected function setLinkValidation() + { + //Génération d'un hash pour la validation email + //Database : utilisateurs_validationh [id, ] + + //utilisateurs_email => dateValidation + surveillance + + //Envoi email avec lien de validation + } + + protected function setUserValidation($id) + { + //Un utilisateur valide son compte pour la première connexion et déclenche l'envoi de validation de l'email + //Doit-on demander un nouveau mot de passe ? Est ce que le mot de passe a été générer et envoyé par email . + $userM = new Application_Model_Sdv1Utilisateurs(); + //actif = 0 + //dateValidation pour email + + //Envoi email de validation + //lien + email + login + date + hash ('sha256', string ) => string {idClient}{login}{email}{AAAAMMJJ} + } + + protected function setUserEmailValidation($id) + { + //Validation d'un email + //Email secondaire ajouté marqueur dateValidation + } + + /** + * Un SuperAdministrateur devenir un utilisateur (pour les tests) + * @param int $id + * @throws SoapFault + */ + protected function setAdminAs($id) + { + $this->authenticate(); + + //Vérification des droits d'utilisation + if ( $this->User->profil != 'SuperAdministrateur' ) { + throw new SoapFault('ERR', 'Accès non authorisé'); + } + + // Pour les SuperAdministrateur, voir l'application comme un login (id) + + } +} \ No newline at end of file diff --git a/library/WsScore/Interne/v0.2/Service.php b/library/WsScore/Interne/v0.2/Service.php new file mode 100644 index 00000000..02b08bc9 --- /dev/null +++ b/library/WsScore/Interne/v0.2/Service.php @@ -0,0 +1,4217 @@ +authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges detail sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesDetail($siren, $tabTypes); //@todo : date + + $tabRet = array(); + if (count($ret)>0) { + foreach ($ret as $item ) { + $privileges = new PrivilegesDetail(); + $privileges->numDebiteur = $item['numDebiteur']; + $privileges->greffe = $item['greffe']; + $privileges->greffeLib = $item['greffeLib']; + $privileges->dateEven = $item['dateEven']; + $privileges->dateFraiche = $item['dateFraiche']; + $privileges->dateSD = $item['dateSD']; + $privileges->insType = $item['insType']; + $privileges->insTypeLib = $item['insTypeLib']; + $privileges->insNum = $item['insNum']; + $privileges->insDate = $item['insDate']; + $privileges->insDateEch = $item['insDateEch']; + $privileges->insObjet = $item['insObjet']; + $privileges->insMontant = $item['insMontant']; + $privileges->insDev = $item['insDev']; + $privileges->insDateFin = $item['insDateFin']; + $privileges->radDate = $item['radDate']; + $privileges->radMention = $item['radMention']; + $privileges->radPartiel = $item['radPartiel']; + $privileges->radPartMt = $item['radPartMt']; + $privileges->radDev = $item['radDev']; + $privileges->creNom = $item['creNom']; + $privileges->creAdresse1 = $item['creAdresse1']; + $privileges->creAdresse2 = $item['creAdresse2']; + $privileges->creAdresse3 = $item['creAdresse3']; + $privileges->creCP = $item['creCP']; + $privileges->creVille = $item['creVille']; + $privileges->crePays = $item['crePays']; + $privileges->creAutres = $item['creAutres']; + $tabRet[] = $privileges; + } + } + $this->wsLog('privdetail', $siren, join(',',$tabTypes)); + $output = new PrivilegesDetailReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * + * Enter description here ... + * @param string $siren + * @param array $tabTypes + * @return PrivilegesCumulReturn + */ + public function getPrivilegesCumul($siren, $tabTypes=array('03','04')) + { + $this->authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges cumul sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesCumul($siren, $tabTypes); + $tabRet = array(); + + if (isset($ret['03']) && count($ret['03']>0)){ + $value = $ret['03']; + $priv = new PrivilegesCumul(); + $priv->insType = '03'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + + if (isset($ret['04']) && count($ret['04']>0)){ + $value = $ret['04']; + $priv = new PrivilegesCumul(); + $priv->insType = '04'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + $this->wsLog('privcumul', $siren, print_r($tabTypes,1)); + $output = new PrivilegesCumulReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Liste les mandataires correspondant à un nom donné + * + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @param int $cpDep Code postal ou département du mandataire + * @return SearchMandatairesReturn + */ + public function searchMandataires($nom, $type=array('A','M'), $cpDep=0) + { + $this->authenticate(); + + //Initialisation + if (empty($type)) $type = array('A','M'); + if (empty($cpDep)) $cpDep = 0; + $tabRet = array(); + + debugLog('I',"Recherche de Mandataires '$nom' (Dep=$cpDep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabTmp = $iInsee->searchMandataires($nom, true, $type, $cpDep); + + foreach ($tabTmp as $i=>$mand) + { + $mandataire = new SearchMandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = utf8_encode($mand); + $tabRet[] = $mandataire; + + } + $output = new SearchMandatairesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des tribunaux ou Compétences demandées + * @param array|string $tabTypes Tableau des types de Compétences demandés 'C':Commerce, 'I':Instance, 'G':TGI, 'A':Préfectures, 'B':Sous-préf, 'D':Tribunal Administratif, 'H':Prud'hommes, 'L': Cour d'Appel, 'M': Tribunal Mixte, 'O':CCI, 'V': Cour Administrative d'Appel + * @return TribunauxReturn + **/ + public function getTribunaux($tabTypes) + { + $this->authenticate(); + + //Initialisation + if (empty($tabTypes)) $tabTypes = array(); + if (is_string($tabTypes)) $tabTypes = (array)$tabTypes; + + $iBodacc = new MBodacc(); + debugLog('I',"Liste des tribunaux demandées",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabTmp = $iBodacc->getListeTribunaux(); + //@todo : Retourner liste en ordre alphabétique + $tabRet = array(); + if (count($tabTypes)==0) { + foreach ($tabTmp as $i => $tribunal){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } else { + foreach ($tabTmp as $i=>$tribunal){ + $type = substr($i,-1); + if ( in_array($type, $tabTypes) ){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } + } + $this->wsLog('tribunaux', '', print_r($tabTypes,1)); + $output = new TribunauxReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Enregistrement des informations saisie manuellement + * @param string $siret + * @param int $idEntreprise + * @param SetInfosEntrepInfos $tabInfos + * @return SetInfosEntrepReturn + */ + public function setInfosEntrep( $siret, $idEntreprise, $tabInfos ) + { + $this->authenticate(); + + Zend_Registry::get('WsLogger')->info(__FUNCTION__.' : '. + print_r($tabInfos, 1)); + + //Initialisation + $tabRet = array(); + $iBodacc = new MBodacc(); + $iInsee = new MInsee(); + $result = false; + + if (!$this->checkEdition()) { + + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $siren = substr($siret,0,9); + $iDb = new WDB(); + + $tabIdentite = $tabInfos->identite; + $tabJugement = $tabInfos->jugement; + $tabActio = $tabInfos->actionnaire; + $tabParti = $tabInfos->participation; + $tabScores = $tabInfos->score; + + // Mise à jour de l'identité + if (trim(strtolower($tabIdentite->web))=='http://'){ + $web = ''; + } else { + $web = trim($tabIdentite->web); + } + $tabUpdate = array( + 'isin' => trim($tabIdentite->isin), + 'tel' => trim($tabIdentite->tel), + 'fax' => trim($tabIdentite->fax), + 'web' => $web, + 'mail' => trim($tabIdentite->mail), + 'activite' => stripslashes(trim($tabIdentite->activite)), + 'sirenDoublon' => substr(str_replace(' ','',strtr($tabIdentite->sirenDoublon, '"\'./- ,\*#()',' ')),0,9), + 'waldec' => trim(str_replace(' ','',strtr($tabIdentite->waldec, '"\'./- ,\*#()',' '))), + ); + + /** @todo non traitées : [capital_mt] => 335400, [capital_dev] => EUR **/ + if (!$iDb->update('infos_entrep', $tabUpdate, "siren='$siren'")){ + if (!$iDb->insert('infos_entrep', array_merge(array('siren'=>$siren),$tabUpdate))){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + exit; + } + } + // Fin mise à jour identité + + // Opposition INSEE + if ( $tabIdentite->moisOppositionInsee>0 && + $tabIdentite->moisOppositionInsee<=(date('Ym')*1) ){ + + $iDb2 = new WDB('insee'); + if ( !$iDb2->insert('insee_nondiff', array('siren'=>$siren, 'mois'=>$tabIdentite->moisOppositionInsee)) ){ + if ( $iDb2->getLastErrorNum()<>1062 ) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des oppositions de la sphère commerciale INSEE pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + } + + } + // Fin opposition INSEE + + // Domiciliataire + if (!empty($tabIdentite->domiciliataire) && $siren>1000) { + if ($tabIdentite->domiciliataire=='oui' || $tabIdentite->domiciliataire=='non') { + // L'entreprise et ces établissements seront mis à jour automatiquement ce soir + $iDb->query("INSERT IGNORE INTO jo.tabAdrDom (siren,nic,siege, etActif, nom, sigle, enseigne, adrNum, adrBtq, adrTypVoie, adrLibVoie, ville, cp, depComEt, adrComp, cj, apen,apet, dateInsert) + SELECT siren, nic, siege, actif AS etActif, raisonSociale AS nom, sigle, enseigne, adr_num as adrNum, adr_btq AS adrBtq, adr_typeVoie AS adrTypVoie, adr_libVoie AS adrLibVoie, adr_ville AS ville, adr_cp AS cp, CONCAT(adr_dep,adr_com) AS depComEt, adr_comp AS adrComp, cj, ape_entrep AS apen, ape_etab AS apet, DATE(NOW()) as dateInsert + FROM jo.etablissements WHERE siren=$siren;", false); + } + // Si demande de suppression, on force l'indicateur "" + if ($tabIdentite->domiciliataire=='non') { + $tabUpdate=array('pasEntrepDom'=>1); + if (!$iDb->update('tabAdrDom', $tabUpdate, "siren=$siren")) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de la suppression du marqueur de domiciliation pour $siren :".EOL.print_r($tabUpdate, true).EOL.$iDb->getLastError()); + } + } + // Fin domiciliataire + + + // Insertion des scores + $tabUpdate = array(); + $setScore = false; + if ( $tabScores->encours!='' || $tabScores->encours!=null ){ + $tabUpdate['encours'] = $tabScores->encours; + $setScore = true; + } + if ( $tabScores->scoreSolv!='' ){ + $tabUpdate['scoreSolv'] = $tabScores->scoreSolv; + $setScore = true; + } + if ( $tabScores->scoreDir!='' ){ + $tabUpdate['scoreDir'] = $tabScores->scoreDir; + $setScore = true; + } + if ( $tabScores->scoreConf!='' ){ + $tabUpdate['scoreConf'] = $tabScores->scoreConf; + $setScore = true; + } + if ( $setScore ){ + // Mise à jour des Cute Offs + if ( !$iDb->update('scores_cutoff', $tabUpdate, "siren=$siren") ){ + if ( !$iDb->insert('scores_cutoff', array_merge(array( + 'siren' => $siren, + 'dateInsert' => date('Ymd') + ), $tabUpdate)) ){ + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", print_r($tabScores, true).EOL.$iDb->getLastError()); + } + } + } + // Fin insertion des scores + + // Insertion du jugement + $tabEven = array(); + if (is_array($tabJugement->even->item) && count($tabJugement->even->item)>0){ + foreach($tabJugement->even->item as $even){ + $tabEven[] = $even->code; + } + } else { + $tabEven[] = $tabJugement->even->item->code; + } + $nic = $tabJugement->nic*1; + $entrep = $iInsee->getIdentiteLight($siren, $nic); + if ( $nic>0 && $tebEven[0]->code==6700 && $entrep['Siege']==0 ){ + // Radiation d'un établissement + $tabEven[0]->code = 6600; + } + + if ( count($tabEven)>0 ){ + $idAdmin = str_replace('m','',trim($tabJugement->admin)); + $idMand = str_replace('m','',trim($tabJugement->mand)); + $idOppo = str_replace('m','',trim($tabJugement->oppo)); + + /** Nom et Identifiant de l'opérateur de saisie **/ + $iDbCrm = new WDB('sdv1'); + $rep=$iDbCrm->select('utilisateurs', 'id', "login='".$this->User->login."'"); + $idUser=$rep[0][0]; + + $tabSource=explode('_',$tabJugement->source); + $source=@$tabSource[0]; + $numJal=@$tabSource[1]; + + $dateSource=WDate::dateT('d/m/Y', 'Ymd', trim($tabJugement->dateParution))*1; + if ($dateSource<20000101) + $dateSource=date('YmdHis'); + + $montant=trim(preg_replace('/[^0-9]/', '', $tabJugement->montant))*1; + $actionsMt=trim(preg_replace('/[^0-9]/', '', $tabJugement->actionsMt))*1; + $actionsNb=trim(preg_replace('/[^0-9]/', '', $tabJugement->actionsNb))*1; + if ($montant>0 && ($actionsNb>0 || $actionsMt>0)) { + if ($actionsNb>0) $actionsMt=$montant/$actionsNb; + elseif ($actionsMt>0) $actionsNb=$montant/$actionsMt; + } + + //@todo : ça ne va pas marcher ici + $strDir=''; + $tabNouvDir = array(); + if ( is_array($tabJugement->nouvDir->item) && count($tabJugement->nouvDir->item)>0 ){ + $tabNouvDir = $tabJugement->nouvDir->item; + } else { + $tabNouvDir[] = $tabJugement->nouvDir; + } + + if (count($tabNouvDir)>0) { + foreach( $tabNouvDir as $dir ){ + if ( intval($dir->Fonc)>0 ){ + $strDir.= $iBodacc->getFctDir( + $dir->Fonc.' : '. + $dir->Genre.' '. + ucwords(strtolower($dir->Pre)).' '. + strtoupper($dir->Nom) + ); + $strDir.= ', domicilié à '.$dir->Dom.'. '; + } + } + } + + if ( trim($tabJugement->nouvAdrCp)<>'' ){ + $strAdr = stripslashes(trim($tabJugement->nouvAdr).', '. + trim($tabJugement->nouvAdrCp).' '. + trim($tabJugement->nouvAdrVille)); + } else { + $strAdr=''; + } + + if (count($tabEven)>1){ + $strEven = implode(';',array_slice($tabEven, 1)); + } else { + $strEven = ''; + } + + $tabUpdate = array( + 'strEven' => $strEven, + 'sirenValide' => $iInsee->valideSiren($siren), + 'dateCessationPaiement' => empty($tabJugement->datePaie) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement->datePaie)), + 'dateEffetFinP' => empty($tabJugement->dateFinPeriode) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement->dateFinPeriode)), + 'tribunal' => trim($tabJugement->tribunal), + 'montant' => $montant, + 'actionsNb' => $actionsNb, + 'inter1type' => 'A', + 'inter1id' => $idAdmin, + 'inter1nom' => $iInsee->getMandatairesParId($idAdmin), + 'inter2type' => 'M', + 'inter2id' => $idMand, + 'inter2nom' => $iInsee->getMandatairesParId($idMand), + 'inter3type' => 'O', + 'inter3id' => $idOppo, + 'inter3nom' => $iInsee->getMandatairesParId($idOppo), + 'complement' => stripslashes(trim($tabJugement->comp)), + 'nouvActivite' => stripslashes(trim($tabJugement->nouvActivite)), + 'nouvDir' => stripslashes(trim($strDir)), + 'nouvAdr' => $strAdr, + 'nouvFJ' => trim($tabJugement->nouvFJ), + 'raisonSociale' => $entrep['Nom'], + 'adresse' => $entrep['Adresse'], + 'codePostal' => $entrep['CP'], + 'ville' => $entrep['Ville'], + 'source' => $source, + 'idSaisie' => $idUser, + 'parutionIdJal' => $numJal, + 'parutionNum' => $tabJugement->numParution, + ); + $dateJuge = WDate::dateT('d/m/Y','Y-m-d',trim($tabJugement->dateJuge)); + $tabInsert = array_merge( $tabUpdate, array( + 'siren' => $siren, + 'dateJugement' => $dateJuge, + 'typeEven' => $tabEven[0], + 'dateSource' => $dateSource, + )); + if ( !$iDb->insert('annonces', array_merge($tabInsert,array('dateInsert'=>date('YmdHis'))), true) ){ + if ( !$iDb->update('annonces', $tabUpdate, "siren=$siren AND dateJugement='$dateJuge' AND typeEven=".$tabEven[0], true)){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + } + } + + // Insertion actionnaire + if ( trim($tabActio->siren)!='' ) { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabActio->pct))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabActio->siren); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ($pays=='') $pays='FRA'; + if (trim($tabActio->nom)!='') $nom = $tabActio->nom; + if ($tabActio->pays!='XXX') $pays = $tabActio->pays; + + if (trim($tabActio->dateMAJ)!='JJ/MM/AAAA' && trim($tabActio->dateMAJ)!=''){ + $dateMAJ = WDate::dateT('d/m/Y', 'Y-m-d', trim($tabActio->dateMAJ)); + } + + if ($tabActio->majMin=='maj') $majMin='+'; + elseif ($tabActio->majMin=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + //'Siren1'=> $siren, + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + //'Siren2'=> $siren2, + //'RaisonSociale'=> $nom, + //'Pays'=> $pays, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array('ActionPart' => 1), + array( + 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res = $iDb->select('liens', 'count(*)', + "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=1016166; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=1016167; + } + + $tabInsert2 = array_merge($tabUpdate, array('ActionPart' => 2), + array( 'Siren1' => $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=1016168; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=1016169; + } + } + // Fin insertion actionnaire + + //Insertion participation + if ( trim($tabParti->siren)<>'' ) { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabParti->pct))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabParti->siren); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ( $pays=='' ) $pays='FRA'; + if ( trim($tabParti->nom)<>'' ) $nom=$tabParti->nom; + if ( $tabParti->pays<>'XXX' ) $pays=$tabParti->pays; + + if (trim($tabParti->dateMAJ)<>'JJ/MM/AAAA' && trim($tabParti->dateMAJ)<>'') + $dateMAJ=WDate::dateT('d/m/Y', 'Y-m-d', trim($tabParti->dateMAJ)); + + if ($tabParti->majMin=='maj') $majMin='+'; + elseif ($tabParti->majMin=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array( 'ActionPart' => 2 ), + array( 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=10168; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=10169; + } + + $tabInsert2 = array_merge($tabUpdate, array( 'ActionPart' => 1 ), + array( 'Siren1'=> $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=10170; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=10171; + } + } + // Fin insertion participation + + if ($errMaj>0){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } else { + $result = true; + } + } + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Commande de bilan + * @param InfoCommandeBilan $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdBilanReturn + */ + public function setCmdBilan( InfoCommandeBilan $infoCommande, InfosDemandeur $infosDemandeur ) + { + + } + + /** + * Renvoi des informations sur une commande de bilan + * @param string $reference + * @return CmdBilanReturn + */ + public function getCmdBilan( $reference ) + { + + } + + /** + * Commande d'acte + * @param InfoCommandeActe $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdActeReturn + */ + public function setCmdActe( $infoCommande, $infosDemandeur ) + { + + } + + /** + * Renvoi des informations sur une commande d'acte + * @param string $reference + * @return CmdActeReturn + */ + public function getCmdActe( $reference ){} + + /** + * Commande de kbis + * @param InfoCommandeKbis $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdKbisReturn + */ + public function setCmdKbis( InfoCommandeKbis $infoCommande, InfosDemandeur $infosDemandeur ) + { + $this->authenticate(); + + $error = new ErrorType(); + $ref = new RefCommande(); + //Vérifier les informations + switch($infoCommande->mode) + { + case 'courrier': break; + case 'mail': break; + default: + exit; break; + } + if (empty($infoCommande->siren)) + { + $error->errnum = 0; + $error->errmsg = 'Erreur SIREN invalide'; + } + else + { + $login = $_SERVER['PHP_AUTH_USER']; + // Insertion des données commande + $dataCommandes = array( + 'user_login' => $login, + 'user_email' => $this->User->email, + 'type' => 'kbis', + 'demandeurReference' => $infosDemandeur->reference, + 'demandeurEmail' => $infosDemandeur->email, + 'demandeurTel' => $infosDemandeur->tel, + 'demandeurNom' => $infosDemandeur->nom, + 'demandeurService' => $infosDemandeur->service, + 'demandeurSociete' => $infosDemandeur->societe, + 'demandeurAdresse' => $infosDemandeur->adresse, + 'demandeurCp' => $infosDemandeur->cp, + 'demandeurVille' => $infosDemandeur->ville, + 'infoCommande' => serialize($infoCommande) + ); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commande = new Application_Model_Commandes(); + $commande_id = $commande->insert($dataCommandes); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id) + { + //Enregistrement des détails de commande + $dataCommandesKbis = array( + 'commande_id' => $commande_id, + 'siren' => $infoCommande->siren, + 'raisonSociale' => '', + 'fichier' => '', + 'partenaireRequete' => '', + 'partenaireReponse' => '', + ); + try { + $commandeKbisTable = new Application_Model_CommandesPieces(); + $commandeKbisTable->insert($dataCommandesKbis); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + try { + $row = $commande->find($commande_id); + $data = $row->current(); + $ref->reference = $data->id; + $ref->dateCommande = $data->date_added; + $ref->dateMaj = $data->date_updated; + $ref->dateReception = $data->date_closed; + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 0; + $error->errmsg = "Commande Introuvable"; + } + } + else + { + $error->errnum = 0; + $error->errmsg = "Erreur enregistrement commande"; + } + } + $output = new CmdKbisReturn(); + $cmd = new CmdKbisDetail(); + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $cmd->refCommande = $ref; + $output->commande = $cmd; + $output->error = $error; + return $output; + } + + /** + * Renvoi des informations sur une commande de Kbis + * @param string $reference + * @return CmdKbisReturn + */ + public function getCmdKbis( $reference ){} + + /** + * Commande de privilèges et nantissements par email + * @param InfoCommandePieces $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdPiecesReturn + */ + public function setCmdPieces( $infoCommande, $infosDemandeur ) + { + $this->authenticate(); + $error = new ErrorType(); + $ref = new RefCommande(); + if (!empty($infoCommande->siren)){ + //Vérification SIREN + // Insertion des données commande + $dataCommandes = array( + 'user_login' => $this->User->login, + 'user_email' => $this->User->email, + 'type' => 'pieces', + 'demandeurReference' => $infosDemandeur->reference, + 'demandeurEmail' => $infosDemandeur->email, + 'demandeurTel' => $infosDemandeur->tel, + 'demandeurNom' => $infosDemandeur->nom, + 'demandeurService' => $infosDemandeur->service, + 'demandeurSociete' => $infosDemandeur->societe, + 'demandeurAdresse' => $infosDemandeur->adresse, + 'demandeurCp' => $infosDemandeur->cp, + 'demandeurVille' => $infosDemandeur->ville, + 'infoCommande' => serialize($infoCommande) + ); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commande = new Application_Model_Commandes(); + $commande_id = $commande->insert($dataCommandes); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id){ + //Enregistrement des détails de commande + $dataCommandesPieces = array( + 'commande_id' => $commande_id, + 'siren' => $infoCommande->siren, + 'raisonSociale' => '', + 'fichier' => '', + ); + try { + $commandePieces = new Application_Model_CommandesPieces(); + $commandePieces->insert($dataCommandesPieces); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + + try { + $row = $commande->find($commande_id); + $data = $row->current(); + $ref->reference = $data->id; + $ref->dateCommande = $data->date_added; + $ref->dateMaj = $data->date_updated; + $ref->dateReception = $data->date_closed; + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 0; + $error->errmsg = "Commande Introuvable"; + } + } else { + $error->errnum = 0; + $error->errmsg = "Erreur enregistrement commande"; + } + } else { + $error->errnum = 0; + $error->errmsg = 'Erreur SIREN invalide'; + } + $output = new CmdPiecesReturn(); + $cmd = new CmdPiecesDetail(); + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $cmd->refCommande = $ref; + $output->error = $error; + return $output; + } + + /** + * Renvoi des informations sur une commande pièces + * @param string $reference + * @return CmdPiecesReturn + */ + public function getCmdPieces( $reference ) + { + list($typeCommande, $idCommande) = explode('-', $reference); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commandeTable = new Application_Model_Commandes(); + $select = $commandeTable->select() + ->where('type = ?', 'pieces') + ->where('id = ?', $idCommande); + $commandeRowset = $commandeTable->fetchAll($select); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + $error = new ErrorType(); + $ref = new RefCommande(); + $infoCommande = new InfoCommandePieces(); + $infosDemandeur = new InfosDemandeur(); + if ( $commandeRowset->count()>0 ) + { + $commande = $commandeRowset->current(); + $selectEven = $commandeTable->select() + ->order('date_added DESC')->limit(1); + $evenRowset = $commande->findDependentRowset( + 'Application_Model_CommandesEven', null, $selectEven); + $info = ''; + if($evenRowset->count()>0){ + $even = $evenRowset->current(); + $info = $even->commentaire; + } + $ref->reference = strtoupper($commande->type).'-'.$commande->id; + $ref->dateCommande = $commande->date_added; + $ref->dateMaj = $commande->date_updated; + $ref->dateReception = $commande->date_closed; + $ref->info = $info; + $ref->fichier = ''; // @todo : Détecter le fichier + $ref->login = $commande->user_login; + $infoCommande = unserialize($commande->infoCommande); + $infosDemandeur->reference = $commande->demandeurReference; + $infosDemandeur->email = $commande->demandeurEmail; + $infosDemandeur->tel = $commande->demandeurTel; + $infosDemandeur->nom = $commande->demandeurNom; + $infosDemandeur->service = $commande->demandeurService; + $infosDemandeur->societe = $commande->demandeurSociete; + $infosDemandeur->adresse = $commande->demandeurAdresse; + $infosDemandeur->cp = $commande->demandeurCp; + $infosDemandeur->ville = $commande->demandeurVille; + } + else + { + $error->errnum = 0; + $error->errmsg = 'Référence inconnue'; + } + $output = new CmdPiecesReturn(); + $cmd = new CmdPiecesDetail(); + $cmd->refCommande = $ref; + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $output->commande = $cmd; + $output->error = $error; + return $output; + } + + /** + * Retourne la liste des commandes de pièces ainsi que leur détails + * @param CmdFiltrePieces $filtre + * @param int $position + * @param int $nbRep + * @return ListeCmdPiecesReturn + */ + public function getListeCmdPieces( $filtre, $position = 0, $nbRep = 20 ) + { + $error = new ErrorType(); + //Traitements des filtres pour générer la requête SQL + + //Selection + $nbCommandes = 0; + try + { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commandeTable = new Application_Model_Commandes(); + $select = $commandeTable->select()->where('type = ?', 'pieces'); + $countRowset = $commandeTable->fetchAll($select); + $nbCommandes = $countRowset->count(); + $select->order('date_added DESC')->limit($nbRep, $position); + $commandeRowset = $commandeTable->fetchAll($select); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 1; + $error->errmsg = 'Erreur'; + } + + if ( $commandeRowset->count()>0 ) + { + $liste = array(); + foreach ($commandeRowset as $commande) + { + $selectEven = $commandeTable->select() + ->order('date_added DESC')->limit(1); + $evenRowset = $commande->findDependentRowset( + 'Application_Model_CommandesEven', null, $selectEven); + $info = ''; + if($evenRowset->count()>0){ + $even = $evenRowset->current(); + $info = $even->commentaire; + } + + $ref = new RefCommande(); + $ref->reference = strtoupper($commande->type).'-'.$commande->id; + $ref->dateCommande = $commande->date_added; + $ref->dateMaj = $commande->date_updated; + $ref->dateReception = $commande->date_closed; + $ref->info = $info; + $ref->fichier = ''; // @todo : Détecter le fichier + $ref->login = $commande->user_login; + + $infoCommande = new InfoCommandePieces(); + $infoCommande = unserialize($commande->infoCommande); + + $infosDemandeur = new InfosDemandeur(); + $infosDemandeur->reference = $commande->demandeurReference; + $infosDemandeur->email = $commande->demandeurEmail; + $infosDemandeur->tel = $commande->demandeurTel; + $infosDemandeur->nom = $commande->demandeurNom; + $infosDemandeur->service = $commande->demandeurService; + $infosDemandeur->societe = $commande->demandeurSociete; + $infosDemandeur->adresse = $commande->demandeurAdresse; + $infosDemandeur->cp = $commande->demandeurCp; + $infosDemandeur->ville = $commande->demandeurVille; + + $cmd = new CmdPiecesDetail(); + $cmd->refCommande = $ref; + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + + $liste[] = $cmd; + } + } + + $output = new ListeCmdPiecesReturn(); + $output->error = $error; + $output->nbCommandes = $nbCommandes; + $output->liste = $liste; + return $output; + } + + /** + * Retourne la liste des statuts de commande + * @param string $type + * @return CmdStatut[] + */ + public function getListeCmdStatut( $type ) + { + Zend_Registry::get('WsLogger')->info("getListeStatut - ".$type); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $dbStatut = new Application_Model_CommandesStatut(); + $result = $dbStatut->fetchAll(array("commande_type = '$type'")); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + $listeStatut = array(); + if (count($result)>0) + { + foreach($result as $r) + { + $statut = new CmdStatut(); + $statut->code = $r['code']; + $statut->lib = $r['libelle']; + $listeStatut[] = $statut; + } + } + return $listeStatut; + } + + /** + * Spécifier un état défini pour une commande + * (avec déclenchement d'une action) + * @param int $reference + * @param int $statutCode + * @return bool + */ + public function setCmdStatut( $reference, $statutCode) + { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $dbStatut = new Application_Model_CommandesStatut(); + $row = $dbStatut->fetchRow(array("code = '$statutCode'")); + if ( count($row)>0 && $this->setCommandeEven($reference, $row['lib']) ) + { + if (!empty($row['action'])){ + switch($row['action']){ + case 'CLOSE': + //date_closed + break; + } + } + return true; + } else { + return false; + } + } + + /** + * Spécifier un état pour une commande + * @param int $reference + * @param string $comment + * @return bool + */ + public function setCmdEven ( $reference, $comment ) + { + $this->authenticate(); + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + try { + //Vérifier que la commande existe avec la référence fournie + $commandeTable = new Application_Model_Commandes(); + $commandeRowset = $commandeTable->find($reference); + if ($commandeRowset->count()>0) + { + $commande = $commandeRowset->current(); + //Enregistrer l'événement + $commandeEvenTable = new Application_Model_CommandesEven(); + $insert = $commandeEvenTable->createRow(); + $insert->commande_id = $commande->id; + $insert->commentaire = $comment; + $insert->user_login = $this->User->login; + $insert->save(); + //Mettre à jour la commande + $commande->date_updated = date('Y-m-d H:i:s'); + $commande->save(); + return true; + } else { + return false; + } + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + return false; + } + } + + /** + * Ajout du nom de fichier liée à la commande + * @param int $reference + * @param string $filename + * @return bool + */ + public function setCmdDocument( $reference, $filename ) + { + $this->authenticate(); + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + try { + //Vérifier que la commande existe avec la référence fournie + $commandeTable = new Application_Model_Commandes(); + $commandeRowset = $commandeTable->find($reference); + if ($commandeRowset->count()>0) + { + $commande = $commandeRowset->current(); + switch($commande->type) + { + case 'pieces': + $infoCommandePieces = $commande->findDependentRowset('Application_Model_CommandesPieces'); + if ($infoCommandePieces->count()>0) + { + //Update informations pieces + $commandePieces = $infoCommandePieces->current(); + $commandePieces->fichier = $filename; + $commandePieces->save(); + //Mettre à jour la commande + $commande->date_updated = date('Y-m-d H:i:s'); + $commande->save(); + //Mettre à jour les évenements de commande + //@todo + return true; + } + break; + case 'default': + return false; + break; + } + } else { + return false; + } + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + return false; + } + } + + /** + * Récupère les informations du profil connecté + * @param string $login + * @param string $ipUtilisateur + * @return InfosLoginReturn + */ + public function getInfosLogin($login, $ipUtilisateur = '') + { + $this->authenticate(); + + //Initialisation + if (empty($ipUtilisateur)) $ipUtilisateur = $_SERVER['REMOTE_ADDR']; + $error = new ErrorType(); + + debugLog('I',"getInfosLogin pour $login (IP=$ipUtilisateur)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + //L'utilisateur qui demande les informations est différent + if ($this->User->login<>$login && + ( $this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur') ) + { + //debugLog('I',"getInfosLogin - Un administrateur veut il des infos sur un login",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + /** Un administrateur veut il des infos sur un login ? **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select( + 'utilisateurs u, clients c', + 'u.login, u.id, u.email, u.password, u.idClient, u.typeCompte, u.actif, u.filtre_ip, u.civilite, u.nom, u.prenom, u.tel, u.fax, u.mobile, u.profil, u.raisonSociale, u.siret, u.adrNum, u.adrIndRep, u.adrTypeVoie, u.adrLibVoie, u.adrCp, u.adrVille, u.adrComp, u.tel, u.fax, u.mobile, u.pref, u.profil, u.dateInscription, u.dateValidation, u.nombreConnexions, u.dateDerniereConnexion, u.droits, u.referenceParDefaut, u.nbReponses, u.formatMail, u.dateDebutCompte, u.dateFinCompte, u.maxFicheId, c.droits AS droitsClients, c.timeout', + "u.login='$login' AND u.idClient=c.id AND u.deleted=0", + false, MYSQL_ASSOC + ); + $tabRep = $rep[0]; + if (count($rep)>0) + { + $timeOutSec=$tabRep['timeout']*60; + if ($timeOutSec==0) $timeOutSec=1800; + $rep = array( + 'login'=> $login, + 'id'=> $tabRep['id'], + 'email'=> $tabRep['email'], + 'typeCompte'=> $tabRep['typeCompte'], + 'idClient'=> $tabRep['idClient'], + 'filtre_ip'=> $tabRep['filtre_ip'], + 'civilite'=> $tabRep['civilite'], + 'nom'=> $tabRep['nom'], + 'prenom'=> $tabRep['prenom'], + 'raisonSociale'=> $tabRep['raisonSociale'], + 'siret'=> $tabRep['siret'], + 'adrNum'=> $tabRep['adrNum'], + 'adrIndRep'=> $tabRep['adrIndRep'], + 'adrTypeVoie'=> $tabRep['adrTypeVoie'], + 'adrLibVoie'=> $tabRep['adrLibVoie'], + 'adrCp'=> $tabRep['adrCp'], + 'adrVille'=> $tabRep['adrVille'], + 'adrComp'=> $tabRep['adrComp'], + 'tel'=> $tabRep['tel'], + 'fax'=> $tabRep['fax'], + 'mobile'=> $tabRep['mobile'], + 'pref'=> $tabRep['pref'], + 'profil'=> $tabRep['profil'], + 'dateInscription'=> $tabRep['dateInscription'], + 'dateValidation'=> $tabRep['dateValidation'], + 'nombreConnexions'=> $tabRep['nombreConnexions'], + 'dateDerniereConnexion'=> $tabRep['dateDerniereConnexion'], + 'droits'=> $tabRep['droits'], + 'droitsClients'=> $tabRep['droitsClients'], + 'timeout'=> $timeOutSec, + 'nbReponses'=> $tabRep['nbReponses'], + 'formatMail'=> $tabRep['formatMail'], + 'reference'=> $tabRep['referenceParDefaut'], + 'dateDebutCompte'=> $tabRep['dateDebutCompte'], + 'dateFinCompte'=> $tabRep['dateFinCompte'], + 'maxFicheId'=> $tabRep['maxFicheId'], + ); + $tabTmp = $iDbCrm->select('clients', 'typeScore', 'id='.$tabRep['idClient'], false, MYSQL_ASSOC); + $tabRep = $tabTmp[0]; + $rep['typeScore'] = $tabRep['typeScore']; + } + } + else + { + //Identification utilisateur + $connected = true; + if (trim($this->User->filtre_ip)<>'') + { + //debugLog('I',"getInfosLogin test filtre IP",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $connected = checkPlagesIp($this->User->filtre_ip, $ipUtilisateur); + if (!$connected) + { + debugLog('I',"getInfosLogin Adresse IP $ipUtilisateur non declaree pour le compte $login",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 10818; + $error->errmsg = "Adresse IP $ipUtilisateur non declaree pour ce compte. Contactez votre administrateur !"; + } + } + $rep = array( + 'connected'=> $connected, + 'login'=> $this->User->login, + 'id'=> $this->User->id, + 'idClient'=> $this->User->idClient, + 'email'=> $this->User->email, + 'typeCompte'=> $this->User->typeCompte, + 'filtre_ip'=> $this->User->filtre_ip, + 'ipPasserelle'=> $this->User->ipConnexion, + 'ipConnexion'=> $ipUtilisateur, + 'civilite'=> $this->User->civilite, + 'nom'=> $this->User->nom, + 'prenom'=> $this->User->prenom, + 'raisonSociale'=> $this->User->raisonSociale, + 'siret'=> $this->User->siret, + 'adrNum'=> $this->User->adrNum, + 'adrIndRep'=> $this->User->adrIndRep, + 'adrTypeVoie'=> $this->User->adrTypeVoie, + 'adrLibVoie'=> $this->User->adrLibVoie, + 'adrCp'=> $this->User->adrCp, + 'adrVille'=> $this->User->adrVille, + 'adrComp'=> $this->User->adrComp, + 'tel'=> $this->User->tel, + 'fax'=> $this->User->fax, + 'mobile'=> $this->User->mobile, + 'pref'=> $this->User->pref, + 'profil'=> $this->User->profil, + 'dateInscription'=> $this->User->dateInscription, + 'dateValidation'=> $this->User->dateValidation, + 'nombreConnexions'=> $this->User->nombreConnexions, + 'dateDerniereConnexion'=> $this->User->dateDerniereConnexion, + 'droits'=> $this->User->droits, + 'droitsClients'=> $this->User->droitsClients, + 'timeout'=> $this->User->timeout, + 'nbReponses'=> $this->User->nbReponses, + 'formatMail'=> $this->User->formatMail, + 'reference'=> $this->User->referenceParDefaut, + 'dateDebutCompte'=> $this->User->dateDebutCompte, + 'dateFinCompte'=> $this->User->dateFinCompte, + 'maxFicheId'=> $this->User->maxFicheId, + 'typeScore'=> $this->User->typeScore, + ); + //debugLog('I',"getInfosLogin fin ".print_r($rep,true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + $result = new InfosLogin(); + $result = arrayToClass($rep, 'InfosLogin'); + $output = new InfosLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Mise à jour des informations du profil connecté + * @param string $login + * @param string $action (delete|actif|desactif|changepwd|new|update) + * @param InfosLoginData $infos + * @return SetInfosLoginReturn + */ + public function setInfosLogin($login, $action, $infos = null) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $result = false; + + switch($action) + { + case 'delete': + + if ($this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur') { + $tabUpdate = array( 'deleted' => 1 ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'")){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } + } + break; + + case 'actif': + case 'desactif': + if ($this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur'){ + if ($action=='actif') $actif = 1; + if ($action=='desactif') $actif = 0; + $tabUpdate = array( 'actif' => $actif ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'")){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } + } + + break; + + case 'changepwd': + + $tabUpdate = array( + 'password' => stripslashes($infos->password), + ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'", true)){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } + + break; + + case 'new': + + if ($this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur') { + $tabUpdate = array( + 'idClient' => $infos->idClient, + 'login' => $login, + 'password' => stripslashes($infos->password), + 'nom' => stripslashes($infos->nom), + 'prenom' => stripslashes($infos->prenom), + 'referenceParDefaut' => stripslashes($infos->reference), + 'email' => stripslashes($infos->email), + 'tel' => stripslashes($infos->tel_fix), + 'fax' => stripslashes($infos->tel_fax), + 'mobile' => stripslashes($infos->tel_mob), + 'nbReponses' => $infos->rech_nbrep, + 'formatMail' => $infos->formatMail, + 'profil' => (isset($infos->profil) || !in_array($infos->profil, array('SuperAdministrateur','Administrateur', 'Utilisateur')) ) ? $infos->profil : 'Utilisateur', + 'pref' => implode(' ',$infos->pref->item), + 'droits' => implode(' ', $infos->droits->item), + ); + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->insert('utilisateurs', $tabUpdate)){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Création impossible'; + } + } + + break; + + case 'update': + + if (!empty($infos->password)){ + $tabUpdate['password'] = stripslashes($infos->password); + } + $tabUpdate['email'] = stripslashes($infos->email); + $tabUpdate['tel'] = stripslashes($infos->tel_fix); + $tabUpdate['fax'] = stripslashes($infos->tel_fax); + $tabUpdate['mobile'] = stripslashes($infos->tel_mb); + $tabUpdate['nbReponses'] = $infos->rech_nbrep; + $tabUpdate['formatMail'] = $infos->formatMail; + $tabUpdate['pref'] = implode(' ',$infos->pref->item); + + if ($this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur') { + $tabUpdate['droits'] = implode(' ', $infos->droits->item); + $tabUpdate['nom'] = stripslashes($infos->nom); + $tabUpdate['prenom'] = stripslashes($infos->prenom); + $tabUpdate['referenceParDefaut'] = stripslashes($infos->reference); + $tabUpdate['profil'] = isset($infos->profil) ? $infos->profil : 'Utilisateur'; + } + + $iDbCrm = new WDB('sdv1'); + if ($iDbCrm->update('utilisateurs', $tabUpdate, "login='$login'", true)){ + $result = true; + } else { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } + + break; + default; + $result = false; + break; + } + + $output = new SetInfosLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + + /** + * Obtention automatique d'un nouveau login pour un client + * @param string $login + * @return NextLoginReturn + */ + public function getNextLogin( $login ) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + if ($this->User->profil=='Administrateur' || + $this->User->profil=='SuperAdministrateur') { + + /** Un administrateur veut créer un nouveau login **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('utilisateurs u, clients c', 'u.idClient, c.racineLogin, c.droits', "u.login='$login' AND u.idClient=c.id"); + $racine = $rep[0]['racineLogin']; + $idClient = $rep[0]['idClient']; + $droitsClients = $rep[0]['droits']; + $rep = $iDbCrm->select('utilisateurs', 'login, length(login) as taille', "login like '$racine%' group by login order by taille desc, login desc LIMIT 0,1"); + if (count($rep)==0) { + $racine.='1'; + } else { + $last_i = preg_replace("/\D/", '',$rep[0]['login'])*1; + $racine.= $last_i+1; + } + $result = new NextLoginResult(); + $result->racine = $racine; + $result->idClient = $idClient; + $result->droitsClients = $droitsClients; + + } else { + + $error->errnum = 0; + $error->errmsg = 'Acces non authorisé!'; + } + $output = new NextLoginReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Enregistre une action utilisateur pour la facturation + * @param string $page + * @param string $siret + * @param int $id + * @param string $ref + * @return void + */ + public function setLog($page, $siret, $id=0, $ref='') + { + $this->authenticate(); + //Initialisation + if (empty($id)) $id = 0; + if (empty($ref)) $ref = ''; + if ( $id!=0 ) { + $ref2=''.$id.'/'.$ref; + } else { + $ref2=$ref; + } + $this->wsLog($page, $siret, $ref2); + debugLog('I',"Insertion d'un log pour la page $page $siret $ref2",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + + /** + * Met a jour les informations sur un mandataire + * @param SetInfosMandataire $infos Informations sur le mandataire à créer ou à ajouter (ajout si id absent) + * @return SetMandataireReturn + **/ + public function setMandataire(SetInfosMandataire $infos) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $result = true; + + $iDb = new WDB(); + /** Nom et Identifiant de l'opérateur de saisie **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('utilisateurs', 'id', "login='".$this->User->login."'"); + $idUser = $rep[0][0]; + + $infos = serialize($tabInfos); + debugLog('I',"Ajout/MAJ de mandaitaire $infos demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $type = substr(strtoupper($infos->type),0,1); + $stag = substr(strtoupper($infos->type),1,1); + if ($stag=='S') { $stag=1; } else { $stag=0; } + if ($type=='A' || $type=='H' || $type=='M' || $type=='V' || + $type=='N' || $type=='T') + { + $tabUpdate=array( + 'sirenGrp' => substr($infos->sirenGrp,0,9)*1, + 'nicGrp' => substr($infos->sirenGrp,9,5)*1, + 'sirenMand' => substr($infos->sirenMand,0,9)*1, + 'nicMand' => substr($infos->sirenMand,9,5)*1, + 'Nom' => ucwords(strtolower($infos->Nom)), + 'Prenom' => ucwords(strtolower($infos->Prenom)), + 'type' => $type, + 'stagiaire' => $stag, + 'coursAppel' => intval($infos->coursAppel), + 'coursAppel2' => intval($infos->coursAppel2), + 'tribunal' => $infos->tribunal, + 'Statut' => strtoupper($infos->Statut), + 'adresse' => ucwords($infos->adresse), + 'adresseComp' => strtoupper($infos->adresseComp), + 'cp' => intval($infos->cp), + 'ville' => strtoupper($infos->ville), + 'tel' => $infos->tel, + 'fax' => $infos->fax, + 'email' => $infos->email, + 'web' => $infos->web, + 'contact' => $infos->contact, + 'idUser' => $idUser, + ); + } + $id = str_replace('m','', ''.$infos->id)*1; + if (intval($id)!=0) { + // MAJ + if (!$iDb->update('tabMandataires', $tabUpdate, "id=$id", true)) { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $result = false; + } + } else { + // Insertion + if (!$iDb->insert('tabMandataires', array_merge($tabUpdate,array('dateInsert'=>date('YmdHis'))), true)) { + $error->errnum = 1; + $error->errmsg = 'Insertion impossible'; + $result = false; + } + } + $output = new SetMandataireReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Supprime une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return SupprAnnonceCollecteReturn + */ + public function supprAnnonceCollecte($idAnn, $siret=null) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + $siren = substr($siret,0,9)*1; + $iDb = new WDB(); + $idAnn = preg_replace('/^0\./','', ''.$idAnn)*1; + + if ($idAnn>0) + { + if ($iDb->update('annonces',array( + 'dateSuppr'=>date('YmdHis'), + 'idSuppr'=>$this->User->id), + "id=$idAnn", false)) + { + debugLog('I',"Suppression de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + else + { + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + debugLog('I',"Suppression impossible de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + } + else + { + $error->errnum = 1; + $error->errmsg = 'idAnn incorrect'; + } + } + $output = new SupprAnnonceCollecteReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le mandataire par son id + * @param int $idMand Identifiant du mandataire + * @return MandataireReturn + */ + public function getMandataire($idMand) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + debugLog('I',"Donne le Mandataires correspondant à $idMand",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new classMInsee(); + $tabRet = $iInsee->getMandataire($idMand); + $mandataire = new MandataireDetail(); + $mandataire->Nom = $tabRet['Nom']; + $mandataire->Prenom = $tabRet['Prenom']; + $mandataire->tribunal = $tabRet['tribunal']; + $mandataire->adresse = $tabRet['adresse']; + $mandataire->adresseComp = $tabRet['adresseComp']; + $mandataire->ville = $tabRet['ville']; + $mandataire->email = $tabRet['email']; + $mandataire->web = $tabRet['web']; + $mandataire->contact = $tabRet['contact']; + $output = new MandataireReturn(); + $output->error = $error; + $output->result = $mandataire; + return $output; + } + + /** + * Liste les mandataires compétentes pour une cours d'appel donnée + * + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @return MandatairesReturn + */ + public function getMandataires($codeTribunal=0, $type=array('A','M')) + { + $this->authenticate(); + //Initialisation + $iInsee = new MInsee(); + $error = new ErrorType(); + $trib = serialize($codeTribunal); + debugLog('I',"Liste des Mandaitaires ou Administrateur du Tribunal/Cours d'Appel $trib demandé",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!is_array($codeTribunal) && strlen($codeTribunal)>3 && $codeTribunal*1==0) + { + // $codeTribunal est un identifiant de tribunal + $iBodacc = new MBodacc(); + $tabTmp = $iInsee->getMandataires(array($iBodacc->getTribunalIdCA($codeTribunal)), true, $type); + } + elseif ($codeTribunal*1==0) + { + // On veut tous les mandataires + $tabTmp = $iInsee->getMandataires(array(), true, $type); + } + elseif (is_array($codeTribunal)) + { + // On veut les mandataires d'une CA + $tabTmp = $iInsee->getMandataires($codeTribunal, true, $type); + } + $tabRet = array(); + foreach ($tabTmp as $i=>$mand){ + $mandataire = new Mandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = $mand; + $tabRet[]= $mandataire; + } + $output = new MandatairesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + + + /** + * + * Retourne la liste des conventions + * @param string $siren + * @return ListeConventionsReturn + */ + public function getListeConventions($siren) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + debugLog('I',"Liste des conventions demandée pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)<>9){ + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren Siret inexistant'; + + } elseif ($siren*1==0){ + + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren); + + if (empty($tabIdentite) && isset($tabIdentite['erreur']) && + $tabIdentite['erreur']<>''){ + + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $naf = $tabIdentite['NafEnt']; + $trancheEffectif = $tabIdentite['EffEnTr']; + $effectif = $tabIdentite['Effectif']; + $fj = $tabIdentite['entreprise']['FJCodeEntrep']; + + $isolv = new MSolvabilite($siren, $naf, $trancheEffectif, + $effectif, $tabIdentite['CP'], $fj, $tabIdentite['Capital'], + $tabIdentite['CapitalDev'], $tabIdentite['DateCreaEn'], + $tabIdentite['DateCreaEt'] + ); + $noteStructure = $isolv->getSolvabilite(); + $naf4 = $isolv->getNaf4($naf); + + $tabTmp = $iInsee->listeConventions($naf4, $tabIdentite['Dept']); + foreach ($tabTmp as $conv) + { + $convention = new Convention(); + $convention->idCC = $conv['id CC']; + $convention->nomCC = $conv['nom CC']; + $convention->infoCC = $conv['infoCC']; + $convention->editorCC = $conv['editeur CC']; + $convention->nbPageCC = $conv['nb page CC']; + $convention->isbnCC = $conv['isbn CC']; + $convention->dateCC = $conv['date edition CC']; + $convention->joCCmaj = $conv['joCCmaj']; + $tabRet[] = $convention; + } + $this->wsLog('conventions',$siren); + } + } + + $output = new ListeConventionsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Donne la cours d'appel d'un tribunal par son code + * @param string $codeTribunal Code BODACC sur 6 caractères du tribunal + * @return int + **/ + public function getIdCoursAppel($codeTribunal) + { + $this->authenticate(); + $iBodacc = new MBodacc(); + return $iBodacc->getTribunalIdCA($codeTribunal); + } + + /** + * Duplique une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return DupliqueAnnonceReturn + */ + public function dupliqueAnnonceCollecte($idAnn, $siret = null) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = ''; + $error = new ErrorType(); + $result = 0; + + if (!$this->checkEdition()) { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } else { + $siren = intval(substr($siret,0,9)); + $nic = intval(substr($siret,9,5)); + $iDb = new WDB(); + $idAnn = intval(preg_replace('/^0\./','', ''.$idAnn)); + if ($idAnn>0 && $siren>1000){ + $res = $iDb->select('annonces', '*', "id=$idAnn", false, MYSQL_ASSOC); + if (count($res)==0) { + $error->errnum = 1; + $error->errmsg = 'Annonce inexistante'; + } else { + $annonce = $res[0]; + // Suppression des zones inexistantes dans la table ou devant être vides + unset($annonce['id']); + unset($annonce['nic']);//=$nic; + $annonce['siren'] = $siren; + $annonce['nic'] = $nic; + if ($iDb->insert('annonces', $annonce, false)) { + debugLog('I',"Duplication de l'annonce collectée n°$idAnn sur $siret",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = 1; + } else { + debugLog('I',"Suppression impossible de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + } + } + } + } + $output = new DupliqueAnnonceCollecte(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le contenu d'une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return AnnonceCollecteReturn + */ + public function getAnnonceCollecte($idAnn, $siret) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $annonceCollecte = new AnnonceCollecte(); + $siren = substr($siret,0,9)*1; + if (!$this->checkEdition()) { + + $error->errnum = 0; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $iDb = new WDB(); + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $idAnn = preg_replace('/^0\./','', ''.$idAnn) * 1; + if ($idAnn>0) + { + $res = $iDb->select('annonces', + 'id, siren, sirenValide, typeEven, strEven, raisonSociale, adresse, codePostal, ville, dateJugement, dateCessationPaiement, dateEffetFinP, numero, inter1type, inter1id, inter1nom, inter2type, inter2id, inter2nom, inter3type, inter3id, inter3nom, inter4type, inter4id, inter4nom, tribunal, montant, actionsNb, complement, infosBrutes, nouvActivite, nouvDir, nouvAdr, nouvFJ, annonce, source, parutionIdJal, parutionNum, dateSource, idSaisie, idAnnonce, dateInsert', + "id=$idAnn", false, MYSQL_ASSOC + ); + if (count($res)>0) + { + $ann = $res[0]; + $annonceCollecte->id = $ann['id']; + $annonceCollecte->siren = $ann['siren']; + $annonceCollecte->raisonSociale = $ann['raisonSociale']; + $annonceCollecte->adresse = $ann['adresse']; + $annonceCollecte->codePostal = $ann['codePostal']; + $annonceCollecte->ville = $ann['ville']; + $annonceCollecte->dateJugement = $ann['dateJugement']; + + //@todo : Les libellées ne sont pas présent LibEven + $tabEven = array(); + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $ann['typeEven']; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + if (!empty($ann['strEven'])){ + foreach ( explode(';',$ann['strEven']) as $code ) + { + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $code; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + } + } + + $annonceCollecte->even = $tabEven; + $annonceCollecte->dateSource = $ann['dateSource']; + $annonceCollecte->dateCessationPaiement = $ann['dateCessationPaiement']; + $annonceCollecte->dateEffetFinP = $ann['dateEffetFinP']; + $annonceCollecte->tribunal = $ann['tribunal']; + $annonceCollecte->numero = $ann['numero']; + $annonceCollecte->montant = $ann['montant']; + $annonceCollecte->actionsNb = $ann['actionsNb']; + $annonceCollecte->inter1type = $ann['inter1type']; + $annonceCollecte->inter1id = $ann['inter1id']; + $annonceCollecte->inter1nom = $ann['inter1nom']; + $annonceCollecte->inter2type = $ann['inter2type']; + $annonceCollecte->inter2id = $ann['inter2id']; + $annonceCollecte->inter2nom = $ann['inter2nom']; + $annonceCollecte->inter3type = $ann['inter3type']; + $annonceCollecte->inter3id = $ann['inter3id']; + $annonceCollecte->inter3nom = $ann['inter3nom']; + $annonceCollecte->complement = $ann['complement']; + $annonceCollecte->nouvActivite = $ann['nouvActivite']; + $annonceCollecte->nouvDir = $ann['nouvDir']; + $annonceCollecte->nouvAdr = $ann['nouvAdr']; + $annonceCollecte->nouvFJ = $ann['nouvFJ']; + $annonceCollecte->source = $ann['source']; + + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret) : ".$ann['raisonSociale'],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + } + else + { + $error->errnum = 745741; + $error->errmsg = 'Selection impossible'; + } + } + $output = new AnnonceCollecteReturn(); + $output->error = $error; + $output->result = $annonceCollecte; + return $output; + } + + /** + * getDevises + * @param string $codeIsoDevise + * @return DevisesReturn + */ + public function getDevises($codeIsoDevise='') + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if (empty($codeIsoDevise)) $codeIsoDevise = ''; + + debugLog('I',"Liste des devises ou devise $codeIsoDevise demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabTmp = $iInsee->getDevises($codeIsoDevise); + + $tabRet = array(); + foreach ($tabTmp as $i=>$dev) + { + if ( $i!='' ){ + $devise = new Devise(); + $devise->devIso = $i; + $devise->devNom = $dev; + $tabRet[] = $devise; + } + } + $output = new DevisesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des codes devises, libellés, date et valeur + * (toutes les devises ou une seule) + * @param string $devise Devise sur 3 lettres (facultatif) + * @return DevisesCoursReturn + */ + public function getDeviseCours($devise=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB('sdv1'); + if ($devise) $strDevise=" AND c.devise='$devise' "; + else $strDevise=''; + + $tabRet = array(); + + $res = $iDb->select('devise_cours c, devise_liste l', 'c.devise, l.devNom, max(c.date) as dateChange, c.valeur', "c.devise=l.devIso $strDevise GROUP BY c.devise ORDER BY c.devise ASC", false, MYSQL_ASSOC); + foreach ($res as $tabDev) + { + $devise = new DevisesCours(); + $devise->codeDevise = $tabDev['devise']; + $devise->nomDevise = $tabDev['devNom']; + $devise->dateChange = $tabDev['dateChange']; + $devise->valeurDevise = $tabDev['valeur']; + $tabRet[] = $devise; + } + $output = new DevisesCoursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getMarques + * @param string $siren + * @param int $idDepot + * @return MarquesReturn + */ + public function getMarques($siren, $idDepot=0) + { + $this->authenticate(); + $this->permission('marques'); + debugLog('I',"Liste des marques déposées pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($idDepot)) $idDepot = 0; + $error = new ErrorType(); + $marques = array(); + require_once 'Metier/partenaires/classMMarques.php'; + $iMarque = new MMarques(); + $ret = $iMarque->getMarques($siren, $idDepot); + Zend_Registry::get('WsLogger')->info(__FUNCTION__.' : '. + print_r($ret,1)); + + foreach ($ret as $item) { + if (trim($item['imgLink'])<>'') $idLien = $item['numeroMarque']; + else $idLien = ''; + if ($idDepot==$item['numeroMarque']) { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Date = $item['dateDepot']; + $marque->Depot = $item['numeroMarque']; + $marque->IdLien = $idLien; + $marque->UrlLien = $item['UrlLien']; + $marque->PdfDispo = $item['pdfLink']; + $marque->Classes = $item['classesMarque']; + $marque->Perimetre = $item['periMarque']; + $marque->DateExpir = $item['dateExpir']; + $marques = array(); + $marques[] = $marque; + break; + } else { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Date = $item['dateDepot']; + $marque->Depot = $item['numeroMarque']; + $marque->IdLien = $idLien; + $marque->UrlLien = $item['UrlLien']; + $marque->PdfDispo = $item['pdfLink']; + $marques[] = $marque; + } + } + + Zend_Registry::get('WsLogger')->info(__FUNCTION__.' : '. + print_r($marques,1)); + + $this->wsLog('marques',$siren); + $output = new MarquesReturn(); + $output->error = $error; + $output->result = $marques; + return $output; + } + + /** + * Enter description here ... + * @param string $siren + * @param string $piece + * @param string $type + * @param integer $visu + * @param integer $courrier + * @param string $ref + * @return PieceReturn + */ + public function getPiece($siren, $piece='kbis', $type='', $visu=1, $courrier=0, $ref='') + { + $this->authenticate(); + $this->permission('kbis'); + set_time_limit(400); + + if (empty($piece)) $piece = 'kbis'; + if (empty($type)) $type = ''; + if (empty($visu)) $visu = 1; + if (empty($courrier)) $courrier = 1; + if (empty($ref)) $ref = ''; + $error = new ErrorType(); + + $erreur = false; + + $kbisLocalPDF = DOC_WEB_LOCAL."kbis/$piece-$siren.pdf"; + + if (file_exists($kbisLocalPDF) + && date('Ymd', filemtime($kbisLocalPDF))==date('Ymd') + && filesize($kbisLocalPDF)>0 ) { + $size = filesize($kbisLocalPDF); + $erreur = false; + $tabNom = array(); + $ficDist = ''; + $cache = 1; + } else { + exec("php ".APPLICATION_PATH."/../batch/getPieces.php $siren $piece > /dev/null &"); + $ficDist=''; + $size=$cache=0; + } + // On supprimer l'ancien kbis si trop vieux ou vide + if (date('Ymd', filemtime($kbisLocalPDF))<>date('Ymd') + || filesize($kbisLocalPDF)==0) { + unlink($kbisLocalPDF); + } + $result = new PieceResult(); + $result->Siren = $siren; + //@todo : Envoyer vers controlleur + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result->Url = $hostname.'/data/kbis/'.$piece.'-'.$siren.'.pdf'; + + $result->Taille = $size; + $result->Cache = $cache; + $result->fichier = $ficDist; + $this->wsLog('kbis', $siren, "$cache/$visu/$courrier/$type/$ref"); + $output = new PieceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Enregistrement de document actes ou status d'association + * @param string $siren Numéro Siren + * @param string $waldec Numéro waldec + * @param string $type Type d'acte + * @param string $libelle Libellé de l'acte + * @param string $date Date des l'acte au format + * @param int $nbPages Nombre de pages dans le fichier + * return boolean + */ + public function setActeAsso( $siren, $waldec, $type, $libelle, $date, $nbPages ) + { + $this->authenticate(); + if (!$this->checkEdition()) { + $this->sendError('0902'); + } + ($type == 'ST') ? $type_acte = 'ST' : $type_acte = ''; + + $data = array( + 'siren' => $siren, + 'waldec' => waldec, + 'pdfLink' => '', + 'pdfSize' => '', + 'pdfVer' => '', + 'pdfPage' => '', + 'date_acte' => WDate::dateT('d/m/Y', 'Y-m-d', $date), + 'type_acte' => $type_acte, + 'type_acte_libelle' => $libelle, + 'nbpages_acte' => $nbPages, + ); + try { + $db = Zend_Db::factory($this->dbConfig->Webservice); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $doc = new Application_Model_AssoActes(); + $doc_id = $doc->insert($data); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id) + { + return true; + } + return false; + } + + /** + * Commande de statut association + * @param InfoCmdAsso $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdAssoReturn + */ + public function setCmdAsso( $infosCommande, $infosDemandeur ) + { + $this->authenticate(); + $this->permission('actes'); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB(); + + $siren = $infosCommande->siren; + $idEntreprise = intval($infosCommande->idEntreprise); + $assoNom = $infosCommande->raisonSociale; + debugLog('I',"commandeAsso pour $assoNom ($siren) début",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, 0, $idEntreprise); + $assoSigle = $tabIdentite['Sigle']; + $assoAdresse = $tabIdentite['Adresse'].EOL.$tabIdentite['Adresse2']; + $assoCP = $tabIdentite['CP']; + $assoVille = $tabIdentite['Ville']; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert=array( + 'idUser' => $this->User->id, + 'source' => 'asso', + 'login' => $this->User->login, + 'emailCommande' => $mail, + 'siren' => $siren, + 'refUtilisateur' => $infosDemandeur->reference, + 'refDocument' => serialize($infosDemandeur), + 'refCommande' => serialize($infosCommande), + 'dateCommande' => DATETIME, + ); + + $url='http://d2g.refasso.com/Dev2Go.web'; + $referer=''; // http://d2g.refasso.com/dev2go.web?anchor=dem_statuts_02 + $cookie=''; + $post = array( + 'mode'=>20, + 'lBlockID'=>445031, + 'sInputNames'=>'', + 'lFormSubAction'=>100, + 'sLinkTo'=>'dem_statuts_03', + 'iDune_DateDemande_input'=>str_replace('/', '%2F', date('d/m/Y')), + 'iDune_TitreAsso_input'=>urlencode($assoNom), + 'iDune_SigleAsso_input'=>urlencode($assoSigle), + 'iDune_AdresseAsso_input'=>urlencode($assoAdresse), + 'iDune_CpAsso_input'=>urlencode($assoCP), + 'iDune_VilleAsso_input'=>urlencode($assoVille), + 'iDune_TelAsso_input'=>'', + 'iDune_FaxAsso_input'=>'', + 'iDune_EmailAsso_input'=>'', + 'iDune_DateCreaAsso_input'=>'', + 'iDune_DateDerDeclaAsso_input'=>'', + 'iDune_NomDem_input'=>'SCORES+ET+DECISIONS', + 'iDune_PrenomDem_input'=>'Yoann+LE+NAOUR', + 'iDune_AdresseDem_input'=>'19+rue+de+Clairefontaine', + 'iDune_CpDem_input'=>78120, + 'iDune_VilleDem_input'=>'RAMBOUILLET', + 'iDune_TelDem_input'=>'0134573953', + 'iDune_EmailDem_input'=>'asso%40scores-decisions.com', + 'iDune_CGAccepte_input'=>'o', + 'iDune_Statut_input'=>'n', + 'iDune_Archive_input'=>'n', + 'x'=>48, + 'y'=>8, + ); + + $tdeb=microtime(true); + $page=getUrl($url, $cookie, $post, $referer, false, '', '', 7); + $tfin=microtime(true); + $duree=$tfin-$tdeb; + $body=$page['body']; + $fp=@fopen("/tmp/asso-$siren.html", "a"); + @fwrite($fp, $body); + @fclose($fp); + + if (preg_match('/Votre commande est enregistr/i',$body)) + { + @sendMail('production@scores-decisions.com', 'asso@scores-decisions.com', + "Commande de statuts association pour $assoNom ($siren)", + "Association :".EOL.print_r($infosCommande, true).EOL.EOL. + "Demandeur:".EOL.print_r($infosDemandeur, true).EOL.EOL. + "Réponse RefAsso en $duree secondes :".EOL.print_r($page, true) + ); + $iDbCrm = new WDB('sdv1'); + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + + $result = new CmdAssoDetail(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + @sendMail('production@scores-decisions.com', $mail, "Votre commande de statuts association sur $assoNom ($siren)", "Votre demande de statuts sur l'association $assoNom a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog('commandeAsso', $siren, 'i'.$ret.'-'.DATETIME); + debugLog('I',"commandeAsso pour $assoNom ($siren) fin",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } else { + @sendMail('production@scores-decisions.com', 'asso@scores-decisions.com', + "ERREUR lors de lommande de statuts association pour $assoNom ($siren)", "Association :".EOL.print_r($infosCommande, true).EOL.EOL. + "Demandeur:".EOL.print_r($infosDemandeur, true).EOL.EOL. + "Réponse RefAsso en $duree secondes :".EOL.print_r($page, true)); + + $error->errmsg = 'ERREUR'; + $error->errnum = 1; + debugLog('E',"commandeAsso pour $assoNom ($siren) fin",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + $output = new CmdAssoReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Renvoi des informations sur une commande association + * @param string $reference + * @return CmdAssoReturn + */ + public function getCmdAsso( $reference ){} + + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param InfosCmdEnquete $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdEnqueteReturn + **/ + public function setCmdEnquete($infosCommande, $infosDemandeur) + { + $this->authenticate(); + $this->permission('enquetec'); + + //Initialisation + $error = new ErrorType(); + $siren = $infosCommande->siren; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source'=> 'intersud', // 'greffes', 'asso', 'graydon' + 'login'=> $this->User->login, + 'emailCommande'=> $mail, + 'siren'=> $siren, + 'refDocument'=> serialize($infosDemandeur), + 'refCommande'=> serialize($infosCommande), + 'dateCommande'=> DATETIME, + ); + debugLog('I',"Intersud, début sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo=print_r($infosCommande, 1).EOL.print_r($infosDemandeur,1).EOL; + + $idClient = $this->User->idClient; + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande ="NOM et Prénom du client demandeur : ".$infoDemandeur->nom.EOL; + $strInfoCommande.="Email du client demandeur : $mail".EOL; + $strInfoCommande.="Tel/Fax du demandeur : ".$infosDemandeur->tel.' / '.$infosDemandeur->fax.EOL; + $strInfoCommande.="Profil du demandeur : ".trim($infosDemandeur->service).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login = 'YLENA'; // Demandes en test + $pass = 'WYLFE'; + $nomClient = $strInfoCommande = ''; + $typeEnqLog = 'enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + $url='http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array('login' => $login, 'pwd' => $pass); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + // wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + //@todo + return array('error'=>array('errnum'=>4563456, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes'), 'results'=>$tabRet); + } + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + + /** Connexion à l'Extranet Intersud + **/ + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base + **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ". + DATETIME."\n". + "Date et heure de la commande : ".date('d/m/Y - H:i')."\n". + "Origine de la commande : $nomClient". + "$strInfoCommande"."\n\n". + + "CA : ".$infosCommande->PrecisionsMontantCA."\n". + "Motif de la demande : ".trim($infosCommande->PrecisionsMotif.' '.$infosCommande->PrecisionsAutre)."\n". + "Type de la demande : ".$infosCommande->PrecisionsType."\n". + "Anciennete de la relation : ".$infosCommande->Anciennete.' '.$infosCommande->AncienneteDuree."\n". + "Observations : ".$infosCommande->Observation.EOL; + + if ($infosCommande->ImpayeesChoix<>'non') + $comment.="Impayé(s) : ".$infosCommande->ImpayeesNombre." impayé(s) pour un montant de ".$infosCommande->ImpayeesMontant." en date du ".$infosCommande->ImpayeesDate.EOL; + + if ($infosCommande->RetardPaiementChoix<>'non') + $comment.="Retard(s) de paiement : ".$infosCommande->RetardPaiementNombre." retard(s) pour un montant de ".$infosCommande->RetardPaiementMontant." en date du ".$infosCommande->RetardPaiementDate.EOL; + + if ($infosCommande->LitigeChoix<>'non') + $comment.="Présence de litige(s) : ".$infosCommande->LitigePrecisions.EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infosCommande->Type)) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infosCommande->RIB))<>'') + $iDbCrm->insert('banques', array( + 'siren'=>$siren, + 'libBanqueGuichet'=>'', + 'precis'=>1, + 'codeBanque'=>$infosCommande->RIB->banque, + 'codeGuichet'=>$infosCommande->RIB->guichet, + 'numCompte'=>$infosCommande->RIB->compte.$infosCommande->RIB->cle, + 'dateSource'=>DATETIME, + ), true); + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc'=>$tabIdentite['Nom'], + 'cible_enk'=>9, // 9 + 'siret'=>$siren, + 'acti'=>'', + 'soc_exp'=>$tabInterSud['soc_exp'], + 'type_enk'=>$enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri'=>'', + 'adr'=>$tabIdentite['Adresse'], + 'ref_exp'=>$tabInterSud['ref_exp'], + 'autre_type_enk'=>'', // Texte libre + 'adr2'=>$tabIdentite['Adresse2'], + 'delai_enk'=>$enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville'=>$tabIdentite['Ville'], + 'cp'=>$tabIdentite['CP'], + 'pays'=>'', // International ? + 'nom_exp'=>$tabInterSud['nom_exp'], + 'tel'=>$tabIdentite['Tel'], + 'port'=>$infosCommande->AutreTel, + 'tel_exp'=>$tabInterSud['tel_exp'], + 'bank'=>trim(implode(' ', $infosCommande->RIB)), + 'int_enk'=>$tabInterSud['int_enk'], // International ? + 'encours'=>$infosCommande->Encours, + 'nb_ech'=>$infosCommande->NbEcheances, + 'delai2_enk'=>$tabInterSud['delai2_enk'], // International ? + 'email_exp'=>$tabInterSud['email_exp'], + 'cred'=>'', + 'comment'=>urlencode($comment), + 'val_ret'=>$tabInterSud['val_ret'], + ); + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + //@todo + return array('error'=>array('errnum'=>456345, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes 3'), 'results'=>$tabRet); + } + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + $referer=$url; + $body=$page['body']; + + $result = new CmdEnquete(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url='http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + $output = new CmdEnqueteReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupération d'un kbis + * @param string $siren + * @param int $visu + * @param int $courrier + * @param string $mail + * @param string $ref + * @return PieceReturn + */ + public function getKbis($siren, $visu=1, $courrier=0, $mail='', $ref='') + { + return $this->getPiece($siren, 'kbis', '', $visu, $courrier, $ref); + } + + /** + * Récupère les informations du profil connecté + * @param string $login + * @param int $idClient + * @return ListeUtilisateursReturn + */ + public function getListeUtilisateurs($login, $idClient=-1) + { + $this->authenticate(); + + //Initialisation + if (empty($idClient)) $idClient = -1; + $error = new ErrorType(); + $tabRet = array(); + + if ($this->User->profil<>'Administrateur' && + $this->User->profil<>'SuperAdministrateur') + { + $error->errnum = 1; + $error->errmsg = 'Profil non administrateur'; + } else { + $iDbCrm = new WDB('sdv1'); + if ($idClient==-1){ + $rep = $iDbCrm->select('utilisateurs', 'idClient', "login='$login'"); + $idClient = $rep[0][0]; + } + if ($idClient==-1){ + $error->errnum = 1; + $error->errmsg = 'idClient=0'; + } else { + $rep = $iDbCrm->select('utilisateurs', 'id, idClient, login, email, actif, nom, prenom, referenceParDefaut', "idClient='$idClient' AND deleted=0 ORDER BY login ASC", false, MYSQL_ASSOC); + foreach ($rep as $uti){ + $utilisateur = new Utilisateur(); + $utilisateur->idUti = $uti['id']; + $utilisateur->idClient= $uti['idClient']; + $utilisateur->login = $uti['login']; + $utilisateur->email = $uti['email']; + $utilisateur->actif= $uti['actif']; + $utilisateur->nom = $uti['nom']; + $utilisateur->prenom = $uti['prenom']; + $utilisateur->reference = $uti['referenceParDefaut']; + $tabRet[]= $utilisateur; + } + } + } + $output = new ListeUtilisateursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Créations/Modification d'utilisateurs + * @param integer $idClient + * @param SetUtilisateurs[] $users + * @return UtilisateursReturn + */ + protected function setUtilisateurs($idClient, $users) + { + $this->authenticate(); + $error = new ErrorType(); + $result = false; + //idClient existe + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', 'id, nom, actif, test, racineLogin, siren, nic, droits, filtres_ip, typeAcces, typeScore, accesPieces, accesKbis, accesInvestigations, accesInternationnal, accesEnquetes, miseSousSurveillance', "1 AND id='$idClient'", false, MYSQL_ASSOC); + if (count($rep)>0){ + $client = $rep[0]; + $idClient = $client['id']; + if (count($users)>0){ + foreach($users as $user){ + $tabInfos = array(); + $tabInfos['idClient'] = $idClient; + $tabInfos['login'] = $user->login; + $tabInfos['email'] = ''; + $tabInfos['password'] = $user->password; + $tabInfos['actif'] = ''; + //$tabInfos['deleted'] = ''; + + if (in_array($user->typeCompte, array('TEST', 'PROD'))){ + $tabInfos['typeCompte'] = $user->typeCompte; + } else { + $tabInfos['typeCompte'] = 'PROD'; + } + + //$tabInfos['filtre_ip'] = ''; + + //SetInfosLogin + $tabInfos['civilite'] = ''; + $tabInfos['nom'] = ''; + $tabInfos['prenom'] = ''; + + //Identique au client + $tabInfos['raisonSociale'] = ''; + $tabInfos['siret'] = ''; + $tabInfos['adrNum'] = ''; + $tabInfos['adrInRep'] = ''; + $tabInfos['adrTypeVoie'] = ''; + $tabInfos['adrLibVoie'] = ''; + $tabInfos['adrCp'] = ''; + $tabInfos['adrVille'] = ''; + $tabInfos['adrComp'] = ''; + $tabInfos['tel'] = ''; + $tabInfos['fax'] = ''; + $tabInfos['mobile'] = ''; + + $tabInfos['pref'] = ''; + + if (in_array($user->typeCompte, array('Administrateur', 'Utilisateur'))){ + $tabInfos['profil'] = $user->profil; + } else { + $tabInfos['profil'] = 'Utilisateur'; + } + /* + $tabInfos['dateInscription'] = ''; + $tabInfos['dateValidation'] = ''; + */ + + if (empty($user->droits)){ + $tabInfos['droits'] = $client->droits; + } else { + $tabInfos['droits'] = $user->droits; + } + $tabInfos['referenceParDefaut'] = ''; + $tabInfos['nbReponses'] = ''; + $tabInfos['listeEven'] = ''; + $tabInfos['maxFicheId'] = $user->maxFicheId; + + //$tabInfos['dateInsert'] = ''; + + + if (empty($user->id)){ + $iDbCrm->insert('utilisateurs', $tabInfos); + } else { + $iDbCrm->update('utilisateurs', $tabInfos, "id='$user->id'"); + } + + } + } else { + $error->errnum = 1; + $error->errmsg = 'Aucun utiliateur'; + } + } else { + $error->errnum = 1; + $error->errmsg = 'Identifiant client inconnu!'; + } + $output = new UtilisateursReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Création d'un modele pour le préremplisage des données utilisateurs + * @param integer $idClient + * @param string $nom + * @param ModeleUtilisateur $infos + * @return ModeleUtilisateurReturn + */ + protected function setModeleUtilisateur($idClient, $nom, $infos) + { + $this->authenticate(); + + } + + /** + * Création/Modification d'un client + * @param Client $infos + * @param integer $idModele + * @return ClientReturn + */ + public function setClient($infos, $idModele = null) + { + $this->authenticate(); + $error = new ErrorType(); + $result = false; + //Pas SuperAdministrateur + if ($this->User->profil!='SuperAdministrateur'){ + $error->errnum = 1; + $error->errmsg = 'Profil insuffisant pour cette méthode'; + } else { + $tabInfos = array(); + $tabInfos['nom'] = $infos->nom; + $tabInfos['actif'] = ($infos->actif=='Oui') ? 'Oui' : 'Non' ; + $tabInfos['test'] = ($infos->test=='Oui') ? 'Oui' : 'Non' ; + $tabInfos['racineLogin'] = $infos->racineLogin; + $tabInfos['siren'] = (int) $infos->siren; + $tabInfos['nic'] = (int) $infos->nic; + $tabInfos['tva'] = $infos->tva; + $tabInfos['idClientFacture'] = $infos->idClientFacture; + if ($infos->editerFacture=='Non') { + $tabInfos['editerFacture'] = 'Non' ; + } + $tabInfos['fact_detail'] = ($infos->fact_detail=='Oui') ? 'Oui' : 'Non' ; + $tabInfos['fac_dest'] = $infos->fac_dest; + $tabInfos['fac_adr1'] = $infos->fac_adr1; + $tabInfos['fac_adr2'] = $infos->fac_adr2; + $tabInfos['fac_adr3'] = $infos->fac_adr3; + $tabInfos['fac_email'] = $infos->fac_email; + $tabInfos['fac_tel'] = $infos->fac_tel; + if (in_array($infos->fac_rib, array('BPOSTALE','CCOOP', 'CDNORD'))){ + $tabInfos['fact_rib'] = $infos->fact_rib; + } + $tabInfos['liv_dest'] = $infos->liv_dest; + $tabInfos['liv_adr1'] = $infos->liv_adr1; + $tabInfos['liv_adr2'] = $infos->liv_adr2; + $tabInfos['liv_adr3'] = $infos->liv_adr3; + $tabInfos['liv_email'] = $infos->liv_email; + $tabInfos['liv_tel'] = $infos->liv_tel; + $tabInfos['droits'] = strtolower($infos->droits); + $tabInfos['filtres_ip'] = $infos->filtres_ip; + //$tabInfos['respComSD'] = $infos->respComSD; + if (in_array($infos->typeContrat, array('Contrat','Marché'))){ + $tabInfos['typeContrat'] = $infos->typeContrat; + } + if (in_array($infos->typeAcces, array('userPassword','userPasswordIP', 'IP'))){ + $tabInfos['typeAcces'] = $infos->typeAcces; + } + if (in_array($infos->typeScore, array('20','100'))){ + $tabInfos['typeScore'] = $infos->typeScore; + } + if (!empty($timeout)){ + $tabInfos['timeout'] = $infos->timeout; + } + $tabInfos['accesPieces'] = ($infos->accesPieces=='Oui') ? 'Oui' : 'Non' ; + $tabInfos['accesKbis'] = ($infos->accesKbis=='Oui') ? 'Oui' : 'Non' ; + $tabInfos['accesInvestigations'] = ($infos->accesInvestigations=='Oui') ? 'Oui' : 'Non' ; + $tabInfos['accesInternationnal'] = ($infos->accesInternationnal=='Oui') ? 'Oui' : 'Non' ; + $tabInfos['accesEnquetes'] = ($infos->accesEnquetes=='Oui') ? 'Oui' : 'Non' ; + $tabInfos['miseSousSurveillance'] = ($infos->miseSousSurveillance=='Oui') ? 'Oui' : 'Non' ; + if (in_array($infos->forfaitExtranetPeriode, array('Mensuel','Trimestriel','Semestriel', 'Annuel'))){ + $tabInfos['forfaitExtranetPeriode'] = $infos->forfaitExtranetPeriode; + } + $tabInfos['forfaitExtranetMontant'] = $infos->forfaitExtranetMontant; + if ($infos->reconductionAuto=='Non') { + $tabInfos['reconductionAuto'] = 'Non'; + } + $tabInfos['remarque'] = $infos->remarque; + $tabInfos['forfaitPiecesNb'] = $infos->forfaitPiecesNb; + $tabInfos['forfaitPiecesMt'] = $infos->forfaitPiecesMt; + $tabInfos['forfaitPiecesDep'] = $infos->forfaitPiecesDep; + $tabInfos['forfaitInvestigNb'] = $infos->forfaitInvestigNb; + $tabInfos['forfaitInvestigMt'] = $infos->forfaitInvestigMt; + $tabInfos['forfaitInvestigDep'] = $infos->forfaitInvestigDep; + $tabInfos['tarifIndiscore'] = $infos->tarifIndiscore; + $tabInfos['InterSudLogin'] = $infos->InterSudLogin; + $tabInfos['InterSudPass'] = $infos->InterSudPass; + + $iDbCrm = new WDB('sdv1'); + if (empty($infos->idClient)){ + //Ajout + //$tabInfos['dateInsert'] = now(); + $result = $iDbCrm->insert('clients', $tabInfos, true); + } else { + //Modification + if ($iDbCrm->update('clients', $tabInfos, "id='$infos->idClient'", true)){ + $result = true; + } + } + } + $output = new ClientReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère la liste des clients ou les informations d'un client + * @param integer|boolean $idClient + * @param ClientFiltre $filtre + * @return ListeClientsReturn + */ + public function getListeClients($idClient=false, $filtre=null) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($idClient)) $idClient = false; + + $isAuthorized = false; + + if ($this->User->profil=='Administrateur' && + ($idClient=='false' || $idClient==$this->User->idClient)){ + $idClient = $this->User->idClient; + $isAuthorized = true; + } + + if ($this->User->profil<>'SuperAdministrateur'){ + $error->errnum = 1; + $error->errmsg = 'Profil non administrateur'; + } else { + $isAuthorized = true; + } + + if ($isAuthorized) + { + $strClient = ''; + + if (is_numeric($idClient)) $strClient.=" AND id='$idClient' "; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', + 'id, nom, actif, test, racineLogin, siren, nic, tva, editerFacture, fact_detail, fac_dest, fac_adr1, fac_adr2, fac_adr3, fac_email, fac_tel, fact_rib, liv_dest, liv_adr1, liv_adr2, liv_adr3, liv_email, liv_tel, droits, filtres_ip, dateInsert, dateUpdate, respComSD, typeContrat, dateSignature, typeAcces, typeScore, timeout, accesPieces, accesKbis, accesInvestigations, accesInternationnal, accesEnquetes, miseSousSurveillance, forfaitExtranetPeriode, forfaitExtranetMontant, reconductionAuto, remarque, forfaitPiecesNb, forfaitPiecesMt, forfaitPiecesDep, forfaitInvestigNb, forfaitInvestigMt, forfaitInvestigDep, tarifIndiscore', + "1 $strClient", + false, + MYSQL_ASSOC); + $tabRet = array(); + foreach ($rep as $uti) + { + $client = new Client(); + $client->idClient = $uti['id']; + $client->nom = $uti['nom']; + $client->actif = $uti['actif']; + $client->test = $uti['test']; + $client->racineLogin = $uti['racineLogin']; + $client->siren = $uti['siren']; + $client->nic = $uti['nic']; + $client->tva = $uti['tva']; + $client->editerFacture = $uti['editerFacture']; + $client->fact_detail = $uti['fact_detail']; + $client->fac_dest = $uti['fac_dest']; + $client->fac_adr1 = $uti['fac_adr1']; + $client->fac_adr2 = $uti['fac_adr2']; + $client->fac_adr3 = $uti['fac_adr3']; + $client->fac_email = $uti['fac_email']; + $client->fac_tel = $uti['fac_tel']; + $client->fact_rib = $uti['fact_rib']; + $client->liv_dest = $uti['liv_dest']; + $client->liv_adr1 = $uti['liv_adr1']; + $client->liv_adr2 = $uti['liv_adr2']; + $client->liv_adr3 = $uti['liv_adr3']; + $client->liv_email = $uti['liv_email']; + $client->liv_tel = $uti['liv_tel']; + $client->droits = strtolower($uti['droits']); + $client->timeout = $uti['timeout']; + $client->filtres_ip = $uti['filtres_ip']; + $client->dateInsert = $uti['dateInsert']; + $client->dateUpdate = $uti['dateUpdate']; + $client->respComSD = $uti['respComSD']; + $client->typeContrat = $uti['typeContrat']; + $client->dateSignature = $uti['dateSignature']; + $client->typeAcces = $uti['typeAcces']; + $client->typeScore = $uti['typeScore']; + $client->accesPieces = $uti['accesPieces']; + $client->accesKbis = $uti['accesKbis']; + $client->accesInvestigations = $uti['accesInvestigations']; + $client->accesInternationnal = $uti['accesInternationnal']; + $client->accesEnquetes = $uti['accesEnquetes']; + $client->miseSousSurveillance = $uti['miseSousSurveillance']; + $client->forfaitExtranetPeriode = $uti['forfaitExtranetPeriode']; + $client->forfaitExtranetMontant = $uti['forfaitExtranetMontant']; + $client->reconductionAuto = $uti['reconductionAuto']; + $client->remarque = $uti['remarque']; + $client->forfaitPiecesNb = $uti['forfaitPiecesNb']; + $client->forfaitPiecesMt = $uti['forfaitPiecesMt']; + $client->forfaitPiecesDep = $uti['forfaitPiecesDep']; + $client->forfaitInvestigNb = $uti['forfaitInvestigNb']; + $client->forfaitInvestigMt = $uti['forfaitInvestigMt']; + $client->forfaitInvestigDep = $uti['forfaitInvestigDep']; + $client->tarifIndiscore = $uti['tarifIndiscore']; + + $tabRet[] = $client; + } + } + $output = new ListeClientsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * + * Retourne la liste des droits + * @return ListeDroitsReturn[] + */ + public function getListeDroits() + { + $tabRet = array(); + foreach($this->listeDroits as $code => $desc){ + $droit = new ListeDroitsReturn(); + $droit->code = $code; + $droit->desc = $desc; + $tabRet[] = $droit; + } + return $tabRet; + } + + /** + * + * Retourne la liste des préférences + * @return ListePrefsReturn[] + */ + public function getListePrefs() + { + $tabRet = array(); + foreach($this->listePrefs as $code => $desc){ + $pref = new ListePrefsReturn(); + $pref->code = $code; + $pref->desc = $desc; + $tabRet[] = $pref; + } + return $tabRet; + } + + + /** + * getStatsUtilisateurs + * @param string $login + * @param string $mois + * @param string $type + * @param boolean $payants + * @return array + */ + public function getStatsUtilisateurs($login, $mois, $type='jour', $payants=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if ($payants) + { + $strPayant="AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis') AND params<>'' AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + } + else { + $strPayant=''; + } + $iDbCrm = new WDB('sdv1'); + if ($type=='jour') { + $rep = $iDbCrm->select('logs', + 'date(dateHeure) as jours, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY jours", + false, MYSQL_ASSOC); + } elseif ($type=='heure') { + $rep = $iDbCrm->select('logs', + 'HOUR(dateHeure) as heures, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY heures", + false, MYSQL_ASSOC); + } + $tabRet = $rep; + + + + return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabRet); + } + + /** + * getPortefeuilleCsv + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getPortefeuilleCsv($login='', $idClient=0) + { + return $this->getListeSurveillancesCsv('portefeuille', $login, $idClient); + } + + /** + * getPortefeuille + * @param PortefeuilleFiltre $filtre + * @param int $deb + * @param int $nbRet + * @return PortefeuilleReturn + */ + public function getPortefeuille($filtre, $deb=0, $nbRet=100) + { + $this->authenticate(); + + // Initialisation + $error = new ErrorType(); + if (empty($deb)) { $deb = 0; } + if (empty($nbRet)) { $nbRet = 100; } + + $tri = strtolower(trim($filtre->tri)); + switch ($tri) { + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + case 'indiScore': $orderBy='ORDER BY indiScore'; break; + case 'encours': $orderBy='ORDER BY encours'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + $iDb = new WDB(); + $login = $this->User->login; + + $strSelect = 's.email, s.siren, s.nic, s.ref, s.dateAjout, s.rs, s.cp, s.ville, s.dateDerEnvoi, s.encoursClient, c.actif, c.procol, c.indiScore, c.indiScore20, c.encours, c.indiScoreDate, c.dateBilan, c.indiScorePre, c.indiScore20Pre, c.encoursPre, c.indiScoreDatePre, c.sourceModif, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + + $strFiltre = ''; + if (intval($siren)>0) $strFiltre.= " AND s.siren=$siren "; + if (!empty($filtre->ref)) $strFiltre.= " AND s.ref LIKE %$filtre->ref%"; + if (!empty($filtre->rs)) $strFiltre.= " AND s.ref LIKE %$filtre->rs%"; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site', 'count(*) as nb', "login='$login' AND source='score' AND dateSuppr=0 $strFiltre", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site s, scores_surveillance c', $strSelect, "s.login='$login' AND s.source='score' AND s.dateSuppr=0 AND s.siren=c.siren $strFiltre $orderBy LIMIT $deb,$nbRet", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv) { + if (trim($tabSurv['rs'])<>'') { + $rs=$tabSurv['rs']; + $cp=$tabSurv['cp']; + $ville=$tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs=$tabIdentite['Nom']; + $cp=$tabIdentite['CP']; + $ville=$tabIdentite['Ville']; + $iDb->update('surveillances_site',array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND source='score' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic'], + false + ); + } + + $portefeuille = new Portefeuille(); + $portefeuille->email = $tabSurv['email']; + $portefeuille->siren = $tabSurv['siren']; + $portefeuille->nic = $tabSurv['nic']; + $portefeuille->ref = $tabSurv['ref']; + $portefeuille->dateAjout = $tabSurv['dateAjout']; + $portefeuille->rs = $rs; + $portefeuille->cp = $cp; + $portefeuille->ville = $ville; + // Entreprise + $portefeuille->actif = $tabSurv['actif']; + $portefeuille->procol = $tabSurv['procol']; + $portefeuille->indiScore = $tabSurv['indiScore']; + $portefeuille->indiScore20 = $tabSurv['indiScore20']; + $portefeuille->indiScorePre = $tabSurv['indiScorePre']; + $portefeuille->indiScore20Pre = $tabSurv['indiScore20Pre']; + $portefeuille->encours = $tabSurv['encours']; + $portefeuille->encoursPre = $tabSurv['encoursPre']; + $portefeuille->indiScoreDate = $tabSurv['indiScoreDate']; + $portefeuille->indiScoreDatePre = $tabSurv['indiScoreDatePre']; + $portefeuille->encoursClient = $tabSurv['encoursClient']; + $portefeuille->dateBilan = $tabSurv['dateBilan']; + $portefeuille->sourceModif = $tabSurv['sourceModif']; + //, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + $portefeuille->dateDerEnvoi = $tabSurv['dateDerEnvoi']; + $tabRet[] = $portefeuille; + + } + + $output = new PortefeuilleReturn(); + $output->error = $error; + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + return $output; + } + + + /** + * rechercheHisto + * @param string $recherche + * @param string $annee + * @param string $typeBod + * @param int $deb + * @param int $nbRep + * @param int $maxRep + * @param bool $pertinence + * @return RechercheHistoReturn + */ + public function rechercheHisto($recherche, $annee='', $typeBod='', $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($annee)) $annee = ''; + if (empty($typeBod)) $typeBod = ''; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($annee)) $pertinence = false; + + debugLog('I',"rechercheHisto de $recherche ($annee) (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabFiltresAnnee = array(); + + if ($annee<>'' && $annee*1>=1953 && $annee*1<=date('Y')*1) + $tabFiltresAnnee = array('annee1'=>$annee); + + require_once 'Metier/sphinx/recherche2.php'; + $ret=search2('histo', "$recherche", $tabFiltresAnnee, $deb, $nbRep, $maxRep, $pertinence); + + /*require_once 'Metier/sphinx/sphinxsearch.php'; + $sphinxsearch = new SphinxSearch(); + $ret = $sphinxsearch->searchByHisto($recherche, $tabFiltresAnnee, $deb, $nbRep, $maxRep, $pertinence); + */ + + $liste = $ret['results']; + $nbTot = $ret['nbTot']; + $duree = $ret['duration']; + $tabMots = $ret['words']; + + $tabRet = array(); + $k=0; + if(count($liste)>0) { + foreach ($liste as $n=>$etab) + { + $texte = $etab['Texte']; + $posMin=100000; + $hitMin=1000000; + foreach ($tabMots as $mot=>$tabMot){ + if ($tabMot['hits']<$hitMin) { + $hitMin=$tabMot['hits']; + $motSignificatif=$mot; + } + } + $posMin = stripos($texte, ''.$motSignificatif); + if ($posMin<150) $posMin=150; + $texte2 = substr($texte, $posMin-150, 250); + $reponse = new RechercheHistoReponses(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + $reponse->Fichier = strtr($etab['Fichier'], + array( '.txt'=>'.pdf', '/mnt/bodacc/' => 'http://tville.scores-decisions.com/bodacc/') + ); + $reponse->Annee = $etab['Annee']; + $reponse->Code = $etab['Code']; + $reponse->Texte = utf8_encode(utf8_decode($texte2)); + $tabRet[] = $reponse; + $k++; + } + } + + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbTot; + $output->duree = $duree; + $output->mots = array_keys($tabMots); + $output->reponses = $tabRet; + return $output; + } + + /** + * getLogsClients + * @param string $mois (Format : AAAA-MM ou AAAA/MM) + * @param int $detail + * @param int $idClient + * @param string $login + * @param int $all + * @return LogsClientsReturn + */ + public function getLogsClients($mois, $detail=0, $idClient=0, $login='', $all=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($detail)) $detail = 0; + if (empty($idClient)) $idClient = 0; + if (empty($login)) $login = ''; + if (empty($all)) $all = 0; + + $strDetail = $strClient = $strLogin=''; + + // Vue détaillée ou uniquement les infos payantes + if ($detail==0) { + $detail='Non'; + $strDetail=" AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis' OR page LIKE 'indiscore%' OR page='privileges' OR page='commandeAsso') AND (params<>'' OR page LIKE 'indiscore%' AND tarifIndiscore<>0) AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + } elseif($detail==1) { + $detail='Oui'; + } + + // On veut uniquement le client précis + if ($all && $this->User->profil=='SuperAdministrateur') { + $all = 'Oui'; + } else { + $all = 'Non'; + } + // Pas d'idClient mentionné ou tentative sur autre client et non SAD + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = " AND u.idClient=$idClient "; + + // On veut uniquement le login précis + if ($login!='') { + $strLogin=" AND l.login='$login' "; + } else { + $login='Non'; + } + + // Dates de début et de fin + $mois = strtr($mois, array('-'=>'','/'=>'')); + $annee = substr($mois,0,4); + $mois = substr($mois,4,2); + $dateDeb=date('Y-m-d', mktime(0,0,0,$mois,1,$annee)); + $dateFin=date('Y-m-t', mktime(0,0,0,$mois,15,$annee)); + + $fichierCsv=DOC_WEB_LOCAL."csv/logs-$annee-$mois-$detail-$idClient-$login-$all.csv"; + + if (file_exists($fichierCsv) && + date('Ymd', filemtime($fichierCsv))==date('Ymd') && + filesize($fichierCsv)>60 ) { + $size=filesize($fichierCsv); + $erreur=false; + $tabNom=array(); + $cache=1; + } else { + @unlink($fichierCsv); + $sql="SELECT LOWER(l.login) as loginUti, page, l.siren, l.nic, l.params, l.dateHeure, u.idClient, c.nom, u.referenceParDefaut AS refUti + FROM `logs` l, utilisateurs u, clients c + WHERE 1 $strDetail $strClient $strLogin AND dateHeure BETWEEN '$dateDeb 00:00:00' AND '$dateFin 23:59:59' AND l.login=u.login AND u.idClient=c.id + GROUP BY l.login, l.siren, page, date(dateHeure), params + ORDER BY l.login ASC, dateHeure ASC"; + $fp = fopen(DOC_WEB_LOCAL."/csv/logs-$annee-$mois-$detail-$idClient-$login-$all.sql", 'w'); + fwrite($fp, $sql.EOL); + fclose($fp); + exec("php ".APPLICATION_PATH."/../batch/sql2csv.php sdv1 ".DOC_WEB_LOCAL."csv/logs-$annee-$mois-$detail-$idClient-$login-$all.sql $fichierCsv > /dev/null &"); + $size = $cache = 0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new LogsClients(); + $result->Url = $hostname.DOC_WEB_URL."csv/logs-$annee-$mois-$detail-$idClient-$login-$all.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + $output = new LogsClientsReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getListeSurveillanceCsv + * @param string $source + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getListeSurveillancesCsv($source='', $login='', $idClient=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($source)) $source = ''; + if (empty($idClient)) $idClient = 0; + + + debugLog('I',"getListeSurveillancesCsv Début $source $login $idClient",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $iDb = new WDB(); + $strClient = $strLogin = ''; + $exportPtf = false; + switch ($source) + { + case 'insee': + case 'annonces': + case 'bilans': + case 'score': + case 'actes': + case 'privileges': + case 'dirigeants': + break; + case 'portefeuille': + $source='score'; + $exportPtf=true; + break; + default: + $source=''; + break; + } + + if ($source<>'') $strSource = "AND source='$source' "; + else $strSource = ''; + + // Control idClient + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = "AND u.idClient=$idClient "; + + if ($this->User->profil=='SuperAdministrateur' || $this->User->profil=='Administrateur') { + // Surveillances de tous les utilisateurs du client + if (empty($login)) { + $login = ''; + //Surveillances de l'utilisateur + } else { + $strLogin = "AND s.login='$login' "; + } + } else { + //Par défaut préselection de l'utilisateur + $login = $this->User->login; + $strLogin = "AND s.login='$login' "; + } + + $fichierCsv = DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.csv"; + + if (file_exists($fichierCsv) && + date('Ymd', filemtime($fichierCsv))==date('Ymd') && + filesize($fichierCsv)>60 ) { + $size = filesize($fichierCsv); + $erreur = false; + $tabNom = array(); + $cache = 1; + } else { + unlink($fichierCsv); + if ($source=='score'){ + if ($this->User->typeScore==20) { + $strScore='v.indiScore20 AS indiScore20'; + $strScorePre='v.indiScore20Pre AS indiScore20Pre'; + } else { + $strScore='v.indiScore AS indiScore100'; + $strScorePre='v.indiScorePre AS indiScore100Pre'; + } + /*v.scoreZ, v.scoreZPre, v.scoreCH, v.scoreCHPre, + v.scoreAfdcc2, v.scoreAfdcc2Pre, v.situFi, v.situFiPre, v.infoNote, v.infoNotePre, + v.noteStruct, v.noteStructPre, v.noteFin, v.noteFinPre, v.tendance, v.tendancePre, */ + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi, + s.encoursClient, v.actif, v.procol, $strScore, v.encours, v.indiScoreDate, v.dateBilan, + $strScorePre, v.encoursPre, v.indiScoreDatePre, v.sourceModif, v.scoreSolv, v.scoreSolvPre, v.scoreDir, + v.scoreDirPre, v.scoreConf, v.scoreConfPre, + e.cj, e.capital, e.capitalDev, e.ape_entrep, e.tca, e.teff_entrep, + v.dateUpdate + FROM surveillances_site s, sdv1.utilisateurs u, sdv1.clients c, scores_surveillance v, etablissements e + WHERE s.source='score' $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id AND s.siren=v.siren AND s.siren=e.siren + GROUP BY loginUti, s.siren, s.nic, s.source, s.ref + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeSurveillancesCsv($source, $login, $idClient)", $sql); + } else { + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi + FROM surveillances_site s, sdv1.utilisateurs u, sdv1.clients c + WHERE 1 $strSource $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + } + debugLog('I',"getListeSurveillancesCsv SQL $sql",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $fp = fopen(DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.sql", 'w'); + fwrite($fp, $sql.EOL); + fclose($fp); + exec("php ".APPLICATION_PATH."/../batch/sql2csv.php jo ".DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.sql $fichierCsv > /dev/null &"); + $size=$cache=0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new ListeSurveillancesCsv(); + $result->Url = $hostname."csv/listesurv-$source-$login-$idClient.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + debugLog('I','getListeSurveillancesCsv Url='.$hostname."csv/listesurv-$source-$login-$idClient.csv, Taille=$size, Cache=$cache",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $output = new ListeSurveillancesCsvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getListeJalCollecte + * @return ListeJalCollecteReturn + */ + public function getListeJalCollecte() + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + + $iBodacc = new MBodacc(); + $tabJal = $iBodacc->getListeJalCollecte(); + foreach ($tabJal as $i=>$jal) + { + $jalCollecte = new JalCollecte(); + $jalCollecte->id = $i; + $jalCollecte->nom = $jal; + $tabRet[] = $jalCollecte; + } + $output = new ListeJalCollecteReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getListeFichierSurv + * @param string $login + * @param string $ref + * @param string $nomFic + * @return ListeFichierSurvReturn + */ + public function getListeFichierSurv($login, $ref='*', $nomFic='') + { + $this->authenticate(); + if (empty($ref)) $ref = '*'; + if (empty($nomFic)) $nomFic = ''; + $error = new ErrorType(); + //debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabFichier=$tabDates=array(); + $numAbo=substr($ref, 0,5); + if (strtolower($login)=='vwbank') { + $repClient='volkswagen bank'; + $ficClient='surveillanceBodacc_SURBODPRDCFTVWBANK'; + $numAbo=$ref='19300'; + } elseif (substr($login,0,6)=='apicil') { + $repClient='apicil'; + $ficClient='surveillanceBodacc_SURBODPRDCFTAPICIL'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='omni04') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } else { + $repClient='cnasea'; + $ficClient='surveillanceBodacc_SURBODTSTFTSCNASEA'; + } + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + if (!$dh) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Impossible d'ouvrir le dossier '/home/data/clients/$repClient/'"); + $error->errnum = 1; + $error->errmsg = "Impossible d'ouvrir le dossier client"; + } else { + while (false !== ($filename = readdir($dh))) { + if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,42)==$ficClient.$numAbo) { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($ref=='*' && $filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)<>'_') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)=='_' && $repClient=='apicil') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,38,8); + $tabClients[]=substr($filename,0,37); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,38)==$ficClient && substr($filename,38,1)=='_' && $repClient=='aggm mederic ') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,39,8); + $tabClients[]=substr($filename,0,38); + } + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic : fichier lu '$filename'", "Fichier lu '$filename'"); + } + /** Tableau des noms de fichier **/ + sort($tabFichier); + /** Tableau des dates de livraisons **/ + $tabDates=array_unique($tabDates); + sort($tabDates); + /** Tableau des Clients **/ + $tabClients=array_unique($tabClients); + sort($tabClients); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabDates); + + /*@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", + "Fichiers :".EOL. + print_r($tabFichier, true). + "Dates:".EOL. + print_r($tabDates, true). + "Clients :".EOL. + print_r($tabClients, true) + );*/ + + if ($ref=='*') { + $tabFichier = array(); + // Boucle sur les dates de livraison + foreach ($tabDates as $dateFic) { + if (strlen($dateFic)<>8) continue; + if (!file_exists(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv") || + filesize(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv")==0) { + + $fpW=fopen(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv",'w'); + $entete=true; + // Boucle afin de vérifier si on est sur le bon client + foreach ($tabClients as $nomClient) { + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + while (false !== ($filename = readdir($dh))) { + if (substr($filename,0,51)==$nomClient.'_'.$dateFic && substr($filename,-4)=='.csv') { + $fichier=$filename; + //break; + } + } + $fpR=fopen(DOC_WEB_LOCAL."clients/$repClient/$fichier",'r'); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>array(($fichier)));//die; + if ($fpR) { + while (!feof($fpR)) { + $ligne=trim(fgets($fpR)); + if (substr($ligne,0,5)=='Siren' && $entete==true) { + fwrite($fpW, 'SITE;'.$ligne.EOL); + $entete=false; + } + elseif (substr($ligne,0,5)<>'Siren' && trim($ligne)<>'') { + fwrite($fpW, strtr($nomClient, array('surveillanceBodacc_SURBODTSTFTS'=>'', + 'surveillanceBodacc_SURBODPRDCFT'=>'')).';'.$ligne.EOL); + } + } + fclose($fpR); + } + } + fclose($fpW); + } + if (strlen($dateFic)==8) + $tabFichier[]=$ficClient.'_'.$dateFic.'.csv'; + } + } + rsort($tabFichier); + + if ($nomFic<>'') { + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Avant BZ2'); + if (!file_exists(DOC_WEB_LOCAL."/csv/$nomFic.bz2") || + filesize(DOC_WEB_LOCAL."/csv/$nomFic.bz2")<=14) { + $string=file_get_contents("/home/data/clients/$repClient/$nomFic"); + if ($string===false) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Ouverture impossible du fichier '/home/data/clients/$repClient/$nomFic'"); + } + $bz = bzopen(DOC_WEB_LOCAL."/csv/$nomFic.bz2",'w'); + if ($bz) { + bzwrite($bz, $string, strlen($string)); + bzclose($bz); + } + } /*else + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Sans BZ2'); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Après BZ2'); + */ + } + debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic : nb fichiers=".count($tabFichier),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = array(); + foreach($tabFichier as $fichier){ + $retFichier = new ListeFichierSurv(); + $retFichier->UrlFichier = $hostname.'/data/csv/'.$fichier; + $result[] = $retFichier; + } + } + $output = new ListeFichierSurvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Geocodage d'une adresse + * @param string $adresse + * @param string $cp + * @param string $ville + * @param string $pays + * @return GeoCodeReturn + */ + public function geoCode($adresse, $cp, $ville, $pays='France') + { + $this->authenticate(); + + $ligne = date('YmdHis').";$siren;MMap AVANT"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $mMap = new MMap($adresse, $cp, $ville, $pays); + + $ligne=date('YmdHis').";$siren;MMap APRES"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $geocode = new GeoCode(); + $geocode->latitude = $mMap->latitudeDec; + $geocode->longitude = $mMap->longitudeDec; + $geocode->precis = $mMap->precision; + $geocode->adresseValidee = $mMap->adresseValidee; + $geocode->latitudeDeg = $mMap->latitudeDeg; + $geocode->longitudeDeg = $mMap->longitudeDeg; + + $output = new GeoCodeReturn(); + $output->error = $error; + $output->result = $geocode; + } + + /** + * Suppression logique d'une annonce relative à une entité + * @param integer $source 0=Collecte, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param string $siret Siren de l'entreprise ou Siret de l'établissement + * @return supprAnnonceReturn + */ + public function supprAnnonce($source=0, $idAnn, $siret=0) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + if (empty($source)) $source = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + + $siren = substr($siret,0,9); + $iDb = new WDB(); + switch ($source) + { + case 0: + $idAnn=preg_replace('/^0\./','', ''.$idAnn)*1; + $table='annonces'; + break; + case 1: + if ($idAnn<0){ + $error->errnum = 1; + $error->errmsg = 'Code annonce Incorrect'; + } elseif (intval($siren)>0){ + $strSql="AND siren=$siren"; + $table='bodacc_detail'; + } + break; + case 3: + $table='asso'; + break; + case 2: + case 4: + default: + $error->errnum = 1; + $error->errmsg = 'Cas non géré'; + break; + } + if ($idAnn>0 && $iDb->update( $table, array('dateSuppr'=>date('YmdHis'),'idSuppr'=>$this->User->id), "id=$idAnn $strSql", false)) + { + debugLog('I',"Suppression de l'annonce en source $source n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 0; + $error->errmsg = ''; + $result = true; + } else { + debugLog('I',"Suppression impossible de l'annonce en source $source n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + } + } + $output = new SupprAnnonceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Duplication d'une annonce relative à une entité + * + * @param integer $source 0=Collecte, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param string $siretIn Siren de l'entreprise ou Siret de l'établissement de l'annonce à duppliquer + * @param string $siretOut Siren/Siret de l'entreprise ou étab sur lequel il faut dupliquer l'annonce + * @return DupliqueAnnonceReturn + */ + public function dupliqueAnnonce($source=0, $idAnn, $siretIn=0, $siretOut=0) + { + debugLog('I',"Demande de duplication d'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + if (empty($source)) $source = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + $sirenIn = substr($siretIn,0,9)*1; + $nicIn = substr($siretIn,9,5)*1; + $sirenOut = substr($siretOut,0,9)*1; + $nicOut = substr($siretOut,9,5)*1; + $iDb = new WDB(); + $strSql=''; + switch ($source) + { + case 0: + $idAnn=preg_replace('/^0\./','', ''.$idAnn)*1; + $table='annonces'; + break; + case 1: + if ($idAnn<0){ + $error->errnum = 1; + $error->errmsg = 'Code annonce Incorrect'; + } elseif (intval($siren)>0){ + $strSql.="AND siren=$sirenIn"; + $table='bodacc_detail'; + } + break; + case 3: + $table='asso'; + break; + case 2: + case 4: + default: + $error->errnum = 1; + $error->errmsg = 'Cas non géré'; + break; + } + + if ($idAnn>0) { + $res = $iDb->select($table, '*', "id=$idAnn $strSql", false, MYSQL_ASSOC); + if (count($res)==0) { + $error->errnum = 1; + $error->errmsg = 'Annonce inexistante'; + } else { + $annonce = $res[0]; + $annonce['siren'] = $sirenOut; + $annonce['sirenValide']=2; + $annonce['dateInsert']=date('YmdHis'); + if ($source==0) { + // Suppression des zones inexistantes dans la table ou devant être vides + unset($annonce['id']); + unset($annonce['nic']); + $annonce['idSaisie']=$this->User->id; + } else { + $annonce['idSirenage']=$this->User->id; + $annonce['nic']=$nicOut; + if ($nicOut>0) $annonce['nicValide']=2; + } + if ($iDb->insert($table, $annonce, true, true)) { + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } else { + debugLog('I',"Duplication imposible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = 'Duplication de l\'annonce impossible'; + } + } + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = 'Duplication de l\'annonce impossible'; + } + } + $output = new DupliqueAnnonceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Recherche d'entreprise par leur actionnaire + * @param string $nom Raison sociale / Nom de l'actionnaire (obligatoire) + * @param string $cpVille CP, Ville + * @param string $siren Siren de l'actionnaire + * @param string $pays Pays de l'actionnaire + * @param string $pctMin Niveau de détention Minimam de l'actionnaire + * @param string $pctMax Niveau de détention Maximum de l'actionnaire + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur les noms et prénoms (si true) + * @return SearchActReturn + */ + public function searchAct($nom, $cpVille='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + debugLog('I',"Recherche Actionnaire de $nom, $cpVille (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!empty($pays)){ + $wdb = new WDB('jo'); + $result = $wdb->select('tabPays', 'codPays3', "libPays LIKE '".$pays); + if (count($result>0)){ + $pays = $result[0]['codPays3']; + } else { + $pays = ''; + } + } + + if (empty($cpVille)) $cpVille = ''; + if (empty($siren)) $siren = ''; + if (empty($pctMin)) $pctMin = 0; + if (empty($pctMax)) $pctMax = 100; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + + $mLiens = new MLiens(''); + // rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence) + $etabs = $mLiens->rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence); + + $iInsee = new MInsee(); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $act = new EntrepriseActItem(); + $act->id = $etab['id']; + $act->Pertinence = $etab['Pertinence']; + $act->Siret = $etab['Siret']; + $act->Siege = $etab['Siege']; + $act->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $act->Nom2 = prepareString($etab['Nom2']); + $act->Sigle = prepareString($etab['Sigle']); + $act->Enseigne = prepareString($etab['Enseigne']); + $act->Adresse = prepareString($etab['Adresse']); + $act->Adresse2 = prepareString($etab['Adresse2']); + $act->CP = $etab['CP']; + $act->Ville = prepareString($etab['Ville']); + $act->Tel = $etab['Tel']; + $act->Fax = $etab['Fax']; + $act->FJ = $etab['FJ']; + $act->FJLib = prepareString($iInsee->getLibelleFJ($etab['FJ'])); + $act->Siren = $etab['Siren']; + $act->Nic = $etab['Nic']; + $act->Actif = $etab['Actif']; + $act->NafEtab = $etab['NafEtab']; // Etablissement + $act->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $act->NafEnt = $etab['NafEnt']; // Entreprise + $act->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + $act->ActNomRs = $etab['ActNomRs']; + $act->ActPays = $etab['ActPays']; + $act->ActDateLien = $etab['ActDateLien']; + $act->ActActif = $etab['ActActif']; + $act->ActPmin = $etab['ActPmin']; + $tabRet[] = $act; + } + + $output = new SearchActReturn(); + $output->nbReponses = $etabs['nbReponses']; + $output->nbReponsesTotal = $etabs['nbReponsesTotal']; + $output->result = $tabRet; + + if ($tabRet['nbReponses']==0) { + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + return $output; + } + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param string $siren + * @param string $infoEnq Informations pour la demande d'enquête
+ * InfoEnq[Entrep][Tel]
+ * InfoEnq[Entrep][Fax]
+ * InfoEnq[Entrep][AutreTel]
+ * InfoEnq[Entrep][Mail]
+ * InfoEnq[Entrep][AutreMail]
+ * InfoEnq[Entrep][Web]
+ * InfoEnq[Entrep][Rib][Banque]
+ * InfoEnq[Entrep][Rib][Guichet]
+ * InfoEnq[Entrep][Rib][Compte]
+ * InfoEnq[Entrep][Rib][Cle]
+ * InfoEnq[Encours]
+ * InfoEnq[NbEcheances]
+ * InfoEnq[AvisAssureur]
+ * InfoEnq[Type]
+ * InfoEnq[Delai]
+ * InfoEnq[PrecisionsChoix]
+ * InfoEnq[Precisions][MontantCA]
+ * InfoEnq[Precisions][Motif]
+ * InfoEnq[Precisions][Autre]
+ * InfoEnq[Anciennete]
+ * InfoEnq[AncienneteDuree]
+ * InfoEnq[ImpayeesChoix]
+ * InfoEnq[Impayees][Montant]
+ * InfoEnq[Impayees][Nombre]
+ * InfoEnq[Impayees][Date]
+ * InfoEnq[RetardPaiementChoix]
+ * InfoEnq[RetardPaiement][Montant]
+ * InfoEnq[RetardPaiement][Nombre]
+ * InfoEnq[RetardPaiement][Date]
+ * InfoEnq[LitigeChoix]
+ * InfoEnq[Litige][Precisions]
+ * InfoEnq[Observation]
+ * @param string $infoDemande Informations sur l'utilisateur
+ * InfoUser[Profil]
+ * InfoUser[ProfilAutre]
+ * InfoUser[Identite]
+ * InfoUser[Tel]
+ * InfoUser[Fax]
+ * InfoUser[Email]
+ * InfoUser[Ref]
+ * @return CommandeEnqueteReturn + */ + public function commandeEnquete($siren, $infoEnq, $infoDemande) + { + $this->authenticate(); + //Initialisation + $infoEnq = json_decode($infoEnq); + $infoDemande = json_decode($infoDemande); + + $mail = trim($infoDemande['Email']); + if ($mail=='') { + $mail=$this->User->email; + } + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source' => 'intersud', // 'greffes', 'asso', 'graydon' + 'login' => $tabInfoUser['login'], + 'emailCommande' => $mail, + 'siren' => $siren, + 'refDocument' => serialize($infoDemande), + 'refCommande' => serialize($infoEnq), + 'dateCommande' => DATETIME, + // 'idClient'=> $tabInfoUser['idClient'], + ); + debugLog('I',"Intersud, début commande sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo = print_r($infoEnq, 1).EOL.print_r($infoDemande,1).EOL; + + $idClient = $this->User->idClient; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande = "NOM et Prénom du client demandeur : ".$infoDemande['Identite'].EOL; + $strInfoCommande.= "Email du client demandeur : $mail".EOL; + $strInfoCommande.= "Tel/Fax du demandeur : ".$infoDemande['Tel'].' / '.$infoDemande['Fax'].EOL; + $strInfoCommande.= "Profil du demandeur : ".trim($infoDemande['Profil'].' '.$infoDemande['ProfilAutre']).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login='YLENA'; // Demandes en test + $pass='WYLFE'; + $nomClient=$strInfoCommande=''; + $typeEnqLog='enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + /** Connexion à l'Extranet Intersud **/ + $url = 'http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array( + 'login' => $login, + 'pwd' => $pass, + ); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + //wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + throw new SoapFault('1',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + $intersudNomPrenom=$intersudRaisonSociale=''; + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudNomPrenom=trim($matches[1]); + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudRaisonSociale=trim($matches[1]); + debugLog('I',"Intersud, connexion via $login pour $intersudRaisonSociale ($intersudNomPrenom, cookie=$cookie)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /* + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, EOL.DATETIME.EOL.print_r($page,true).'========================================================================================================='.EOL.EOL); + @fclose($fp); + die(); + */ + /** Page formulaire de demande d'enquête **/ + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible au formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('2',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ".DATETIME." + Date et heure de la commande : ".date('d/m/Y - H:i')." + Origine de la commande : $nomClient + $strInfoCommande + + CA : ".$infoEnq['Precisions']['MontantCA']." + Motif de la demande : ".trim($infoEnq['Precisions']['Motif'].' '.$infoEnq['Precisions']['Autre'])." + Type de la demande : ".$infoEnq['Precisions']['Type']." + Anciennete de la relation : ".$infoEnq['Anciennete'].' '.$infoEnq['AncienneteDuree']." + Observations : ".$infoEnq['Observation'].EOL; + + if ($infoEnq['ImpayeesChoix']<>'non') + $comment.="Impayé(s) : ".$infoEnq['Impayees']['Nombre']." impayé(s) pour un montant de ".$infoEnq['Impayees']['Montant']." en date du ".$infoEnq['Impayees']['Date'].EOL; + + if ($infoEnq['RetardPaiementChoix']<>'non') + $comment.="Retard(s) de paiement : ".$infoEnq['RetardPaiement']['Nombre']." retard(s) pour un montant de ".$infoEnq['RetardPaiement']['Montant']." en date du ".$infoEnq['RetardPaiement']['Date'].EOL; + + if ($infoEnq['LitigeChoix']<>'non') + $comment.="Présence de litige(s) : ".$infoEnq['Litige']['Precisions'].EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infoEnq['Type'])) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infoEnq['Entrep']['Rib']))<>''){ + $iDbCrm->insert('banques', array( + 'siren' => $siren, + 'libBanqueGuichet' => '', + 'precis' => 1, + 'codeBanque' => $infoEnq['Entrep']['Rib']['Banque'], + 'codeGuichet' => $infoEnq['Entrep']['Rib']['Guichet'], + 'numCompte' => $infoEnq['Entrep']['Rib']['Compte'].$infoEnq['Entrep']['Rib']['Cle'], + 'dateSource' => DATETIME, + ), true); + } + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc' => $tabIdentite['Nom'], + 'cible_enk' => 9, // 9 + 'siret' => $siren, + 'acti' => '', + 'soc_exp' => $tabInterSud['soc_exp'], + 'type_enk' => $enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri' => '', + 'adr' => $tabIdentite['Adresse'], + 'ref_exp' => $tabInterSud['ref_exp'], + 'autre_type_enk' => '', // Texte libre + 'adr2' => $tabIdentite['Adresse2'], + 'delai_enk' => $enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville' => $tabIdentite['Ville'], + 'cp' => $tabIdentite['CP'], + 'pays' => '', // International ? + 'nom_exp' => $tabInterSud['nom_exp'], + 'tel' => $tabIdentite['Tel'], + 'port' => $infoEnq['Entrep']['AutreTel'], + 'tel_exp' => $tabInterSud['tel_exp'], + 'bank' => trim(implode(' ', $infoEnq['Entrep']['Rib'])), + 'int_enk' => $tabInterSud['int_enk'], // International ? + 'encours' => $infoEnq['Encours'], + 'nb_ech' => $infoEnq['NbEcheances'], + 'delai2_enk' => $tabInterSud['delai2_enk'], // International ? + 'email_exp' => $tabInterSud['email_exp'], + 'cred' => '', + 'comment' => urlencode($comment), + 'val_ret' => $tabInterSud['val_ret'], + ); + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('3',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $output = new CommandeEnqueteReturn(); + $output->siren = $siren; + $output->emailCommande = $mail; + $output->dateCommande = DATETIME; + $output->refCmde = 'i'.$ret; + + //$strInfoCommande $mail + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url = 'http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + return $output; + } + +} + +?> \ No newline at end of file diff --git a/library/WsScore/Interne/v0.3/Service.php b/library/WsScore/Interne/v0.3/Service.php new file mode 100644 index 00000000..367d1d67 --- /dev/null +++ b/library/WsScore/Interne/v0.3/Service.php @@ -0,0 +1,3398 @@ +authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges detail sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesDetail($siren, $tabTypes); //@todo : date + + $tabRet = array(); + if (count($ret)>0) { + foreach ($ret as $item ) { + $privileges = new PrivilegesDetail(); + $privileges->numDebiteur = $item['numDebiteur']; + $privileges->greffe = $item['greffe']; + $privileges->greffeLib = $item['greffeLib']; + $privileges->dateEven = $item['dateEven']; + $privileges->dateFraiche = $item['dateFraiche']; + $privileges->dateSD = $item['dateSD']; + $privileges->insType = $item['insType']; + $privileges->insTypeLib = $item['insTypeLib']; + $privileges->insNum = $item['insNum']; + $privileges->insDate = $item['insDate']; + $privileges->insDateEch = $item['insDateEch']; + $privileges->insObjet = $item['insObjet']; + $privileges->insMontant = $item['insMontant']; + $privileges->insDev = $item['insDev']; + $privileges->insDateFin = $item['insDateFin']; + $privileges->radDate = $item['radDate']; + $privileges->radMention = $item['radMention']; + $privileges->radPartiel = $item['radPartiel']; + $privileges->radPartMt = $item['radPartMt']; + $privileges->radDev = $item['radDev']; + $privileges->creNom = $item['creNom']; + $privileges->creAdresse1 = $item['creAdresse1']; + $privileges->creAdresse2 = $item['creAdresse2']; + $privileges->creAdresse3 = $item['creAdresse3']; + $privileges->creCP = $item['creCP']; + $privileges->creVille = $item['creVille']; + $privileges->crePays = $item['crePays']; + $privileges->creAutres = $item['creAutres']; + $tabRet[] = $privileges; + } + } + $this->wsLog('privdetail', $siren, join(',',$tabTypes)); + $output = new PrivilegesDetailReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les privilèges cumulés + * @param string $siren + * @param array $tabTypes + * @return PrivilegesCumulReturn + */ + public function getPrivilegesCumul($siren, $tabTypes=array('03','04')) + { + $this->authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges cumul sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesCumul($siren, $tabTypes); + $tabRet = array(); + + if (isset($ret['03']) && count($ret['03']>0)){ + $value = $ret['03']; + $priv = new PrivilegesCumul(); + $priv->insType = '03'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + + if (isset($ret['04']) && count($ret['04']>0)){ + $value = $ret['04']; + $priv = new PrivilegesCumul(); + $priv->insType = '04'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + $this->wsLog('privcumul', $siren, print_r($tabTypes,1)); + $output = new PrivilegesCumulReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Liste les mandataires correspondant à un nom donné + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @param int $cpDep Code postal ou département du mandataire + * @return SearchMandatairesReturn + */ + public function searchMandataires($nom, $type=array('A','M'), $cpDep=0) + { + $this->authenticate(); + + //Initialisation + if (empty($type)) $type = array('A','M'); + if (empty($cpDep)) $cpDep = 0; + $tabRet = array(); + + debugLog('I',"Recherche de Mandataires '$nom' (Dep=$cpDep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabTmp = $iInsee->searchMandataires($nom, true, $type, $cpDep); + + foreach ($tabTmp as $i=>$mand) + { + $mandataire = new SearchMandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = utf8_encode($mand); + $tabRet[] = $mandataire; + + } + $output = new SearchMandatairesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des tribunaux ou Compétences demandées + * @param array|string $tabTypes Tableau des types de Compétences demandés 'C':Commerce, 'I':Instance, 'G':TGI, 'A':Préfectures, 'B':Sous-préf, 'D':Tribunal Administratif, 'H':Prud'hommes, 'L': Cour d'Appel, 'M': Tribunal Mixte, 'O':CCI, 'V': Cour Administrative d'Appel + * @return TribunauxReturn + **/ + public function getTribunaux($tabTypes) + { + $this->authenticate(); + + //Initialisation + if (empty($tabTypes)) $tabTypes = array(); + if (is_string($tabTypes)) $tabTypes = (array)$tabTypes; + + $iBodacc = new MBodacc(); + debugLog('I',"Liste des tribunaux demandées",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabTmp = $iBodacc->getListeTribunaux(); + //@todo : Retourner liste en ordre alphabétique + $tabRet = array(); + if (count($tabTypes)==0) { + foreach ($tabTmp as $i => $tribunal){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } else { + foreach ($tabTmp as $i=>$tribunal){ + $type = substr($i,-1); + if ( in_array($type, $tabTypes) ){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } + } + $this->wsLog('tribunaux', '', print_r($tabTypes,1)); + $output = new TribunauxReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Enregistrement des informations saisie manuellement + * @param string $siret + * @param int $idEntreprise + * @param SetInfosEntrepInfos $tabInfos + * @return SetInfosEntrepReturn + */ + public function setInfosEntrep( $siret, $idEntreprise, $tabInfos ) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $iBodacc = new MBodacc(); + $iInsee = new MInsee(); + $result = false; + + if (!$this->checkEdition()) { + + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + $iDb = new WDB(); + + $tabIdentite = $tabInfos->identite; + $tabJugement = $tabInfos->jugement; + $tabActio = $tabInfos->actionnaire; + $tabParti = $tabInfos->participation; + $tabScores = $tabInfos->score; + + // Mise à jour de l'identité + if (trim(strtolower($tabIdentite->web))=='http://'){ + $web = ''; + } else { + $web = trim($tabIdentite->web); + } + $tabUpdate = array( + 'isin' => trim($tabIdentite->isin), + 'tel' => trim($tabIdentite->tel), + 'fax' => trim($tabIdentite->fax), + 'web' => $web, + 'mail' => trim($tabIdentite->mail), + 'activite' => stripslashes(trim($tabIdentite->activite)), + 'sirenDoublon' => substr(str_replace(' ','',strtr($tabIdentite->sirenDoublon, '"\'./- ,\*#()',' ')),0,9), + 'waldec' => trim(str_replace(' ','',strtr($tabIdentite->waldec, '"\'./- ,\*#()',' '))), + ); + + /** @todo non traitées : [capital_mt] => 335400, [capital_dev] => EUR **/ + if ( !$iDb->update('infos_entrep', $tabUpdate, "siren='$siren'") ){ + if (!$iDb->insert('infos_entrep', array_merge(array('siren'=>$siren),$tabUpdate))){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + exit; + } + } + // Fin mise à jour identité + + // Opposition INSEE + if ( $tabIdentite->moisOppositionInsee>0 && + $tabIdentite->moisOppositionInsee<=(date('Ym')*1) ){ + + $iDb2 = new WDB('insee'); + if ( !$iDb2->insert('insee_nondiff', array('siren'=>$siren, 'insEVE'=>795, 'mois'=>$tabIdentite->moisOppositionInsee)) ){ + if ( $iDb2->getLastErrorNum()<>1062 ) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des oppositions de la sphère commerciale INSEE pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + } + + } + // Fin opposition INSEE + + // Refus d'inscription au RCS + if (isset($tabIdentite->moisRefusRCS) && $tabIdentite->moisRefusRCS>0 + && $tabIdentite->moisRefusRCS<=(date('Ym')*1)) { + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteLight($siren); + if ($nic<10) $nic=$entrep['Nic']; + $cj1=substr($entrep['FJ'],0,1); + $iDb2 = new WDB('insee'); + /** Insertion dans la tables des exclusions **/ + $tabInsert = array( + 'siren' => $siren, + 'nic' => $nic, + 'idSaisie' => $this->User->id, + 'cj1' => $cj1, + 'insEVE' => 'RCS', + 'mois' => $tabIdentite->moisRefusRCS, + ); + if (!$iDb2->insert('insee_nondiff', $tabInsert)) + if ($iDb2->getLastErrorNum()<>1062) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des refus d'enregistrement A au RCS pour $siren au mois de ".$tabIdentite->moisRefusRCS." : ".EOL.print_r($tabInsert, true).EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + + /** Insertion dans la tables des évènements **/ + $tabInsert = array( + 'insSIREN' => $siren, + 'siretValide' => $iInsee->valideSiren($siren,$nic), + 'insNIC' => $nic, + 'insEVE' => 'RCS', + 'insDATEVE' => $tabIdentite->moisRefusRCS.'28', + 'insDATEMAJ' => date('YmdHis'), + 'idFlux' => date('Ymd')); + if (!$iDb2->insert('insee_even', $tabInsert)) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des refus d'enregistrement B au RCS pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabInsert, true).EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + + } + // Fin refus d'inscription au RCS + + // Domiciliataire + if (!empty($tabIdentite->domiciliataire) && $siren>1000) { + if ($tabIdentite->domiciliataire=='oui' || $tabIdentite->domiciliataire=='non') { + // L'entreprise et ces établissements seront mis à jour automatiquement ce soir + $iDb->query("INSERT IGNORE INTO jo.tabAdrDom (siren,nic,siege, etActif, nom, sigle, enseigne, adrNum, adrBtq, adrTypVoie, adrLibVoie, ville, cp, depComEt, adrComp, cj, apen,apet, dateInsert) + SELECT siren, nic, siege, actif AS etActif, raisonSociale AS nom, sigle, enseigne, adr_num as adrNum, adr_btq AS adrBtq, adr_typeVoie AS adrTypVoie, adr_libVoie AS adrLibVoie, adr_ville AS ville, adr_cp AS cp, CONCAT(adr_dep,adr_com) AS depComEt, adr_comp AS adrComp, cj, ape_entrep AS apen, ape_etab AS apet, DATE(NOW()) as dateInsert + FROM jo.etablissements WHERE siren=$siren;", false); + } + // Si demande de suppression, on force l'indicateur "" + if ($tabIdentite->domiciliataire=='non') { + $tabUpdate=array('pasEntrepDom'=>1); + if (!$iDb->update('tabAdrDom', $tabUpdate, "siren=$siren")) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de la suppression du marqueur de domiciliation pour $siren :".EOL.print_r($tabUpdate, true).EOL.$iDb->getLastError()); + } + } + // Fin domiciliataire + + + // Insertion des scores + $tabUpdate = array(); + $setScore = false; + if ( $tabScores->encours!='' || $tabScores->encours!=null ){ + $tabUpdate['encours'] = $tabScores->encours; + $setScore = true; + } + if ( $tabScores->scoreSolv!='' ){ + $tabUpdate['scoreSolv'] = $tabScores->scoreSolv; + $setScore = true; + } + if ( $tabScores->scoreDir!='' ){ + $tabUpdate['scoreDir'] = $tabScores->scoreDir; + $setScore = true; + } + if ( $tabScores->scoreConf!='' ){ + $tabUpdate['scoreConf'] = $tabScores->scoreConf; + $setScore = true; + } + if ( $setScore ){ + // Mise à jour des Cute Offs + if ( !$iDb->update('scores_cutoff', $tabUpdate, "siren=$siren") ){ + if ( !$iDb->insert('scores_cutoff', array_merge(array( + 'siren' => $siren, + 'dateInsert' => date('Ymd') + ), $tabUpdate)) ){ + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", print_r($tabScores, true).EOL.$iDb->getLastError()); + } + } + } + // Fin insertion des scores + + // Insertion du jugement + $tabEven = array(); + if (is_array($tabJugement->even->item) && count($tabJugement->even->item)>0){ + foreach($tabJugement->even->item as $even){ + $tabEven[] = $even->code; + } + } elseif (!empty($tabJugement->even->item->code)) { + $tabEven[] = $tabJugement->even->item->code; + } + $nic = $tabJugement->nic*1; + $entrep = $iInsee->getIdentiteLight($siren, $nic); + if ( $nic>0 && $tabEven[0]->code==6700 && $entrep['Siege']==0 ){ + // Radiation d'un établissement + $tabEven[0]->code = 6600; + } + + if ( count($tabEven)>0 ) + { + $idAdmin = str_replace('m','',trim($tabJugement->admin)); + $idMand = str_replace('m','',trim($tabJugement->mand)); + $idOppo = str_replace('m','',trim($tabJugement->oppo)); + + /** Nom et Identifiant de l'opérateur de saisie **/ + $iDbCrm = new WDB('sdv1'); + $rep=$iDbCrm->select('utilisateurs', 'id', "login='".$this->User->login."'"); + $idUser=$rep[0][0]; + + $tabSource=explode('_',$tabJugement->source); + $source=@$tabSource[0]; + $numJal=@$tabSource[1]; + + $dateSource=WDate::dateT('d/m/Y', 'Ymd', trim($tabJugement->dateParution))*1; + if ($dateSource<20000101) + $dateSource=date('YmdHis'); + + $montant=trim(preg_replace('/[^0-9]/', '', $tabJugement->montant))*1; + $actionsMt=trim(preg_replace('/[^0-9]/', '', $tabJugement->actionsMt))*1; + $actionsNb=trim(preg_replace('/[^0-9]/', '', $tabJugement->actionsNb))*1; + if ($montant>0 && ($actionsNb>0 || $actionsMt>0)) { + if ($actionsNb>0) $actionsMt=$montant/$actionsNb; + elseif ($actionsMt>0) $actionsNb=$montant/$actionsMt; + } + + //@todo : ça ne va pas marcher ici + $strDir=''; + $tabNouvDir = array(); + if ( is_array($tabJugement->nouvDir->item) && count($tabJugement->nouvDir->item)>0 ){ + $tabNouvDir = $tabJugement->nouvDir->item; + } else { + $tabNouvDir[] = $tabJugement->nouvDir; + } + + if (count($tabNouvDir)>0) { + foreach( $tabNouvDir as $dir ){ + if ( intval($dir->Fonc)>0 ){ + $strDir.= $iBodacc->getFctDir($dir->Fonc).' : '. + $dir->Genre.' '. + ucwords(strtolower($dir->Pre)).' '. + strtoupper($dir->Nom); + if (!empty($dir->Dom)) { + $strDir.= ', domicilié à '.$dir->Dom.'. '; + } + } + } + } + + if ( trim($tabJugement->nouvAdrCp)<>'' ){ + $strAdr = stripslashes(trim($tabJugement->nouvAdr).', '. + trim($tabJugement->nouvAdrCp).' '. + trim($tabJugement->nouvAdrVille)); + } else { + $strAdr=''; + } + + if (count($tabEven)>1){ + $strEven = implode(';',array_slice($tabEven, 1)); + } else { + $strEven = ''; + } + + $tabUpdate = array( + 'strEven' => $strEven, + 'sirenValide' => $iInsee->valideSiren($siren), + 'dateCessationPaiement' => empty($tabJugement->datePaie) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement->datePaie)), + 'dateEffetFinP' => empty($tabJugement->dateFinPeriode) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement->dateFinPeriode)), + 'tribunal' => trim($tabJugement->tribunal), + 'montant' => $montant, + 'actionsNb' => $actionsNb, + 'inter1type' => 'A', + 'inter1id' => $idAdmin, + 'inter1nom' => $iInsee->getMandatairesParId($idAdmin), + 'inter2type' => 'M', + 'inter2id' => $idMand, + 'inter2nom' => $iInsee->getMandatairesParId($idMand), + 'inter3type' => 'O', + 'inter3id' => $idOppo, + 'inter3nom' => $iInsee->getMandatairesParId($idOppo), + 'complement' => stripslashes(trim($tabJugement->comp)), + 'nouvActivite' => stripslashes(trim($tabJugement->nouvActivite)), + 'nouvDir' => stripslashes(trim($strDir)), + 'nouvAdr' => $strAdr, + 'nouvFJ' => trim($tabJugement->nouvFJ), + 'raisonSociale' => $entrep['Nom'], + 'adresse' => $entrep['Adresse'], + 'codePostal' => $entrep['CP'], + 'ville' => $entrep['Ville'], + 'source' => $source, + 'idSaisie' => $idUser, + 'parutionIdJal' => $numJal, + 'parutionNum' => $tabJugement->numParution, + ); + $dateJuge = WDate::dateT('d/m/Y','Y-m-d',trim($tabJugement->dateJuge)); + $tabInsert = array_merge( $tabUpdate, array( + 'siren' => $siren, + 'dateJugement' => $dateJuge, + 'typeEven' => $tabEven[0], + 'dateSource' => $dateSource, + )); + if ( !$iDb->insert('annonces', array_merge($tabInsert,array('dateInsert'=>date('YmdHis'))), true) ){ + if ( !$iDb->update('annonces', $tabUpdate, "siren=$siren AND dateJugement='$dateJuge' AND typeEven=".$tabEven[0], true)){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + } + } + //Fin insertion jugement + + // Insertion actionnaire + if ( trim($tabActio->siren)!='' ) + { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabActio->pct))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabActio->siren); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ($pays=='') $pays='FRA'; + if (trim($tabActio->nom)!='') $nom = $tabActio->nom; + if ($tabActio->pays!='XXX') $pays = $tabActio->pays; + + if (trim($tabActio->dateMAJ)!='JJ/MM/AAAA' && trim($tabActio->dateMAJ)!=''){ + $dateMAJ = WDate::dateT('d/m/Y', 'Y-m-d', trim($tabActio->dateMAJ)); + } + + if ($tabActio->majMin=='maj') $majMin='+'; + elseif ($tabActio->majMin=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + //'Siren1'=> $siren, + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + //'Siren2'=> $siren2, + //'RaisonSociale'=> $nom, + //'Pays'=> $pays, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array('ActionPart' => 1), + array( + 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); Zend_Registry::get('WsLogger')->info('INSERTION ACTIONNAIRE : '.print_r($tabInsert1, 1)); + $res = $iDb->select('liens', 'count(*)', + "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge( + $tabUpdate, array('ActionPart'=>1)), + "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=1016166; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=1016167; + } + + $tabInsert2 = array_merge($tabUpdate, array('ActionPart' => 2), + array( 'Siren1' => $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=1016168; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=1016169; + } + } + // Fin insertion actionnaire + + //Insertion participation + if ( trim($tabParti->siren)<>'' ) { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabParti->pct))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabParti->siren); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ( $pays=='' ) $pays='FRA'; + if ( trim($tabParti->nom)<>'' ) $nom=$tabParti->nom; + if ( $tabParti->pays<>'XXX' ) $pays=$tabParti->pays; + + if (trim($tabParti->dateMAJ)<>'JJ/MM/AAAA' && trim($tabParti->dateMAJ)<>'') + $dateMAJ=WDate::dateT('d/m/Y', 'Y-m-d', trim($tabParti->dateMAJ)); + + if ($tabParti->majMin=='maj') $majMin='+'; + elseif ($tabParti->majMin=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array( 'ActionPart' => 2 ), + array( 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=10168; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=10169; + } + + $tabInsert2 = array_merge($tabUpdate, array( 'ActionPart' => 1 ), + array( 'Siren1'=> $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=10170; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=10171; + } + } + // Fin insertion participation + + if ($errMaj>0){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } else { + $result = true; + } + } + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Commande de bilan + * @param InfoCommandeBilan $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdBilanReturn + */ + public function setCmdBilan( InfoCommandeBilan $infoCommande, InfosDemandeur $infosDemandeur ) + { + + } + + /** + * Renvoi des informations sur une commande de bilan + * @param string $reference + * @return CmdBilanReturn + */ + public function getCmdBilan( $reference ) + { + + } + + /** + * Commande d'acte + * @param InfoCommandeActe $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdActeReturn + */ + public function setCmdActe( $infoCommande, $infosDemandeur ) + { + + } + + /** + * Renvoi des informations sur une commande d'acte + * @param string $reference + * @return CmdActeReturn + */ + public function getCmdActe( $reference ){} + + /** + * Commande de kbis + * @param InfoCommandeKbis $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdKbisReturn + */ + public function setCmdKbis( InfoCommandeKbis $infoCommande, InfosDemandeur $infosDemandeur ) + { + $this->authenticate(); + + $error = new ErrorType(); + $ref = new RefCommande(); + //Vérifier les informations + switch($infoCommande->mode) + { + case 'courrier': break; + case 'mail': break; + default: + exit; break; + } + if (empty($infoCommande->siren)) + { + $error->errnum = 0; + $error->errmsg = 'Erreur SIREN invalide'; + } + else + { + $login = $_SERVER['PHP_AUTH_USER']; + // Insertion des données commande + $dataCommandes = array( + 'user_login' => $login, + 'user_email' => $this->User->email, + 'type' => 'kbis', + 'demandeurReference' => $infosDemandeur->reference, + 'demandeurEmail' => $infosDemandeur->email, + 'demandeurTel' => $infosDemandeur->tel, + 'demandeurNom' => $infosDemandeur->nom, + 'demandeurService' => $infosDemandeur->service, + 'demandeurSociete' => $infosDemandeur->societe, + 'demandeurAdresse' => $infosDemandeur->adresse, + 'demandeurCp' => $infosDemandeur->cp, + 'demandeurVille' => $infosDemandeur->ville, + 'infoCommande' => serialize($infoCommande) + ); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commande = new Application_Model_Commandes(); + $commande_id = $commande->insert($dataCommandes); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id) + { + //Enregistrement des détails de commande + $dataCommandesKbis = array( + 'commande_id' => $commande_id, + 'siren' => $infoCommande->siren, + 'raisonSociale' => '', + 'fichier' => '', + 'partenaireRequete' => '', + 'partenaireReponse' => '', + ); + try { + $commandeKbisTable = new Application_Model_CommandesPieces(); + $commandeKbisTable->insert($dataCommandesKbis); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + try { + $row = $commande->find($commande_id); + $data = $row->current(); + $ref->reference = $data->id; + $ref->dateCommande = $data->date_added; + $ref->dateMaj = $data->date_updated; + $ref->dateReception = $data->date_closed; + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 0; + $error->errmsg = "Commande Introuvable"; + } + } + else + { + $error->errnum = 0; + $error->errmsg = "Erreur enregistrement commande"; + } + } + $output = new CmdKbisReturn(); + $cmd = new CmdKbisDetail(); + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $cmd->refCommande = $ref; + $output->commande = $cmd; + $output->error = $error; + return $output; + } + + /** + * Renvoi des informations sur une commande de Kbis + * @param string $reference + * @return CmdKbisReturn + */ + public function getCmdKbis( $reference ){} + + /** + * Commande de privilèges et nantissements par email + * @param InfoCommandePieces $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdPiecesReturn + */ + public function setCmdPieces( $infoCommande, $infosDemandeur ) + { + $this->authenticate(); + $error = new ErrorType(); + $ref = new RefCommande(); + if (!empty($infoCommande->siren)){ + //Vérification SIREN + // Insertion des données commande + $dataCommandes = array( + 'user_login' => $this->User->login, + 'user_email' => $this->User->email, + 'type' => 'pieces', + 'demandeurReference' => $infosDemandeur->reference, + 'demandeurEmail' => $infosDemandeur->email, + 'demandeurTel' => $infosDemandeur->tel, + 'demandeurNom' => $infosDemandeur->nom, + 'demandeurService' => $infosDemandeur->service, + 'demandeurSociete' => $infosDemandeur->societe, + 'demandeurAdresse' => $infosDemandeur->adresse, + 'demandeurCp' => $infosDemandeur->cp, + 'demandeurVille' => $infosDemandeur->ville, + 'infoCommande' => serialize($infoCommande) + ); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commande = new Application_Model_Commandes(); + $commande_id = $commande->insert($dataCommandes); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id){ + //Enregistrement des détails de commande + $dataCommandesPieces = array( + 'commande_id' => $commande_id, + 'siren' => $infoCommande->siren, + 'raisonSociale' => '', + 'fichier' => '', + ); + try { + $commandePieces = new Application_Model_CommandesPieces(); + $commandePieces->insert($dataCommandesPieces); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + + try { + $row = $commande->find($commande_id); + $data = $row->current(); + $ref->reference = $data->id; + $ref->dateCommande = $data->date_added; + $ref->dateMaj = $data->date_updated; + $ref->dateReception = $data->date_closed; + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 0; + $error->errmsg = "Commande Introuvable"; + } + } else { + $error->errnum = 0; + $error->errmsg = "Erreur enregistrement commande"; + } + } else { + $error->errnum = 0; + $error->errmsg = 'Erreur SIREN invalide'; + } + $output = new CmdPiecesReturn(); + $cmd = new CmdPiecesDetail(); + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $cmd->refCommande = $ref; + $output->error = $error; + return $output; + } + + /** + * Renvoi des informations sur une commande pièces + * @param string $reference + * @return CmdPiecesReturn + */ + public function getCmdPieces( $reference ) + { + list($typeCommande, $idCommande) = explode('-', $reference); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commandeTable = new Application_Model_Commandes(); + $select = $commandeTable->select() + ->where('type = ?', 'pieces') + ->where('id = ?', $idCommande); + $commandeRowset = $commandeTable->fetchAll($select); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + $error = new ErrorType(); + $ref = new RefCommande(); + $infoCommande = new InfoCommandePieces(); + $infosDemandeur = new InfosDemandeur(); + if ( $commandeRowset->count()>0 ) + { + $commande = $commandeRowset->current(); + $selectEven = $commandeTable->select() + ->order('date_added DESC')->limit(1); + $evenRowset = $commande->findDependentRowset( + 'Application_Model_CommandesEven', null, $selectEven); + $info = ''; + if($evenRowset->count()>0){ + $even = $evenRowset->current(); + $info = $even->commentaire; + } + $ref->reference = strtoupper($commande->type).'-'.$commande->id; + $ref->dateCommande = $commande->date_added; + $ref->dateMaj = $commande->date_updated; + $ref->dateReception = $commande->date_closed; + $ref->info = $info; + $ref->fichier = ''; // @todo : Détecter le fichier + $ref->login = $commande->user_login; + $infoCommande = unserialize($commande->infoCommande); + $infosDemandeur->reference = $commande->demandeurReference; + $infosDemandeur->email = $commande->demandeurEmail; + $infosDemandeur->tel = $commande->demandeurTel; + $infosDemandeur->nom = $commande->demandeurNom; + $infosDemandeur->service = $commande->demandeurService; + $infosDemandeur->societe = $commande->demandeurSociete; + $infosDemandeur->adresse = $commande->demandeurAdresse; + $infosDemandeur->cp = $commande->demandeurCp; + $infosDemandeur->ville = $commande->demandeurVille; + } + else + { + $error->errnum = 0; + $error->errmsg = 'Référence inconnue'; + } + $output = new CmdPiecesReturn(); + $cmd = new CmdPiecesDetail(); + $cmd->refCommande = $ref; + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $output->commande = $cmd; + $output->error = $error; + return $output; + } + + /** + * Retourne la liste des commandes de pièces ainsi que leur détails + * @param CmdFiltrePieces $filtre + * @param int $position + * @param int $nbRep + * @return ListeCmdPiecesReturn + */ + public function getListeCmdPieces( $filtre, $position = 0, $nbRep = 20 ) + { + $error = new ErrorType(); + //Traitements des filtres pour générer la requête SQL + + //Selection + $nbCommandes = 0; + try + { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commandeTable = new Application_Model_Commandes(); + $select = $commandeTable->select()->where('type = ?', 'pieces'); + $countRowset = $commandeTable->fetchAll($select); + $nbCommandes = $countRowset->count(); + $select->order('date_added DESC')->limit($nbRep, $position); + $commandeRowset = $commandeTable->fetchAll($select); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 1; + $error->errmsg = 'Erreur'; + } + + if ( $commandeRowset->count()>0 ) + { + $liste = array(); + foreach ($commandeRowset as $commande) + { + $selectEven = $commandeTable->select() + ->order('date_added DESC')->limit(1); + $evenRowset = $commande->findDependentRowset( + 'Application_Model_CommandesEven', null, $selectEven); + $info = ''; + if($evenRowset->count()>0){ + $even = $evenRowset->current(); + $info = $even->commentaire; + } + + $ref = new RefCommande(); + $ref->reference = strtoupper($commande->type).'-'.$commande->id; + $ref->dateCommande = $commande->date_added; + $ref->dateMaj = $commande->date_updated; + $ref->dateReception = $commande->date_closed; + $ref->info = $info; + $ref->fichier = ''; // @todo : Détecter le fichier + $ref->login = $commande->user_login; + + $infoCommande = new InfoCommandePieces(); + $infoCommande = unserialize($commande->infoCommande); + + $infosDemandeur = new InfosDemandeur(); + $infosDemandeur->reference = $commande->demandeurReference; + $infosDemandeur->email = $commande->demandeurEmail; + $infosDemandeur->tel = $commande->demandeurTel; + $infosDemandeur->nom = $commande->demandeurNom; + $infosDemandeur->service = $commande->demandeurService; + $infosDemandeur->societe = $commande->demandeurSociete; + $infosDemandeur->adresse = $commande->demandeurAdresse; + $infosDemandeur->cp = $commande->demandeurCp; + $infosDemandeur->ville = $commande->demandeurVille; + + $cmd = new CmdPiecesDetail(); + $cmd->refCommande = $ref; + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + + $liste[] = $cmd; + } + } + + $output = new ListeCmdPiecesReturn(); + $output->error = $error; + $output->nbCommandes = $nbCommandes; + $output->liste = $liste; + return $output; + } + + /** + * Retourne la liste des statuts de commande + * @param string $type + * @return CmdStatut[] + */ + public function getListeCmdStatut( $type ) + { + Zend_Registry::get('WsLogger')->info("getListeStatut - ".$type); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $dbStatut = new Application_Model_CommandesStatut(); + $result = $dbStatut->fetchAll(array("commande_type = '$type'")); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + $listeStatut = array(); + if (count($result)>0) + { + foreach($result as $r) + { + $statut = new CmdStatut(); + $statut->code = $r['code']; + $statut->lib = $r['libelle']; + $listeStatut[] = $statut; + } + } + return $listeStatut; + } + + /** + * Spécifier un état défini pour une commande + * (avec déclenchement d'une action) + * @param int $reference + * @param int $statutCode + * @return bool + */ + public function setCmdStatut( $reference, $statutCode) + { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $dbStatut = new Application_Model_CommandesStatut(); + $row = $dbStatut->fetchRow(array("code = '$statutCode'")); + if ( count($row)>0 && $this->setCommandeEven($reference, $row['lib']) ) + { + if (!empty($row['action'])){ + switch($row['action']){ + case 'CLOSE': + //date_closed + break; + } + } + return true; + } else { + return false; + } + } + + /** + * Spécifier un état pour une commande + * @param int $reference + * @param string $comment + * @return bool + */ + public function setCmdEven ( $reference, $comment ) + { + $this->authenticate(); + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + try { + //Vérifier que la commande existe avec la référence fournie + $commandeTable = new Application_Model_Commandes(); + $commandeRowset = $commandeTable->find($reference); + if ($commandeRowset->count()>0) + { + $commande = $commandeRowset->current(); + //Enregistrer l'événement + $commandeEvenTable = new Application_Model_CommandesEven(); + $insert = $commandeEvenTable->createRow(); + $insert->commande_id = $commande->id; + $insert->commentaire = $comment; + $insert->user_login = $this->User->login; + $insert->save(); + //Mettre à jour la commande + $commande->date_updated = date('Y-m-d H:i:s'); + $commande->save(); + return true; + } else { + return false; + } + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + return false; + } + } + + /** + * Ajout du nom de fichier liée à la commande + * @param int $reference + * @param string $filename + * @return bool + */ + public function setCmdDocument( $reference, $filename ) + { + $this->authenticate(); + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + try { + //Vérifier que la commande existe avec la référence fournie + $commandeTable = new Application_Model_Commandes(); + $commandeRowset = $commandeTable->find($reference); + if ($commandeRowset->count()>0) + { + $commande = $commandeRowset->current(); + switch($commande->type) + { + case 'pieces': + $infoCommandePieces = $commande->findDependentRowset('Application_Model_CommandesPieces'); + if ($infoCommandePieces->count()>0) + { + //Update informations pieces + $commandePieces = $infoCommandePieces->current(); + $commandePieces->fichier = $filename; + $commandePieces->save(); + //Mettre à jour la commande + $commande->date_updated = date('Y-m-d H:i:s'); + $commande->save(); + //Mettre à jour les évenements de commande + //@todo + return true; + } + break; + case 'default': + return false; + break; + } + } else { + return false; + } + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + return false; + } + } + + /** + * Enregistre une action utilisateur pour la facturation + * @param string $page + * @param string $siret + * @param int $id + * @param string $ref + * @return void + */ + public function setLog($page, $siret, $id=0, $ref='') + { + $this->authenticate(); + + //Initialisation + if (empty($id)) $id = 0; + if (empty($ref)) $ref = ''; + if ( $id!=0 ) { + $ref2=''.$id.'/'.$ref; + } else { + $ref2=$ref; + } + $this->wsLog($page, $siret, $ref2); + debugLog('I',"Insertion d'un log pour la page $page $siret $ref2",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + + /** + * Met a jour les informations sur un mandataire + * @param SetInfosMandataire $infos Informations sur le mandataire à créer ou à ajouter (ajout si id absent) + * @return SetMandataireReturn + **/ + public function setMandataire(SetInfosMandataire $infos) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $result = true; + + $iDb = new WDB(); + /** Nom et Identifiant de l'opérateur de saisie **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('utilisateurs', 'id', "login='".$this->User->login."'"); + $idUser = $rep[0][0]; + + //$infos = serialize($tabInfos); + debugLog('I',"Ajout/MAJ de mandaitaire ".print_r($infos,1)." demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $type = substr(strtoupper($infos->type),0,1); + $stag = substr(strtoupper($infos->type),1,1); + if ($stag=='S') { $stag=1; } else { $stag=0; } + if ($type=='A' || $type=='H' || $type=='M' || $type=='V' || + $type=='N' || $type=='T') + { + $tabUpdate=array( + 'sirenGrp' => substr($infos->sirenGrp,0,9)*1, + 'nicGrp' => substr($infos->sirenGrp,9,5)*1, + 'sirenMand' => substr($infos->sirenMand,0,9)*1, + 'nicMand' => substr($infos->sirenMand,9,5)*1, + 'Nom' => ucwords(strtolower($infos->Nom)), + 'Prenom' => ucwords(strtolower($infos->Prenom)), + 'type' => $type, + 'stagiaire' => $stag, + 'coursAppel' => intval($infos->coursAppel), + 'coursAppel2' => intval($infos->coursAppel2), + 'tribunal' => $infos->tribunal, + 'Statut' => strtoupper($infos->Statut), + 'adresse' => ucwords($infos->adresse), + 'adresseComp' => strtoupper($infos->adresseComp), + 'cp' => intval($infos->cp), + 'ville' => strtoupper($infos->ville), + 'tel' => $infos->tel, + 'fax' => $infos->fax, + 'email' => $infos->email, + 'web' => $infos->web, + 'contact' => $infos->contact, + 'idUser' => $idUser, + ); + } + $id = str_replace('m','', ''.$infos->id)*1; + if (intval($id)!=0) { + // MAJ + if (!$iDb->update('tabMandataires', $tabUpdate, "id=$id", true)) { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $result = false; + } + } else { + // Insertion + if (!$iDb->insert('tabMandataires', array_merge($tabUpdate,array('dateInsert'=>date('YmdHis'))), true)) { + $error->errnum = 1; + $error->errmsg = 'Insertion impossible'; + $result = false; + } + } + $output = new SetMandataireReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le mandataire par son id + * @param int $idMand Identifiant du mandataire + * @return MandataireReturn + */ + public function getMandataire($idMand) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + debugLog('I',"Donne le Mandataires correspondant à $idMand",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new classMInsee(); + $tabRet = $iInsee->getMandataire($idMand); + $mandataire = new MandataireDetail(); + $mandataire->Nom = $tabRet['Nom']; + $mandataire->Prenom = $tabRet['Prenom']; + $mandataire->tribunal = $tabRet['tribunal']; + $mandataire->adresse = $tabRet['adresse']; + $mandataire->adresseComp = $tabRet['adresseComp']; + $mandataire->ville = $tabRet['ville']; + $mandataire->email = $tabRet['email']; + $mandataire->web = $tabRet['web']; + $mandataire->contact = $tabRet['contact']; + $output = new MandataireReturn(); + $output->error = $error; + $output->result = $mandataire; + return $output; + } + + /** + * Liste les mandataires compétentes pour une cours d'appel donnée + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @return MandatairesReturn + */ + public function getMandataires($codeTribunal=0, $type=array('A','M')) + { + $this->authenticate(); + //Initialisation + $iInsee = new MInsee(); + $error = new ErrorType(); + $trib = serialize($codeTribunal); + debugLog('I',"Liste des Mandaitaires ou Administrateur du Tribunal/Cours d'Appel $trib demandé",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!is_array($codeTribunal) && strlen($codeTribunal)>3 && $codeTribunal*1==0) + { + // $codeTribunal est un identifiant de tribunal + $iBodacc = new MBodacc(); + $tabTmp = $iInsee->getMandataires(array($iBodacc->getTribunalIdCA($codeTribunal)), true, $type); + } + elseif ($codeTribunal*1==0) + { + // On veut tous les mandataires + $tabTmp = $iInsee->getMandataires(array(), true, $type); + } + elseif (is_array($codeTribunal)) + { + // On veut les mandataires d'une CA + $tabTmp = $iInsee->getMandataires($codeTribunal, true, $type); + } + $tabRet = array(); + foreach ($tabTmp as $i=>$mand){ + $mandataire = new Mandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = $mand; + $tabRet[]= $mandataire; + } + $output = new MandatairesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des conventions + * @param string $siren + * @return ListeConventionsReturn + */ + public function getListeConventions($siren) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + debugLog('I',"Liste des conventions demandée pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)<>9){ + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren Siret inexistant'; + + } elseif ($siren*1==0){ + + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren); + + if (empty($tabIdentite) && isset($tabIdentite['erreur']) && + $tabIdentite['erreur']<>''){ + + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $naf = $tabIdentite['NafEnt']; + $trancheEffectif = $tabIdentite['EffEnTr']; + $effectif = $tabIdentite['Effectif']; + $fj = $tabIdentite['entreprise']['FJCodeEntrep']; + + $isolv = new MSolvabilite($siren, $naf, $trancheEffectif, + $effectif, $tabIdentite['CP'], $fj, $tabIdentite['Capital'], + $tabIdentite['CapitalDev'], $tabIdentite['DateCreaEn'], + $tabIdentite['DateCreaEt'] + ); + $noteStructure = $isolv->getSolvabilite(); + $naf4 = $isolv->getNaf4($naf); + + $tabTmp = $iInsee->listeConventions($naf4, $tabIdentite['Dept']); + foreach ($tabTmp as $conv) + { + $convention = new Convention(); + $convention->idCC = $conv['id CC']; + $convention->nomCC = $conv['nom CC']; + $convention->infoCC = $conv['infoCC']; + $convention->editorCC = $conv['editeur CC']; + $convention->nbPageCC = $conv['nb page CC']; + $convention->isbnCC = $conv['isbn CC']; + $convention->dateCC = $conv['date edition CC']; + $convention->joCCmaj = $conv['joCCmaj']; + $tabRet[] = $convention; + } + $this->wsLog('conventions',$siren); + } + } + + $output = new ListeConventionsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Donne la cours d'appel d'un tribunal par son code + * @param string $codeTribunal Code BODACC sur 6 caractères du tribunal + * @return int + **/ + public function getIdCoursAppel($codeTribunal) + { + $this->authenticate(); + $iBodacc = new MBodacc(); + return $iBodacc->getTribunalIdCA($codeTribunal); + } + + /** + * Récupère le contenu d'une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return AnnonceCollecteReturn + */ + public function getAnnonceCollecte($idAnn, $siret) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $annonceCollecte = new AnnonceCollecte(); + $siren = substr($siret,0,9)*1; + if (!$this->checkEdition()) { + + $error->errnum = 0; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $iDb = new WDB(); + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $idAnn = preg_replace('/^0\./','', ''.$idAnn) * 1; + if ($idAnn>0) + { + $res = $iDb->select('annonces', + 'id, siren, sirenValide, typeEven, strEven, raisonSociale, adresse, codePostal, ville, dateJugement, dateCessationPaiement, dateEffetFinP, numero, inter1type, inter1id, inter1nom, inter2type, inter2id, inter2nom, inter3type, inter3id, inter3nom, inter4type, inter4id, inter4nom, tribunal, montant, actionsNb, complement, infosBrutes, nouvActivite, nouvDir, nouvAdr, nouvFJ, annonce, source, parutionIdJal, parutionNum, dateSource, idSaisie, idAnnonce, dateInsert', + "id=$idAnn", false, MYSQL_ASSOC + ); + if (count($res)>0) + { + $ann = $res[0]; + $annonceCollecte->id = $ann['id']; + $annonceCollecte->siren = $ann['siren']; + $annonceCollecte->raisonSociale = $ann['raisonSociale']; + $annonceCollecte->adresse = $ann['adresse']; + $annonceCollecte->codePostal = $ann['codePostal']; + $annonceCollecte->ville = $ann['ville']; + $annonceCollecte->dateJugement = $ann['dateJugement']; + + //@todo : Les libellées ne sont pas présent LibEven + $tabEven = array(); + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $ann['typeEven']; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + if (!empty($ann['strEven'])){ + foreach ( explode(';',$ann['strEven']) as $code ) + { + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $code; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + } + } + + $annonceCollecte->even = $tabEven; + $annonceCollecte->dateSource = $ann['dateSource']; + $annonceCollecte->dateCessationPaiement = $ann['dateCessationPaiement']; + $annonceCollecte->dateEffetFinP = $ann['dateEffetFinP']; + $annonceCollecte->tribunal = $ann['tribunal']; + $annonceCollecte->numero = $ann['numero']; + $annonceCollecte->montant = $ann['montant']; + $annonceCollecte->actionsNb = $ann['actionsNb']; + $annonceCollecte->inter1type = $ann['inter1type']; + $annonceCollecte->inter1id = $ann['inter1id']; + $annonceCollecte->inter1nom = $ann['inter1nom']; + $annonceCollecte->inter2type = $ann['inter2type']; + $annonceCollecte->inter2id = $ann['inter2id']; + $annonceCollecte->inter2nom = $ann['inter2nom']; + $annonceCollecte->inter3type = $ann['inter3type']; + $annonceCollecte->inter3id = $ann['inter3id']; + $annonceCollecte->inter3nom = $ann['inter3nom']; + $annonceCollecte->complement = $ann['complement']; + $annonceCollecte->nouvActivite = $ann['nouvActivite']; + $annonceCollecte->nouvDir = $ann['nouvDir']; + $annonceCollecte->nouvAdr = $ann['nouvAdr']; + $annonceCollecte->nouvFJ = $ann['nouvFJ']; + $annonceCollecte->source = $ann['source']; + + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret) : ".$ann['raisonSociale'],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } else { + $error->errnum = 1; + $error->errmsg = 'Edition impossible'; + } + } + else + { + $error->errnum = 745741; + $error->errmsg = 'Selection impossible'; + } + } + $output = new AnnonceCollecteReturn(); + $output->error = $error; + $output->result = $annonceCollecte; + return $output; + } + + /** + * getDevises + * @param string $codeIsoDevise + * @return DevisesReturn + */ + public function getDevises($codeIsoDevise='') + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if (empty($codeIsoDevise)) $codeIsoDevise = ''; + + debugLog('I',"Liste des devises ou devise $codeIsoDevise demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabTmp = $iInsee->getDevises($codeIsoDevise); + + $tabRet = array(); + foreach ($tabTmp as $i=>$dev) + { + if ( $i!='' ){ + $devise = new Devise(); + $devise->devIso = $i; + $devise->devNom = $dev; + $tabRet[] = $devise; + } + } + $output = new DevisesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des codes devises, libellés, date et valeur + * (toutes les devises ou une seule) + * @param string $devise Devise sur 3 lettres (facultatif) + * @return DevisesCoursReturn + */ + public function getDeviseCours($devise=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB('sdv1'); + if ($devise) $strDevise=" AND c.devise='$devise' "; + else $strDevise=''; + + $tabRet = array(); + + $res = $iDb->select('devise_cours c, devise_liste l', 'c.devise, l.devNom, max(c.date) as dateChange, c.valeur', "c.devise=l.devIso $strDevise GROUP BY c.devise ORDER BY c.devise ASC", false, MYSQL_ASSOC); + foreach ($res as $tabDev) + { + $devise = new DevisesCours(); + $devise->codeDevise = $tabDev['devise']; + $devise->nomDevise = $tabDev['devNom']; + $devise->dateChange = $tabDev['dateChange']; + $devise->valeurDevise = $tabDev['valeur']; + $tabRet[] = $devise; + } + $output = new DevisesCoursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getMarques + * @param string $siren + * @param int $idDepot + * @return MarquesReturn + */ + public function getMarques($siren, $idDepot=0) + { + $this->authenticate(); + $this->permission('marques'); + debugLog('I',"Liste des marques déposées pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($idDepot)) $idDepot = 0; + $error = new ErrorType(); + $marques = array(); + require_once 'Metier/partenaires/classMMarques.php'; + $iMarque = new MMarques(); + $ret = $iMarque->getMarques($siren, $idDepot); + + foreach ($ret as $item) { + if (trim($item['imgLink'])<>'') $idLien = $item['numeroMarque']; + else $idLien = ''; + if ($idDepot==$item['numeroMarque']) { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Date = $item['dateDepot']; + $marque->Depot = $item['numeroMarque']; + $marque->IdLien = $idLien; + $marque->UrlLien = $item['UrlLien']; + $marque->PdfDispo = $item['pdfLink']; + $marque->Classes = $item['classesMarque']; + $marque->Perimetre = $item['periMarque']; + $marque->DateExpir = $item['dateExpir']; + $marques = array(); + $marques[] = $marque; + break; + } else { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Date = $item['dateDepot']; + $marque->Depot = $item['numeroMarque']; + $marque->IdLien = $idLien; + $marque->UrlLien = $item['UrlLien']; + $marque->PdfDispo = $item['pdfLink']; + $marques[] = $marque; + } + } + + Zend_Registry::get('WsLogger')->info(__FUNCTION__.' : '. + print_r($marques,1)); + + $this->wsLog('marques',$siren); + $output = new MarquesReturn(); + $output->error = $error; + $output->result = $marques; + return $output; + } + + /** + * Enter description here ... + * @param string $siren + * @param string $piece + * @param string $type + * @param integer $visu + * @param integer $courrier + * @param string $ref + * @return PieceReturn + */ + public function getPiece($siren, $piece='kbis', $type='', $visu=1, $courrier=0, $ref='') + { + $this->authenticate(); + $this->permission('kbis'); + set_time_limit(400); + + if (empty($piece)) $piece = 'kbis'; + if (empty($type)) $type = ''; + if (empty($visu)) $visu = 1; + if (empty($courrier)) $courrier = 1; + if (empty($ref)) $ref = ''; + $error = new ErrorType(); + + $erreur = false; + + $kbisLocalPDF = DOC_WEB_LOCAL."kbis/$piece-$siren.pdf"; + + if (file_exists($kbisLocalPDF) + && date('Ymd', filemtime($kbisLocalPDF))==date('Ymd') + && filesize($kbisLocalPDF)>0 ) { + $size = filesize($kbisLocalPDF); + $erreur = false; + $tabNom = array(); + $ficDist = ''; + $cache = 1; + } else { + exec("php ".APPLICATION_PATH."/../batch/getPieces.php $siren $piece > /dev/null &"); + $ficDist=''; + $size=$cache=0; + } + // On supprimer l'ancien kbis si trop vieux ou vide + if (date('Ymd', filemtime($kbisLocalPDF))<>date('Ymd') + || filesize($kbisLocalPDF)==0) { + unlink($kbisLocalPDF); + } + $result = new PieceResult(); + $result->Siren = $siren; + //@todo : Envoyer vers controlleur + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result->Url = $hostname.'/data/kbis/'.$piece.'-'.$siren.'.pdf'; + + $result->Taille = $size; + $result->Cache = $cache; + $result->fichier = $ficDist; + $this->wsLog('kbis', $siren, "$cache/$visu/$courrier/$type/$ref"); + $output = new PieceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Enregistrement de document actes ou status d'association + * @param string $siren Numéro Siren + * @param string $waldec Numéro waldec + * @param string $type Type d'acte + * @param string $libelle Libellé de l'acte + * @param string $date Date des l'acte au format + * @param int $nbPages Nombre de pages dans le fichier + * return boolean + */ + public function setActeAsso( $siren, $waldec, $type, $libelle, $date, $nbPages ) + { + $this->authenticate(); + if (!$this->checkEdition()) { + $this->sendError('0902'); + } + ($type == 'ST') ? $type_acte = 'ST' : $type_acte = ''; + + $data = array( + 'siren' => $siren, + 'waldec' => waldec, + 'pdfLink' => '', + 'pdfSize' => '', + 'pdfVer' => '', + 'pdfPage' => '', + 'date_acte' => WDate::dateT('d/m/Y', 'Y-m-d', $date), + 'type_acte' => $type_acte, + 'type_acte_libelle' => $libelle, + 'nbpages_acte' => $nbPages, + ); + try { + $db = Zend_Db::factory($this->dbConfig->Webservice); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $doc = new Application_Model_AssoActes(); + $doc_id = $doc->insert($data); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id) + { + return true; + } + return false; + } + + /** + * Commande de statut association + * @param InfoCmdAsso $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdAssoReturn + */ + public function setCmdAsso( $infosCommande, $infosDemandeur ) + { + $this->authenticate(); + $this->permission('actes'); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB(); + + $siren = $infosCommande->siren; + $idEntreprise = intval($infosCommande->idEntreprise); + $assoNom = $infosCommande->raisonSociale; + debugLog('I',"commandeAsso pour $assoNom ($siren) début",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, 0, $idEntreprise); + $assoSigle = $tabIdentite['Sigle']; + $assoAdresse = $tabIdentite['Adresse'].EOL.$tabIdentite['Adresse2']; + $assoCP = $tabIdentite['CP']; + $assoVille = $tabIdentite['Ville']; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert=array( + 'idUser' => $this->User->id, + 'source' => 'asso', + 'login' => $this->User->login, + 'emailCommande' => $mail, + 'siren' => $siren, + 'refUtilisateur' => $infosDemandeur->reference, + 'refDocument' => serialize($infosDemandeur), + 'refCommande' => serialize($infosCommande), + 'dateCommande' => DATETIME, + ); + + $url='http://d2g.refasso.com/Dev2Go.web'; + $referer=''; // http://d2g.refasso.com/dev2go.web?anchor=dem_statuts_02 + $cookie=''; + $post = array( + 'mode'=>20, + 'lBlockID'=>445031, + 'sInputNames'=>'', + 'lFormSubAction'=>100, + 'sLinkTo'=>'dem_statuts_03', + 'iDune_DateDemande_input'=>str_replace('/', '%2F', date('d/m/Y')), + 'iDune_TitreAsso_input'=>urlencode($assoNom), + 'iDune_SigleAsso_input'=>urlencode($assoSigle), + 'iDune_AdresseAsso_input'=>urlencode($assoAdresse), + 'iDune_CpAsso_input'=>urlencode($assoCP), + 'iDune_VilleAsso_input'=>urlencode($assoVille), + 'iDune_TelAsso_input'=>'', + 'iDune_FaxAsso_input'=>'', + 'iDune_EmailAsso_input'=>'', + 'iDune_DateCreaAsso_input'=>'', + 'iDune_DateDerDeclaAsso_input'=>'', + 'iDune_NomDem_input'=>'SCORES+ET+DECISIONS', + 'iDune_PrenomDem_input'=>'Yoann+LE+NAOUR', + 'iDune_AdresseDem_input'=>'19+rue+de+Clairefontaine', + 'iDune_CpDem_input'=>78120, + 'iDune_VilleDem_input'=>'RAMBOUILLET', + 'iDune_TelDem_input'=>'0134573953', + 'iDune_EmailDem_input'=>'asso%40scores-decisions.com', + 'iDune_CGAccepte_input'=>'o', + 'iDune_Statut_input'=>'n', + 'iDune_Archive_input'=>'n', + 'x'=>48, + 'y'=>8, + ); + + $tdeb=microtime(true); + $page=getUrl($url, $cookie, $post, $referer, false, '', '', 7); + $tfin=microtime(true); + $duree=$tfin-$tdeb; + $body=$page['body']; + $fp=@fopen("/tmp/asso-$siren.html", "a"); + @fwrite($fp, $body); + @fclose($fp); + + if (preg_match('/Votre commande est enregistr/i',$body)) + { + sendMail('production@scores-decisions.com', 'asso@scores-decisions.com', + "Commande de statuts association pour $assoNom ($siren)", + "Association :".EOL.print_r($infosCommande, true).EOL.EOL. + "Demandeur:".EOL.print_r($infosDemandeur, true).EOL.EOL. + "Réponse RefAsso en $duree secondes :".EOL.print_r($page, true) + ); + $iDbCrm = new WDB('sdv1'); + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + + $result = new CmdAssoDetail(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + sendMail('production@scores-decisions.com', $mail, "Votre commande de statuts association sur $assoNom ($siren)", "Votre demande de statuts sur l'association $assoNom a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog('commandeAsso', $siren, 'i'.$ret.'-'.DATETIME); + debugLog('I',"commandeAsso pour $assoNom ($siren) fin",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } else { + sendMail('production@scores-decisions.com', 'asso@scores-decisions.com', + "ERREUR lors de lommande de statuts association pour $assoNom ($siren)", "Association :".EOL.print_r($infosCommande, true).EOL.EOL. + "Demandeur:".EOL.print_r($infosDemandeur, true).EOL.EOL. + "Réponse RefAsso en $duree secondes :".EOL.print_r($page, true)); + + $error->errmsg = 'ERREUR'; + $error->errnum = 1; + debugLog('E',"commandeAsso pour $assoNom ($siren) fin",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + $output = new CmdAssoReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Renvoi des informations sur une commande association + * @param string $reference + * @return CmdAssoReturn + */ + public function getCmdAsso( $reference ){} + + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param InfosCmdEnquete $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdEnqueteReturn + **/ + public function setCmdEnquete($infosCommande, $infosDemandeur) + { + $this->authenticate(); + $this->permission('enquetec'); + + //Initialisation + $error = new ErrorType(); + $siren = $infosCommande->siren; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source'=> 'intersud', // 'greffes', 'asso', 'graydon' + 'login'=> $this->User->login, + 'emailCommande'=> $mail, + 'siren'=> $siren, + 'refDocument'=> serialize($infosDemandeur), + 'refCommande'=> serialize($infosCommande), + 'dateCommande'=> DATETIME, + ); + debugLog('I',"Intersud, début sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo=print_r($infosCommande, 1).EOL.print_r($infosDemandeur,1).EOL; + + $idClient = $this->User->idClient; + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande ="NOM et Prénom du client demandeur : ".$infoDemandeur->nom.EOL; + $strInfoCommande.="Email du client demandeur : $mail".EOL; + $strInfoCommande.="Tel/Fax du demandeur : ".$infosDemandeur->tel.' / '.$infosDemandeur->fax.EOL; + $strInfoCommande.="Profil du demandeur : ".trim($infosDemandeur->service).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login = 'YLENA'; // Demandes en test + $pass = 'WYLFE'; + $nomClient = $strInfoCommande = ''; + $typeEnqLog = 'enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + $url='http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array('login' => $login, 'pwd' => $pass); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + // wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + //@todo + return array('error'=>array('errnum'=>4563456, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes'), 'results'=>$tabRet); + } + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + + /** Connexion à l'Extranet Intersud + **/ + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base + **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ". + DATETIME."\n". + "Date et heure de la commande : ".date('d/m/Y - H:i')."\n". + "Origine de la commande : $nomClient". + "$strInfoCommande"."\n\n". + + "CA : ".$infosCommande->PrecisionsMontantCA."\n". + "Motif de la demande : ".trim($infosCommande->PrecisionsMotif.' '.$infosCommande->PrecisionsAutre)."\n". + "Type de la demande : ".$infosCommande->PrecisionsType."\n". + "Anciennete de la relation : ".$infosCommande->Anciennete.' '.$infosCommande->AncienneteDuree."\n". + "Observations : ".$infosCommande->Observation.EOL; + + if ($infosCommande->ImpayeesChoix<>'non') + $comment.="Impayé(s) : ".$infosCommande->ImpayeesNombre." impayé(s) pour un montant de ".$infosCommande->ImpayeesMontant." en date du ".$infosCommande->ImpayeesDate.EOL; + + if ($infosCommande->RetardPaiementChoix<>'non') + $comment.="Retard(s) de paiement : ".$infosCommande->RetardPaiementNombre." retard(s) pour un montant de ".$infosCommande->RetardPaiementMontant." en date du ".$infosCommande->RetardPaiementDate.EOL; + + if ($infosCommande->LitigeChoix<>'non') + $comment.="Présence de litige(s) : ".$infosCommande->LitigePrecisions.EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infosCommande->Type)) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infosCommande->RIB))<>'') + $iDbCrm->insert('banques', array( + 'siren'=>$siren, + 'libBanqueGuichet'=>'', + 'precis'=>1, + 'codeBanque'=>$infosCommande->RIB->banque, + 'codeGuichet'=>$infosCommande->RIB->guichet, + 'numCompte'=>$infosCommande->RIB->compte.$infosCommande->RIB->cle, + 'dateSource'=>DATETIME, + ), true); + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc'=>$tabIdentite['Nom'], + 'cible_enk'=>9, // 9 + 'siret'=>$siren, + 'acti'=>'', + 'soc_exp'=>$tabInterSud['soc_exp'], + 'type_enk'=>$enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri'=>'', + 'adr'=>$tabIdentite['Adresse'], + 'ref_exp'=>$tabInterSud['ref_exp'], + 'autre_type_enk'=>'', // Texte libre + 'adr2'=>$tabIdentite['Adresse2'], + 'delai_enk'=>$enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville'=>$tabIdentite['Ville'], + 'cp'=>$tabIdentite['CP'], + 'pays'=>'', // International ? + 'nom_exp'=>$tabInterSud['nom_exp'], + 'tel'=>$tabIdentite['Tel'], + 'port'=>$infosCommande->AutreTel, + 'tel_exp'=>$tabInterSud['tel_exp'], + 'bank'=>trim(implode(' ', $infosCommande->RIB)), + 'int_enk'=>$tabInterSud['int_enk'], // International ? + 'encours'=>$infosCommande->Encours, + 'nb_ech'=>$infosCommande->NbEcheances, + 'delai2_enk'=>$tabInterSud['delai2_enk'], // International ? + 'email_exp'=>$tabInterSud['email_exp'], + 'cred'=>'', + 'comment'=>urlencode($comment), + 'val_ret'=>$tabInterSud['val_ret'], + ); + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + //@todo + return array('error'=>array('errnum'=>456345, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes 3'), 'results'=>$tabRet); + } + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + $referer=$url; + $body=$page['body']; + + $result = new CmdEnquete(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url='http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + $output = new CmdEnqueteReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupération d'un kbis + * @param string $siren + * @param int $visu + * @param int $courrier + * @param string $mail + * @param string $ref + * @return PieceReturn + */ + public function getKbis($siren, $visu=1, $courrier=0, $mail='', $ref='') + { + return $this->getPiece($siren, 'kbis', '', $visu, $courrier, $ref); + } + + /** + * getStatsUtilisateurs + * @param string $login + * @param string $mois + * @param string $type + * @param boolean $payants + * @return array + */ + public function getStatsUtilisateurs($login, $mois, $type='jour', $payants=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if ($payants) + { + $strPayant="AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis') AND params<>'' AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + } + else { + $strPayant=''; + } + $iDbCrm = new WDB('sdv1'); + if ($type=='jour') { + $rep = $iDbCrm->select('logs', + 'date(dateHeure) as jours, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY jours", + false, MYSQL_ASSOC); + } elseif ($type=='heure') { + $rep = $iDbCrm->select('logs', + 'HOUR(dateHeure) as heures, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY heures", + false, MYSQL_ASSOC); + } + $tabRet = $rep; + + + + return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabRet); + } + + /** + * getPortefeuilleCsv + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getPortefeuilleCsv($login='', $idClient=0) + { + return $this->getListeSurveillancesCsv('portefeuille', $login, $idClient); + } + + /** + * getPortefeuille + * @param PortefeuilleFiltre $filtre + * @param int $deb + * @param int $nbRet + * @return PortefeuilleReturn + */ + public function getPortefeuille($filtre, $deb=0, $nbRet=100) + { + $this->authenticate(); + + // Initialisation + $error = new ErrorType(); + if (empty($deb)) { $deb = 0; } + if (empty($nbRet)) { $nbRet = 100; } + + $tri = strtolower(trim($filtre->tri)); + switch ($tri) { + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + case 'indiScore': $orderBy='ORDER BY indiScore'; break; + case 'encours': $orderBy='ORDER BY encours'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + $iDb = new WDB(); + $login = $this->User->login; + + $strSelect = 's.email, s.siren, s.nic, s.ref, s.dateAjout, s.rs, s.cp, s.ville, s.dateDerEnvoi, s.encoursClient, c.actif, c.procol, c.indiScore, c.indiScore20, c.encours, c.indiScoreDate, c.dateBilan, c.indiScorePre, c.indiScore20Pre, c.encoursPre, c.indiScoreDatePre, c.sourceModif, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + + $strFiltre = ''; + if (intval($siren)>0) $strFiltre.= " AND s.siren=$siren "; + if (!empty($filtre->ref)) $strFiltre.= " AND s.ref LIKE '%$filtre->ref%'"; + if (!empty($filtre->rs)) $strFiltre.= " AND s.rs LIKE '%$filtre->rs%'"; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site s', 'count(*) as nb', "s.login='$login' AND s.source='score' AND s.dateSuppr=0 $strFiltre", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site s, scores_surveillance c', $strSelect, "s.login='$login' AND s.source='score' AND s.dateSuppr=0 AND s.siren=c.siren $strFiltre $orderBy LIMIT $deb,$nbRet", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv) { + if (trim($tabSurv['rs'])<>'') { + $rs=$tabSurv['rs']; + $cp=$tabSurv['cp']; + $ville=$tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs=$tabIdentite['Nom']; + $cp=$tabIdentite['CP']; + $ville=$tabIdentite['Ville']; + $iDb->update('surveillances_site',array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND source='score' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic'], + false + ); + } + + $portefeuille = new Portefeuille(); + $portefeuille->email = $tabSurv['email']; + $portefeuille->siren = $tabSurv['siren']; + $portefeuille->nic = $tabSurv['nic']; + $portefeuille->ref = $tabSurv['ref']; + $portefeuille->dateAjout = $tabSurv['dateAjout']; + $portefeuille->rs = $rs; + $portefeuille->cp = $cp; + $portefeuille->ville = $ville; + // Entreprise + $portefeuille->actif = $tabSurv['actif']; + $portefeuille->procol = $tabSurv['procol']; + $portefeuille->indiScore = $tabSurv['indiScore']; + $portefeuille->indiScore20 = $tabSurv['indiScore20']; + $portefeuille->indiScorePre = $tabSurv['indiScorePre']; + $portefeuille->indiScore20Pre = $tabSurv['indiScore20Pre']; + $portefeuille->encours = $tabSurv['encours']; + $portefeuille->encoursPre = $tabSurv['encoursPre']; + $portefeuille->indiScoreDate = $tabSurv['indiScoreDate']; + $portefeuille->indiScoreDatePre = $tabSurv['indiScoreDatePre']; + $portefeuille->encoursClient = $tabSurv['encoursClient']; + $portefeuille->dateBilan = $tabSurv['dateBilan']; + $portefeuille->sourceModif = $tabSurv['sourceModif']; + //, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + $portefeuille->dateDerEnvoi = $tabSurv['dateDerEnvoi']; + $tabRet[] = $portefeuille; + + } + + $output = new PortefeuilleReturn(); + $output->error = $error; + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + return $output; + } + + + /** + * rechercheHisto + * @param string $recherche + * @param string $annee + * @param string $typeBod + * @param int $deb + * @param int $nbRep + * @param int $maxRep + * @param bool $pertinence + * @return RechercheHistoReturn + */ + public function rechercheHisto($recherche, $annee='', $typeBod='', $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($annee)) $annee = ''; + if (empty($typeBod)) $typeBod = ''; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($annee)) $pertinence = false; + $liste = array(); + $index = 'histo'; + + debugLog('I',"rechercheHisto de $recherche ($annee) (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabFiltres = array(); + + if ($annee<>'' && $annee*1>=1953 && $annee*1<=date('Y')*1) + $tabFiltres = array('annee1'=>$annee); + + /* + require_once 'Metier/sphinx/recherche2.php'; + $ret=search2('histo', "$recherche", $tabFiltresAnnee, $deb, $nbRep, $maxRep, $pertinence); + */ + + if (SPHINX_HISTO_VERSION == 1){ + require_once 'Vendors/sphinxapi/sphinxapi-0.9.9.php'; + } elseif (SPHINX_HISTO_VERSION == 2){ + require_once 'Vendors/sphinxapi/sphinxapi-2.1.5.php'; + } + + $cl = new SphinxClient(); + $cl->SetServer (SPHINX_HISTO_HOST, SPHINX_HISTO_PORT); + $cl->SetConnectTimeout ( 1 ); + $cl->SetLimits ($deb, $nbRep, $maxRep); + $cl->SetMatchMode (SPH_MATCH_EXTENDED); + foreach ($tabFiltres as $nomFiltre => $valFiltre) + $cl->SetFilter($nomFiltre, array(0=>$valFiltre)); + $cl->SetRankingMode ( SPH_RANK_PROXIMITY_BM25 ); + $res = $cl->Query ( $recherche, $index ); + + if ($res===false) { + debugLog('I',"Search Sphinx : Pas de réponse pour $recherche avec ".implode(',',$tabFiltres).' ('.$cl->GetLastError() .')',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = 0; + $output->nbReponsesTotal = 0; + $output->duree = $res[time]; + $output->mots = array(); + $output->reponses = array(); + return $output; + + } + // Le moteur est opérationel + if ( $cl->GetLastWarning() ) { + debugLog('I',"Search Sphinx : Warning pour $recherche - ".$cl->GetLastWarning(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //print "WARNING: " . $cl->GetLastWarning() . "\n\n"; + } + + debugLog('I',"'Search Sphinx dans $index de $recherche (Filtre=".implode(',',$tabFiltres)."), Deb=$deb, nbRep=$nbRep, max=$max, any=$any",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet=array(); + if ( is_array($res['matches'])) { + $iDb = new WDB(); + foreach ( $res['matches'] as $doc => $docinfo ) + { + $listeEtab=$iDb->select('histobodacc.bodacc_ocr', + "'Histo' as Loc, id, nomFichier, annee1, bod, texte", + "id=$doc"); + $etab = $listeEtab[0]; + $tabRet[]=array( + 'Localisation' => $etab['Loc'], + 'id' => $doc, + 'Pertinence' => $docinfo['weight'], + 'Fichier' => $etab['nomFichier'], + 'Annee' => $etab['annee1'], + 'Code' => $etab['bod'], + 'Texte' => $etab['texte'], + ); + } + } + debugLog('I','Search Sphinx : Retourne '. $res[total].'/'. $res[total_found] .' en '.$res[time] .'secondes',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = $tabRet; + $nbTot = $res[total_found]; + $duree = $res[time]; + $tabMots = $res['words']; + + $tabRet = array(); + $k=0; + if(count($liste)>0) { + foreach ($liste as $n=>$etab) { + $texte = Scores_Locale_String::cleanutf8($etab['Texte']); + $pattern = '/[^a-zA-Z0-9\/]+/ '; + $texte = preg_replace($pattern, ' ', $texte); + $posMin=100000; + $hitMin=1000000; + foreach ($tabMots as $mot=>$tabMot) { + if ($tabMot['hits']<$hitMin) { + $hitMin=$tabMot['hits']; + $motSignificatif=$mot; + } + } + $posMin = stripos($texte, ''.$motSignificatif); + if ($posMin<150) $posMin=150; + $texte2 = substr($texte, $posMin-150, 250); + $reponse = new RechercheHistoReponses(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + + //@todo : gestion du lien pour le téléchargement des fichiers bodacc + $file = strtr($etab['Fichier'], array( + '.txt'=>'.pdf', + '/mnt/bodacc/' => '')); + $vieuxWS = false; + if ($vieuxWS) { + $reponse->Fichier = 'http://tville.scores-decisions.com/bodacc/'.$file; + } else { + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $url = '/fichier/bodacc/q/'.base64_encode($file); + $reponse->Fichier = $hostname.$url; + } + $reponse->Annee = $etab['Annee']; + $reponse->Code = $etab['Code']; + $reponse->Texte = $texte2; + $tabRet[] = $reponse; + $k++; + } + } + + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbTot; + $output->duree = $duree; + $output->mots = array_keys($tabMots); + $output->reponses = $tabRet; + return $output; + } + + /** + * getListeSurveillanceCsv + * @param string $source + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getListeSurveillancesCsv($source='', $login='', $idClient=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($source)) $source = ''; + if (empty($idClient)) $idClient = 0; + + + debugLog('I',"getListeSurveillancesCsv Début $source $login $idClient",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $iDb = new WDB(); + $strClient = $strLogin = ''; + $exportPtf = false; + switch ($source) + { + case 'insee': + case 'annonces': + case 'bilans': + case 'score': + case 'actes': + case 'privileges': + case 'dirigeants': + break; + case 'portefeuille': + $source='score'; + $exportPtf=true; + break; + default: + $source=''; + break; + } + + if ($source<>'') $strSource = "AND source='$source' "; + else $strSource = ''; + + // Control idClient + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = "AND u.idClient=$idClient "; + + if ($this->User->profil=='SuperAdministrateur' || $this->User->profil=='Administrateur') { + // Surveillances de tous les utilisateurs du client + if (empty($login)) { + $login = ''; + //Surveillances de l'utilisateur + } else { + $strLogin = "AND s.login='$login' "; + } + } else { + //Par défaut préselection de l'utilisateur + $login = $this->User->login; + $strLogin = "AND s.login='$login' "; + } + + $fichierCsv = DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.csv"; + + if (file_exists($fichierCsv) && + date('Ymd', filemtime($fichierCsv))==date('Ymd') && + filesize($fichierCsv)>60 ) { + $size = filesize($fichierCsv); + $erreur = false; + $tabNom = array(); + $cache = 1; + } else { + unlink($fichierCsv); + if ($source=='score'){ + if ($this->User->typeScore==20) { + $strScore='v.indiScore20 AS indiScore20'; + $strScorePre='v.indiScore20Pre AS indiScore20Pre'; + } else { + $strScore='v.indiScore AS indiScore100'; + $strScorePre='v.indiScorePre AS indiScore100Pre'; + } + /*v.scoreZ, v.scoreZPre, v.scoreCH, v.scoreCHPre, + v.scoreAfdcc2, v.scoreAfdcc2Pre, v.situFi, v.situFiPre, v.infoNote, v.infoNotePre, + v.noteStruct, v.noteStructPre, v.noteFin, v.noteFinPre, v.tendance, v.tendancePre, */ + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi, + s.encoursClient, v.actif, v.procol, $strScore, v.encours, v.indiScoreDate, v.dateBilan, + $strScorePre, v.encoursPre, v.indiScoreDatePre, v.sourceModif, v.scoreSolv, v.scoreSolvPre, v.scoreDir, + v.scoreDirPre, v.scoreConf, v.scoreConfPre, + e.cj, e.capital, e.capitalDev, e.ape_entrep, e.tca, e.teff_entrep, + v.dateUpdate + FROM surveillances_site s, sdv1.utilisateurs u, sdv1.clients c, scores_surveillance v, etablissements e + WHERE s.source='score' $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id AND s.siren=v.siren AND s.siren=e.siren + GROUP BY loginUti, s.siren, s.nic, s.source, s.ref + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeSurveillancesCsv($source, $login, $idClient)", $sql); + } else { + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi + FROM surveillances_site s, sdv1.utilisateurs u, sdv1.clients c + WHERE 1 $strSource $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + } + debugLog('I',"getListeSurveillancesCsv SQL $sql",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $fp = fopen(DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.sql", 'w'); + fwrite($fp, $sql.EOL); + fclose($fp); + exec("php ".APPLICATION_PATH."/../batch/sql2csv.php jo ".DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.sql $fichierCsv > /dev/null &"); + $size=$cache=0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new ListeSurveillancesCsv(); + $result->Url = $hostname.DOC_WEB_URL."csv/listesurv-$source-$login-$idClient.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + debugLog('I','getListeSurveillancesCsv Url='.$hostname.DOC_WEB_URL."csv/listesurv-$source-$login-$idClient.csv, Taille=$size, Cache=$cache",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $output = new ListeSurveillancesCsvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getListeJalCollecte + * @return ListeJalCollecteReturn + */ + public function getListeJalCollecte() + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + + $iBodacc = new MBodacc(); + $tabJal = $iBodacc->getListeJalCollecte(); + foreach ($tabJal as $i=>$jal) + { + $jalCollecte = new JalCollecte(); + $jalCollecte->id = $i; + $jalCollecte->nom = $jal; + $tabRet[] = $jalCollecte; + } + $output = new ListeJalCollecteReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getListeFichierSurv + * @param string $login + * @param string $ref + * @param string $nomFic + * @return ListeFichierSurvReturn + */ + public function getListeFichierSurv($login, $ref='*', $nomFic='') + { + $this->authenticate(); + if (empty($ref)) $ref = '*'; + if (empty($nomFic)) $nomFic = ''; + $error = new ErrorType(); + //debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabFichier=$tabDates=array(); + $numAbo=substr($ref, 0,5); + if (strtolower($login)=='vwbank') { + $repClient='volkswagen bank'; + $ficClient='surveillanceBodacc_SURBODPRDCFTVWBANK'; + $numAbo=$ref='19300'; + } elseif (substr($login,0,6)=='apicil') { + $repClient='apicil'; + $ficClient='surveillanceBodacc_SURBODPRDCFTAPICIL'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='omni04') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodacca3m') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSMEDERIC'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodaccomni') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodacccrr') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSCRR'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='cpcambr13' || strtolower($login)=='cpcambr14') { + $repClient='cpcam des bouches du rhône'; + $ficClient='diffusionBodacc_DIFBODPRDMAICPCAM13'; + $numAbo=$ref=''; + } else { + $repClient='cnasea'; + $ficClient='surveillanceBodacc_SURBODTSTFTSCNASEA'; + } + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + if (!$dh) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Impossible d'ouvrir le dossier '/home/data/clients/$repClient/'"); + $error->errnum = 1; + $error->errmsg = "Impossible d'ouvrir le dossier client"; + } else { + while (false !== ($filename = readdir($dh))) { + if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,42)==$ficClient.$numAbo) { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($ref=='*' && $filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)<>'_') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)=='_' && $repClient=='apicil') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,38,8); + $tabClients[]=substr($filename,0,37); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,38)==$ficClient && substr($filename,38,1)=='_' && $repClient=='aggm mederic ') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,39,8); + $tabClients[]=substr($filename,0,38); + } + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic : fichier lu '$filename'", "Fichier lu '$filename'"); + } + /** Tableau des noms de fichier **/ + sort($tabFichier); + /** Tableau des dates de livraisons **/ + $tabDates=array_unique($tabDates); + sort($tabDates); + /** Tableau des Clients **/ + $tabClients=array_unique($tabClients); + sort($tabClients); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabDates); + + /*@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", + "Fichiers :".EOL. + print_r($tabFichier, true). + "Dates:".EOL. + print_r($tabDates, true). + "Clients :".EOL. + print_r($tabClients, true) + );*/ + + if ($ref=='*') { + $tabFichier = array(); + // Boucle sur les dates de livraison + foreach ($tabDates as $dateFic) { + if (strlen($dateFic)<>8) continue; + if (!file_exists(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv") || + filesize(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv")==0) { + + $fpW=fopen(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv",'w'); + $entete=true; + // Boucle afin de vérifier si on est sur le bon client + foreach ($tabClients as $nomClient) { + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + while (false !== ($filename = readdir($dh))) { + if (substr($filename,0,51)==$nomClient.'_'.$dateFic && substr($filename,-4)=='.csv') { + $fichier=$filename; + //break; + } + } + $fpR=fopen(DOC_WEB_LOCAL."clients/$repClient/$fichier",'r'); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>array(($fichier)));//die; + if ($fpR) { + while (!feof($fpR)) { + $ligne=trim(fgets($fpR)); + if (substr($ligne,0,5)=='Siren' && $entete==true) { + fwrite($fpW, 'SITE;'.$ligne.EOL); + $entete=false; + } + elseif (substr($ligne,0,5)<>'Siren' && trim($ligne)<>'') { + fwrite($fpW, strtr($nomClient, array('surveillanceBodacc_SURBODTSTFTS'=>'', + 'surveillanceBodacc_SURBODPRDCFT'=>'')).';'.$ligne.EOL); + } + } + fclose($fpR); + } + } + fclose($fpW); + } + if (strlen($dateFic)==8) + $tabFichier[]=$ficClient.'_'.$dateFic.'.csv'; + } + } + rsort($tabFichier); + + if ($nomFic<>'') { + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Avant BZ2'); + if (!file_exists(DOC_WEB_LOCAL."/csv/$nomFic.bz2") || + filesize(DOC_WEB_LOCAL."/csv/$nomFic.bz2")<=14) { + $string=file_get_contents("/home/data/clients/$repClient/$nomFic"); + if ($string===false) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Ouverture impossible du fichier '/home/data/clients/$repClient/$nomFic'"); + } + $bz = bzopen(DOC_WEB_LOCAL."/csv/$nomFic.bz2",'w'); + if ($bz) { + bzwrite($bz, $string, strlen($string)); + bzclose($bz); + } + } /*else + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Sans BZ2'); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Après BZ2'); + */ + } + debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic : nb fichiers=".count($tabFichier),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = array(); + foreach($tabFichier as $fichier){ + $retFichier = new ListeFichierSurv(); + $retFichier->UrlFichier = $hostname.'/data/csv/'.$fichier; + $result[] = $retFichier; + } + } + $output = new ListeFichierSurvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Geocodage d'une adresse + * @param string $adresse + * @param string $cp + * @param string $ville + * @param string $pays + * @return GeoCodeReturn + */ + public function geoCode($adresse, $cp, $ville, $pays='France') + { + $this->authenticate(); + + $ligne = date('YmdHis').";$siren;MMap AVANT"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $mMap = new MMap($adresse, $cp, $ville, $pays); + + $ligne=date('YmdHis').";$siren;MMap APRES"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $geocode = new GeoCode(); + $geocode->latitude = $mMap->latitudeDec; + $geocode->longitude = $mMap->longitudeDec; + $geocode->precis = $mMap->precision; + $geocode->adresseValidee = $mMap->adresseValidee; + $geocode->latitudeDeg = $mMap->latitudeDeg; + $geocode->longitudeDeg = $mMap->longitudeDeg; + + $output = new GeoCodeReturn(); + $output->error = $error; + $output->result = $geocode; + } + + /** + * Recherche d'entreprise par leur actionnaire + * @param string $nom Raison sociale / Nom de l'actionnaire (obligatoire) + * @param string $cpVille CP, Ville + * @param string $siren Siren de l'actionnaire + * @param string $pays Pays de l'actionnaire + * @param string $pctMin Niveau de détention Minimam de l'actionnaire + * @param string $pctMax Niveau de détention Maximum de l'actionnaire + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur les noms et prénoms (si true) + * @return SearchActReturn + */ + public function searchAct($nom, $cpVille='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + debugLog('I',"Recherche Actionnaire de $nom, $cpVille (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!empty($pays)){ + $wdb = new WDB('jo'); + $result = $wdb->select('tabPays', 'codPays3', "libPays LIKE '".$pays); + if (count($result>0)){ + $pays = $result[0]['codPays3']; + } else { + $pays = ''; + } + } + + if (empty($cpVille)) $cpVille = ''; + if (empty($siren)) $siren = ''; + if (empty($pctMin)) $pctMin = 0; + if (empty($pctMax)) $pctMax = 100; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + + $mLiens = new MLiens(''); + // rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence) + $etabs = $mLiens->rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence); + + $iInsee = new MInsee(); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $act = new EntrepriseActItem(); + $act->id = $etab['id']; + $act->Pertinence = $etab['Pertinence']; + $act->Siret = $etab['Siret']; + $act->Siege = $etab['Siege']; + $act->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $act->Nom2 = prepareString($etab['Nom2']); + $act->Sigle = prepareString($etab['Sigle']); + $act->Enseigne = prepareString($etab['Enseigne']); + $act->Adresse = prepareString($etab['Adresse']); + $act->Adresse2 = prepareString($etab['Adresse2']); + $act->CP = $etab['CP']; + $act->Ville = prepareString($etab['Ville']); + $act->Tel = $etab['Tel']; + $act->Fax = $etab['Fax']; + $act->FJ = $etab['FJ']; + $act->FJLib = prepareString($iInsee->getLibelleFJ($etab['FJ'])); + $act->Siren = $etab['Siren']; + $act->Nic = $etab['Nic']; + $act->Actif = $etab['Actif']; + $act->NafEtab = $etab['NafEtab']; // Etablissement + $act->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $act->NafEnt = $etab['NafEnt']; // Entreprise + $act->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + $act->ActNomRs = $etab['ActNomRs']; + $act->ActPays = $etab['ActPays']; + $act->ActDateLien = $etab['ActDateLien']; + $act->ActActif = $etab['ActActif']; + $act->ActPmin = $etab['ActPmin']; + $tabRet[] = $act; + } + + $output = new SearchActReturn(); + $output->nbReponses = $etabs['nbReponses']; + $output->nbReponsesTotal = $etabs['nbReponsesTotal']; + $output->result = $tabRet; + + if ($tabRet['nbReponses']==0) { + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + return $output; + } + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param string $siren + * @param string $infoEnq Informations pour la demande d'enquête
+ * InfoEnq[Entrep][Tel]
+ * InfoEnq[Entrep][Fax]
+ * InfoEnq[Entrep][AutreTel]
+ * InfoEnq[Entrep][Mail]
+ * InfoEnq[Entrep][AutreMail]
+ * InfoEnq[Entrep][Web]
+ * InfoEnq[Entrep][Rib][Banque]
+ * InfoEnq[Entrep][Rib][Guichet]
+ * InfoEnq[Entrep][Rib][Compte]
+ * InfoEnq[Entrep][Rib][Cle]
+ * InfoEnq[Encours]
+ * InfoEnq[NbEcheances]
+ * InfoEnq[AvisAssureur]
+ * InfoEnq[Type]
+ * InfoEnq[Delai]
+ * InfoEnq[PrecisionsChoix]
+ * InfoEnq[Precisions][MontantCA]
+ * InfoEnq[Precisions][Motif]
+ * InfoEnq[Precisions][Autre]
+ * InfoEnq[Anciennete]
+ * InfoEnq[AncienneteDuree]
+ * InfoEnq[ImpayeesChoix]
+ * InfoEnq[Impayees][Montant]
+ * InfoEnq[Impayees][Nombre]
+ * InfoEnq[Impayees][Date]
+ * InfoEnq[RetardPaiementChoix]
+ * InfoEnq[RetardPaiement][Montant]
+ * InfoEnq[RetardPaiement][Nombre]
+ * InfoEnq[RetardPaiement][Date]
+ * InfoEnq[LitigeChoix]
+ * InfoEnq[Litige][Precisions]
+ * InfoEnq[Observation]
+ * @param string $infoDemande Informations sur l'utilisateur
+ * InfoUser[Profil]
+ * InfoUser[ProfilAutre]
+ * InfoUser[Identite]
+ * InfoUser[Tel]
+ * InfoUser[Fax]
+ * InfoUser[Email]
+ * InfoUser[Ref]
+ * @return CommandeEnqueteReturn + */ + public function commandeEnquete($siren, $infoEnq, $infoDemande) + { + $this->authenticate(); + //Initialisation + $infoEnq = json_decode($infoEnq); + $infoDemande = json_decode($infoDemande); + + $mail = trim($infoDemande['Email']); + if ($mail=='') { + $mail=$this->User->email; + } + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source' => 'intersud', // 'greffes', 'asso', 'graydon' + 'login' => $tabInfoUser['login'], + 'emailCommande' => $mail, + 'siren' => $siren, + 'refDocument' => serialize($infoDemande), + 'refCommande' => serialize($infoEnq), + 'dateCommande' => DATETIME, + // 'idClient'=> $tabInfoUser['idClient'], + ); + debugLog('I',"Intersud, début commande sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo = print_r($infoEnq, 1).EOL.print_r($infoDemande,1).EOL; + + $idClient = $this->User->idClient; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande = "NOM et Prénom du client demandeur : ".$infoDemande['Identite'].EOL; + $strInfoCommande.= "Email du client demandeur : $mail".EOL; + $strInfoCommande.= "Tel/Fax du demandeur : ".$infoDemande['Tel'].' / '.$infoDemande['Fax'].EOL; + $strInfoCommande.= "Profil du demandeur : ".trim($infoDemande['Profil'].' '.$infoDemande['ProfilAutre']).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login='YLENA'; // Demandes en test + $pass='WYLFE'; + $nomClient=$strInfoCommande=''; + $typeEnqLog='enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + /** Connexion à l'Extranet Intersud **/ + $url = 'http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array( + 'login' => $login, + 'pwd' => $pass, + ); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + //wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + throw new SoapFault('1',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + $intersudNomPrenom=$intersudRaisonSociale=''; + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudNomPrenom=trim($matches[1]); + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudRaisonSociale=trim($matches[1]); + debugLog('I',"Intersud, connexion via $login pour $intersudRaisonSociale ($intersudNomPrenom, cookie=$cookie)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /* + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, EOL.DATETIME.EOL.print_r($page,true).'========================================================================================================='.EOL.EOL); + @fclose($fp); + die(); + */ + /** Page formulaire de demande d'enquête **/ + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible au formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('2',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ".DATETIME." + Date et heure de la commande : ".date('d/m/Y - H:i')." + Origine de la commande : $nomClient + $strInfoCommande + + CA : ".$infoEnq['Precisions']['MontantCA']." + Motif de la demande : ".trim($infoEnq['Precisions']['Motif'].' '.$infoEnq['Precisions']['Autre'])." + Type de la demande : ".$infoEnq['Precisions']['Type']." + Anciennete de la relation : ".$infoEnq['Anciennete'].' '.$infoEnq['AncienneteDuree']." + Observations : ".$infoEnq['Observation'].EOL; + + if ($infoEnq['ImpayeesChoix']<>'non') + $comment.="Impayé(s) : ".$infoEnq['Impayees']['Nombre']." impayé(s) pour un montant de ".$infoEnq['Impayees']['Montant']." en date du ".$infoEnq['Impayees']['Date'].EOL; + + if ($infoEnq['RetardPaiementChoix']<>'non') + $comment.="Retard(s) de paiement : ".$infoEnq['RetardPaiement']['Nombre']." retard(s) pour un montant de ".$infoEnq['RetardPaiement']['Montant']." en date du ".$infoEnq['RetardPaiement']['Date'].EOL; + + if ($infoEnq['LitigeChoix']<>'non') + $comment.="Présence de litige(s) : ".$infoEnq['Litige']['Precisions'].EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infoEnq['Type'])) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infoEnq['Entrep']['Rib']))<>''){ + $iDbCrm->insert('banques', array( + 'siren' => $siren, + 'libBanqueGuichet' => '', + 'precis' => 1, + 'codeBanque' => $infoEnq['Entrep']['Rib']['Banque'], + 'codeGuichet' => $infoEnq['Entrep']['Rib']['Guichet'], + 'numCompte' => $infoEnq['Entrep']['Rib']['Compte'].$infoEnq['Entrep']['Rib']['Cle'], + 'dateSource' => DATETIME, + ), true); + } + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc' => $tabIdentite['Nom'], + 'cible_enk' => 9, // 9 + 'siret' => $siren, + 'acti' => '', + 'soc_exp' => $tabInterSud['soc_exp'], + 'type_enk' => $enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri' => '', + 'adr' => $tabIdentite['Adresse'], + 'ref_exp' => $tabInterSud['ref_exp'], + 'autre_type_enk' => '', // Texte libre + 'adr2' => $tabIdentite['Adresse2'], + 'delai_enk' => $enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville' => $tabIdentite['Ville'], + 'cp' => $tabIdentite['CP'], + 'pays' => '', // International ? + 'nom_exp' => $tabInterSud['nom_exp'], + 'tel' => $tabIdentite['Tel'], + 'port' => $infoEnq['Entrep']['AutreTel'], + 'tel_exp' => $tabInterSud['tel_exp'], + 'bank' => trim(implode(' ', $infoEnq['Entrep']['Rib'])), + 'int_enk' => $tabInterSud['int_enk'], // International ? + 'encours' => $infoEnq['Encours'], + 'nb_ech' => $infoEnq['NbEcheances'], + 'delai2_enk' => $tabInterSud['delai2_enk'], // International ? + 'email_exp' => $tabInterSud['email_exp'], + 'cred' => '', + 'comment' => urlencode($comment), + 'val_ret' => $tabInterSud['val_ret'], + ); + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('3',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $output = new CommandeEnqueteReturn(); + $output->siren = $siren; + $output->emailCommande = $mail; + $output->dateCommande = DATETIME; + $output->refCmde = 'i'.$ret; + + //$strInfoCommande $mail + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url = 'http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + return $output; + } + + /** + * Retourne l'ensemble des informations des dirigeants opérationnels (non statutaires) de l'entreprise + * @param string $siren Siren de l'entreprise + * @return DirigeantOp[] + */ + public function getDirigeantsOp($siren) + { + $this->authenticate(); + + debugLog('I',"Dirigeants opérationnels demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeantsOp($siren); + $tabRet = array(); + if (count($dirs)>0){ + foreach ($dirs as $nb => $dir) { + $objet = new DirigeantOp(); + $objet->Code = $dir['Fonction']; + $objet->Titre = prepareString($dir['Titre']); + $objet->Societe = prepareString($dir['Societe']); + $objet->Civilite = prepareString($dir['Civilite']); + $objet->Nom = prepareString($dir['Nom']); + $objet->Prenom = prepareString($dir['Prenom']); + $objet->NomUsage = prepareString($dir['NomUsage']); + $objet->NaissDate = $dir['NaissDate'];// 07/09/1961 + $objet->NaissVille = prepareString($dir['NaissVille']); // LE RUSSEY + $objet->NaissDepPays = prepareString($dir['NaissDepPays']); // LE RUSSEY + $objet->Ancien = $dir['Ancien']; + $objet->DateFct = $dir['DateFct']; + + $tabRet[] = $objet; + } + } + $this->wsLog('dirigeantsOp', $siren); + debugLog('I', 'Nb Dirigeants Op retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return $tabRet; + } + + /** + * Liste de tous les dépôts enregistrés à l'INPI pour une entreprise + * @param string $siren Siren de l'entreprise + * @return Depot[] + */ + public function getListeDepots($siren) + { + $this->authenticate(); + + debugLog('I',"Liste des dépots INPI pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iRncs=new MRncs(); + $evens=$iRncs->getListeDepots($siren); + $tabRet = array(); + if (count($evens)>0){ + foreach ($evens as $nb=>$even){ + $objet = new Depot(); + $objet->CodeDepot = $even['codDepot']; + $objet->LibDepot = prepareString($even['libDepot']); + $objet->DateDepot = $even['datDepot']; + $objet->RefDepot = $even['refDepot']; + $objet->DateRncs = $even['datRncs']; + $objet->DateMAJ = $even['datSed']; + + $tabRet[] = $objet; + } + } + debugLog('I', 'Nb dépôts retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return $tabRet; + } + + + /** + * Enter description here ... + * @param string $siret + * @param integer $id + * @return IdentiteLight + */ + public function getIdentiteLight($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) { + $id = 0; + } + + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } + if ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic, $id); + + $output = new IdentiteLight(); + $output->id = $tabIdentite['id']; + $output->Siret = $tabIdentite['Siret']; + $output->Siege = $tabIdentite['Siege']; + $output->Nom = $tabIdentite['Nom']; + $output->Tribunal = $tabIdentite['Tribunal']; + $output->Sigle = $tabIdentite['Sigle']; + $output->Enseigne = $tabIdentite['Enseigne']; + $output->Adresse = $tabIdentite['Adresse']; + $output->Adresse2 = $tabIdentite['Adresse2']; + $output->AdresseNum = $tabIdentite['AdresseNum']; + $output->AdresseBtq = $tabIdentite['AdresseBtq']; + $output->AdresseVoie = $tabIdentite['AdresseVoie']; + $output->AdresseRue = $tabIdentite['AdresseRue']; + $output->CP = $tabIdentite['CP']; + $output->Ville = $tabIdentite['Ville']; + $output->Tel = $tabIdentite['Tel']; + $output->Fax = $tabIdentite['Fax']; + $output->FJ = $tabIdentite['FJ']; + $output->FJ_Lib = $tabIdentite['FJ_lib']; + $output->Siren = $tabIdentite['Siren']; + $output->Nic = $tabIdentite['Nic']; + $output->Actif = $tabIdentite['Actif']; + $output->NafEtab = $tabIdentite['NafEtab']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->NafEtabLib = $tabIdentite['NafEtabLib']; + $output->AutreId = $tabIdentite['AutreId']; + $output->Source = $tabIdentite['Source']; + $output->SourceId = $tabIdentite['SourceId']; + $output->Dept = $tabIdentite['Dept']; + $output->codeCommune = $tabIdentite['codeCommune']; + $output->Capital = $tabIdentite['Capital']; + $output->CapitalDev = $tabIdentite['CapitalDev']; + $output->TrancheCA = $tabIdentite['TrancheCA']; + $output->TrancheCALib = $tabIdentite['TrancheCALib']; + $output->EffEnTr = $tabIdentite['EffEnTr']; + $output->EffEnTrLib = $tabIdentite['EffEnTrLib']; + $output->EffEtTr = $tabIdentite['EffEtTr']; + $output->EffEtTrLib = $tabIdentite['EffEtTrLib']; + return $output; + } + + +} \ No newline at end of file diff --git a/library/WsScore/Interne/v0.4/Service.php b/library/WsScore/Interne/v0.4/Service.php new file mode 100644 index 00000000..bef2b5f9 --- /dev/null +++ b/library/WsScore/Interne/v0.4/Service.php @@ -0,0 +1,3548 @@ +authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges detail sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesDetail($siren, $tabTypes); //@todo : date + + $tabRet = array(); + if (count($ret)>0) { + foreach ($ret as $item ) { + $privileges = new PrivilegesDetail(); + $privileges->numDebiteur = $item['numDebiteur']; + $privileges->greffe = $item['greffe']; + $privileges->greffeLib = $item['greffeLib']; + $privileges->dateEven = $item['dateEven']; + $privileges->dateFraiche = $item['dateFraiche']; + $privileges->dateSD = $item['dateSD']; + $privileges->insType = $item['insType']; + $privileges->insTypeLib = $item['insTypeLib']; + $privileges->insNum = $item['insNum']; + $privileges->insDate = $item['insDate']; + $privileges->insDateEch = $item['insDateEch']; + $privileges->insObjet = $item['insObjet']; + $privileges->insMontant = $item['insMontant']; + $privileges->insDev = $item['insDev']; + $privileges->insDateFin = $item['insDateFin']; + $privileges->radDate = $item['radDate']; + $privileges->radMention = $item['radMention']; + $privileges->radPartiel = $item['radPartiel']; + $privileges->radPartMt = $item['radPartMt']; + $privileges->radDev = $item['radDev']; + $privileges->creNom = $item['creNom']; + $privileges->creAdresse1 = $item['creAdresse1']; + $privileges->creAdresse2 = $item['creAdresse2']; + $privileges->creAdresse3 = $item['creAdresse3']; + $privileges->creCP = $item['creCP']; + $privileges->creVille = $item['creVille']; + $privileges->crePays = $item['crePays']; + $privileges->creAutres = $item['creAutres']; + $tabRet[] = $privileges; + } + } + $this->wsLog('privdetail', $siren, join(',',$tabTypes)); + $output = new PrivilegesDetailReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les privilèges cumulés + * @param string $siren + * @param array $tabTypes + * @return PrivilegesCumulReturn + */ + public function getPrivilegesCumul($siren, $tabTypes=array('03','04')) + { + $this->authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges cumul sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesCumul($siren, $tabTypes); + $tabRet = array(); + + if (isset($ret['03']) && count($ret['03']>0)){ + $value = $ret['03']; + $priv = new PrivilegesCumul(); + $priv->insType = '03'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + + if (isset($ret['04']) && count($ret['04']>0)){ + $value = $ret['04']; + $priv = new PrivilegesCumul(); + $priv->insType = '04'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + $this->wsLog('privcumul', $siren, print_r($tabTypes,1)); + $output = new PrivilegesCumulReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Liste les mandataires correspondant à un nom donné + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @param int $cpDep Code postal ou département du mandataire + * @return SearchMandatairesReturn + */ + public function searchMandataires($nom, $type=array('A','M'), $cpDep=0) + { + $this->authenticate(); + + //Initialisation + if (empty($type)) $type = array('A','M'); + if (empty($cpDep)) $cpDep = 0; + $tabRet = array(); + + debugLog('I',"Recherche de Mandataires '$nom' (Dep=$cpDep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabTmp = $iInsee->searchMandataires($nom, true, $type, $cpDep); + + foreach ($tabTmp as $i=>$mand) + { + $mandataire = new SearchMandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = utf8_encode($mand); + $tabRet[] = $mandataire; + + } + $output = new SearchMandatairesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des tribunaux ou Compétences demandées + * @param array|string $tabTypes Tableau des types de Compétences demandés 'C':Commerce, 'I':Instance, 'G':TGI, 'A':Préfectures, 'B':Sous-préf, 'D':Tribunal Administratif, 'H':Prud'hommes, 'L': Cour d'Appel, 'M': Tribunal Mixte, 'O':CCI, 'V': Cour Administrative d'Appel + * @return TribunauxReturn + **/ + public function getTribunaux($tabTypes) + { + $this->authenticate(); + + //Initialisation + if (empty($tabTypes)) $tabTypes = array(); + if (is_string($tabTypes)) $tabTypes = (array)$tabTypes; + + $iBodacc = new MBodacc(); + debugLog('I',"Liste des tribunaux demandées",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabTmp = $iBodacc->getListeTribunaux(); + //@todo : Retourner liste en ordre alphabétique + $tabRet = array(); + if (count($tabTypes)==0) { + foreach ($tabTmp as $i => $tribunal){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } else { + foreach ($tabTmp as $i=>$tribunal){ + $type = substr($i,-1); + if ( in_array($type, $tabTypes) ){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } + } + $this->wsLog('tribunaux', '', print_r($tabTypes,1)); + $output = new TribunauxReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Enregistrement des informations saisie manuellement + * @param string $siret + * @param int $idEntreprise + * @param SetInfosEntrepInfos $tabInfos + * @return SetInfosEntrepReturn + */ + public function setInfosEntrep( $siret, $idEntreprise, $tabInfos ) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $iBodacc = new MBodacc(); + $iInsee = new MInsee(); + $result = false; + + if (!$this->checkEdition()) { + + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + $iDb = new WDB(); + + $tabIdentite = $tabInfos->identite; + $tabJugement = $tabInfos->jugement; + $tabActio = $tabInfos->actionnaire; + $tabParti = $tabInfos->participation; + $tabScores = $tabInfos->score; + + // Mise à jour de l'identité + if (trim(strtolower($tabIdentite->web))=='http://'){ + $web = ''; + } else { + $web = trim($tabIdentite->web); + } + $tabUpdate = array( + 'isin' => trim($tabIdentite->isin), + 'tel' => trim($tabIdentite->tel), + 'fax' => trim($tabIdentite->fax), + 'web' => $web, + 'mail' => trim($tabIdentite->mail), + 'activite' => stripslashes(trim($tabIdentite->activite)), + 'sirenDoublon' => substr(str_replace(' ','',strtr($tabIdentite->sirenDoublon, '"\'./- ,\*#()',' ')),0,9), + 'waldec' => trim(str_replace(' ','',strtr($tabIdentite->waldec, '"\'./- ,\*#()',' '))), + ); + + /** @todo non traitées : [capital_mt] => 335400, [capital_dev] => EUR **/ + if ( !$iDb->update('infos_entrep', $tabUpdate, "siren='$siren'") ){ + if (!$iDb->insert('infos_entrep', array_merge(array('siren'=>$siren),$tabUpdate))){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + exit; + } + } + // Fin mise à jour identité + + // Opposition INSEE + if ( $tabIdentite->moisOppositionInsee>0 && + $tabIdentite->moisOppositionInsee<=(date('Ym')*1) ){ + + $iDb2 = new WDB('insee'); + if ( !$iDb2->insert('insee_nondiff', array('siren'=>$siren, 'insEVE'=>795, 'mois'=>$tabIdentite->moisOppositionInsee)) ){ + if ( $iDb2->getLastErrorNum()<>1062 ) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des oppositions de la sphère commerciale INSEE pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + } + + } + // Fin opposition INSEE + + // Refus d'inscription au RCS + if (isset($tabIdentite->moisRefusRCS) && $tabIdentite->moisRefusRCS>0 + && $tabIdentite->moisRefusRCS<=(date('Ym')*1)) { + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteLight($siren); + if ($nic<10) $nic=$entrep['Nic']; + $cj1=substr($entrep['FJ'],0,1); + $iDb2 = new WDB('insee'); + /** Insertion dans la tables des exclusions **/ + $tabInsert = array( + 'siren' => $siren, + 'nic' => $nic, + 'idSaisie' => $this->User->id, + 'cj1' => $cj1, + 'insEVE' => 'RCS', + 'mois' => $tabIdentite->moisRefusRCS, + ); + if (!$iDb2->insert('insee_nondiff', $tabInsert)) + if ($iDb2->getLastErrorNum()<>1062) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des refus d'enregistrement A au RCS pour $siren au mois de ".$tabIdentite->moisRefusRCS." : ".EOL.print_r($tabInsert, true).EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + + /** Insertion dans la tables des évènements **/ + $tabInsert = array( + 'insSIREN' => $siren, + 'siretValide' => $iInsee->valideSiren($siren,$nic), + 'insNIC' => $nic, + 'insEVE' => 'RCS', + 'insDATEVE' => $tabIdentite->moisRefusRCS.'28', + 'insDATEMAJ' => date('YmdHis'), + 'idFlux' => date('Ymd')); + if (!$iDb2->insert('insee_even', $tabInsert)) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des refus d'enregistrement B au RCS pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabInsert, true).EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + + } + // Fin refus d'inscription au RCS + + // Domiciliataire + if (!empty($tabIdentite->domiciliataire) && $siren>1000) { + if ($tabIdentite->domiciliataire=='oui' || $tabIdentite->domiciliataire=='non') { + // L'entreprise et ces établissements seront mis à jour automatiquement ce soir + $iDb->query("INSERT IGNORE INTO jo.tabAdrDom (siren,nic,siege, etActif, nom, sigle, enseigne, adrNum, adrBtq, adrTypVoie, adrLibVoie, ville, cp, depComEt, adrComp, cj, apen,apet, dateInsert) + SELECT siren, nic, siege, actif AS etActif, raisonSociale AS nom, sigle, enseigne, adr_num as adrNum, adr_btq AS adrBtq, adr_typeVoie AS adrTypVoie, adr_libVoie AS adrLibVoie, adr_ville AS ville, adr_cp AS cp, CONCAT(adr_dep,adr_com) AS depComEt, adr_comp AS adrComp, cj, ape_entrep AS apen, ape_etab AS apet, DATE(NOW()) as dateInsert + FROM jo.etablissements WHERE siren=$siren;", false); + } + // Si demande de suppression, on force l'indicateur "" + if ($tabIdentite->domiciliataire=='non') { + $tabUpdate=array('pasEntrepDom'=>1); + if (!$iDb->update('tabAdrDom', $tabUpdate, "siren=$siren")) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de la suppression du marqueur de domiciliation pour $siren :".EOL.print_r($tabUpdate, true).EOL.$iDb->getLastError()); + } + } + // Fin domiciliataire + + + // Insertion des scores + $tabUpdate = array(); + $setScore = false; + if ( $tabScores->encours!='' || $tabScores->encours!=null ){ + $tabUpdate['encours'] = $tabScores->encours; + $setScore = true; + } + if ( $tabScores->scoreSolv!='' ){ + $tabUpdate['scoreSolv'] = $tabScores->scoreSolv; + $setScore = true; + } + if ( $tabScores->scoreDir!='' ){ + $tabUpdate['scoreDir'] = $tabScores->scoreDir; + $setScore = true; + } + if ( $tabScores->scoreConf!='' ){ + $tabUpdate['scoreConf'] = $tabScores->scoreConf; + $setScore = true; + } + if ( $setScore ){ + // Mise à jour des Cute Offs + if ( !$iDb->update('scores_cutoff', $tabUpdate, "siren=$siren") ){ + if ( !$iDb->insert('scores_cutoff', array_merge(array( + 'siren' => $siren, + 'dateInsert' => date('Ymd') + ), $tabUpdate)) ){ + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", print_r($tabScores, true).EOL.$iDb->getLastError()); + } + } + } + // Fin insertion des scores + + // Insertion du jugement + $tabEven = array(); + if (is_array($tabJugement->even->item) && count($tabJugement->even->item)>0){ + foreach($tabJugement->even->item as $even){ + $tabEven[] = $even->code; + } + } elseif (!empty($tabJugement->even->item->code)) { + $tabEven[] = $tabJugement->even->item->code; + } + $nic = $tabJugement->nic*1; + $entrep = $iInsee->getIdentiteLight($siren, $nic); + if ( $nic>0 && $tabEven[0]->code==6700 && $entrep['Siege']==0 ){ + // Radiation d'un établissement + $tabEven[0]->code = 6600; + } + + if ( count($tabEven)>0 ) + { + $idAdmin = str_replace('m','',trim($tabJugement->admin)); + $idMand = str_replace('m','',trim($tabJugement->mand)); + $idOppo = str_replace('m','',trim($tabJugement->oppo)); + + /** Nom et Identifiant de l'opérateur de saisie **/ + $iDbCrm = new WDB('sdv1'); + $rep=$iDbCrm->select('utilisateurs', 'id', "login='".$this->User->login."'"); + $idUser=$rep[0][0]; + + $tabSource=explode('_',$tabJugement->source); + $source=@$tabSource[0]; + $numJal=@$tabSource[1]; + + $dateSource=WDate::dateT('d/m/Y', 'Ymd', trim($tabJugement->dateParution))*1; + if ($dateSource<20000101) + $dateSource=date('YmdHis'); + + $montant=trim(preg_replace('/[^0-9]/', '', $tabJugement->montant))*1; + $actionsMt=trim(preg_replace('/[^0-9]/', '', $tabJugement->actionsMt))*1; + $actionsNb=trim(preg_replace('/[^0-9]/', '', $tabJugement->actionsNb))*1; + if ($montant>0 && ($actionsNb>0 || $actionsMt>0)) { + if ($actionsNb>0) $actionsMt=$montant/$actionsNb; + elseif ($actionsMt>0) $actionsNb=$montant/$actionsMt; + } + + //@todo : ça ne va pas marcher ici + $strDir=''; + $tabNouvDir = array(); + if ( is_array($tabJugement->nouvDir->item) && count($tabJugement->nouvDir->item)>0 ){ + $tabNouvDir = $tabJugement->nouvDir->item; + } else { + $tabNouvDir[] = $tabJugement->nouvDir; + } + + if (count($tabNouvDir)>0) { + foreach( $tabNouvDir as $dir ){ + if ( intval($dir->Fonc)>0 ){ + $strDir.= $iBodacc->getFctDir($dir->Fonc).' : '. + $dir->Genre.' '. + ucwords(strtolower($dir->Pre)).' '. + strtoupper($dir->Nom); + if (!empty($dir->Dom)) { + $strDir.= ', domicilié à '.$dir->Dom.'. '; + } + } + } + } + + if ( trim($tabJugement->nouvAdrCp)<>'' ){ + $strAdr = stripslashes(trim($tabJugement->nouvAdr).', '. + trim($tabJugement->nouvAdrCp).' '. + trim($tabJugement->nouvAdrVille)); + } else { + $strAdr=''; + } + + if (count($tabEven)>1){ + $strEven = implode(';',array_slice($tabEven, 1)); + } else { + $strEven = ''; + } + + $tabUpdate = array( + 'strEven' => $strEven, + 'sirenValide' => $iInsee->valideSiren($siren), + 'dateCessationPaiement' => empty($tabJugement->datePaie) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement->datePaie)), + 'dateEffetFinP' => empty($tabJugement->dateFinPeriode) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement->dateFinPeriode)), + 'tribunal' => trim($tabJugement->tribunal), + 'montant' => $montant, + 'actionsNb' => $actionsNb, + 'inter1type' => 'A', + 'inter1id' => $idAdmin, + 'inter1nom' => $iInsee->getMandatairesParId($idAdmin), + 'inter2type' => 'M', + 'inter2id' => $idMand, + 'inter2nom' => $iInsee->getMandatairesParId($idMand), + 'inter3type' => 'O', + 'inter3id' => $idOppo, + 'inter3nom' => $iInsee->getMandatairesParId($idOppo), + 'complement' => stripslashes(trim($tabJugement->comp)), + 'nouvActivite' => stripslashes(trim($tabJugement->nouvActivite)), + 'nouvDir' => stripslashes(trim($strDir)), + 'nouvAdr' => $strAdr, + 'nouvFJ' => trim($tabJugement->nouvFJ), + 'raisonSociale' => $entrep['Nom'], + 'adresse' => $entrep['Adresse'], + 'codePostal' => $entrep['CP'], + 'ville' => $entrep['Ville'], + 'source' => $source, + 'idSaisie' => $idUser, + 'parutionIdJal' => $numJal, + 'parutionNum' => $tabJugement->numParution, + ); + $dateJuge = WDate::dateT('d/m/Y','Y-m-d',trim($tabJugement->dateJuge)); + $tabInsert = array_merge( $tabUpdate, array( + 'siren' => $siren, + 'dateJugement' => $dateJuge, + 'typeEven' => $tabEven[0], + 'dateSource' => $dateSource, + )); + if ( !$iDb->insert('annonces', array_merge($tabInsert,array('dateInsert'=>date('YmdHis'))), true) ){ + if ( !$iDb->update('annonces', $tabUpdate, "siren=$siren AND dateJugement='$dateJuge' AND typeEven=".$tabEven[0], true)){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + } + } + //Fin insertion jugement + + // Insertion actionnaire + if ( trim($tabActio->siren)!='' ) + { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabActio->pct))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabActio->siren); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ($pays=='') $pays='FRA'; + if (trim($tabActio->nom)!='') $nom = $tabActio->nom; + if ($tabActio->pays!='XXX') $pays = $tabActio->pays; + + if (trim($tabActio->dateMAJ)!='JJ/MM/AAAA' && trim($tabActio->dateMAJ)!=''){ + $dateMAJ = WDate::dateT('d/m/Y', 'Y-m-d', trim($tabActio->dateMAJ)); + } + + if ($tabActio->majMin=='maj') $majMin='+'; + elseif ($tabActio->majMin=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + //'Siren1'=> $siren, + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + //'Siren2'=> $siren2, + //'RaisonSociale'=> $nom, + //'Pays'=> $pays, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array('ActionPart' => 1), + array( + 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); Zend_Registry::get('WsLogger')->info('INSERTION ACTIONNAIRE : '.print_r($tabInsert1, 1)); + $res = $iDb->select('liens', 'count(*)', + "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge( + $tabUpdate, array('ActionPart'=>1)), + "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=1016166; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=1016167; + } + + $tabInsert2 = array_merge($tabUpdate, array('ActionPart' => 2), + array( 'Siren1' => $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=1016168; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=1016169; + } + } + // Fin insertion actionnaire + + //Insertion participation + if ( trim($tabParti->siren)<>'' ) { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabParti->pct))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabParti->siren); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ( $pays=='' ) $pays='FRA'; + if ( trim($tabParti->nom)<>'' ) $nom=$tabParti->nom; + if ( $tabParti->pays<>'XXX' ) $pays=$tabParti->pays; + + if (trim($tabParti->dateMAJ)<>'JJ/MM/AAAA' && trim($tabParti->dateMAJ)<>'') + $dateMAJ=WDate::dateT('d/m/Y', 'Y-m-d', trim($tabParti->dateMAJ)); + + if ($tabParti->majMin=='maj') $majMin='+'; + elseif ($tabParti->majMin=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array( 'ActionPart' => 2 ), + array( 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=10168; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=10169; + } + + $tabInsert2 = array_merge($tabUpdate, array( 'ActionPart' => 1 ), + array( 'Siren1'=> $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=10170; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=10171; + } + } + // Fin insertion participation + + if ($errMaj>0){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } else { + $result = true; + } + } + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Commande de bilan + * @param InfoCommandeBilan $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdBilanReturn + */ + public function setCmdBilan( InfoCommandeBilan $infoCommande, InfosDemandeur $infosDemandeur ) + { + + } + + /** + * Renvoi des informations sur une commande de bilan + * @param string $reference + * @return CmdBilanReturn + */ + public function getCmdBilan( $reference ) + { + + } + + /** + * Commande d'acte + * @param InfoCommandeActe $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdActeReturn + */ + public function setCmdActe( $infoCommande, $infosDemandeur ) + { + + } + + /** + * Renvoi des informations sur une commande d'acte + * @param string $reference + * @return CmdActeReturn + */ + public function getCmdActe( $reference ){} + + /** + * Commande de kbis + * @param InfoCommandeKbis $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdKbisReturn + */ + public function setCmdKbis( InfoCommandeKbis $infoCommande, InfosDemandeur $infosDemandeur ) + { + $this->authenticate(); + + $error = new ErrorType(); + $ref = new RefCommande(); + //Vérifier les informations + switch($infoCommande->mode) + { + case 'courrier': break; + case 'mail': break; + default: + exit; break; + } + if (empty($infoCommande->siren)) + { + $error->errnum = 0; + $error->errmsg = 'Erreur SIREN invalide'; + } + else + { + $login = $_SERVER['PHP_AUTH_USER']; + // Insertion des données commande + $dataCommandes = array( + 'user_login' => $login, + 'user_email' => $this->User->email, + 'type' => 'kbis', + 'demandeurReference' => $infosDemandeur->reference, + 'demandeurEmail' => $infosDemandeur->email, + 'demandeurTel' => $infosDemandeur->tel, + 'demandeurNom' => $infosDemandeur->nom, + 'demandeurService' => $infosDemandeur->service, + 'demandeurSociete' => $infosDemandeur->societe, + 'demandeurAdresse' => $infosDemandeur->adresse, + 'demandeurCp' => $infosDemandeur->cp, + 'demandeurVille' => $infosDemandeur->ville, + 'infoCommande' => serialize($infoCommande) + ); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commande = new Application_Model_Commandes(); + $commande_id = $commande->insert($dataCommandes); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id) + { + //Enregistrement des détails de commande + $dataCommandesKbis = array( + 'commande_id' => $commande_id, + 'siren' => $infoCommande->siren, + 'raisonSociale' => '', + 'fichier' => '', + 'partenaireRequete' => '', + 'partenaireReponse' => '', + ); + try { + $commandeKbisTable = new Application_Model_CommandesPieces(); + $commandeKbisTable->insert($dataCommandesKbis); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + try { + $row = $commande->find($commande_id); + $data = $row->current(); + $ref->reference = $data->id; + $ref->dateCommande = $data->date_added; + $ref->dateMaj = $data->date_updated; + $ref->dateReception = $data->date_closed; + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 0; + $error->errmsg = "Commande Introuvable"; + } + } + else + { + $error->errnum = 0; + $error->errmsg = "Erreur enregistrement commande"; + } + } + $output = new CmdKbisReturn(); + $cmd = new CmdKbisDetail(); + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $cmd->refCommande = $ref; + $output->commande = $cmd; + $output->error = $error; + return $output; + } + + /** + * Renvoi des informations sur une commande de Kbis + * @param string $reference + * @return CmdKbisReturn + */ + public function getCmdKbis( $reference ){} + + /** + * Commande de privilèges et nantissements par email + * @param InfoCommandePieces $infoCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdPiecesReturn + */ + public function setCmdPieces( $infoCommande, $infosDemandeur ) + { + $this->authenticate(); + $error = new ErrorType(); + $ref = new RefCommande(); + if (!empty($infoCommande->siren)){ + //Vérification SIREN + // Insertion des données commande + $dataCommandes = array( + 'user_login' => $this->User->login, + 'user_email' => $this->User->email, + 'type' => 'pieces', + 'demandeurReference' => $infosDemandeur->reference, + 'demandeurEmail' => $infosDemandeur->email, + 'demandeurTel' => $infosDemandeur->tel, + 'demandeurNom' => $infosDemandeur->nom, + 'demandeurService' => $infosDemandeur->service, + 'demandeurSociete' => $infosDemandeur->societe, + 'demandeurAdresse' => $infosDemandeur->adresse, + 'demandeurCp' => $infosDemandeur->cp, + 'demandeurVille' => $infosDemandeur->ville, + 'infoCommande' => serialize($infoCommande) + ); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commande = new Application_Model_Commandes(); + $commande_id = $commande->insert($dataCommandes); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id){ + //Enregistrement des détails de commande + $dataCommandesPieces = array( + 'commande_id' => $commande_id, + 'siren' => $infoCommande->siren, + 'raisonSociale' => '', + 'fichier' => '', + ); + try { + $commandePieces = new Application_Model_CommandesPieces(); + $commandePieces->insert($dataCommandesPieces); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + + try { + $row = $commande->find($commande_id); + $data = $row->current(); + $ref->reference = $data->id; + $ref->dateCommande = $data->date_added; + $ref->dateMaj = $data->date_updated; + $ref->dateReception = $data->date_closed; + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 0; + $error->errmsg = "Commande Introuvable"; + } + } else { + $error->errnum = 0; + $error->errmsg = "Erreur enregistrement commande"; + } + } else { + $error->errnum = 0; + $error->errmsg = 'Erreur SIREN invalide'; + } + $output = new CmdPiecesReturn(); + $cmd = new CmdPiecesDetail(); + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $cmd->refCommande = $ref; + $output->error = $error; + return $output; + } + + /** + * Renvoi des informations sur une commande pièces + * @param string $reference + * @return CmdPiecesReturn + */ + public function getCmdPieces( $reference ) + { + list($typeCommande, $idCommande) = explode('-', $reference); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commandeTable = new Application_Model_Commandes(); + $select = $commandeTable->select() + ->where('type = ?', 'pieces') + ->where('id = ?', $idCommande); + $commandeRowset = $commandeTable->fetchAll($select); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + $error = new ErrorType(); + $ref = new RefCommande(); + $infoCommande = new InfoCommandePieces(); + $infosDemandeur = new InfosDemandeur(); + if ( $commandeRowset->count()>0 ) + { + $commande = $commandeRowset->current(); + $selectEven = $commandeTable->select() + ->order('date_added DESC')->limit(1); + $evenRowset = $commande->findDependentRowset( + 'Application_Model_CommandesEven', null, $selectEven); + $info = ''; + if($evenRowset->count()>0){ + $even = $evenRowset->current(); + $info = $even->commentaire; + } + $ref->reference = strtoupper($commande->type).'-'.$commande->id; + $ref->dateCommande = $commande->date_added; + $ref->dateMaj = $commande->date_updated; + $ref->dateReception = $commande->date_closed; + $ref->info = $info; + $ref->fichier = ''; // @todo : Détecter le fichier + $ref->login = $commande->user_login; + $infoCommande = unserialize($commande->infoCommande); + $infosDemandeur->reference = $commande->demandeurReference; + $infosDemandeur->email = $commande->demandeurEmail; + $infosDemandeur->tel = $commande->demandeurTel; + $infosDemandeur->nom = $commande->demandeurNom; + $infosDemandeur->service = $commande->demandeurService; + $infosDemandeur->societe = $commande->demandeurSociete; + $infosDemandeur->adresse = $commande->demandeurAdresse; + $infosDemandeur->cp = $commande->demandeurCp; + $infosDemandeur->ville = $commande->demandeurVille; + } + else + { + $error->errnum = 0; + $error->errmsg = 'Référence inconnue'; + } + $output = new CmdPiecesReturn(); + $cmd = new CmdPiecesDetail(); + $cmd->refCommande = $ref; + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + $output->commande = $cmd; + $output->error = $error; + return $output; + } + + /** + * Retourne la liste des commandes de pièces ainsi que leur détails + * @param CmdFiltrePieces $filtre + * @param int $position + * @param int $nbRep + * @return ListeCmdPiecesReturn + */ + public function getListeCmdPieces( $filtre, $position = 0, $nbRep = 20 ) + { + $error = new ErrorType(); + //Traitements des filtres pour générer la requête SQL + + //Selection + $nbCommandes = 0; + try + { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $commandeTable = new Application_Model_Commandes(); + $select = $commandeTable->select()->where('type = ?', 'pieces'); + $countRowset = $commandeTable->fetchAll($select); + $nbCommandes = $countRowset->count(); + $select->order('date_added DESC')->limit($nbRep, $position); + $commandeRowset = $commandeTable->fetchAll($select); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + $error->errnum = 1; + $error->errmsg = 'Erreur'; + } + + if ( $commandeRowset->count()>0 ) + { + $liste = array(); + foreach ($commandeRowset as $commande) + { + $selectEven = $commandeTable->select() + ->order('date_added DESC')->limit(1); + $evenRowset = $commande->findDependentRowset( + 'Application_Model_CommandesEven', null, $selectEven); + $info = ''; + if($evenRowset->count()>0){ + $even = $evenRowset->current(); + $info = $even->commentaire; + } + + $ref = new RefCommande(); + $ref->reference = strtoupper($commande->type).'-'.$commande->id; + $ref->dateCommande = $commande->date_added; + $ref->dateMaj = $commande->date_updated; + $ref->dateReception = $commande->date_closed; + $ref->info = $info; + $ref->fichier = ''; // @todo : Détecter le fichier + $ref->login = $commande->user_login; + + $infoCommande = new InfoCommandePieces(); + $infoCommande = unserialize($commande->infoCommande); + + $infosDemandeur = new InfosDemandeur(); + $infosDemandeur->reference = $commande->demandeurReference; + $infosDemandeur->email = $commande->demandeurEmail; + $infosDemandeur->tel = $commande->demandeurTel; + $infosDemandeur->nom = $commande->demandeurNom; + $infosDemandeur->service = $commande->demandeurService; + $infosDemandeur->societe = $commande->demandeurSociete; + $infosDemandeur->adresse = $commande->demandeurAdresse; + $infosDemandeur->cp = $commande->demandeurCp; + $infosDemandeur->ville = $commande->demandeurVille; + + $cmd = new CmdPiecesDetail(); + $cmd->refCommande = $ref; + $cmd->infoCommande = $infoCommande; + $cmd->infosDemandeur = $infosDemandeur; + + $liste[] = $cmd; + } + } + + $output = new ListeCmdPiecesReturn(); + $output->error = $error; + $output->nbCommandes = $nbCommandes; + $output->liste = $liste; + return $output; + } + + /** + * Retourne la liste des statuts de commande + * @param string $type + * @return CmdStatut[] + */ + public function getListeCmdStatut( $type ) + { + Zend_Registry::get('WsLogger')->info("getListeStatut - ".$type); + try { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $dbStatut = new Application_Model_CommandesStatut(); + $result = $dbStatut->fetchAll(array("commande_type = '$type'")); + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + $listeStatut = array(); + if (count($result)>0) + { + foreach($result as $r) + { + $statut = new CmdStatut(); + $statut->code = $r['code']; + $statut->lib = $r['libelle']; + $listeStatut[] = $statut; + } + } + return $listeStatut; + } + + /** + * Spécifier un état défini pour une commande + * (avec déclenchement d'une action) + * @param int $reference + * @param int $statutCode + * @return bool + */ + public function setCmdStatut( $reference, $statutCode) + { + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $dbStatut = new Application_Model_CommandesStatut(); + $row = $dbStatut->fetchRow(array("code = '$statutCode'")); + if ( count($row)>0 && $this->setCommandeEven($reference, $row['lib']) ) + { + if (!empty($row['action'])){ + switch($row['action']){ + case 'CLOSE': + //date_closed + break; + } + } + return true; + } else { + return false; + } + } + + /** + * Spécifier un état pour une commande + * @param int $reference + * @param string $comment + * @return bool + */ + public function setCmdEven ( $reference, $comment ) + { + $this->authenticate(); + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + try { + //Vérifier que la commande existe avec la référence fournie + $commandeTable = new Application_Model_Commandes(); + $commandeRowset = $commandeTable->find($reference); + if ($commandeRowset->count()>0) + { + $commande = $commandeRowset->current(); + //Enregistrer l'événement + $commandeEvenTable = new Application_Model_CommandesEven(); + $insert = $commandeEvenTable->createRow(); + $insert->commande_id = $commande->id; + $insert->commentaire = $comment; + $insert->user_login = $this->User->login; + $insert->save(); + //Mettre à jour la commande + $commande->date_updated = date('Y-m-d H:i:s'); + $commande->save(); + return true; + } else { + return false; + } + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + return false; + } + } + + /** + * Ajout du nom de fichier liée à la commande + * @param int $reference + * @param string $filename + * @return bool + */ + public function setCmdDocument( $reference, $filename ) + { + $this->authenticate(); + $db = Zend_Db::factory($this->dbConfig->Commandes); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + try { + //Vérifier que la commande existe avec la référence fournie + $commandeTable = new Application_Model_Commandes(); + $commandeRowset = $commandeTable->find($reference); + if ($commandeRowset->count()>0) + { + $commande = $commandeRowset->current(); + switch($commande->type) + { + case 'pieces': + $infoCommandePieces = $commande->findDependentRowset('Application_Model_CommandesPieces'); + if ($infoCommandePieces->count()>0) + { + //Update informations pieces + $commandePieces = $infoCommandePieces->current(); + $commandePieces->fichier = $filename; + $commandePieces->save(); + //Mettre à jour la commande + $commande->date_updated = date('Y-m-d H:i:s'); + $commande->save(); + //Mettre à jour les évenements de commande + //@todo + return true; + } + break; + case 'default': + return false; + break; + } + } else { + return false; + } + } + catch (Zend_Db_Adapter_Exception $e) + { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + return false; + } + } + + /** + * Enregistre une action utilisateur pour la facturation + * @param string $page + * @param string $siret + * @param int $id + * @param string $ref + * @return void + */ + public function setLog($page, $siret, $id=0, $ref='') + { + $this->authenticate(); + + //Initialisation + if (empty($id)) $id = 0; + if (empty($ref)) $ref = ''; + if ( $id!=0 ) { + $ref2=''.$id.'/'.$ref; + } else { + $ref2=$ref; + } + $this->wsLog($page, $siret, $ref2); + debugLog('I',"Insertion d'un log pour la page $page $siret $ref2",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + + /** + * Met a jour les informations sur un mandataire + * @param SetInfosMandataire $infos Informations sur le mandataire à créer ou à ajouter (ajout si id absent) + * @return SetMandataireReturn + **/ + public function setMandataire(SetInfosMandataire $infos) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $result = true; + + $iDb = new WDB(); + /** Nom et Identifiant de l'opérateur de saisie **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('utilisateurs', 'id', "login='".$this->User->login."'"); + $idUser = $rep[0][0]; + + //$infos = serialize($tabInfos); + debugLog('I',"Ajout/MAJ de mandaitaire ".print_r($infos,1)." demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $type = substr(strtoupper($infos->type),0,1); + $stag = substr(strtoupper($infos->type),1,1); + if ($stag=='S') { $stag=1; } else { $stag=0; } + if ($type=='A' || $type=='H' || $type=='M' || $type=='V' || + $type=='N' || $type=='T') + { + $tabUpdate=array( + 'sirenGrp' => substr($infos->sirenGrp,0,9)*1, + 'nicGrp' => substr($infos->sirenGrp,9,5)*1, + 'sirenMand' => substr($infos->sirenMand,0,9)*1, + 'nicMand' => substr($infos->sirenMand,9,5)*1, + 'Nom' => ucwords(strtolower($infos->Nom)), + 'Prenom' => ucwords(strtolower($infos->Prenom)), + 'type' => $type, + 'stagiaire' => $stag, + 'coursAppel' => intval($infos->coursAppel), + 'coursAppel2' => intval($infos->coursAppel2), + 'tribunal' => $infos->tribunal, + 'Statut' => strtoupper($infos->Statut), + 'adresse' => ucwords($infos->adresse), + 'adresseComp' => strtoupper($infos->adresseComp), + 'cp' => intval($infos->cp), + 'ville' => strtoupper($infos->ville), + 'tel' => $infos->tel, + 'fax' => $infos->fax, + 'email' => $infos->email, + 'web' => $infos->web, + 'contact' => $infos->contact, + 'idUser' => $idUser, + ); + } + $id = str_replace('m','', ''.$infos->id)*1; + if (intval($id)!=0) { + // MAJ + if (!$iDb->update('tabMandataires', $tabUpdate, "id=$id", true)) { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $result = false; + } + } else { + // Insertion + if (!$iDb->insert('tabMandataires', array_merge($tabUpdate,array('dateInsert'=>date('YmdHis'))), true)) { + $error->errnum = 1; + $error->errmsg = 'Insertion impossible'; + $result = false; + } + } + $output = new SetMandataireReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le mandataire par son id + * @param int $idMand Identifiant du mandataire + * @return MandataireReturn + */ + public function getMandataire($idMand) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + debugLog('I',"Donne le Mandataires correspondant à $idMand",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new classMInsee(); + $tabRet = $iInsee->getMandataire($idMand); + $mandataire = new MandataireDetail(); + $mandataire->Nom = $tabRet['Nom']; + $mandataire->Prenom = $tabRet['Prenom']; + $mandataire->tribunal = $tabRet['tribunal']; + $mandataire->adresse = $tabRet['adresse']; + $mandataire->adresseComp = $tabRet['adresseComp']; + $mandataire->ville = $tabRet['ville']; + $mandataire->email = $tabRet['email']; + $mandataire->web = $tabRet['web']; + $mandataire->contact = $tabRet['contact']; + $output = new MandataireReturn(); + $output->error = $error; + $output->result = $mandataire; + return $output; + } + + /** + * Liste les mandataires compétentes pour une cours d'appel donnée + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @return MandatairesReturn + */ + public function getMandataires($codeTribunal=0, $type=array('A','M')) + { + $this->authenticate(); + //Initialisation + $iInsee = new MInsee(); + $error = new ErrorType(); + $trib = serialize($codeTribunal); + debugLog('I',"Liste des Mandaitaires ou Administrateur du Tribunal/Cours d'Appel $trib demandé",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!is_array($codeTribunal) && strlen($codeTribunal)>3 && $codeTribunal*1==0) + { + // $codeTribunal est un identifiant de tribunal + $iBodacc = new MBodacc(); + $tabTmp = $iInsee->getMandataires(array($iBodacc->getTribunalIdCA($codeTribunal)), true, $type); + } + elseif ($codeTribunal*1==0) + { + // On veut tous les mandataires + $tabTmp = $iInsee->getMandataires(array(), true, $type); + } + elseif (is_array($codeTribunal)) + { + // On veut les mandataires d'une CA + $tabTmp = $iInsee->getMandataires($codeTribunal, true, $type); + } + $tabRet = array(); + foreach ($tabTmp as $i=>$mand){ + $mandataire = new Mandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = $mand; + $tabRet[]= $mandataire; + } + $output = new MandatairesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des conventions + * @param string $siren + * @return ListeConventionsReturn + */ + public function getListeConventions($siren) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + debugLog('I',"Liste des conventions demandée pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)<>9){ + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren Siret inexistant'; + + } elseif ($siren*1==0){ + + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren); + + if (empty($tabIdentite) && isset($tabIdentite['erreur']) && + $tabIdentite['erreur']<>''){ + + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $naf = $tabIdentite['NafEnt']; + $trancheEffectif = $tabIdentite['EffEnTr']; + $effectif = $tabIdentite['Effectif']; + $fj = $tabIdentite['entreprise']['FJCodeEntrep']; + + $isolv = new MSolvabilite($siren, $naf, $trancheEffectif, + $effectif, $tabIdentite['CP'], $fj, $tabIdentite['Capital'], + $tabIdentite['CapitalDev'], $tabIdentite['DateCreaEn'], + $tabIdentite['DateCreaEt'] + ); + $noteStructure = $isolv->getSolvabilite(); + $naf4 = $isolv->getNaf4($naf); + + $tabTmp = $iInsee->listeConventions($naf4, $tabIdentite['Dept']); + foreach ($tabTmp as $conv) + { + $convention = new Convention(); + $convention->idCC = $conv['id CC']; + $convention->nomCC = $conv['nom CC']; + $convention->infoCC = $conv['infoCC']; + $convention->editorCC = $conv['editeur CC']; + $convention->nbPageCC = $conv['nb page CC']; + $convention->isbnCC = $conv['isbn CC']; + $convention->dateCC = $conv['date edition CC']; + $convention->joCCmaj = $conv['joCCmaj']; + $tabRet[] = $convention; + } + $this->wsLog('conventions',$siren); + } + } + + $output = new ListeConventionsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Donne la cours d'appel d'un tribunal par son code + * @param string $codeTribunal Code BODACC sur 6 caractères du tribunal + * @return int + **/ + public function getIdCoursAppel($codeTribunal) + { + $this->authenticate(); + $iBodacc = new MBodacc(); + return $iBodacc->getTribunalIdCA($codeTribunal); + } + + /** + * Récupère le contenu d'une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return AnnonceCollecteReturn + */ + public function getAnnonceCollecte($idAnn, $siret) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $annonceCollecte = new AnnonceCollecte(); + $siren = substr($siret,0,9)*1; + if (!$this->checkEdition()) { + + $error->errnum = 0; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $iDb = new WDB(); + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $idAnn = preg_replace('/^0\./','', ''.$idAnn) * 1; + if ($idAnn>0) + { + $res = $iDb->select('annonces', + 'id, siren, sirenValide, typeEven, strEven, raisonSociale, adresse, codePostal, ville, dateJugement, dateCessationPaiement, dateEffetFinP, numero, inter1type, inter1id, inter1nom, inter2type, inter2id, inter2nom, inter3type, inter3id, inter3nom, inter4type, inter4id, inter4nom, tribunal, montant, actionsNb, complement, infosBrutes, nouvActivite, nouvDir, nouvAdr, nouvFJ, annonce, source, parutionIdJal, parutionNum, dateSource, idSaisie, idAnnonce, dateInsert', + "id=$idAnn", false, MYSQL_ASSOC + ); + if (count($res)>0) + { + $ann = $res[0]; + $annonceCollecte->id = $ann['id']; + $annonceCollecte->siren = $ann['siren']; + $annonceCollecte->raisonSociale = $ann['raisonSociale']; + $annonceCollecte->adresse = $ann['adresse']; + $annonceCollecte->codePostal = $ann['codePostal']; + $annonceCollecte->ville = $ann['ville']; + $annonceCollecte->dateJugement = $ann['dateJugement']; + + //@todo : Les libellées ne sont pas présent LibEven + $tabEven = array(); + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $ann['typeEven']; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + if (!empty($ann['strEven'])){ + foreach ( explode(';',$ann['strEven']) as $code ) + { + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $code; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + } + } + + $annonceCollecte->even = $tabEven; + $annonceCollecte->dateSource = $ann['dateSource']; + $annonceCollecte->dateCessationPaiement = $ann['dateCessationPaiement']; + $annonceCollecte->dateEffetFinP = $ann['dateEffetFinP']; + $annonceCollecte->tribunal = $ann['tribunal']; + $annonceCollecte->numero = $ann['numero']; + $annonceCollecte->montant = $ann['montant']; + $annonceCollecte->actionsNb = $ann['actionsNb']; + $annonceCollecte->inter1type = $ann['inter1type']; + $annonceCollecte->inter1id = $ann['inter1id']; + $annonceCollecte->inter1nom = $ann['inter1nom']; + $annonceCollecte->inter2type = $ann['inter2type']; + $annonceCollecte->inter2id = $ann['inter2id']; + $annonceCollecte->inter2nom = $ann['inter2nom']; + $annonceCollecte->inter3type = $ann['inter3type']; + $annonceCollecte->inter3id = $ann['inter3id']; + $annonceCollecte->inter3nom = $ann['inter3nom']; + $annonceCollecte->complement = $ann['complement']; + $annonceCollecte->nouvActivite = $ann['nouvActivite']; + $annonceCollecte->nouvDir = $ann['nouvDir']; + $annonceCollecte->nouvAdr = $ann['nouvAdr']; + $annonceCollecte->nouvFJ = $ann['nouvFJ']; + $annonceCollecte->source = $ann['source']; + + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret) : ".$ann['raisonSociale'],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } else { + $error->errnum = 1; + $error->errmsg = 'Edition impossible'; + } + } + else + { + $error->errnum = 745741; + $error->errmsg = 'Selection impossible'; + } + } + $output = new AnnonceCollecteReturn(); + $output->error = $error; + $output->result = $annonceCollecte; + return $output; + } + + /** + * getDevises + * @param string $codeIsoDevise + * @return DevisesReturn + */ + public function getDevises($codeIsoDevise='') + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if (empty($codeIsoDevise)) $codeIsoDevise = ''; + + debugLog('I',"Liste des devises ou devise $codeIsoDevise demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabTmp = $iInsee->getDevises($codeIsoDevise); + + $tabRet = array(); + foreach ($tabTmp as $i=>$dev) + { + if ( $i!='' ){ + $devise = new Devise(); + $devise->devIso = $i; + $devise->devNom = $dev; + $tabRet[] = $devise; + } + } + $output = new DevisesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des codes devises, libellés, date et valeur + * (toutes les devises ou une seule) + * @param string $devise Devise sur 3 lettres (facultatif) + * @return DevisesCoursReturn + */ + public function getDeviseCours($devise=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB('sdv1'); + if ($devise) $strDevise=" AND c.devise='$devise' "; + else $strDevise=''; + + $tabRet = array(); + + $res = $iDb->select('devise_cours c, devise_liste l', 'c.devise, l.devNom, max(c.date) as dateChange, c.valeur', "c.devise=l.devIso $strDevise GROUP BY c.devise ORDER BY c.devise ASC", false, MYSQL_ASSOC); + foreach ($res as $tabDev) + { + $devise = new DevisesCours(); + $devise->codeDevise = $tabDev['devise']; + $devise->nomDevise = $tabDev['devNom']; + $devise->dateChange = $tabDev['dateChange']; + $devise->valeurDevise = $tabDev['valeur']; + $tabRet[] = $devise; + } + $output = new DevisesCoursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getMarques + * @param string $siren + * @param int $idDepot + * @return MarquesReturn + */ + public function getMarques($siren, $idDepot=0) + { + $this->authenticate(); + $this->permission('marques'); + debugLog('I',"Liste des marques déposées pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($idDepot)) $idDepot = 0; + $error = new ErrorType(); + $marques = array(); + require_once 'Metier/partenaires/classMMarques.php'; + $iMarque = new MMarques(); + $ret = $iMarque->getMarques($siren, $idDepot); + + foreach ($ret as $item) { + if (trim($item['imgLink'])<>'') $idLien = $item['numeroMarque']; + else $idLien = ''; + if ($idDepot==$item['numeroMarque']) { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Date = $item['dateDepot']; + $marque->Depot = $item['numeroMarque']; + $marque->IdLien = $idLien; + $marque->UrlLien = $item['UrlLien']; + $marque->PdfDispo = $item['pdfLink']; + $marque->Classes = $item['classesMarque']; + $marque->Perimetre = $item['periMarque']; + $marque->DateExpir = $item['dateExpir']; + $marques = array(); + $marques[] = $marque; + break; + } else { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Date = $item['dateDepot']; + $marque->Depot = $item['numeroMarque']; + $marque->IdLien = $idLien; + $marque->UrlLien = $item['UrlLien']; + $marque->PdfDispo = $item['pdfLink']; + $marques[] = $marque; + } + } + + Zend_Registry::get('WsLogger')->info(__FUNCTION__.' : '. + print_r($marques,1)); + + $this->wsLog('marques',$siren); + $output = new MarquesReturn(); + $output->error = $error; + $output->result = $marques; + return $output; + } + + /** + * Enter description here ... + * @param string $siren + * @param string $piece + * @param string $type + * @param integer $visu + * @param integer $courrier + * @param string $ref + * @return PieceReturn + */ + public function getPiece($siren, $piece='kbis', $type='', $visu=1, $courrier=0, $ref='') + { + $this->authenticate(); + $this->permission('kbis'); + set_time_limit(400); + + if (empty($piece)) $piece = 'kbis'; + if (empty($type)) $type = ''; + if (empty($visu)) $visu = 1; + if (empty($courrier)) $courrier = 1; + if (empty($ref)) $ref = ''; + $error = new ErrorType(); + + $erreur = false; + + $kbisLocalPDF = DOC_WEB_LOCAL."kbis/$piece-$siren.pdf"; + + if (file_exists($kbisLocalPDF) + && date('Ymd', filemtime($kbisLocalPDF))==date('Ymd') + && filesize($kbisLocalPDF)>0 ) { + $size = filesize($kbisLocalPDF); + $erreur = false; + $tabNom = array(); + $ficDist = ''; + $cache = 1; + } else { + exec("php ".APPLICATION_PATH."/../batch/getPieces.php $siren $piece > /dev/null &"); + $ficDist=''; + $size=$cache=0; + } + // On supprimer l'ancien kbis si trop vieux ou vide + if (date('Ymd', filemtime($kbisLocalPDF))<>date('Ymd') + || filesize($kbisLocalPDF)==0) { + unlink($kbisLocalPDF); + } + $result = new PieceResult(); + $result->Siren = $siren; + //@todo : Envoyer vers controlleur + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result->Url = $hostname.'/data/kbis/'.$piece.'-'.$siren.'.pdf'; + + $result->Taille = $size; + $result->Cache = $cache; + $result->fichier = $ficDist; + $this->wsLog('kbis', $siren, "$cache/$visu/$courrier/$type/$ref"); + $output = new PieceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Enregistrement de document actes ou status d'association + * @param string $siren Numéro Siren + * @param string $waldec Numéro waldec + * @param string $type Type d'acte + * @param string $libelle Libellé de l'acte + * @param string $date Date des l'acte au format + * @param int $nbPages Nombre de pages dans le fichier + * return boolean + */ + public function setActeAsso( $siren, $waldec, $type, $libelle, $date, $nbPages ) + { + $this->authenticate(); + if (!$this->checkEdition()) { + $this->sendError('0902'); + } + ($type == 'ST') ? $type_acte = 'ST' : $type_acte = ''; + + $data = array( + 'siren' => $siren, + 'waldec' => waldec, + 'pdfLink' => '', + 'pdfSize' => '', + 'pdfVer' => '', + 'pdfPage' => '', + 'date_acte' => WDate::dateT('d/m/Y', 'Y-m-d', $date), + 'type_acte' => $type_acte, + 'type_acte_libelle' => $libelle, + 'nbpages_acte' => $nbPages, + ); + try { + $db = Zend_Db::factory($this->dbConfig->Webservice); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $doc = new Application_Model_AssoActes(); + $doc_id = $doc->insert($data); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id) + { + return true; + } + return false; + } + + /** + * Commande de statut association + * @param InfoCmdAsso $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdAssoReturn + */ + public function setCmdAsso( $infosCommande, $infosDemandeur ) + { + $this->authenticate(); + $this->permission('actes'); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB(); + + $siren = $infosCommande->siren; + $idEntreprise = intval($infosCommande->idEntreprise); + $assoNom = $infosCommande->raisonSociale; + debugLog('I',"commandeAsso pour $assoNom ($siren) début",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, 0, $idEntreprise); + $assoSigle = $tabIdentite['Sigle']; + $assoAdresse = $tabIdentite['Adresse'].EOL.$tabIdentite['Adresse2']; + $assoCP = $tabIdentite['CP']; + $assoVille = $tabIdentite['Ville']; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert=array( + 'idUser' => $this->User->id, + 'source' => 'asso', + 'login' => $this->User->login, + 'emailCommande' => $mail, + 'siren' => $siren, + 'refUtilisateur' => $infosDemandeur->reference, + 'refDocument' => serialize($infosDemandeur), + 'refCommande' => serialize($infosCommande), + 'dateCommande' => DATETIME, + ); + + $iDbCrm = new WDB('sdv1'); + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + + if ( $ret!=0 ) { + + sendMail('production@scores-decisions.com', 'asso@scores-decisions.com', + "Commande de statuts association pour $assoNom ($siren)", + "Association :".EOL.print_r($infosCommande, true).EOL.EOL. + "Demandeur:".EOL.print_r($infosDemandeur, true).EOL.EOL. + "Ref : i".$ret + ); + + $result = new CmdAssoDetail(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + sendMail('production@scores-decisions.com', $mail, + "Votre commande de statuts association sur $assoNom ($siren)", + "Votre demande de statuts sur l'association $assoNom a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog('commandeAsso', $siren, 'i'.$ret.'-'.DATETIME); + debugLog('I',"commandeAsso pour $assoNom ($siren) fin",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + } else { + + $error->errnum = 1; + $error->errmsg = 'Erreur'; + + } + + $output = new CmdAssoReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Renvoi des informations sur une commande association + * @param string $reference + * @return CmdAssoReturn + */ + public function getCmdAsso( $reference ){} + + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param InfosCmdEnquete $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdEnqueteReturn + **/ + public function setCmdEnquete($infosCommande, $infosDemandeur) + { + $this->authenticate(); + $this->permission('enquetec'); + + //Initialisation + $error = new ErrorType(); + $siren = $infosCommande->siren; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source'=> 'intersud', // 'greffes', 'asso', 'graydon' + 'login'=> $this->User->login, + 'emailCommande'=> $mail, + 'siren'=> $siren, + 'refDocument'=> serialize($infosDemandeur), + 'refCommande'=> serialize($infosCommande), + 'dateCommande'=> DATETIME, + ); + debugLog('I',"Intersud, début sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo=print_r($infosCommande, 1).EOL.print_r($infosDemandeur,1).EOL; + + $idClient = $this->User->idClient; + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande ="NOM et Prénom du client demandeur : ".$infoDemandeur->nom.EOL; + $strInfoCommande.="Email du client demandeur : $mail".EOL; + $strInfoCommande.="Tel/Fax du demandeur : ".$infosDemandeur->tel.' / '.$infosDemandeur->fax.EOL; + $strInfoCommande.="Profil du demandeur : ".trim($infosDemandeur->service).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login = 'YLENA'; // Demandes en test + $pass = 'WYLFE'; + $nomClient = $strInfoCommande = ''; + $typeEnqLog = 'enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + $url='http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array('login' => $login, 'pwd' => $pass); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + // wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + //@todo + return array('error'=>array('errnum'=>4563456, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes'), 'results'=>$tabRet); + } + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + + /** Connexion à l'Extranet Intersud + **/ + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base + **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ". + DATETIME."\n". + "Date et heure de la commande : ".date('d/m/Y - H:i')."\n". + "Origine de la commande : $nomClient". + "$strInfoCommande"."\n\n". + + "CA : ".$infosCommande->PrecisionsMontantCA."\n". + "Motif de la demande : ".trim($infosCommande->PrecisionsMotif.' '.$infosCommande->PrecisionsAutre)."\n". + "Type de la demande : ".$infosCommande->PrecisionsType."\n". + "Anciennete de la relation : ".$infosCommande->Anciennete.' '.$infosCommande->AncienneteDuree."\n". + "Observations : ".$infosCommande->Observation.EOL; + + if ($infosCommande->ImpayeesChoix<>'non') + $comment.="Impayé(s) : ".$infosCommande->ImpayeesNombre." impayé(s) pour un montant de ".$infosCommande->ImpayeesMontant." en date du ".$infosCommande->ImpayeesDate.EOL; + + if ($infosCommande->RetardPaiementChoix<>'non') + $comment.="Retard(s) de paiement : ".$infosCommande->RetardPaiementNombre." retard(s) pour un montant de ".$infosCommande->RetardPaiementMontant." en date du ".$infosCommande->RetardPaiementDate.EOL; + + if ($infosCommande->LitigeChoix<>'non') + $comment.="Présence de litige(s) : ".$infosCommande->LitigePrecisions.EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infosCommande->Type)) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infosCommande->RIB))<>'') + $iDbCrm->insert('banques', array( + 'siren'=>$siren, + 'libBanqueGuichet'=>'', + 'precis'=>1, + 'codeBanque'=>$infosCommande->RIB->banque, + 'codeGuichet'=>$infosCommande->RIB->guichet, + 'numCompte'=>$infosCommande->RIB->compte.$infosCommande->RIB->cle, + 'dateSource'=>DATETIME, + ), true); + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc'=>$tabIdentite['Nom'], + 'cible_enk'=>9, // 9 + 'siret'=>$siren, + 'acti'=>'', + 'soc_exp'=>$tabInterSud['soc_exp'], + 'type_enk'=>$enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri'=>'', + 'adr'=>$tabIdentite['Adresse'], + 'ref_exp'=>$tabInterSud['ref_exp'], + 'autre_type_enk'=>'', // Texte libre + 'adr2'=>$tabIdentite['Adresse2'], + 'delai_enk'=>$enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville'=>$tabIdentite['Ville'], + 'cp'=>$tabIdentite['CP'], + 'pays'=>'', // International ? + 'nom_exp'=>$tabInterSud['nom_exp'], + 'tel'=>$tabIdentite['Tel'], + 'port'=>$infosCommande->AutreTel, + 'tel_exp'=>$tabInterSud['tel_exp'], + 'bank'=>trim(implode(' ', $infosCommande->RIB)), + 'int_enk'=>$tabInterSud['int_enk'], // International ? + 'encours'=>$infosCommande->Encours, + 'nb_ech'=>$infosCommande->NbEcheances, + 'delai2_enk'=>$tabInterSud['delai2_enk'], // International ? + 'email_exp'=>$tabInterSud['email_exp'], + 'cred'=>'', + 'comment'=>urlencode($comment), + 'val_ret'=>$tabInterSud['val_ret'], + ); + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + //@todo + return array('error'=>array('errnum'=>456345, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes 3'), 'results'=>$tabRet); + } + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + $referer=$url; + $body=$page['body']; + + $result = new CmdEnquete(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url='http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + $output = new CmdEnqueteReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupération d'un kbis + * @param string $siren + * @param int $visu + * @param int $courrier + * @param string $mail + * @param string $ref + * @return PieceReturn + */ + public function getKbis($siren, $visu=1, $courrier=0, $mail='', $ref='') + { + return $this->getPiece($siren, 'kbis', '', $visu, $courrier, $ref); + } + + /** + * getStatsUtilisateurs + * @param string $login + * @param string $mois + * @param string $type + * @param boolean $payants + * @return array + */ + public function getStatsUtilisateurs($login, $mois, $type='jour', $payants=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if ($payants) + { + $strPayant="AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis') AND params<>'' AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + } + else { + $strPayant=''; + } + $iDbCrm = new WDB('sdv1'); + if ($type=='jour') { + $rep = $iDbCrm->select('logs', + 'date(dateHeure) as jours, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY jours", + false, MYSQL_ASSOC); + } elseif ($type=='heure') { + $rep = $iDbCrm->select('logs', + 'HOUR(dateHeure) as heures, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY heures", + false, MYSQL_ASSOC); + } + $tabRet = $rep; + + + + return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabRet); + } + + /** + * getPortefeuilleCsv + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getPortefeuilleCsv($login='', $idClient=0) + { + return $this->getListeSurveillancesCsv('portefeuille', $login, $idClient); + } + + /** + * getPortefeuille + * @param PortefeuilleFiltre $filtre + * @param int $deb + * @param int $nbRet + * @return PortefeuilleReturn + */ + public function getPortefeuille($filtre, $deb=0, $nbRet=100) + { + $this->authenticate(); + + // Initialisation + $error = new ErrorType(); + if (empty($deb)) { $deb = 0; } + if (empty($nbRet)) { $nbRet = 100; } + + $tri = strtolower(trim($filtre->tri)); + switch ($tri) { + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + case 'indiScore': $orderBy='ORDER BY indiScore'; break; + case 'encours': $orderBy='ORDER BY encours'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + $iDb = new WDB(); + $login = $this->User->login; + + $strSelect = 's.email, s.siren, s.nic, s.ref, s.dateAjout, s.rs, s.cp, s.ville, s.dateDerEnvoi, s.encoursClient, c.actif, c.procol, c.indiScore, c.indiScore20, c.encours, c.indiScoreDate, c.dateBilan, c.indiScorePre, c.indiScore20Pre, c.encoursPre, c.indiScoreDatePre, c.sourceModif, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + + $strFiltre = ''; + if (intval($siren)>0) $strFiltre.= " AND s.siren=$siren "; + if (!empty($filtre->ref)) $strFiltre.= " AND s.ref LIKE '%$filtre->ref%'"; + if (!empty($filtre->rs)) $strFiltre.= " AND s.rs LIKE '%$filtre->rs%'"; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site s', 'count(*) as nb', "s.login='$login' AND s.source='score' AND s.dateSuppr=0 $strFiltre", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site s, scores_surveillance c', $strSelect, "s.login='$login' AND s.source='score' AND s.dateSuppr=0 AND s.siren=c.siren $strFiltre $orderBy LIMIT $deb,$nbRet", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv) { + if (trim($tabSurv['rs'])<>'') { + $rs=$tabSurv['rs']; + $cp=$tabSurv['cp']; + $ville=$tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs=$tabIdentite['Nom']; + $cp=$tabIdentite['CP']; + $ville=$tabIdentite['Ville']; + $iDb->update('surveillances_site',array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND source='score' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic'], + false + ); + } + + $portefeuille = new Portefeuille(); + $portefeuille->email = $tabSurv['email']; + $portefeuille->siren = $tabSurv['siren']; + $portefeuille->nic = $tabSurv['nic']; + $portefeuille->ref = $tabSurv['ref']; + $portefeuille->dateAjout = $tabSurv['dateAjout']; + $portefeuille->rs = $rs; + $portefeuille->cp = $cp; + $portefeuille->ville = $ville; + // Entreprise + $portefeuille->actif = $tabSurv['actif']; + $portefeuille->procol = $tabSurv['procol']; + $portefeuille->indiScore = $tabSurv['indiScore']; + $portefeuille->indiScore20 = $tabSurv['indiScore20']; + $portefeuille->indiScorePre = $tabSurv['indiScorePre']; + $portefeuille->indiScore20Pre = $tabSurv['indiScore20Pre']; + $portefeuille->encours = $tabSurv['encours']; + $portefeuille->encoursPre = $tabSurv['encoursPre']; + $portefeuille->indiScoreDate = $tabSurv['indiScoreDate']; + $portefeuille->indiScoreDatePre = $tabSurv['indiScoreDatePre']; + $portefeuille->encoursClient = $tabSurv['encoursClient']; + $portefeuille->dateBilan = $tabSurv['dateBilan']; + $portefeuille->sourceModif = $tabSurv['sourceModif']; + //, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + $portefeuille->dateDerEnvoi = $tabSurv['dateDerEnvoi']; + $tabRet[] = $portefeuille; + + } + + $output = new PortefeuilleReturn(); + $output->error = $error; + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + return $output; + } + + + /** + * rechercheHisto + * @param string $recherche + * @param string $annee + * @param string $typeBod + * @param int $deb + * @param int $nbRep + * @param int $maxRep + * @param bool $pertinence + * @return RechercheHistoReturn + */ + public function rechercheHisto($recherche, $annee='', $typeBod='', $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($annee)) $annee = ''; + if (empty($typeBod)) $typeBod = ''; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($annee)) $pertinence = false; + $liste = array(); + $index = 'histo'; + + debugLog('I',"rechercheHisto de $recherche ($annee) (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabFiltres = array(); + + if ($annee<>'' && $annee*1>=1953 && $annee*1<=date('Y')*1) + $tabFiltres = array('annee1'=>$annee); + + /* + require_once 'Metier/sphinx/recherche2.php'; + $ret=search2('histo', "$recherche", $tabFiltresAnnee, $deb, $nbRep, $maxRep, $pertinence); + */ + + if (SPHINX_HISTO_VERSION == 1){ + require_once 'Vendors/sphinxapi/sphinxapi-0.9.9.php'; + } elseif (SPHINX_HISTO_VERSION == 2){ + require_once 'Vendors/sphinxapi/sphinxapi-2.1.5.php'; + } + + $cl = new SphinxClient(); + $cl->SetServer (SPHINX_HISTO_HOST, SPHINX_HISTO_PORT); + $cl->SetConnectTimeout ( 1 ); + $cl->SetLimits ($deb, $nbRep, $maxRep); + $cl->SetMatchMode (SPH_MATCH_EXTENDED); + foreach ($tabFiltres as $nomFiltre => $valFiltre) + $cl->SetFilter($nomFiltre, array(0=>$valFiltre)); + $cl->SetRankingMode ( SPH_RANK_PROXIMITY_BM25 ); + $res = $cl->Query ( $recherche, $index ); + + if ($res===false) { + debugLog('I',"Search Sphinx : Pas de réponse pour $recherche avec ".implode(',',$tabFiltres).' ('.$cl->GetLastError() .')',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = 0; + $output->nbReponsesTotal = 0; + $output->duree = $res[time]; + $output->mots = array(); + $output->reponses = array(); + return $output; + + } + // Le moteur est opérationel + if ( $cl->GetLastWarning() ) { + debugLog('I',"Search Sphinx : Warning pour $recherche - ".$cl->GetLastWarning(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //print "WARNING: " . $cl->GetLastWarning() . "\n\n"; + } + + debugLog('I',"'Search Sphinx dans $index de $recherche (Filtre=".implode(',',$tabFiltres)."), Deb=$deb, nbRep=$nbRep, max=$max, any=$any",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet=array(); + if ( is_array($res['matches'])) { + $iDb = new WDB(); + foreach ( $res['matches'] as $doc => $docinfo ) + { + $listeEtab=$iDb->select('histobodacc.bodacc_ocr', + "'Histo' as Loc, id, nomFichier, annee1, bod, texte", + "id=$doc"); + $etab = $listeEtab[0]; + $tabRet[]=array( + 'Localisation' => $etab['Loc'], + 'id' => $doc, + 'Pertinence' => $docinfo['weight'], + 'Fichier' => $etab['nomFichier'], + 'Annee' => $etab['annee1'], + 'Code' => $etab['bod'], + 'Texte' => $etab['texte'], + ); + } + } + debugLog('I','Search Sphinx : Retourne '. $res[total].'/'. $res[total_found] .' en '.$res[time] .'secondes',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = $tabRet; + $nbTot = $res[total_found]; + $duree = $res[time]; + $tabMots = $res['words']; + + $tabRet = array(); + $k=0; + if(count($liste)>0) { + foreach ($liste as $n=>$etab) { + $texte = Scores_Locale_String::cleanutf8($etab['Texte']); + $pattern = '/[^a-zA-Z0-9\/]+/ '; + $texte = preg_replace($pattern, ' ', $texte); + $posMin=100000; + $hitMin=1000000; + foreach ($tabMots as $mot=>$tabMot) { + if ($tabMot['hits']<$hitMin) { + $hitMin=$tabMot['hits']; + $motSignificatif=$mot; + } + } + $posMin = stripos($texte, ''.$motSignificatif); + if ($posMin<150) $posMin=150; + $texte2 = substr($texte, $posMin-150, 250); + $reponse = new RechercheHistoReponses(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + + //@todo : gestion du lien pour le téléchargement des fichiers bodacc + $file = strtr($etab['Fichier'], array( + '.txt'=>'.pdf', + '/mnt/bodacc/' => '')); + $vieuxWS = false; + if ($vieuxWS) { + $reponse->Fichier = 'http://tville.scores-decisions.com/bodacc/'.$file; + } else { + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $url = '/fichier/bodacc/q/'.base64_encode($file); + $reponse->Fichier = $hostname.$url; + } + $reponse->Annee = $etab['Annee']; + $reponse->Code = $etab['Code']; + $reponse->Texte = $texte2; + $tabRet[] = $reponse; + $k++; + } + } + + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbTot; + $output->duree = $duree; + $output->mots = array_keys($tabMots); + $output->reponses = $tabRet; + return $output; + } + + /** + * getListeSurveillanceCsv + * @param string $source + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getListeSurveillancesCsv($source='', $login='', $idClient=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($source)) $source = ''; + if (empty($idClient)) $idClient = 0; + + + debugLog('I',"getListeSurveillancesCsv Début $source $login $idClient",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $iDb = new WDB(); + $strClient = $strLogin = ''; + $exportPtf = false; + switch ($source) + { + case 'insee': + case 'annonces': + case 'bilans': + case 'score': + case 'actes': + case 'privileges': + case 'dirigeants': + break; + case 'portefeuille': + $source='score'; + $exportPtf=true; + break; + default: + $source=''; + break; + } + + if ($source<>'') $strSource = "AND source='$source' "; + else $strSource = ''; + + // Control idClient + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = "AND u.idClient=$idClient "; + + if ($this->User->profil=='SuperAdministrateur' || $this->User->profil=='Administrateur') { + // Surveillances de tous les utilisateurs du client + if (empty($login)) { + $login = ''; + //Surveillances de l'utilisateur + } else { + $strLogin = "AND s.login='$login' "; + } + } else { + //Par défaut préselection de l'utilisateur + $login = $this->User->login; + $strLogin = "AND s.login='$login' "; + } + + $fichierCsv = DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.csv"; + + if (file_exists($fichierCsv) && + date('Ymd', filemtime($fichierCsv))==date('Ymd') && + filesize($fichierCsv)>60 ) { + $size = filesize($fichierCsv); + $erreur = false; + $tabNom = array(); + $cache = 1; + } else { + unlink($fichierCsv); + if ($source=='score'){ + if ($this->User->typeScore==20) { + $strScore='v.indiScore20 AS indiScore20'; + $strScorePre='v.indiScore20Pre AS indiScore20Pre'; + } else { + $strScore='v.indiScore AS indiScore100'; + $strScorePre='v.indiScorePre AS indiScore100Pre'; + } + /*v.scoreZ, v.scoreZPre, v.scoreCH, v.scoreCHPre, + v.scoreAfdcc2, v.scoreAfdcc2Pre, v.situFi, v.situFiPre, v.infoNote, v.infoNotePre, + v.noteStruct, v.noteStructPre, v.noteFin, v.noteFinPre, v.tendance, v.tendancePre, */ + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi, + s.encoursClient, v.actif, v.procol, $strScore, v.encours, v.indiScoreDate, v.dateBilan, + $strScorePre, v.encoursPre, v.indiScoreDatePre, v.sourceModif, v.scoreSolv, v.scoreSolvPre, v.scoreDir, + v.scoreDirPre, v.scoreConf, v.scoreConfPre, + e.cj, e.capital, e.capitalDev, e.ape_entrep, e.tca, e.teff_entrep, + v.dateUpdate + FROM surveillances_site s, sdv1.utilisateurs u, sdv1.clients c, scores_surveillance v, etablissements e + WHERE s.source='score' $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id AND s.siren=v.siren AND s.siren=e.siren + GROUP BY loginUti, s.siren, s.nic, s.source, s.ref + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeSurveillancesCsv($source, $login, $idClient)", $sql); + } else { + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi + FROM surveillances_site s, sdv1.utilisateurs u, sdv1.clients c + WHERE 1 $strSource $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + } + debugLog('I',"getListeSurveillancesCsv SQL $sql",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $fp = fopen(DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.sql", 'w'); + fwrite($fp, $sql.EOL); + fclose($fp); + exec("php ".APPLICATION_PATH."/../batch/sql2csv.php jo ".DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.sql $fichierCsv > /dev/null &"); + $size=$cache=0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new ListeSurveillancesCsv(); + $result->Url = $hostname.DOC_WEB_URL."csv/listesurv-$source-$login-$idClient.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + debugLog('I','getListeSurveillancesCsv Url='.$hostname.DOC_WEB_URL."csv/listesurv-$source-$login-$idClient.csv, Taille=$size, Cache=$cache",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $output = new ListeSurveillancesCsvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getListeJalCollecte + * @return ListeJalCollecteReturn + */ + public function getListeJalCollecte() + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + + $iBodacc = new MBodacc(); + $tabJal = $iBodacc->getListeJalCollecte(); + foreach ($tabJal as $i=>$jal) + { + $jalCollecte = new JalCollecte(); + $jalCollecte->id = $i; + $jalCollecte->nom = $jal; + $tabRet[] = $jalCollecte; + } + $output = new ListeJalCollecteReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getListeFichierSurv + * @param string $login + * @param string $ref + * @param string $nomFic + * @return ListeFichierSurvReturn + */ + public function getListeFichierSurv($login, $ref='*', $nomFic='') + { + $this->authenticate(); + if (empty($ref)) $ref = '*'; + if (empty($nomFic)) $nomFic = ''; + $error = new ErrorType(); + //debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabFichier=$tabDates=array(); + $numAbo=substr($ref, 0,5); + if (strtolower($login)=='vwbank') { + $repClient='volkswagen bank'; + $ficClient='surveillanceBodacc_SURBODPRDCFTVWBANK'; + $numAbo=$ref='19300'; + } elseif (substr($login,0,6)=='apicil') { + $repClient='apicil'; + $ficClient='surveillanceBodacc_SURBODPRDCFTAPICIL'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='omni04') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodacca3m') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSMEDERIC'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodaccomni') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodacccrr') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSCRR'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='cpcambr13' || strtolower($login)=='cpcambr14') { + $repClient='cpcam des bouches du rhône'; + $ficClient='diffusionBodacc_DIFBODPRDMAICPCAM13'; + $numAbo=$ref=''; + } else { + $repClient='cnasea'; + $ficClient='surveillanceBodacc_SURBODTSTFTSCNASEA'; + } + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + if (!$dh) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Impossible d'ouvrir le dossier '/home/data/clients/$repClient/'"); + $error->errnum = 1; + $error->errmsg = "Impossible d'ouvrir le dossier client"; + } else { + while (false !== ($filename = readdir($dh))) { + if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,42)==$ficClient.$numAbo) { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($ref=='*' && $filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)<>'_') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)=='_' && $repClient=='apicil') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,38,8); + $tabClients[]=substr($filename,0,37); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,38)==$ficClient && substr($filename,38,1)=='_' && $repClient=='aggm mederic ') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,39,8); + $tabClients[]=substr($filename,0,38); + } + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic : fichier lu '$filename'", "Fichier lu '$filename'"); + } + /** Tableau des noms de fichier **/ + sort($tabFichier); + /** Tableau des dates de livraisons **/ + $tabDates=array_unique($tabDates); + sort($tabDates); + /** Tableau des Clients **/ + $tabClients=array_unique($tabClients); + sort($tabClients); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabDates); + + /*@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", + "Fichiers :".EOL. + print_r($tabFichier, true). + "Dates:".EOL. + print_r($tabDates, true). + "Clients :".EOL. + print_r($tabClients, true) + );*/ + + if ($ref=='*') { + $tabFichier = array(); + // Boucle sur les dates de livraison + foreach ($tabDates as $dateFic) { + if (strlen($dateFic)<>8) continue; + if (!file_exists(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv") || + filesize(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv")==0) { + + $fpW=fopen(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv",'w'); + $entete=true; + // Boucle afin de vérifier si on est sur le bon client + foreach ($tabClients as $nomClient) { + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + while (false !== ($filename = readdir($dh))) { + if (substr($filename,0,51)==$nomClient.'_'.$dateFic && substr($filename,-4)=='.csv') { + $fichier=$filename; + //break; + } + } + $fpR=fopen(DOC_WEB_LOCAL."clients/$repClient/$fichier",'r'); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>array(($fichier)));//die; + if ($fpR) { + while (!feof($fpR)) { + $ligne=trim(fgets($fpR)); + if (substr($ligne,0,5)=='Siren' && $entete==true) { + fwrite($fpW, 'SITE;'.$ligne.EOL); + $entete=false; + } + elseif (substr($ligne,0,5)<>'Siren' && trim($ligne)<>'') { + fwrite($fpW, strtr($nomClient, array('surveillanceBodacc_SURBODTSTFTS'=>'', + 'surveillanceBodacc_SURBODPRDCFT'=>'')).';'.$ligne.EOL); + } + } + fclose($fpR); + } + } + fclose($fpW); + } + if (strlen($dateFic)==8) + $tabFichier[]=$ficClient.'_'.$dateFic.'.csv'; + } + } + rsort($tabFichier); + + if ($nomFic<>'') { + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Avant BZ2'); + if (!file_exists(DOC_WEB_LOCAL."/csv/$nomFic.bz2") || + filesize(DOC_WEB_LOCAL."/csv/$nomFic.bz2")<=14) { + $string=file_get_contents("/home/data/clients/$repClient/$nomFic"); + if ($string===false) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Ouverture impossible du fichier '/home/data/clients/$repClient/$nomFic'"); + } + $bz = bzopen(DOC_WEB_LOCAL."/csv/$nomFic.bz2",'w'); + if ($bz) { + bzwrite($bz, $string, strlen($string)); + bzclose($bz); + } + } /*else + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Sans BZ2'); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Après BZ2'); + */ + } + debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic : nb fichiers=".count($tabFichier),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = array(); + foreach($tabFichier as $fichier){ + $retFichier = new ListeFichierSurv(); + $retFichier->UrlFichier = $hostname.'/data/csv/'.$fichier; + $result[] = $retFichier; + } + } + $output = new ListeFichierSurvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Geocodage d'une adresse + * @param string $adresse + * @param string $cp + * @param string $ville + * @param string $pays + * @return GeoCodeReturn + */ + public function geoCode($adresse, $cp, $ville, $pays='France') + { + $this->authenticate(); + + $ligne = date('YmdHis').";$siren;MMap AVANT"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $mMap = new MMap($adresse, $cp, $ville, $pays); + + $ligne=date('YmdHis').";$siren;MMap APRES"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $geocode = new GeoCode(); + $geocode->latitude = $mMap->latitudeDec; + $geocode->longitude = $mMap->longitudeDec; + $geocode->precis = $mMap->precision; + $geocode->adresseValidee = $mMap->adresseValidee; + $geocode->latitudeDeg = $mMap->latitudeDeg; + $geocode->longitudeDeg = $mMap->longitudeDeg; + + $output = new GeoCodeReturn(); + $output->error = $error; + $output->result = $geocode; + } + + /** + * Recherche d'entreprise par leur actionnaire + * @param string $nom Raison sociale / Nom de l'actionnaire (obligatoire) + * @param string $cpVille CP, Ville + * @param string $siren Siren de l'actionnaire + * @param string $pays Pays de l'actionnaire + * @param string $pctMin Niveau de détention Minimam de l'actionnaire + * @param string $pctMax Niveau de détention Maximum de l'actionnaire + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur les noms et prénoms (si true) + * @return SearchActReturn + */ + public function searchAct($nom, $cpVille='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + debugLog('I',"Recherche Actionnaire de $nom, $cpVille (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!empty($pays)){ + $wdb = new WDB('jo'); + $result = $wdb->select('tabPays', 'codPays3', "libPays LIKE '".$pays); + if (count($result>0)){ + $pays = $result[0]['codPays3']; + } else { + $pays = ''; + } + } + + if (empty($cpVille)) $cpVille = ''; + if (empty($siren)) $siren = ''; + if (empty($pctMin)) $pctMin = 0; + if (empty($pctMax)) $pctMax = 100; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + + $mLiens = new MLiens(''); + // rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence) + $etabs = $mLiens->rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence); + + $iInsee = new MInsee(); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $act = new EntrepriseActItem(); + $act->id = $etab['id']; + $act->Pertinence = $etab['Pertinence']; + $act->Siret = $etab['Siret']; + $act->Siege = $etab['Siege']; + $act->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $act->Nom2 = prepareString($etab['Nom2']); + $act->Sigle = prepareString($etab['Sigle']); + $act->Enseigne = prepareString($etab['Enseigne']); + $act->Adresse = prepareString($etab['Adresse']); + $act->Adresse2 = prepareString($etab['Adresse2']); + $act->CP = $etab['CP']; + $act->Ville = prepareString($etab['Ville']); + $act->Tel = $etab['Tel']; + $act->Fax = $etab['Fax']; + $act->FJ = $etab['FJ']; + $act->FJLib = prepareString($iInsee->getLibelleFJ($etab['FJ'])); + $act->Siren = $etab['Siren']; + $act->Nic = $etab['Nic']; + $act->Actif = $etab['Actif']; + $act->NafEtab = $etab['NafEtab']; // Etablissement + $act->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $act->NafEnt = $etab['NafEnt']; // Entreprise + $act->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + $act->ActNomRs = $etab['ActNomRs']; + $act->ActPays = $etab['ActPays']; + $act->ActDateLien = $etab['ActDateLien']; + $act->ActActif = $etab['ActActif']; + $act->ActPmin = $etab['ActPmin']; + $tabRet[] = $act; + } + + $output = new SearchActReturn(); + $output->nbReponses = $etabs['nbReponses']; + $output->nbReponsesTotal = $etabs['nbReponsesTotal']; + $output->result = $tabRet; + + if ($tabRet['nbReponses']==0) { + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + return $output; + } + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param string $siren + * @param string $infoEnq Informations pour la demande d'enquête
+ * InfoEnq[Entrep][Tel]
+ * InfoEnq[Entrep][Fax]
+ * InfoEnq[Entrep][AutreTel]
+ * InfoEnq[Entrep][Mail]
+ * InfoEnq[Entrep][AutreMail]
+ * InfoEnq[Entrep][Web]
+ * InfoEnq[Entrep][Rib][Banque]
+ * InfoEnq[Entrep][Rib][Guichet]
+ * InfoEnq[Entrep][Rib][Compte]
+ * InfoEnq[Entrep][Rib][Cle]
+ * InfoEnq[Encours]
+ * InfoEnq[NbEcheances]
+ * InfoEnq[AvisAssureur]
+ * InfoEnq[Type]
+ * InfoEnq[Delai]
+ * InfoEnq[PrecisionsChoix]
+ * InfoEnq[Precisions][MontantCA]
+ * InfoEnq[Precisions][Motif]
+ * InfoEnq[Precisions][Autre]
+ * InfoEnq[Anciennete]
+ * InfoEnq[AncienneteDuree]
+ * InfoEnq[ImpayeesChoix]
+ * InfoEnq[Impayees][Montant]
+ * InfoEnq[Impayees][Nombre]
+ * InfoEnq[Impayees][Date]
+ * InfoEnq[RetardPaiementChoix]
+ * InfoEnq[RetardPaiement][Montant]
+ * InfoEnq[RetardPaiement][Nombre]
+ * InfoEnq[RetardPaiement][Date]
+ * InfoEnq[LitigeChoix]
+ * InfoEnq[Litige][Precisions]
+ * InfoEnq[Observation]
+ * @param string $infoDemande Informations sur l'utilisateur
+ * InfoUser[Profil]
+ * InfoUser[ProfilAutre]
+ * InfoUser[Identite]
+ * InfoUser[Tel]
+ * InfoUser[Fax]
+ * InfoUser[Email]
+ * InfoUser[Ref]
+ * @return CommandeEnqueteReturn + */ + public function commandeEnquete($siren, $infoEnq, $infoDemande) + { + $this->authenticate(); + //Initialisation + $infoEnq = json_decode($infoEnq); + $infoDemande = json_decode($infoDemande); + + $mail = trim($infoDemande['Email']); + if ($mail=='') { + $mail=$this->User->email; + } + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source' => 'intersud', // 'greffes', 'asso', 'graydon' + 'login' => $tabInfoUser['login'], + 'emailCommande' => $mail, + 'siren' => $siren, + 'refDocument' => serialize($infoDemande), + 'refCommande' => serialize($infoEnq), + 'dateCommande' => DATETIME, + // 'idClient'=> $tabInfoUser['idClient'], + ); + debugLog('I',"Intersud, début commande sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo = print_r($infoEnq, 1).EOL.print_r($infoDemande,1).EOL; + + $idClient = $this->User->idClient; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande = "NOM et Prénom du client demandeur : ".$infoDemande['Identite'].EOL; + $strInfoCommande.= "Email du client demandeur : $mail".EOL; + $strInfoCommande.= "Tel/Fax du demandeur : ".$infoDemande['Tel'].' / '.$infoDemande['Fax'].EOL; + $strInfoCommande.= "Profil du demandeur : ".trim($infoDemande['Profil'].' '.$infoDemande['ProfilAutre']).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login='YLENA'; // Demandes en test + $pass='WYLFE'; + $nomClient=$strInfoCommande=''; + $typeEnqLog='enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + /** Connexion à l'Extranet Intersud **/ + $url = 'http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array( + 'login' => $login, + 'pwd' => $pass, + ); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + //wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + throw new SoapFault('1',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + $intersudNomPrenom=$intersudRaisonSociale=''; + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudNomPrenom=trim($matches[1]); + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudRaisonSociale=trim($matches[1]); + debugLog('I',"Intersud, connexion via $login pour $intersudRaisonSociale ($intersudNomPrenom, cookie=$cookie)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /* + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, EOL.DATETIME.EOL.print_r($page,true).'========================================================================================================='.EOL.EOL); + @fclose($fp); + die(); + */ + /** Page formulaire de demande d'enquête **/ + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible au formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('2',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ".DATETIME." + Date et heure de la commande : ".date('d/m/Y - H:i')." + Origine de la commande : $nomClient + $strInfoCommande + + CA : ".$infoEnq['Precisions']['MontantCA']." + Motif de la demande : ".trim($infoEnq['Precisions']['Motif'].' '.$infoEnq['Precisions']['Autre'])." + Type de la demande : ".$infoEnq['Precisions']['Type']." + Anciennete de la relation : ".$infoEnq['Anciennete'].' '.$infoEnq['AncienneteDuree']." + Observations : ".$infoEnq['Observation'].EOL; + + if ($infoEnq['ImpayeesChoix']<>'non') + $comment.="Impayé(s) : ".$infoEnq['Impayees']['Nombre']." impayé(s) pour un montant de ".$infoEnq['Impayees']['Montant']." en date du ".$infoEnq['Impayees']['Date'].EOL; + + if ($infoEnq['RetardPaiementChoix']<>'non') + $comment.="Retard(s) de paiement : ".$infoEnq['RetardPaiement']['Nombre']." retard(s) pour un montant de ".$infoEnq['RetardPaiement']['Montant']." en date du ".$infoEnq['RetardPaiement']['Date'].EOL; + + if ($infoEnq['LitigeChoix']<>'non') + $comment.="Présence de litige(s) : ".$infoEnq['Litige']['Precisions'].EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infoEnq['Type'])) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infoEnq['Entrep']['Rib']))<>''){ + $iDbCrm->insert('banques', array( + 'siren' => $siren, + 'libBanqueGuichet' => '', + 'precis' => 1, + 'codeBanque' => $infoEnq['Entrep']['Rib']['Banque'], + 'codeGuichet' => $infoEnq['Entrep']['Rib']['Guichet'], + 'numCompte' => $infoEnq['Entrep']['Rib']['Compte'].$infoEnq['Entrep']['Rib']['Cle'], + 'dateSource' => DATETIME, + ), true); + } + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc' => $tabIdentite['Nom'], + 'cible_enk' => 9, // 9 + 'siret' => $siren, + 'acti' => '', + 'soc_exp' => $tabInterSud['soc_exp'], + 'type_enk' => $enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri' => '', + 'adr' => $tabIdentite['Adresse'], + 'ref_exp' => $tabInterSud['ref_exp'], + 'autre_type_enk' => '', // Texte libre + 'adr2' => $tabIdentite['Adresse2'], + 'delai_enk' => $enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville' => $tabIdentite['Ville'], + 'cp' => $tabIdentite['CP'], + 'pays' => '', // International ? + 'nom_exp' => $tabInterSud['nom_exp'], + 'tel' => $tabIdentite['Tel'], + 'port' => $infoEnq['Entrep']['AutreTel'], + 'tel_exp' => $tabInterSud['tel_exp'], + 'bank' => trim(implode(' ', $infoEnq['Entrep']['Rib'])), + 'int_enk' => $tabInterSud['int_enk'], // International ? + 'encours' => $infoEnq['Encours'], + 'nb_ech' => $infoEnq['NbEcheances'], + 'delai2_enk' => $tabInterSud['delai2_enk'], // International ? + 'email_exp' => $tabInterSud['email_exp'], + 'cred' => '', + 'comment' => urlencode($comment), + 'val_ret' => $tabInterSud['val_ret'], + ); + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('3',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $output = new CommandeEnqueteReturn(); + $output->siren = $siren; + $output->emailCommande = $mail; + $output->dateCommande = DATETIME; + $output->refCmde = 'i'.$ret; + + //$strInfoCommande $mail + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url = 'http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + return $output; + } + + /** + * Retourne l'ensemble des informations des dirigeants opérationnels (non statutaires) de l'entreprise + * @param string $siren Siren de l'entreprise + * @return DirigeantOp[] + */ + public function getDirigeantsOp($siren) + { + $this->authenticate(); + + debugLog('I',"Dirigeants opérationnels demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeantsOp($siren); + $tabRet = array(); + if (count($dirs)>0){ + foreach ($dirs as $nb => $dir) { + $objet = new DirigeantOp(); + $objet->Code = $dir['Fonction']; + $objet->Titre = prepareString($dir['Titre']); + $objet->Societe = prepareString($dir['Societe']); + $objet->Civilite = prepareString($dir['Civilite']); + $objet->Nom = prepareString($dir['Nom']); + $objet->Prenom = prepareString($dir['Prenom']); + $objet->NomUsage = prepareString($dir['NomUsage']); + $objet->NaissDate = $dir['NaissDate'];// 07/09/1961 + $objet->NaissVille = prepareString($dir['NaissVille']); // LE RUSSEY + $objet->NaissDepPays = prepareString($dir['NaissDepPays']); // LE RUSSEY + $objet->Ancien = $dir['Ancien']; + $objet->DateFct = $dir['DateFct']; + + $tabRet[] = $objet; + } + } + $this->wsLog('dirigeantsOp', $siren); + debugLog('I', 'Nb Dirigeants Op retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return $tabRet; + } + + /** + * Liste de tous les dépôts enregistrés à l'INPI pour une entreprise + * @param string $siren Siren de l'entreprise + * @return Depot[] + */ + public function getListeDepots($siren) + { + $this->authenticate(); + + debugLog('I',"Liste des dépots INPI pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iRncs=new MRncs(); + $evens=$iRncs->getListeDepots($siren); + $tabRet = array(); + if (count($evens)>0){ + foreach ($evens as $nb=>$even){ + $objet = new Depot(); + $objet->CodeDepot = $even['codDepot']; + $objet->LibDepot = prepareString($even['libDepot']); + $objet->DateDepot = $even['datDepot']; + $objet->RefDepot = $even['refDepot']; + $objet->DateRncs = $even['datRncs']; + $objet->DateMAJ = $even['datSed']; + + $tabRet[] = $objet; + } + } + debugLog('I', 'Nb dépôts retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return $tabRet; + } + + + /** + * Enter description here ... + * @param string $siret + * @param integer $id + * @return IdentiteLight + */ + public function getIdentiteLight($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) { + $id = 0; + } + + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } + if ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic, $id); + + $output = new IdentiteLight(); + $output->id = $tabIdentite['id']; + $output->Siret = $tabIdentite['Siret']; + $output->Siege = $tabIdentite['Siege']; + $output->Nom = $tabIdentite['Nom']; + $output->Tribunal = $tabIdentite['Tribunal']; + $output->Sigle = $tabIdentite['Sigle']; + $output->Enseigne = $tabIdentite['Enseigne']; + $output->Adresse = $tabIdentite['Adresse']; + $output->Adresse2 = $tabIdentite['Adresse2']; + $output->AdresseNum = $tabIdentite['AdresseNum']; + $output->AdresseBtq = $tabIdentite['AdresseBtq']; + $output->AdresseVoie = $tabIdentite['AdresseVoie']; + $output->AdresseRue = $tabIdentite['AdresseRue']; + $output->CP = $tabIdentite['CP']; + $output->Ville = $tabIdentite['Ville']; + $output->Tel = $tabIdentite['Tel']; + $output->Fax = $tabIdentite['Fax']; + $output->FJ = $tabIdentite['FJ']; + $output->FJ_Lib = $tabIdentite['FJ_lib']; + $output->Siren = $tabIdentite['Siren']; + $output->Nic = $tabIdentite['Nic']; + $output->Actif = $tabIdentite['Actif']; + $output->NafEtab = $tabIdentite['NafEtab']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->NafEtabLib = $tabIdentite['NafEtabLib']; + $output->AutreId = $tabIdentite['AutreId']; + $output->Source = $tabIdentite['Source']; + $output->SourceId = $tabIdentite['SourceId']; + $output->Dept = $tabIdentite['Dept']; + $output->codeCommune = $tabIdentite['codeCommune']; + $output->Capital = $tabIdentite['Capital']; + $output->CapitalDev = $tabIdentite['CapitalDev']; + $output->TrancheCA = $tabIdentite['TrancheCA']; + $output->TrancheCALib = $tabIdentite['TrancheCALib']; + $output->EffEnTr = $tabIdentite['EffEnTr']; + $output->EffEnTrLib = $tabIdentite['EffEnTrLib']; + $output->EffEtTr = $tabIdentite['EffEtTr']; + $output->EffEtTrLib = $tabIdentite['EffEtTrLib']; + return $output; + } + + /** + * Retourne les éléments du groupes + * @param string $siren + * @param int $pctMin (33, 40 ,50) + * @param int $nbNiveaux + * @return string + */ + public function getGroupesArbo($siren, $pctMin=33, $nbNiveaux=10) + { + $this->authenticate(); + + if ( empty($pctMin) || !in_array($pctMin, array(33, 40, 50)) ) { $pctMin = 33; } + if ( empty($nbNiveaux) ) { $nbNiveaux = 10; } + + if ( strlen($siren)!=9 || intval($siren)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + require_once 'Metier/partenaires/classMLiens.php'; + $liens = new MLiens($siren); + $retour = $liens->getArborescence($siren, $pctMin, $nbNiveaux); + + $this->wsLog('groupesarbo', $siren); + return json_encode($retour); + } + + + /** + * Retourne les information du groupe, tête de pont + * @param string $siren + * @return GroupeInfos + */ + public function getGroupeInfos($siren) + { + $this->authenticate(); + + if ( strlen($siren)!=9 || intval($siren)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iDb = new WDB('jo'); + $tmp = $iDb->select('etablissements_act', + 'raisonSociale, enseigne, sigle, identite_pre, adr_num, adr_btq, adr_typeVoie, adr_libVoie, adr_comp, adr_cp, adr_ville, adr_dep, adr_com, tel, fax, siren, sirenGrp', + "siren=(SELECT distinct sirenGrp FROM etablissements_act WHERE siren=$siren AND siege=1) LIMIT 0,1", false, MYSQL_ASSOC); + $tabEnt = $tmp[0]; + + $sirenGrp = $tabEnt['siren']; + + if ($sirenGrp<1000) { + throw new SoapFault('Error', 'Aucun siren de groupe'); + } + + /** Table des Nafs5 => Secteurs **/ + $tmp = $iDb->select('tabNaf5', 'codNaf2, codNaf1', '1 GROUP BY codNAf2', false, MYSQL_ASSOC); + $tabNAf2 = array(); + foreach ($tmp as $tmp2) { + $tabNAf2[$tmp2['codNaf2']]=$tmp2['codNaf1']; + } + + $tabNaf2Lib = array( + 'A'=>'Agriculture, sylviculture et pêche', + 'B'=>'Industries extractives', + 'C'=>'Industrie manufacturière', + 'D'=>'Production et distribution d\'électricité, de gaz, de vapeur et d\'air conditionné', + 'E'=>'Production et distribution d\'eau ; assainissement, gestion des déchets et dépollution', + 'F'=>'Construction', + 'G'=>'Commerce ; réparation d\'automobiles et de motocycles', + 'H'=>'Transports et entreposage', + 'I'=>'Hébergement et restauration', + 'J'=>'Information et communication', + 'K'=>'Activités financières et d\'assurance', + 'L'=>'Activités immobilières', + 'M'=>'Activités spécialisées, scientifiques et techniques', + 'N'=>'Activités de services administratifs et de soutien', + 'O'=>'Administration publique', + 'P'=>'Enseignement', + 'Q'=>'Santé humaine et action sociale', + 'R'=>'Arts, spectacles et activités récréatives', + 'S'=>'Autres activités de services', + 'T'=>'Activités des ménages en tant qu\'employeurs ; activités indifférenciées des ménages en tant que producteurs de biens et services pour usage propre', + 'U'=>'Activités extra-territoriales', + ); + + $iInsee = new MInsee(); + $tabId = $iInsee->getIdentiteEntreprise($sirenGrp); + + //Chargement retour + $output = new GroupeInfos(); + $output->grpNom = $tabEnt['raisonSociale']; + $output->grpEnseigne = $tabEnt['enseigne']; + $output->grpSigle = $tabEnt['sigle']; + $output->grpAdrNum = $tabEnt['adr_num']; + $output->grpAdrBtq = $tabEnt['adr_btq']; + $output->grpAdrTypeVoie = $tabEnt['adr_typeVoie']; + $output->grpadrLibVoie = $tabEnt['adr_libVoie']; + $output->grpAdrComp = $tabEnt['adr_comp']; + $output->grpAdrCP = $tabEnt['adr_cp']; + $output->grpAdrVille = $tabEnt['adr_ville']; + $output->grpAdrDep = $tabEnt['adr_dep']; + $output->grpAdrCom = $tabEnt['adr_com']; + $output->grpTel = $tabEnt['tel']; + $output->grpFax = $tabEnt['fax']; + $output->grpSiren = $tabEnt['siren']; + $output->grpTva = $tabId['TvaNumero']; + $output->grpIsin = $tabId['Isin']; + $output->grpNumRC = $tabId['numRC']; + $output->grpTribunal = $tabId['TribunalLib']; + $output->grpWeb = $tabId['Web']; + + $grpNbEnt = $grpEffectif = $grpCAExp = $grpCA = $nbProcol = 0; + $grpDateCrea = $grpDateImmat = date('Ymd'); + + $tmp = $iDb->select('jo.etablissements_act e', + 'e.siren, e.eff_entrep, e.dateCrea_ent AS dateCrea, e.dateImmat*1 AS dateImmat, e.bilFK, e.bilFL, e.bilYP, e.ape_entrep, e.avisCs, e.procolHisto', + "e.sirenGrp=$sirenGrp AND e.siege=1", false, MYSQL_ASSOC); + + $tabSirenGrp = array(); + $tabSecteur = array(); + $tabAvis = array(); + if ( count($tmp)>0 ) { + foreach ($tmp as $tabEnt) + { + $tabSirenGrp[] = $tabEnt['siren']; + $grpNbEnt++; + + if ($tabEnt['bilYP']>$tabEnt['eff_entrep']) + $grpEffectif+=$tabEnt['bilYP']; + else + $grpEffectif+=$tabEnt['eff_entrep']; + + if ($tabEnt['procolHisto']*1==1) $nbProcol++; + + if ($grpDateCrea>$tabEnt['dateCrea'] && $tabEnt['dateCrea']>=19000101) + $grpDateCrea=$tabEnt['dateCrea']; + + if ($grpDateImmat>$tabEnt['dateImmat'] && $tabEnt['dateImmat']>=19000101) + $grpDateImmat=$tabEnt['dateImmat']; + + $grpCAExp+=$tabEnt['bilFK']; + $grpCA+=$tabEnt['bilFL']; + + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['nb']++; + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['ca']+=$tabEnt['bilFL']; + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['eff']+=$tabEnt['eff_entrep']; + + $tabAvis[$tabEnt['avisCs']]++; + } + } + $output->grpNbProcolHisto = $nbProcol; + $output->grpCAExport = $grpCAExp; + $output->grpCA = $grpCA; + + if ($grpCA>=500000000) + $output->grpGrandGroupeFr=1; + else + $output->grpGrandGroupeFr=0; + + $output->grpNbEntrep = $grpNbEnt; + $output->grpEffectif = $grpEffectif; + + $output->grpAnneCreation = ''; + if ($grpDateCrea<$grpDateImmat) + $output->grpAnneCreation = substr($grpDateCrea,0,4); + else + $output->grpAnneCreation = substr($grpDateImmat,0,4); + + //@todo : transformer le tableau + $output->avisCs = json_encode($tabAvis); // Vérifier les procol + + $tabSecteur2 = array(); + if ( count($tabSecteur)>0 ) { + foreach ($tabSecteur as $secteur=>$tmp) { + $info = new GroupeInfosSecteur(); + $info->code = $secteur; + $info->lib = $tabNaf2Lib[$secteur]; + $info->entrepNb = $tmp['nb']; + $info->entrepTx = round($tmp['nb']*100/$grpNbEnt,2); + $info->caNb = $tmp['ca']; + $info->caTx = round($tmp['ca']*100/$grpCA,2); + $info->effNb = $tmp['eff']; + $info->effTx = round($tmp['eff']*100/$grpEffectif,2); + $tabSecteur2[] = $info; + } + } + $output->secteur = $tabSecteur2; //@todo : transformer le tableau + + $this->wsLog('groupeinfos', $siren); + return $output; + } + + +} \ No newline at end of file diff --git a/library/WsScore/Interne/v0.5/Service.php b/library/WsScore/Interne/v0.5/Service.php new file mode 100644 index 00000000..7933117d --- /dev/null +++ b/library/WsScore/Interne/v0.5/Service.php @@ -0,0 +1,2704 @@ +authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges detail sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesDetail($siren, $tabTypes); //@todo : date + + $tabRet = array(); + if (count($ret)>0) { + foreach ($ret as $item ) { + $privileges = new PrivilegesDetail(); + $privileges->numDebiteur = $item['numDebiteur']; + $privileges->greffe = $item['greffe']; + $privileges->greffeLib = $item['greffeLib']; + $privileges->dateEven = $item['dateEven']; + $privileges->dateFraiche = $item['dateFraiche']; + $privileges->dateSD = $item['dateSD']; + $privileges->insType = $item['insType']; + $privileges->insTypeLib = $item['insTypeLib']; + $privileges->insNum = $item['insNum']; + $privileges->insDate = $item['insDate']; + $privileges->insDateEch = $item['insDateEch']; + $privileges->insObjet = $item['insObjet']; + $privileges->insMontant = $item['insMontant']; + $privileges->insDev = $item['insDev']; + $privileges->insDateFin = $item['insDateFin']; + $privileges->radDate = $item['radDate']; + $privileges->radMention = $item['radMention']; + $privileges->radPartiel = $item['radPartiel']; + $privileges->radPartMt = $item['radPartMt']; + $privileges->radDev = $item['radDev']; + $privileges->creNom = $item['creNom']; + $privileges->creAdresse1 = $item['creAdresse1']; + $privileges->creAdresse2 = $item['creAdresse2']; + $privileges->creAdresse3 = $item['creAdresse3']; + $privileges->creCP = $item['creCP']; + $privileges->creVille = $item['creVille']; + $privileges->crePays = $item['crePays']; + $privileges->creAutres = $item['creAutres']; + $tabRet[] = $privileges; + } + } + $this->wsLog('privdetail', $siren, join(',',$tabTypes)); + $output = new PrivilegesDetailReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les privilèges cumulés + * @param string $siren + * @param array $tabTypes + * @return PrivilegesCumulReturn + */ + public function getPrivilegesCumul($siren, $tabTypes=array('03','04')) + { + $this->authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges cumul sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesCumul($siren, $tabTypes); + $tabRet = array(); + + if (isset($ret['03']) && count($ret['03']>0)){ + $value = $ret['03']; + $priv = new PrivilegesCumul(); + $priv->insType = '03'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + + if (isset($ret['04']) && count($ret['04']>0)){ + $value = $ret['04']; + $priv = new PrivilegesCumul(); + $priv->insType = '04'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + $this->wsLog('privcumul', $siren, print_r($tabTypes,1)); + $output = new PrivilegesCumulReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Liste les mandataires correspondant à un nom donné + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @param int $cpDep Code postal ou département du mandataire + * @return SearchMandatairesReturn + */ + public function searchMandataires($nom, $type=array('A','M'), $cpDep=0) + { + $this->authenticate(); + + //Initialisation + if (empty($type)) $type = array('A','M'); + if (empty($cpDep)) $cpDep = 0; + $tabRet = array(); + + debugLog('I',"Recherche de Mandataires '$nom' (Dep=$cpDep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabTmp = $iInsee->searchMandataires($nom, true, $type, $cpDep); + + foreach ($tabTmp as $i=>$mand) + { + $mandataire = new SearchMandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = utf8_encode($mand); + $tabRet[] = $mandataire; + + } + $output = new SearchMandatairesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des tribunaux ou Compétences demandées + * @param array|string $tabTypes Tableau des types de Compétences demandés 'C':Commerce, 'I':Instance, 'G':TGI, 'A':Préfectures, 'B':Sous-préf, 'D':Tribunal Administratif, 'H':Prud'hommes, 'L': Cour d'Appel, 'M': Tribunal Mixte, 'O':CCI, 'V': Cour Administrative d'Appel + * @return TribunauxReturn + **/ + public function getTribunaux($tabTypes) + { + $this->authenticate(); + + //Initialisation + if (empty($tabTypes)) $tabTypes = array(); + if (is_string($tabTypes)) $tabTypes = (array)$tabTypes; + + $iBodacc = new MBodacc(); + debugLog('I',"Liste des tribunaux demandées",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabTmp = $iBodacc->getListeTribunaux(); + //@todo : Retourner liste en ordre alphabétique + $tabRet = array(); + if (count($tabTypes)==0) { + foreach ($tabTmp as $i => $tribunal){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } else { + foreach ($tabTmp as $i=>$tribunal){ + $type = substr($i,-1); + if ( in_array($type, $tabTypes) ){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } + } + $this->wsLog('tribunaux', '', print_r($tabTypes,1)); + $output = new TribunauxReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Enregistre une action utilisateur pour la facturation + * @param string $page + * @param string $siret + * @param int $id + * @param string $ref + * @return void + */ + public function setLog($page, $siret, $id=0, $ref='') + { + $this->authenticate(); + + //Initialisation + if (empty($id)) $id = 0; + if (empty($ref)) $ref = ''; + if ( $id!=0 ) { + $ref2=''.$id.'/'.$ref; + } else { + $ref2=$ref; + } + $this->wsLog($page, $siret, $ref2); + debugLog('I',"Insertion d'un log pour la page $page $siret $ref2",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + + /** + * Met a jour les informations sur un mandataire + * @param SetInfosMandataire $infos Informations sur le mandataire à créer ou à ajouter (ajout si id absent) + * @return SetMandataireReturn + **/ + public function setMandataire(SetInfosMandataire $infos) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $result = true; + + $iDb = new WDB(); + /** Nom et Identifiant de l'opérateur de saisie **/ + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('utilisateurs', 'id', "login='".$this->User->login."'"); + $idUser = $rep[0][0]; + + //$infos = serialize($tabInfos); + debugLog('I',"Ajout/MAJ de mandaitaire ".print_r($infos,1)." demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $type = substr(strtoupper($infos->type),0,1); + $stag = substr(strtoupper($infos->type),1,1); + if ($stag=='S') { $stag=1; } else { $stag=0; } + if ($type=='A' || $type=='H' || $type=='M' || $type=='V' || + $type=='N' || $type=='T') + { + $tabUpdate=array( + 'sirenGrp' => substr($infos->sirenGrp,0,9)*1, + 'nicGrp' => substr($infos->sirenGrp,9,5)*1, + 'sirenMand' => substr($infos->sirenMand,0,9)*1, + 'nicMand' => substr($infos->sirenMand,9,5)*1, + 'Nom' => ucwords(strtolower($infos->Nom)), + 'Prenom' => ucwords(strtolower($infos->Prenom)), + 'type' => $type, + 'stagiaire' => $stag, + 'coursAppel' => intval($infos->coursAppel), + 'coursAppel2' => intval($infos->coursAppel2), + 'tribunal' => $infos->tribunal, + 'Statut' => strtoupper($infos->Statut), + 'adresse' => ucwords($infos->adresse), + 'adresseComp' => strtoupper($infos->adresseComp), + 'cp' => intval($infos->cp), + 'ville' => strtoupper($infos->ville), + 'tel' => $infos->tel, + 'fax' => $infos->fax, + 'email' => $infos->email, + 'web' => $infos->web, + 'contact' => $infos->contact, + 'idUser' => $idUser, + ); + } + $id = str_replace('m','', ''.$infos->id)*1; + if (intval($id)!=0) { + // MAJ + if (!$iDb->update('tabMandataires', $tabUpdate, "id=$id", true)) { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $result = false; + } + } else { + // Insertion + if (!$iDb->insert('tabMandataires', array_merge($tabUpdate,array('dateInsert'=>date('YmdHis'))), true)) { + $error->errnum = 1; + $error->errmsg = 'Insertion impossible'; + $result = false; + } + } + $output = new SetMandataireReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le mandataire par son id + * @param int $idMand Identifiant du mandataire + * @return MandataireReturn + */ + public function getMandataire($idMand) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + debugLog('I',"Donne le Mandataires correspondant à $idMand",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new classMInsee(); + $tabRet = $iInsee->getMandataire($idMand); + $mandataire = new MandataireDetail(); + $mandataire->Nom = $tabRet['Nom']; + $mandataire->Prenom = $tabRet['Prenom']; + $mandataire->tribunal = $tabRet['tribunal']; + $mandataire->adresse = $tabRet['adresse']; + $mandataire->adresseComp = $tabRet['adresseComp']; + $mandataire->ville = $tabRet['ville']; + $mandataire->email = $tabRet['email']; + $mandataire->web = $tabRet['web']; + $mandataire->contact = $tabRet['contact']; + $output = new MandataireReturn(); + $output->error = $error; + $output->result = $mandataire; + return $output; + } + + /** + * Liste les mandataires compétentes pour une cours d'appel donnée + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @return MandatairesReturn + */ + public function getMandataires($codeTribunal=0, $type=array('A','M')) + { + $this->authenticate(); + //Initialisation + $iInsee = new MInsee(); + $error = new ErrorType(); + $trib = serialize($codeTribunal); + debugLog('I',"Liste des Mandaitaires ou Administrateur du Tribunal/Cours d'Appel $trib demandé",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!is_array($codeTribunal) && strlen($codeTribunal)>3 && $codeTribunal*1==0) + { + // $codeTribunal est un identifiant de tribunal + $iBodacc = new MBodacc(); + $tabTmp = $iInsee->getMandataires(array($iBodacc->getTribunalIdCA($codeTribunal)), true, $type); + } + elseif ($codeTribunal*1==0) + { + // On veut tous les mandataires + $tabTmp = $iInsee->getMandataires(array(), true, $type); + } + elseif (is_array($codeTribunal)) + { + // On veut les mandataires d'une CA + $tabTmp = $iInsee->getMandataires($codeTribunal, true, $type); + } + $tabRet = array(); + foreach ($tabTmp as $i=>$mand){ + $mandataire = new Mandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = $mand; + $tabRet[]= $mandataire; + } + $output = new MandatairesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des conventions + * @param string $siren + * @return ListeConventionsReturn + */ + public function getListeConventions($siren) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + debugLog('I',"Liste des conventions demandée pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)<>9){ + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren Siret inexistant'; + + } elseif ($siren*1==0){ + + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren); + + if (empty($tabIdentite) && isset($tabIdentite['erreur']) && + $tabIdentite['erreur']<>''){ + + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $naf = $tabIdentite['NafEnt']; + $trancheEffectif = $tabIdentite['EffEnTr']; + $effectif = $tabIdentite['Effectif']; + $fj = $tabIdentite['entreprise']['FJCodeEntrep']; + + $isolv = new MSolvabilite($siren, $naf, $trancheEffectif, + $effectif, $tabIdentite['CP'], $fj, $tabIdentite['Capital'], + $tabIdentite['CapitalDev'], $tabIdentite['DateCreaEn'], + $tabIdentite['DateCreaEt'] + ); + $noteStructure = $isolv->getSolvabilite(); + $naf4 = $isolv->getNaf4($naf); + + $tabTmp = $iInsee->listeConventions($naf4, $tabIdentite['Dept']); + foreach ($tabTmp as $conv) + { + $convention = new Convention(); + $convention->idCC = $conv['id CC']; + $convention->nomCC = $conv['nom CC']; + $convention->infoCC = $conv['infoCC']; + $convention->editorCC = $conv['editeur CC']; + $convention->nbPageCC = $conv['nb page CC']; + $convention->isbnCC = $conv['isbn CC']; + $convention->dateCC = $conv['date edition CC']; + $convention->joCCmaj = $conv['joCCmaj']; + $tabRet[] = $convention; + } + $this->wsLog('conventions',$siren); + } + } + + $output = new ListeConventionsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Donne la cours d'appel d'un tribunal par son code + * @param string $codeTribunal Code BODACC sur 6 caractères du tribunal + * @return int + **/ + public function getIdCoursAppel($codeTribunal) + { + $this->authenticate(); + $iBodacc = new MBodacc(); + return $iBodacc->getTribunalIdCA($codeTribunal); + } + + /** + * Récupère le contenu d'une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return AnnonceCollecteReturn + */ + public function getAnnonceCollecte($idAnn, $siret) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $annonceCollecte = new AnnonceCollecte(); + $siren = substr($siret,0,9)*1; + if (!$this->checkEdition()) { + + $error->errnum = 0; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $iDb = new WDB(); + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $idAnn = preg_replace('/^0\./','', ''.$idAnn) * 1; + if ($idAnn>0) + { + $res = $iDb->select('annonces', + 'id, siren, sirenValide, typeEven, strEven, raisonSociale, adresse, codePostal, ville, dateJugement, dateCessationPaiement, dateEffetFinP, numero, inter1type, inter1id, inter1nom, inter2type, inter2id, inter2nom, inter3type, inter3id, inter3nom, inter4type, inter4id, inter4nom, tribunal, montant, actionsNb, complement, infosBrutes, nouvActivite, nouvDir, nouvAdr, nouvFJ, annonce, source, parutionIdJal, parutionNum, dateSource, idSaisie, idAnnonce, dateInsert', + "id=$idAnn", false, MYSQL_ASSOC + ); + if (count($res)>0) + { + $ann = $res[0]; + $annonceCollecte->id = $ann['id']; + $annonceCollecte->siren = $ann['siren']; + $annonceCollecte->raisonSociale = $ann['raisonSociale']; + $annonceCollecte->adresse = $ann['adresse']; + $annonceCollecte->codePostal = $ann['codePostal']; + $annonceCollecte->ville = $ann['ville']; + $annonceCollecte->dateJugement = $ann['dateJugement']; + + //@todo : Les libellées ne sont pas présent LibEven + $tabEven = array(); + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $ann['typeEven']; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + if (!empty($ann['strEven'])){ + foreach ( explode(';',$ann['strEven']) as $code ) + { + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $code; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + } + } + + $annonceCollecte->even = $tabEven; + $annonceCollecte->dateSource = $ann['dateSource']; + $annonceCollecte->dateCessationPaiement = $ann['dateCessationPaiement']; + $annonceCollecte->dateEffetFinP = $ann['dateEffetFinP']; + $annonceCollecte->tribunal = $ann['tribunal']; + $annonceCollecte->numero = $ann['numero']; + $annonceCollecte->montant = $ann['montant']; + $annonceCollecte->actionsNb = $ann['actionsNb']; + $annonceCollecte->inter1type = $ann['inter1type']; + $annonceCollecte->inter1id = $ann['inter1id']; + $annonceCollecte->inter1nom = $ann['inter1nom']; + $annonceCollecte->inter2type = $ann['inter2type']; + $annonceCollecte->inter2id = $ann['inter2id']; + $annonceCollecte->inter2nom = $ann['inter2nom']; + $annonceCollecte->inter3type = $ann['inter3type']; + $annonceCollecte->inter3id = $ann['inter3id']; + $annonceCollecte->inter3nom = $ann['inter3nom']; + $annonceCollecte->complement = $ann['complement']; + $annonceCollecte->nouvActivite = $ann['nouvActivite']; + $annonceCollecte->nouvDir = $ann['nouvDir']; + $annonceCollecte->nouvAdr = $ann['nouvAdr']; + $annonceCollecte->nouvFJ = $ann['nouvFJ']; + $annonceCollecte->source = $ann['source']; + + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret) : ".$ann['raisonSociale'],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } else { + $error->errnum = 1; + $error->errmsg = 'Edition impossible'; + } + } + else + { + $error->errnum = 745741; + $error->errmsg = 'Selection impossible'; + } + } + $output = new AnnonceCollecteReturn(); + $output->error = $error; + $output->result = $annonceCollecte; + return $output; + } + + /** + * getDevises + * @param string $codeIsoDevise + * @return DevisesReturn + */ + public function getDevises($codeIsoDevise='') + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if (empty($codeIsoDevise)) $codeIsoDevise = ''; + + debugLog('I',"Liste des devises ou devise $codeIsoDevise demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabTmp = $iInsee->getDevises($codeIsoDevise); + + $tabRet = array(); + foreach ($tabTmp as $i=>$dev) + { + if ( $i!='' ){ + $devise = new Devise(); + $devise->devIso = $i; + $devise->devNom = $dev; + $tabRet[] = $devise; + } + } + $output = new DevisesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des codes devises, libellés, date et valeur + * (toutes les devises ou une seule) + * @param string $devise Devise sur 3 lettres (facultatif) + * @return DevisesCoursReturn + */ + public function getDeviseCours($devise=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB('sdv1'); + if ($devise) $strDevise=" AND c.devise='$devise' "; + else $strDevise=''; + + $tabRet = array(); + + $res = $iDb->select('devise_cours c, devise_liste l', 'c.devise, l.devNom, max(c.date) as dateChange, c.valeur', "c.devise=l.devIso $strDevise GROUP BY c.devise ORDER BY c.devise ASC", false, MYSQL_ASSOC); + foreach ($res as $tabDev) + { + $devise = new DevisesCours(); + $devise->codeDevise = $tabDev['devise']; + $devise->nomDevise = $tabDev['devNom']; + $devise->dateChange = $tabDev['dateChange']; + $devise->valeurDevise = $tabDev['valeur']; + $tabRet[] = $devise; + } + $output = new DevisesCoursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getMarques + * @param string $siren + * @param int $idDepot + * @return MarquesReturn + */ + public function getMarques($siren, $idDepot=0) + { + $this->authenticate(); + $this->permission('marques'); + debugLog('I',"Liste des marques déposées pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($idDepot)) $idDepot = 0; + $error = new ErrorType(); + $marques = array(); + require_once 'Metier/partenaires/classMMarques.php'; + $iMarque = new MMarques(); + $ret = $iMarque->getMarques($siren, $idDepot); + + foreach ($ret as $item) { + if (trim($item['imgLink'])<>'') $idLien = $item['numeroMarque']; + else $idLien = ''; + if ($idDepot==$item['numeroMarque']) { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Date = $item['dateDepot']; + $marque->Depot = $item['numeroMarque']; + $marque->IdLien = $idLien; + $marque->UrlLien = $item['UrlLien']; + $marque->PdfDispo = $item['pdfLink']; + $marque->Classes = $item['classesMarque']; + $marque->Perimetre = $item['periMarque']; + $marque->DateExpir = $item['dateExpir']; + $marques = array(); + $marques[] = $marque; + break; + } else { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Date = $item['dateDepot']; + $marque->Depot = $item['numeroMarque']; + $marque->IdLien = $idLien; + $marque->UrlLien = $item['UrlLien']; + $marque->PdfDispo = $item['pdfLink']; + $marques[] = $marque; + } + } + + Zend_Registry::get('WsLogger')->info(__FUNCTION__.' : '. + print_r($marques,1)); + + $this->wsLog('marques',$siren); + $output = new MarquesReturn(); + $output->error = $error; + $output->result = $marques; + return $output; + } + + /** + * Enter description here ... + * @param string $siren + * @param string $piece + * @param string $type + * @param integer $visu + * @param integer $courrier + * @param string $ref + * @return PieceReturn + */ + public function getPiece($siren, $piece='kbis', $type='', $visu=1, $courrier=0, $ref='') + { + $this->authenticate(); + $this->permission('kbis'); + set_time_limit(400); + + if (empty($piece)) $piece = 'kbis'; + if (empty($type)) $type = ''; + if (empty($visu)) $visu = 1; + if (empty($courrier)) $courrier = 1; + if (empty($ref)) $ref = ''; + $error = new ErrorType(); + + $erreur = false; + + $kbisLocalPDF = DOC_WEB_LOCAL."kbis/$piece-$siren.pdf"; + + if (file_exists($kbisLocalPDF) + && date('Ymd', filemtime($kbisLocalPDF))==date('Ymd') + && filesize($kbisLocalPDF)>0 ) { + $size = filesize($kbisLocalPDF); + $erreur = false; + $tabNom = array(); + $ficDist = ''; + $cache = 1; + } else { + exec("php ".APPLICATION_PATH."/../batch/getPieces.php $siren $piece > /dev/null &"); + $ficDist=''; + $size=$cache=0; + } + // On supprimer l'ancien kbis si trop vieux ou vide + if (date('Ymd', filemtime($kbisLocalPDF))<>date('Ymd') + || filesize($kbisLocalPDF)==0) { + unlink($kbisLocalPDF); + } + $result = new PieceResult(); + $result->Siren = $siren; + //@todo : Envoyer vers controlleur + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result->Url = $hostname.'/data/kbis/'.$piece.'-'.$siren.'.pdf'; + + $result->Taille = $size; + $result->Cache = $cache; + $result->fichier = $ficDist; + $this->wsLog('kbis', $siren, "$cache/$visu/$courrier/$type/$ref"); + $output = new PieceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Commande de statut association + * @param InfoCmdAsso $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdAssoReturn + */ + public function setCmdAsso( $infosCommande, $infosDemandeur ) + { + $this->authenticate(); + $this->permission('actes'); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB(); + + $siren = $infosCommande->siren; + $idEntreprise = intval($infosCommande->idEntreprise); + $assoNom = $infosCommande->raisonSociale; + debugLog('I',"commandeAsso pour $assoNom ($siren) début",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, 0, $idEntreprise); + $assoSigle = $tabIdentite['Sigle']; + $assoAdresse = $tabIdentite['Adresse'].EOL.$tabIdentite['Adresse2']; + $assoCP = $tabIdentite['CP']; + $assoVille = $tabIdentite['Ville']; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert=array( + 'idUser' => $this->User->id, + 'source' => 'asso', + 'login' => $this->User->login, + 'emailCommande' => $mail, + 'siren' => $siren, + 'refUtilisateur' => $infosDemandeur->reference, + 'refDocument' => serialize($infosDemandeur), + 'refCommande' => serialize($infosCommande), + 'dateCommande' => DATETIME, + ); + + $iDbCrm = new WDB('sdv1'); + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + + if ( $ret!=0 ) { + + sendMail('production@scores-decisions.com', 'asso@scores-decisions.com', + "Commande de statuts association pour $assoNom ($siren)", + "Association :".EOL.print_r($infosCommande, true).EOL.EOL. + "Demandeur:".EOL.print_r($infosDemandeur, true).EOL.EOL. + "Ref : i".$ret + ); + + $result = new CmdAssoDetail(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + sendMail('production@scores-decisions.com', $mail, + "Votre commande de statuts association sur $assoNom ($siren)", + "Votre demande de statuts sur l'association $assoNom a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog('commandeAsso', $siren, 'i'.$ret.'-'.DATETIME); + debugLog('I',"commandeAsso pour $assoNom ($siren) fin",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + } else { + + $error->errnum = 1; + $error->errmsg = 'Erreur'; + + } + + $output = new CmdAssoReturn(); + $output->error = $error; + $output->commande = $result; + return $output; + } + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param InfosCmdEnquete $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdEnqueteReturn + **/ + public function setCmdEnquete($infosCommande, $infosDemandeur) + { + $this->authenticate(); + $this->permission('enquetec'); + + //Initialisation + $error = new ErrorType(); + $siren = $infosCommande->siren; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source'=> 'intersud', // 'greffes', 'asso', 'graydon' + 'login'=> $this->User->login, + 'emailCommande'=> $mail, + 'siren'=> $siren, + 'refDocument'=> serialize($infosDemandeur), + 'refCommande'=> serialize($infosCommande), + 'dateCommande'=> DATETIME, + ); + debugLog('I',"Intersud, début sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo=print_r($infosCommande, 1).EOL.print_r($infosDemandeur,1).EOL; + + $idClient = $this->User->idClient; + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande ="NOM et Prénom du client demandeur : ".$infoDemandeur->nom.EOL; + $strInfoCommande.="Email du client demandeur : $mail".EOL; + $strInfoCommande.="Tel/Fax du demandeur : ".$infosDemandeur->tel.' / '.$infosDemandeur->fax.EOL; + $strInfoCommande.="Profil du demandeur : ".trim($infosDemandeur->service).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login = 'YLENA'; // Demandes en test + $pass = 'WYLFE'; + $nomClient = $strInfoCommande = ''; + $typeEnqLog = 'enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + $url='http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array('login' => $login, 'pwd' => $pass); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + // wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + //@todo + return array('error'=>array('errnum'=>4563456, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes'), 'results'=>$tabRet); + } + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + + /** Connexion à l'Extranet Intersud + **/ + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base + **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ". + DATETIME."\n". + "Date et heure de la commande : ".date('d/m/Y - H:i')."\n". + "Origine de la commande : $nomClient". + "$strInfoCommande"."\n\n". + + "CA : ".$infosCommande->PrecisionsMontantCA."\n". + "Motif de la demande : ".trim($infosCommande->PrecisionsMotif.' '.$infosCommande->PrecisionsAutre)."\n". + "Type de la demande : ".$infosCommande->PrecisionsType."\n". + "Anciennete de la relation : ".$infosCommande->Anciennete.' '.$infosCommande->AncienneteDuree."\n". + "Observations : ".$infosCommande->Observation.EOL; + + if ($infosCommande->ImpayeesChoix<>'non') + $comment.="Impayé(s) : ".$infosCommande->ImpayeesNombre." impayé(s) pour un montant de ".$infosCommande->ImpayeesMontant." en date du ".$infosCommande->ImpayeesDate.EOL; + + if ($infosCommande->RetardPaiementChoix<>'non') + $comment.="Retard(s) de paiement : ".$infosCommande->RetardPaiementNombre." retard(s) pour un montant de ".$infosCommande->RetardPaiementMontant." en date du ".$infosCommande->RetardPaiementDate.EOL; + + if ($infosCommande->LitigeChoix<>'non') + $comment.="Présence de litige(s) : ".$infosCommande->LitigePrecisions.EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infosCommande->Type)) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infosCommande->RIB))<>'') + $iDbCrm->insert('banques', array( + 'siren'=>$siren, + 'libBanqueGuichet'=>'', + 'precis'=>1, + 'codeBanque'=>$infosCommande->RIB->banque, + 'codeGuichet'=>$infosCommande->RIB->guichet, + 'numCompte'=>$infosCommande->RIB->compte.$infosCommande->RIB->cle, + 'dateSource'=>DATETIME, + ), true); + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc'=>$tabIdentite['Nom'], + 'cible_enk'=>9, // 9 + 'siret'=>$siren, + 'acti'=>'', + 'soc_exp'=>$tabInterSud['soc_exp'], + 'type_enk'=>$enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri'=>'', + 'adr'=>$tabIdentite['Adresse'], + 'ref_exp'=>$tabInterSud['ref_exp'], + 'autre_type_enk'=>'', // Texte libre + 'adr2'=>$tabIdentite['Adresse2'], + 'delai_enk'=>$enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville'=>$tabIdentite['Ville'], + 'cp'=>$tabIdentite['CP'], + 'pays'=>'', // International ? + 'nom_exp'=>$tabInterSud['nom_exp'], + 'tel'=>$tabIdentite['Tel'], + 'port'=>$infosCommande->AutreTel, + 'tel_exp'=>$tabInterSud['tel_exp'], + 'bank'=>trim(implode(' ', $infosCommande->RIB)), + 'int_enk'=>$tabInterSud['int_enk'], // International ? + 'encours'=>$infosCommande->Encours, + 'nb_ech'=>$infosCommande->NbEcheances, + 'delai2_enk'=>$tabInterSud['delai2_enk'], // International ? + 'email_exp'=>$tabInterSud['email_exp'], + 'cred'=>'', + 'comment'=>urlencode($comment), + 'val_ret'=>$tabInterSud['val_ret'], + ); + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + //@todo + return array('error'=>array('errnum'=>456345, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes 3'), 'results'=>$tabRet); + } + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + $referer=$url; + $body=$page['body']; + + $result = new CmdEnquete(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url='http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + $output = new CmdEnqueteReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getStatsUtilisateurs + * @param string $login + * @param string $mois + * @param string $type + * @param boolean $payants + * @return array + */ + public function getStatsUtilisateurs($login, $mois, $type='jour', $payants=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if ($payants) + { + $strPayant="AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis') AND params<>'' AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + } + else { + $strPayant=''; + } + $iDbCrm = new WDB('sdv1'); + if ($type=='jour') { + $rep = $iDbCrm->select('logs', + 'date(dateHeure) as jours, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY jours", + false, MYSQL_ASSOC); + } elseif ($type=='heure') { + $rep = $iDbCrm->select('logs', + 'HOUR(dateHeure) as heures, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY heures", + false, MYSQL_ASSOC); + } + $tabRet = $rep; + + + + return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabRet); + } + + /** + * getPortefeuilleCsv + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getPortefeuilleCsv($login='', $idClient=0) + { + return $this->getListeSurveillancesCsv('portefeuille', $login, $idClient); + } + + /** + * getPortefeuille + * @param PortefeuilleFiltre $filtre + * @param int $deb + * @param int $nbRet + * @return PortefeuilleReturn + */ + public function getPortefeuille($filtre, $deb=0, $nbRet=100) + { + $this->authenticate(); + + // Initialisation + $error = new ErrorType(); + if (empty($deb)) { $deb = 0; } + if (empty($nbRet)) { $nbRet = 100; } + + $tri = strtolower(trim($filtre->tri)); + switch ($tri) { + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + case 'indiScore': $orderBy='ORDER BY indiScore'; break; + case 'encours': $orderBy='ORDER BY encours'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + $iDb = new WDB(); + $login = $this->User->login; + + $strSelect = 's.email, s.siren, s.nic, s.ref, s.dateAjout, s.rs, s.cp, s.ville, s.dateDerEnvoi, s.encoursClient, c.actif, c.procol, c.indiScore, c.indiScore20, c.encours, c.indiScoreDate, c.dateBilan, c.indiScorePre, c.indiScore20Pre, c.encoursPre, c.indiScoreDatePre, c.sourceModif, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + + $strFiltre = ''; + if (intval($siren)>0) $strFiltre.= " AND s.siren=$siren "; + if (!empty($filtre->ref)) $strFiltre.= " AND s.ref LIKE '%$filtre->ref%'"; + if (!empty($filtre->rs)) $strFiltre.= " AND s.rs LIKE '%$filtre->rs%'"; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site s', 'count(*) as nb', "s.login='$login' AND s.source='score' AND s.dateSuppr=0 $strFiltre", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site s, scores_surveillance c', $strSelect, "s.login='$login' AND s.source='score' AND s.dateSuppr=0 AND s.siren=c.siren $strFiltre $orderBy LIMIT $deb,$nbRet", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv) { + if (trim($tabSurv['rs'])<>'') { + $rs=$tabSurv['rs']; + $cp=$tabSurv['cp']; + $ville=$tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs=$tabIdentite['Nom']; + $cp=$tabIdentite['CP']; + $ville=$tabIdentite['Ville']; + $iDb->update('surveillances_site',array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND source='score' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic'], + false + ); + } + + $portefeuille = new Portefeuille(); + $portefeuille->email = $tabSurv['email']; + $portefeuille->siren = $tabSurv['siren']; + $portefeuille->nic = $tabSurv['nic']; + $portefeuille->ref = $tabSurv['ref']; + $portefeuille->dateAjout = $tabSurv['dateAjout']; + $portefeuille->rs = $rs; + $portefeuille->cp = $cp; + $portefeuille->ville = $ville; + // Entreprise + $portefeuille->actif = $tabSurv['actif']; + $portefeuille->procol = $tabSurv['procol']; + $portefeuille->indiScore = $tabSurv['indiScore']; + $portefeuille->indiScore20 = $tabSurv['indiScore20']; + $portefeuille->indiScorePre = $tabSurv['indiScorePre']; + $portefeuille->indiScore20Pre = $tabSurv['indiScore20Pre']; + $portefeuille->encours = $tabSurv['encours']; + $portefeuille->encoursPre = $tabSurv['encoursPre']; + $portefeuille->indiScoreDate = $tabSurv['indiScoreDate']; + $portefeuille->indiScoreDatePre = $tabSurv['indiScoreDatePre']; + $portefeuille->encoursClient = $tabSurv['encoursClient']; + $portefeuille->dateBilan = $tabSurv['dateBilan']; + $portefeuille->sourceModif = $tabSurv['sourceModif']; + //, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + $portefeuille->dateDerEnvoi = $tabSurv['dateDerEnvoi']; + $tabRet[] = $portefeuille; + + } + + $output = new PortefeuilleReturn(); + $output->error = $error; + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + return $output; + } + + + /** + * rechercheHisto + * @param string $recherche + * @param string $annee + * @param string $typeBod + * @param int $deb + * @param int $nbRep + * @param int $maxRep + * @param bool $pertinence + * @return RechercheHistoReturn + */ + public function rechercheHisto($recherche, $annee='', $typeBod='', $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($annee)) $annee = ''; + if (empty($typeBod)) $typeBod = ''; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($annee)) $pertinence = false; + $liste = array(); + $index = 'histo'; + + debugLog('I',"rechercheHisto de $recherche ($annee) (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabFiltres = array(); + + if ($annee<>'' && $annee*1>=1953 && $annee*1<=date('Y')*1) + $tabFiltres = array('annee1'=>$annee); + + /* + require_once 'Metier/sphinx/recherche2.php'; + $ret=search2('histo', "$recherche", $tabFiltresAnnee, $deb, $nbRep, $maxRep, $pertinence); + */ + + if (SPHINX_HISTO_VERSION == 1){ + require_once 'Vendors/sphinxapi/sphinxapi-0.9.9.php'; + } elseif (SPHINX_HISTO_VERSION == 2){ + require_once 'Vendors/sphinxapi/sphinxapi-2.1.5.php'; + } + + $cl = new SphinxClient(); + $cl->SetServer (SPHINX_HISTO_HOST, SPHINX_HISTO_PORT); + $cl->SetConnectTimeout ( 1 ); + $cl->SetLimits ($deb, $nbRep, $maxRep); + $cl->SetMatchMode (SPH_MATCH_EXTENDED); + foreach ($tabFiltres as $nomFiltre => $valFiltre) + $cl->SetFilter($nomFiltre, array(0=>$valFiltre)); + $cl->SetRankingMode ( SPH_RANK_PROXIMITY_BM25 ); + $res = $cl->Query ( $recherche, $index ); + + if ($res===false) { + debugLog('I',"Search Sphinx : Pas de réponse pour $recherche avec ".implode(',',$tabFiltres).' ('.$cl->GetLastError() .')',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = 0; + $output->nbReponsesTotal = 0; + $output->duree = $res[time]; + $output->mots = array(); + $output->reponses = array(); + return $output; + + } + // Le moteur est opérationel + if ( $cl->GetLastWarning() ) { + debugLog('I',"Search Sphinx : Warning pour $recherche - ".$cl->GetLastWarning(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //print "WARNING: " . $cl->GetLastWarning() . "\n\n"; + } + + debugLog('I',"'Search Sphinx dans $index de $recherche (Filtre=".implode(',',$tabFiltres)."), Deb=$deb, nbRep=$nbRep, max=$max, any=$any",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet=array(); + if ( is_array($res['matches'])) { + $iDb = new WDB(); + foreach ( $res['matches'] as $doc => $docinfo ) + { + $listeEtab=$iDb->select('histobodacc.bodacc_ocr', + "'Histo' as Loc, id, nomFichier, annee1, bod, texte", + "id=$doc"); + $etab = $listeEtab[0]; + $tabRet[]=array( + 'Localisation' => $etab['Loc'], + 'id' => $doc, + 'Pertinence' => $docinfo['weight'], + 'Fichier' => $etab['nomFichier'], + 'Annee' => $etab['annee1'], + 'Code' => $etab['bod'], + 'Texte' => $etab['texte'], + ); + } + } + debugLog('I','Search Sphinx : Retourne '. $res[total].'/'. $res[total_found] .' en '.$res[time] .'secondes',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = $tabRet; + $nbTot = $res[total_found]; + $duree = $res[time]; + $tabMots = $res['words']; + + $tabRet = array(); + $k=0; + if(count($liste)>0) { + foreach ($liste as $n=>$etab) { + $texte = Scores_Locale_String::cleanutf8($etab['Texte']); + $pattern = '/[^a-zA-Z0-9\/]+/ '; + $texte = preg_replace($pattern, ' ', $texte); + $posMin=100000; + $hitMin=1000000; + foreach ($tabMots as $mot=>$tabMot) { + if ($tabMot['hits']<$hitMin) { + $hitMin=$tabMot['hits']; + $motSignificatif=$mot; + } + } + $posMin = stripos($texte, ''.$motSignificatif); + if ($posMin<150) $posMin=150; + $texte2 = substr($texte, $posMin-150, 250); + $reponse = new RechercheHistoReponses(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + + //@todo : gestion du lien pour le téléchargement des fichiers bodacc + $file = strtr($etab['Fichier'], array( + '.txt'=>'.pdf', + '/mnt/bodacc/' => '')); + $vieuxWS = false; + if ($vieuxWS) { + $reponse->Fichier = 'http://tville.scores-decisions.com/bodacc/'.$file; + } else { + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $url = '/fichier/bodacc/q/'.base64_encode($file); + $reponse->Fichier = $hostname.$url; + } + $reponse->Annee = $etab['Annee']; + $reponse->Code = $etab['Code']; + $reponse->Texte = $texte2; + $tabRet[] = $reponse; + $k++; + } + } + + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbTot; + $output->duree = $duree; + $output->mots = array_keys($tabMots); + $output->reponses = $tabRet; + return $output; + } + + /** + * getListeSurveillanceCsv + * @param string $source + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getListeSurveillancesCsv($source='', $login='', $idClient=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($source)) $source = ''; + if (empty($idClient)) $idClient = 0; + + + debugLog('I',"getListeSurveillancesCsv Début $source $login $idClient",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $iDb = new WDB(); + $strClient = $strLogin = ''; + $exportPtf = false; + switch ($source) + { + case 'insee': + case 'annonces': + case 'bilans': + case 'score': + case 'actes': + case 'privileges': + case 'dirigeants': + break; + case 'portefeuille': + $source='score'; + $exportPtf=true; + break; + default: + $source=''; + break; + } + + if ($source<>'') $strSource = "AND source='$source' "; + else $strSource = ''; + + // Control idClient + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = "AND u.idClient=$idClient "; + + if ($this->User->profil=='SuperAdministrateur' || $this->User->profil=='Administrateur') { + // Surveillances de tous les utilisateurs du client + if (empty($login)) { + $login = ''; + //Surveillances de l'utilisateur + } else { + $strLogin = "AND s.login='$login' "; + } + } else { + //Par défaut préselection de l'utilisateur + $login = $this->User->login; + $strLogin = "AND s.login='$login' "; + } + + $fichierCsv = DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.csv"; + + if (file_exists($fichierCsv) && + date('Ymd', filemtime($fichierCsv))==date('Ymd') && + filesize($fichierCsv)>60 ) { + $size = filesize($fichierCsv); + $erreur = false; + $tabNom = array(); + $cache = 1; + } else { + unlink($fichierCsv); + if ($source=='score'){ + if ($this->User->typeScore==20) { + $strScore='v.indiScore20 AS indiScore20'; + $strScorePre='v.indiScore20Pre AS indiScore20Pre'; + } else { + $strScore='v.indiScore AS indiScore100'; + $strScorePre='v.indiScorePre AS indiScore100Pre'; + } + /*v.scoreZ, v.scoreZPre, v.scoreCH, v.scoreCHPre, + v.scoreAfdcc2, v.scoreAfdcc2Pre, v.situFi, v.situFiPre, v.infoNote, v.infoNotePre, + v.noteStruct, v.noteStructPre, v.noteFin, v.noteFinPre, v.tendance, v.tendancePre, */ + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi, + s.encoursClient, v.actif, v.procol, $strScore, v.encours, v.indiScoreDate, v.dateBilan, + $strScorePre, v.encoursPre, v.indiScoreDatePre, v.sourceModif, v.scoreSolv, v.scoreSolvPre, v.scoreDir, + v.scoreDirPre, v.scoreConf, v.scoreConfPre, + e.cj, e.capital, e.capitalDev, e.ape_entrep, e.tca, e.teff_entrep, + v.dateUpdate + FROM surveillances_site s, sdv1.utilisateurs u, sdv1.clients c, scores_surveillance v, etablissements e + WHERE s.source='score' $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id AND s.siren=v.siren AND s.siren=e.siren + GROUP BY loginUti, s.siren, s.nic, s.source, s.ref + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeSurveillancesCsv($source, $login, $idClient)", $sql); + } else { + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi + FROM surveillances_site s, sdv1.utilisateurs u, sdv1.clients c + WHERE 1 $strSource $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + } + debugLog('I',"getListeSurveillancesCsv SQL $sql",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $fp = fopen(DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.sql", 'w'); + fwrite($fp, $sql.EOL); + fclose($fp); + exec("php ".APPLICATION_PATH."/../batch/sql2csv.php jo ".DOC_WEB_LOCAL."csv/listesurv-$source-$login-$idClient.sql $fichierCsv > /dev/null &"); + $size=$cache=0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new ListeSurveillancesCsv(); + $result->Url = $hostname.DOC_WEB_URL."csv/listesurv-$source-$login-$idClient.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + debugLog('I','getListeSurveillancesCsv Url='.$hostname.DOC_WEB_URL."csv/listesurv-$source-$login-$idClient.csv, Taille=$size, Cache=$cache",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $output = new ListeSurveillancesCsvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getListeJalCollecte + * @return ListeJalCollecteReturn + */ + public function getListeJalCollecte() + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + + $iBodacc = new MBodacc(); + $tabJal = $iBodacc->getListeJalCollecte(); + foreach ($tabJal as $i=>$jal) + { + $jalCollecte = new JalCollecte(); + $jalCollecte->id = $i; + $jalCollecte->nom = $jal; + $tabRet[] = $jalCollecte; + } + $output = new ListeJalCollecteReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getListeFichierSurv + * @param string $login + * @param string $ref + * @param string $nomFic + * @return ListeFichierSurvReturn + */ + public function getListeFichierSurv($login, $ref='*', $nomFic='') + { + $this->authenticate(); + if (empty($ref)) $ref = '*'; + if (empty($nomFic)) $nomFic = ''; + $error = new ErrorType(); + //debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabFichier=$tabDates=array(); + $numAbo=substr($ref, 0,5); + if (strtolower($login)=='vwbank') { + $repClient='volkswagen bank'; + $ficClient='surveillanceBodacc_SURBODPRDCFTVWBANK'; + $numAbo=$ref='19300'; + } elseif (substr($login,0,6)=='apicil') { + $repClient='apicil'; + $ficClient='surveillanceBodacc_SURBODPRDCFTAPICIL'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='omni04') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodacca3m') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSMEDERIC'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodaccomni') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodacccrr') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSCRR'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='cpcambr13' || strtolower($login)=='cpcambr14') { + $repClient='cpcam des bouches du rhône'; + $ficClient='diffusionBodacc_DIFBODPRDMAICPCAM13'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='frbsurveillance'){ + $repClient='france boissons'; + $ficClient='surveillanceBodacc_SURBODPRDFTPFBOISSON'; + } else { + $repClient='cnasea'; + $ficClient='surveillanceBodacc_SURBODTSTFTSCNASEA'; + } + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + if (!$dh) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Impossible d'ouvrir le dossier '/home/data/clients/$repClient/'"); + $error->errnum = 1; + $error->errmsg = "Impossible d'ouvrir le dossier client"; + } else { + while (false !== ($filename = readdir($dh))) { + if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,42)==$ficClient.$numAbo) { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($ref=='*' && $filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)<>'_') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)=='_' && $repClient=='apicil') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,38,8); + $tabClients[]=substr($filename,0,37); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,38)==$ficClient && substr($filename,38,1)=='_' && $repClient=='aggm mederic ') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,39,8); + $tabClients[]=substr($filename,0,38); + } + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic : fichier lu '$filename'", "Fichier lu '$filename'"); + /* + elseif ( $ficClient=='surveillanceBodacc_SURBODPRDFTPFBOISSON' && substr($filename,0,strlen($ficClient))==$ficClient && $repClient=='france boissons') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,strlen($ficClient)+1,8); + $tabClients[]=substr($filename,0,strlen($ficClient)); + } + */ + } + /** Tableau des noms de fichier **/ + sort($tabFichier); + /** Tableau des dates de livraisons **/ + $tabDates=array_unique($tabDates); + sort($tabDates); + /** Tableau des Clients **/ + $tabClients=array_unique($tabClients); + sort($tabClients); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabDates); + + /*@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", + "Fichiers :".EOL. + print_r($tabFichier, true). + "Dates:".EOL. + print_r($tabDates, true). + "Clients :".EOL. + print_r($tabClients, true) + );*/ + + if ($ref=='*') { + $tabFichier = array(); + // Boucle sur les dates de livraison + foreach ($tabDates as $dateFic) { + if (strlen($dateFic)<>8) continue; + if (!file_exists(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv") || + filesize(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv")==0) { + + $fpW=fopen(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv",'w'); + $entete=true; + // Boucle afin de vérifier si on est sur le bon client + foreach ($tabClients as $nomClient) { + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + while (false !== ($filename = readdir($dh))) { + if (substr($filename,0,51)==$nomClient.'_'.$dateFic && substr($filename,-4)=='.csv') { + $fichier=$filename; + //break; + } + } + $fpR=fopen(DOC_WEB_LOCAL."clients/$repClient/$fichier",'r'); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>array(($fichier)));//die; + if ($fpR) { + while (!feof($fpR)) { + $ligne=trim(fgets($fpR)); + if (substr($ligne,0,5)=='Siren' && $entete==true) { + fwrite($fpW, 'SITE;'.$ligne.EOL); + $entete=false; + } + elseif (substr($ligne,0,5)<>'Siren' && trim($ligne)<>'') { + fwrite($fpW, strtr($nomClient, array('surveillanceBodacc_SURBODTSTFTS'=>'', + 'surveillanceBodacc_SURBODPRDCFT'=>'')).';'.$ligne.EOL); + } + } + fclose($fpR); + } + } + fclose($fpW); + } + if (strlen($dateFic)==8) + $tabFichier[]=$ficClient.'_'.$dateFic.'.csv'; + } + } + rsort($tabFichier); + + if ($nomFic<>'') { + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Avant BZ2'); + if (!file_exists(DOC_WEB_LOCAL."/csv/$nomFic.bz2") || + filesize(DOC_WEB_LOCAL."/csv/$nomFic.bz2")<=14) { + $string=file_get_contents("/home/data/clients/$repClient/$nomFic"); + if ($string===false) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Ouverture impossible du fichier '/home/data/clients/$repClient/$nomFic'"); + } + $bz = bzopen(DOC_WEB_LOCAL."/csv/$nomFic.bz2",'w'); + if ($bz) { + bzwrite($bz, $string, strlen($string)); + bzclose($bz); + } + } /*else + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Sans BZ2'); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Après BZ2'); + */ + } + debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic : nb fichiers=".count($tabFichier),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = array(); + foreach($tabFichier as $fichier){ + $retFichier = new ListeFichierSurv(); + $retFichier->UrlFichier = $hostname.'/data/csv/'.$fichier; + $result[] = $retFichier; + } + } + $output = new ListeFichierSurvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Geocodage d'une adresse + * @param string $adresse + * @param string $cp + * @param string $ville + * @param string $pays + * @return GeoCodeReturn + */ + public function geoCode($adresse, $cp, $ville, $pays='France') + { + $this->authenticate(); + + $ligne = date('YmdHis').";$siren;MMap AVANT"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $mMap = new MMap($adresse, $cp, $ville, $pays); + + $ligne=date('YmdHis').";$siren;MMap APRES"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $geocode = new GeoCode(); + $geocode->latitude = $mMap->latitudeDec; + $geocode->longitude = $mMap->longitudeDec; + $geocode->precis = $mMap->precision; + $geocode->adresseValidee = $mMap->adresseValidee; + $geocode->latitudeDeg = $mMap->latitudeDeg; + $geocode->longitudeDeg = $mMap->longitudeDeg; + + $output = new GeoCodeReturn(); + $output->error = $error; + $output->result = $geocode; + } + + /** + * Recherche d'entreprise par leur actionnaire + * @param string $nom Raison sociale / Nom de l'actionnaire (obligatoire) + * @param string $cpVille CP, Ville + * @param string $siren Siren de l'actionnaire + * @param string $pays Pays de l'actionnaire + * @param string $pctMin Niveau de détention Minimam de l'actionnaire + * @param string $pctMax Niveau de détention Maximum de l'actionnaire + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur les noms et prénoms (si true) + * @return SearchActReturn + */ + public function searchAct($nom, $cpVille='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + debugLog('I',"Recherche Actionnaire de $nom, $cpVille (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!empty($pays)){ + $wdb = new WDB('jo'); + $result = $wdb->select('tabPays', 'codPays3', "libPays LIKE '".$pays); + if (count($result>0)){ + $pays = $result[0]['codPays3']; + } else { + $pays = ''; + } + } + + if (empty($cpVille)) $cpVille = ''; + if (empty($siren)) $siren = ''; + if (empty($pctMin)) $pctMin = 0; + if (empty($pctMax)) $pctMax = 100; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + + $mLiens = new MLiens(''); + // rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence) + $etabs = $mLiens->rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence); + + $iInsee = new MInsee(); + + $tabRet = array(); + foreach ($etabs['reponses'] as $etab) { + $act = new EntrepriseActItem(); + $act->id = $etab['id']; + $act->Pertinence = $etab['Pertinence']; + $act->Siret = $etab['Siret']; + $act->Siege = $etab['Siege']; + $act->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $act->Nom2 = prepareString($etab['Nom2']); + $act->Sigle = prepareString($etab['Sigle']); + $act->Enseigne = prepareString($etab['Enseigne']); + $act->Adresse = prepareString($etab['Adresse']); + $act->Adresse2 = prepareString($etab['Adresse2']); + $act->CP = $etab['CP']; + $act->Ville = prepareString($etab['Ville']); + $act->Tel = $etab['Tel']; + $act->Fax = $etab['Fax']; + $act->FJ = $etab['FJ']; + $act->FJLib = prepareString($iInsee->getLibelleFJ($etab['FJ'])); + $act->Siren = $etab['Siren']; + $act->Nic = $etab['Nic']; + $act->Actif = $etab['Actif']; + $act->NafEtab = $etab['NafEtab']; // Etablissement + $act->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $act->NafEnt = $etab['NafEnt']; // Entreprise + $act->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + $act->ActNomRs = $etab['ActNomRs']; + $act->ActPays = $etab['ActPays']; + $act->ActDateLien = $etab['ActDateLien']; + $act->ActActif = $etab['ActActif']; + $act->ActPmin = $etab['ActPmin']; + $tabRet[] = $act; + } + + $output = new SearchActReturn(); + $output->nbReponses = $etabs['nbReponses']; + $output->nbReponsesTotal = $etabs['nbReponsesTotal']; + $output->result = $tabRet; + + if ($tabRet['nbReponses']==0) { + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + return $output; + } + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param string $siren + * @param string $infoEnq Informations pour la demande d'enquête
+ * InfoEnq[Entrep][Tel]
+ * InfoEnq[Entrep][Fax]
+ * InfoEnq[Entrep][AutreTel]
+ * InfoEnq[Entrep][Mail]
+ * InfoEnq[Entrep][AutreMail]
+ * InfoEnq[Entrep][Web]
+ * InfoEnq[Entrep][Rib][Banque]
+ * InfoEnq[Entrep][Rib][Guichet]
+ * InfoEnq[Entrep][Rib][Compte]
+ * InfoEnq[Entrep][Rib][Cle]
+ * InfoEnq[Encours]
+ * InfoEnq[NbEcheances]
+ * InfoEnq[AvisAssureur]
+ * InfoEnq[Type]
+ * InfoEnq[Delai]
+ * InfoEnq[PrecisionsChoix]
+ * InfoEnq[Precisions][MontantCA]
+ * InfoEnq[Precisions][Motif]
+ * InfoEnq[Precisions][Autre]
+ * InfoEnq[Anciennete]
+ * InfoEnq[AncienneteDuree]
+ * InfoEnq[ImpayeesChoix]
+ * InfoEnq[Impayees][Montant]
+ * InfoEnq[Impayees][Nombre]
+ * InfoEnq[Impayees][Date]
+ * InfoEnq[RetardPaiementChoix]
+ * InfoEnq[RetardPaiement][Montant]
+ * InfoEnq[RetardPaiement][Nombre]
+ * InfoEnq[RetardPaiement][Date]
+ * InfoEnq[LitigeChoix]
+ * InfoEnq[Litige][Precisions]
+ * InfoEnq[Observation]
+ * @param string $infoDemande Informations sur l'utilisateur
+ * InfoUser[Profil]
+ * InfoUser[ProfilAutre]
+ * InfoUser[Identite]
+ * InfoUser[Tel]
+ * InfoUser[Fax]
+ * InfoUser[Email]
+ * InfoUser[Ref]
+ * @return CommandeEnqueteReturn + */ + public function commandeEnquete($siren, $infoEnq, $infoDemande) + { + $this->authenticate(); + //Initialisation + $infoEnq = json_decode($infoEnq); + $infoDemande = json_decode($infoDemande); + + $mail = trim($infoDemande['Email']); + if ($mail=='') { + $mail=$this->User->email; + } + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source' => 'intersud', // 'greffes', 'asso', 'graydon' + 'login' => $tabInfoUser['login'], + 'emailCommande' => $mail, + 'siren' => $siren, + 'refDocument' => serialize($infoDemande), + 'refCommande' => serialize($infoEnq), + 'dateCommande' => DATETIME, + // 'idClient'=> $tabInfoUser['idClient'], + ); + debugLog('I',"Intersud, début commande sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo = print_r($infoEnq, 1).EOL.print_r($infoDemande,1).EOL; + + $idClient = $this->User->idClient; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande = "NOM et Prénom du client demandeur : ".$infoDemande['Identite'].EOL; + $strInfoCommande.= "Email du client demandeur : $mail".EOL; + $strInfoCommande.= "Tel/Fax du demandeur : ".$infoDemande['Tel'].' / '.$infoDemande['Fax'].EOL; + $strInfoCommande.= "Profil du demandeur : ".trim($infoDemande['Profil'].' '.$infoDemande['ProfilAutre']).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login='YLENA'; // Demandes en test + $pass='WYLFE'; + $nomClient=$strInfoCommande=''; + $typeEnqLog='enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + /** Connexion à l'Extranet Intersud **/ + $url = 'http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array( + 'login' => $login, + 'pwd' => $pass, + ); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + //wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + throw new SoapFault('1',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + $intersudNomPrenom=$intersudRaisonSociale=''; + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudNomPrenom=trim($matches[1]); + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudRaisonSociale=trim($matches[1]); + debugLog('I',"Intersud, connexion via $login pour $intersudRaisonSociale ($intersudNomPrenom, cookie=$cookie)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /* + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, EOL.DATETIME.EOL.print_r($page,true).'========================================================================================================='.EOL.EOL); + @fclose($fp); + die(); + */ + /** Page formulaire de demande d'enquête **/ + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible au formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('2',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ".DATETIME." + Date et heure de la commande : ".date('d/m/Y - H:i')." + Origine de la commande : $nomClient + $strInfoCommande + + CA : ".$infoEnq['Precisions']['MontantCA']." + Motif de la demande : ".trim($infoEnq['Precisions']['Motif'].' '.$infoEnq['Precisions']['Autre'])." + Type de la demande : ".$infoEnq['Precisions']['Type']." + Anciennete de la relation : ".$infoEnq['Anciennete'].' '.$infoEnq['AncienneteDuree']." + Observations : ".$infoEnq['Observation'].EOL; + + if ($infoEnq['ImpayeesChoix']<>'non') + $comment.="Impayé(s) : ".$infoEnq['Impayees']['Nombre']." impayé(s) pour un montant de ".$infoEnq['Impayees']['Montant']." en date du ".$infoEnq['Impayees']['Date'].EOL; + + if ($infoEnq['RetardPaiementChoix']<>'non') + $comment.="Retard(s) de paiement : ".$infoEnq['RetardPaiement']['Nombre']." retard(s) pour un montant de ".$infoEnq['RetardPaiement']['Montant']." en date du ".$infoEnq['RetardPaiement']['Date'].EOL; + + if ($infoEnq['LitigeChoix']<>'non') + $comment.="Présence de litige(s) : ".$infoEnq['Litige']['Precisions'].EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infoEnq['Type'])) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infoEnq['Entrep']['Rib']))<>''){ + $iDbCrm->insert('banques', array( + 'siren' => $siren, + 'libBanqueGuichet' => '', + 'precis' => 1, + 'codeBanque' => $infoEnq['Entrep']['Rib']['Banque'], + 'codeGuichet' => $infoEnq['Entrep']['Rib']['Guichet'], + 'numCompte' => $infoEnq['Entrep']['Rib']['Compte'].$infoEnq['Entrep']['Rib']['Cle'], + 'dateSource' => DATETIME, + ), true); + } + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc' => $tabIdentite['Nom'], + 'cible_enk' => 9, // 9 + 'siret' => $siren, + 'acti' => '', + 'soc_exp' => $tabInterSud['soc_exp'], + 'type_enk' => $enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri' => '', + 'adr' => $tabIdentite['Adresse'], + 'ref_exp' => $tabInterSud['ref_exp'], + 'autre_type_enk' => '', // Texte libre + 'adr2' => $tabIdentite['Adresse2'], + 'delai_enk' => $enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville' => $tabIdentite['Ville'], + 'cp' => $tabIdentite['CP'], + 'pays' => '', // International ? + 'nom_exp' => $tabInterSud['nom_exp'], + 'tel' => $tabIdentite['Tel'], + 'port' => $infoEnq['Entrep']['AutreTel'], + 'tel_exp' => $tabInterSud['tel_exp'], + 'bank' => trim(implode(' ', $infoEnq['Entrep']['Rib'])), + 'int_enk' => $tabInterSud['int_enk'], // International ? + 'encours' => $infoEnq['Encours'], + 'nb_ech' => $infoEnq['NbEcheances'], + 'delai2_enk' => $tabInterSud['delai2_enk'], // International ? + 'email_exp' => $tabInterSud['email_exp'], + 'cred' => '', + 'comment' => urlencode($comment), + 'val_ret' => $tabInterSud['val_ret'], + ); + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('3',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $output = new CommandeEnqueteReturn(); + $output->siren = $siren; + $output->emailCommande = $mail; + $output->dateCommande = DATETIME; + $output->refCmde = 'i'.$ret; + + //$strInfoCommande $mail + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url = 'http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + return $output; + } + + /** + * Retourne l'ensemble des informations des dirigeants opérationnels (non statutaires) de l'entreprise + * @param string $siren Siren de l'entreprise + * @return DirigeantOp[] + */ + public function getDirigeantsOp($siren) + { + $this->authenticate(); + + debugLog('I',"Dirigeants opérationnels demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeantsOp($siren); + $tabRet = array(); + if (count($dirs)>0){ + foreach ($dirs as $nb => $dir) { + $objet = new DirigeantOp(); + $objet->Code = $dir['Fonction']; + $objet->Titre = prepareString($dir['Titre']); + $objet->Societe = prepareString($dir['Societe']); + $objet->Civilite = prepareString($dir['Civilite']); + $objet->Nom = prepareString($dir['Nom']); + $objet->Prenom = prepareString($dir['Prenom']); + $objet->NomUsage = prepareString($dir['NomUsage']); + $objet->NaissDate = $dir['NaissDate'];// 07/09/1961 + $objet->NaissVille = prepareString($dir['NaissVille']); // LE RUSSEY + $objet->NaissDepPays = prepareString($dir['NaissDepPays']); // LE RUSSEY + $objet->Ancien = $dir['Ancien']; + $objet->DateFct = $dir['DateFct']; + + $tabRet[] = $objet; + } + } + $this->wsLog('dirigeantsOp', $siren); + debugLog('I', 'Nb Dirigeants Op retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return $tabRet; + } + + /** + * Liste de tous les dépôts enregistrés à l'INPI pour une entreprise + * @param string $siren Siren de l'entreprise + * @return Depot[] + */ + public function getListeDepots($siren) + { + $this->authenticate(); + + debugLog('I',"Liste des dépots INPI pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iRncs=new MRncs(); + $evens=$iRncs->getListeDepots($siren); + $tabRet = array(); + if (count($evens)>0){ + foreach ($evens as $nb=>$even){ + $objet = new Depot(); + $objet->CodeDepot = $even['codDepot']; + $objet->LibDepot = prepareString($even['libDepot']); + $objet->DateDepot = $even['datDepot']; + $objet->RefDepot = $even['refDepot']; + $objet->DateRncs = $even['datRncs']; + $objet->DateMAJ = $even['datSed']; + + $tabRet[] = $objet; + } + } + debugLog('I', 'Nb dépôts retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return $tabRet; + } + + + /** + * Enter description here ... + * @param string $siret + * @param integer $id + * @return IdentiteLight + */ + public function getIdentiteLight($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if (empty($id)) { + $id = 0; + } + + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } + if ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic, $id); + + $output = new IdentiteLight(); + $output->id = $tabIdentite['id']; + $output->Siret = $tabIdentite['Siret']; + $output->Siege = $tabIdentite['Siege']; + $output->Nom = $tabIdentite['Nom']; + $output->Tribunal = $tabIdentite['Tribunal']; + $output->Sigle = $tabIdentite['Sigle']; + $output->Enseigne = $tabIdentite['Enseigne']; + $output->Adresse = $tabIdentite['Adresse']; + $output->Adresse2 = $tabIdentite['Adresse2']; + $output->AdresseNum = $tabIdentite['AdresseNum']; + $output->AdresseBtq = $tabIdentite['AdresseBtq']; + $output->AdresseVoie = $tabIdentite['AdresseVoie']; + $output->AdresseRue = $tabIdentite['AdresseRue']; + $output->CP = $tabIdentite['CP']; + $output->Ville = $tabIdentite['Ville']; + $output->Tel = $tabIdentite['Tel']; + $output->Fax = $tabIdentite['Fax']; + $output->FJ = $tabIdentite['FJ']; + $output->FJ_Lib = $tabIdentite['FJ_lib']; + $output->Siren = $tabIdentite['Siren']; + $output->Nic = $tabIdentite['Nic']; + $output->Actif = $tabIdentite['Actif']; + $output->NafEtab = $tabIdentite['NafEtab']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->NafEtabLib = $tabIdentite['NafEtabLib']; + $output->AutreId = $tabIdentite['AutreId']; + $output->Source = $tabIdentite['Source']; + $output->SourceId = $tabIdentite['SourceId']; + $output->Dept = $tabIdentite['Dept']; + $output->codeCommune = $tabIdentite['codeCommune']; + $output->Capital = $tabIdentite['Capital']; + $output->CapitalDev = $tabIdentite['CapitalDev']; + $output->TrancheCA = $tabIdentite['TrancheCA']; + $output->TrancheCALib = $tabIdentite['TrancheCALib']; + $output->EffEnTr = $tabIdentite['EffEnTr']; + $output->EffEnTrLib = $tabIdentite['EffEnTrLib']; + $output->EffEtTr = $tabIdentite['EffEtTr']; + $output->EffEtTrLib = $tabIdentite['EffEtTrLib']; + return $output; + } + + /** + * Retourne les éléments du groupes + * @param string $siren + * @param int $pctMin (33, 40 ,50) + * @param int $nbNiveaux + * @return string + */ + public function getGroupesArbo($siren, $pctMin=33, $nbNiveaux=10) + { + $this->authenticate(); + + if ( empty($pctMin) || !in_array($pctMin, array(33, 40, 50)) ) { $pctMin = 33; } + if ( empty($nbNiveaux) ) { $nbNiveaux = 10; } + + if ( strlen($siren)!=9 || intval($siren)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + require_once 'Metier/partenaires/classMLiens.php'; + $liens = new MLiens($siren); + $retour = $liens->getArborescence($siren, $pctMin, $nbNiveaux); + + $this->wsLog('groupesarbo', $siren); + return json_encode($retour); + } + + + /** + * Retourne les information du groupe, tête de pont + * @param string $siren + * @return GroupeInfos + */ + public function getGroupeInfos($siren) + { + $this->authenticate(); + + if ( strlen($siren)!=9 || intval($siren)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iDb = new WDB('jo'); + $tmp = $iDb->select('etablissements_act', + 'raisonSociale, enseigne, sigle, identite_pre, adr_num, adr_btq, adr_typeVoie, adr_libVoie, adr_comp, adr_cp, adr_ville, adr_dep, adr_com, tel, fax, siren, sirenGrp', + "siren=(SELECT distinct sirenGrp FROM etablissements_act WHERE siren=$siren AND siege=1) LIMIT 0,1", false, MYSQL_ASSOC); + $tabEnt = $tmp[0]; + + $sirenGrp = $tabEnt['siren']; + + if ($sirenGrp<1000) { + throw new SoapFault('Error', 'Aucun siren de groupe'); + } + + /** Table des Nafs5 => Secteurs **/ + $tmp = $iDb->select('tabNaf5', 'codNaf2, codNaf1', '1 GROUP BY codNAf2', false, MYSQL_ASSOC); + $tabNAf2 = array(); + foreach ($tmp as $tmp2) { + $tabNAf2[$tmp2['codNaf2']]=$tmp2['codNaf1']; + } + + $tabNaf2Lib = array( + 'A'=>'Agriculture, sylviculture et pêche', + 'B'=>'Industries extractives', + 'C'=>'Industrie manufacturière', + 'D'=>'Production et distribution d\'électricité, de gaz, de vapeur et d\'air conditionné', + 'E'=>'Production et distribution d\'eau ; assainissement, gestion des déchets et dépollution', + 'F'=>'Construction', + 'G'=>'Commerce ; réparation d\'automobiles et de motocycles', + 'H'=>'Transports et entreposage', + 'I'=>'Hébergement et restauration', + 'J'=>'Information et communication', + 'K'=>'Activités financières et d\'assurance', + 'L'=>'Activités immobilières', + 'M'=>'Activités spécialisées, scientifiques et techniques', + 'N'=>'Activités de services administratifs et de soutien', + 'O'=>'Administration publique', + 'P'=>'Enseignement', + 'Q'=>'Santé humaine et action sociale', + 'R'=>'Arts, spectacles et activités récréatives', + 'S'=>'Autres activités de services', + 'T'=>'Activités des ménages en tant qu\'employeurs ; activités indifférenciées des ménages en tant que producteurs de biens et services pour usage propre', + 'U'=>'Activités extra-territoriales', + ); + + $iInsee = new MInsee(); + $tabId = $iInsee->getIdentiteEntreprise($sirenGrp); + + //Chargement retour + $output = new GroupeInfos(); + $output->grpNom = $tabEnt['raisonSociale']; + $output->grpEnseigne = $tabEnt['enseigne']; + $output->grpSigle = $tabEnt['sigle']; + $output->grpAdrNum = $tabEnt['adr_num']; + $output->grpAdrBtq = $tabEnt['adr_btq']; + $output->grpAdrTypeVoie = $tabEnt['adr_typeVoie']; + $output->grpadrLibVoie = $tabEnt['adr_libVoie']; + $output->grpAdrComp = $tabEnt['adr_comp']; + $output->grpAdrCP = $tabEnt['adr_cp']; + $output->grpAdrVille = $tabEnt['adr_ville']; + $output->grpAdrDep = $tabEnt['adr_dep']; + $output->grpAdrCom = $tabEnt['adr_com']; + $output->grpTel = $tabEnt['tel']; + $output->grpFax = $tabEnt['fax']; + $output->grpSiren = $tabEnt['siren']; + $output->grpTva = $tabId['TvaNumero']; + $output->grpIsin = $tabId['Isin']; + $output->grpNumRC = $tabId['numRC']; + $output->grpTribunal = $tabId['TribunalLib']; + $output->grpWeb = $tabId['Web']; + + $grpNbEnt = $grpEffectif = $grpCAExp = $grpCA = $nbProcol = 0; + $grpDateCrea = $grpDateImmat = date('Ymd'); + + $tmp = $iDb->select('jo.etablissements_act e', + 'e.siren, e.eff_entrep, e.dateCrea_ent AS dateCrea, e.dateImmat*1 AS dateImmat, e.bilFK, e.bilFL, e.bilYP, e.ape_entrep, e.avisCs, e.procolHisto', + "e.sirenGrp=$sirenGrp AND e.siege=1", false, MYSQL_ASSOC); + + $tabSirenGrp = array(); + $tabSecteur = array(); + $tabAvis = array(); + if ( count($tmp)>0 ) { + foreach ($tmp as $tabEnt) + { + $tabSirenGrp[] = $tabEnt['siren']; + $grpNbEnt++; + + if ($tabEnt['bilYP']>$tabEnt['eff_entrep']) + $grpEffectif+=$tabEnt['bilYP']; + else + $grpEffectif+=$tabEnt['eff_entrep']; + + if ($tabEnt['procolHisto']*1==1) $nbProcol++; + + if ($grpDateCrea>$tabEnt['dateCrea'] && $tabEnt['dateCrea']>=19000101) + $grpDateCrea=$tabEnt['dateCrea']; + + if ($grpDateImmat>$tabEnt['dateImmat'] && $tabEnt['dateImmat']>=19000101) + $grpDateImmat=$tabEnt['dateImmat']; + + $grpCAExp+=$tabEnt['bilFK']; + $grpCA+=$tabEnt['bilFL']; + + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['nb']++; + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['ca']+=$tabEnt['bilFL']; + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['eff']+=$tabEnt['eff_entrep']; + + $tabAvis[$tabEnt['avisCs']]++; + } + } + $output->grpNbProcolHisto = $nbProcol; + $output->grpCAExport = $grpCAExp; + $output->grpCA = $grpCA; + + if ($grpCA>=500000000) + $output->grpGrandGroupeFr=1; + else + $output->grpGrandGroupeFr=0; + + $output->grpNbEntrep = $grpNbEnt; + $output->grpEffectif = $grpEffectif; + + $output->grpAnneCreation = ''; + if ($grpDateCrea<$grpDateImmat) + $output->grpAnneCreation = substr($grpDateCrea,0,4); + else + $output->grpAnneCreation = substr($grpDateImmat,0,4); + + //@todo : transformer le tableau + $output->avisCs = json_encode($tabAvis); // Vérifier les procol + + $tabSecteur2 = array(); + if ( count($tabSecteur)>0 ) { + foreach ($tabSecteur as $secteur=>$tmp) { + $info = new GroupeInfosSecteur(); + $info->code = $secteur; + $info->lib = $tabNaf2Lib[$secteur]; + $info->entrepNb = $tmp['nb']; + $info->entrepTx = round($tmp['nb']*100/$grpNbEnt,2); + $info->caNb = $tmp['ca']; + $info->caTx = round($tmp['ca']*100/$grpCA,2); + $info->effNb = $tmp['eff']; + $info->effTx = round($tmp['eff']*100/$grpEffectif,2); + $tabSecteur2[] = $info; + } + } + $output->secteur = $tabSecteur2; //@todo : transformer le tableau + + $this->wsLog('groupeinfos', $siren); + return $output; + } + + /** + * Liste les bilans en saisie + * @param BilanSaisieFiltre[] $filtre + * @param integer $position + * @param integer $nbRep + */ + protected function getBilanSaisie($filtre, $position = 0, $nbRep = 50) + { + $this->authenticate(); + + $idUtilisateur = $this->User->id; + + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 50; + if ($nbRep>200) $nbRep = 200; + + $bilansM = new Application_Model_FedasoBilans(); + + $sql = $bilansM->select()->order('dateEntree DESC'); + + if (is_array($filtre) && count($filtre)>0) { + foreach($filtre as $item) { + switch($item->key) { + case 'siren': + $sql->where('siren=?', $item->value); + break; + case 'etat': + + break; + /** + * Si l'utilisateur est de S&d (idClient = 1) et SuperAdministeur ou + * Mode Edition dans les droits alors on permet la sélection d'un autre + * utilisateur + */ + case 'idUtilisateur': + if ($this->User->idClient==1 + && ($this->User->profil=='SuperAdministrateur' + || $this->checkPerm('edition')) ) { + $idUtilisateur = $item->value; + } + break; + } + } + } + + //Select user id + $sql->where('idUtilisateur=?', $idUtilisateur); + + //Paginate + $sql->limit($nbRep, $position); + //Get results + $results = $bilansM->fetchAll($sql)->toArray(); + + $iInsee = new MInsee(); + + $output = array(); + if (count($results)>0) { + foreach ($results as $result) { + + $entrep = $iInsee->getIdentiteLight($result['siren']); + + $saisie = new BilanSaisieInfos(); + $saisie->raisonSociale = $entrep['raisonSociale']; + $saisie->siren = $result['siren']; + $saisie->dateCloture = $result['dateCloture']; //@todo : date format 2010-12-31 + $saisie->duree = $result['duree']; + $saisie->dateIn = $result['dateEntree']; //@todo : date format 2011-08-31 12:00:01 + + /** + * Gestion des différents états + * 1 - dateEntree : Enregistré + * 2 - dateEnvoi : Saisie en cours + * 3 - dateRetour : Saisie + * 4 - dateChargement : Chargé en base + * + * 5 - codeRetour = : Erreur à la saisie + */ + + $saisie->etat = ''; + $saisie->date = ''; + + $output[] = $saisie; + } + } + + return $output; + } + + /** + * Liste des contacts par établissement (beta) + * @param string $siret + * @param string $filtre + * @param int $position + * @param int $nbRep + * @return ContactEtReturn + * @throws SoapFault + */ + public function getContactEt($siret, $filtre, $position = 0, $nbRep = 200) + { + $this->authenticate(); + + if ( strlen($siret)!=9 || strlen($siret)!=14 ) { + $this->sendError('1010'); + } + + $siren = substr($siret,0,9); + if (intval($siren)==0 ) { + $this->sendError('1010'); + } + + $nic = substr($nic,10,5); + if (intval($nic)==0) { + $nic = '00000'; + } + + $telephonieM = new Application_Model_JoTelephonie(); + $sql = $telephonieM->select() + ->from($telephonieM, array('id', 'typeTel', 'infoTel', 'telephone', 'partenaire', "DATE_FORMAT(dateInsert,'%Y%m%d')")) + ->where('actif=1') + ->where('typeTel=?','tel') + ->where('siren=?',$siren) + ->where('nic=?',$nic) + ->order('dateInsert DESC') + ->limit($nbRep, $position); + try { + $contacts = $telephonieM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + //Comptage + $sql = $telephonieM->select() + ->from($telephonieM, 'COUNT(*) as nb') + ->where('actif=1') + ->where('typeTel=?','tel') + ->where('siren=?',$siren) + ->where('nic=?',$nic); + + $nbContacts = $telephonieM->fetchRow($sql)->nb; + + $list = array(); + if ( $contacts->count() > 0) { + foreach ( $contacts as $item ) + { + $contact = new ContactEt(); + $contact->id = $item->id; + $contact->value = $item->telephone; + $contact->type = $item->typeTel; + $contact->description = ''; + $contact->source = ''; + $contact->date = $item->dateInsert; + $list[] = $contact; + } + } + + //Return + $output = new ContactEtReturn(); + $output->nbReponses = $nbContacts; + $output->result = $list; + + return $output; + } + + + /** + * Identifiant locaux des pays + * @param string $codeCountry + * @return CountryId[] + * @throws SoapFault + */ + public function getCountryId($codeCountry) + { + $this->authenticate(); + + if ( strlen($codeCountry)!=3 ) { + throw new SoapFault('ERR', 'codeCountry error'); + } + + //Retrieve data + try { + $idlocalM = new Application_Model_Sdv1TabIdLocal(); + $sql = $idlocalM->select() + ->where('codPays=?', $codeCountry) + ->orWhere('codPays IS NULL'); + $row = $idlocalM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + $output = array(); + if ($row->count()>0) { + foreach ( $row as $item ) { + $struct = new CountryId(); + $struct->internalId = $item->id; + $struct->name = $item->idLocal; + $struct->longname = $item->idLocalLong; + switch ( $item->idPrincipal ) { + case 0: + $struct->type = 'Secondaire'; + break; + case 1: + $struct->type = 'Principal'; + break; + case 2: + $struct->type = 'TVA'; + break; + } + $struct->info = $item->infoIden; + $output[] = $struct; + } + } + return $output; + } + + +} \ No newline at end of file diff --git a/library/WsScore/Interne/v0.6/Service.php b/library/WsScore/Interne/v0.6/Service.php new file mode 100644 index 00000000..bc8bb8de --- /dev/null +++ b/library/WsScore/Interne/v0.6/Service.php @@ -0,0 +1,2887 @@ +authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges detail sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesDetail($siren, $tabTypes); //@todo : date + + $tabRet = array(); + if (count($ret)>0) { + foreach ($ret as $item ) { + $privileges = new PrivilegesDetail(); + $privileges->numDebiteur = $item['numDebiteur']; + $privileges->greffe = $item['greffe']; + $privileges->greffeLib = $item['greffeLib']; + $privileges->dateEven = $item['dateEven']; + $privileges->dateFraiche = $item['dateFraiche']; + $privileges->dateSD = $item['dateSD']; + $privileges->insType = $item['insType']; + $privileges->insTypeLib = $item['insTypeLib']; + $privileges->insNum = $item['insNum']; + $privileges->insDate = $item['insDate']; + $privileges->insDateEch = $item['insDateEch']; + $privileges->insObjet = $item['insObjet']; + $privileges->insMontant = $item['insMontant']; + $privileges->insDev = $item['insDev']; + $privileges->insDateFin = $item['insDateFin']; + $privileges->radDate = $item['radDate']; + $privileges->radMention = $item['radMention']; + $privileges->radPartiel = $item['radPartiel']; + $privileges->radPartMt = $item['radPartMt']; + $privileges->radDev = $item['radDev']; + $privileges->creNom = $item['creNom']; + $privileges->creAdresse1 = $item['creAdresse1']; + $privileges->creAdresse2 = $item['creAdresse2']; + $privileges->creAdresse3 = $item['creAdresse3']; + $privileges->creCP = $item['creCP']; + $privileges->creVille = $item['creVille']; + $privileges->crePays = $item['crePays']; + $privileges->creAutres = $item['creAutres']; + $tabRet[] = $privileges; + } + } + $this->wsLog('privdetail', $siren, join(',',$tabTypes)); + $output = new PrivilegesDetailReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne les privilèges cumulés + * @param string $siren + * @param array $tabTypes + * @return PrivilegesCumulReturn + */ + public function getPrivilegesCumul($siren, $tabTypes=array('03','04')) + { + $this->authenticate(); + //Initialisation + if (empty($tabTypes)) $tabTypes = array('03','04'); + debugLog('I',"Liste des privilèges cumul sur $siren ".print_r($tabTypes, true),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iPriv = new MPrivileges(); + $ret = $iPriv->getPrivilegesCumul($siren, $tabTypes); + $tabRet = array(); + + if (isset($ret['03']) && count($ret['03']>0)){ + $value = $ret['03']; + $priv = new PrivilegesCumul(); + $priv->insType = '03'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + + if (isset($ret['04']) && count($ret['04']>0)){ + $value = $ret['04']; + $priv = new PrivilegesCumul(); + $priv->insType = '04'; + $priv->nb = $value['nb']; + $priv->insTypeLib = $value['insTypeLib']; + $priv->dateFraiche = $value['dateFraiche']; //@todo : date + $priv->dateDerInsc = $value['dateDerInsc']; //@todo : date + $priv->nomDerCre = $value['nomDerCre']; + $priv->numDebiteur = $value['numDebiteur']; + $priv->greffeLib = $value['greffeLib']; + $priv->dateMajSD = $value['dateMajSD']; //@todo : date + $priv->insCumul = $value['insCumul']; + $tabRet[] = $priv; + } + + //Log + foreach ($tabTypes as $type) + { + $this->wsLog('privcumul', $siren, $type); + } + + $output = new PrivilegesCumulReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Liste les mandataires correspondant à un nom donné + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @param int $cpDep Code postal ou département du mandataire + * @return SearchMandatairesReturn + */ + public function searchMandataires($nom, $type=array('A','M'), $cpDep=0) + { + $this->authenticate(); + + //Initialisation + if (empty($type)) $type = array('A','M'); + if (empty($cpDep)) $cpDep = 0; + $tabRet = array(); + + debugLog('I',"Recherche de Mandataires '$nom' (Dep=$cpDep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabTmp = $iInsee->searchMandataires($nom, true, $type, $cpDep); + + foreach ($tabTmp as $i=>$mand) + { + $mandataire = new SearchMandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = $mand; + $tabRet[] = $mandataire; + + } + $output = new SearchMandatairesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des tribunaux ou Compétences demandées + * @param array|string $tabTypes Tableau des types de Compétences demandés 'C':Commerce, 'I':Instance, 'G':TGI, 'A':Préfectures, 'B':Sous-préf, 'D':Tribunal Administratif, 'H':Prud'hommes, 'L': Cour d'Appel, 'M': Tribunal Mixte, 'O':CCI, 'V': Cour Administrative d'Appel + * @return TribunauxReturn + **/ + public function getTribunaux($tabTypes) + { + $this->authenticate(); + + //Initialisation + if (empty($tabTypes)) $tabTypes = array(); + if (is_string($tabTypes)) $tabTypes = (array)$tabTypes; + + $iBodacc = new MBodacc(); + debugLog('I',"Liste des tribunaux demandées",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabTmp = $iBodacc->getListeTribunaux(); + //@todo : Retourner liste en ordre alphabétique + $tabRet = array(); + if (count($tabTypes)==0) { + foreach ($tabTmp as $i => $tribunal){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } else { + foreach ($tabTmp as $i=>$tribunal){ + $type = substr($i,-1); + if ( in_array($type, $tabTypes) ){ + $tri = new Tribunal(); + $tri->code = $i; + $tri->nom = $tribunal['nom']; + $tabRet[] = $tri; + } + } + } + $this->wsLog('tribunaux', '', print_r($tabTypes,1)); + $output = new TribunauxReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Enregistre une action utilisateur pour la facturation + * @param string $page + * @param string $siret + * @param int $id + * @param string $ref + * @return void + */ + public function setLog($page, $siret, $id=0, $ref='') + { + $this->authenticate(); + + //Initialisation + if (empty($id)) $id = 0; + if (empty($ref)) $ref = ''; + if ( $id!=0 ) { + $ref2=''.$id.'/'.$ref; + } else { + $ref2=$ref; + } + $this->wsLog($page, $siret, $ref2); + debugLog('I',"Insertion d'un log pour la page $page $siret $ref2",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + + /** + * Récupère le mandataire par son id + * @param int $idMand Identifiant du mandataire + * @return MandataireReturn + */ + public function getMandataire($idMand) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + debugLog('I',"Donne le Mandataires correspondant à $idMand",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + require_once 'Metier/insee/classMInsee.php'; + $iInsee = new MInsee(); + $tabRet = $iInsee->getMandataire($idMand); + $mandataire = new MandataireDetail(); + $mandataire->Nom = $tabRet['Nom']; + $mandataire->Prenom = $tabRet['Prenom']; + $mandataire->tribunal = $tabRet['tribunal']; + $mandataire->adresse = $tabRet['adresse']; + $mandataire->adresseComp = $tabRet['adresseComp']; + $mandataire->ville = $tabRet['ville']; + $mandataire->email = $tabRet['email']; + $mandataire->web = $tabRet['web']; + $mandataire->contact = $tabRet['contact']; + $output = new MandataireReturn(); + $output->error = $error; + $output->result = $mandataire; + return $output; + } + + /** + * Liste les mandataires compétentes pour une cours d'appel donnée + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @return MandatairesReturn + */ + public function getMandataires($codeTribunal=0, $type=array('A','M')) + { + $this->authenticate(); + //Initialisation + $iInsee = new MInsee(); + $error = new ErrorType(); + $trib = serialize($codeTribunal); + debugLog('I',"Liste des Mandaitaires ou Administrateur du Tribunal/Cours d'Appel $trib demandé",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!is_array($codeTribunal) && strlen($codeTribunal)>3 && $codeTribunal*1==0) + { + // $codeTribunal est un identifiant de tribunal + $iBodacc = new MBodacc(); + $tabTmp = $iInsee->getMandataires(array($iBodacc->getTribunalIdCA($codeTribunal)), true, $type); + } + elseif ($codeTribunal*1==0) + { + // On veut tous les mandataires + $tabTmp = $iInsee->getMandataires(array(), true, $type); + } + elseif (is_array($codeTribunal)) + { + // On veut les mandataires d'une CA + $tabTmp = $iInsee->getMandataires($codeTribunal, true, $type); + } + $tabRet = array(); + foreach ($tabTmp as $i=>$mand){ + $mandataire = new Mandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = $mand; + $tabRet[]= $mandataire; + } + $output = new MandatairesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des conventions + * @param string $siren + * @return ListeConventionsReturn + */ + public function getListeConventions($siren) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + $tabRet = array(); + + debugLog('I',"Liste des conventions demandée pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)<>9){ + debugLog('W', "Siren/Siret $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren Siret inexistant'; + + } elseif ($siren*1==0){ + + debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteEntreprise($siren); + + if (empty($tabIdentite) && isset($tabIdentite['erreur']) && + $tabIdentite['erreur']<>''){ + + debugLog('W', "Siren $siren non présent en base", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 102; + $error->errmsg = 'Siren inexistant'; + + } else { + + $naf = $tabIdentite['NafEnt']; + $trancheEffectif = $tabIdentite['EffEnTr']; + $effectif = $tabIdentite['Effectif']; + $fj = $tabIdentite['entreprise']['FJCodeEntrep']; + + $isolv = new MSolvabilite($siren, $naf, $trancheEffectif, + $effectif, $tabIdentite['CP'], $fj, $tabIdentite['Capital'], + $tabIdentite['CapitalDev'], $tabIdentite['DateCreaEn'], + $tabIdentite['DateCreaEt'] + ); + $noteStructure = $isolv->getSolvabilite(); + $naf4 = $isolv->getNaf4($naf); + + $tabTmp = $iInsee->listeConventions($naf4, $tabIdentite['Dept']); + foreach ($tabTmp as $conv) + { + $convention = new Convention(); + $convention->idCC = $conv['id CC']; + $convention->nomCC = $conv['nom CC']; + $convention->infoCC = $conv['infoCC']; + $convention->editorCC = $conv['editeur CC']; + $convention->nbPageCC = $conv['nb page CC']; + $convention->isbnCC = $conv['isbn CC']; + $convention->dateCC = $conv['date edition CC']; + $convention->joCCmaj = $conv['joCCmaj']; + $tabRet[] = $convention; + } + $this->wsLog('conventions',$siren); + } + } + + $output = new ListeConventionsReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Donne la cours d'appel d'un tribunal par son code + * @param string $codeTribunal Code BODACC sur 6 caractères du tribunal + * @return int + **/ + public function getIdCoursAppel($codeTribunal) + { + $this->authenticate(); + $iBodacc = new MBodacc(); + return $iBodacc->getTribunalIdCA($codeTribunal); + } + + /** + * Récupère le contenu d'une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return AnnonceCollecteReturn + */ + public function getAnnonceCollecte($idAnn, $siret) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $annonceCollecte = new AnnonceCollecte(); + $siren = substr($siret,0,9)*1; + if (!$this->checkEdition()) { + + $error->errnum = 0; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $iDb = new WDB(); + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $idAnn = preg_replace('/^0\./','', ''.$idAnn) * 1; + if ($idAnn>0) + { + $res = $iDb->select('annonces', + 'id, siren, sirenValide, typeEven, strEven, raisonSociale, adresse, codePostal, ville, dateJugement, dateCessationPaiement, dateEffetFinP, numero, inter1type, inter1id, inter1nom, inter2type, inter2id, inter2nom, inter3type, inter3id, inter3nom, inter4type, inter4id, inter4nom, tribunal, montant, actionsNb, complement, infosBrutes, nouvActivite, nouvDir, nouvAdr, nouvFJ, annonce, source, parutionIdJal, parutionNum, dateSource, idSaisie, idAnnonce, dateInsert', + "id=$idAnn", false, MYSQL_ASSOC + ); + if (count($res)>0) + { + $ann = $res[0]; + $annonceCollecte->id = $ann['id']; + $annonceCollecte->siren = $ann['siren']; + $annonceCollecte->raisonSociale = $ann['raisonSociale']; + $annonceCollecte->adresse = $ann['adresse']; + $annonceCollecte->codePostal = $ann['codePostal']; + $annonceCollecte->ville = $ann['ville']; + $annonceCollecte->dateJugement = $ann['dateJugement']; + + //@todo : Les libellées ne sont pas présent LibEven + $tabEven = array(); + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $ann['typeEven']; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + if (!empty($ann['strEven'])){ + foreach ( explode(';',$ann['strEven']) as $code ) + { + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $code; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + } + } + + $annonceCollecte->even = $tabEven; + $annonceCollecte->dateSource = $ann['dateSource']; + $annonceCollecte->dateCessationPaiement = $ann['dateCessationPaiement']; + $annonceCollecte->dateEffetFinP = $ann['dateEffetFinP']; + $annonceCollecte->tribunal = $ann['tribunal']; + $annonceCollecte->numero = $ann['numero']; + $annonceCollecte->montant = $ann['montant']; + $annonceCollecte->actionsNb = $ann['actionsNb']; + $annonceCollecte->inter1type = $ann['inter1type']; + $annonceCollecte->inter1id = $ann['inter1id']; + $annonceCollecte->inter1nom = $ann['inter1nom']; + $annonceCollecte->inter2type = $ann['inter2type']; + $annonceCollecte->inter2id = $ann['inter2id']; + $annonceCollecte->inter2nom = $ann['inter2nom']; + $annonceCollecte->inter3type = $ann['inter3type']; + $annonceCollecte->inter3id = $ann['inter3id']; + $annonceCollecte->inter3nom = $ann['inter3nom']; + $annonceCollecte->complement = $ann['complement']; + $annonceCollecte->nouvActivite = $ann['nouvActivite']; + $annonceCollecte->nouvDir = $ann['nouvDir']; + $annonceCollecte->nouvAdr = $ann['nouvAdr']; + $annonceCollecte->nouvFJ = $ann['nouvFJ']; + $annonceCollecte->source = $ann['source']; + + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret) : ".$ann['raisonSociale'],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } else { + $error->errnum = 1; + $error->errmsg = 'Edition impossible'; + } + } + else + { + $error->errnum = 745741; + $error->errmsg = 'Selection impossible'; + } + } + $output = new AnnonceCollecteReturn(); + $output->error = $error; + $output->result = $annonceCollecte; + return $output; + } + + /** + * getDevises + * @param string $codeIsoDevise + * @return DevisesReturn + */ + public function getDevises($codeIsoDevise='') + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if (empty($codeIsoDevise)) $codeIsoDevise = ''; + + debugLog('I',"Liste des devises ou devise $codeIsoDevise demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new MInsee(); + $tabTmp = $iInsee->getDevises($codeIsoDevise); + + $tabRet = array(); + foreach ($tabTmp as $i=>$dev) + { + if ( $i!='' ){ + $devise = new Devise(); + $devise->devIso = $i; + $devise->devNom = $dev; + $tabRet[] = $devise; + } + } + $output = new DevisesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Retourne la liste des codes devises, libellés, date et valeur + * (toutes les devises ou une seule) + * @param string $devise Devise sur 3 lettres (facultatif) + * @return DevisesCoursReturn + */ + public function getDeviseCours($devise=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB('sdv1'); + if ($devise) $strDevise=" AND c.devise='$devise' "; + else $strDevise=''; + + $tabRet = array(); + + $res = $iDb->select('devise_cours c, devise_liste l', 'c.devise, l.devNom, max(c.date) as dateChange, c.valeur', "c.devise=l.devIso $strDevise GROUP BY c.devise ORDER BY c.devise ASC", false, MYSQL_ASSOC); + foreach ($res as $tabDev) + { + $devise = new DevisesCours(); + $devise->codeDevise = $tabDev['devise']; + $devise->nomDevise = $tabDev['devNom']; + $devise->dateChange = $tabDev['dateChange']; + $devise->valeurDevise = $tabDev['valeur']; + $tabRet[] = $devise; + } + $output = new DevisesCoursReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getMarques + * @param string $siren + * @param int $idDepot + * @return MarquesReturn + */ + public function getMarques($siren, $idDepot=0) + { + $this->authenticate(); + $this->permission('marques'); + debugLog('I',"Liste des marques déposées pour le siren $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (empty($idDepot)) $idDepot = 0; + $error = new ErrorType(); + $marques = array(); + require_once 'Metier/partenaires/classMMarques.php'; + $iMarque = new MMarques(); + $ret = $iMarque->getMarques($siren, $idDepot); + + foreach ($ret as $item) + { + if ($idDepot==$item['numeroMarque']) { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Perimetre = $item['periMarque']; + $marque->Deposant = $item['detailDeposant']; + $marque->Depot = $item['numeroMarque']; + $marque->Classes = $item['classesMarque']; + $marque->ProduitsServices = $item['PS']; + $marque->Mandataire = $item['detailMandataire']; + $marque->Statut = $item['detailStatut']; + $marque->Date = $item['dateDepot']; + $marque->Lieu = $item['lieuDepot']; + $marque->Historique = $item['histo']; + $marque->Img = ''; + $marque->Pdf = $item['pdfLink']; + + $marques[] = $marque; + break; + } else { + $marque = new Marque(); + $marque->Marques = $item['nomMarque']; + $marque->Perimetre = ''; + $marque->Deposant = ''; + $marque->Depot = $item['numeroMarque']; + $marque->Classes = ''; + $marque->Mandataire = ''; + $marque->Statut = ''; + $marque->Date = $item['dateDepot']; + $marque->Lieu = ''; + $marque->Img = ''; + $marque->Pdf = $item['pdfLink']; + $marques[] = $marque; + } + } + + $this->wsLog('marques',$siren); + $output = new MarquesReturn(); + $output->error = $error; + $output->result = $marques; + return $output; + } + + /** + * Enter description here ... + * @param string $siren + * @param string $piece + * @param string $type + * @param integer $visu + * @param integer $courrier + * @param string $ref + * @return PieceReturn + */ + public function getPiece($siren, $piece='kbis', $type='', $visu=1, $courrier=0, $ref='') + { + $this->authenticate(); + $this->permission('kbis'); + set_time_limit(400); + + if (empty($piece)) $piece = 'kbis'; + if (empty($type)) $type = ''; + if (empty($visu)) $visu = 1; + if (empty($courrier)) $courrier = 1; + if (empty($ref)) $ref = ''; + $error = new ErrorType(); + + $erreur = false; + + $kbisLocalPDF = DOC_WEB_LOCAL."kbis/$piece-$siren.pdf"; + + if (file_exists($kbisLocalPDF) + && date('Ymd', filemtime($kbisLocalPDF))==date('Ymd') + && filesize($kbisLocalPDF)>0 ) { + $size = filesize($kbisLocalPDF); + $erreur = false; + $tabNom = array(); + $ficDist = ''; + $cache = 1; + } else { + exec("php ".APPLICATION_PATH."/../batch/getPieces.php $siren $piece > /dev/null &"); + $ficDist=''; + $size=$cache=0; + } + // On supprimer l'ancien kbis si trop vieux ou vide + if (date('Ymd', filemtime($kbisLocalPDF))<>date('Ymd') + || filesize($kbisLocalPDF)==0) { + unlink($kbisLocalPDF); + } + $result = new PieceResult(); + $result->Siren = $siren; + //@todo : Envoyer vers controlleur + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result->Url = $hostname.'/data/kbis/'.$piece.'-'.$siren.'.pdf'; + + $result->Taille = $size; + $result->Cache = $cache; + $result->fichier = $ficDist; + $this->wsLog('kbis', $siren, "$cache/$visu/$courrier/$type/$ref"); + $output = new PieceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Commande de statut association + * @param InfoCmdAsso $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdAssoReturn + */ + public function setCmdAsso( $infosCommande, $infosDemandeur ) + { + $this->authenticate(); + $this->permission('actes'); + //Initialisation + $error = new ErrorType(); + + $iDb = new WDB(); + + $siren = $infosCommande->siren; + $idEntreprise = intval($infosCommande->idEntreprise); + $assoNom = $infosCommande->raisonSociale; + debugLog('I',"commandeAsso pour $assoNom ($siren) début",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, 0, $idEntreprise); + $assoSigle = $tabIdentite['Sigle']; + $assoAdresse = $tabIdentite['Adresse'].EOL.$tabIdentite['Adresse2']; + $assoCP = $tabIdentite['CP']; + $assoVille = $tabIdentite['Ville']; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert=array( + 'idUser' => $this->User->id, + 'source' => 'asso', + 'login' => $this->User->login, + 'emailCommande' => $mail, + 'siren' => $siren, + 'refUtilisateur' => $infosDemandeur->reference, + 'refDocument' => serialize($infosDemandeur), + 'refCommande' => serialize($infosCommande), + 'dateCommande' => DATETIME, + ); + + $iDbCrm = new WDB('sdv1'); + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + + if ( $ret!=0 ) { + + sendMail('production@scores-decisions.com', 'support@scores-decisions.com', + "Commande de statuts association pour $assoNom ($siren)", + "Association :".EOL.print_r($infosCommande, true).EOL.EOL. + "Demandeur:".EOL.print_r($infosDemandeur, true).EOL.EOL. + "Ref : i".$ret + ); + + $result = new CmdAssoDetail(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + sendMail('production@scores-decisions.com', $mail, + "Votre commande de statuts association sur $assoNom ($siren)", + "Votre demande de statuts sur l'association $assoNom a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog('commandeAsso', $siren, 'i'.$ret.'-'.DATETIME); + debugLog('I',"commandeAsso pour $assoNom ($siren) fin",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + } else { + + $error->errnum = 1; + $error->errmsg = 'Erreur'; + + } + + $output = new CmdAssoReturn(); + $output->error = $error; + $output->commande = $result; + return $output; + } + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param InfosCmdEnquete $infosCommande + * @param InfosDemandeur $infosDemandeur + * @return CmdEnqueteReturn + **/ + public function setCmdEnquete($infosCommande, $infosDemandeur) + { + $this->authenticate(); + $this->permission('enquetec'); + + //Initialisation + $error = new ErrorType(); + $siren = $infosCommande->siren; + + $mail = trim($infosDemandeur->email); + if ($mail=='') $mail = $this->User->email; + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source'=> 'intersud', // 'greffes', 'asso', 'graydon' + 'login'=> $this->User->login, + 'emailCommande'=> $mail, + 'siren'=> $siren, + 'refDocument'=> serialize($infosDemandeur), + 'refCommande'=> serialize($infosCommande), + 'dateCommande'=> DATETIME, + ); + debugLog('I',"Intersud, début sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo=print_r($infosCommande, 1).EOL.print_r($infosDemandeur,1).EOL; + + $idClient = $this->User->idClient; + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande ="NOM et Prénom du client demandeur : ".$infoDemandeur->nom.EOL; + $strInfoCommande.="Email du client demandeur : $mail".EOL; + $strInfoCommande.="Tel/Fax du demandeur : ".$infosDemandeur->tel.' / '.$infosDemandeur->fax.EOL; + $strInfoCommande.="Profil du demandeur : ".trim($infosDemandeur->service).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login = 'YLENA'; // Demandes en test + $pass = 'WYLFE'; + $nomClient = $strInfoCommande = ''; + $typeEnqLog = 'enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + $url='http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array('login' => $login, 'pwd' => $pass); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + // wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + //@todo + return array('error'=>array('errnum'=>4563456, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes'), 'results'=>$tabRet); + } + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + + /** Connexion à l'Extranet Intersud + **/ + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base + **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ". + DATETIME."\n". + "Date et heure de la commande : ".date('d/m/Y - H:i')."\n". + "Origine de la commande : $nomClient". + "$strInfoCommande"."\n\n". + + "CA : ".$infosCommande->PrecisionsMontantCA."\n". + "Motif de la demande : ".trim($infosCommande->PrecisionsMotif.' '.$infosCommande->PrecisionsAutre)."\n". + "Type de la demande : ".$infosCommande->PrecisionsType."\n". + "Anciennete de la relation : ".$infosCommande->Anciennete.' '.$infosCommande->AncienneteDuree."\n". + "Observations : ".$infosCommande->Observation.EOL; + + if ($infosCommande->ImpayeesChoix<>'non') + $comment.="Impayé(s) : ".$infosCommande->ImpayeesNombre." impayé(s) pour un montant de ".$infosCommande->ImpayeesMontant." en date du ".$infosCommande->ImpayeesDate.EOL; + + if ($infosCommande->RetardPaiementChoix<>'non') + $comment.="Retard(s) de paiement : ".$infosCommande->RetardPaiementNombre." retard(s) pour un montant de ".$infosCommande->RetardPaiementMontant." en date du ".$infosCommande->RetardPaiementDate.EOL; + + if ($infosCommande->LitigeChoix<>'non') + $comment.="Présence de litige(s) : ".$infosCommande->LitigePrecisions.EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infosCommande->Type)) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infosCommande->RIB))<>'') + $iDbCrm->insert('banques', array( + 'siren'=>$siren, + 'libBanqueGuichet'=>'', + 'precis'=>1, + 'codeBanque'=>$infosCommande->RIB->banque, + 'codeGuichet'=>$infosCommande->RIB->guichet, + 'numCompte'=>$infosCommande->RIB->compte.$infosCommande->RIB->cle, + 'dateSource'=>DATETIME, + ), true); + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc'=>$tabIdentite['Nom'], + 'cible_enk'=>9, // 9 + 'siret'=>$siren, + 'acti'=>'', + 'soc_exp'=>$tabInterSud['soc_exp'], + 'type_enk'=>$enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri'=>'', + 'adr'=>$tabIdentite['Adresse'], + 'ref_exp'=>$tabInterSud['ref_exp'], + 'autre_type_enk'=>'', // Texte libre + 'adr2'=>$tabIdentite['Adresse2'], + 'delai_enk'=>$enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville'=>$tabIdentite['Ville'], + 'cp'=>$tabIdentite['CP'], + 'pays'=>'', // International ? + 'nom_exp'=>$tabInterSud['nom_exp'], + 'tel'=>$tabIdentite['Tel'], + 'port'=>$infosCommande->AutreTel, + 'tel_exp'=>$tabInterSud['tel_exp'], + 'bank'=>trim(implode(' ', $infosCommande->RIB)), + 'int_enk'=>$tabInterSud['int_enk'], // International ? + 'encours'=>$infosCommande->Encours, + 'nb_ech'=>$infosCommande->NbEcheances, + 'delai2_enk'=>$tabInterSud['delai2_enk'], // International ? + 'email_exp'=>$tabInterSud['email_exp'], + 'cred'=>'', + 'comment'=>urlencode($comment), + 'val_ret'=>$tabInterSud['val_ret'], + ); + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + $tabRet=array(); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + //@todo + return array('error'=>array('errnum'=>456345, 'errmsg'=>'Connexion impossible à la plateforme d\'enquetes 3'), 'results'=>$tabRet); + } + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + $referer=$url; + $body=$page['body']; + + $result = new CmdEnquete(); + $result->siren = $siren; + $result->emailCommande = $mail; + $result->dateCommande = DATETIME; + $result->refCmd = 'i'.$ret; + + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + $this->wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url='http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb=microtime(true); + $page=getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin=microtime(true); + $duree+=$tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + $output = new CmdEnqueteReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getStatsUtilisateurs + * @param string $login + * @param string $mois + * @param string $type + * @param boolean $payants + * @return array + */ + public function getStatsUtilisateurs($login, $mois, $type='jour', $payants=false) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + if ($payants) + { + $strPayant="AND (page LIKE 'greffe_%' OR page LIKE 'inpi_%' OR page='kbis') AND params<>'' AND (params NOT LIKE '%erreur%' OR params LIKE '%erreur 17%') "; + } + else { + $strPayant=''; + } + $iDbCrm = new WDB('sdv1'); + if ($type=='jour') { + $rep = $iDbCrm->select('logs', + 'date(dateHeure) as jours, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY jours", + false, MYSQL_ASSOC); + } elseif ($type=='heure') { + $rep = $iDbCrm->select('logs', + 'HOUR(dateHeure) as heures, count(*) as nb', + "1 $strPayant AND login='$login' AND dateHeure BETWEEN '$mois-01' AND '$mois-31' GROUP BY heures", + false, MYSQL_ASSOC); + } + $tabRet = $rep; + + + + return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabRet); + } + + /** + * getPortefeuilleCsv + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getPortefeuilleCsv($login='', $idClient=0) + { + return $this->getListeSurveillancesCsv('portefeuille', $login, $idClient); + } + + /** + * getPortefeuille + * @param PortefeuilleFiltre $filtre + * @param int $deb + * @param int $nbRet + * @return PortefeuilleReturn + */ + public function getPortefeuille($filtre, $deb=0, $nbRet=100) + { + $this->authenticate(); + + // Initialisation + $error = new ErrorType(); + if (empty($deb)) { $deb = 0; } + if (empty($nbRet)) { $nbRet = 100; } + + $tri = strtolower(trim($filtre->tri)); + switch ($tri) { + case 'ref': $orderBy='ORDER BY ref'; break; + case 'dateAjout': $orderBy='ORDER BY dateAjout'; break; + case 'dateDerEnvoi':$orderBy='ORDER BY dateDerEnvoi'; break; + case 'rs': $orderBy='ORDER BY rs'; break; + case 'cp': $orderBy='ORDER BY cp'; break; + case 'ville': $orderBy='ORDER BY ville'; break; + case 'indiScore': $orderBy='ORDER BY indiScore'; break; + case 'encours': $orderBy='ORDER BY encours'; break; + default: $orderBy='ORDER BY siren'; break; // siren ou vide ou autre + } + + $tabRet = array(); + $siren = substr($filtre->siret,0,9); + $nic = substr($filtre->siret,9,5); + $iDb = new WDB(); + $login = $this->User->login; + + $strSelect = 's.email, LPAD(s.siren,9,0) AS siren, LPAD(s.nic,5,0) AS nic, s.ref, s.dateAjout, s.rs, s.cp, s.ville, s.dateDerEnvoi, s.encoursClient, c.actif, c.procol, c.indiScore, c.indiScore20, c.encours, c.indiScoreDate, c.dateBilan, c.indiScorePre, c.indiScore20Pre, c.encoursPre, c.indiScoreDatePre, c.sourceModif, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + + $strFiltre = ''; + if (intval($siren)>0) $strFiltre.= " AND s.siren=$siren "; + if (!empty($filtre->ref)) $strFiltre.= " AND s.ref LIKE '%$filtre->ref%'"; + if (!empty($filtre->rs)) $strFiltre.= " AND s.rs LIKE '%$filtre->rs%'"; + + // Il faut compter le nombre de siren au total + $tabTmp = $iDb->select('surveillances_site s', 'count(*) as nb', "s.login='$login' AND s.source='score' AND s.dateSuppr=0 $strFiltre", false, MYSQL_ASSOC); + $nbRepTot = $tabTmp[0]['nb']; + + $tabTmp = $iDb->select('surveillances_site s, scores_surveillance c', $strSelect, "s.login='$login' AND s.source='score' AND s.dateSuppr=0 AND s.siren=c.siren $strFiltre $orderBy LIMIT $deb,$nbRet", false, MYSQL_ASSOC); + foreach ($tabTmp as $i=>$tabSurv) { + if (trim($tabSurv['rs'])<>'') { + $rs=$tabSurv['rs']; + $cp=$tabSurv['cp']; + $ville=$tabSurv['ville']; + } else { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($tabSurv['siren'], $tabSurv['nic']); + $rs=$tabIdentite['Nom']; + $cp=$tabIdentite['CP']; + $ville=$tabIdentite['Ville']; + $iDb->update('surveillances_site',array( + 'rs' => $rs, + 'cp' => $cp, + 'ville' => $ville), + "login='$login' AND source='score' AND dateSuppr=0 AND siren=".$tabSurv['siren']." AND nic=".$tabSurv['nic'], + false + ); + } + + $portefeuille = new Portefeuille(); + $portefeuille->email = $tabSurv['email']; + $portefeuille->siren = $tabSurv['siren']; + $portefeuille->nic = $tabSurv['nic']; + $portefeuille->ref = $tabSurv['ref']; + $portefeuille->dateAjout = $tabSurv['dateAjout']; + $portefeuille->rs = $rs; + $portefeuille->cp = $cp; + $portefeuille->ville = $ville; + // Entreprise + $portefeuille->actif = $tabSurv['actif']; + $portefeuille->procol = $tabSurv['procol']; + $portefeuille->indiScore = $tabSurv['indiScore']; + $portefeuille->indiScore20 = $tabSurv['indiScore20']; + $portefeuille->indiScorePre = $tabSurv['indiScorePre']; + $portefeuille->indiScore20Pre = $tabSurv['indiScore20Pre']; + $portefeuille->encours = $tabSurv['encours']; + $portefeuille->encoursPre = $tabSurv['encoursPre']; + $portefeuille->indiScoreDate = $tabSurv['indiScoreDate']; + $portefeuille->indiScoreDatePre = $tabSurv['indiScoreDatePre']; + $portefeuille->encoursClient = $tabSurv['encoursClient']; + $portefeuille->dateBilan = $tabSurv['dateBilan']; + $portefeuille->sourceModif = $tabSurv['sourceModif']; + //, c.scoreSolv, c.scoreSolvPre, c.scoreDir, c.scoreDirPre, c.scoreConf, c.scoreConfPre, c.scoreZ, c.scoreZPre, c.scoreCH, c.scoreCHPre, c.scoreAfdcc2, c.scoreAfdcc2Pre, c.situFi, c.situFiPre, c.infoNote, c.infoNotePre, c.noteStruct, c.noteStructPre, c.noteFin, c.noteFinPre, c.tendance, c.tendancePre, c.dateUpdate'; + $portefeuille->dateDerEnvoi = $tabSurv['dateDerEnvoi']; + $tabRet[] = $portefeuille; + + } + + $output = new PortefeuilleReturn(); + $output->error = $error; + $output->result = $tabRet; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbRepTot; + return $output; + } + + + /** + * rechercheHisto + * @param string $recherche + * @param string $annee + * @param string $typeBod + * @param int $deb + * @param int $nbRep + * @param int $maxRep + * @param bool $pertinence + * @return RechercheHistoReturn + */ + public function rechercheHisto($recherche, $annee='', $typeBod='', $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($annee)) $annee = ''; + if (empty($typeBod)) $typeBod = ''; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($annee)) $pertinence = false; + $liste = array(); + $index = 'histo'; + + debugLog('I',"rechercheHisto de $recherche ($annee) (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabFiltres = array(); + + if ($annee<>'' && $annee*1>=1953 && $annee*1<=date('Y')*1) + $tabFiltres = array('annee1'=>$annee); + + /* + require_once 'Metier/sphinx/recherche2.php'; + $ret=search2('histo', "$recherche", $tabFiltresAnnee, $deb, $nbRep, $maxRep, $pertinence); + */ + + if (SPHINX_HISTO_VERSION == 1){ + require_once 'Vendors/sphinxapi/sphinxapi-0.9.9.php'; + } elseif (SPHINX_HISTO_VERSION == 2){ + require_once 'Vendors/sphinxapi/sphinxapi-2.1.5.php'; + } + + $cl = new SphinxClient(); + $cl->SetServer (SPHINX_HISTO_HOST, SPHINX_HISTO_PORT); + $cl->SetConnectTimeout ( 1 ); + $cl->SetLimits ($deb, $nbRep, $maxRep); + $cl->SetMatchMode (SPH_MATCH_EXTENDED); + foreach ($tabFiltres as $nomFiltre => $valFiltre) + $cl->SetFilter($nomFiltre, array(0=>$valFiltre)); + $cl->SetRankingMode ( SPH_RANK_PROXIMITY_BM25 ); + $res = $cl->Query ( $recherche, $index ); + + if ($res===false) { + debugLog('I',"Search Sphinx : Pas de réponse pour $recherche avec ".implode(',',$tabFiltres).' ('.$cl->GetLastError() .')',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = 0; + $output->nbReponsesTotal = 0; + $output->duree = $res[time]; + $output->mots = array(); + $output->reponses = array(); + return $output; + + } + // Le moteur est opérationel + if ( $cl->GetLastWarning() ) { + debugLog('I',"Search Sphinx : Warning pour $recherche - ".$cl->GetLastWarning(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + //print "WARNING: " . $cl->GetLastWarning() . "\n\n"; + } + + debugLog('I',"'Search Sphinx dans $index de $recherche (Filtre=".implode(',',$tabFiltres)."), Deb=$deb, nbRep=$nbRep, max=$max, any=$any",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet=array(); + if ( is_array($res['matches'])) { + $iDb = new WDB(); + foreach ( $res['matches'] as $doc => $docinfo ) + { + $listeEtab=$iDb->select('histobodacc.bodacc_ocr', + "'Histo' as Loc, id, nomFichier, annee1, bod, texte", + "id=$doc"); + $etab = $listeEtab[0]; + $tabRet[]=array( + 'Localisation' => $etab['Loc'], + 'id' => $doc, + 'Pertinence' => $docinfo['weight'], + 'Fichier' => $etab['nomFichier'], + 'Annee' => $etab['annee1'], + 'Code' => $etab['bod'], + 'Texte' => $etab['texte'], + ); + } + } + debugLog('I','Search Sphinx : Retourne '. $res[total].'/'. $res[total_found] .' en '.$res[time] .'secondes',__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $liste = $tabRet; + $nbTot = $res[total_found]; + $duree = $res[time]; + $tabMots = $res['words']; + + $tabRet = array(); + $k=0; + if(count($liste)>0) { + foreach ($liste as $n=>$etab) { + $texte = Scores_Locale_String::cleanutf8($etab['Texte']); + $pattern = '/[^a-zA-Z0-9\/]+/ '; + $texte = preg_replace($pattern, ' ', $texte); + $posMin=100000; + $hitMin=1000000; + foreach ($tabMots as $mot=>$tabMot) { + if ($tabMot['hits']<$hitMin) { + $hitMin=$tabMot['hits']; + $motSignificatif=$mot; + } + } + $posMin = stripos($texte, ''.$motSignificatif); + if ($posMin<150) $posMin=150; + $texte2 = substr($texte, $posMin-150, 250); + $reponse = new RechercheHistoReponses(); + $reponse->id = $etab['id']; + $reponse->Pertinence = $etab['Pertinence']; + + //@todo : gestion du lien pour le téléchargement des fichiers bodacc + $file = strtr($etab['Fichier'], array( + '.txt'=>'.pdf', + '/mnt/bodacc/' => '')); + $vieuxWS = false; + if ($vieuxWS) { + $reponse->Fichier = 'http://tville.scores-decisions.com/bodacc/'.$file; + } else { + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $url = '/fichier/bodacc/q/'.base64_encode($file); + $reponse->Fichier = $hostname.$url; + } + $reponse->Annee = $etab['Annee']; + $reponse->Code = $etab['Code']; + $reponse->Texte = $texte2; + $tabRet[] = $reponse; + $k++; + } + } + + $criteres = new RechercheHistoCriteres(); + $criteres->recherche = $recherche; + $criteres->annee = $annee; + + $output = new RechercheHistoReturn(); + $output->criteres = $criteres; + $output->nbReponses = count($tabRet); + $output->nbReponsesTotal = $nbTot; + $output->duree = $duree; + $output->mots = array_keys($tabMots); + $output->reponses = $tabRet; + return $output; + } + + /** + * getListeSurveillanceCsv + * @param string $source + * @param string $login + * @param int $idClient + * @return ListeSurveillancesCsvReturn + */ + public function getListeSurveillancesCsv($source='', $login='', $idClient=0) + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + if (empty($source)) $source = ''; + if (empty($idClient)) $idClient = 0; + + debugLog('I',"getListeSurveillancesCsv Début $source $login $idClient",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $tabRet = array(); + $iDb = new WDB(); + $strClient = $strLogin = ''; + $exportPtf = false; + switch ($source) + { + case 'insee': + case 'annonces': + case 'bilans': + case 'score': + case 'actes': + case 'privileges': + case 'dirigeants': + break; + case 'portefeuille': + $source='score'; + $exportPtf=true; + break; + default: + $source=''; + break; + } + + if ($source<>'') $strSource = "AND source='$source' "; + else $strSource = ''; + + // Control idClient + if ($idClient==0 || ($idClient!=$this->User->idClient && $this->User->profil!='SuperAdministrateur') ){ + $idClient = $this->User->idClient; + } + $strClient = "AND u.idClient=$idClient "; + + if ($this->User->profil=='SuperAdministrateur' || $this->User->profil=='Administrateur') { + // Surveillances de tous les utilisateurs du client + if (empty($login)) { + $login = ''; + //Surveillances de l'utilisateur + } else { + $strLogin = "AND s.login='$login' "; + } + } else { + //Par défaut préselection de l'utilisateur + $login = $this->User->login; + $strLogin = "AND s.login='$login' "; + } + + $fichierCsv = DOC_WEB_LOCAL."listesurv-$source-$login-$idClient.csv"; + + if ( file_exists($fichierCsv) + && date('Ymd', filemtime($fichierCsv))==date('Ymd') + && filesize($fichierCsv)>60 ) { + $size = filesize($fichierCsv); + $erreur = false; + $tabNom = array(); + $cache = 1; + } else { + unlink($fichierCsv); + if ($source=='score') + { + if ($this->User->typeScore==20) { + $strScore='v.indiScore20 AS indiScore20'; + $strScorePre='v.indiScore20Pre AS indiScore20Pre'; + } else { + $strScore='v.indiScore AS indiScore100'; + $strScorePre='v.indiScorePre AS indiScore100Pre'; + } + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi, + s.encoursClient, v.actif, v.procol, $strScore, v.encours, v.indiScoreDate, v.dateBilan, + $strScorePre, v.encoursPre, v.indiScoreDatePre, v.sourceModif, v.scoreSolv, v.scoreSolvPre, v.scoreDir, + v.scoreDirPre, v.scoreConf, v.scoreConfPre, + e.cj, e.capital, e.capitalDev, e.ape_entrep, e.tca, e.teff_entrep, + v.dateUpdate + FROM jo.surveillances_site s, sdv1.utilisateurs u, sdv1.clients c, jo.scores_surveillance v, jo.etablissements e + WHERE s.source='score' $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id AND s.siren=v.siren AND s.siren=e.siren + GROUP BY loginUti, s.siren, s.nic, s.source, s.ref + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + } + else + { + $sql="SELECT LOWER(s.login) as loginUti, s.source, s.email, s.siren, s.nic, s.ref, s.dateAjout, + s.rs, s.cp, s.ville, s.dateDerEnvoi + FROM jo.surveillances_site s, sdv1.utilisateurs u, sdv1.clients c + WHERE 1 $strSource $strClient $strLogin AND dateSuppr=0 AND s.login=u.login AND u.idClient=c.id + ORDER BY loginUti ASC, s.siren ASC, s.nic ASC, s.source ASC, s.ref ASC"; + } + debugLog('I',"getListeSurveillancesCsv SQL $sql",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + file_put_contents(DOC_WEB_LOCAL."listesurv-$source-$login-$idClient.sql", $sql); + $c = Zend_Registry::get('config'); + exec("php ".$c->profil->path->batch."/sql2csv.php --sqlfile ".DOC_WEB_LOCAL."listesurv-$source-$login-$idClient.sql --csvfile $fichierCsv > /dev/null &"); + $size=$cache=0; + } + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = new ListeSurveillancesCsv(); + $result->Url = $hostname.DOC_WEB_URL."csv/listesurv-$source-$login-$idClient.csv"; + $result->Taille = $size; + $result->Cache = $cache; + + debugLog('I','getListeSurveillancesCsv Url='.$hostname.DOC_WEB_URL."csv/listesurv-$source-$login-$idClient.csv, Taille=$size, Cache=$cache",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $output = new ListeSurveillancesCsvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * getListeJalCollecte + * @return ListeJalCollecteReturn + */ + public function getListeJalCollecte() + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + + $iBodacc = new MBodacc(); + $tabJal = $iBodacc->getListeJalCollecte(); + foreach ($tabJal as $i=>$jal) + { + $jalCollecte = new JalCollecte(); + $jalCollecte->id = $i; + $jalCollecte->nom = $jal; + $tabRet[] = $jalCollecte; + } + $output = new ListeJalCollecteReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * getListeFichierSurv + * @param string $login + * @param string $ref + * @param string $nomFic + * @return ListeFichierSurvReturn + */ + public function getListeFichierSurv($login, $ref='*', $nomFic='') + { + $this->authenticate(); + if (empty($ref)) $ref = '*'; + if (empty($nomFic)) $nomFic = ''; + $error = new ErrorType(); + //debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $tabFichier=$tabDates=array(); + $numAbo=substr($ref, 0,5); + if (strtolower($login)=='vwbank') { + $repClient='volkswagen bank'; + $ficClient='surveillanceBodacc_SURBODPRDCFTVWBANK'; + $numAbo=$ref='19300'; + } elseif (substr($login,0,6)=='apicil') { + $repClient='apicil'; + $ficClient='surveillanceBodacc_SURBODPRDCFTAPICIL'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='omni04') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodacca3m') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSMEDERIC'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodaccomni') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSOMNIREP'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='bodacccrr') { + $repClient='aggm mederic '; + $ficClient='surveillanceBodacc_SURBODPRDFTSCRR'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='cpcambr13' || strtolower($login)=='cpcambr14') { + $repClient='cpcam des bouches du rhône'; + $ficClient='diffusionBodacc_DIFBODPRDMAICPCAM13'; + $numAbo=$ref=''; + } elseif (strtolower($login)=='frbsurveillance'){ + $repClient='france boissons'; + $ficClient='surveillanceBodacc_SURBODPRDFTPFBOISSON'; + } else { + $repClient='cnasea'; + $ficClient='surveillanceBodacc_SURBODTSTFTSCNASEA'; + } + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + if (!$dh) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Impossible d'ouvrir le dossier '/home/data/clients/$repClient/'"); + $error->errnum = 1; + $error->errmsg = "Impossible d'ouvrir le dossier client"; + } else { + while (false !== ($filename = readdir($dh))) { + if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,42)==$ficClient.$numAbo) { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($ref=='*' && $filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)<>'_') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,43,8); + $tabClients[]=substr($filename,0,42); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,37)==$ficClient && substr($filename,37,1)=='_' && $repClient=='apicil') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,38,8); + $tabClients[]=substr($filename,0,37); + } + elseif ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.csv' && substr($filename,0,38)==$ficClient && substr($filename,38,1)=='_' && $repClient=='aggm mederic ') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,39,8); + $tabClients[]=substr($filename,0,38); + } + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic : fichier lu '$filename'", "Fichier lu '$filename'"); + /* + elseif ( $ficClient=='surveillanceBodacc_SURBODPRDFTPFBOISSON' && substr($filename,0,strlen($ficClient))==$ficClient && $repClient=='france boissons') { + $tabFichier[] = $filename; + $tabDates[]=substr($filename,strlen($ficClient)+1,8); + $tabClients[]=substr($filename,0,strlen($ficClient)); + } + */ + } + /** Tableau des noms de fichier **/ + sort($tabFichier); + /** Tableau des dates de livraisons **/ + $tabDates=array_unique($tabDates); + sort($tabDates); + /** Tableau des Clients **/ + $tabClients=array_unique($tabClients); + sort($tabClients); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>$tabDates); + + /*@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", + "Fichiers :".EOL. + print_r($tabFichier, true). + "Dates:".EOL. + print_r($tabDates, true). + "Clients :".EOL. + print_r($tabClients, true) + );*/ + + if ($ref=='*') { + $tabFichier = array(); + // Boucle sur les dates de livraison + foreach ($tabDates as $dateFic) { + if (strlen($dateFic)<>8) continue; + if (!file_exists(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv") || + filesize(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv")==0) { + + $fpW=fopen(DOC_WEB_LOCAL."clients/$repClient/$ficClient".'_'."$dateFic.csv",'w'); + $entete=true; + // Boucle afin de vérifier si on est sur le bon client + foreach ($tabClients as $nomClient) { + $dh = opendir(DOC_WEB_LOCAL."clients/$repClient/"); + while (false !== ($filename = readdir($dh))) { + if (substr($filename,0,51)==$nomClient.'_'.$dateFic && substr($filename,-4)=='.csv') { + $fichier=$filename; + //break; + } + } + $fpR=fopen(DOC_WEB_LOCAL."clients/$repClient/$fichier",'r'); + //return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'results'=>array(($fichier)));//die; + if ($fpR) { + while (!feof($fpR)) { + $ligne=trim(fgets($fpR)); + if (substr($ligne,0,5)=='Siren' && $entete==true) { + fwrite($fpW, 'SITE;'.$ligne.EOL); + $entete=false; + } + elseif (substr($ligne,0,5)<>'Siren' && trim($ligne)<>'') { + fwrite($fpW, strtr($nomClient, array('surveillanceBodacc_SURBODTSTFTS'=>'', + 'surveillanceBodacc_SURBODPRDCFT'=>'')).';'.$ligne.EOL); + } + } + fclose($fpR); + } + } + fclose($fpW); + } + if (strlen($dateFic)==8) + $tabFichier[]=$ficClient.'_'.$dateFic.'.csv'; + } + } + rsort($tabFichier); + + if ($nomFic<>'') { + //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Avant BZ2'); + if (!file_exists(DOC_WEB_LOCAL."/csv/$nomFic.bz2") || + filesize(DOC_WEB_LOCAL."/csv/$nomFic.bz2")<=14) { + $string=file_get_contents("/home/data/clients/$repClient/$nomFic"); + if ($string===false) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, $nomFic", "Ouverture impossible du fichier '/home/data/clients/$repClient/$nomFic'"); + } + $bz = bzopen(DOC_WEB_LOCAL."/csv/$nomFic.bz2",'w'); + if ($bz) { + bzwrite($bz, $string, strlen($string)); + bzclose($bz); + } + } /*else + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Sans BZ2'); + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getListeFichierSurv pour $login, $ref, /home/data/clients/$repClient/$nomFic", 'Après BZ2'); + */ + } + debugLog('I',"getListeFichierSurv pour $login, $ref, $nomFic : nb fichiers=".count($tabFichier),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ($_SERVER['SERVER_PORT']!='80'){ + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $result = array(); + foreach($tabFichier as $fichier){ + $retFichier = new ListeFichierSurv(); + $retFichier->UrlFichier = $hostname.'/data/csv/'.$fichier; + $result[] = $retFichier; + } + } + $output = new ListeFichierSurvReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Geocodage d'une adresse + * @param string $adresse + * @param string $cp + * @param string $ville + * @param string $pays + * @return GeoCodeReturn + */ + public function geoCode($adresse, $cp, $ville, $pays='France') + { + $this->authenticate(); + + $ligne = date('YmdHis').";$siren;MMap AVANT"; + $fp = fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $mMap = new MMap($adresse, $cp, $ville, $pays); + + $ligne=date('YmdHis').";$siren;MMap APRES"; + $fp=fopen(LOG_PATH.'/accesDistant.log', 'a'); + fwrite($fp,$ligne.EOL); + fclose($fp); + + $geocode = new GeoCode(); + $geocode->latitude = $mMap->latitudeDec; + $geocode->longitude = $mMap->longitudeDec; + $geocode->precis = $mMap->precision; + $geocode->adresseValidee = $mMap->adresseValidee; + $geocode->latitudeDeg = $mMap->latitudeDeg; + $geocode->longitudeDeg = $mMap->longitudeDeg; + + $output = new GeoCodeReturn(); + $output->error = $error; + $output->result = $geocode; + } + + /** + * Recherche d'entreprise par leur actionnaire + * @param string $nom Raison sociale / Nom de l'actionnaire (obligatoire) + * @param string $cpVille CP, Ville + * @param string $siren Siren de l'actionnaire + * @param string $pays Pays de l'actionnaire + * @param string $pctMin Niveau de détention Minimam de l'actionnaire + * @param string $pctMax Niveau de détention Maximum de l'actionnaire + * @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) + * @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) + * @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) + * @param boolean $pertinence Recherche orthographique stricte sur les noms et prénoms (si true) + * @return SearchActReturn + */ + public function searchAct($nom, $cpVille='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + debugLog('I',"Recherche Actionnaire de $nom, $cpVille (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!empty($pays)){ + $wdb = new WDB('jo'); + $result = $wdb->select('tabPays', 'codPays3', "libPays LIKE '".$pays); + if (count($result>0)){ + $pays = $result[0]['codPays3']; + } else { + $pays = ''; + } + } + + if (empty($cpVille)) $cpVille = ''; + if (empty($siren)) $siren = ''; + if (empty($pctMin)) $pctMin = 0; + if (empty($pctMax)) $pctMax = 100; + if (empty($deb)) $deb = 0; + if (empty($nbRep)) $nbRep = 20; + if (empty($maxRep)) $maxRep = 200; + if (empty($pertinence)) $pertinence = false; + + $formR = array( + 'type' => 'act', + 'siren' => $siren, + 'actNomRS' => join(' ', array($nom, $cpVille)), + 'pays' => $pays, + 'pctMin' => $pctMin, + 'pctMax' => $pctMax, + ); + + $version = defined('SPHINX_ACT_VERSION') ? SPHINX_ACT_VERSION : 1; + require_once 'Metier/sphinx/rechercheFonc.php'; + $etabs = rechercheAct($formR, $deb, $nbRep, $maxRep); + + $iInsee = new MInsee(); + $tabRet = array(); + + $reponses = $etabs['reponses']; + if (count($reponses)>0) { + foreach ($reponses as $etab) { + $act = new EntrepriseActItem(); + $act->id = $etab['id']; + $act->Pertinence = $etab['Pertinence']; + $act->Siret = $etab['Siret']; + $act->Siege = $etab['Siege']; + $act->Nom = prepareString(strtr($etab['Nom'],'/*',' ')); + $act->Nom2 = prepareString($etab['Nom2']); + $act->Sigle = prepareString($etab['Sigle']); + $act->Enseigne = prepareString($etab['Enseigne']); + $act->Adresse = prepareString($etab['Adresse']); + $act->Adresse2 = prepareString($etab['Adresse2']); + $act->CP = $etab['CP']; + $act->Ville = prepareString($etab['Ville']); + $act->Pays = $etab['Pays']; + $act->Tel = $etab['Tel']; + $act->Fax = $etab['Fax']; + $act->FJ = $etab['FJ']; + $act->FJLib = prepareString($iInsee->getLibelleFJ($etab['FJ'])); + $act->Siren = $etab['Siren']; + $act->Nic = $etab['Nic']; + $act->Actif = $etab['Actif']; + $act->NafEtab = $etab['NafEtab']; // Etablissement + $act->NafEtabLib = prepareString($iInsee->getLibelleNaf($etab['NafEtab'])); // Etablissement + $act->NafEnt = $etab['NafEnt']; // Entreprise + $act->NafEntLib = prepareString($iInsee->getLibelleNaf($etab['NafEnt'])); + $act->ActNomRs = $etab['ActNomRs']; + $act->ActPays = $etab['ActPays']; + $act->ActDateLien = $etab['ActDateLien']; + $act->ActActif = $etab['ActActif']; + $act->ActPmin = $etab['ActPmin']; + $tabRet[] = $act; + } + } + + $output = new SearchActReturn(); + $output->nbReponses = $etabs['nbReponses']; + $output->nbReponsesTotal = $etabs['nbReponsesTotal']; + $output->result = $tabRet; + + if ($tabRet['nbReponses']==0) { + debugLog('W', "Aucun résultat pour cette recherche !", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + } + + return $output; + } + + /** + * Commande d'une enquête sur une entreprise en France ou à l'Internationale + * @param string $siren + * @param string $infoEnq Informations pour la demande d'enquête
+ * InfoEnq[Entrep][Tel]
+ * InfoEnq[Entrep][Fax]
+ * InfoEnq[Entrep][AutreTel]
+ * InfoEnq[Entrep][Mail]
+ * InfoEnq[Entrep][AutreMail]
+ * InfoEnq[Entrep][Web]
+ * InfoEnq[Entrep][Rib][Banque]
+ * InfoEnq[Entrep][Rib][Guichet]
+ * InfoEnq[Entrep][Rib][Compte]
+ * InfoEnq[Entrep][Rib][Cle]
+ * InfoEnq[Encours]
+ * InfoEnq[NbEcheances]
+ * InfoEnq[AvisAssureur]
+ * InfoEnq[Type]
+ * InfoEnq[Delai]
+ * InfoEnq[PrecisionsChoix]
+ * InfoEnq[Precisions][MontantCA]
+ * InfoEnq[Precisions][Motif]
+ * InfoEnq[Precisions][Autre]
+ * InfoEnq[Anciennete]
+ * InfoEnq[AncienneteDuree]
+ * InfoEnq[ImpayeesChoix]
+ * InfoEnq[Impayees][Montant]
+ * InfoEnq[Impayees][Nombre]
+ * InfoEnq[Impayees][Date]
+ * InfoEnq[RetardPaiementChoix]
+ * InfoEnq[RetardPaiement][Montant]
+ * InfoEnq[RetardPaiement][Nombre]
+ * InfoEnq[RetardPaiement][Date]
+ * InfoEnq[LitigeChoix]
+ * InfoEnq[Litige][Precisions]
+ * InfoEnq[Observation]
+ * @param string $infoDemande Informations sur l'utilisateur
+ * InfoUser[Profil]
+ * InfoUser[ProfilAutre]
+ * InfoUser[Identite]
+ * InfoUser[Tel]
+ * InfoUser[Fax]
+ * InfoUser[Email]
+ * InfoUser[Ref]
+ * @return CommandeEnqueteReturn + */ + public function commandeEnquete($siren, $infoEnq, $infoDemande) + { + $this->authenticate(); + //Initialisation + $infoEnq = json_decode($infoEnq); + $infoDemande = json_decode($infoDemande); + + $mail = trim($infoDemande['Email']); + if ($mail=='') { + $mail=$this->User->email; + } + + $tabInsert = array( + 'idUser' => $this->User->id, + 'source' => 'intersud', // 'greffes', 'asso', 'graydon' + 'login' => $tabInfoUser['login'], + 'emailCommande' => $mail, + 'siren' => $siren, + 'refDocument' => serialize($infoDemande), + 'refCommande' => serialize($infoEnq), + 'dateCommande' => DATETIME, + // 'idClient'=> $tabInfoUser['idClient'], + ); + debugLog('I',"Intersud, début commande sur $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $messageInfo = print_r($infoEnq, 1).EOL.print_r($infoDemande,1).EOL; + + $idClient = $this->User->idClient; + + $iDbCrm = new WDB('sdv1'); + $rep = $iDbCrm->select('clients', ' nom, racineLogin, InterSudLogin, InterSudPass', "id='$idClient'", false, MYSQL_ASSOC); + $login = trim($rep[0]['InterSudLogin']); + $pass = trim($rep[0]['InterSudPass']); + $nomClient = trim(strtoupper($rep[0]['nom'])); + $strInfoCommande = "NOM et Prénom du client demandeur : ".$infoDemande['Identite'].EOL; + $strInfoCommande.= "Email du client demandeur : $mail".EOL; + $strInfoCommande.= "Tel/Fax du demandeur : ".$infoDemande['Tel'].' / '.$infoDemande['Fax'].EOL; + $strInfoCommande.= "Profil du demandeur : ".trim($infoDemande['Profil'].' '.$infoDemande['ProfilAutre']).EOL; + $typeEnqLog='enqueteDemNF'; + + if ($login=='' || $pass=='') { + /** Il ne s'agit pas d'un client final, on anonymise la commande **/ + $login='YLENA'; // Demandes en test + $pass='WYLFE'; + $nomClient=$strInfoCommande=''; + $typeEnqLog='enqueteDem'; + /* ENQUETES EN PROD + $login='FACTURE'; + $pass='AWKROM'; + */ + } + + /** Connexion à l'Extranet Intersud **/ + $url = 'http://www.intersud.fr/espace_client/espace_client.php'; + $cookie = $referer = ''; + $tabPost = array( + 'login' => $login, + 'pwd' => $pass, + ); + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible à la plateforme Intersud".EOL.$strInfoCommande); + //wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + throw new SoapFault('1',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree = $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + $cookie = $page['header']['Set-Cookie']; + $intersudNomPrenom=$intersudRaisonSociale=''; + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudNomPrenom=trim($matches[1]); + if (preg_match('/(.*)<\/td>/Uis',$body,$matches)) + $intersudRaisonSociale=trim($matches[1]); + debugLog('I',"Intersud, connexion via $login pour $intersudRaisonSociale ($intersudNomPrenom, cookie=$cookie)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + /* + $fp=@fopen(LOG_PATH."/intersud.log", "a"); + @fwrite($fp, EOL.DATETIME.EOL.print_r($page,true).'========================================================================================================='.EOL.EOL); + @fclose($fp); + die(); + */ + /** Page formulaire de demande d'enquête **/ + $url='http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Connexion impossible au formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('2',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($page,true)); + @fclose($fp); + $tabInterSud=array(); + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[2][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + if (preg_match_all('/$field) { + $tmp=explode('"', $matches[1][$i]); + $tabInterSud[$field]=$tmp[0]; + } + } + $ref_exp=$tabInterSud['ref_exp']; + $email_exp=$tabInterSud['email_exp']; + $tel_exp=$tabInterSud['tel_exp']; + debugLog('I',"Intersud, formulaire enquête ref $ref_exp, $email_exp, $tel_exp",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $fp=@fopen(LOG_PATH.'/intersud.log', "a"); + @fwrite($fp, print_r($matches,true)); + @fwrite($fp, print_r($tabInterSud,true)); + @fclose($fp); + + /** Insertion de la commande en base **/ + $ret = $iDbCrm->insert('commandes', $tabInsert, true); + $comment = "Référence de la commande chez Scores et Décisions : i$ret - ".DATETIME." + Date et heure de la commande : ".date('d/m/Y - H:i')." + Origine de la commande : $nomClient + $strInfoCommande + + CA : ".$infoEnq['Precisions']['MontantCA']." + Motif de la demande : ".trim($infoEnq['Precisions']['Motif'].' '.$infoEnq['Precisions']['Autre'])." + Type de la demande : ".$infoEnq['Precisions']['Type']." + Anciennete de la relation : ".$infoEnq['Anciennete'].' '.$infoEnq['AncienneteDuree']." + Observations : ".$infoEnq['Observation'].EOL; + + if ($infoEnq['ImpayeesChoix']<>'non') + $comment.="Impayé(s) : ".$infoEnq['Impayees']['Nombre']." impayé(s) pour un montant de ".$infoEnq['Impayees']['Montant']." en date du ".$infoEnq['Impayees']['Date'].EOL; + + if ($infoEnq['RetardPaiementChoix']<>'non') + $comment.="Retard(s) de paiement : ".$infoEnq['RetardPaiement']['Nombre']." retard(s) pour un montant de ".$infoEnq['RetardPaiement']['Montant']." en date du ".$infoEnq['RetardPaiement']['Date'].EOL; + + if ($infoEnq['LitigeChoix']<>'non') + $comment.="Présence de litige(s) : ".$infoEnq['Litige']['Precisions'].EOL; + + $enqType=0; + $enqDelai=7; + switch (strtolower($infoEnq['Type'])) { + case 'premier': $enqType=0; $enqDelai=6; break; + case 'gold': $enqType=1; break; + case 'distrimat': $enqType=2; break; + case 'star': $enqType=3; break; + case 'avis_bancaire': $enqType=4; break; + case 'autre': $enqType=5; break; + } + + /** Ajout du RIB si communiqué **/ + if (@trim(implode(' ', $infoEnq['Entrep']['Rib']))<>''){ + $iDbCrm->insert('banques', array( + 'siren' => $siren, + 'libBanqueGuichet' => '', + 'precis' => 1, + 'codeBanque' => $infoEnq['Entrep']['Rib']['Banque'], + 'codeGuichet' => $infoEnq['Entrep']['Rib']['Guichet'], + 'numCompte' => $infoEnq['Entrep']['Rib']['Compte'].$infoEnq['Entrep']['Rib']['Cle'], + 'dateSource' => DATETIME, + ), true); + } + + /** Remplissage du formulaire d'enquête pour soumission à Intersud **/ + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren); + $tabPost = array( + 'soc' => $tabIdentite['Nom'], + 'cible_enk' => 9, // 9 + 'siret' => $siren, + 'acti' => '', + 'soc_exp' => $tabInterSud['soc_exp'], + 'type_enk' => $enqType, // 0=Premier, 1=Gold, 2=Distrimat, 3=Star, 4=Avis bancaire, 5=Autre + 'nom_diri' => '', + 'adr' => $tabIdentite['Adresse'], + 'ref_exp' => $tabInterSud['ref_exp'], + 'autre_type_enk' => '', // Texte libre + 'adr2' => $tabIdentite['Adresse2'], + 'delai_enk' => $enqDelai, // 6=24h, 7=72h, 8=+de5jours + 'ville' => $tabIdentite['Ville'], + 'cp' => $tabIdentite['CP'], + 'pays' => '', // International ? + 'nom_exp' => $tabInterSud['nom_exp'], + 'tel' => $tabIdentite['Tel'], + 'port' => $infoEnq['Entrep']['AutreTel'], + 'tel_exp' => $tabInterSud['tel_exp'], + 'bank' => trim(implode(' ', $infoEnq['Entrep']['Rib'])), + 'int_enk' => $tabInterSud['int_enk'], // International ? + 'encours' => $infoEnq['Encours'], + 'nb_ech' => $infoEnq['NbEcheances'], + 'delai2_enk' => $tabInterSud['delai2_enk'], // International ? + 'email_exp' => $tabInterSud['email_exp'], + 'cred' => '', + 'comment' => urlencode($comment), + 'val_ret' => $tabInterSud['val_ret'], + ); + $url = 'http://intersud.fr/espace_client/demande_enquete.php'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, $tabPost, $referer, false, '', '', 7); + if ($page['code']<>200) { + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ATTENTION : Commande d'enquete sur $siren", "Validation impossible du formulaire d'enquête Intersud".EOL.$strInfoCommande); + throw new SoapFault('3',"Connexion impossible à la plateforme d'enquêtes"); + } + + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + $referer = $url; + $body = $page['body']; + + $output = new CommandeEnqueteReturn(); + $output->siren = $siren; + $output->emailCommande = $mail; + $output->dateCommande = DATETIME; + $output->refCmde = 'i'.$ret; + + //$strInfoCommande $mail + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Commande d'enquete sur $siren", $comment.EOL.EOL.'---------------------------------'.EOL.$messageInfo.EOL.EOL.'---------------------------------'.EOL.$body); + @sendMail('production@scores-decisions.com', $mail, "Votre demande d'enquete sur ".$tabIdentite['Nom']." ($siren)", "Votre demande d'enquête sur la société ".$tabIdentite['Nom']." a été prise en compte sous la référence i$ret - ".DATETIME); + wsLog($typeEnqLog, $siren, 'i'.$ret.'-'.DATETIME); + + /** Gestion de la déconnexion **/ + $url = 'http://intersud.fr/espace_client/index.php?code_ret=9'; + $tdeb = microtime(true); + $page = getUrl($url, $cookie, '', $referer, false, '', '', 7); + $tfin = microtime(true); + $duree+= $tfin-$tdeb; + + $ret = $iDbCrm->update('commandes', array('dureeCommande'=>round($duree,3)), "idCommande=$ret"); + + return $output; + } + + /** + * Retourne l'ensemble des informations des dirigeants opérationnels (non statutaires) de l'entreprise + * @param string $siren Siren de l'entreprise + * @return DirigeantOp[] + */ + public function getDirigeantsOp($siren, $id = null) + { + $this->authenticate(); + + debugLog('I',"Dirigeants opérationnels demandés pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $dirs = $iInsee->getDirigeantsOp($siren, $id); + $tabRet = array(); + if (count($dirs)>0){ + foreach ($dirs as $nb => $dir) { + $objet = new DirigeantOp(); + $objet->Id = $dir['Id']; + $objet->Code = $dir['Fonction']; + $objet->Titre = prepareString($dir['Titre']); + $objet->Societe = prepareString($dir['Societe']); + $objet->Civilite = prepareString($dir['Civilite']); + $objet->Nom = prepareString($dir['Nom']); + $objet->Prenom = prepareString($dir['Prenom']); + $objet->NomUsage = prepareString($dir['NomUsage']); + $objet->NaissDate = $dir['NaissDate'];// 07/09/1961 + $objet->NaissVille = prepareString($dir['NaissVille']); // LE RUSSEY + $objet->NaissDepPays = prepareString($dir['NaissDepPays']); // LE RUSSEY + $objet->Tel = $dir['Tel']; + $objet->Fax = $dir['Fax']; + $objet->Email = $dir['Email']; + $objet->Ancien = $dir['Ancien']; + $objet->DateFct = $dir['DateFct']; + + $tabRet[] = $objet; + } + } + $this->wsLog('dirigeantsOp', $siren); + debugLog('I', 'Nb Dirigeants Op retournés = '. count($dirs), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return $tabRet; + } + + /** + * Liste de tous les dépôts enregistrés à l'INPI pour une entreprise + * @param string $siren Siren de l'entreprise + * @return Depot[] + */ + public function getListeDepots($siren) + { + $this->authenticate(); + + debugLog('I',"Liste des dépots INPI pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (strlen($siren)>9 || (substr($siren,0,9)*1)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iRncs=new MRncs(); + $evens=$iRncs->getListeDepots($siren); + $tabRet = array(); + if (count($evens)>0){ + foreach ($evens as $nb=>$even){ + $objet = new Depot(); + $objet->CodeDepot = $even['codDepot']; + $objet->LibDepot = prepareString($even['libDepot']); + $objet->DateDepot = $even['datDepot']; + $objet->RefDepot = $even['refDepot']; + $objet->DateRncs = $even['datRncs']; + $objet->DateMAJ = $even['datSed']; + + $tabRet[] = $objet; + } + } + debugLog('I', 'Nb dépôts retournés = '. count($tabRet), __LINE__, __FILE__, __FUNCTION__, __CLASS__); + return $tabRet; + } + + + /** + * Identite Light + * @param string $siret + * @param integer $id + * @return IdentiteLight + */ + public function getIdentiteLight($siret, $id = 0) + { + $this->authenticate(); + + //Initialisation + if ( empty($id) ) { + $id = 0; + } + + $siret = trim($siret); + $len = strlen($siret); + $siren = substr($siret,0,9); + if ($len == 14) { + $nic = substr($siret,9,5)*1; + } elseif ($len == 9) { + $nic = 0; + } + + if ($siren*1==0 && $id==0) { + $this->sendError('1010'); + } + if ($len!=14 && $len!=9) { + $this->sendError('1020'); + } + + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($siren, $nic, $id); + + $output = new IdentiteLight(); + $output->id = $tabIdentite['id']; + $output->Siret = $tabIdentite['Siret']; + $output->Siege = $tabIdentite['Siege']; + $output->Nom = $tabIdentite['Nom']; + $output->Tribunal = $tabIdentite['Tribunal']; + $output->Sigle = $tabIdentite['Sigle']; + $output->Enseigne = $tabIdentite['Enseigne']; + $output->Adresse = $tabIdentite['Adresse']; + $output->Adresse2 = $tabIdentite['Adresse2']; + $output->AdresseNum = $tabIdentite['AdresseNum']; + $output->AdresseBtq = $tabIdentite['AdresseBtq']; + $output->AdresseVoie = $tabIdentite['AdresseVoie']; + $output->AdresseRue = $tabIdentite['AdresseRue']; + $output->CP = $tabIdentite['CP']; + $output->Ville = $tabIdentite['Ville']; + $output->Tel = $tabIdentite['Tel']; + $output->Fax = $tabIdentite['Fax']; + $output->FJ = $tabIdentite['FJ']; + $output->FJ_Lib = $tabIdentite['FJ_lib']; + $output->Siren = $tabIdentite['Siren']; + $output->Nic = $tabIdentite['Nic']; + $output->Actif = $tabIdentite['Actif']; + $output->NafEtab = $tabIdentite['NafEtab']; + $output->NafEnt = $tabIdentite['NafEnt']; + $output->NafEntLib = $tabIdentite['NafEntLib']; + $output->NafEtabLib = $tabIdentite['NafEtabLib']; + $output->AutreId = $tabIdentite['AutreId']; + $output->Source = $tabIdentite['Source']; + $output->SourceId = $tabIdentite['SourceId']; + $output->Dept = $tabIdentite['Dept']; + $output->codeCommune = $tabIdentite['codeCommune']; + $output->Capital = $tabIdentite['Capital']; + $output->CapitalDev = $tabIdentite['CapitalDev']; + $output->TrancheCA = $tabIdentite['TrancheCA']; + $output->TrancheCALib = $tabIdentite['TrancheCALib']; + $output->EffEnTr = $tabIdentite['EffEnTr']; + $output->EffEnTrLib = $tabIdentite['EffEnTrLib']; + $output->EffEtTr = $tabIdentite['EffEtTr']; + $output->EffEtTrLib = $tabIdentite['EffEtTrLib']; + + return $output; + } + + /** + * Retourne les éléments du groupes + * @param string $siren + * @param int $pctMin (33, 40 ,50) + * @param boolean $stopAtIsin + * @param int $nbNiveaux + * @return string + */ + public function getGroupesArbo($siren, $pctMin=33, $stopAtIsin=false, $nbNiveaux=10) + { + $this->authenticate(); + + if ( !in_array($pctMin, array(33, 40, 50)) && $this->User->idClient!=1 ) { + $pctMin = 33; + } + + if ( empty($stopAtIsin) ) { $stopAtIsin = false; } + if ( empty($nbNiveaux) ) { $nbNiveaux = 10; } + + if ( strlen($siren)!=9 || intval($siren)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + try { + require_once 'Metier/partenaires/classMLiens2.php'; + $liensM = new MLiens2($siren, 'siren'); + $liensM->stopAtFirstIsin = $stopAtIsin; + $tabRet = $liensM->getTree($pctMin, $nbNiveaux); + } catch(Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $this->wsLog('groupesarbo', $siren); + return json_encode($tabRet); + } + + /** + * Retourne les information du groupe, tête de pont + * @param string $siren + * @return GroupeInfos + */ + public function getGroupeInfos($siren) + { + $this->authenticate(); + + if ( strlen($siren)!=9 || intval($siren)<100 ){ + debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); + $this->sendError('1010'); + } + + $iDb = new WDB('jo'); + $tmp = $iDb->select('etablissements_act', + 'raisonSociale, enseigne, sigle, identite_pre, adr_num, adr_btq, adr_typeVoie, adr_libVoie, adr_comp, LPAD(adr_cp,5,0) AS adr_cp, adr_ville, adr_dep, adr_com, tel, fax, siren, sirenGrp', + "siren=(SELECT distinct sirenGrp FROM etablissements_act WHERE siren=$siren AND siege=1) LIMIT 0,1", false, MYSQL_ASSOC); + $tabEnt = $tmp[0]; + + $sirenGrp = $tabEnt['siren']; + + if ($sirenGrp<1000) { + throw new SoapFault('Error', 'Aucun siren de groupe'); + } + + /** Table des Nafs5 => Secteurs **/ + $tmp = $iDb->select('tabNaf5', 'codNaf2, codNaf1', '1 GROUP BY codNAf2', false, MYSQL_ASSOC); + $tabNAf2 = array(); + foreach ($tmp as $tmp2) { + $tabNAf2[$tmp2['codNaf2']]=$tmp2['codNaf1']; + } + + $tabNaf2Lib = array( + 'A'=>'Agriculture, sylviculture et pêche', + 'B'=>'Industries extractives', + 'C'=>'Industrie manufacturière', + 'D'=>'Production et distribution d\'électricité, de gaz, de vapeur et d\'air conditionné', + 'E'=>'Production et distribution d\'eau ; assainissement, gestion des déchets et dépollution', + 'F'=>'Construction', + 'G'=>'Commerce ; réparation d\'automobiles et de motocycles', + 'H'=>'Transports et entreposage', + 'I'=>'Hébergement et restauration', + 'J'=>'Information et communication', + 'K'=>'Activités financières et d\'assurance', + 'L'=>'Activités immobilières', + 'M'=>'Activités spécialisées, scientifiques et techniques', + 'N'=>'Activités de services administratifs et de soutien', + 'O'=>'Administration publique', + 'P'=>'Enseignement', + 'Q'=>'Santé humaine et action sociale', + 'R'=>'Arts, spectacles et activités récréatives', + 'S'=>'Autres activités de services', + 'T'=>'Activités des ménages en tant qu\'employeurs ; activités indifférenciées des ménages en tant que producteurs de biens et services pour usage propre', + 'U'=>'Activités extra-territoriales', + ); + + $iInsee = new MInsee(); + $tabId = $iInsee->getIdentiteEntreprise($sirenGrp); + + //Chargement retour + $output = new GroupeInfos(); + $output->grpNom = $tabEnt['raisonSociale']; + $output->grpEnseigne = $tabEnt['enseigne']; + $output->grpSigle = $tabEnt['sigle']; + $output->grpAdrNum = $tabEnt['adr_num']; + $output->grpAdrBtq = $tabEnt['adr_btq']; + $output->grpAdrTypeVoie = $tabEnt['adr_typeVoie']; + $output->grpadrLibVoie = $tabEnt['adr_libVoie']; + $output->grpAdrComp = $tabEnt['adr_comp']; + $output->grpAdrCP = $tabEnt['adr_cp']; + $output->grpAdrVille = $tabEnt['adr_ville']; + $output->grpAdrDep = $tabEnt['adr_dep']; + $output->grpAdrCom = $tabEnt['adr_com']; + $output->grpTel = $tabEnt['tel']; + $output->grpFax = $tabEnt['fax']; + $output->grpSiren = $tabEnt['siren']; + $output->grpTva = $tabId['TvaNumero']; + $output->grpIsin = $tabId['Isin']; + $output->grpNumRC = $tabId['numRC']; + $output->grpTribunal = $tabId['TribunalLib']; + $output->grpWeb = $tabId['Web']; + + $grpNbEnt = $grpEffectif = $grpCAExp = $grpCA = $nbProcol = 0; + $grpDateCrea = $grpDateImmat = date('Ymd'); + + $tmp = $iDb->select('jo.etablissements_act e', + 'LPAD(e.siren,9,0), e.eff_entrep, e.dateCrea_ent AS dateCrea, e.dateImmat*1 AS dateImmat, e.bilFK, e.bilFL, e.bilYP, e.ape_entrep, e.avisCs, e.procolHisto', + "e.sirenGrp=$sirenGrp AND e.siege=1", false, MYSQL_ASSOC); + + $tabSirenGrp = array(); + $tabSecteur = array(); + $tabAvis = array(); + if ( count($tmp)>0 ) { + foreach ($tmp as $tabEnt) + { + $tabSirenGrp[] = $tabEnt['siren']; + $grpNbEnt++; + + if ($tabEnt['bilYP']>$tabEnt['eff_entrep']) + $grpEffectif+=$tabEnt['bilYP']; + else + $grpEffectif+=$tabEnt['eff_entrep']; + + if ($tabEnt['procolHisto']*1==1) $nbProcol++; + + if ($grpDateCrea>$tabEnt['dateCrea'] && $tabEnt['dateCrea']>=19000101) + $grpDateCrea=$tabEnt['dateCrea']; + + if ($grpDateImmat>$tabEnt['dateImmat'] && $tabEnt['dateImmat']>=19000101) + $grpDateImmat=$tabEnt['dateImmat']; + + $grpCAExp+=$tabEnt['bilFK']; + $grpCA+=$tabEnt['bilFL']; + + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['nb']++; + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['ca']+=$tabEnt['bilFL']; + $tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['eff']+=$tabEnt['eff_entrep']; + + $tabAvis[$tabEnt['avisCs']]++; + } + } + $output->grpNbProcolHisto = $nbProcol; + $output->grpCAExport = $grpCAExp; + $output->grpCA = $grpCA; + + if ($grpCA>=500000000) + $output->grpGrandGroupeFr=1; + else + $output->grpGrandGroupeFr=0; + + $output->grpNbEntrep = $grpNbEnt; + $output->grpEffectif = $grpEffectif; + + $output->grpAnneCreation = ''; + if ($grpDateCrea<$grpDateImmat) + $output->grpAnneCreation = substr($grpDateCrea,0,4); + else + $output->grpAnneCreation = substr($grpDateImmat,0,4); + + //@todo : transformer le tableau + $output->avisCs = json_encode($tabAvis); // Vérifier les procol + + $tabSecteur2 = array(); + if ( count($tabSecteur)>0 ) { + foreach ($tabSecteur as $secteur=>$tmp) { + $info = new GroupeInfosSecteur(); + $info->code = $secteur; + $info->lib = $tabNaf2Lib[$secteur]; + $info->entrepNb = $tmp['nb']; + $info->entrepTx = round($tmp['nb']*100/$grpNbEnt,2); + $info->caNb = $tmp['ca']; + $info->caTx = round($tmp['ca']*100/$grpCA,2); + $info->effNb = $tmp['eff']; + $info->effTx = round($tmp['eff']*100/$grpEffectif,2); + $tabSecteur2[] = $info; + } + } + $output->secteur = $tabSecteur2; //@todo : transformer le tableau + + $this->wsLog('groupeinfos', $siren); + return $output; + } + + /** + * Liste les bilans en saisie + * @param BilanSaisieFiltre[] $filtre + * @param integer $position + * @param integer $nbRep + */ + protected function getBilanSaisie($filtre, $position = 0, $nbRep = 50) + { + $this->authenticate(); + + $idUtilisateur = $this->User->id; + + if (empty($position)) $position = 0; + if (empty($nbRep)) $nbRep = 50; + if ($nbRep>200) $nbRep = 200; + + $bilansM = new Application_Model_FedasoBilans(); + + $sql = $bilansM->select()->order('dateEntree DESC'); + + if (is_array($filtre) && count($filtre)>0) { + foreach($filtre as $item) { + switch($item->key) { + case 'siren': + $sql->where('siren=?', $item->value); + break; + case 'etat': + + break; + /** + * Si l'utilisateur est de S&d (idClient = 1) et SuperAdministeur ou + * Mode Edition dans les droits alors on permet la sélection d'un autre + * utilisateur + */ + case 'idUtilisateur': + if ($this->User->idClient==1 + && ($this->User->profil=='SuperAdministrateur' + || $this->checkPerm('edition')) ) { + $idUtilisateur = $item->value; + } + break; + } + } + } + + //Select user id + $sql->where('idUtilisateur=?', $idUtilisateur); + + //Paginate + $sql->limit($nbRep, $position); + //Get results + $results = $bilansM->fetchAll($sql)->toArray(); + + $iInsee = new MInsee(); + + $output = array(); + if (count($results)>0) { + foreach ($results as $result) { + + $entrep = $iInsee->getIdentiteLight($result['siren']); + + $saisie = new BilanSaisieInfos(); + $saisie->raisonSociale = $entrep['raisonSociale']; + $saisie->siren = $result['siren']; + $saisie->dateCloture = $result['dateCloture']; //@todo : date format 2010-12-31 + $saisie->duree = $result['duree']; + $saisie->dateIn = $result['dateEntree']; //@todo : date format 2011-08-31 12:00:01 + + /** + * Gestion des différents états + * 1 - dateEntree : Enregistré + * 2 - dateEnvoi : Saisie en cours + * 3 - dateRetour : Saisie + * 4 - dateChargement : Chargé en base + * + * 5 - codeRetour = : Erreur à la saisie + */ + + $saisie->etat = ''; + $saisie->date = ''; + + $output[] = $saisie; + } + } + + return $output; + } + + /** + * Liste des contacts par établissement (beta) + * @param string $siret + * @param string $filtre + * Possible value for "filtre" => fax, web, mail, tel + * @param int $position + * @param int $nbRep + * @return ContactEtReturn + * @throws SoapFault + */ + public function getContactEt($siret, $filtre = null, $position = 0, $nbRep = 200) + { + $this->authenticate(); + + if ( strlen($siret)!=9 && strlen($siret)!=14 ) { + $this->sendError('1010'); + } + + $siren = substr($siret,0,9); + if (intval($siren)==0 ) { + $this->sendError('1010'); + } + + $nic = substr($siret,9,5); + if (intval($nic)==0) { + $nic = '00000'; + } + + $typeToSelect = array('fax', 'web', 'mail', 'tel'); + + if ($filtre !== null && !in_array($filtre, $typeToSelect)) { + throw new SoapFault('ERR', "Unknown filtre"); + } + + $telephonieM = new Application_Model_JoTelephonie(); + $sql = $telephonieM->select() + ->from($telephonieM, array( + 'id', + 'LPAD(siren,9,0) AS siren', + 'LPAD(nic,5,0) AS nic', + 'typeTel', + 'infoTel', + 'LPAD(telephone, 10, 0) AS telephone', + 'partenaire', + "dateProvPartenaire", + 'IF(dateSuppr!=0,1,0) AS deleted', + )) + ->where('actif=1') + ->where('typeTel IN ("'.join('","', $typeToSelect).'")') + ->where('siren=?',$siren); + + if ( intval($nic) > 0 ) { + $sql->where('nic=?',$nic); + } + + if ( $filtre != null ) { + $sql->where('typeTel=?', $filtre); + } + + $sql->order('typeTel ASC'); + $sql->order('dateInsert DESC')->limit($nbRep, $position); + + try { + $contacts = $telephonieM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + //Comptage + $sql = $telephonieM->select() + ->from($telephonieM, 'COUNT(*) as nb') + ->where('actif=1') + ->where('typeTel IN ("'.join('","', $typeToSelect).'")') + ->where('siren=?',$siren); + + if ( intval($nic) > 0 ) { + $sql->where('nic=?',$nic); + } + + $result = $telephonieM->fetchRow($sql); + $nbContacts = 0; + if ( $result !== null ) { + $nbContacts = $result->nb; + } + + $list = array(); + if ( $contacts->count() > 0) { + foreach ( $contacts as $item ) { + $contact = new ContactEt(); + $contact->id = $item->id; + $contact->siren = $item->siren; + $contact->nic = $item->nic; + if ( in_array($item->typeTel, array('mail', 'web')) ) { + $contact->value = $item->infoTel; + $contact->description = ''; + } else { + $contact->value = $item->telephone; + $contact->description = $item->infoTel; + } + $contact->type = $item->typeTel; + + $contact->source = $item->partenaire; + + $date = new Zend_Date($item->dateProvPartenaire, 'yyyyMMdd'); + $contact->date = $date->toString('yyyy-MM-dd'); + + $contact->deleted = false; + if ($item->deleted==1) { + $contact->deleted = true; + } + + $list[] = $contact; + } + } + + //Return + $output = new ContactEtReturn(); + $output->nbReponses = $nbContacts; + $output->result = $list; + + return $output; + } + + + /** + * Identifiant locaux des pays + * @param string $codeCountry + * @return CountryId[] + * @throws SoapFault + */ + public function getCountryId($codeCountry) + { + $this->authenticate(); + + if ( strlen($codeCountry)!=3 ) { + throw new SoapFault('ERR', 'codeCountry error'); + } + + //Retrieve data + try { + $idlocalM = new Application_Model_Sdv1TabIdLocal(); + $sql = $idlocalM->select() + ->where('codPays=?', $codeCountry) + ->orWhere('codPays IS NULL') + ->where('dateSuppr=?', '0000-00-00 00:00:00'); + $row = $idlocalM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + $output = array(); + if ($row->count()>0) { + foreach ( $row as $item ) { + $struct = new CountryId(); + $struct->internalId = $item->id; + $struct->name = $item->idLocal; + $struct->longname = $item->idLocalLong; + switch ( $item->idPrincipal ) { + case 0: + $struct->type = 'Secondaire'; + break; + case 1: + $struct->type = 'Principal'; + break; + case 2: + $struct->type = 'TVA'; + break; + } + $struct->info = $item->infoIden; + $output[] = $struct; + } + } + return $output; + } + + /** + * Retourne l'historique des scores + * @param string $siret + * @param string $type + * @return ScoresHistoReturn + * @throws SoapFault + */ + public function getScoresHisto($siret, $type='indiscore') + { + $this->authenticate(); + + if ( strlen($siret)!=9 && strlen($siret)!=14 ) { + $this->sendError('1010'); + } + + $siren = substr($siret,0,9); + if ( intval($siren)==0 ) { + $this->sendError('1010'); + } + + if( strtolower($type)=='indiscore' ) { + $type = ( $this->User->typeScore==20 ) ? 'indiScore20' : 'indiScore'; + } + + $scoresDb = new Application_Model_JoScoresSurveillance(); + + $sql1 = $scoresDb->select() + ->from(array('j'=>'scores_surveillance'), array("j.$type", 'j.encours', 'j.indiScoreDate', 'j.sourceModif'), 'jo') + ->where('siren=?',$siren) + ->where('indiScoreDate >= (CURDATE() - INTERVAL 5 YEAR)') + ->group('indiScoreDate'); + + $sql2 = $scoresDb->select() + ->from(array('h'=>'scores_surveillance'), array("h.$type", 'h.encours', 'h.indiScoreDate', 'h.sourceModif'), 'historiques') + ->where('siren=?',$siren) + ->where('indiScoreDate >= (CURDATE() - INTERVAL 5 YEAR)') + ->group('indiScoreDate'); + + $query = $scoresDb->select() + ->union(array($sql1, $sql2)) + ->group('indiScoreDate') + ->order('indiScoreDate DESC'); + + try { + $rows = $scoresDb->fetchAll($query); + } catch(Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $motifLib = array( + 'ajout' => "Initialisation", + 'ancien' => "Score trop ancien", + 'bilans1' => "Publication bilan", + 'bilans2' => "Publication bilan", + 'bilansasso'=> "Publication bilan Association", + 'bodacc' => "Publication Bodacc", + 'collecte' => "Publication JAL ou Greffe", + 'dirigeants'=> "Modification de l'administration", + 'impayes' => "Informations de paiements", + 'insee' => "Modification identitaires INSEE", + 'jour' => "Modifications identitaires", + 'liens' => "Mise à jour de la structure du groupe", + 'modifenc' => "Autre modification identitaire", + 'privileges'=> "Mise à jour des privilèges", + 'regulier' => "Informations de paiements", + 'rncs' => "Modifications identitaires RNCS", + 'default' => "Modification identitaire", + ); + + $list = array(); + + foreach($rows as $row) { + $item = new ScoresHisto(); + $item->date = $row->indiScoreDate; + $item->value = $row->{$type}; + $item->label = $motifLib[$row->sourceModif]; + $item->encours = round($row->encours/1000,1); + $list[] = $item; + } + + $output = new ScoresHistoReturn(); + $output->type = $type; + $output->nbReponses = count($list); + $output->result = $list; + + return $output; + } + + /** + * Liste des établissements d'une entreprise + * @param string $siren Siren de l'entreprise + * @param integer $departement Limiter aux établissements du departement + * @param integer $actif Otpionnel 1=Uniquements les actifs, 0=inactifs, Néant=Tous + * @param integer $position + * @param integer $nbRep + * + * @return EtablissementsGeoReturn + */ + public function getEtablissementsGeo($siren, $dep = 0, $actif = -1, $position = 0, $nbRep = 20) + { + $this->authenticate(); + $this->permission('etablissements'); + + //Initialisation + if (empty($dep)) { $dep = 0; } + if (!in_array($actif, array(0,1))) { $actif = -1; } + if (empty($position)) { $position = 0; } + if (empty($nbRep)) { $nbRep = 20; } + + $departement = $dep; + + if (strlen($siren)!=9 || intval($siren)==0 ) { + $this->sendError('1010'); + } + + $iDb = new WDB(); + + $iInsee = new MInsee($iDb); + $rep = $iInsee->getEtablissements($siren, '', $position, $nbRep, 200, $departement, $actif); + $etabs = $rep['reponses']; + $nbReponses = $rep['nbReponsesTotal']; + + $result = array(); + if (count($etabs)>0) { + foreach ($etabs as $nb => $etab) { + $etablissement = new EtablissementGeo(); + $etablissement->id = $etab['id']; + $etablissement->Siege = $etab['Siege']; + $etablissement->Enseigne = $etab['Enseigne']; + $etablissement->Adresse = $etab['Adresse']; + $etablissement->Adresse2 = $etab['Adresse2']; + $etablissement->CP = $etab['CP']; + $etablissement->Ville = $etab['Ville']; + $etablissement->Tel = $etab['Tel']; + $etablissement->Fax = $etab['Fax']; + $etablissement->Nic = $etab['Nic']; + $etablissement->Actif = $etab['Actif']; + $etablissement->NafEtab = $etab['NafEtab']; + $etablissement->NafEtabLib = $etab['NafEtabLib']; + $etablissement->EffEtTr = $etab['EffEtTr']; + $etablissement->EffEtTrLib = $etab['EffEtTrLib']; + + $adresse = $iInsee->getIdentiteLight($siren, $etab['Nic']); + require_once 'Metier/partenaires/classMMap.php'; + $mMap = new MMap(false, $iDb); + $mMap->geoCodeAdresse($adresse['AdresseNum'], '', $adresse['AdresseVoie'], + $iInsee->getCodeVoie($adresse['AdresseVoie']), $adresse['AdresseRue'], + $etab['CP'], $adresse['Ville'], 'France'); + + $etablissement->GeoLatitude = $mMap->latitudeDec; + $etablissement->GeoLongitude = $mMap->longitudeDec; + $etablissement->GeoAltitude = $mMap->altitude; + $etablissement->GeoPrecis = $mMap->precision; + + $result[] = $etablissement; + } + } + + $this->wsLog('etablissements', $siren); + + $output = new EtablissementsGeoReturn(); + $output->nbReponses = $nbReponses; + $output->result = $result; + return $output; + } +} \ No newline at end of file diff --git a/library/WsScore/Order/v0.1/Service.php b/library/WsScore/Order/v0.1/Service.php new file mode 100644 index 00000000..a8bda129 --- /dev/null +++ b/library/WsScore/Order/v0.1/Service.php @@ -0,0 +1,440 @@ +authenticate(); + $this->permission('UPLOADBILAN'); + + //Check siren + + $refCommande = uniqid(); + + $data = array( + 'refCommande' => $refCommande, + 'siren' => $siren, + 'userId' => $this->User->id, + 'bilanConfidentiel' => $private, + 'bilanSource' => $source, + 'bilanCloture' => $date, + 'bilanType' => $type, + 'dateInsert' => date('YmdHis'), + ); + try { + $commandeM = new Application_Model_Sdv1OrderBilanInput(); + $commandeM->insert($data); + return $refCommande; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + + /** + * Financial account : Tag file is sent + * @param string $ref + * @param string $filename + * @throws SoapFault + * @return boolean + */ + public function setBilanInputFile($ref, $filename) + { + $this->authenticate(); + $this->permission('UPLOADBILAN'); + + $data = array( + 'bilanFileSent' => date('YmdHis'), + 'bilanFile' => $filename, + ); + try { + $commandeM = new Application_Model_Sdv1OrderBilanInput(); + $commandeM->update($data, 'refCommande="'.$ref.'"'); + return true; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return false; + } + + /** + * Liste des commandes de saisie de bilan + * @param string $month + * @throws SoapFault + * @return BilanInput[] + */ + public function getBilanInputList($month = null) + { + $this->authenticate(); + + if ($month === null) { + $month = date('Y-m'); + } + $dateStart = $month.'-01 00:00:00'; + $dateEnd = $month.'-31 23:59:59'; + + $list = array(); + + try { + $commandeM = new Application_Model_Sdv1OrderBilanInput(); + $sql = $commandeM->select()->where('userId=?', $this->User->id); + $result = $commandeM->fetchAll($sql); + if (count($result) > 0) { + foreach($result as $item) { + $cmd = new BilanInput(); + $cmd->Reference = $item->refCommande; + $cmd->Siren = $item->siren; + $cmd->BilanFileRecv = $item->bilanFileRecv; + $cmd->BilanCloture = $item->bilanCloture; + $cmd->BilanType = $item->bilanType; + $cmd->ErreurDate = $item->erreurDate; + $cmd->ErreurLabel = $item->erreurTxt; + $cmd->DateInsert = $item->dateInsert; + $cmd->DateSaisie = $item->dateSaisie; + $list[] = $cmd; + } + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return $list; + } + + /** + * Détail d'un bilan en commande saisie + * @param string $ref + * @throws SoapFault + * @return BilanInput|NULL + */ + protected function getBilanInputDetail($ref) + { + $this->authenticate(); + + try { + $commandeM = new Application_Model_Sdv1OrderBilanInput(); + $sql = $commandeM->select()->where('userId=?', $this->User->id)->where('refCommande=?', $ref); + $item = $commandeM->fetchRow($sql); + if ($item !== null) { + $cmd = new BilanInput(); + $cmd->Reference = $item->refCommande; + $cmd->Siren = $item->siren; + $cmd->BilanFileRecv = $item->bilanFileRecv; + $cmd->BilanCloture = $item->bilanCloture; + $cmd->BilanType = $item->bilanType; + $cmd->ErreurDate = $item->erreurDate; + $cmd->ErreurLabel = $item->erreurTxt; + $cmd->DateInsert = $item->dateInsert; + $cmd->DateSaisie = $item->dateSaisie; + return $cmd; + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return null; + } + + /** + * Liste des commandes KBIS + * @param string $month + * @throws SoapFault + * @return PieceKbis[] + */ + public function getKbisList($month = null) + { + $this->authenticate(); + + if ($month === null) { + $month = date('Y-m'); + } + $dateStart = $month.'-01 00:00:00'; + $dateEnd = $month.'-31 23:59:59'; + + $list = array(); + + try { + $commandeM = new Application_Model_Sdv1GreffeCommandesKb(); + $sql = $commandeM->select()->where('login=?', $this->User->login); + $result = $commandeM->fetchAll($sql); + if (count($result) > 0) { + foreach($result as $item) { + $cmd = new PieceKbis(); + $cmd->Reference = $item->refCommande; + $cmd->Mode = $item->mode; + $cmd->Error = $item->cmdError; + $cmd->CompanyName = $item->raisonSociale; + $cmd->CompanySiren = $item->siren; + $cmd->DateInsert = $item->dateInsert; + $cmd->DateEnvoi = $item->dateEnvoi; + $list[] = $cmd; + } + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return $list; + } + + /** + * Detail de la commande d'un KBIS + * @param unknown $ref + * @throws SoapFault + * @return BilanInput|NULL + */ + protected function getKbisDetail($ref) + { + $this->authenticate(); + + try { + $commandeM = new Application_Model_Sdv1GreffeCommandesKb(); + $sql = $commandeM->select()->where('login=?', $this->User->login)->where('refCommande=?', $ref); + $item = $commandeM->fetchRow($sql); + if ($item !== null) { + $cmd = new BilanInput(); + $cmd->Reference = $item->refCommande; + $cmd->Mode = $item->mode; + $cmd->Error = $item->cmdError; + $cmd->CompanyName = $item->raisonSociale; + $cmd->CompanySiren = $item->siren; + $cmd->DateInsert = $item->dateInsert; + $cmd->DateEnvoi = $item->dateEnvoi; + return $cmd; + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return null; + } + + protected function getKbisFile($ref) + { + $this->authenticate(); + + // --- Paramètres + $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'; + $file = null; + + // --- Lecture des informations de la commande + try { + $commandeM = new Application_Model_Sdv1GreffeCommandesKb(); + $sql = $commandeM->select()->where('login=?', $this->User->login)->where('refCommande=?', $ref); + $item = $commandeM->fetchRow($sql); + if ($item !== null) { + + + + $cmd = new BilanInput(); + $cmd->Reference = $item->refCommande; + $cmd->Mode = $item->mode; + $cmd->Error = $item->cmdError; + $cmd->CompanyName = $item->raisonSociale; + $cmd->CompanySiren = $item->siren; + $cmd->DateInsert = $item->dateInsert; + $cmd->DateEnvoi = $item->dateEnvoi; + return $cmd; + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + + + + } + + protected function getActeList($month = null) + { + $this->authenticate(); + + if ($month === null) { + $month = date('Y-m'); + } + $dateStart = $month.'-01 00:00:00'; + $dateEnd = $month.'-31 23:59:59'; + + $list = array(); + + try { + $commandeM = new Application_Model_Sdv1GreffeCommandesAc(); + $sql = $commandeM->select()->where('login=?', $this->User->login); + $result = $commandeM->fetchAll($sql); + if (count($result) > 0) { + foreach($result as $item) { + $cmd = new BilanInput(); + $cmd->Reference = $item->refCommande; + $cmd->Mode = $item->mode; + $cmd->Error = $item->cmdError; + + //@todo : Génére le libellé du document + $cmd->DocDepotNum; + $cmd->DocDepotDate; + $cmd->DocActeNum; + $cmd->DocActeType; + $cmd->DocActeDate; + + $cmd->CompanyName = $item->raisonSociale; + $cmd->CompanySiren = $item->siren; + $cmd->DateInsert = $item->dateInsert; + $cmd->DateEnvoi = $item->dateEnvoi; + $list[] = $cmd; + } + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return $list; + } + + protected function getActeDetail($ref){} + protected function getActeFile($ref){} + + /** + * Liste des commandes de bilan infogreffe + * @param string $month + * @throws SoapFault + * @return multitype:BilanInput + */ + protected function getBilanList($month = null) + { + $this->authenticate(); + + if ($month === null) { + $month = date('Y-m'); + } + $dateStart = $month.'-01 00:00:00'; + $dateEnd = $month.'-31 23:59:59'; + + $list = array(); + + try { + $commandeM = new Application_Model_Sdv1GreffeCommandesBi(); + $sql = $commandeM->select()->where('login=?', $this->User->login); + $result = $commandeM->fetchAll($sql); + if (count($result) > 0) { + foreach($result as $item) { + $cmd = new BilanInput(); + $cmd->Reference = $item->refCommande; + $cmd->Mode = $item->mode; + $cmd->Error = $item->cmdError; + $cmd->DocBilanCloture = $item->bilanCloture; + $cmd->DocBilanType = $item->bilanType; + $cmd->CompanyName = $item->raisonSociale; + $cmd->CompanySiren = $item->siren; + $cmd->DateInsert = $item->dateInsert; + $cmd->DateEnvoi = $item->dateEnvoi; + $list[] = $cmd; + } + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return $list; + } + + /** + * Détail de la commande de bilan Infogreffe + * @param unknown $ref + * @throws SoapFault + * @return BilanInput|NULL + */ + protected function getBilanDetail($ref) + { + $this->authenticate(); + + try { + $commandeM = new Application_Model_Sdv1GreffeCommandesKb(); + $sql = $commandeM->select()->where('login=?', $this->User->login)->where('refCommande=?', $ref); + $item = $commandeM->fetchRow($sql); + if ($item !== null) { + $cmd = new BilanInput(); + $cmd->Reference = $item->refCommande; + $cmd->Mode = $item->mode; + $cmd->Error = $item->cmdError; + $cmd->DocBilanCloture = $item->bilanCloture; + $cmd->DocBilanType = $item->bilanType; + $cmd->CompanyName = $item->raisonSociale; + $cmd->CompanySiren = $item->siren; + $cmd->DateInsert = $item->dateInsert; + $cmd->DateEnvoi = $item->dateEnvoi; + return $cmd; + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return null; + } + + protected function getBilanFile($ref){} + + protected function setInvestigation() + { + $this->authenticate(); + $this->permission('enquetec'); + + //Table pour le stockage des demandes d'investigation + + } + +} \ No newline at end of file diff --git a/library/WsScore/Pieces/v0.1/Service.php b/library/WsScore/Pieces/v0.1/Service.php new file mode 100644 index 00000000..3ac8eb22 --- /dev/null +++ b/library/WsScore/Pieces/v0.1/Service.php @@ -0,0 +1,1092 @@ +authenticate(); + $this->permission('KBIS'); + + $siren = substr($siren, 0, 9); + + //Vérification du siren + if ( intval($siren)==0 ) { + $this->sendError('1010'); + } elseif ( strlen($siren)!=9 ) { + $this->sendError('1020'); + } + if ( empty($diffusion) ) { + $diffusion = 'T'; + } + + $iInsee = new MInsee(); + $identite = $iInsee->getIdentiteLight($siren); + + $refCommande = uniqid(); + + $commandeM = new Application_Model_Sdv1GreffeCommandesKb(); + try { + $id = $commandeM->insert(array( + 'refCommande' => $refCommande, + 'login' => $this->User->login, + 'email' => $this->User->email, + 'refClient' => $reference, + 'mode' => $diffusion, + 'siren' => $siren, + 'raisonSociale' => $identite['Nom'], + 'dateInsert' => date('YmdHis'), + )); + } catch (Zend_Db_Exception $e) { + + } + + switch ( $diffusion ) { + + //Demande de KBIS par email + case 'M': + //Demande de KBIS original par courrier + case 'C': + + return $refCommande; + + break; + + //Téléchargement du KBIS (payant) + case 'T': + default: + + $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)); + $commandeM->update(array('dateEnvoi'=> date('YmdHis')), 'id='.$id); + + 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) ) { + + $identifiant = $identite['Siret']; + + //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"); + } + + $commandeM->update(array('dateEnvoi'=> date('YmdHis')), 'id='.$id); + + return $hostname.DOC_WEB_URL.'kbis/'.basename($filepdf); + } + + break; + } + } + + /** + * 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 + { + $infogreffe = new SdMetier_Infogreffe_DocBI($identifiant); + try { + $list = $infogreffe->getList(); + } catch (Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + $nbBilans = count($list); + + //Ajout d'informations supplémentaires + if ( count($list)>0 ) { + foreach ( $list as $i => $item ) { + + //Surcharge des codes de saisie + $date = new Zend_Date($item->DateCloture, 'yyyy-MM-dd'); + try { + $liasseM = new Application_Model_JoBilans(); + $sql = $liasseM->select() + ->where('siren=?', $identifiant) + ->where('dateExercice=?', $date->toString('yyyyMMdd')); + if ( $item->Type == 'consolides' ) { + $sql->where('typeBilan = "C"'); + } elseif ( $item->Type == 'sociaux' ) { + $sql->where('typeBilan="N" OR typeBilan="S"'); + } + + $row = $liasseM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + //file_put_contents('debug.log', $e->getMessage()."\n", FILE_APPEND); + } + + //Override SaisieDate + if ( $row === null ) { + + //Reset greffe_bilans : duree_exercice, saisie_date, saisie_code, ctrl_code, pages + if ( $item->SaisieDate !== null ) { + try { + $bilansM = new Application_Model_JoGreffesBilans(); + $bilansM->update(array( + 'duree_exercice' => null, + 'saisie_date' => null, + 'saisie_code' => null, + 'ctrl_code' => null, + 'pages' => null, + ), array('siren='.$identifiant, 'num_depot='.$item->NumDepot) ); + } catch (Zend_Db_Exception $e) { + file_put_contents('debug.log', $e->getMessage()."\n", FILE_APPEND); + } + } + $item->DureeExercice = null; + $item->SaisieDate = null; + $item->SaisieCode = null; + + } else { + $item->DureeExercice = $row->dureeExercice; + $item->SaisieDate = substr($row->dateProvPartenaire,0,4).'-'. + substr($row->dateProvPartenaire,4,2).'-'. + substr($row->dateProvPartenaire,6,2); + $item->SaisieCode = '00'; + //@todo : Améliorer le label de retour - partenaire de saisie + //$item->SaisieLabel = ''; + } + + if ( $item->ModeDiffusion == 'C' ) { + $cmdM = new Application_Model_Sdv1GreffeCommandesBi(); + $sql = $cmdM->select() + ->where('siren=?', $identifiant) + ->where('bilanCloture=?', $item->DateCloture); + $row = $cmdM->fetchRow($sql); + if ( $row !== null ) { + $item->ModeDiffusion = 'O'; + } + } + + } + } + + } + + $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 (SSAA-MM-JJ) + * @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 + * @throws SoapFault + * @return string + * URL ou identifiant de commande + */ + public function getBilan($identifiant, $dateCloture, $type, $diffusion, $reference = '') + { + $this->authenticate(); + $this->permission('actes'); + + if ( strlen($identifiant)!=9 ) { + $this->sendError('1010'); + } + + if ( empty($reference) ) { + $reference = ''; + } + + $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 . '/association/bilans/' . $filename; + $dest = $c->profil->path->files . '/' . $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; + } + + return $output; + } + + /** + * Entreprise + */ + else { + + //Génération identifiant de commande unique + $refCommande = uniqid(); + + $iInsee = new MInsee(); + $identite = $iInsee->getIdentiteLight($identifiant); + + //Sauvegarde dans la base + $commandeM = new Application_Model_Sdv1GreffeCommandesBi(); + $id = $commandeM->insert(array( + 'refCommande' => $refCommande, + 'login' => $this->User->login, + 'email' => $this->User->email, + 'refClient' => $reference, + 'mode' => $diffusion, + 'siren' => $identifiant, + 'raisonSociale' => $identite['Nom'], + 'bilanCloture' => $dateCloture, + 'bilanType' => $type, + 'dateInsert' => date('YmdHis'), + )); + + switch ( $diffusion ) { + + case 'T': + + //Passer la commande chez infogreffe + $infogreffe = new SdMetier_Infogreffe_DocBI($identifiant); + //$infogreffe->debug = true; + try { + $pdf = $infogreffe->getCommandeT($dateCloture, $type, $id); + $commandeM->update(array('dateEnvoi'=> date('YmdHis')), 'id='.$id); + } catch (Exception $e) { + $commandeM->update(array('cmdError'=> $e->getMessage()), 'id='.$id); + if ( $e->getCode() == $infogreffe::INT ) { + throw new SoapFault('ERR', "Erreur lors de la commande auprès de notre prestataire."); + } + } + + //Distribuer le fichier + if ( !empty($pdf) ) { + + $c = Zend_Registry::get('config'); + $file = $c->profil->infogreffe->storage->path . '/' . $pdf; + $dest = $c->profil->path->files . '/' . basename($file); + + if ( file_exists($file) && copy($file, $dest)) { + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ( $_SERVER['SERVER_PORT'] != '80' ) { + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $output = $hostname . '/fichier/greffes/' . basename($dest); // @todo : Chemin du fichier + $this->wsLog('greffe_bilans', $identifiant, basename($dest)); + } else { + throw new SoapFault('ERR', 'Fichier introuvable'); + } + + } + break; + + case 'C': + case 'F': + + //Commande chez Infogreffe + if ( $diffusion == 'C' ) { + $infogreffe = new SdMetier_Infogreffe_DocBI($identifiant); + try { + $infogreffe->getCommandeC($dateCloture, $type, 'G-BI-'.$id); + $commandeM->update(array('dateCommande'=> date('YmdHis')), 'id='.$id); + $this->wsLog('greffe_bilans', $identifiant, $refCommande); + } catch(Exception $e) { + $commandeM->update(array('cmdError'=> $e->getMessage()), 'id='.$id); + } + } + + $output = $refCommande; + break; + } + + return $output; + } + } + + /** + * Liste des actes 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) + * @throws SoapFault + * @return Actes + */ + public function getActes($identifiant, $position = 0, $nbRep = 200) + { + $this->authenticate(); + + if ( empty($position) ) { + $position = 0; + } + if ($nbRep > 200) { + $nbRep = 200; + } + + if ( strlen($identifiant)!=9 ) { + $this->sendError('1010'); + } + + $iInsee = new MInsee(); + $identite = $iInsee->getIdentiteLight($identifiant); + if (empty($identite['id'])){ + $this->sendError('1020'); + } + + $infogreffe = new SdMetier_Infogreffe_DocAC($identifiant); + $list = $infogreffe->getList(); + $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']; + } + } + } + + //@todo : Marquer les éléments en commande courrier si déjà commandé ModeDiffusion = O + + } + + $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 = ''; + + //Génération identifiant de commande unique + $refCommande = uniqid(); + + $iInsee = new MInsee(); + $identite = $iInsee->getIdentiteLight($identifiant); + + //Sauvegarde dans la base + $commandeM = new Application_Model_Sdv1GreffeCommandesAc(); + $id = $commandeM->insert(array( + 'refCommande' => $refCommande, + 'login' => $this->User->login, + 'email' => $this->User->email, + 'refClient' => $reference, + 'siren' => $identifiant, + 'mode' => $diffusion, + 'raisonSociale' => $identite['Nom'], + 'depotNum' => $depotNum, + 'depotDate' => $depotDate, + 'acteType' => $acteType, + 'acteDate' => $acteDate, + 'acteNum' => $acteNum, + 'dateInsert' => date('YmdHis'), + )); + + switch ( $diffusion ) { + + case 'T': + + //Passer la commande chez Infogreffe + $infogreffe = new SdMetier_Infogreffe_DocAC($identifiant); + try { + $pdf = $infogreffe->getCommandeT($depotDate, $depotNum, $acteType, $acteDate, $acteNum, $id); + $commandeM->update(array('dateEnvoi'=> date('YmdHis')), 'id='.$id); + } catch (Exception $e) { + $commandeM->update(array('cmdError'=> $e->getMessage()), 'id='.$id); + if ( $e->getCode() == $infogreffe::INT ) { + throw new SoapFault('ERR', "Erreur lors de la commande auprès de notre prestataire."); + } + } + + //Distribuer le fichier + if ( !empty($pdf) ) { + + $c = Zend_Registry::get('config'); + $file = $c->profil->infogreffe->storage->path . '/' . $pdf; + $dest = $c->profil->path->files . '/' . basename($file); + + if ( file_exists($file) && copy($file, $dest)) { + + $hostname = 'http://'.$_SERVER['SERVER_NAME']; + if ( $_SERVER['SERVER_PORT'] != '80' ) { + $hostname.= ':'.$_SERVER['SERVER_PORT']; + } + $output = $hostname . '/fichier/greffes/' . basename($dest); + $this->wsLog('greffe_actes', $identifiant, basename($dest)); + return $output; + + } else { + throw new SoapFault('ERR', 'Fichier introuvable.'); + } + + } + + return false; + + break; + + case 'C': + case 'F': + + if ( $diffusion == 'C' ) { + //Commande chez Infogreffe + $infogreffe = new SdMetier_Infogreffe_DocAC($identifiant); + try { + $infogreffe->getCommandeC($depotDate, $depotNum, $acteType, $acteDate, $acteNum, 'G-AC-'.$id); + $commandeM->update(array('dateCommande'=> date('YmdHis')), 'id='.$id); + $this->wsLog('greffe_actes', $identifiant, $refCommande); + } catch(Exception $e) { + $commandeM->update(array('cmdError'=> $e->getMessage()), 'id='.$id); + } + } + + return $refCommande; + + break; + } + + return $output; + } + + /** + * Set an email associated to the command + * @param string $id + * @param string $email + * @throws SoapFault + * @return boolean + */ + public function setActeCmdEmail($id, $email) + { + $this->authenticate(); + $this->permission('actes'); + + $validator = new Zend_Validate_EmailAddress(); + if ( !$validator->isValid($email) ){ + throw new SoapFault('ERR', "Adresse email invalide."); + } + + $commandeM = new Application_Model_Sdv1GreffeCommandesAc(); + $sql = $commandeM->select() + ->where('login=?', $this->User->login) + ->where('refCommande=?', $id); + try { + $result = $commandeM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ( $result !== null ) { + if ( is_int($email) ) { + //Id of secondary email + } else { + $dataUpdate = array('email' => $email); + try { + $commandeM->update($dataUpdate, "refCommande='".$id."'"); + return true; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + } + + return false; + } + + /** + * Set an email associated to the command + * @param string $id + * @param string $email + * @throws SoapFault + * @return boolean + */ + public function setBilanCmdEmail($id, $email) + { + $this->authenticate(); + $this->permission('actes'); + + $validator = new Zend_Validate_EmailAddress(); + if ( !$validator->isValid($email) ){ + throw new SoapFault('ERR', "Adresse email invalide."); + } + + $commandeM = new Application_Model_Sdv1GreffeCommandesBi(); + $sql = $commandeM->select() + ->where('login=?', $this->User->login) + ->where('refCommande=?', $id); + try { + $result = $commandeM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ( $result !== null ) { + if ( is_int($email) ) { + //Id of secondary email + } else { + $dataUpdate = array('email' => $email); + try { + $commandeM->update($dataUpdate, "refCommande='".$id."'"); + return true; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + } + return false; + } + + /** + * Set an email associated to the command + * @param string $id + * @param string $email + * @throws SoapFault + * @return boolean + */ + public function setKbisCmdEmail($id, $email) + { + $this->authenticate(); + $this->permission('KBIS'); + + $validator = new Zend_Validate_EmailAddress(); + if ( !$validator->isValid($email) ){ + throw new SoapFault('ERR', "Adresse email invalide."); + } + + $commandeM = new Application_Model_Sdv1GreffeCommandesKb(); + $sql = $commandeM->select() + ->where('login=?', $this->User->login) + ->where('refCommande=?', $id); + try { + $result = $commandeM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ( $result !== null ) { + if ( is_int($email) ) { + //Id of secondary email + } else { + $dataUpdate = array('email' => $email); + try { + $commandeM->update($dataUpdate, "refCommande='".$id."'"); + return true; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + } + return false; + } + + /** + * Ajouter des informations pour la commande, principalement lors de commande courrier + * @param string $id + * Identifiant de la commande + * @param string $infos + * Information au format json + * @throws SoapFault + * @return boolean + */ + public function setKbisCmdLetter($id, $infos) + { + $this->authenticate(); + $this->permission('KBIS'); + + $commandeM = new Application_Model_Sdv1GreffeCommandesKb(); + $sql = $commandeM->select() + ->where('login=?', $this->User->login) + ->where('refCommande=?', $id); + try { + $result = $commandeM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ( $result !== null ) { + $dataUpdate = array('infos' => $infos); + try { + $commandeM->update($dataUpdate, "refCommande='".$id."'"); + return true; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + return false; + } + + /** + * Commande de statut association + * @param string $companyId + * @param string $type (siren|waldec) + * @throws SoapFault + * @return mixed + */ + public function setAssoStatut($companyId, $type = null) + { + $this->authenticate(); + $this->permission('actes'); + + $inseeM = new MInsee(); + if ($type == 'siren') { + $result = $inseeM->getIdentiteLight($companyId); + $companyName = $result['Nom']; + } elseif ($type == 'waldec') { + $result = $inseeM->getEtablissementsParId('AUTRE', $companyId); + $companyName = $result['Nom']; + } + + $refCommande = uniqid(); + + try { + $commandeM = new Application_Model_Sdv1OrderAssoStatut(); + $commandeM->insert(array( + 'refCommande' => $refCommande, + 'companyId' => $companyId, + 'typeId' => $type, + 'companyName' => $companyName, + 'userId' => $this->User->id, + 'userLogin' => $this->User->login, + 'userEmail' => $this->USer->email, + 'dateInsert' => date('YmdHis'), + )); + return $refCommande; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return false; + } + + /** + * Modifier une commande de statut association + * @param string $id + * Référence de commande + * @param string $data + * Objet json (email, reference) + * @throws SoapFault + * @return boolean + */ + public function setAssoStatutDetail($id, $data) + { + $this->authenticate(); + $this->permission('actes'); + + // --- Vérification que la commande existe + try { + $commandeM = new Application_Model_Sdv1OrderAssoStatut(); + $sql = $commandeM->select() + ->where('userLogin=?', $this->User->login) + ->where('refCommande=?', $id); + $result = $commandeM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + // --- Paramètres envoyés + $params = json_decode($data, true); + $dataUpdate = array(); + if (count($params) > 0) { + foreach ($params as $k => $v) { + switch ($k) { + case 'email': + // --- Vérification email + $validator = new Zend_Validate_EmailAddress(); + if ( !$validator->isValid($v) ){ + throw new SoapFault('ERR', "Adresse email invalide."); + } + $dataUpdate['email'] = $v; + break; + case 'reference': + $dataUpdate['reference'] = $v; + break; + } + } + } + + // --- Mise à jour de la commande + if (count($dataUpdate) > 0) { + try { + $commandeM->update($dataUpdate, "refCommande='".$id."'"); + return true; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + + return false; + } + + /** + * Commande de privileges + * @param string $companyId + * Siren + * @param string $doc + * Type de privilege (privsecu, privtres, nantfond, declcrea) + * @throws SoapFault + * @return mixed + */ + public function setPrivileges($companyId, $doc = null) + { + $this->authenticate(); + $this->permission('privileges'); + + $inseeM = new MInsee(); + $result = $inseeM->getIdentiteLight($companyId); + $companyName = $result['Nom']; + + $refCommande = uniqid(); + + try { + $commandeM = new Application_Model_Sdv1OrderPrivileges(); + $commandeM->insert(array( + 'refCommande' => $refCommande, + 'docType' => $doc, + 'companyId' => $companyId, + 'companyName' => $companyName, + 'userId' => $this->User->id, + 'userLogin' => $this->User->login, + 'userEmail' => $this->User->email, + 'dateInsert' => date('YmdHis'), + )); + return $refCommande; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return false; + } + + /** + * Défini un email pour la commande de privilege + * @param string $id + * @param string $email + * @throws SoapFault + * @return boolean + */ + public function setPrivilegesEmail($id, $email) + { + $this->authenticate(); + + $validator = new Zend_Validate_EmailAddress(); + if ( !$validator->isValid($email) ){ + throw new SoapFault('ERR', "Adresse email invalide."); + } + + $commandeM = new Application_Model_Sdv1OrderPrivileges(); + $sql = $commandeM->select() + ->where('login=?', $this->User->login) + ->where('refCommande=?', $id); + try { + $result = $commandeM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ( $result !== null ) { + if ( is_int($email) ) { + //Id of secondary email + } else { + $dataUpdate = array('email' => $email); + try { + $commandeM->update($dataUpdate, "refCommande='".$id."'"); + return true; + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient == 1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + } + return false; + } + +} \ No newline at end of file diff --git a/library/WsScore/Saisie/v0.1/Service.php b/library/WsScore/Saisie/v0.1/Service.php new file mode 100644 index 00000000..b252dbf9 --- /dev/null +++ b/library/WsScore/Saisie/v0.1/Service.php @@ -0,0 +1,1184 @@ +authenticate(); + + //Initialisation + if (empty($type)) $type = array('A','M'); + if (empty($cpDep)) $cpDep = 0; + $tabRet = array(); + + debugLog('I',"Recherche de Mandataires '$nom' (Dep=$cpDep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabTmp = $iInsee->searchMandataires($nom, true, $type, $cpDep); + + foreach ($tabTmp as $i=>$mand) + { + $mandataire = new SearchMandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = utf8_encode($mand); + $tabRet[] = $mandataire; + } + $output = new SearchMandatairesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Enregistrement des informations saisie manuellement + * @param string $siret + * @param int $idEntreprise + * @param string $infos + * @return SetInfosEntrepReturn + */ + public function setInfosEntrep( $siret, $idEntreprise, $infos ) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $iBodacc = new MBodacc(); + $iInsee = new MInsee(); + $result = false; + + if (!$this->checkEdition()) { + + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + + } else { + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + $iDb = new WDB(); + + $tabInfos = json_decode($infos, true); + + $tabIdentite = $tabInfos['identite']; + $tabJugement = $tabInfos['jugement']; + $tabActio = $tabInfos['actionnaire']; + $tabParti = $tabInfos['participation']; + $tabScores = $tabInfos['score']; + + // Mise à jour de l'identité + if (trim(strtolower($tabIdentite['web']))=='http://'){ + $web = ''; + } else { + $web = trim($tabIdentite['web']); + } + $tabUpdate = array( + 'isin' => trim($tabIdentite['isin']), + 'tel' => trim($tabIdentite['tel']), + 'fax' => trim($tabIdentite['fax']), + 'web' => $web, + 'mail' => trim($tabIdentite['mail']), + 'activite' => stripslashes(trim($tabIdentite['activite'])), + 'sirenDoublon' => substr(str_replace(' ','',strtr($tabIdentite['sirenDoublon'], '"\'./- ,\*#()',' ')),0,9), + 'waldec' => trim(str_replace(' ','',strtr($tabIdentite['waldec'], '"\'./- ,\*#()',' '))), + ); + + /** @todo non traitées : [capital_mt] => 335400, [capital_dev] => EUR **/ + if ( !$iDb->update('infos_entrep', $tabUpdate, "siren='$siren'") ){ + if (!$iDb->insert('infos_entrep', array_merge(array('siren'=>$siren),$tabUpdate))){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + } + // Fin mise à jour identité + + // Opposition INSEE + if ( $tabIdentite['moisOppositionInsee']>0 && + $tabIdentite['moisOppositionInsee']<=(date('Ym')*1) ){ + + $iDb2 = new WDB('insee'); + if ( !$iDb2->insert('insee_nondiff', array('siren'=>$siren, 'insEVE'=>795, 'mois'=>$tabIdentite['moisOppositionInsee'])) ){ + if ( $iDb2->getLastErrorNum()<>1062 ) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des oppositions de la sphère commerciale INSEE pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + } + + } + // Fin opposition INSEE + + // Refus d'inscription au RCS + if (isset($tabIdentite['moisRefusRCS']) && $tabIdentite['moisRefusRCS']>0 + && $tabIdentite['moisRefusRCS']<=(date('Ym')*1)) { + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteLight($siren); + if ($nic<10) $nic=$entrep['Nic']; + $cj1=substr($entrep['FJ'],0,1); + $iDb2 = new WDB('insee'); + /** Insertion dans la tables des exclusions **/ + $tabInsert = array( + 'siren' => $siren, + 'nic' => $nic, + 'idSaisie' => $this->User->id, + 'cj1' => $cj1, + 'insEVE' => 'RCS', + 'mois' => $tabIdentite['moisRefusRCS'], + ); + if (!$iDb2->insert('insee_nondiff', $tabInsert)) + if ($iDb2->getLastErrorNum()<>1062) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des refus d'enregistrement A au RCS pour $siren au mois de ".$tabIdentite['moisRefusRCS']." : ".EOL.print_r($tabInsert, true).EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + + /** Insertion dans la tables des évènements **/ + $tabInsert = array( + 'insSIREN' => $siren, + 'siretValide' => $iInsee->valideSiren($siren,$nic), + 'insNIC' => $nic, + 'insEVE' => 'RCS', + 'insDATEVE' => $tabIdentite['moisRefusRCS'].'28', + 'insDATEMAJ' => date('YmdHis'), + 'idFlux' => date('Ymd')); + if (!$iDb2->insert('insee_even', $tabInsert)) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des refus d'enregistrement B au RCS pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabInsert, true).EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + } + // Fin refus d'inscription au RCS + + // Domiciliataire + if (!empty($tabIdentite['domiciliataire']) && $siren>1000) { + if ($tabIdentite['domiciliataire']=='oui' || $tabIdentite['domiciliataire']=='non') { + // L'entreprise et ces établissements seront mis à jour automatiquement ce soir + $iDb->query("INSERT IGNORE INTO jo.tabAdrDom (siren,nic,siege, etActif, nom, sigle, enseigne, adrNum, adrBtq, adrTypVoie, adrLibVoie, ville, cp, depComEt, adrComp, cj, apen,apet, dateInsert) + SELECT siren, nic, siege, actif AS etActif, raisonSociale AS nom, sigle, enseigne, adr_num as adrNum, adr_btq AS adrBtq, adr_typeVoie AS adrTypVoie, adr_libVoie AS adrLibVoie, adr_ville AS ville, adr_cp AS cp, CONCAT(adr_dep,adr_com) AS depComEt, adr_comp AS adrComp, cj, ape_entrep AS apen, ape_etab AS apet, DATE(NOW()) as dateInsert + FROM jo.etablissements WHERE siren=$siren;", false); + } + // Si demande de suppression, on force l'indicateur "" + if ($tabIdentite['domiciliataire']=='non') { + $tabUpdate=array('pasEntrepDom'=>1); + if (!$iDb->update('tabAdrDom', $tabUpdate, "siren=$siren")) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de la suppression du marqueur de domiciliation pour $siren :".EOL.print_r($tabUpdate, true).EOL.$iDb->getLastError()); + } + } + // Fin domiciliataire + + // Insertion des scores + $tabUpdate = array(); + $setScore = false; + if ( $tabScores['encours']!='' || $tabScores['encours']!=null ){ + $tabUpdate['encours'] = $tabScores['encours']; + $setScore = true; + } + if ( $tabScores['scoreSolv']!='' ){ + $tabUpdate['scoreSolv'] = $tabScores['scoreSolv']; + $setScore = true; + } + if ( $tabScores['scoreDir']!='' ){ + $tabUpdate['scoreDir'] = $tabScores['scoreDir']; + $setScore = true; + } + if ( $tabScores['scoreConf']!='' ){ + $tabUpdate['scoreConf'] = $tabScores['scoreConf']; + $setScore = true; + } + if ( $setScore ){ + // Mise à jour des Cute Offs + if ( !$iDb->update('scores_cutoff', $tabUpdate, "siren=$siren") ){ + if ( !$iDb->insert('scores_cutoff', array_merge(array( + 'siren' => $siren, + 'dateInsert' => date('Ymd') ), $tabUpdate)) ){ + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", print_r($tabScores, true).EOL.$iDb->getLastError()); + } + } + } + // Fin insertion des scores + + // Insertion du jugement + $tabEven = $tabJugement['even']; + $nic = $tabJugement['nic']*1; + $entrep = $iInsee->getIdentiteLight($siren, $nic); + if ( $nic>0 && $tabEven[0]==6700 && $entrep['Siege']==0 ){ + // Radiation d'un établissement + $tabEven[0] = 6600; + } + + if ( count($tabEven)>0 ){ + $idAdmin = str_replace('m','',trim($tabJugement['admin'])); + $idMand = str_replace('m','',trim($tabJugement['mand'])); + $idOppo = str_replace('m','',trim($tabJugement['oppo'])); + + $tabSource=explode('_',$tabJugement['source']); + $source=@$tabSource[0]; + $numJal=@$tabSource[1]; + + $dateSource=WDate::dateT('d/m/Y', 'Ymd', trim($tabJugement['dateParution']))*1; + if ($dateSource<20000101) + $dateSource=date('YmdHis'); + + $montant=trim(preg_replace('/[^0-9]/', '', $tabJugement['montant']))*1; + $actionsMt=trim(preg_replace('/[^0-9]/', '', $tabJugement['actionsMt']))*1; + $actionsNb=trim(preg_replace('/[^0-9]/', '', $tabJugement['actionsNb']))*1; + if ($montant>0 && ($actionsNb>0 || $actionsMt>0)) { + if ($actionsNb>0) $actionsMt=$montant/$actionsNb; + elseif ($actionsMt>0) $actionsNb=$montant/$actionsMt; + } + + //@todo : ça ne va pas marcher ici + $strDir=''; + + if (count($tabJugement['nouvDir'])>0) { + foreach( $tabJugement['nouvDir'] as $dir ){ + if ( intval($dir['Fonc'])>0 ){ + $strDir.= $iBodacc->getFctDir($dir['Fonc']).' : '.$dir['Genre'].' '. + ucwords(strtolower($dir['Pre'])).' '.strtoupper($dir['Nom']); + if (!empty($dir['Dom'])) { + $strDir.= ', domicilié à '.$dir['Dom'].'. '; + } + } + } + } + + if ( trim($tabJugement['nouvAdrCp'])<>'' ){ + $strAdr = stripslashes(trim($tabJugement['nouvAdr']).', '. + trim($tabJugement['nouvAdrCp']).' '. + trim($tabJugement['nouvAdrVille'])); + } else { + $strAdr=''; + } + + if (count($tabEven)>1){ + $strEven = implode(';',array_slice($tabEven, 1)); + } else { + $strEven = ''; + } + + $tabUpdate = array( + 'strEven' => $strEven, + 'sirenValide' => $iInsee->valideSiren($siren), + 'dateCessationPaiement' => empty($tabJugement['datePaie']) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement['datePaie'])), + 'dateEffetFinP' => empty($tabJugement['dateFinPeriode']) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement['dateFinPeriode'])), + 'tribunal' => trim($tabJugement['tribunal']), + 'montant' => $montant, + 'actionsNb' => $actionsNb, + 'inter1type' => 'A', + 'inter1id' => $idAdmin, + 'inter1nom' => utf8_encode($iInsee->getMandatairesParId($idAdmin)), + 'inter2type' => 'M', + 'inter2id' => $idMand, + 'inter2nom' => utf8_encode($iInsee->getMandatairesParId($idMand)), + 'inter3type' => 'O', + 'inter3id' => $idOppo, + 'inter3nom' => utf8_encode($iInsee->getMandatairesParId($idOppo)), + 'complement' => stripslashes(trim($tabJugement['comp'])), + 'nouvActivite' => stripslashes(trim($tabJugement['nouvActivite'])), + 'nouvDir' => stripslashes(trim($strDir)), + 'nouvAdr' => $strAdr, + 'nouvFJ' => trim($tabJugement['nouvFJ']), + 'raisonSociale' => $entrep['Nom'], + 'adresse' => $entrep['Adresse'], + 'codePostal' => $entrep['CP'], + 'ville' => $entrep['Ville'], + 'source' => $source, + 'idSaisie' => $this->User->id, + 'parutionIdJal' => $numJal, + 'parutionNum' => $tabJugement['numParution'], + ); + $dateJuge = WDate::dateT('d/m/Y','Y-m-d',trim($tabJugement['dateJuge'])); + $tabInsert = array_merge( $tabUpdate, array( + 'siren' => $siren, + 'dateJugement' => $dateJuge, + 'typeEven' => $tabEven[0], + 'dateSource' => $dateSource, + )); + if ( !$iDb->insert('annonces', array_merge($tabInsert,array('dateInsert'=>date('YmdHis'))), true) ){ + if ( !$iDb->update('annonces', $tabUpdate, "siren=$siren AND dateJugement='$dateJuge' AND typeEven=".$tabEven[0], true)){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + } + } + + // Insertion actionnaire + if ( trim($tabActio['siren'])!='' ) { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabActio['pct']))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabActio['siren']); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ($pays=='') $pays='FRA'; + if (trim($tabActio['nom'])!='') $nom = $tabActio['nom']; + if ($tabActio['pays']!='XXX') $pays = $tabActio['pays']; + + if (trim($tabActio['dateMAJ'])!='JJ/MM/AAAA' && trim($tabActio['dateMAJ'])!=''){ + $dateMAJ = WDate::dateT('d/m/Y', 'Y-m-d', trim($tabActio['dateMAJ'])); + } + + if ($tabActio['majMin']=='maj') $majMin='+'; + elseif ($tabActio['majMin']=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + //'Siren1'=> $siren, + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + //'Siren2'=> $siren2, + //'RaisonSociale'=> $nom, + //'Pays'=> $pays, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array('ActionPart' => 1), array( + 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res = $iDb->select('liens', 'count(*)', + "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=1016166; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=1016167; + } + + $tabInsert2 = array_merge($tabUpdate, array('ActionPart' => 2), array( + 'Siren1' => $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=1016168; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=1016169; + } + } + // Fin insertion actionnaire + + //Insertion participation + if ( trim($tabParti['siren'])<>'' ) { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabParti['pct']))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabParti['siren']); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ( $pays=='' ) $pays='FRA'; + if ( trim($tabParti['nom'])<>'' ) $nom=$tabParti['nom']; + if ( $tabParti['pays']<>'XXX' ) $pays=$tabParti['pays']; + + if (trim($tabParti['dateMAJ'])<>'JJ/MM/AAAA' && trim($tabParti['dateMAJ'])<>'') + $dateMAJ=WDate::dateT('d/m/Y', 'Y-m-d', trim($tabParti['dateMAJ'])); + + if ($tabParti['majMin']=='maj') $majMin='+'; + elseif ($tabParti['majMin']=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array( 'ActionPart' => 2 ), array( + 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=10168; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=10169; + } + + $tabInsert2 = array_merge($tabUpdate, array( 'ActionPart' => 1 ), array( + 'Siren1'=> $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=10170; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=10171; + } + } + // Fin insertion participation + + if ($errMaj>0){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } else { + $result = true; + } + } + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Met a jour les informations sur un mandataire + * @param SetInfosMandataire $infos Informations sur le mandataire à créer ou à ajouter (ajout si id absent) + * @return SetMandataireReturn + */ + public function setMandataire(SetInfosMandataire $infos) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $result = true; + + $iDb = new WDB(); + + //$infos = serialize($tabInfos); + debugLog('I',"Ajout/MAJ de mandaitaire ".print_r($infos,1)." demandée",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $type = substr(strtoupper($infos->type),0,1); + $stag = substr(strtoupper($infos->type),1,1); + if ($stag=='S') { + $stag=1; + } else { + $stag=0; + } + if ($type=='A' || $type=='H' || $type=='M' || $type=='V' || + $type=='N' || $type=='T') + { + $tabUpdate=array( + 'sirenGrp' => substr($infos->sirenGrp,0,9)*1, + 'nicGrp' => substr($infos->sirenGrp,9,5)*1, + 'sirenMand' => substr($infos->sirenMand,0,9)*1, + 'nicMand' => substr($infos->sirenMand,9,5)*1, + 'Nom' => ucwords(strtolower($infos->Nom)), + 'Prenom' => ucwords(strtolower($infos->Prenom)), + 'type' => $type, + 'stagiaire' => $stag, + 'coursAppel' => intval($infos->coursAppel), + 'coursAppel2' => intval($infos->coursAppel2), + 'tribunal' => $infos->tribunal, + 'Statut' => strtoupper($infos->Statut), + 'adresse' => ucwords($infos->adresse), + 'adresseComp' => strtoupper($infos->adresseComp), + 'cp' => intval($infos->cp), + 'ville' => strtoupper($infos->ville), + 'tel' => $infos->tel, + 'fax' => $infos->fax, + 'email' => $infos->email, + 'web' => $infos->web, + 'contact' => $infos->contact, + 'idUser' => $this->User->id, + ); + } + $id = str_replace('m','', ''.$infos->id)*1; + if (intval($id)!=0) { + // MAJ + if (!$iDb->update('tabMandataires', $tabUpdate, "id=$id", true)) { + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $result = false; + } + } else { + // Insertion + if (!$iDb->insert('tabMandataires', array_merge($tabUpdate,array('dateInsert'=>date('YmdHis'))), true)) { + $error->errnum = 1; + $error->errmsg = 'Insertion impossible'; + $result = false; + } + } + $output = new SetMandataireReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Supprime une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return SupprAnnonceCollecteReturn + */ + public function supprAnnonceCollecte($idAnn, $siret=null) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + $siren = substr($siret,0,9)*1; + $iDb = new WDB(); + $idAnn = preg_replace('/^0\./','', ''.$idAnn)*1; + + if ($idAnn>0) + { + if ($iDb->update('annonces',array( + 'dateSuppr'=>date('YmdHis'), + 'idSuppr'=>$this->User->id), + "id=$idAnn", false)) + { + debugLog('I',"Suppression de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + else + { + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + debugLog('I',"Suppression impossible de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + } + else + { + $error->errnum = 1; + $error->errmsg = 'idAnn incorrect'; + } + } + $output = new SupprAnnonceCollecteReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le mandataire par son id + * @param int $idMand Identifiant du mandataire + * @return MandataireReturn + */ + public function getMandataire($idMand) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + + debugLog('I',"Donne le Mandataires correspondant à $idMand",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $iInsee = new classMInsee(); + $tabRet = $iInsee->getMandataire($idMand); + $mandataire = new MandataireDetail(); + $mandataire->Nom = $tabRet['Nom']; + $mandataire->Prenom = $tabRet['Prenom']; + $mandataire->tribunal = $tabRet['tribunal']; + $mandataire->adresse = $tabRet['adresse']; + $mandataire->adresseComp = $tabRet['adresseComp']; + $mandataire->ville = $tabRet['ville']; + $mandataire->email = $tabRet['email']; + $mandataire->web = $tabRet['web']; + $mandataire->contact = $tabRet['contact']; + $output = new MandataireReturn(); + $output->error = $error; + $output->result = $mandataire; + return $output; + } + + /** + * Liste les mandataires compétentes pour une cours d'appel donnée + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @return MandatairesReturn + */ + public function getMandataires($codeTribunal=0, $type=array('A','M')) + { + $this->authenticate(); + //Initialisation + $iInsee = new MInsee(); + $error = new ErrorType(); + $trib = serialize($codeTribunal); + debugLog('I',"Liste des Mandaitaires ou Administrateur du Tribunal/Cours d'Appel $trib demandé",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!is_array($codeTribunal) && strlen($codeTribunal)>3 && $codeTribunal*1==0) + { + // $codeTribunal est un identifiant de tribunal + $iBodacc = new MBodacc(); + $tabTmp = $iInsee->getMandataires(array($iBodacc->getTribunalIdCA($codeTribunal)), true, $type); + } + elseif ($codeTribunal*1==0) + { + // On veut tous les mandataires + $tabTmp = $iInsee->getMandataires(array(), true, $type); + } + elseif (is_array($codeTribunal)) + { + // On veut les mandataires d'une CA + $tabTmp = $iInsee->getMandataires($codeTribunal, true, $type); + } + $tabRet = array(); + foreach ($tabTmp as $i=>$mand){ + $mandataire = new Mandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = $mand; + $tabRet[]= $mandataire; + } + $output = new MandatairesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Donne la cours d'appel d'un tribunal par son code + * @param string $codeTribunal Code BODACC sur 6 caractères du tribunal + * @return int + */ + public function getIdCoursAppel($codeTribunal) + { + $this->authenticate(); + $iBodacc = new MBodacc(); + return $iBodacc->getTribunalIdCA($codeTribunal); + } + + /** + * Duplique une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return DupliqueAnnonceReturn + */ + public function dupliqueAnnonceCollecte($idAnn, $siret = null) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = ''; + $error = new ErrorType(); + $result = 0; + + if (!$this->checkEdition()) { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } else { + $siren = intval(substr($siret,0,9)); + $nic = intval(substr($siret,9,5)); + $iDb = new WDB(); + $idAnn = intval(preg_replace('/^0\./','', ''.$idAnn)); + if ($idAnn>0 && $siren>1000){ + $res = $iDb->select('annonces', '*', "id=$idAnn", false, MYSQL_ASSOC); + if (count($res)==0) { + $error->errnum = 1; + $error->errmsg = 'Annonce inexistante'; + } else { + $annonce = $res[0]; + // Suppression des zones inexistantes dans la table ou devant être vides + unset($annonce['id']); + unset($annonce['nic']);//=$nic; + $annonce['siren'] = $siren; + $annonce['nic'] = $nic; + if ($iDb->insert('annonces', $annonce, false)) { + debugLog('I',"Duplication de l'annonce collectée n°$idAnn sur $siret",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = 1; + } else { + debugLog('I',"Suppression impossible de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + } + } + } + } + $output = new DupliqueAnnonceCollecte(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le contenu d'une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return AnnonceCollecteReturn + */ + public function getAnnonceCollecte($idAnn, $siret) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $annonceCollecte = new AnnonceCollecte(); + $siren = substr($siret,0,9)*1; + if (!$this->checkEdition()) { + + $error->errnum = 0; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $iDb = new WDB(); + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $idAnn = preg_replace('/^0\./','', ''.$idAnn) * 1; + if ($idAnn>0) + { + $res = $iDb->select('annonces', + 'id, siren, sirenValide, typeEven, strEven, raisonSociale, adresse, codePostal, ville, dateJugement, dateCessationPaiement, dateEffetFinP, numero, inter1type, inter1id, inter1nom, inter2type, inter2id, inter2nom, inter3type, inter3id, inter3nom, inter4type, inter4id, inter4nom, tribunal, montant, actionsNb, complement, infosBrutes, nouvActivite, nouvDir, nouvAdr, nouvFJ, annonce, source, parutionIdJal, parutionNum, dateSource, idSaisie, idAnnonce, dateInsert', + "id=$idAnn", false, MYSQL_ASSOC + ); + if (count($res)>0) + { + $ann = $res[0]; + $annonceCollecte->id = $ann['id']; + $annonceCollecte->siren = $ann['siren']; + $annonceCollecte->raisonSociale = $ann['raisonSociale']; + $annonceCollecte->adresse = $ann['adresse']; + $annonceCollecte->codePostal = $ann['codePostal']; + $annonceCollecte->ville = $ann['ville']; + $annonceCollecte->dateJugement = $ann['dateJugement']; + + //@todo : Les libellées ne sont pas présent LibEven + $tabEven = array(); + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $ann['typeEven']; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + if (!empty($ann['strEven'])){ + foreach ( explode(';',$ann['strEven']) as $code ) + { + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $code; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + } + } + + $annonceCollecte->even = $tabEven; + $annonceCollecte->dateSource = $ann['dateSource']; + $annonceCollecte->dateCessationPaiement = $ann['dateCessationPaiement']; + $annonceCollecte->dateEffetFinP = $ann['dateEffetFinP']; + $annonceCollecte->tribunal = $ann['tribunal']; + $annonceCollecte->numero = $ann['numero']; + $annonceCollecte->montant = $ann['montant']; + $annonceCollecte->actionsNb = $ann['actionsNb']; + $annonceCollecte->inter1type = $ann['inter1type']; + $annonceCollecte->inter1id = $ann['inter1id']; + $annonceCollecte->inter1nom = $ann['inter1nom']; + $annonceCollecte->inter2type = $ann['inter2type']; + $annonceCollecte->inter2id = $ann['inter2id']; + $annonceCollecte->inter2nom = $ann['inter2nom']; + $annonceCollecte->inter3type = $ann['inter3type']; + $annonceCollecte->inter3id = $ann['inter3id']; + $annonceCollecte->inter3nom = $ann['inter3nom']; + $annonceCollecte->complement = $ann['complement']; + $annonceCollecte->nouvActivite = $ann['nouvActivite']; + $annonceCollecte->nouvDir = $ann['nouvDir']; + $annonceCollecte->nouvAdr = $ann['nouvAdr']; + $annonceCollecte->nouvFJ = $ann['nouvFJ']; + $annonceCollecte->source = $ann['source']; + + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret) : ".$ann['raisonSociale'],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } else { + $error->errnum = 1; + $error->errmsg = 'Edition impossible'; + } + } + else + { + $error->errnum = 745741; + $error->errmsg = 'Selection impossible'; + } + } + $output = new AnnonceCollecteReturn(); + $output->error = $error; + $output->result = $annonceCollecte; + return $output; + } + + /** + * Enregistrement de document actes ou status d'association + * @param string $siren Numéro Siren + * @param string $waldec Numéro waldec + * @param string $type Type d'acte + * @param string $libelle Libellé de l'acte + * @param string $date Date des l'acte au format + * @param int $nbPages Nombre de pages dans le fichier + * return boolean + */ + public function setActeAsso( $siren, $waldec, $type, $libelle, $date, $nbPages ) + { + $this->authenticate(); + if (!$this->checkEdition()) { + $this->sendError('0902'); + } + ($type == 'ST') ? $type_acte = 'ST' : $type_acte = ''; + + $data = array( + 'siren' => $siren, + 'waldec' => waldec, + 'pdfLink' => '', + 'pdfSize' => '', + 'pdfVer' => '', + 'pdfPage' => '', + 'date_acte' => WDate::dateT('d/m/Y', 'Y-m-d', $date), + 'type_acte' => $type_acte, + 'type_acte_libelle' => $libelle, + 'nbpages_acte' => $nbPages, + ); + try { + $db = Zend_Db::factory($this->dbConfig->Webservice); + Zend_Db_Table_Abstract::setDefaultAdapter($db); + $doc = new Application_Model_AssoActes(); + $doc_id = $doc->insert($data); + } catch (Zend_Exception $e) { + Zend_Registry::get('WsLogger') + ->err(__FUNCTION__.' - '.$e->getMessage()); + } + if ($commande_id) + { + return true; + } + return false; + } + + /** + * getListeJalCollecte + * @return ListeJalCollecteReturn + */ + public function getListeJalCollecte() + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + + $iBodacc = new MBodacc(); + $tabJal = $iBodacc->getListeJalCollecte(); + foreach ($tabJal as $i=>$jal) + { + $jalCollecte = new JalCollecte(); + $jalCollecte->id = $i; + $jalCollecte->nom = $jal; + $tabRet[] = $jalCollecte; + } + $output = new ListeJalCollecteReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + + /** + * Suppression logique d'une annonce relative à une entité + * @param integer $source 0=Collecte, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param string $siret Siren de l'entreprise ou Siret de l'établissement + * @return SupprAnnonceReturn + */ + public function supprAnnonce($source=0, $idAnn, $siret=0) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + if (empty($source)) $source = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + + $siren = substr($siret,0,9); + $iDb = new WDB(); + switch ($source) + { + case 0: + $idAnn = preg_replace('/^0\./','', ''.$idAnn)*1; + $table = 'annonces'; + break; + case 1: + if (intval($idAnn)<0){ + $error->errnum = 1; + $error->errmsg = 'Code annonce Incorrect'; + } else { + $strSql = "AND siren=$siren"; + $table = 'bodacc_detail'; + } + break; + case 3: + $table = 'asso'; + break; + case 2: + case 4: + default: + $error->errnum = 1; + $error->errmsg = 'Cas non géré'; + break; + } + if (intval($idAnn)>0 && $iDb->update($table, array( + 'dateSuppr' => date('YmdHis'), + 'idSuppr' => $this->User->id), + "id=$idAnn $strSql", false)) + { + debugLog('I',"Suppression de l'annonce en source $source n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 0; + $error->errmsg = ''; + $result = true; + } else { + debugLog('I',"Suppression impossible de l'annonce en source $source n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + } + } + $output = new SupprAnnonceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Duplication d'une annonce relative à une entité + * + * @param integer $source 0=Collecte, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param string $siretIn Siren de l'entreprise ou Siret de l'établissement de l'annonce à duppliquer + * @param string $siretOut Siren/Siret de l'entreprise ou étab sur lequel il faut dupliquer l'annonce + * @return DupliqueAnnonceReturn + */ + public function dupliqueAnnonce($source=0, $idAnn, $siretIn=0, $siretOut=0) + { + debugLog('I',"Demande de duplication d'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + if (empty($source)) $source = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + $sirenIn = substr($siretIn,0,9)*1; + $nicIn = substr($siretIn,9,5)*1; + $sirenOut = substr($siretOut,0,9)*1; + $nicOut = substr($siretOut,9,5)*1; + $iDb = new WDB(); + $strSql=''; + switch ($source) + { + case 0: + $idAnn = preg_replace('/^0\./','', ''.$idAnn)*1; + $table = 'annonces'; + break; + case 1: + if (intval($idAnn)<0){ + $error->errnum = 1; + $error->errmsg = 'Code annonce Incorrect'; + } else { + if (intval($sirenIn)>0) $strSql.="AND siren=$sirenIn"; + $table = 'bodacc_detail'; + } + break; + case 3: + $table = 'asso'; + break; + case 2: + case 4: + default: + $error->errnum = 1; + $error->errmsg = 'Cas non géré'; + break; + } + + if (intval($idAnn)>0) { + $res = $iDb->select($table, '*', "id=$idAnn $strSql", false, MYSQL_ASSOC); + + if (count($res)==0) { + $error->errnum = 1; + $error->errmsg = 'Annonce inexistante'; + } else { + + /* Si table = asso => UPDATE de la ligne */ + if ($table == 'asso'){ + $annonce = $res[0]; + $annonce['siren'] = $sirenOut; + $annonce['sirenValide'] = 2; + $annonce['dateUpdate'] = date('YmdHis'); + $annonce['idSirenage'] = $this->User->id; + $annonce['nic'] = $nicOut; + if ($nicOut>0) $annonce['nicValide'] = 2; + if ($iDb->update($table, $annonce, "id=".$idAnn, true, true)){ + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + } + /* Si sirenIn = 0 et table = bodacc_detail => INSERT + UPDATE */ + elseif (intval($sirenIn) == 0 && $table == 'bodacc_detail' ){ + $annonce = $res[0]; + $annonce['siren'] = $sirenOut; + $annonce['sirenValide'] = 2; + $annonce['dateInsert'] = date('YmdHis'); + $annonce['idSirenage'] = $this->User->id; + $annonce['nic'] = $nicOut; + if ($nicOut>0) $annonce['nicValide'] = 2; + if ($iDb->insert($table, $annonce, true, true)) { + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + $data = array( + 'idSuppr' => $this->User->id, + 'dateSuppr' => date('YmdHis'), + ); + $iDb->update($table, $data, "id=$idAnn $strSql", true, true); + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + } + /* si sirenIn != 0 et table = bodacc_detail => insert */ + elseif (intval($sirenIn) != 0 && $table == 'bodacc_detail'){ + $annonce = $res[0]; + $annonce['siren'] = $sirenOut; + $annonce['sirenValide'] = 2; + $annonce['dateInsert'] = date('YmdHis'); + $annonce['idSirenage'] = $this->User->id; + $annonce['nic'] = $nicOut; + if ($nicOut>0) $annonce['nicValide'] = 2; + if ($iDb->insert($table, $annonce, true, true)) { + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + + } + /* Si table = annonces => INSERT */ + elseif ($table == 'annonces'){ + $annonce = $res[0]; + // Suppression des zones inexistantes dans la table ou devant être vides + unset($annonce['id']); + unset($annonce['nic']); + $annonce['idSaisie'] = $this->User->id; + if ($iDb->insert($table, $annonce, true, true)) { + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + } + } + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + } + $output = new DupliqueAnnonceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Modification du code evenement d'une annonce + * @param string $siren + * @param string $id + * @param string[] $codeEven + * @return boolean + */ + public function setAnnonceEven($siren, $id, $codeEven) + { + $this->authenticate(); + $iDb = new WDB('jo'); + + $list = array(); + if (is_object($codeEven)){ + $list = $codeEven->item; + } else { + $list = $codeEven; + } + + if (count($list)>0){ + $tabUpdate = array( + 'typeEven' => implode(';',$list), + 'idSirenage' => $this->User->id, + //'dateUpdate' => date('Y-m-d H:i:s'), + ); + if ($iDb->update('bodacc_detail', $tabUpdate, "siren='$siren' AND id='$id'")){ + debugLog('I',"setAnnonceEven (siren=$siren, list=$list)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/library/WsScore/Saisie/v0.2/Service.php b/library/WsScore/Saisie/v0.2/Service.php new file mode 100644 index 00000000..81665b6d --- /dev/null +++ b/library/WsScore/Saisie/v0.2/Service.php @@ -0,0 +1,2813 @@ +authenticate(); + + //Initialisation + if (empty($type)) $type = array('A','M'); + if (empty($cpDep)) $cpDep = 0; + $tabRet = array(); + + debugLog('I',"Recherche de Mandataires '$nom' (Dep=$cpDep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $iInsee = new MInsee(); + $tabTmp = $iInsee->searchMandataires($nom, true, $type, $cpDep); + + foreach ($tabTmp as $i=>$mand) + { + $mandataire = new SearchMandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = utf8_encode($mand); + $tabRet[] = $mandataire; + } + $output = new SearchMandatairesReturn(); + $output->result = $tabRet; + return $output; + } + + /** + * Enregistrement des informations saisie manuellement + * @param string $siret + * @param int $idEntreprise + * @param string $infos + * @return SetInfosEntrepReturn + */ + public function setInfosEntrep( $siret, $idEntreprise, $infos ) + { + $this->authenticate(); + + //Initialisation + $tabRet = array(); + $iBodacc = new MBodacc(); + $iInsee = new MInsee(); + $result = false; + + if (!$this->checkEdition()) { + + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + + } else { + $siren = substr($siret,0,9); + $nic = substr($siret,9,5); + + $iDb = new WDB(); + + $tabInfos = json_decode($infos, true); + + $tabIdentite = $tabInfos['identite']; + $tabJugement = $tabInfos['jugement']; + $tabActio = $tabInfos['actionnaire']; + $tabParti = $tabInfos['participation']; + $tabScores = $tabInfos['score']; + + //Valider le code Isin + if (strlen(trim($tabIdentite['isin']))) { + $iBourse = new MBourse(); + if (!$iBourse->isIsin($tabIdentite['isin'])) { + $error->errnum = 1; + $error->errmsg = 'Code Isin incorrect.'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + } + + // Mise à jour de l'identité + if (trim(strtolower($tabIdentite['web']))=='http://'){ + $web = ''; + } else { + $web = trim($tabIdentite['web']); + } + $tabUpdate = array( + 'isin' => trim($tabIdentite['isin']), + 'tel' => trim($tabIdentite['tel']), + 'fax' => trim($tabIdentite['fax']), + 'web' => $web, + 'mail' => trim($tabIdentite['mail']), + 'activite' => stripslashes(trim($tabIdentite['activite'])), + 'sirenDoublon' => substr(str_replace(' ','',strtr($tabIdentite['sirenDoublon'], '"\'./- ,\*#()',' ')),0,9), + 'waldec' => trim(str_replace(' ','',strtr($tabIdentite['waldec'], '"\'./- ,\*#()',' '))), + ); + + $db = Zend_Db_Table_Abstract::getDefaultAdapter(); + $sql = $db->select()->from('infos_entrep', array('siren'), 'jo')->where('siren=?',$siren); + $result = $db->fetchAll($sql); + if (count($result) == 0 ) { + try { + $isInserted = $db->insert('jo.infos_entrep', array_merge(array('siren'=>$siren), $tabUpdate)); + } catch(Zend_Db_Exception $e) { + file_put_contents('insert.log', "INSERT = ".$e->getMessage()); + } + } else { + try { + $isUpdated = $db->update('jo.infos_entrep', $tabUpdate, "siren=$siren"); + } catch(Zend_Db_Exception $e) { + file_put_contents('update.log', "INSERT = ".$e->getMessage()); + } + } + // Fin mise à jour identité + + // Opposition INSEE + if ( $tabIdentite['moisOppositionInsee']>0 && + $tabIdentite['moisOppositionInsee']<=(date('Ym')*1) ){ + + $iDb2 = new WDB('insee'); + if ( !$iDb2->insert('insee_nondiff', array('siren'=>$siren, 'insEVE'=>795, 'mois'=>$tabIdentite['moisOppositionInsee'])) ){ + if ( $iDb2->getLastErrorNum()<>1062 ) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des oppositions de la sphère commerciale INSEE pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + } + + } + // Fin opposition INSEE + + // Refus d'inscription au RCS + if (isset($tabIdentite['moisRefusRCS']) && $tabIdentite['moisRefusRCS']>0 + && $tabIdentite['moisRefusRCS']<=(date('Ym')*1)) { + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteLight($siren); + if ($nic<10) $nic=$entrep['Nic']; + $cj1=substr($entrep['FJ'],0,1); + $iDb2 = new WDB('insee'); + /** Insertion dans la tables des exclusions **/ + $tabInsert = array( + 'siren' => $siren, + 'nic' => $nic, + 'idSaisie' => $this->User->id, + 'cj1' => $cj1, + 'insEVE' => 'RCS', + 'mois' => $tabIdentite['moisRefusRCS'], + ); + if (!$iDb2->insert('insee_nondiff', $tabInsert)) + if ($iDb2->getLastErrorNum()<>1062) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des refus d'enregistrement A au RCS pour $siren au mois de ".$tabIdentite['moisRefusRCS']." : ".EOL.print_r($tabInsert, true).EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + + /** Insertion dans la tables des évènements **/ + $tabInsert = array( + 'insSIREN' => $siren, + 'siretValide' => $iInsee->valideSiren($siren,$nic), + 'insNIC' => $nic, + 'insEVE' => 'RCS', + 'insDATEVE' => $tabIdentite['moisRefusRCS'].'28', + 'insDATEMAJ' => date('YmdHis'), + 'idFlux' => date('Ymd')); + if (!$iDb2->insert('insee_even', $tabInsert)) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de l'inscription à la liste des refus d'enregistrement B au RCS pour $siren au mois de ".$tabIdentite['moisOppositionInsee']." : ".EOL.print_r($tabInsert, true).EOL.print_r($tabIdentite, true).EOL.$iDb2->getLastError()); + } + // Fin refus d'inscription au RCS + + // Domiciliataire + if (!empty($tabIdentite['domiciliataire']) && $siren>1000) { + if ($tabIdentite['domiciliataire']=='oui' || $tabIdentite['domiciliataire']=='non') { + // L'entreprise et ces établissements seront mis à jour automatiquement ce soir + $iDb->query("INSERT IGNORE INTO jo.tabAdrDom (siren,nic,siege, etActif, nom, sigle, enseigne, adrNum, adrBtq, adrTypVoie, adrLibVoie, ville, cp, depComEt, adrComp, cj, apen,apet, dateInsert) + SELECT siren, nic, siege, actif AS etActif, raisonSociale AS nom, sigle, enseigne, adr_num as adrNum, adr_btq AS adrBtq, adr_typeVoie AS adrTypVoie, adr_libVoie AS adrLibVoie, adr_ville AS ville, adr_cp AS cp, CONCAT(adr_dep,adr_com) AS depComEt, adr_comp AS adrComp, cj, ape_entrep AS apen, ape_etab AS apet, DATE(NOW()) as dateInsert + FROM jo.etablissements WHERE siren=$siren;", false); + } + // Si demande de suppression, on force l'indicateur "" + if ($tabIdentite['domiciliataire']=='non') { + $tabUpdate=array('pasEntrepDom'=>1); + if (!$iDb->update('tabAdrDom', $tabUpdate, "siren=$siren")) + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", "Erreur lors de la suppression du marqueur de domiciliation pour $siren :".EOL.print_r($tabUpdate, true).EOL.$iDb->getLastError()); + } + } + // Fin domiciliataire + + // Insertion des scores + $tabUpdate = array(); + $setScore = false; + if ( $tabScores['encours']!='' || $tabScores['encours']!=null ){ + $tabUpdate['encours'] = $tabScores['encours']; + $setScore = true; + } + if ( $tabScores['scoreSolv']!='' ){ + $tabUpdate['scoreSolv'] = $tabScores['scoreSolv']; + $setScore = true; + } + if ( $tabScores['scoreDir']!='' ){ + $tabUpdate['scoreDir'] = $tabScores['scoreDir']; + $setScore = true; + } + if ( $tabScores['scoreConf']!='' ){ + $tabUpdate['scoreConf'] = $tabScores['scoreConf']; + $setScore = true; + } + if ( $setScore ){ + // Mise à jour des Cute Offs + if ( !$iDb->update('scores_cutoff', $tabUpdate, "siren=$siren") ){ + if ( !$iDb->insert('scores_cutoff', array_merge(array( + 'siren' => $siren, + 'dateInsert' => date('Ymd') ), $tabUpdate)) ){ + @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "ERREUR setInfosEntrep pour $siren", print_r($tabScores, true).EOL.$iDb->getLastError()); + } + } + } + // Fin insertion des scores + + // Insertion du jugement + $tabEven = $tabJugement['even']; + $nic = $tabJugement['nic']*1; + $entrep = $iInsee->getIdentiteLight($siren, $nic); + if ( $nic>0 && $tabEven[0]==6700 && $entrep['Siege']==0 ){ + // Radiation d'un établissement + $tabEven[0] = 6600; + } + + if ( count($tabEven)>0 ){ + $idAdmin = str_replace('m','',trim($tabJugement['admin'])); + $idMand = str_replace('m','',trim($tabJugement['mand'])); + $idOppo = str_replace('m','',trim($tabJugement['oppo'])); + + $tabSource=explode('_',$tabJugement['source']); + $source=@$tabSource[0]; + $numJal=@$tabSource[1]; + + $dateSource=WDate::dateT('d/m/Y', 'Ymd', trim($tabJugement['dateParution']))*1; + if ($dateSource<20000101) + $dateSource=date('YmdHis'); + + $montant=trim(preg_replace('/[^0-9]/', '', $tabJugement['montant']))*1; + $actionsMt=trim(preg_replace('/[^0-9]/', '', $tabJugement['actionsMt']))*1; + $actionsNb=trim(preg_replace('/[^0-9]/', '', $tabJugement['actionsNb']))*1; + if ($montant>0 && ($actionsNb>0 || $actionsMt>0)) { + if ($actionsNb>0) $actionsMt=$montant/$actionsNb; + elseif ($actionsMt>0) $actionsNb=$montant/$actionsMt; + } + + //@todo : ça ne va pas marcher ici + $strDir=''; + + if (count($tabJugement['nouvDir'])>0) { + foreach( $tabJugement['nouvDir'] as $dir ){ + if ( intval($dir['Fonc'])>0 ){ + $strDir.= $iBodacc->getFctDir($dir['Fonc']).' : '.$dir['Genre'].' '. + ucwords(strtolower($dir['Pre'])).' '.strtoupper($dir['Nom']); + if (!empty($dir['Dom'])) { + $strDir.= ', domicilié à '.$dir['Dom'].'. '; + } + } + } + } + + if ( trim($tabJugement['nouvAdrCp'])<>'' ){ + $strAdr = stripslashes(trim($tabJugement['nouvAdr']).', '. + trim($tabJugement['nouvAdrCp']).' '. + trim($tabJugement['nouvAdrVille'])); + } else { + $strAdr=''; + } + + if (count($tabEven)>1){ + $strEven = implode(';',array_slice($tabEven, 1)); + } else { + $strEven = ''; + } + + $tabUpdate = array( + 'strEven' => $strEven, + 'sirenValide' => $iInsee->valideSiren($siren), + 'dateCessationPaiement' => empty($tabJugement['datePaie']) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement['datePaie'])), + 'dateEffetFinP' => empty($tabJugement['dateFinPeriode']) ? '' : + WDate::dateT('d/m/Y', 'Y-m-d', trim($tabJugement['dateFinPeriode'])), + 'tribunal' => trim($tabJugement['tribunal']), + 'montant' => $montant, + 'actionsNb' => $actionsNb, + 'inter1type' => 'A', + 'inter1id' => $idAdmin, + 'inter1nom' => $iInsee->getMandatairesParId($idAdmin), + 'inter2type' => 'M', + 'inter2id' => $idMand, + 'inter2nom' => $iInsee->getMandatairesParId($idMand), + 'inter3type' => 'O', + 'inter3id' => $idOppo, + 'inter3nom' => $iInsee->getMandatairesParId($idOppo), + 'complement' => stripslashes(trim($tabJugement['comp'])), + 'nouvActivite' => stripslashes(trim($tabJugement['nouvActivite'])), + 'nouvDir' => stripslashes(trim($strDir)), + 'nouvAdr' => $strAdr, + 'nouvFJ' => trim($tabJugement['nouvFJ']), + 'raisonSociale' => $entrep['Nom'], + 'adresse' => $entrep['Adresse'], + 'codePostal' => $entrep['CP'], + 'ville' => $entrep['Ville'], + 'source' => $source, + 'idSaisie' => $this->User->id, + 'parutionIdJal' => $numJal, + 'parutionNum' => $tabJugement['numParution'], + ); + $dateJuge = WDate::dateT('d/m/Y','Y-m-d',trim($tabJugement['dateJuge'])); + $tabInsert = array_merge( $tabUpdate, array( + 'siren' => $siren, + 'dateJugement' => $dateJuge, + 'typeEven' => $tabEven[0], + 'dateSource' => $dateSource, + )); + if ( !$iDb->insert('annonces', array_merge($tabInsert,array('dateInsert'=>date('YmdHis'))), true) ){ + if ( !$iDb->update('annonces', $tabUpdate, "siren=$siren AND dateJugement='$dateJuge' AND typeEven=".$tabEven[0], true)){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + } + } + + // Insertion actionnaire + if ( trim($tabActio['siren'])!='' ) { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabActio['pct']))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabActio['siren']); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ($pays=='') $pays='FRA'; + if (trim($tabActio['nom'])!='') $nom = $tabActio['nom']; + if ($tabActio['pays']!='XXX') $pays = $tabActio['pays']; + + if (trim($tabActio['dateMAJ'])!='JJ/MM/AAAA' && trim($tabActio['dateMAJ'])!=''){ + $dateMAJ = WDate::dateT('d/m/Y', 'Y-m-d', trim($tabActio['dateMAJ'])); + } + + if ($tabActio['majMin']=='maj') $majMin='+'; + elseif ($tabActio['majMin']=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + //'Siren1'=> $siren, + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + //'Siren2'=> $siren2, + //'RaisonSociale'=> $nom, + //'Pays'=> $pays, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array('ActionPart' => 1), array( + 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res = $iDb->select('liens', 'count(*)', + "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=1016166; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=1016167; + } + + $tabInsert2 = array_merge($tabUpdate, array('ActionPart' => 2), array( + 'Siren1' => $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=1016168; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=1016169; + } + } + // Fin insertion actionnaire + + //Insertion participation + if ( trim($tabParti['siren'])<>'' ) { + $nom = $pays = $dateMAJ = ''; + $ppPm = 'P'; + $pct = trim(str_replace(',','.',$tabParti['pct']))*1; + $siren2 = preg_replace('/[^0-9]/','', $tabParti['siren']); + $entrep2 = $iInsee->getIdentiteEntreprise($siren); + $nom2 = $entrep2['Nom']; + $pays2 = $entrep2['Pays']; + if ($pays2=='') $pays2='FRA'; + + if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; + $entrep = $iInsee->getIdentiteEntreprise($siren2); + $nom = $entrep['Nom']; + $pays = trim($entrep['Pays']); + if ( $pays=='' ) $pays='FRA'; + if ( trim($tabParti['nom'])<>'' ) $nom=$tabParti['nom']; + if ( $tabParti['pays']<>'XXX' ) $pays=$tabParti['pays']; + + if (trim($tabParti['dateMAJ'])<>'JJ/MM/AAAA' && trim($tabParti['dateMAJ'])<>'') + $dateMAJ=WDate::dateT('d/m/Y', 'Y-m-d', trim($tabParti['dateMAJ'])); + + if ($tabParti['majMin']=='maj') $majMin='+'; + elseif ($tabParti['majMin']=='min') $majMin='-'; + else $majMin=''; + + $tabUpdate = array( + 'Pmin'=> $pct, + 'Pmax'=> $pct, + 'MajMin'=> $majMin, + 'PpPm'=> $ppPm, + 'dateLien'=> $dateMAJ, + ); + + $tabInsert1 = array_merge($tabUpdate, array( 'ActionPart' => 2 ), array( + 'Siren1'=> $siren, + 'Siren2'=> $siren2, + 'RaisonSociale'=> $nom, + 'Pays'=> $pays, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='$nom' AND Pays='$pays'))", true)) + $errMaj=10168; + } else { + if (!$iDb->insert('liens', $tabInsert1, true)) + $errMaj=10169; + } + + $tabInsert2 = array_merge($tabUpdate, array( 'ActionPart' => 1 ), array( + 'Siren1'=> $siren2, + 'Siren2'=> $siren, + 'RaisonSociale'=> $nom2, + 'Pays'=> $pays2, + 'actif'=> 1, + 'source'=> 1900, + 'dateInsert'=> date('YmdHis')) + ); + $res=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); + if ($res[0][0]>0) { + if (!$iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))", true)) + $errMaj=10170; + } else { + if (!$iDb->insert('liens', $tabInsert2, true)) + $errMaj=10171; + } + } + // Fin insertion participation + + if ($errMaj>0){ + $error->errnum = 1; + $error->errmsg = 'Mise a jour impossible'; + } else { + $result = true; + } + } + $output = new SetInfosEntrepReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Informations Mandataires + * @param SetInfosMandataire $infos Informations sur le mandataire à créer ou à ajouter (ajout si id absent) + * @return boolean + */ + public function setMandataire($infos) + { + $this->authenticate(); + //Initialisation + $result = false; + + $type = substr(strtoupper($infos->type),0,1); + $stag = substr(strtoupper($infos->type),1,1); + if ( $stag=='S' ) { + $stag = 1; + } else { + $stag = 0; + } + if ( in_array($type, array('A', 'H', 'M', 'V', 'N', 'T')) ) { + $tabUpdate = array( + 'sirenGrp' => substr($infos->sirenGrp,0,9)*1, + 'nicGrp' => substr($infos->sirenGrp,9,5)*1, + 'sirenMand' => substr($infos->sirenMand,0,9)*1, + 'nicMand' => substr($infos->sirenMand,9,5)*1, + 'Nom' => ucwords(strtolower($infos->Nom)), + 'Prenom' => ucwords(strtolower($infos->Prenom)), + 'type' => $type, + 'stagiaire' => $stag, + 'coursAppel' => intval($infos->coursAppel), + 'coursAppel2' => intval($infos->coursAppel2), + 'tribunal' => $infos->tribunal, + 'Statut' => strtoupper($infos->Statut), + 'adresse' => ucwords($infos->adresse), + 'adresseComp' => strtoupper($infos->adresseComp), + 'cp' => intval($infos->cp), + 'ville' => strtoupper($infos->ville), + 'tel' => $infos->tel, + 'fax' => $infos->fax, + 'email' => $infos->email, + 'web' => $infos->web, + 'contact' => $infos->contact, + 'idUser' => $this->User->id, + ); + + $model = new Application_Model_JoTabMandataires(); + $id = intval(str_replace('m','', ''.$infos->id)); + if ( intval($id)!=0 ) { + try { + $model->update($tabUpdate, 'id='.$id); + return true; + } catch (Zend_Db_Exception $e){ + throw new SoapFault('ERR', $e->getMessage()); + } + } else { + try { + $tabUpdate['dateInsert'] = date('YmdHis'); + $model->insert($tabUpdate); + return true; + } catch (Zend_Db_Exception $e){ + throw new SoapFault('ERR', $e->getMessage()); + } + } + } + + return false; + } + + /** + * Supprime une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return SupprAnnonceCollecteReturn + */ + public function supprAnnonceCollecte($idAnn, $siret=null) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + $siren = substr($siret,0,9)*1; + $iDb = new WDB(); + $idAnn = preg_replace('/^0\./','', ''.$idAnn)*1; + + if ($idAnn>0) + { + if ($iDb->update('annonces',array( + 'dateSuppr'=>date('YmdHis'), + 'idSuppr'=>$this->User->id), + "id=$idAnn", false)) + { + debugLog('I',"Suppression de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } + else + { + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + debugLog('I',"Suppression impossible de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } + } + else + { + $error->errnum = 1; + $error->errmsg = 'idAnn incorrect'; + } + } + $output = new SupprAnnonceCollecteReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le mandataire par son id + * @param int $id Identifiant du mandataire + * @return string + */ + public function getMandataire($id) + { + $this->authenticate(); + require_once 'Metier/insee/classMInsee.php'; + $iInsee = new MInsee(); + $tabRet = $iInsee->getMandataire($id); + return json_encode($tabRet); + } + + /** + * Liste les mandataires compétentes pour une cours d'appel donnée + * @param mixed $codeTribunal Identifiants BODACC du tribunal ou tableau d'Identifiants numériques des cours d'appel + * @param array $type Type de mandataire (A)dministrateur, (M)andataire, (O)ppositions, (N)otaires, a(V)ocat + * @return MandatairesReturn + */ + public function getMandataires($codeTribunal=0, $type=array('A','M')) + { + $this->authenticate(); + //Initialisation + $iInsee = new MInsee(); + $error = new ErrorType(); + $trib = serialize($codeTribunal); + debugLog('I',"Liste des Mandaitaires ou Administrateur du Tribunal/Cours d'Appel $trib demandé",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + if (!is_array($codeTribunal) && strlen($codeTribunal)>3 && $codeTribunal*1==0) + { + // $codeTribunal est un identifiant de tribunal + $iBodacc = new MBodacc(); + $tabTmp = $iInsee->getMandataires(array($iBodacc->getTribunalIdCA($codeTribunal)), true, $type); + } + elseif ($codeTribunal*1==0) + { + // On veut tous les mandataires + $tabTmp = $iInsee->getMandataires(array(), true, $type); + } + elseif (is_array($codeTribunal)) + { + // On veut les mandataires d'une CA + $tabTmp = $iInsee->getMandataires($codeTribunal, true, $type); + } + $tabRet = array(); + foreach ($tabTmp as $i=>$mand){ + $mandataire = new Mandataire(); + $mandataire->id = 'm'.$i; + $mandataire->mand = $mand; + $tabRet[]= $mandataire; + } + $output = new MandatairesReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + /** + * Donne la cours d'appel d'un tribunal par son code + * @param string $codeTribunal Code BODACC sur 6 caractères du tribunal + * @return int + */ + public function getIdCoursAppel($codeTribunal) + { + $this->authenticate(); + $iBodacc = new MBodacc(); + return $iBodacc->getTribunalIdCA($codeTribunal); + } + + /** + * Duplique une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return DupliqueAnnonceReturn + */ + public function dupliqueAnnonceCollecte($idAnn, $siret = null) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = ''; + $error = new ErrorType(); + $result = 0; + + if (!$this->checkEdition()) { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } else { + $siren = intval(substr($siret,0,9)); + $nic = intval(substr($siret,9,5)); + $iDb = new WDB(); + $idAnn = intval(preg_replace('/^0\./','', ''.$idAnn)); + if ($idAnn>0 && $siren>1000){ + $res = $iDb->select('annonces', '*', "id=$idAnn", false, MYSQL_ASSOC); + if (count($res)==0) { + $error->errnum = 1; + $error->errmsg = 'Annonce inexistante'; + } else { + $annonce = $res[0]; + // Suppression des zones inexistantes dans la table ou devant être vides + unset($annonce['id']); + unset($annonce['nic']);//=$nic; + $annonce['siren'] = $siren; + $annonce['nic'] = $nic; + if ($iDb->insert('annonces', $annonce, false)) { + debugLog('I',"Duplication de l'annonce collectée n°$idAnn sur $siret",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = 1; + } else { + debugLog('I',"Suppression impossible de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + } + } + } + } + $output = new DupliqueAnnonceCollecte(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Récupère le contenu d'une annonce issue de la collecte + * @param string $idAnn + * @param string $siret + * @return AnnonceCollecteReturn + */ + public function getAnnonceCollecte($idAnn, $siret) + { + $this->authenticate(); + //Initialisation + $error = new ErrorType(); + $annonceCollecte = new AnnonceCollecte(); + $siren = substr($siret,0,9)*1; + if (!$this->checkEdition()) { + + $error->errnum = 0; + $error->errmsg = 'Code Client Incorrect'; + + } else { + + $iDb = new WDB(); + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $idAnn = preg_replace('/^0\./','', ''.$idAnn) * 1; + if ($idAnn>0) + { + $res = $iDb->select('annonces', + 'id, LPAD(siren,9,0) AS siren, sirenValide, typeEven, strEven, raisonSociale, adresse, codePostal, ville, dateJugement, dateCessationPaiement, dateEffetFinP, numero, inter1type, inter1id, inter1nom, inter2type, inter2id, inter2nom, inter3type, inter3id, inter3nom, inter4type, inter4id, inter4nom, tribunal, montant, actionsNb, complement, infosBrutes, nouvActivite, nouvDir, nouvAdr, nouvFJ, annonce, source, parutionIdJal, parutionNum, dateSource, idSaisie, idAnnonce, dateInsert', + "id=$idAnn", false, MYSQL_ASSOC + ); + if (count($res)>0) + { + $ann = $res[0]; + $annonceCollecte->id = $ann['id']; + $annonceCollecte->siren = $ann['siren']; + $annonceCollecte->raisonSociale = $ann['raisonSociale']; + $annonceCollecte->adresse = $ann['adresse']; + $annonceCollecte->codePostal = $ann['codePostal']; + $annonceCollecte->ville = $ann['ville']; + $annonceCollecte->dateJugement = $ann['dateJugement']; + + //@todo : Les libellées ne sont pas présent LibEven + $tabEven = array(); + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $ann['typeEven']; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + if (!empty($ann['strEven'])){ + foreach ( explode(';',$ann['strEven']) as $code ) + { + $annonceEvenement = new AnnonceEvenement(); + $annonceEvenement->CodeEven = $code; + $annonceEvenement->LibEven = ''; + $tabEven[] = $annonceEvenement; + } + } + + $annonceCollecte->even = $tabEven; + $annonceCollecte->dateSource = $ann['dateSource']; + $annonceCollecte->dateCessationPaiement = $ann['dateCessationPaiement']; + $annonceCollecte->dateEffetFinP = $ann['dateEffetFinP']; + $annonceCollecte->tribunal = $ann['tribunal']; + $annonceCollecte->numero = $ann['numero']; + $annonceCollecte->montant = $ann['montant']; + $annonceCollecte->actionsNb = $ann['actionsNb']; + $annonceCollecte->inter1type = $ann['inter1type']; + $annonceCollecte->inter1id = $ann['inter1id']; + $annonceCollecte->inter1nom = $ann['inter1nom']; + $annonceCollecte->inter2type = $ann['inter2type']; + $annonceCollecte->inter2id = $ann['inter2id']; + $annonceCollecte->inter2nom = $ann['inter2nom']; + $annonceCollecte->inter3type = $ann['inter3type']; + $annonceCollecte->inter3id = $ann['inter3id']; + $annonceCollecte->inter3nom = $ann['inter3nom']; + $annonceCollecte->complement = $ann['complement']; + $annonceCollecte->nouvActivite = $ann['nouvActivite']; + $annonceCollecte->nouvDir = $ann['nouvDir']; + $annonceCollecte->nouvAdr = $ann['nouvAdr']; + $annonceCollecte->nouvFJ = $ann['nouvFJ']; + $annonceCollecte->source = $ann['source']; + + debugLog('I',"Lecture de l'annonce collectée n°$idAnn ($siret) : ".$ann['raisonSociale'],__LINE__,__FILE__, __FUNCTION__, __CLASS__); + } else { + $error->errnum = 1; + $error->errmsg = 'Edition impossible'; + } + } + else + { + $error->errnum = 745741; + $error->errmsg = 'Selection impossible'; + } + } + $output = new AnnonceCollecteReturn(); + $output->error = $error; + $output->result = $annonceCollecte; + return $output; + } + + /** + * Enregistrement de document actes ou status d'association + * @param string $siren Numéro Siren + * @param string $waldec Numéro waldec + * @param string $type Type d'acte (ST) + * @param string $libelle Libellé de l'acte + * @param string $date Date de l'acte au format AAAAMMDD + * return boolean + */ + public function setActeAsso( $siren, $waldec, $type, $libelle, $date ) + { + $this->authenticate(); + if (!$this->checkEdition()) { + $this->sendError('0902'); + } + + ($type == 'ST') ? $type_acte = 'ST' : $type_acte = 'ST'; + + $data = array( + 'siren' => $siren, + 'waldec' => $waldec, + 'pdfLink' => '', + 'pdfSize' => '', + 'pdfVer' => '', + 'pdfPage' => '', + 'date_acte' => WDate::dateT('Ymd', 'Y-m-d', $date), + 'type_acte' => $type_acte, + 'type_acte_libelle' => $libelle, + ); + + //Save + try { + $doc = new Application_Model_AssoActes(); + $id = $doc->insert($data); + } catch (Zend_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + return $id; + } + + /** + * getListeJalCollecte + * @return ListeJalCollecteReturn + */ + public function getListeJalCollecte() + { + $this->authenticate(); + + //Initialisation + $error = new ErrorType(); + + $iBodacc = new MBodacc(); + $tabJal = $iBodacc->getListeJalCollecte(); + foreach ($tabJal as $i=>$jal) + { + $jalCollecte = new JalCollecte(); + $jalCollecte->id = $i; + $jalCollecte->nom = $jal; + $tabRet[] = $jalCollecte; + } + $output = new ListeJalCollecteReturn(); + $output->error = $error; + $output->result = $tabRet; + return $output; + } + + + /** + * Suppression logique d'une annonce relative à une entité + * @param integer $source 0=Collecte, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param string $siret Siren de l'entreprise ou Siret de l'établissement + * @return SupprAnnonceReturn + */ + public function supprAnnonce($source=0, $idAnn, $siret=0) + { + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + if (empty($source)) $source = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + + $siren = substr($siret,0,9); + $iDb = new WDB(); + switch ($source) + { + case 0: + $idAnn = preg_replace('/^0\./','', ''.$idAnn)*1; + $table = 'annonces'; + break; + case 1: + if (intval($idAnn)<0){ + $error->errnum = 1; + $error->errmsg = 'Code annonce Incorrect'; + } else { + $strSql = "AND siren=$siren"; + $table = 'bodacc_detail'; + } + break; + case 3: + $table = 'asso'; + break; + case 2: + case 4: + default: + $error->errnum = 1; + $error->errmsg = 'Cas non géré'; + break; + } + if (intval($idAnn)>0 && $iDb->update($table, array( + 'dateSuppr' => date('YmdHis'), + 'idSuppr' => $this->User->id), + "id=$idAnn $strSql", false)) + { + debugLog('I',"Suppression de l'annonce en source $source n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 0; + $error->errmsg = ''; + $result = true; + } else { + debugLog('I',"Suppression impossible de l'annonce en source $source n°$idAnn ($siret)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = 'Suppression de l\'annonce impossible'; + } + } + $output = new SupprAnnonceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Duplication d'une annonce relative à une entité + * + * @param integer $source 0=Collecte, 1=BODACC, 2=B.A.L.O, 3=JO Association, 4=Boamp + * @param string $idAnn Identifiant de l'annonce + * @param string $siretIn Siren de l'entreprise ou Siret de l'établissement de l'annonce à duppliquer + * @param string $siretOut Siren/Siret de l'entreprise ou étab sur lequel il faut dupliquer l'annonce + * @return DupliqueAnnonceReturn + */ + public function dupliqueAnnonce($source=0, $idAnn, $siretIn=0, $siretOut=0) + { + debugLog('I',"Demande de duplication d'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + $this->authenticate(); + //Initialisation + if (empty($siret)) $siret = 0; + if (empty($source)) $source = 0; + $error = new ErrorType(); + $result = false; + + if (!$this->checkEdition()) + { + $error->errnum = 1; + $error->errmsg = 'Code Client Incorrect'; + } + else + { + $sirenIn = substr($siretIn,0,9)*1; + $nicIn = substr($siretIn,9,5)*1; + $sirenOut = substr($siretOut,0,9)*1; + $nicOut = substr($siretOut,9,5)*1; + $iDb = new WDB(); + $strSql=''; + switch ($source) + { + // + case 0: + $idAnn = preg_replace('/^0\./','', ''.$idAnn)*1; + $table = 'annonces'; + break; + + //Bodacc + case 1: + if (intval($idAnn)<0) { + //@todo : Must be possible + $error->errnum = 1; + $error->errmsg = 'Code annonce Incorrect'; + } else { + if (intval($sirenIn)>0) $strSql.="AND siren=$sirenIn"; + $table = 'bodacc_detail'; + } + break; + + //Association + case 3: + $table = 'asso'; + break; + // + case 2: + // + case 4: + // + default: + $error->errnum = 1; + $error->errmsg = 'Cas non géré'; + break; + } + + if (intval($idAnn)>0) { + //@todo : define fields LPAD(siren,9,0) as siren + $res = $iDb->select($table, '*', "id=$idAnn $strSql", false, MYSQL_ASSOC); + + if (count($res)==0) { + $error->errnum = 1; + $error->errmsg = 'Annonce inexistante'; + } else { + + /* Si table = asso => UPDATE de la ligne */ + if ($table == 'asso'){ + //$annonce = $res[0]; + $annonce['siren'] = $sirenOut; + $annonce['sirenValide'] = 2; + $annonce['dateUpdate'] = date('YmdHis'); + $annonce['idSirenage'] = $this->User->id; + $annonce['nic'] = $nicOut; + if ($nicOut>0) $annonce['nicValide'] = 2; + if ($iDb->update($table, $annonce, "id=".$idAnn, true, true)) { + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + + //Si WALDEC présent dans l'annonce alors on rapproche tout + if ($res['Waldec']!='') { + $iDb->update($table, $annonce, "Waldec=".$res['Waldec'], false); + } + $result = true; + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + } + /* Si sirenIn = 0 et table = bodacc_detail => INSERT + UPDATE */ + elseif (intval($sirenIn) == 0 && $table == 'bodacc_detail' ) { + $annonce = $res[0]; + $annonce['siren'] = $sirenOut; + $annonce['sirenValide'] = 2; + $annonce['dateInsert'] = date('YmdHis'); + $annonce['idSirenage'] = $this->User->id; + $annonce['nic'] = $nicOut; + if ($nicOut>0) $annonce['nicValide'] = 2; + if ($iDb->insert($table, $annonce, true, true)) { + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + $data = array( + 'idSuppr' => $this->User->id, + 'dateSuppr' => date('YmdHis'), + ); + $iDb->update($table, $data, "id=$idAnn $strSql", true, true); + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + } + /* si sirenIn != 0 et table = bodacc_detail => insert */ + elseif (intval($sirenIn) != 0 && $table == 'bodacc_detail') { + $annonce = $res[0]; + $annonce['siren'] = $sirenOut; + $annonce['sirenValide'] = 2; + $annonce['dateInsert'] = date('YmdHis'); + $annonce['idSirenage'] = $this->User->id; + $annonce['nic'] = $nicOut; + if ($nicOut>0) $annonce['nicValide'] = 2; + if ($iDb->insert($table, $annonce, true, true)) { + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + + } + /* Si table = annonces => INSERT */ + elseif ($table == 'annonces'){ + $annonce = $res[0]; + // Suppression des zones inexistantes dans la table ou devant être vides + unset($annonce['id']); + unset($annonce['nic']); + $annonce['idSaisie'] = $this->User->id; + if ($iDb->insert($table, $annonce, true, true)) { + debugLog('I',"Duplication de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $result = true; + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut) : ".mysql_error(),__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + } + } + } else { + debugLog('I',"Duplication impossible de l'annonce en source $source sur n°$idAnn (siretIn=$siretIn, siretOut=$siretOut)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + $error->errnum = 1; + $error->errmsg = "Duplication de l'annonce impossible"; + } + } + $output = new DupliqueAnnonceReturn(); + $output->error = $error; + $output->result = $result; + return $output; + } + + /** + * Modification du code evenement d'une annonce + * @param string $siren + * @param string $id + * @param string[] $codeEven + * @return boolean + */ + public function setAnnonceEven($siren, $id, $codeEven) + { + $this->authenticate(); + $iDb = new WDB('jo'); + + $list = array(); + if (is_object($codeEven)){ + $list = $codeEven->item; + } else { + $list = $codeEven; + } + + //Get Rubrique of event + $eventM = new Application_Model_JoTabEvenements(); + $sql = $eventM->select()->where('codEven=?', $list[0]); + $row = $eventM->fetchRow($sql); + + if (count($list)>0){ + $tabUpdate = array( + 'typeEven' => implode(';',$list), + 'Rubrique' => $row->Rubrique, + 'idSirenage' => $this->User->id, + ); + if ($iDb->update('bodacc_detail', $tabUpdate, "siren='$siren' AND id='$id'")){ + debugLog('I',"setAnnonceEven (siren=$siren, list=$list)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); + return true; + } + } + return false; + } + + /** + * Enregistre une information de contact + * @param string $siret + * SIRET ou SIREN + * @param string $type + * Type de l'information (tel|fax|mail|mob|web) + * @param string $value + * Valeur + * @param string $info + * Information complémentaire (use for type "tel" as description) + * @param int id + * Id (only for editing) + * @param boolean $delete + * Marqueur de suppression + * @return int + * Retourne l'identifiant de l'élément ou le nombre de ligne lors d'un update + */ + public function setContactEt($siret, $type, $value, $info, $id=null, $delete=false) + { + $this->authenticate(); + $idUtilisateur = $this->User->id; + + //Delete + if ($delete === true) { + + try { + $telephonieM = new Application_Model_JoTelephonie(); + $data = array( + 'dateSuppr'=> date('YmdHis'), + 'idSuppr' => $idUtilisateur, + ); + $id = $telephonieM->update($data, 'id='.$id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + return $id; + } + + //Control input value + if ( strlen($siret)!=9 && strlen($siret)!=14 ) { + $this->sendError('1010'); + } + $siren = substr($siret,0,9); + if (intval($siren)==0 ) { + $this->sendError('1010'); + } + $nic = substr($siret,10,5); + if (intval($nic)==0) { + $nic = '00000'; + } + + if ( !in_array($type, array('an8','domaines','fax','logo','mail','mob','tel','web') ) ) { + throw new SoapFault('ERR', "unknow value for type"); + } + + switch($type) { + case 'mail': + case 'web': + case 'domaines': + $info = $value; + $value = 0; + break; + case 'tel' : + $value = intval($value); + break; + } + + $iInsee = new MInsee(); + $entrep = $iInsee->getIdentiteLight($siren, $nic); + if ( empty($entrep['id']) || intval($entrep['id'])==0 ) { + $this->sendError('1020'); + } + + $data = array( + 'siren' => $siren, + 'nic' => $nic, + 'dateProvPartenaire'=> date('Y').date('m').date('d'), + 'typeTel' => $type, + 'infoTel' => $info, + 'telephone' => $value, + 'actif' => 1, + 'partenaire' => 175, + ); + + if ( $id === null ) { + + try { + $data['idUtilisateur'] = $idUtilisateur; + $data['dateInsert'] = date('YmdHis'); + $telephonieM = new Application_Model_JoTelephonie(); + $id = $telephonieM->insert($data); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + } else { + + $data['idUpdate'] = $idUtilisateur; + $data['dateUpdate'] = date('YmdHis'); + + try { + $telephonieM = new Application_Model_JoTelephonie(); + $id = $telephonieM->update($data, 'id='.$id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + } + + return $id; + } + + /** + * Get a contact + * @param int $id + * @throws SoapFault + * @return string + */ + public function getContactEt($id) + { + $this->authenticate(); + + $contactM = new Application_Model_JoTelephonie(); + + try { + $sql = $contactM->select(true)->columns(array( + 'id', + 'LPAD(siren,9,0) AS siren', + 'LPAD(nic,5,0) AS nic', + 'dateProvPartenaire', + 'typeTel', + 'infoTel', + 'telephone', + 'actif', + 'partenaire', + 'idUtilisateur', + 'DATE_FORMAT(dateInsert, "%Y-%m-%d") AS dateInsert', + 'idUpdate', + 'DATE_FORMAT(dateUpdate, "%Y-%m-%d") AS dateUpdate', + 'idSuppr', + 'DATE_FORMAT(dateSuppr, "%Y-%m-%d") AS dateSuppr', + ))->where('id=?',$id); + $row = $contactM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + $result = $row->toArray(); + + $userM = new Application_Model_Sdv1Utilisateurs(); + + if ( $result['idUtilisateur']!=0 ) { + $sql = $userM->select(true)->columns(array('login', 'nom', 'prenom'))->where('id=?', $result['idUtilisateur']); + $row = $userM->fetchRow($sql); + $result['idUtilisateurName'] = $row->nom . ' ' . $row->prenom; + } + + if ( $result['idUpdate']!=0 ) { + $sql = $userM->select(true)->columns(array('login', 'nom', 'prenom'))->where('id=?', $result['idUpdate']); + $row = $userM->fetchRow($sql); + $result['idUpdateName'] = $row->nom . ' ' . $row->prenom; + } + + if ( $result['idSuppr']!=0 ) { + $sql = $userM->select(true)->columns(array('login', 'nom', 'prenom'))->where('id=?', $result['idSuppr']); + $row = $userM->fetchRow($sql); + $result['idSupprName'] = $row->nom . ' ' . $row->prenom; + } + + return json_encode($result); + } + + + /** + * Saisie d'un bilan + * @param string $siren + * SIREN de l'entité + * @param string $cloture + * Date de cloture original + * @param string $type + * Type original du bilan + * @param BilanInfos $data + * Postes et Information du bilan + * @param string $step (normal|nocheck|onlycheck) + * Etape + * @return int + * @throws SoapFault + */ + public function setBilan($siren, $cloture, $type, $data, $step = null) + { + $this->authenticate(); + + // --- Control input value + if ( strlen($siren)!=9 ) { + $this->sendError('1010'); + } + + $tabPostes = array(); + + // --- Control des valeurs + if ( !in_array($data->unite, array('', 'U', 'K', 'M')) ) { + throw new SoapFault('MSG', "Erreur Unite"); + } + if (!preg_match('/[0-9]{8}/', $data->dateCloture)) { + throw new SoapFault('MSG', "Erreur Date de cloture"); + } + if ($data->dateCloturePre != 'AAAAMMJJ' && !preg_match('/[0-9]{8}/', $data->dateCloturePre)) { + throw new SoapFault('MSG', "Erreur Date de cloture précédente"); + } + if ($data->dateCloturePre == 'AAAAMMJJ') { + $data->dateCloturePre = 0; + } + if (intval($data->dureeMois) < 1) { + throw new SoapFault('MSG', "Erreur Durée"); + } + if ($data->dureeMoisPre != 0 && intval($data->dureeMoisPre)<1) { + throw new SoapFault('MSG', "Erreur Durée précédente"); + } + if (!empty($data->postes)) { + $listPostes = explode(';', $data->postes); + foreach($listPostes as $strPoste) { + $itemPoste = explode('=', $strPoste); + if ( !is_numeric($itemPoste[1]) ) { + throw new SoapFault('MSG', "Erreur poste ".$itemPoste[0]); + break; + } + $tabPostes[$itemPoste[0]] = intval($itemPoste[1]); + } + } else { + throw new SoapFault('MSG', "Aucun poste saisi"); + } + + // --- Mathematic control + if ($step != 'nocheck' && count($tabPostes) > 0) + { + require_once 'Metier/partenaires/classMBilansInput.php'; + $control = new MBilansInput(); + try { + $control->control($data->typeBilan, $tabPostes); + } catch (Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + } + // --- End of Mathematic control + + if ( $step == 'onlycheck' ) { + return 1; + } + // --- Insertion dans la bdd + else { + + try { + $bilansM = new Application_Model_JoBilans(); + $sql = $bilansM->select() + ->where('siren=?', $siren) + ->where('dateExercice=?', $cloture) + ->where('typeBilan=?', $type); + $row = $bilansM->fetchRow($sql); + + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + $postesDiff = array(); + + if ($row !== null) { + + // --- Make the diff + $postesDiff = array_diff(explode(';', $data->postes), explode(';',$row->postes)); + + // --- Backup in historiques + $historiquesM = new Application_Model_HistoriquesBilans(); + $backupData = $row->toArray(); + unset($backupData['id']); + try { + $historiquesM->insert($backupData); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + // --- Define data + $dataToUpdate = array( + 'dateProvPartenaire' => date('Ymd'), + 'dateExercice' => $data->dateCloture, + 'dateExercicePre' => $data->dateCloturePre, + 'dureeExercice' => $data->dureeMois, + 'dureeExercicePre' => $data->dureeMoisPre, + 'monnaie' => 'EUR', + 'typeBilan' => $data->typeBilan, + 'monnaieOrigine' => 'EUR', + 'unite' => $data->unite, + 'postes' => $data->postes, + 'partenaire' => 1, + 'confidentiel' => 0, + 'dateInsert' => date('YmdHis'), + ); + + // --- Update + try { + $id = $bilansM->update($dataToUpdate, 'id = '.$row->id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + } else { + // --- Define data + $dataToInsert = array( + 'siren' => $siren, + 'dateProvPartenaire' => date('Ymd'), + 'dateExercice' => $data->dateCloture, + 'dateExercicePre' => $data->dateCloturePre, + 'dureeExercice' => $data->dureeMois, + 'dureeExercicePre' => $data->dureeMoisPre, + 'monnaie' => 'EUR', + 'typeBilan' => $data->typeBilan, + 'monnaieOrigine' => 'EUR', + 'unite' => $data->unite, + 'postes' => $data->postes, + 'partenaire' => 1, + 'confidentiel' => 0, + 'dateInsert' => date('YmdHis'), + ); + + // --- Insert + try { + $id = $bilansM->insert($dataToInsert); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + + if (empty($id)) { + throw new SoapFault('ERR', "Application error"); + } + + // --- Save user + $userM = new Application_Model_JoBilansUser(); + try { + $userM->insert(array( + 'idUtilisateur' => $this->User->id, + 'login' => $this->User->login, + 'siren' => $siren, + 'dateExercice' => $data->dateCloture, + 'typeBilan' => $data->typeBilan, + 'dateAction' => date('YmdHis'), + 'postesDiff' => implode(';', $postesDiff), + )); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + return $id; + } + } + + /** + * Créer un identifiant local pour un pays + * @param string $infos + * @param string $id + * @throws SoapFault + * @return int + */ + public function setCountryId($infos, $id = null) + { + $this->authenticate(); + + $data = json_decode($infos, true); + + if ($id!==null) { + + //Update + try { + $countryIdM = new Application_Model_JoTabIdLocal(); + $id = $countryIdM->update($data, 'id = '.$id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } else { + + //Insert + try { + $countryIdM = new Application_Model_JoTabIdLocal(); + $id = $countryIdM->insert($data); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + + return $id; + } + + /** + * Get lien informations + * @param int $id + * @throws SoapFault + * @return string + */ + public function getLien($id) + { + $this->authenticate(); + + $lienM = new Application_Model_JoLiens(); + try { + $row = $lienM->find($id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + $result = $row->current()->toArray(); + return json_encode($result); + } + + /** + * Définition d'un lien + * @param string $infos + * @param int $id + * @throws SoapFault + * @return int + */ + public function setLien($infos, $id=null) + { + $this->authenticate(); + + $dataLien = json_decode($infos, true); + $dataLien['source'] = 1900; + + $lienM = new Application_Model_JoLiens(); + + //Test si PDetention >= 100 + if ($dataLien['actif']!=0) { + $sql = $lienM->select()->from($lienM, array( + 'idPar', new Zend_Db_Expr('SUM( PDetention ) AS sumDet') + )) + ->where('idPar=?',$dataLien['idPar']); + if (null !== $id) { + $sql->where('id!=?', $id); + } + $sql->where('actif=?',1)->where('dateSuppr=?','0000-00-00 00:00:00'); + $result = $lienM->fetchRow($sql); + if ( null !== $result ) { + if ( (float) ($result->sumDet + $dataLien['PDetention']) > 100.1 ) { + throw new SoapFault('ERR', "Erreur Detention sup 100%"); + } + } + } + + //Enregistrer les infos + if (empty($id)) { + + $dataLien = array_merge($dataLien, array( + 'idInsert' => $this->User->id, + 'dateInsert' => date('YmdHis'), + )); + + try { + $id = $lienM->insert($dataLien); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + } + //Mise à jour des infos + else { + + if ($dataLien['motifUpdate']=="Erreur d'affiliation") { + $dataLien = array_merge($dataLien, array( + 'idSuppr' => $this->User->id, + 'dateSuppr' => date('YmdHis'), + )); + } else { + $dataLien = array_merge($dataLien, array( + 'idUpdate' => $this->User->id, + 'dateUpdate' => date('YmdHis'), + )); + } + + try { + $id = $lienM->update($dataLien, 'id = '.$id); + } catch (Zend_Db_Statement_Exception $e) { + if ( $e->getCode() == 1062 ) { + $id = $lienM->delete('id = '.$id); + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + + return $id; + } + + /** + * Définition d'une fiche lien + * @param string $infos + * @param int $id + * @throws SoapFault + * @return int + */ + public function setLienRef($infos, $id=null) + { + $this->authenticate(); + + $dataRef = json_decode($infos, true); + $dataRef['source'] = 1900; + + if (strlen(trim($dataRef['isin']))) { + $iBourse = new MBourse(); + if (!$iBourse->isIsin($dataRef['isin'])) { + throw new SoapFault('ERR', 'Code Isin incorrect.'); + } + } + + $refM = new Application_Model_JoLiensRef(); + + //Insert + if ($id===null) { + + //Check if exist + if (intval($dataRef['siren'])!=0) { + $sql = $refM->select()->from($refM, array('id'))->where('siren=?', $dataRef['siren']); + $rowset = $refM->fetchRow($sql); + if ( $rowset!==null ) { + return $rowset->id; + } + } + + $dataRef = array_merge($dataRef, array( + 'actif' => 1, + 'idInsert' => $this->User->id, + 'dateInsert' => date('YmdHis')) + ); + + try { + $id = $refM->insert($dataRef); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + //Update + else { + + if (array_key_exists('delete', $dataRef) && $dataRef['delete']==1) { + + $dataRef = array( + 'idSuppr' => $this->User->id, + 'dateSuppr' => date('YmdHis'), + ); + + try { + $id = $refM->update($dataRef, 'id = '.$id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } else { + + $dataRef = array_merge($dataRef, array( + 'idUpdate' => $this->User->id, + 'dateUpdate' => date('YmdHis'), + )); + + try { + $id = $refM->update($dataRef, 'id = '.$id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + + } + + return $id; + } + + /** + * Retourne les informations de référence + * @param int $id + * @throws SoapFault + * @return string + */ + public function getLienRef($id) + { + $this->authenticate(); + + $refM = new Application_Model_JoLiensRef(); + $row = $refM->fetchRow('id='.$id); + $ouput = ''; + if ($row === null) { + $output = json_encode(array('Aucun résultat')); + } else { + $output = json_encode($row->toArray()); + } + return $output; + } + + /** + * Liste des documents pour un lien + * @param int $id + * @param string $type null|Lien|Entreprise|Siren + * @throws SoapFault + * @return LienDoc[] + */ + public function getLienDoc($id, $type = null) + { + $this->authenticate(); + + //Type = Entreprise => Search id by Siren + if ($type == 'Siren') { + $lienrefM = new Application_Model_JoLiensRef(); + $sql = $lienrefM->select()->where('siren=?',$id); + $row = $lienrefM->fetchRow($sql); + $idNum = $row->id; + $type = 'Entreprise'; + } + //Type = Lien + elseif ($type == 'Lien' || $type == 'Entreprise') { + $idNum = $id; + } + + $output = array(); + + if ($type !== null && $idNum === null) { + return $output; + } + + //Get the result + $liendocM = new Application_Model_JoLiensDoc(); + try { + if ($idNum === null) { + $sql = $liendocM->select() + ->where('id=?', $id) + ->where('dateSuppr=?', '0000-00-00 00:00:00'); + } else { + $sql = $liendocM->select() + ->where('idNum=?', $idNum) + ->where('idType=?', $type) + ->where('dateSuppr=?', '0000-00-00 00:00:00'); + } + $sql->order('dateDocRef DESC'); + $rowset = $liendocM->fetchAll($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + if ( $rowset->count()>0 ) { + + foreach ( $rowset as $item ) { + $struct = new LienDoc(); + $struct->id = $item->id; + $struct->perimetre = $item->periDoc; + $params = explode('-', $item->docRef); + switch($params[0]) { + case 'INTERNE' : + $tabLabel = array( + 'CA'=>"Comptes Annuels", + 'CC'=>"Comptes Consolidés", + 'DR'=>"Document de référence", + 'RA'=>"Rapport Annuel ou d'Activité", + 'RS'=>"Rapport Semestriel", + 'RG'=>"Rapport de gestion", + 'RF'=>"Rapport financier", + 'OR'=>"Organigramme", + 'AP'=>"Article de presse", + 'AC'=>"Acte", + 'ST'=>"Statuts", + 'DW'=>"Document Web/Internet", + ); + $struct->label = $tabLabel[$params[2]].' ('.WDate::dateT('Ymd', 'd/m/Y', $params[3]).')'; + $struct->url = $item->docRef.'.pdf'; + break; + case 'GREFFE' : + $struct->label = $item->docRef; + $struct->url = $item->docRef; + //@todo + break; + } + + $struct->date = $item->dateDocRef; + $output[] = $struct; + } + } + return $output; + } + + /** + * Définition d'un document attaché à un lien + * @param string $infos + * @param int $id + * @throws SoapFault + * @return int + */ + public function setLienDoc($infos, $id=null) + { + $this->authenticate(); + + $dataDoc = json_decode($infos, true); + + $docM = new Application_Model_JoLiensDoc(); + + //Insert + if ($id===null) { + + $dataDoc = array_merge($dataDoc, array( + 'idInsert' => $this->User->id, + 'dateInsert' => date('YmdHis')) + ); + + try { + $id = $docM->insert($dataDoc); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + //Update + else { + + $dataDoc = array_merge($dataDoc, array( + 'idSuppr' => $this->User->id, + 'dateSuppr' => date('YmdHis'), + )); + + try { + $id = $docM->update($dataDoc, 'id = '.$id); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + + return $id; + } + + + /** + * Recherche de fiche lien dans le référentiel + * @param string $query + * @param string $type null|siren|identifiant|id|special + * @throws SoapFault + * @return SearchLienRef[] + */ + public function searchLienRef($query, $type = null) + { + $this->authenticate(); + + $db = Zend_Db_Table_Abstract::getDefaultAdapter(); + $sql = $db->select()->from( + array('l' => 'jo.liensRef'), + array( + 'id', 'siren', 'actif', 'RS', + 'nom', 'prenom', 'nom_usage', 'naissance_date', 'nat', 'adresse_cp', 'adresse_ville' + ) + ); + + if ( $type == 'siren' ) { + + $queries = explode(' ', $query); + $sql->joinLeft(array('p' => 'jo.tabPays'), 'p.codPays3 = l.adresse_pays', array('codPays3','libPays')); + $sql->where("l.siren=?", $queries[0]); + + } elseif ( $type == 'isin' ) { + + $queries = explode(' ', $query); + $sql->joinLeft(array('p' => 'jo.tabPays'), 'p.codPays3 = l.adresse_pays', array('codPays3','libPays')); + $sql->where("l.isin=?", $queries[0]); + + } + // Identifiant Nationnaux + elseif ( $type == 'identifiant' ) { + + $queries = explode(' ', $query); + $sql->joinLeft(array('p' => 'jo.tabPays'), 'p.codPays3 = l.adresse_pays', array('codPays3','libPays')); + $sql->where("l.idLoc1Num=?", $queries[0]); + + } + // Identifiant interne + elseif ( $type == 'id' ) { + + $sql->joinLeft(array('p' => 'jo.tabPays'), 'p.codPays3 = l.adresse_pays', array('codPays3','libPays')); + $sql->where("l.id=?", $query); + + } + // Structure spécial + elseif ( $type == 'special' ) { + + $queries = explode(' ', $query); + if (count($queries)>0) { + $where = ''; + $i = 0; + foreach ($queries as $item) { + if (strlen($item)>2) { + $where.= 'LIKE "%'.strtolower($item).'%"'; + } + $i++; + if (count($queries) > $i){ + $where.= ' OR '; + } + } + $sql->where("(l.RS ".$where.") OR (l.nom ".$where.")"); + $sql->where('l.id<1000'); + } + + } + // Recherche par nom + else { + + $pos = strrpos($query, ','); + if ($pos !== false) { + $country = trim(substr($query, $pos+1)); + $query = trim(substr($query, 0, $pos)); + } + + $sql->joinLeft(array('p' => 'jo.tabPays'), 'p.codPays3 = l.adresse_pays', array('codPays3','libPays')); + $sql->where('MATCH (l.RS, l.nom, l.prenom) AGAINST ("'.strtolower($query).'" IN NATURAL LANGUAGE MODE)'); + $sql->where('l.id>=1000'); + + if ( !empty($country) ) { + $sql->where('l.adresse_pays=?', $country); + } + + } + + $sql->where("l.dateSuppr='0000-00-00 00:00:00'"); + $sql->limit(20); + + try { + $result = $db->fetchAll($sql, null, Zend_Db::FETCH_OBJ); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $output = array(); + if (count($result>0)) { + foreach($result as $item) { + $tmp = new SearchLienRef(); + $tmp->id = $item->id; + + //Personne Morale + if ($item->siren!='') { + $lib = $item->RS.', '.str_pad($item->siren, 9, '0', STR_PAD_LEFT); + } else { + $lib = $item->RS.', '.$item->adresse_cp.' '.$item->adresse_ville.', '.$item->libPays; + } + + //Personne Physique + if ( $item->nom != '' ) { + $lib = ' '.$item->nom.' '.$item->prenom.', '; + if ( $item->nom_usage != '' ) { + $lib.= $item->nom_usage.', '; + } + $lib.= $item->naissance_date.', '.$item->nat; + if ( intval($item->siren) ) { + $lib.= ' ('.$item->siren.')'; + } + } + + if ($item->actif!=1) { + $lib.= ' (inactif)'; + } + + $tmp->lib = $lib; + $output[] = $tmp; + } + } + + return $output; + } + + /** + * Change siren for a registered mark + * @param int $id + * Registered mark ID + * @param string $siren + * Siren to affect + * @throws SoapFault + * @return int + */ + public function dupliqueMarque($id, $siren) + { + $this->authenticate(); + + $idUser = $this->User->id; + + $data = array( + 'sirenDeposant' => $siren, + 'sirenValide' => 2, + 'idSirenage' => $idUser, + 'dateUpdate' => date('YmdHis') + ); + + try { + $marqueM = new Application_Model_BopiMarques(); + $result = $marqueM->update($data, 'id='.$id); + } catch (Zend_Db_Adapter_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', "Application error"); + } + return $result; + } + + /** + * Bourse + * @param string $isin + * @param string $infos + * @throws SoapFault + * @return int + */ + public function setBourse($isin, $infos) + { + $this->authenticate(); + + if (strlen($isin)>12) { + throw new SoapFault('ERR', 'Code Isin incorrect.'); + } + + $data = json_decode($infos, true); + + if (strlen(trim($isin))) { + $iBourse = new MBourse(); + if (!$iBourse->isIsin($isin)) { + throw new SoapFault('ERR', 'Code Isin incorrect.'); + } + } + + $bourseM = new Application_Model_Sdv1BourseIsin(); + + //Check if exist + $sql = $bourseM->select()->where('code_isin=?',$isin); + $result = $bourseM->fetchAll($sql); + + //Insert + if ($result->count()==0) { + + $data = array_merge($data, array( + 'dateInsert' => date('YmdHis'), + )); + + try { + $id = $bourseM->insert($data); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + //Update + else { + + try { + $id = $bourseM->update($data, array('code_isin = ? ' => $isin)); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient!=1) { + throw new SoapFault('ERR', "Application error"); + } else { + throw new SoapFault('ERR', $e->getMessage()); + } + } + + } + + return $id; + } + + /** + * Informations boursières pour la saisie + * @param string $isin + * @throws SoapFault + * @return string + */ + public function getBourse($isin) + { + $this->authenticate(); + + if (strlen($isin)>12) { + throw new SoapFault('ERR', 'Code Isin incorrect.'); + } + + $bourseM = new Application_Model_Sdv1BourseIsin(); + $sql = $bourseM->select()->where('code_isin=?', $isin); + $result = $bourseM->fetchRow($sql); + if ( $result===null ) { + throw new SoapFault('MSG', 'Aucun résultat'); + } + + return json_encode($result->toArray()); + } + + /** + * LienRef Fusion or Move LienRef + * @param string $action fusion|moveact|movepar + * @param int $idLien + * Identifiant du lien entre idPar et idAct + * @param int $id + * Identifiant à affecter (idPar ou idAct) + * @throws SoapFault + * @return boolean + */ + public function setLienChange($action, $idLien, $id) + { + $this->authenticate(); + + if (empty($action)) { + throw new SoapFault('ERR', "action"); + } + + $lienM = new Application_Model_JoLiens(); + + //Fusion : + if ($action=='fusion') + { + //Ecraser les actionnaires avec l'ancien id + $lienM->update( + array('idAct'=>$idLien, 'idUpdate'=>$this->User->id), + 'idAct='.$id); + //Ecraser les participations avec l'ancien id + $lienM->update( + array('idPar'=>$idLien, 'idUpdate'=>$this->User->id), + 'idPar='.$id); + + //Supprimer la fiche + $lienrefM = new Application_Model_JoLiensRef(); + $lienM->update( + array('dateSuppr'=>date('Ymd'), 'idSuppr'=>$this->User->id), + 'id='.$id); + + return true; + + } + //Move actionnaire to a new parent + elseif ($action=='moveact') + { + try { + $result = $lienM->update(array('idPar'=>$id, 'idUpdate'=>$this->User->id), + 'id='.$idLien); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + if ($result) return true; + } + //Move participation to a new parent + elseif ($action=='movepar') + { + try { + $result = $lienM->update(array('idAct'=>$id, 'idUpdate'=>$this->User->id), + 'id='.$idLien); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ($result) return true; + } + //Move active participations if TUP and Fusion selected + elseif ($action=='tupfusion') + { + try { + $result = $lienM->update(array('idAct'=>$id, 'idUpdate'=>$this->User->id), + "idAct=$idLien AND actif=1 AND dateSuppr='0000-00-00 00:00:00'"); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ($result) return true; + } + + return false; + } + + /** + * Position cut-off pour le calcul des scores + * @param string $infos + * json_encode array with this values + * siren + * encours + * scoreSolv + * scoreDir + * scoreConf + * remarque + * paiement + * @param boolean $delete + * @throws SoapFault + * @return int + */ + public function setScoreCutoff($infos, $delete = false) + { + $this->authenticate(); + + if (null === $delete) { + $delete = false; + } + + $data = json_decode($infos, true); + + //if profil = score (20), use this table to convert + if ( $this->User->typeScore==20 ) { + $convert20to100 = array( + 0 => 0, + 1 => 19, + 2 => 29, + 3 => 34, + 4 => 35, + 5 => 38, + 6 => 40, + 7 => 44, + 8 => 45, + 9 => 49, + 10 => 50, + 11 => 54, + 12 => 56, + 13 => 59, + 14 => 61, + 15 => 64, + 16 => 68, + 17 => 72, + 18 => 79, + 19 => 80, + 20 => 90, + ); + $data['scoreSolv'] = $convert20to100[$data['scoreSolv']]; + $data['scoreDir'] = $convert20to100[$data['scoreDir']]; + $data['scoreConf'] = $convert20to100[$data['scoreConf']]; + } + + $cutoffM = new Application_Model_JoScoresCutoff(); + $sql = $cutoffM->select()->where('siren=?', $data['siren']); + $row = $cutoffM->fetchRow($sql); + + //Historisation + if ( null !== $row ) { + $mvtM = new Application_Model_JoScoresCutoffMvt(); + $backupData = $row->toArray(); + unset($backupData['dateUpdate']); + $backupData = array_merge($backupData, array( + 'idMvt' => $this->User->id, + 'dateMvt'=>date('YmdHis') + )); + + try { + $mvtM->insert($backupData); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + $result = $cutoffM->delete('siren='.$data['siren']); + } + + if ( !$delete ) { + //Insertion + $data = array_merge($data, array( + 'idInsert' => $this->User->id, + 'dateInsert'=>date('YmdHis') + )); + try { + $result = $cutoffM->insert($data); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + + //Mise en surveillance + if ($result>0 && !empty($this->User->email)) { + $iInsee = new MInsee(); + $tabIdentite = $iInsee->getIdentiteLight($data['siren']); + $data = array( + 'source' => 'score', + 'login' => $this->User->login, + 'email' => $this->User->email, + 'siren' => $data['siren'], + 'nic' => 0, + 'ref' => 'CUTOFF', + 'encoursClient' => 0, + 'rs' => $tabIdentite['Nom'], + 'cp' => $tabIdentite['CP'], + 'ville' => $tabIdentite['Ville'], + 'dateAjout'=>date('Y-m-d'), + 'dateSuppr'=>0, + ); + $iDb = new WDB('jo'); + $iDb->insert('surveillances_site', $data); + } + } + + return $result; + } + + /** + * Get cutoff on a SIREN + * @param string $siren + * @return mixed + */ + public function getScoreCutoff($siren) + { + $this->authenticate(); + + $cutoffM = new Application_Model_JoScoresCutoff(); + $sql = $cutoffM->select()->where('siren=?', $siren); + $row = $cutoffM->fetchRow($sql); + $result = false; + if ( null !== $row ) { + $scoreSolv = intval($row->scoreSolv); + $scoreDir = intval($row->scoreDir); + $scoreConf = intval($row->scoreConf); + if ( $this->User->typeScore==20 ) { + $convert100to20 = array( + 0 => 0, + 19 => 1, + 29 => 2, + 34 => 3, + 35 => 4, + 38 => 5, + 40 => 6, + 44 => 7, + 45 => 8, + 49 => 9, + 50 => 10, + 54 => 11, + 56 => 12, + 59 => 13, + 61 => 14, + 64 => 15, + 68 => 16, + 72 => 17, + 79 => 18, + 80 => 19, + 90 => 20, + ); + $scoreSolv = $convert100to20[$scoreSolv]; + $scoreDir = $convert100to20[$scoreDir]; + $scoreConf = $convert100to20[$scoreConf]; + } + $result = json_encode(array( + 'siren' => $row->siren, + 'encours' => $row->encours, + 'scoreSolv' => $scoreSolv, + 'scoreDir' => $scoreDir, + 'scoreConf' => $scoreConf, + 'remarque' => $row->remarque, + 'paiement' => $row->paiement, + 'dateInsert' => $row->dateInsert, + 'dateUpdate' => $row->dateUpdate, + )); + } + + return $result; + } + + /** + * Ajouter, modifier, supprimer le dirigeant opérationnel + * @param string $infos + * @param string $mode + * @param int $id + * @return mixed + */ + public function setDirigeantsOp($infos, $mode, $id) + { + $this->authenticate(); + + $dirOp = new Application_Model_Sdv1DirigeantsOp(); + + $checkDel = ' AND dateSuppr="0000-00-00 00:00:00.000000"'; + $where = "id=$id".$checkDel; + $userId = $this->User->id; + $dataRef = json_decode($infos, true); + + $tabRet=array( + 'siren' => $dataRef['siren'], + 'nic' => $dataRef['nic'], + 'civ' => $dataRef['civilite'], + 'nom' => strtoupper($dataRef['nom']), + 'prenom' => ucfirst(strtolower($dataRef['prenom'])), + 'nom_usage' => $dataRef['nom_usage'], + 'dateNais' => $dataRef['dateNais'], + 'lieuNais' => $dataRef['lieuNais'], + 'codFct' => $dataRef['codFct'], + 'tel' => $dataRef['tel'], + 'fax' => $dataRef['fax'], + 'email' => $dataRef['email'], + ); + + switch($mode) { + case 'add': + $tabRet['dateInsert'] = date('Y-m-d H:i:s'); + $tabRet['idInsert'] = $userId; + try { + $result = $dirOp->insert($tabRet); + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + return $result; + + case 'edit': + $tabRet['idUpdate'] = $userId; + try { + $result = $dirOp->update($tabRet, $where); + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + return $result; + + case 'del': + $tabRet = array( + 'dateSuppr' => date('Y-m-d H:i:s'), + 'idSuppr' => $userId + ); + try { + $result = $dirOp->update($tabRet, $where); + } catch (Zend_Exception $e) { + throw new SoapFault('ERR', $e->getMessage()); + } + return $result; + } + return false; + } + + /** + * Set geocode from web application + * @param string $companyId + * @param string $type + * @param string $data + * JSON string containing formatted data + * source, lat, lng, alt, address, precis + * @param string $override + * @throws SoapFault + * @return int + */ + public function setGeoCode($companyId, $type = null, $data, $override = false) + { + $this->authenticate(); + $siren = null; + + // --- Identifiant SD : source + id + if ($type === null) { + + } + // --- Siren + elseif (strtolower($type) == 'siren') { + if (strlen($companyId) != 14) { + throw new SoapFault('ERR', 'SIRET invalide.'); + } + } + // Erreur + else { + throw new SoapFault('ERR', 'Type identifiant inconnu.'); + } + + // --- Lecture de l'adresse + try { + $etablissementM = new Application_Model_JoEtablissements(); + $sql = $etablissementM->select(true)->columns(array( + 'LPAD(adr_num,4,0) AS adr_num', + 'adr_btq', + 'adr_typeVoie', + 'adr_libVoie', + 'adr_comp', + 'LPAD(adr_cp,5,0) AS adr_cp', + 'adr_ville' + ))->where('siren=?', substr($companyId, 0, 9))->where('nic=?', substr($companyId, 9, 5)); + $result = $etablissementM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ($result === null) { + return 0; + } + + // --- Result from database + $AdresseNum = $result->adr_num; + $AdresseTypeVoie = $result->adr_typeVoie; + $AdresseLibVoie = $result->adr_libVoie; + $AdresseCP = $result->adr_cp; + $AdresseVille = $result->adr_ville; + + $insee = new MInsee(); + $AdresseTypeVoieLong = $insee->getCodeVoie($AdresseTypeVoie); + + // --- Format adress + $adressPrimary = trim(preg_replace('/ +/',' ', "$AdresseNum $AdresseTypeVoieLong $AdresseLibVoie")); + + // --- Code Rivoli + $codeRivoli = ''; + try { + $inseeidentiteM = new Application_Model_InseeIdentite(); + $sql = $inseeidentiteM->select(true) + ->columns(array('ADR_DEP', 'LPAD(ADR_COM,3,0) AS ADR_COM', 'CODEVOIE', 'ADR_TYPVOIE', 'ADR_LIBVOIE')) + ->where('SIREN=?', substr($companyId, 0, 9)) + ->where('NIC=?', substr($companyId, 9, 5)); + $result = $inseeidentiteM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ($result !== null) { + if (empty($result->CODEVOIE)) { + $codeRivoli = $insee->getCodeVoieRivoli( + $result->ADR_DEP.$result->ADR_COM, + empty($result->ADR_TYPEVOIE) ? '' : $result->ADR_TYPEVOIE, + empty($result->ADR_LIBVOIE) ? '' : $result->ADR_LIBVOIE + ); + } else { + $codeRivoli = $result->ADR_DEP.$result->ADR_COM.$result->CODEVOIE; + } + } + + // --- Prepare geocoding + try { + $zonageM = new Application_Model_JoZonageXY(); + $sql = $zonageM->select() + ->where('address=?', $adressPrimary) + ->where('adr_cp=?', $AdresseCP) + ->where('adr_ville=?', $AdresseVille); + $result = $zonageM->fetchRow($sql); + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + if ($result === null) { + $tableModif = 'insert'; + } else { + $tableModif = 'update'; + } + + $output = 0; + $data = json_decode($data); + if (!empty($data->lat) && !empty($data->lng)) { + if ( strtolower($data->source) == 'google' ) { + $precision = 0; + switch($data->precis) { + /** + * Precise geocode for which we have location information accurate down to street address precision. + */ + case 'ROOFTOP': + $precision = 8; + break; + /** + * Approximation (usually on a road) interpolated between two precise points (such as intersections). + * Interpolated results are generally returned when rooftop geocodes are unavailable for a street address. + */ + case 'RANGE_INTERPOLATED': + $precision = 7; + break; + /** + * Geometric center of a result such as a polyline (for example, a street) or polygon (region). + */ + case 'GEOMETRIC_CENTER': + $precision = 6; + break; + /** + * indicates that the returned result is approximate. + */ + case 'APPROXIMATE': + $precision = 4; + break; + } + + require_once 'Metier/partenaires/classMMap.php'; + $lambert = geos2lambert93($data->lat, $data->lng); + $dataGeocode = array( + 'address' => $adressPrimary, + 'adr_cp' => $AdresseCP, + 'adr_ville' => $AdresseVille, + 'adrNum' => $AdresseNum, + 'adrIndRep' => '', + 'adrTypeVoie' => $AdresseTypeVoie, + 'adrLibVoie' => $AdresseLibVoie, + 'rivoli' => $codeRivoli, + 'adresseValidee' => $data->address, + 'lat' => $data->lat, + 'lon' => $data->lng, + 'l93_x' => $lambert['x_93'], + 'l93_y' => $lambert['y_93'], + 'alt' => intval($data->alt), + 'precis' => $precision, + 'source' => 'Google', + ); + } + + try { + if ($tableModif == 'insert') { + $dataGeocode['dateInsert'] = date('YmdHis'); + $output = $zonageM->insert($dataGeocode); + } else { + $output = $zonageM->update($dataGeocode, array('address=?'=>$adressPrimary)); + } + } catch (Zend_Db_Exception $e) { + if ($this->User->idClient==1) { + throw new SoapFault('ERR', $e->getMessage()); + } else { + throw new SoapFault('ERR', "Application error"); + } + } + } + + return $output; + } + +} \ No newline at end of file