diff --git a/Metier/Insee/MInsee.php b/Metier/Insee/MInsee.php new file mode 100644 index 0000000..b23758e --- /dev/null +++ b/Metier/Insee/MInsee.php @@ -0,0 +1,8156 @@ +conn = Zend_Registry::get('doctrine'); + $this->iBodacc = new Metier_Bodacc_MBodacc(); + + if (Zend_Registry::isRegistered('logger')) { + $this->logger = Zend_Registry::get('logger'); + } + } + + /** + * Défini une date limite de prise en compte des événements + * @param string $date AAAAMMJJ + */ + public function setEvenLimit($date) + { + $this->companyEvenDateStop = $date; + } + + /** + * Test de la validité du siren demandé + * @param int SIREN à tester + * @param int NIC (facultatif) + * @param mixed Message textuel d'erreur à afficher en cas d'erreur ou false + * @return mixed true, false ou Message d'erreur passé en paramètre + */ + public function valideSiren($siren, $nic='', $erreur=false) + { + $siren = str_pad($siren, 9, '0', STR_PAD_LEFT); + if (!empty($nic)) { + $nic = str_pad($nic, 5, '0', STR_PAD_LEFT); + } + //Siren non précisé ou incorrect. + if (!Metier_Util_String::valideData($siren, 9, 9, 'N')) { + return $erreur; + } + // Siren vide + elseif (intval($siren) == 0) { + return $erreur; + } else { + if (!isset($nic) || trim($nic)=='') { + $somme = 0; + // Traitement IMPAIR + for ($i=0; $i<=8; $i+=2) { + $somme+= (integer) substr($siren, $i, 1); + } + // Traitement PAIR + for ($i=1; $i<=7; $i+=2) { + $var_tmp = (string) (2*((integer)substr($siren, $i, 1))); + $som_tmp = 0; + for ($j=0; $jvalideSiren($siren)) { + return -1; + } + // Nic de format incorrect. + elseif (!Metier_Util_String::valideData($numEtab, 1, 4, 'N')) { + return -1; + } else { + for ($cle = 0; $cle < 10; $cle++) { + if ($this->valideSiren($siren, ''.$nic.''.$cle)) { + return $cle; + } + } + } + + return -1; + } + + /** + * Vérifie si le n° de département est un département français valide + * @param int Numéro de département Français + * @return bool + */ + public function isDepartement($dept) + { + return array_key_exists($dept, self::$tabDep); + } + + /** + * Retourne le libellé du département si département français valide + * @param int Numéro de département Français + * @return string Libellé département + */ + public function getDepartement($dept, $article=false) + { + if ($article) { + return self::$tabDepArt[$dept]; + } + + return self::$tabDep[$dept]; + } + + /** + * Effectif moyen + * @param string $trancheEffectif + * @return number + */ + public function getEffectifMoyen($trancheEffectif) + { + $trancheEffectif = $trancheEffectif*1; + if ($trancheEffectif == 0) { + return 0; + } elseif ($trancheEffectif == 53) { + return 10000; + } else { + $libEffectif = self::$tabEffectif[$trancheEffectif]; + $tabTmp = explode('à', $libEffectif); + $eff_min = trim(str_replace(' ', '', $tabTmp[0])); + $tabTmp = explode('salari', $tabTmp[1]); + $eff_max = trim(str_replace(' ', '', $tabTmp[0])); + return floor(($eff_min+$eff_max)/2); + } + } + + /** + * Retourne le code forme juridique d'une entreprise. + * @param int Numéro de SIREN (9 chiffres) ou SIRET (14 chiffres) + * @return string Forme Juridique sur 4 caractères ou falseen cas d'erreur ou si inexistant + */ + public function getFJInsee($siren_siret) + { + $len = strlen($siren_siret); + if ($len == 9) { + $siren = $siren_siret; + } elseif ($len == 14) { + $siren = $siren_siret; + } else { + return false; + } + + try { + $stmt = $this->conn->prepare('SELECT CJ FROM insee.identite WHERE SIREN=:siren'); + $stmt->bindValue('siren', $siren); + $stmt->execute(); + return $stmt->fetch(\PDO::FETCH_ASSOC); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return false; + } + + /** + * Recherche Etablissements + * + * @param string $raisonSociale + * @param string $adresse + * @param string $codePostal + * @param string $ville + * @param string $siege + * @param int $actif + * @param int $deb + * @param int $nbRep + * @param int $maxRep + * @param string $pertinence + * @param bool $uniquementAvecSiren + * @param string $ape_etab + * @param int $fj + * @return array + */ + public function rechercheEtab($raisonSociale, $adresse='', $codePostal='', $ville='', $siege='', $actif=2, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false, $uniquementAvecSiren='', $ape_etab='', $fj=null) + { + $tabAdr = $this->structureVoie(strtoupper($adresse)); + $numAdresse = preg_replace('/^0+/', '', ''.$tabAdr['num']*1); + $adresse = Metier_Util_String::trimAccent($tabAdr['libVoie']); + $formR = array( + 'type' => 'ent', + 'siret' => '', + 'raisonSociale' => $raisonSociale, + 'numVoie' => $numAdresse, + 'voie' => $adresse, + 'cpVille' => $codePostal.' '.$ville, + 'actif' => $actif, + 'siege' => $siege, + 'fj' => $fj, + ); + if ($ape_etab != '') { + $formR['naf'] = $ape_etab; + } + + require_once 'Metier/sphinx/rechercheFonc.php'; + if ($uniquementAvecSiren == '') { + $result = rechercheEnt($formR, $deb, $nbRep, $maxRep); + } else { + $result = rechercheEnt($formR, $deb, $nbRep, $maxRep, $uniquementAvecSiren); + } + + return $result; + } + + /** + * Recherche dirigeant + * @param string $nom + * @param string $prenom + * @param string $fonction + * @param string $dateNaiss + * @param string $villeNaiss + * @param number $deb + * @param integer $nbRep + * @param integer $maxRep + * @param string $pertinence + * @return array + */ + public function rechercheDir($nom, $prenom='', $fonction='', $dateNaiss='', $villeNaiss='', $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) + { + if ($this->logger !== null) { + $this->logger->info("rechercheDir de $nom, $prenom, $fonction, $dateNaiss, $villeNaiss (Max Rep=$nbRep)"); + } + $jour = $mois = $annee = ''; + if ($dateNaiss != '' && $dateNaiss != '//' && $dateNaiss != '0/0/0') { + $tabDateNaiss = explode('/', $dateNaiss); + $jour = $tabDateNaiss[0]*1; + if ($jour < 1 || $jour > 31) { + $jour = ''; + } + + $mois = $tabDateNaiss[1]*1; + if ($mois < 1 || $mois > 12) { + $mois = ''; + } + + $annee = $tabDateNaiss[2]*1; + if ($annee > 0 && $annee < 100) { + $annee = ('19'.$annee)*1; + } + if ($annee < 1800 || $annee > date('Y')*1) { + $annee = ''; + } + } + $formR = array( + 'type' => 'dir', + 'nom' => $nom, + 'prenom' => $prenom, + 'dirDateNaissAAAA' => $annee, + 'dirDateNaissMM' => $mois, + 'dirDateNaissJJ' => $jour, + // 'departement' => 'D', + 'cpVille' => $villeNaiss, + ); + + $result = array(); + require_once 'Metier/sphinx/rechercheFonc.php'; + $result = rechercheDir($formR, $deb, $nbRep, $maxRep); + + return $result; + } + + /** + * Vérifie si le code voie est une abréviation autorisée (selon la Norme AFNOR XP Z 10-011) + * @param string $codeVoie + * @return boolean + */ + public function isCodeVoie($codeVoie) + { + return array_key_exists($codeVoie, $this->tabCodeVoie); + } + + /** + * Retourne le libellé du code voie selon les abréviations autorisées pour les types de voie (Norme AFNOR XP Z 10-011) + * @param string Code voie + * @return string Libellé de la voie + */ + public function getCodeVoie($codeVoie) + { + return $this->tabCodeVoie[$codeVoie]; + } + + /** + * Initialise la table des codes NAF 4 et 5 positions + */ + protected function setTabCodesNaf() + { + if (count($this->tabCodesNaf)==0) { + $cacheNaf = dirname(__FILE__) . '/../Table/CodesNaf.php'; + $cacheNace = dirname(__FILE__) . '/../Table/CodesNace.php'; + if (file_exists($cacheNaf)) { + $this->tabCodesNaf = include $cacheNaf; + $this->tabCodesNace = include $cacheNace; + } else { + $tabNafs = $tabNace = array(); + $stmt = $this->conn->executeQuery("SELECT codNaf700 AS naf, libNaf700 AS LibNaf FROM jo.tabNaf4"); + while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) { + $tabNafs[$row->naf] = $row->LibNaf; + } + $stmt = $this->conn->executeQuery("SELECT codNaf5 AS naf, libNaf5 AS LibNaf, codNaf1 FROM jo.tabNaf5"); + while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) { + $tabNafs[$row->naf] = $row->LibNaf; + $tabNace[$row->naf] = $row->codNaf1.preg_replace('/^0/', '', substr($row->naf, 0, 4)); + } + $this->tabCodesNaf = $tabNafs; + $this->tabCodesNace = $tabNace; + } + } + } + + /** + * + * @param unknown $code_naf + * @return array + */ + public function getLibelleNaf($code_naf) + { + if ($code_naf == '') { + return ''; + } + + $this->setTabCodesNaf(); + + return $this->tabCodesNaf[$code_naf]; + } + + /** + * + * @return multitype: + */ + public function getCodesNaf() + { + $this->setTabCodesNaf(); + return array_keys($this->tabCodesNaf); + } + + /** + * Initialise la table des codes NAFA rev 2 + */ + protected function setTabCodesNafa() + { + if (count($this->tabCodesNafa)==0) { + $cache = dirname(__FILE__) . '/../Table/CodesNafa.php'; + if (file_exists($cache)) { + $this->tabCodesNafa = include $cache; + } else { + $tabNafs = array(); + try { + $stmt = $this->conn->executeQuery("SELECT codNafa AS nafa, libNafa FROM jo.tabNafa"); + while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) { + $result[$row->naf] = $row->libNafa; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + $this->tabCodesNafa = $result; + } + } + } + + /** + * Libelle Nafa + * @param unknown $code_nafa + * @return string|multitype: + */ + public function getLibelleNafa($code) + { + if ($code == '') { + return ''; + } + + $this->setTabCodesNafa(); + return $this->tabCodesNafa[$code]; + } + + /** + * Liste des événements + * @param string $siren + * @param string $nic + * @param integer $iDeb + * @param integer $iMax + * @return array + */ + public function getEvenements($siren, $nic = null, $iDeb = 0, $iMax = 1000) + { + $nic = intval($nic); + + $tabRet = array(); + + $sqlIdentifiant = "insSIREN=$siren"; + if (!empty($nic)) { + $sqlIdentifiant.= " AND insNIC=$nic "; + } + + if (empty($nic)) { + $tabSupId = $this->getEvenementsAssocId($siren); + if (count($tabSupId) > 0) { + $sqlIdentifiant.= " OR id IN(".join(',', $tabSupId).")"; + } + } + + $sql = "SELECT id, LPAD(insSIREN,9,0) as insSIREN, siretValide, LPAD(insNIC,5,0) as insNIC, + insLIBCOM, insSIEGE, insAUXILT, insORIGINE, insTEFET, insAPET700, insAPRM, insMODET, + insMARCHET, insSAISONAT, insACTIVNAT, insENSEIGNE, insL1_NOMEN, insL2_COMP, insL4_VOIE, + insL3_CADR, insNUMVOIE, insINDREP, insTYPVOIE, insLIBVOIE, insL5_DISP, insL6_POST, + insCODPOS, insL7_ETRG, insRPET, insDEPCOM, insCODEVOIE, insDREACTET, insEXPLET, insDAPET, + insLIEUACT, insACTISURF, insDEFET, insTEL, insCJ, insCIVILITE, insTEFEN, insAPEN700, + insMODEN, insMARCHEN, insNOMEN, insTYPCREH, insEVE, insDATEVE, insTRAN, insNICTRAN, + insMNICSIEGE, insMNOMEN, insMCJ, insMAPEN, insFiller1, insFiller2, insMMARCHEN, + insMORDIN, insEFENCENT, insSIGLE, insNBETEXPL, insNICSIEGE, insDEPCOMEN, + insFiller3, insMENSEIGNE, insMAPET, insMNATURE, insMADRESSE, insMEFET, insMSINGT, + insMTELT, insMMARCHET, insMAUXILT, insSINGT, insEFETCENT, insSIRETPS, insDESTINAT, + insDATEMAJ, idFlux, dirNom, dirNomUsage, dirPrenom, insDCRET, insDCREN, insPRODPART, + insSIRETASS, insDREACTEN, insEXPLEN, insFiller4, insDEFEN, insMONOREG, insREGIMP, + insMONOACT, insMSIGLE, insMEXPLEN, insRPEN, insMEXPLET, insTYPETAB, insDAPEN + FROM insee.insee_even WHERE $sqlIdentifiant ORDER BY insDATEMAJ DESC LIMIT $iDeb, $iMax"; + + try { + $stmt = $this->conn->executeQuery($sql); + while ($even = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $libDet = ''; + if ($even['insMNOMEN'] == 1) { + $libDet.= 'Modification de la raison sociale : '.$even['insNOMEN']; + $strPre = $this->getInfoPrecedente($siren, $even['insNIC'], $even['insDATEVE'], 'NOMEN'); + if ($strPre != '' && $strPre != $even['insNOMEN']) { + $libDet.=" (Précédent : $strPre)"; + } + $libDet.= ', '; + } + if ($even['insMENSEIGNE'] == 1) { + $libDet.= 'Modification de l\'enseigne : '.$even['insENSEIGNE']; + $strPre = $this->getInfoPrecedente($siren, $even['insNIC'], $even['insDATEVE'], 'ENSEIGNE'); + if ($strPre != '' && $strPre != $even['insENSEIGNE']) { + $libDet.= " (Précédent : $strPre)"; + } + $libDet.= ', '; + } + if ($even['insMSIGLE'] == 1) { + $libDet.= 'Modification du sigle : '.$even['insSIGLE']; + $strPre = $this->getInfoPrecedente($siren, $even['insNIC'], $even['insDATEVE'], 'SIGLE'); + if ($strPre != '' && $strPre != $even['insSIGLE']) { + $libDet.=" (Précédent : $strPre)"; + } + $libDet.= ', '; + } + if ($even['insMAPEN'] == 1) { + $libDet.= 'Modification de l\'activité de l\'entreprise : '.$even['insAPEN700'].' - '.$this->getLibelleNaf($even['insAPEN700']); + $strPre = $this->getInfoPrecedente($siren, $even['insNIC'], $even['insDATEVE'], 'APEN'); + if ($strPre != '' && $strPre != $even['insAPEN700']) { + $libDet.=" (Précédent : $strPre - ".$this->getLibelleNaf($strPre).')'; + } + $libDet.= ', '; + } + if ($even['insMAPET'] == 1) { + $libDet.= 'Modification de l\'activité de l\'établissement : '.$even['insAPET700'].' - '.$this->getLibelleNaf($even['insAPET700']); + $strPre = $this->getInfoPrecedente($siren, $even['insNIC'], $even['insDATEVE'], 'APET'); + if ($strPre != '' && $strPre != $even['insAPET700']) { + $libDet.=" (Précédent : $strPre - ".$this->getLibelleNaf($strPre).')'; + } + $libDet.= ', '; + } + if ($even['insMNICSIEGE'] == 1) { + $libDet.='Modification du nic du siège : '.$even['insNICSIEGE']; + $strPre = $this->getInfoPrecedente($siren, $even['insNIC'], $even['insDATEVE'], 'NIC'); + if ($strPre != '' && $strPre != $even['insNICSIEGE']) { + $libDet.=" (Précédent : $strPre)"; + } + $libDet.=', '; + } + if ($even['insMADRESSE'] == 1) { + $libDet.='Modification de l\'adresse : '.$even['insL2_COMP'].' '.$even['insL3_CADR'].' '.$even['insL4_VOIE'].' '.$even['insL5_DISP'].' '.$even['insL6_POST'].' '.$even['insL7_ETRG']; + $strPre = $this->getInfoPrecedente($siren, $even['insNIC'], $even['insDATEVE'], 'ADRESSE'); + if ($strPre != '' && $strPre != $even['insL2_COMP'].' '.$even['insL3_CADR'].' '. + $even['insL4_VOIE'].' '.$even['insL5_DISP'].' '.$even['insL6_POST'].' '.$even['insL7_ETRG']) { + $libDet.=" (Précédent : $strPre)"; + } + $libDet.=', '; + } + if ($even['insMEFET'] == 1) { + $libDet.= 'Modification de l\'effectif : '.$even['insEFENCENT'].' (Tranche '.$even['insTEFET'].'), '; + } + if ($even['insEXPLET'] == 'O') { + $strTmp = 'Exploitant'; + } elseif ($even['insEXPLET'] == 'N') { + $strTmp = 'Non exploitant participant au système productif'; + } elseif ($even['insEXPLET'] == 'X') { + $strTmp = 'Non exploitant ne participant pas au système productif'; + } + if ($even['insMEXPLET'] == 1) { + $libDet.= 'Modification du caractère exploitant de l\'établissement : '.$strTmp.', '; + } + if ($even['insEXPLEN'] == 'O') { + $strTmp = 'Exploitant'; + } elseif ($even['insEXPLEN'] == 'N') { + $strTmp = 'Non exploitant participant au système productif'; + } elseif ($even['insEXPLEN'] == 'X') { + $strTmp = 'Non exploitant ne participant pas au système productif'; + } + if ($even['insMEXPLEN'] == 1) { + $libDet.= 'Modification du caractère exploitant de l\'entreprise : '.$strTmp.', '; + } + if ($even['insMCJ'] == 1) { + $libDet.= 'Modification de la forme juridique : '.$even['insCJ'].' - '.$this->getLibelleFJ($even['insCJ']); + $strPre = $this->getInfoPrecedente($siren, $even['insNIC'], $even['insDATEVE'], 'CJ'); + if ($strPre != '' && $strPre != $even['insCJ']) { + $libDet.= " (Précédent : $strPre - ".$this->getLibelleFJ($even['insCJ']).')'; + } + $libDet.=', '; + } + if ($even['insAUXILT'] == 1) { + $strTmp = 'Auxiliaire'; + } else { + $strTmp = 'Non auxiliaire'; + } + if ($even['insMAUXILT'] == 1) { + $libDet.= 'Modification du caractère auxiliaire de l\'établissement : '.$strTmp.', '; + } + + if (trim($even['insDESTINAT']) != '' && $even['insDESTINAT'] != 'NR' && $even['insDESTINAT']*1 != 9) { + $libDet.= $this->tabDestinat['i'.trim($even['insDESTINAT'])].', '; + } + + $libDet.= $this->tabTypEtab['i'.trim($even['insTYPETAB'])].', '; + + $typeSiretAss = ''; + if ($even['insSIREN'] != $siren) { + if (substr($even['insSIRETASS'], 0, 9) == $siren) { + switch ($even['insPRODPART']*1) { + case 1: $typeSiretAss = 'Loueur de fond'; break; + case 2: $typeSiretAss = 'Locataire du fond'; break; + case 3: $typeSiretAss = 'Prestataire de personnel'; break; + } + + $dateEve = $even['insDATEVE']; + $dateMaj = $even['insDATEMAJ']; + if (str_replace('-', '', $dateEve*1) == 0) { + $dateEve = $dateMaj; + } + + $tabRet[] = array( + 'codeEven' => 'I'.$even['insEVE'], + 'nic' => substr($even['insSIRETASS'], 9, 5), + 'siretAssocie' => ''.$even['insSIREN'].$even['insNIC'], + 'typeSiretAss' => $typeSiretAss, + 'siege' => $even['insSIEGE'], + 'libEven' => "Modification d'une entreprise/établissement lié",//$tabEvenInsee['i'.trim($even['insEVE'])], + 'libEvenDet' => '',//substr($libDet,0,-3), + 'dateMAJ' => $dateMaj, + 'dateEven' => $dateEve, + ); + } + + if (substr($even['insSIRETPS'], 0, 9) == $siren) { + $typeSiretAss = 'Prédécesseur ou Successeur'; + $dateEve = $even['insDATEVE']; + $dateMaj = $even['insDATEMAJ']; + if (str_replace('-', '', $dateEve*1) == 0) { + $dateEve = $dateMaj; + } + + $tabRet[] = array( + 'codeEven' => 'I'.$even['insEVE'], + 'nic' => substr($even['insSIRETPS'], 9, 5), + 'siretAssocie' =>''.$even['insSIREN'].$even['insNIC'], + 'typeSiretAss' => $typeSiretAss, + 'siege' => $even['insSIEGE'], + 'libEven' => "Modification d'une entreprise/établissement lié",//$tabEvenInsee['i'.trim($even['insEVE'])], + 'libEvenDet' => '',//substr($libDet,0,-3), + 'dateMAJ' => $dateMaj, + 'dateEven' => $dateEve, + ); + } + } else { + switch (intval($even['insPRODPART'])) { + case 1: $typeSiretAss = 'Loueur de fond'; break; + case 2: $typeSiretAss = 'Locataire du fond'; break; + case 3: $typeSiretAss = 'Prestataire de personnel'; break; + } + + $siretAss = $even['insSIRETASS']; + if (intval($siretAss) == 0) { + $tabPS = array(); + $siretAss = $even['insSIRETPS']; + if ($siretAss*1 > 0) { + $tabPS = $this->getIdentiteLight(substr($siretAss, 0, 9)); + } + $tabEt = $this->getIdentiteLight($siren); + if ($tabPS['actif']==1 && $tabEt['actif']==0) { + $typeSiretAss = 'Successeur'; + } elseif ($tabPS['actif'] == 0 && $tabEt['actif'] == 1) { + $typeSiretAss = 'Prédécesseur'; + } else { + $typeSiretAss = 'Prédécesseur ou Successeur'; + } + } + + $dateEve = $even['insDATEVE']; + $dateMaj = $even['insDATEMAJ']; + if (str_replace('-', '', $dateEve*1) == 0) { + $dateEve = $dateMaj; + } + + $tabRet[] = array( + 'codeEven' => 'I'.$even['insEVE'], + 'nic' => $even['insNIC'], + 'siretAssocie' => $siretAss, + 'typeSiretAss' => $typeSiretAss, + 'siege' => $even['insSIEGE'], + 'libEven' => $this->tabEvenInsee['i'.trim($even['insEVE'])], + 'libEvenDet' => substr($libDet, 0, -2), + 'dateMAJ' => $dateMaj, + 'dateEven' => $dateEve, + ); + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return $tabRet; + } + + /** + * Compte le nombre d'événements + * @param string $siren + * @param string $nic + * @return integer + */ + public function getEvenementsCount($siren, $nic = null) + { + $nic = intval($nic); + + $tabRet = $tabId = array(); + + $sqlIdentifiant = "insSIREN=$siren"; + if (!empty($nic)) { + $sqlIdentifiant.= " AND insNIC=$nic"; + } + + if (empty($nic)) { + $tabSupId = $this->getEvenementsAssocId($siren); + if (count($tabSupId) > 0) { + $sqlIdentifiant.= " OR id IN(".join(',', $tabSupId).")"; + } + } + + $sql = "SELECT count(*) AS nb FROM insee.insee_even WHERE $sqlIdentifiant ORDER BY insDATEMAJ DESC"; + try { + $stmt = $this->conn->executeQuery($sql); + $result = $stmt->fetch(\PDO::FETCH_OBJ); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + return $result->nb; + } + + /** + * Recherche les identifiants des événements INSEE associés + * @param string $siren + * @return array + */ + protected function getEvenementsAssocId($siren) + { + $tabSupId = array(); + + if ($this->tabAssocId === null) { + $siretDeb = $siren.'00000'; + $siretFin = $siren.'99999'; + + // Recherche d'évènement pour lesquels le SIREN est ASSOCIE + try { + $stmt = $this->conn->executeQuery("SELECT id FROM insee.insee_even + WHERE insSIREN != $siren AND insSIRETASS BETWEEN $siretDeb AND $siretFin + GROUP BY insSIREN, ROUND(insSIRETASS/100000) ORDER BY insDATEMAJ DESC"); + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) { + $tabSupId[] = $row->id; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + // Recherche d'évènement pour lesquels le SIREN est Prédécesseur ou Successeur + try { + $stmt = $this->conn->executeQuery("SELECT id FROM insee.insee_even + WHERE insSIREN != $siren AND insSIRETASS BETWEEN $siretDeb AND $siretFin + GROUP BY insSIREN, ROUND(insSIRETPS/100000) ORDER BY insDATEMAJ DESC"); + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) { + $tabSupId[] = $row->id; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + $this->tabAssocId = $tabSupId; + } else { + $tabSupId = $this->tabAssocId; + } + + return $tabSupId; + } + + + /** + * Libelle FJ + * @param string $code_forme_juridique + * @param string $court + * @return string|unknown + */ + public function getLibelleFJ($code_forme_juridique, $court=false) + { + $fj = $code_forme_juridique * 1; + if ($fj > 0 && $fj < 10000) { + try { + $stmt = $this->conn->prepare("SELECT libelle AS LibFJ, libelleCourt AS LibCourt FROM jo.tabFJur WHERE code = :fj"); + $stmt->bindValue('fj', $fj); + $stmt->execute(); + $result = $stmt->fetch(\PDO::FETCH_OBJ); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + $libLong = $result->LibFJ; + $libCourt = $result->LibCourt; + if ($court) { + if ($libCourt == '') { + if (strlen($libLong) > 20) { + return substr($libLong, 0, 17).'...'; + } else { + return $libLong; + } + } + + return $libCourt; + } else { + return $libLong; + } + } + + if ($court) { + return "En chiffrement"; + } + + return 'En instance de chiffrement'; + } + + /** + * Codes FJ + * @return array + */ + public function getCodesFJ() + { + $tabFJ = array(); + $cache = dirname(__FILE__) . '/../Table/CodesFJ.php'; + if (file_exists($cache)) { + $result = include $cache; + } else { + try { + $stmt = $this->conn->executeQuery("SELECT code AS FJ, libelle AS libFJ FROM jo.tabFJur WHERE code >= 1000"); + while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) { + $result[$row->FJ] = str_replace('"', '\"', $row->LibFJ); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + return array_keys($result); + } + + /** + * Découpe une ligne d'adresse textuelle en un tableau contenant les différentes composantes de l'adresse + *
Array (
+     *      [adrComp0] => Maison des associations
+     *      [num]      => 33
+     *      [typeVoie] => R
+     *      [libVoie]  => Louis Blanc
+     *      [cp]		=> ...
+     *      [ville]	=> ... Si contenu dans l'adresse
+     * )
+ * + * @param string $strLigneDAdresse La ligne d'adresse textuelle (ex : Maison des associations, 33 rue Louis Blanc + * @return array tableau contenant l'adresse structurée ici + */ + public function structureVoie($strLigneDAdresse) + { + $tabRet = $tabAdr = array(); + $strLigneDAdresse = trim($strLigneDAdresse); + if ($strLigneDAdresse == '') { + return $tabRet; + } + $tabLignes = explode(',', preg_replace('/,$/', '', $strLigneDAdresse)); + foreach ($tabLignes as $strLigneDAdresse) { + $strLigneDAdresse = Metier_Util_String::trimAccent($strLigneDAdresse); + $strLigneDAdresse = preg_replace('/[^0-9a-zA-Z]/', ' ', $strLigneDAdresse); + $strLigneDAdresse = trim(preg_replace('/ +/', ' ', $strLigneDAdresse)); + //echo "1. Adresse nettoyées = $strLigneDAdresse".PHP_EOL; + $adrAvecCP = preg_match("/(.*)([0-9]{5,5}|[0-9][0-9] [0-9]{3,3})([\D]*)/", $strLigneDAdresse, $tabAdrTmp); + if ($adrAvecCP) { + //echo "Adresse avec Code Postal\n"; + //print_r($tabAdrTmp); + $strLigneDAdresse = trim($tabAdrTmp[1]); + $tabRet['cp'] = $tabAdrTmp[2]; + $tabRet['ville'] = trim(strtoupper($tabAdrTmp[3])); + }// else echo "Adresse sans Code Postal\n"; + $adrAvecNum=preg_match("/^([0-9]{1,4})(.*)/", $strLigneDAdresse, $tabAdrTmp); + if ($adrAvecNum) { + //echo "Adresse avec Numéro de voie\n"; + //print_r($tabAdrTmp); + $tabRet['num'] = $tabAdrTmp[1]; + if (preg_match("/^\s(B|BIS|T|TER|Q|a|c|d|e|f|g|h|i|j|k|l|m|n|o|p|s)\s(.*)/i", $tabAdrTmp[2], $tabAdrTmp2)) { //echo "Adresse avec Bis, Ter, Q...\n"; + //print_r($tabAdrTmp2); + $tabRet['indRep'] = strtoupper(trim($tabAdrTmp2[1])); + $typeVoie = trim($tabAdrTmp2[2]); + } else { + $typeVoie = trim($tabAdrTmp[2]); + } + } else { + $typeVoie = trim($strLigneDAdresse); + } + // On récupère le type de voie si possible et le libellé de la voie + $voieTrouvee = false; + foreach ($this->tabCodeVoie as $code => $voie) { + if (preg_match("/^($voie |$voie".'s '."|$code )(.*)/i", $typeVoie, $tabAdrTmp)) { + //echo "Adresse avec type de voie\n"; + //print_r($tabAdrTmp); + $tabRet['typeVoie'] = $code; + $tabRet['libVoie'] = trim(strtoupper($tabAdrTmp[2])); + $voieTrouvee = true; + break; + } + } + if (!$voieTrouvee) { + $tabAdr[] = $typeVoie; + } + } + foreach ($tabAdr as $k => $ligne) { + $tabRet['adrComp'.$k] = trim(strtoupper($ligne)); + } + + if (!isset($tabRet['libVoie'])) { + $tabRet['libVoie']=$ligne; + unset($tabRet['adrComp'.$k]); + } + + if (isset($tabRet['adrComp0'])) { + if ($tabRet['adrComp0'] == 'BIS' || $tabRet['adrComp0'] == 'B') { + $tabRet['indRep'] = 'B'; + $tabRet['adrComp0'] = ''; + } elseif ($tabRet['adrComp0'] == 'TER' || $tabRet['adrComp0'] == 'T') { + $tabRet['indRep'] = 'T'; + $tabRet['adrComp0'] = ''; + } + } + + return $tabRet; + } + + /** + * Liste des établissements par siren/nic + * @param string $siren + * @param string $nic + * @param int $deb + * @param int $nbRep + * @param int $maxRep + * @param int $dep + * @param int $actif + * @param int $siege + */ + public function getEtablissements($siren, $nic='', $deb=0, $nbRep=20, $maxRep=200, $dep=0, $actif=-1, $siege=null) + { + $this->setTabCodesNaf(); + $deb = $deb*1; + $dep = $dep*1; + $nbRep = $nbRep*1; + + $strInfo = ''; + + $fields = "'Etab' as Loc, e.id, e.source, e.source_id, e.triCode, e.autre_id, + LPAD(e.siren, 9, 0) AS siren, LPAD(e.nic, 5, 0) AS nic, e.siege, e.raisonSociale, + e.enseigne, e.sigle, LPAD(e.adr_num,4,0) AS adr_num, e.adr_btq, e.adr_typeVoie, e.adr_libVoie, + e.adr_comp, LPAD(e.adr_cp,5,0) AS adr_cp, e.adr_ville, e.adr_dep, LPAD(e.adr_com,3,0) AS adr_com, + LPAD(e.tel,10,0) AS tel, LPAD(e.fax,10,0) AS fax, e.cj, e.ape_etab, e.ape_entrep, e.teff_etab, + CONCAT(e.siren, e.nic) AS siret, e.actif, e.identite_pre, IF(e.siege=2,0.5,e.siege) AS triSiege, + IF (e.adr_dep=99, (SELECT libPays FROM jo.tabPays p WHERE p.codePaysInsee=e.adr_com LIMIT 0,1) , 'France') AS libPays"; + + $strActif = $strDep = ''; + if (intval($actif) == 1) { + $strActif = ' AND e.actif=1 '; + } elseif (intval($actif) == 0) { + $strActif = ' AND e.actif=0 '; + } + + $strSiege = ''; + if ($siege === null) { + $strSiege = ''; + } elseif ($siege == 1) { + $strSiege = 'AND e.siege=1 '; + } elseif ($siege == 0) { + $strSiege = 'AND e.siege IN(0,2) '; + } + + $listeEtab = array(); + + // --- Search with "departement" + if ($dep > 0 && $dep < 99999) { + if ($dep < 96) { + $strDep = 'AND adr_cp BETWEEN '.$dep.'000 AND '.$dep.'999'; + } elseif ($dep > 9999) { + $strDep = "AND adr_cp BETWEEN $dep AND $dep"; + } else { + $strDep = 'AND adr_cp BETWEEN '.$dep.'00 AND '.$dep.'99'; + } + $sqlWhere = "siren=$siren $strDep $strActif $strSiege"; + } + // --- Search without NIC + elseif ($nic == '') { + $sqlWhere = "e.siren=$siren $strActif $strSiege"; + } + // --- Search with NIC + else { + $sqlWhere = "siren=$siren AND (nic=$nic OR siege=1) $strActif $strSiege"; + } + + try { + $stmt = $this->conn->executeQuery("SELECT count(*) AS nb FROM jo.etablissements e WHERE $sqlWhere"); + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $nbTot = $result->nb; + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + $sqlOrder = "ORDER BY triSiege DESC, e.actif DESC, e.nic DESC"; + $sqlLimit = "LIMIT $deb, $nbRep"; + + // --- Vérification du SIREN + if ($nbTot == 0 && $actif == -1) { + require_once 'Metier/sphinx/rechercheFonc.php'; + $liste = verificationDuSiret($siren); + if ($liste != false) { + //print 'Essayez :
'; + $listeSiren=array(); + foreach ($liste as $s) { + if (sommeDeControle($s) != 0) { + //print 'erreur somme de controle sur '.$s.' ('.sommeDeControle($s).')
'; + } else { + $listeSiren[]=$s; + } + } + $strSiren = implode(',', $listeSiren); + + try { + $stmt = $this->conn->executeQuery("SELECT count(*) AS nb FROM jo.etablissements + WHERE siren IN ($strSiren) AND siege=1"); + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $nbTot = $result->nb; + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + $sql = "SELECT $fields FROM jo.etablissements e + WHERE siren IN ($strSiren) AND siege=1 + ORDER BY e.rang DESC, e.actif DESC, e.nic ASC $sqlLimit"; + $strInfo = 'Siren saisi invalide'; + } + } else { + $sql = "SELECT $fields FROM jo.etablissements e + WHERE $sqlWhere $sqlOrder $sqlLimit"; + } + + try { + $stmt = $this->conn->executeQuery($sql); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + // --- Affichage de la liste des établissements + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tel = sprintf('%010d', strtr($row['tel'], array('-'=>'', '/'=>'', '.'=>'', ','=>''))); + if ($tel != '0000000000') { + $tel = implode('.', str_split($tel, 2)); + } else { + $tel = ''; + } + + $fax = sprintf('%010d', strtr($row['fax'], array('-'=>'', '/'=>'', '.'=>'', ','=>''))); + if ($fax != '0000000000') { + $fax = implode('.', str_split($fax, 2)); + } else { + $fax = ''; + } + + // Cas des noms vides à l'INSEE (une centaine) + $nom = trim($row['raisonSociale']); + if ($nom == '') { + $nom = preg_replace('/,.*$/', '', $row['identite_pre']); + } + + $tabRet[] = array( + 'Localisation' => $row['Loc'], + 'id' => $row['id'], + 'Pertinence' => 100, + 'Source' => $row['source'], + 'SoruceId' => $row['source_id'], + 'Siret' => $row['siret'], + 'Siege' => $row['siege'], + 'Nom' => $nom, + 'Sigle' => $row['sigle'], + 'Enseigne' => $etab['enseigne'], + 'Adresse' => trim(preg_replace('/ +/', ' ', trim($row['adr_num'] .' '. + $row['adr_btq'] .' '. $row['adr_typeVoie'] .' '. $row['adr_libVoie']))), + 'Adresse2' => trim(preg_replace('/ +/', ' ', $row['adr_comp'])), + 'CP' => $row['adr_cp'], + 'Ville' => $row['adr_ville'], + 'Pays' => ($row['adr_dep'] != 99 ? $row['libPays'] : 'France'), + 'Tel' => $tel, + 'Fax' => $fax, + 'FJ' => $row['cj'], + 'FJLib' => $this->getLibelleFJ($row['cj']), + 'Siren' => $row['siren'], + 'Nic' => $row['nic'], + 'Actif' => $row['actif'], + 'NafEtab' => $row['ape_etab'], // Etablissement + 'NafEnt' => $row['ape_entrep'], // Entreprise + 'NafEtabLib' => $this->getLibelleNaf($row['ape_etab']), + 'NafEntLib' => $this->getLibelleNaf($row['ape_entrep']), + 'EffEtTr' => $row['teff_etab'], + 'EffEtTrLib' => self::$tabEffectif[$row['teff_etab']], + ); + } + } + + // Evite l'affichage d'un 0 inutile sur l'Extranet + if ($dep == 0) { + $dep = ''; + } + + return array( + 'criteres' => array( + 'autreId' => $id, + 'dep' => $dep, + ), + 'info' => $strInfo, + 'nbReponses' => count($tabRet), + 'nbReponsesTotal' => $nbTot, + 'reponses' => $tabRet + ); + } + + /** + * Liste des établissements par Identifiant TEL/AUTRE + * @param string $typeId + * @param string $id + * @param int $deb + * @param int $nbRep + * @param int $maxRep + * @param int $dep + * @param int $actif + * @return array + */ + public function getEtablissementsParId($typeId, $id, $deb=0, $nbRep=20, $maxRep=200, $dep=0, $actif=2) + { + $this->setTabCodesNaf(); + $deb = $deb*1; + $dep = $dep*1; + + $nbRep = $nbRep*1; + $limit = "LIMIT $deb, $nbRep"; + + $filtreActif = ''; + if ($actif == 1 || $actif == 0) { + $filtreActif = " AND WHERE actif=$actif"; + } + + $fields = "'Etab' as Loc, e.id, e.source, e.source_id, e.triCode, e.autre_id, + LPAD(e.siren, 9, 0) AS siren, LPAD(e.nic, 5, 0) AS nic, e.siege, e.raisonSociale, + e.enseigne, e.sigle, LPAD(e.adr_num,4,0) AS adr_num, e.adr_btq, e.adr_typeVoie, e.adr_libVoie, + e.adr_comp, LPAD(e.adr_cp,5,0) AS adr_cp, e.adr_ville, e.adr_dep, LPAD(e.adr_com,3,0) AS adr_com, + LPAD(e.tel,10,0) AS tel, LPAD(e.fax,10,0) AS fax, e.cj, e.ape_etab, e.ape_entrep, + CONCAT(e.siren, e.nic) AS siret, e.actif, + IF (e.adr_dep=99, (SELECT libPays FROM jo.tabPays p WHERE p.codePaysInsee=e.adr_com) , 'France') AS libPays"; + + if ($typeId == 'TEL') { + if ($this->logger !== null) { + $this->logger->info("Recherche par TEL de $id avec un maximum de $nbRep réponses"); + } + try { + $stmt = $this->conn->executeQuery("SELECT count(*) AS nb FROM jo.etablissements + WHERE TEL=$id OR FAX=$id $filtreActif"); + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $nbTot = $result->nb; + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + try { + $stmt = $this->conn->executeQuery("SELECT $fields FROM jo.etablissements e + WHERE TEL=$id OR FAX=$id $filtreActif + ORDER BY e.siege DESC, e.actif DESC $limit"); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } elseif ($typeId == 'AUTRE') { + /** Formatage des numéros de RC **/ + $tabId = array($id); + if (preg_match('/(\d*)(\D)(\d*)/', $id, $matches)) { + if (strlen($matches[1])<=2) { + // Années du type 54 ou 07 + if ($matches[1] > date('y')) { + $deb = '19'.$matches[1]; + } else { + $deb = '20'.$matches[1]; + } + } + // Années du type 1900 ou 2000 + else { + $deb = substr($matches[1], 2, 2); + } + $numero = $matches[3]*1; + for ($i=strlen($numero); $i<=7; $i++) { + $tabId[] = $matches[1].$matches[2].sprintf('%0'.$i.'s', $numero); + $tabId[] = $deb.$matches[2].sprintf('%0'.$i.'s', $numero); + } + } + $strId = implode("','", $tabId); + + /** Gestion du numéro de département ou CP **/ + $strDep =''; + if ($dep > 0 && $dep < 99999) { + if ($dep < 96) { + $strDep = 'AND adr_cp BETWEEN '.$dep.'000 AND '.$dep.'999'; + } elseif ($dep > 9999) { + $strDep = "AND adr_cp BETWEEN $dep AND $dep"; + } else { + $strDep = 'AND adr_cp BETWEEN '.$dep.'00 AND '.$dep.'99'; + } + } + + try { + $stmt = $this->conn->executeQuery("SELECT count(*) AS nb FROM jo.etablissements + WHERE autre_id IN ('$strId') $filtreActif $strDep"); + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $nbTot = $result->nb; + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + try { + $stmt = $this->conn->executeQuery("SELECT $fields FROM jo.etablissements e + WHERE autre_id IN ('$strId') $filtreActif $strDep + ORDER BY siege DESC $limit"); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRet[] = array( + 'Localisation' => $row['Loc'], + 'id' => $row['id'], + 'Pertinence' => 100, + 'Source' => $row['source'], + 'SourceId' => $row['source_id'], + 'Siret' => $row['siret'], + 'Siege' => $row['siege'], + 'Nom' => $row['raisonSociale'], + 'Sigle' => $row['sigle'], + 'Enseigne' => $row['enseigne'], + 'Adresse' => trim(preg_replace('/ +/', ' ', trim($row['adr_num'] .' '. + $row['adr_btq'] .' '. $row['adr_typeVoie'] .' '. $row['adr_libVoie']))), + 'Adresse2' => trim(preg_replace('/ +/', ' ', $row['adr_comp'])), + 'CP' => $row['adr_cp'], + 'Ville' => $row['adr_ville'], + 'Pays' => ($row['adr_dep'] != 99 ? $row['libPays'] : 'France'), + 'Tel' => $row['tel'], + 'Fax' => $row['fax'], + 'FJ' => $row['cj'], + 'FJLib' => $this->getLibelleFJ($row['cj']), + 'Siren' => $row['siren'], + 'Nic' => $row['nic'], + 'Actif' => $row['actif'], + 'NafEtab' => $row['ape_etab'], // Etablissement + 'NafEnt' => $row['ape_entrep'], // Entreprise + 'NafEtabLib' => $this->getLibelleNaf($row['ape_etab']), + 'NafEntLib' => $this->getLibelleNaf($row['ape_entrep']), + ); + } + } + + // Evite l'affichage d'un 0 inutile sur l'Extranet + if ($dep == 0) { + $dep = ''; + } + + return array( + 'criteres' => array( + 'autreId' => $id, + 'dep' => $dep, + ), + 'nbReponses' => count($tabRet), + 'nbReponsesTotal' => $nbTot, + 'reponses' => $tabRet + ); + } + + /** + * Retourne juste si un siren existe + * + * @param integer $siren + * @return bool + */ + public function sirenExiste($siren) + { + $siren = $siren*1; + try { + $stmt = $this->conn->executeQuery("SELECT id FROM jo.etablissements WHERE siren=$siren LIMIT 0,1"); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + if ($stmt->rowCount()) { + return true; + } + + return false; + } + + /** + * Retourne l'identité issue de la table établissements + * + * @param integer $siren + * @return bool + */ + public function getIdentiteLight($siren, $nic=0, $id=0) + { + $siren = $siren*1; + $nic = $nic*1; + $id = $id*1; + $limit = ''; //LIMIT O,1' ; + if ($id > 0 && $siren < 1000) { + $where = " id=$id "; + } elseif ($nic != 0) { + $where = " siren=$siren AND nic=$nic "; + } elseif ($siren != 0) { + $where=" siren=$siren "; + } else { + return array(); + } + + $tabRet = array(); + + try { + $stmt = $this->conn->executeQuery("SELECT e.id, e.source, e.source_id, e.autre_id, + LPAD(e.siren, 9, 0) as siren, LPAD(e.nic, 5, 0) as nic, e.siege, e.autre_id, e.triCode, + e.raisonSociale, e.enseigne, e.sigle, e.adr_num, e.adr_btq, e.adr_typeVoie, e.adr_libVoie, + e.adr_comp, LPAD(e.adr_cp,5,0) AS adr_cp, e.adr_ville, LPAD(e.tel,10,0) AS tel, + LPAD(e.fax,10,0) AS fax, e.cj, e.ape_etab, e.ape_entrep, e.adr_dep, + LPAD(e.adr_com,3,0) AS adr_com, e.capital, e.capitalDev, e.capitalSrc, e.tca, + e.teff_entrep, e.teff_etab, CONCAT(LPAD(e.siren,9,0), LPAD(e.nic,5,0)) as siret, + e.actif, e.identite_pre FROM jo.etablissements e + WHERE $where ORDER BY siege DESC, actif DESC, nic DESC $limit"); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($stmt->rowCount() > 0) { + $etab = $stmt->fetch(\PDO::FETCH_ASSOC); + $nom = trim($etab['raisonSociale']); + // Cas des noms vides à l'INSEE (une centaine) + if ($nom == '') { + $nom = preg_replace('/,.*$/', '', $etab['identite_pre']); + } + + $tabRet = array( + 'id' => $etab['id'], + 'Siret' => $etab['siret'], + 'Siege' => $etab['siege'], + 'Nom' => $nom, + 'Tribunal' => $etab['triCode'], + 'Sigle' => $etab['sigle'], + 'Enseigne' => $etab['enseigne'], + 'Adresse' => trim(preg_replace('/ +/', ' ', trim( + $etab['adr_num'] .' '. $etab['adr_btq'] .' '. + $etab['adr_typeVoie'] .' '. $etab['adr_libVoie']))), + 'Adresse2' => trim(preg_replace('/ +/', ' ', $etab['adr_comp'])), + 'AdresseNum' => $etab['adr_num'], + 'AdresseBtq' => $etab['adr_btq'], + 'AdresseVoie' => $etab['adr_typeVoie'], + 'AdresseRue' => $etab['adr_libVoie'], + 'CP' => $etab['adr_cp'], + 'Ville' => $etab['adr_ville'], + 'Tel' => $etab['tel'], + 'Fax' => $etab['fax'], + 'FJ' => $etab['cj'], + 'FJ_lib' => $this->getLibelleFJ($etab['cj']), + 'Siren' => $etab['siren'], + 'Nic' => $etab['nic'], + 'Actif' => $etab['actif'], + 'NafEtab' => $etab['ape_etab'], + 'NafEnt' => $etab['ape_entrep'], + 'NafEntLib' => $this->getLibelleNaf($etab['ape_entrep']), + 'NafEtabLib' => $this->getLibelleNaf($etab['ape_etab']), + 'AutreId' => $etab['autre_id'], + 'Source' => $etab['source'], + 'SourceId' => $etab['source_id'], + 'Dept' => $etab['adr_dep'], + 'codeCommune' => $etab['adr_com'], + 'Capital' => $etab['capital'], + 'CapitalDev' => $etab['capitalDev'], + 'TrancheCA' => $etab['tca'], + 'TrancheCALib' => self::$tabTCA[$etab['tca']], + 'EffEnTr' => $etab['teff_entrep'], + 'EffEnTrLib' => self::$tabEffectif[$etab['teff_entrep']], + 'EffEtTr' => $etab['teff_etab'], + 'EffEtTrLib' => self::$tabEffectif[$etab['teff_etab']], + ); + } + + return $tabRet; + } + + /** + * Retourne la liste des devise + * + * @param string $codeDevise Code ISO devise + * @return Devise ou liste des devises (si pas de code ISO en entrée) + */ + public function getDevises($codeIso = '') + { + $tabRet = array(); + if (trim($codeIso) != '') { + $strWhere = "devIso='$codeIso'"; + } else { + $strWhere = '1'; + } + try { + $stmt = $this->conn->executeQuery("SELECT devIso, devNom FROM jo.tabDevises WHERE $strWhere"); + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) { + $tabRet[$row->devIso] = $row->devNom; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return $tabRet; + } + + /** + * Retourne la liste des mandataires/administrateurs/oppositions d'une ou plusieurs cours d'appel + * + * @param array $arrIdCA Id S&D de la cour d'appel + * @param bool $condense Par défaut retourne un tableau concatenant Nom, prenom, adresse complète + * @param array $type Type d'opposition. Ex array('A','M') pour Admin/Mandataires. Autres: a'V'ocat,'H'uissier,'N'otaire + * @return Liste des Mandataires/Administrateurs de la cours d'appel + */ + public function getMandataires($arrIdCA=array(), $condense=true, $type=array()) + { + if (count($arrIdCA) > 0) { + $strIdCA = 'AND ( coursAppel in ('.implode(',', $arrIdCA).') OR coursAppel2 in ('.implode(',', $arrIdCA).') )'; + } else { + $strIdCA = ''; + } + + if (count($type) > 0) { + $strType = "AND type in ('".implode("','", $type)."') "; + } else { + $strType = ''; + } + + if (!$condense) { + $fields = 'id,sirenGrp,sirenMand,Nom,Prenom,type,tribunal,Statut,adresse,adresseComp,cp,ville,tel,fax,email,web,contact'; + } else { + $fields = "id, CONCAT(Nom,' ',Prenom,' ',adresse,' ',adresseComp,' ',cp,' ',ville) as Mand"; + } + try { + $stmt = $this->conn->executeQuery("SELECT $fields FROM jo.tabMandataires WHERE 1 $strIdCA $strType ORDER BY sirenGrp"); + if ($stmt->rowCount() > 0) { + if (!$condense) { + return $stmt->fetchAll(\PDO::FETCH_ASSOC); + } else { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRet[$row['id']] = preg_replace('/ +/', ' ', $row['Mand']); + } + return $tabRet; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return array(); + } + + /** + * Retourne la liste des mandataires/administrateurs/oppositions correspondant à un nom + * + * @param string $nom Nom du mandataire + * @param bool $condense Par défaut retourne un tableau concatenant Nom, prenom, adresse complète + * @param array $type Type d'opposition. Ex array('A','M') pour Admin/Mandataires. Autres: a'V'ocat,'H'uissier,'N'otaire + * @return Liste des Mandataires/Administrateurs de la cours d'appel + */ + public function searchMandataires($nom, $condense=true, $type=array(), $cpDep=0) + { + $strIdCA="AND (Nom LIKE '%$nom%' OR Prenom LIKE '%$nom%') "; + + if (count($type) > 0) { + $strType="AND type in ('".implode("','", $type)."') "; + } else { + $strType=''; + } + + if ($cpDep > 0 && $cpDep < 100) { + $strCp = "AND cp BETWEEN $cpDep"."000 AND $cpDep"."999 "; + } elseif ($cpDep > 99 && $cpDep < 1000) { + $strCp = "AND cp BETWEEN $cpDep"."00 AND $cpDep"."99 "; + } elseif ($cpDep > 999) { + $strCp = "AND cp=$cpDep "; + } else { + $strCp =''; + } + + if (!$condense) { + $fields = 'id,sirenGrp,sirenMand,Nom,Prenom,type,tribunal,Statut,adresse,adresseComp,cp,ville,tel,fax,email,web,contact'; + } else { + $fields = "id, CONCAT(Nom,' ',Prenom,' ',adresse,' ',adresseComp,' ',cp,' ',ville) as Mand"; + } + + try { + $stmt = $this->conn->executeQuery("SELECT $fields FROM jo.tabMandataires WHERE 1 $strIdCA $strType $strCp ORDER BY sirenGrp"); + if ($stmt->rowCount() > 0) { + if (!$condense) { + return $stmt->fetchAll(\PDO::FETCH_ASSOC); + } else { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRet[$row['id']] = preg_replace('/ +/', ' ', $row['Mand']); + } + return $tabRet; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return $tabRet; + } + + /** + * Récupère les informations du mandataire + * + * @param integer $idMand Identifiant SD du mandataire + * @return array + */ + public function getMandataire($idMand) + { + $fields = 'id,sirenGrp,sirenMand,Nom,Prenom,type,coursAppel,coursAppel2,tribunal,Statut,stagiaire,adresse,adresseComp,cp,ville,tel,fax,email,web,contact'; + try { + $stmt = $this->conn->executeQuery("SELECT $fields FROM jo.tabMandataires WHERE id=$idMand"); + if ($stmt->rowCount() > 0) { + return $stmt->fetch(\PDO::FETCH_ASSOC); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return array(); + } + + + public function getHuissiers($arrIdCA=array(), $condense=true) + { + if (count($arrIdCA)>0) { + $strIdCA = "AND tribunal in ('".implode("','", $arrIdCA)."')"; + } else { + $strIdCA = ''; + } + if (!$condense) { + $fields = 'id,sirenGrp,sirenMand,Nom,Prenom,type,tribunal,Statut,adresse,adresseComp,cp,ville,tel,fax,email,web,contact'; + } else { + $fields = "id, CONCAT(Nom,' ',Prenom,' ',adresse,' ',adresseComp,' ',cp,' ',ville) as Mand"; + } + + try { + $stmt = $this->conn->executeQuery("SELECT $fields FROM jo.tabMandataires WHERE 1 AND type='H' $strIdCA ORDER BY sirenGrp"); + if ($stmt->rowCount()) { + if (!$condense) { + return $stmt->fetchAll(\PDO::FETCH_ASSOC); + } else { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRet[$row['id']] = preg_replace('/ +/', ' ', $row['Mand']); + } + return $tabRet; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return $tabRet; + } + + /** + * Retourne l'identite Textuelle d'un mandataires/administrateurs + * + * @param integer $idMand Id S&d du mandataire + * @return string Mandataire + */ + public function getMandatairesParId($idMand) + { + if ($idMand > 0) { + try { + $stmt = $this->conn->executeQuery("SELECT CONCAT(Nom,' ',Prenom,' ',adresse,' ',adresseComp,' ',cp,' ',ville) as Mand + FROM jo.tabMandataires WHERE id=$idMand"); + if ($stmt->rowCount()) { + return $stmt->fetch(\PDO::FETCH_ASSOC); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + return ''; + } + + /** + * + * @param unknown $siren + * @param number $nic + * @param number $id + * @return boolean|Ambigous + */ + public function getNaf4($siren, $nic=0, $id=0) + { + $tabRet = array(); + $siren = $siren*1; + $nic = $nic*1; + $id = $id*1; + if ($siren == 0) { + return false; + } + if ($nic != 0) { + $where = "siren=$siren AND nic=$nic "; + } else { + $where = "siren=$siren AND siege=1 "; + } + + try { + $stmt = $this->conn->executeQuery("SELECT siren, nic, apen5, apen4, apet5, apet4 FROM insee.bascule WHERE $where"); + if ($stmt->rowCount() == 0) { + return false; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + $tabRet = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabRet['apen4_lib'] = $this->getLibelleNaf($tabRet['apen4']); + $tabRet['apet4_lib'] = $this->getLibelleNaf($tabRet['apet4']); + + return $tabRet; + } + + public function getIdentiteEntrepriseHisto($siren) + { + $notices = array( + // Date AAAAMMJJ => Nom table + 20080401 => 'notice_200804', + 20080501 => 'notice_200805stats', + 20081201 => 'notice_200812', + 20090901 => 'notice_200909', + 20091001 => 'notice_200910', + 20091201 => 'notice_200912', + 20100301 => 'notice_201003', + 20100601 => 'notice_201006', + 20100901 => 'notice_201009', + 20101201 => 'notice_201012', + 20110301 => 'notice_201103', + 20110601 => 'notice_201106', + 20110901 => 'notice_201109', + 20111201 => 'notice_201112', + 20120301 => 'notice_201203', + 20120601 => 'notice_201206', + 20120901 => 'notice_201209', + 20121201 => 'notice_201212', + 20131201 => 'fichier_france_entiere_201312_D_1', + 20140101 => 'fichier_france_entiere_201401_D_1', + 20140601 => 'fichier_france_entiere_201406_D_1', + 20140901 => 'fichier_france_entiere_201409_D_1', + 20141201 => 'fichier_france_entiere_201412_D_1', + 20150301 => 'fichier_france_entiere_201503_D_1', + ); + + $identite = array(); + + if ($this->companyEvenDateStop === null) { + $date = date('Ymd'); + } else { + $date = $this->companyEvenDateStop; + } + + $sql = "SELECT CONCAT(LPAD(e.insSIREN,9,0), LPAD(e.insNIC,5,0)) AS Siret, + LPAD(e.insSIREN,9,0) AS Siren, + LPAD(e.insNIC,5,0) AS Nic, + e.insSIEGE AS Siege, + e.insNOMEN AS Nom, + e.insCODPOS AS CP, + e.insCJ AS FJ, + e.insAPEN700 AS NafEnt, + e.insAPEN700 AS NafEtab, + e.insTEFEN AS EffEnTr, + e.insEFENCENT AS Effectif, + e.insDCRET AS DateCreaEt, + e.insDCREN AS DateCreaEn, + e.insEVE, + i.insRECME AS RECME + FROM insee.insee_even e + LEFT OUTER JOIN insee.insee_notices i ON (i.insSIREN=e.insSIREN AND i.insNIC=e.insNIC) + WHERE e.insSIREN=:siren AND idFlux<:date ORDER BY idFlux DESC, insSIEGE DESC LIMIT 0,1"; + try { + $stmt = $this->conn->prepare($sql); + $stmt->bindValue('siren', $siren); + $stmt->bindValue('date', $date); + $stmt->execute(); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($stmt->rowCount() > 0) { + $identite = $stmt->fetch(\PDO::FETCH_ASSOC); + } + // --- Recherche dans le stock + else { + $notices = array_reverse($notices, true); + foreach ($notices as $noticeDate => $notice) { + if ($date > $noticeDate) { + break; + } + } + + $sql = "SELECT CONCAT(LPAD(e.SIREN,9,0), LPAD(e.NIC,5,0)) AS Siret, + LPAD(e.SIREN,9,0) AS Siren, + LPAD(e.NIC,5,0) AS Nic, + e.SIEGE AS Siege, + e.NOMEN_LONG AS Nom, + e.CODPOS AS CP, + e.CJ AS FJ, + e.APEN700 AS NafEnt, + e.APEN700 AS NafEtab, + e.TEFEN AS EffEnTr, + e.EFENCENT AS Effectif, + e.DCRET AS DateCreaEt, + insDCREN AS DateCreaEn + i.insRECME AS RECME + FROM insee.$notice e + LEFT OUTER JOIN insee.insee_notices i ON (i.insSIREN=e.SIREN AND i.insNIC=e.NIC) + WHERE e.insSIREN=:siren AND idFlux<:date ORDER BY idFlux DESC, insSIEGE DESC LIMIT 0,1"; + try { + $stmt = $this->conn->prepare($sql); + $stmt->bindValue('siren', $siren); + $stmt->bindValue('date', $date); + $stmt->execute(); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($stmt->rowCount() > 0) { + $identite = $stmt->fetch(\PDO::FETCH_ASSOC); + } + } + if (count($identite) > 0) { + // --- Actif + $identite['Actif'] = 1; + if (array_key_exists('insEVE', $identite)) { + if (in_array($identite['insEVE'], array( + 'M0F', // Fermeture de l'entreprise + 'FF', // Fermeture de l'entreprise + '400', // Suppression d'un double + '410', // Cessation juridique de l'entreprise + '420', // Absence d'activité de l'entreprise (cessation économique de l'entreprise) + 'SC', // Suppression par le calage + 'SU', // Cessation juridique + 'SS', // Fermeture (ou désactivation) siège + 'RI', // Refus d'inscription du SIREN au RCS + ))) { + $identite['Actif'] = 0; + } + } + + // --- Capital + $sql = "SELECT valeur FROM jo.rncs_modifs + WHERE champs='capitalMontant' AND siren=:siren AND flux<:date + ORDER BY flux DESC LIMIT 0,1"; + try { + $stmt = $this->conn->prepare($sql); + $stmt->bindValue('siren', $siren); + $stmt->bindValue('date', $date); + $stmt->execute(); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + $identite['Capital'] = ''; + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $identite['Capital'] = $result->valeur; + } + + // --- Situation Juridique + $identite['SituationJuridique'] = ''; + $tabProcol = $this->getAnnoncesLegales($siren, 0, 'P', false); + if (count($tabProcol) > 0) { + $tabDates = array(); + foreach ($tabProcol as $iProcol => $procol) { + $tabDates[] = $procol['dateJugement']; + } + rsort($tabDates); + $dateProcol = str_replace('-', '', $tabDates[0])*1; + if ($this->dureePlan > 0 && date('Ymd') < $this->finPlan) { + $identite['SituationJuridique'] = 'PL'; + } + // Plan révolu + elseif ($this->dureePlan > 0 && date('Ymd') >= $this->finPlan) { + $identite['SituationJuridique'] = ''; + } + // Appel de jugement + elseif ($this->appelJugement) { + $identite['SituationJuridique'] = 'PA'; + } + // En cours de procédure + else { + $identite['SituationJuridique'] = 'P'; + } + } + // Absorption + elseif (count($this->getAnnoncesLegales($siren, 0, 'A', false)) > 0) { + $identite['SituationJuridique'] = 'A'; + } + // Dissolution + elseif (count($this->getAnnoncesLegales($siren, 0, 'D', false)) > 0) { + $identite['SituationJuridique'] = 'D'; + } + // Fin Situation Juridique + + return $identite; + } + + return false; + } + + /** + * + * @param string $siren + * @param int $nic + * @param int $id + * @param string $forceVerif + * @param string $accesDist + * @return array + */ + public function getIdentiteEntreprise($siren, $nic=0, $id=0, $forceVerif=false, $accesDist=true) + { + if ($this->debugtime) { + $timer = array('debutIdentite'=>microtime(true)); + $tdebIni = microtime(1); + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;getIdentiteEntreprise Début ---\n", FILE_APPEND); + } + + $siren = $siren*1; + $nic = $nic*1; + $id = $id*1; + $limit = ''; + + // Liste des établissements + if ($id > 0 && $siren < 1000) { + $where = " id=$id "; + } elseif ($nic != 0) { + $where = " siren=$siren AND nic=$nic "; + } elseif ($siren != 0) { + $where = " siren=$siren "; + } + try { + $stmt = $this->conn->executeQuery("SELECT e.id, e.source, e.source_id, e.triCode, e.autre_id, LPAD(e.siren,9,0) as siren, LPAD(e.nic,5,0) as nic, e.siege, e.autre_id, + e.raisonSociale, e.enseigne, e.sigle, LPAD(e.adr_num,4,0) AS adr_num, e.adr_btq, e.adr_typeVoie, e.adr_libVoie, + e.adr_comp, LPAD(e.adr_cp,5,0) AS adr_cp, e.adr_ville, LPAD(e.tel,10,0) AS tel, LPAD(e.fax,10,0) AS fax, e.cj, e.ape_etab, e.ape_entrep, + e.capital, e.capitalDev, e.capitalSrc, CONCAT(e.siren, e.nic) as siret, e.actif, + e.age_entrep, e.age_etab, e.tca, e.tcaexp, e.teff_entrep, e.teff_etab FROM jo.etablissements e + WHERE $where ORDER BY siege DESC, actif DESC, nic DESC $limit"); + $nbEtab = $stmt->rowCount(); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($nbEtab > 0) { + $etab = $stmt->fetch(\PDO::FETCH_ASSOC); + $nic = $etab['nic']; + } + $timer['tableEtablissements'] = microtime(true); + + // Si aucun résultat et siren est valide, on part chez Infogreffe + if ($accesDist && $nbEtab == 0 && $this->valideSiren($siren)) { + $iGeffes = new Metier_Partenaires_MGreffes(); + $etabG = $iGeffes->getIdentite($siren); + if ($etabG) { + $adr = $this->structureVoie($etabG['Adresse']); + // Date de dernière MAJ + $lastMaj = str_replace('-', '', $etabG['DateRadiation'])*1; + if (str_replace('-', '', $etabG['DateCreation'])*1 > $lastMaj) { + $lastMaj = str_replace('-', '', $etabG['DateCreation'])*1; + } + if (str_replace('-', '', $etabG['DateUpdate'])*1 > $lastMaj) { + $lastMaj = str_replace('-', '', $etabG['DateUpdate'])*1; + } + + $etab = array( + 'id' => $etabG['id'], + 'siret' => $etabG['Siret'], + 'siege' => $etabG['Siege'], + 'raisonSociale' => $etabG['Nom'], + 'sigle' => $etabG['Sigle'], + 'enseigne' => $etabG['Enseigne'], + 'Adresse' => $etabG['Adresse'], + 'adr_comp' => $etabG['Adresse2'], + 'adr_num' => $adr['num'], + 'adr_btq' => $adr['adr_btq'], + 'adr_typeVoie' => $adr['typeVoie'], + 'adr_libVoie' => $adr['libVoie'], + 'adr_dep' => substr($etabG['CP'], 0, 2), + 'adr_cp' => $etabG['CP'], + 'adr_ville' => $etabG['Ville'], + 'tel' => $etabG['Tel'], + 'fax' => $etabG['Fax'], + 'cj' => $etabG['FJ'], + 'siren' => $etabG['Siren'], + 'nic' => $etabG['Nic'], + 'actif' => $etabG['Actif'], + 'ape_etab' => $etabG['NafEtab'], + 'ape_entrep' => $etabG['NafEnt'], + 'autre_id' => $etabG['NumRC'], + 'dateMAJ' => Metier_Util_Date::dateT('Ymd', 'Y-m-d', $lastMaj), + ); + } + $timer['accesInfogreffeCarInconnu'] = microtime(true); + } + + // Informations locales issues de la table infos_entrep + if ($siren > 100) { + try { + $stmt = $this->conn->executeQuery("SELECT raisonSociale, isin, nscrl, tel, fax, web, mail, + latitude, longitude, precis, dateCreation, dateFermeture, naf, naf_lib, ca, effectif, + nbEtab, activite, LPAD(sirenDoublon,9,'0') AS sirenDoublon, waldec FROM jo.infos_entrep WHERE siren=$siren"); + if ($stmt->rowCount() > 0) { + $tab = $stmt->fetch(\PDO::FETCH_ASSOC); + $waldec = $tab['waldec']; + if (!array_key_exists('sirenDoublon', $tab)) { + $stmt = $this->conn->executeQuery("SELECT LPAD(siren,9,'0') AS sirenDoublon FROM jo.infos_entrep WHERE sirenDoublon=$siren"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $tab['sirenDoublon'] = $result->sirenDoublon; + } + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + try { + $stmt = $this->conn->executeQuery("SELECT CONCAT(LPAD(SIREN,9,0), LPAD(NIC,5,0)) AS siret + FROM jo.etablissements + WHERE SIREN=$siren AND SIEGE=1 ORDER BY ACTIF%10 DESC, NIC DESC"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $siretSiege = $result->siret; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + $timer['infosEntrep'] = microtime(true); + } + + // Informations INSEE + $moisNonDiff = 0; + if ($siren > 100) { + if ($nic > 0) { + $strNic = "AND NIC=$nic"; + } else { + $strNic = "AND NIC<100000 AND SIEGE=1"; + } + try { + $stmt = $this->conn->executeQuery("SELECT ACTIF%10 AS ACTIF, actifEco%10 AS actifEco, + NOM, NOM2, SIGLE, ENSEIGNE, ADR_NUMVOIE, ADR_BTQ, ADR_TYPVOIE, ADR_LIBVOIE, + ADR_LIBCOM, ADR_CP, ADR_COMP, ADR_DISTSP, PAYS, TRIM(LEADING '0' FROM DCREN) AS DCREN, + SIEGE, AUXILT, SAISONAT, CJ, CIVILITE, NBETAB, APE_ENT, APE_ETAB, PROCOL, PROCOL_TYPE, + PROCOL_DATE, CAPITAL, EFF_ENT, NUMRC, TEL, FAX, DIR_FCT, DIR_IDEN, DIR_DATEN, + DIR_LIEUN, CAPITAL_DATE, CAPITAL_DEV, TRIM(LEADING '0' FROM DCRET) AS DCRET, + TEFF_ENT, ADR_DEP, LPAD(ADR_COM,3,0) AS ADR_COM, TCA, TCAEXP, EFF_ET, TEFF_ET, + CODEVOIE, DATE_MAJ, APRM, ACTIVNAT, ORIGINE, MODET, EXPLET, LIEUACT, ACTISURF, DEFET, + MODEN, PRODPART, EXPLEN, MONOREG, REGIMP, MONOACT, DEFEN, DEFET, IDENTITE_PRE, + insL1_NOMEN, insL2_COMP, insL3_CADR, insL4_VOIE, insL5_DISP, insL6_POST, insL7_ETRG, + dateMajRNVP, insCATEGORIE, insIND_PUBLIPO, RPET, ARRONET, CTONET, DU, TU, UU, TCD, + ZEMET, ESAANN, ESAAPEN, DREACTET, AMINTRET, DREACTEN, AMINTREN, NOMEN_LONG, CEDEX, + EPCI, NOM_COM, NATETAB, PRODET, PRODEN, hexavia + FROM insee.identite WHERE SIREN=$siren $strNic ORDER BY SIEGE DESC, ACTIF DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $tabInsee = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabNotice = $this->getInfosNotice($siren, $nic); + $tabInsee['TCA_AN'] = $tabNotice['insEAEANT']; + $tabInsee['RECME'] = $tabNotice['insRECME']; + // On force l'indicateur "actifEco" à 0 si l'établissement est juridiquement inactif + if ($tabInsee['ACTIF']*1 == 0) { + $tabInsee['actifEco'] = 0; + } + if (trim($tabInsee['CODEVOIE'])=='') { + $codeCommune = $tabInsee['ADR_DEP'].sprintf("%03s", $tabInsee['ADR_COM']); + $tabInsee['CODEVOIE'] = $this->getCodeVoieRivoli($codeCommune, $tabInsee['ADR_TYPVOIE'], $tabInsee['ADR_LIBVOIE']); + } + } + // Siren absent de l'Insee + else { + $tabInsee = array( + 'CIVILITE' => 0, + 'NBETAB' => 1, + 'TEL' => $etab['tel'], + 'FAX' => $etab['fax'], + 'Web' => '', + 'Mail' => '', + 'CJ' => $etab['cj'], + 'CJ_lib' => $this->getLibelleFJ($etab['cj']), + 'ACTIF' => $etab['actif'], + 'APE_ETAB' => $etab['ape_etab'] ? $etab['ape_etab'] : $etab['ape_entrep'], + 'APE_ENT' => $etab['ape_entrep'] ? $etab['ape_entrep'] : $etab['ape_etab'], + 'CAPITAL' => $etab['capital'], + 'CAPITAL_DEV' => $etab['capitalDev'], + 'ADR_DEP' => $etab['adr_dep'], + 'TEFF_ENT' => $etab['teff_entrep'], + 'DEFEN' => '', + 'TEFF_ET' => $etab['teff_etab'], + 'DEFET' => '', + 'TCA' => $etab['tca'], + 'TCA_AN' => '', + 'TCAEXP' => $etab['tcaexp'], + ); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + // Nombre d'etablissements + $nbEtab = 0; + try { + $stmt = $this->conn->executeQuery("SELECT count(*) AS nbEtabs FROM jo.etablissements + WHERE siren=$siren AND NIC<100000 AND ACTIF%10=1"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $nbEtab = $result->nbEtabs; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + try { + $stmt = $this->conn->executeQuery("SELECT mois FROM insee.insee_nondiff + WHERE siren=$siren"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $moisNonDiff = $result->mois; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + $timer['tableIdentite'] = microtime(true); + } + // Default + else { + $tabInsee = array( + 'CIVILITE' => 0, + 'NBETAB' => 1, + 'TEL' => $etab['tel'], + 'FAX' => $etab['fax'], + 'Web' => '', + 'Mail' => '', + 'CJ' => $etab['cj'], + 'CJ_lib' => $this->getLibelleFJ($etab['cj']), + 'ACTIF' => $etab['actif'], + 'APE_ETAB' => $etab['ape_etab'] ? $etab['ape_etab'] : $etab['ape_entrep'], + 'APE_ENT' => $etab['ape_entrep'] ? $etab['ape_entrep'] : $etab['ape_etab'], + 'CAPITAL' => '', + 'CAPITAL_DEV' => '', + 'ADR_DEP' => $etab['adr_dep'], + ); + $nbEtab = 'N/C'; + } + + // Complement Identitaire + if (intval($siren) > 100 && count($info)==0) { + $idComp = $this->getIdentitePart($siren, $etab['raisonSociale'], $etab['enseigne'], $etab['sigle'], 0, $accesDist); + $tab = $idComp; + $timer['getIdentitePart']=microtime(true); + } + + // Géocodage de l'adresse + $mMap = new Metier_Partenaires_MMap(); + $mMap->geoCodeAdresse($etab['adr_num'], '', $etab['adr_typeVoie'], $this->getCodeVoie($etab['adr_typeVoie']), + $etab['adr_libVoie'], $etab['adr_cp'], $etab['adr_ville'], 'France', + trim($tabInsee['ADR_DEP'].$tabInsee['ADR_COM'].$tabInsee['CODEVOIE'])); + $tab['latitude'] = $mMap->latitudeDec; + $tab['longitude'] = $mMap->longitudeDec; + $tab['altitude'] = $mMap->altitude; + $tab['precis'] = $mMap->precision; + $timer['geoCodage'] = microtime(true); + + // Accès provisoire à AMABIS + $repAmabis = array(); + if ($accesDist) { + if ($this->debugtime) { + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;MAmabis Avant\n", FILE_APPEND); + $tdeb = microtime(1); + } + + $iAmabis = new Metier_Partenaires_MAmabis(); + $repAmabis = $iAmabis->getZonage($etab['adr_num'], $etab['adr_btq'], $etab['adr_typeVoie'], $etab['adr_libVoie'], + $etab['adr_cp'], $etab['adr_ville'], trim($tabInsee['ADR_DEP'].$tabInsee['ADR_COM'].$tabInsee['CODEVOIE']), + false, 'TEST', false); + $duree = round(microtime(1)-$tdeb, 3); + + if ($this->debugtime) { + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;MAmabis APRES ($duree s)\n", FILE_APPEND); + $timer['zonesPrioritaires'] = microtime(true); + } + } + + // N° de TVA Intracommunautaire + $vatNumber = 'FR00000000000'; + $vatDefined = false; + if (intval($siren) > 100) { + if ($this->debugtime) { + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;MTva Avant\n", FILE_APPEND); + $tdeb = microtime(1); + } + + $iTva = new Metier_Partenaires_MTva(); + $iTva->setCompanyId($siren); + if ($tabInsee['ACTIF']==1 && (date('H')<10 || date('H')>=18)) { + $iTva->setRemote(); + } + $iTva->getTVA(); + $vatNumber = $iTva->vatNumber; + $vatDefined = $iTva->vatDefined; + + if ($this->debugtime) { + $duree=round(microtime(1)-$tdeb, 3); + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;MTva APRES ($duree s)\n", FILE_APPEND); + $timer['tvaIntra']=microtime(true); + } + } + + $nom = trim($etab['raisonSociale']); + if ($nom=='') { + $nom = preg_replace('/,.*$/', '', $tabInsee['IDENTITE_PRE']); + } + $nom2 = $tel = $fax = ''; + if (strtoupper(trim($tabInsee['NOM2'])) != strtoupper(trim($etab['sigle']))) { + $nom2 = trim($tabInsee['NOM2']); + } + + if (trim($tab['tel']) != '') { + $tel = trim($tab['tel']); + } elseif ($tabInsee['TEL'] != '') { + $tel = implode('.', str_split($tabInsee['TEL'], 2)); + } + + if (trim($tab['fax']) != '') { + $fax = trim($tab['fax']); + } elseif ($tabInsee['FAX'] != '') { + $fax = implode('.', str_split($tabInsee['FAX'], 2)); + } + + if (intval($siren) > 0) { + if ($this->debugtime) { + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;MTel Avant\n", FILE_APPEND); + $tdeb = microtime(1); + } + + $iTel = new Metier_Partenaires_MTel(); + $tmp = $iTel->getTel($siren, $nic, true, 1); + + if ($this->debugtime) { + $duree = round(microtime(1)-$tdeb, 3); + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;MTel APRES ($duree s)\n", FILE_APPEND); + } + + $activitePJ_An8 = ''; + foreach ($tmp as $tmp2) { + if ($tmp2['typeTel']=='tel' && ($tel == '' || $tel == trim($tab['tel']))) { + $tel = implode('.', str_split($tmp2['telephone'], 2)); + } + if ($tmp2['typeTel']=='fax' && ($fax == '' || $fax == trim($tab['fax']))) { + $fax = implode('.', str_split($tmp2['telephone'], 2)); + } + if ($tmp2['typeTel'] ==' web' && $tab['web'] == '') { + $tab['web'] = $tmp2['infoTel']; + } + if ($tmp2['typeTel'] == 'mail' && $tab['mail'] == '') { + $tab['mail'] = $tmp2['infoTel']; + } + if ($tmp2['typeTel'] == 'an8') { + $activitePJ_An8 = $tmp2['infoTel']; + } + } + $timer['telFax']=microtime(true); + } + + /** + * Type d'exploitation + * 0 : N/C + * 1 : Locataire d'un fond de commerce + * 2 : Loueur d'un fond de commerce + * 3 : Prestataire de personnel + * 10: Exploitation directe + * 11: Sans activité ??? + */ + $typeExploitation=0; + if (intval($siren) > 100 + && strtoupper($tabInsee['EXPLET']) == 'O' || trim($tabInsee['EXPLET']) == '') { + switch ($tabInsee['PRODPART']*1) { + // Locataire d'un fond de commerce + case 1: + $tabAnn2 = $this->getAnnoncesLegales($siren, 0, array(5700)); + if (count($tabAnn2) > 0) { + $typeExploitation = 0; + } else { + $typeExploitation = 1; + } + break; + case 2: // Loueur d'un fond de commerce + case 3: // Prestataire de personnel + $typeExploitation = $tabInsee['PRODPART']*1; + break; + default: + if (!($tabInsee['CJ'] >= 7000 && $tabInsee['CJ'] < 8000) + && !($tabInsee['CJ'] >= 9000 && $tabInsee['CJ'] < 10000)) { + if ($tabInsee['ORIGINE']*1 == 6) { // Prise en location-gérance + $typeExploitation = 1; // Locataire d'un fond de commerce + } elseif ($tabInsee['ORIGINE']*1 == 1 || // Création pure + $tabInsee['ORIGINE']*1 == 3 || // Achat + $tabInsee['ORIGINE']*1 == 4) { // Apport + /* + '2'=>'Réinstallation après transfert', + '5'=>'Reprise au conjoint ou apport reçu', + + '7'=>'Partage', + '8'=>'Reprise', + '9'=>'Autre modalité d\'acquisition', + 'A'=>'Reprise globale d\'une exploitation agricole', + 'B'=>'Poursuite de l\'exploitation agricole par le conjoint', + 'C'=>'Transfert de propriété d\'une exploitation agricole', + 'D'=>'Apport d\'exploitation(s) agricole(s) individuelle(s)', + 'E'=>'Reprise totale ou partielle d\'exploitation individuelle', + */ + $typeExploitation = 10; + } elseif ($nbEtab < 2) { + $tabAnn = $this->getAnnoncesLegales($siren, 0, 'L'); + if (count($tabAnn) > 0) { + if ($tabAnn[0]['DateParution' ] > $tabInsee['DCRET'] + && ($tabAnn[0]['Departement'] == $tabInsee['ADR_DEP'] + || $tabAnn[0]['Departement'] == substr(''.$tabInsee['ADR_DEP'].''.$tabInsee['ADR_COM'], 0, 3)*1)) { + $typeExploitation = 1; // Locataire d'un fond de commerce + } + } elseif (count($this->getAnnoncesLegales($siren, 0, 'G')) > 0) { + $typeExploitation = 2; // Loueur d'un fond de commerce + } + } elseif ($tabInsee['ORIGINE']*1 != 0 + && $tabInsee['ORIGINE']*1 != 8 + && $tabInsee['ORIGINE']*1 != 9 + && $tabInsee['ORIGINE'] != 'NR') { + $typeExploitation = 10; // Exploitation directe + } + } + break; + } + } + $timer['typeExploitation'] = microtime(true); + + // Recherche de prédécesseur ou successeur + if (intval($siren) > 100) { + $tabAssoc = $this->getSiretAssoc($siren, $nic); + if (count($tabAssoc)>0) { + if (isset($tabAssoc['pre'])) { + // Il y a un prédécesseur + if ($tabInsee['ORIGINE']*1==0 || + $tabInsee['ORIGINE']*1==1 || + $tabInsee['ORIGINE']*1==9 || + $tabInsee['ORIGINE']=='NR') { + $tabInsee['ORIGINE']=2; + } // Transfert + } + } + } + $timer['siretPrecSuivant'] = microtime(true); + + // Code Pays + $codePaysIso2 = 'FR'; + if ($tabInsee['ADR_DEP'] > 98) { + $codePaysInsee = $tabInsee['ADR_COM']; + try { + $stmt = $this->conn->executeQuery("SELECT j.codPays, j.numPays, j.codPays3, j.codePaysInpi, + j.libPays, i.LIBCOG, i.ACTUAL FROM jo.tabPays j, insee.insee_tabPays i + WHERE j.codePaysInsee=$codePaysInsee AND j.codePaysInsee=substring( i.COG, 3, 3 ) + AND i.ACTUAL IN (1,4) AND j.numPays is NOT NULL"); + if ($stmt->rowCount() == 1) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $codePaysIso2 = $result->codPays; + } elseif ($stmt->rowCount() > 1) { + $codePaysIso2 = ''; + while ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) { + if (trim(preg_replace('/[^A-Z]/', '', strtoupper(strtr($result['libPays'], + 'àáâãäåæçèéêëìíîïðñòóôõöùúûüýÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝ', + "aaaaaaaceeeeiiiionooooouuuuyyAAAAAAACEEEEIIIIONOOOOOUUUUY")))) == trim(preg_replace('/[^A-Z]/', '', strtoupper($result['LIBCOG'])))) { + $codePaysIso2 = $result['codPays']; + break; + } + } + // Exception lié à anomalies de données INSEE + if ($codePaysIso2 == '' && $codePaysInsee == 237) { + $codePaysIso2 = 'KR'; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + $timer['codePays'] = microtime(true); + + $tabIris = $this->getInfosIris($tabInsee['ADR_DEP'].$tabInsee['ADR_COM'], substr($tabInsee['CODEVOIE'], 0, 4), + $etab['adr_num'], $etab['adr_btq'], $etab['adr_typeVoie'], $etab['adr_libVoie']); + // On récupere le code Rivoli s'il est absent de SIRENE (cf. doc Sirene) + if ($tabInsee['CODEVOIE']=='' && count($tabIris) > 0) { + $tabInsee['CODEVOIE'] = $tabIris['rivoli']; + } + $timer['codeIris'] = microtime(true); + + // Est-ce un ancien établissement siège ? + $ancienSiege=false; + $dateFinSiege=0; + if (intval($siren) > 100) { + if ($etab['siege']==0 || ($etab['siege']==1 && $tabInsee['ACTIF']==0)) { + $dateFinSiege = $this->isAncienSiege($siren, $nic); + if ($dateFinSiege > 19000101) { + $ancienSiege=true; + } + } + } + $timer['ancienSiege']=microtime(true); + + $tabInsee['actifEcoDate']=''; + $tabInsee['actifEcoType']=''; + + if (intval($siren) > 100 && $tabInsee['ACTIF']*1 == 1 && $tabInsee['actifEco']*1 == 0) { + // L'établissement est actif juridiquement à l'INSEE mais sans activité économique + $stmt = $this->conn->executeQuery("SELECT insEVE, IF(insDATEVE=0, idFlux*1, insDATEVE) AS insDATEVE + FROM insee.insee_even WHERE insSIREN=$siren AND insNIC=$nic + AND insEVE IN ('OD','TD','MPF','MNP','420','425','620','621','650') ORDER BY insDATEVE DESC"); + if ($stmt->rowCount() > 0) { + $tabModif = $stmt->fetch(\PDO::FETCH_ASSOC); + switch (''.$tabModif['insEVE']) { + case 'OD': + case 'TD': + case '420': // Absence d'activité de l'entreprise (cessation économique de l.entreprise) + case '425': // Absence d'activité d'une entreprise suite à une mise à jour au répertoire // + case '620': + case '621': + case '650': // Fermé économiquement + $tabInsee['actifEcoType'] = 'ECOF'; + $tabInsee['actifEcoDate'] = $tabModif['insDATEVE']; + break; + case 'MPF': // Présumé Fermé par la trimestrielle Insee + $tabInsee['actifEcoType'] = 'PFER'; + $tabInsee['actifEcoDate'] = $tabModif['insDATEVE']; + break; + case 'MNP': // Présumé Fermé par la trimestrille NPAI + $tabInsee['actifEcoType'] = 'NPAI'; + $tabInsee['actifEcoDate'] = $tabModif['insDATEVE']; + break; + default: + $tabInsee['actifEco'] = 1; + $tabInsee['actifEcoDate'] = ''; + $tabInsee['actifEcoType'] = ''; + break; + } + } + } + + $dir1Genre=''; + if ($tabInsee['CIVILITE'] == 1) { + $dir1Genre='M'; + } elseif ($tabInsee['CIVILITE'] == 2) { + $dir1Genre='F'; + } + + $aprm = substr($tabInsee['APRM'], -1, 1) == 'Z' ? '' : $tabInsee['APRM']; + + $tabRet = array( + 'id' => $etab['id'], + 'Siret' => $etab['siret'], + 'SiretSiege' => $siretSiege, + 'AncienSiege' => $ancienSiege, + 'AncienSiegeDateFin'=> $dateFinSiege, + 'Siege' => $etab['siege'], + 'Tribunal'=> strtr($etab['triCode'], array('préfec'=>'', 'sous-p'=>'', 'Déclar'=>'')), + 'Nom' => $nom, //EIRL + 'Nom2' => $nom2, + 'Sigle' => $etab['sigle'], + 'Enseigne' => $etab['enseigne'], //EIRL + 'Adresse' => trim(preg_replace('/ +/', ' ', trim($etab['adr_num'] .' '. $etab['adr_btq'] .' '.$etab['adr_typeVoie'] .' '. $etab['adr_libVoie']))), + 'Adresse2' => trim(preg_replace('/ +/', ' ', $etab['adr_comp'])), + 'AdresseNum' => $etab['adr_num'], + 'AdresseBtq' => $etab['adr_btq'], + 'AdresseVoie' => $etab['adr_typeVoie'], + 'AdresseRue' => $etab['adr_libVoie'], + 'AdresseDistSP' => $tabInsee['ADR_DISTSP'], + 'CP' => $etab['adr_cp'], + 'Ville' => $etab['adr_ville'], + 'Pays' => $tabInsee['PAYS'], + 'PaysIso2' => $codePaysIso2, + 'Civilite' => $tabInsee['CIVILITE'], + 'NbEtab' => $nbEtab, + 'Tel' => $tel, + 'Fax' => $fax, + 'Web' => $tab['web'], + 'Mail' => $tab['mail'], + 'GeoLat' => $tab['latitude'], + 'GeoLon' => $tab['longitude'], + 'GeoAlt' => $tab['altitude'], + 'GeoPrecis'=> $tab['precis'], + 'TvaNumero' => $vatNumber, + 'TvaAttribue' => $vatDefined, + 'FJ' => $tabInsee['CJ'], + 'FJ_lib' => $this->getLibelleFJ($tabInsee['CJ']), + 'RECME' => $tabInsee['RECME'], + 'Siren' => $etab['siren'], + 'Nic' => $etab['nic'], + 'Actif' => $tabInsee['ACTIF'], // Etablissement juridiquement ACTIF + 'ActifEco' => $tabInsee['actifEco'], // Etablissement économiquement ACTIF + 'ActifEcoDate' => $tabInsee['actifEcoDate'], // Etablissement économiquement Inactif depuis + 'ActifEcoType' => $tabInsee['actifEcoType'], // Type d'inactivité éco ECOF, NPAI, PFER ou vide + 'NafEtab' => $tabInsee['APE_ETAB'], + 'NafEnt' => $tabInsee['APE_ENT'], + 'NaceEtab' => $this->getCodeNace($tabInsee['APE_ETAB']), + 'NaceEnt' => $this->getCodeNace($tabInsee['APE_ENT']), + 'NafEntLib' => $this->getLibelleNaf($tabInsee['APE_ENT']), + 'NafEtabLib' => $this->getLibelleNaf($tabInsee['APE_ETAB']), + 'AutreId' => $etab['autre_id'], + 'Source' => $etab['source'], + 'SourceId' => $etab['source_id'], + 'Isin' => $tab['isin'], + 'Capital' => $etab['capital'],//IKI + 'CapitalDev' => $etab['capitalDev'], + 'CapitalSrc' => $etab['capitalSrc'], + 'DateCreaEt' => $tabInsee['DCRET'], + 'DateCreaEn' => $tabInsee['DCREN'], + 'SituationJuridique' => '', + 'EffEnTr' => $tabInsee['TEFF_ENT'], + 'EffEnTrLib' => self::$tabEffectif[intval($tabInsee['TEFF_ENT'])], + 'EffEtTr' => $tabInsee['TEFF_ET'], + 'EffEtTrLib' => self::$tabEffectif[intval($tabInsee['TEFF_ET'])], + 'EffectifEtab' => $tabInsee['EFF_ET'], + 'Effectif' => $tabInsee['EFF_ENT'], + 'Dept' => $tabInsee['ADR_DEP'], + 'codeCommune' => $tabInsee['ADR_COM'], + 'TrancheCA' => $tabInsee['TCA'], + 'TrancheCALib' => self::$tabTCA[$tabInsee['TCA']], + 'TrancheCAexp' => $tabInsee['TCAEXP'], + 'TrancheCAexpLib' => self::$tabTCAexp[$tabInsee['TCAEXP']], + 'TrancheCAType' => 'I', + 'AnneeEffEn' => $tabInsee['DEFEN'], + 'AnneeEffEt' => $tabInsee['DEFET'], + 'AnneeTCA' => $tabInsee['TCA_AN'], + 'dir1Titre' => self::$tabFct[$tabInsee['DIR_FCT']], + 'dir1NomPrenom' => preg_replace('/^EIRL\s/', '', $tabInsee['DIR_IDEN']), + 'dir1Genre' => $dir1Genre, + 'Rivoli' => trim(substr($tabInsee['CODEVOIE'], 0, 4).' '.substr($tabInsee['CODEVOIE'], -1)), + 'Hexavia' => $tabInsee['hexavia'], + 'InfosIris' => $tabIris, + 'NatureActivite' => $tabInsee['ACTIVNAT'], // Nature de l'activité + 'OrigineCreation' => $tabInsee['ORIGINE'], // Origine de la création + 'Auxiliaire' => $tabInsee['AUXILT'], // 1=Auxiliaire / 0=Non auxiliaire + 'Saisonnalite' => $tabInsee['SAISONAT'], // P=Activité permanente / S=Activité saisonnière + 'ACTISURF' => $tabInsee['ACTISURF'], + 'EXPLEN' => $tabInsee['EXPLEN'], + 'EXPLET' => $tabInsee['EXPLET'], + 'LIEUACT' => $tabInsee['LIEUACT'], + 'MODEN' => $tabInsee['MODEN'], + 'MONOACT' => $tabInsee['MONOACT'], + 'MONOREG' => $tabInsee['MONOREG'], + 'REGIMP' => $tabInsee['REGIMP'], + 'PRODPART' => $tabInsee['PRODPART'], + 'GeoInfos' => $repAmabis, + 'NonDiffusible' => $moisNonDiff, + 'TypeExploitation' => $typeExploitation, + 'DateMajINSEE' => str_replace('--', '', Metier_Util_Date::dateT('Ymd', 'Y-m-d', $tabInsee['DATE_MAJ'])), + 'APRM' => $aprm, + 'APRM_Lib' => $this->getLibelleNafa($tabInsee['APRM']), + 'AutreSiret' => $tabAssoc, + 'L1_NOMEN' => $tabInsee['insL1_NOMEN'], // Nom ou raison sociale de l'entreprise pour l'adressage + 'L2_COMP' => $tabInsee['insL2_COMP'], // Complément de nom de l'entreprise pour l'adressage + 'L3_CADR' => $tabInsee['insL3_CADR'], // Complément d'adresse pour l.adressage + 'L4_VOIE' => $tabInsee['insL4_VOIE'], // Numéro et libellé dans la voie + 'L5_DISP' => $tabInsee['insL5_DISP'], // Distribution spéciale + 'L6_POST' => $tabInsee['insL6_POST'], // Ligne d'acheminement postal pour l'adressage + 'L7_ETRG' => $tabInsee['insL7_ETRG'], // Libellé du pays pour les adresses à l'étranger + 'IND_PUBLIPO' => $tabInsee['insIND_PUBLIPO'], // Indicateur du champ de publipostage + 'dateMajRNVP' => $tabInsee['dateMajRNVP'], + 'RNVP_Niveau' => 0, + 'RPET' => $tabInsee['RPET'], // + 'ARRONET' => $tabInsee['ARRONET'], // + 'CTONET' => $tabInsee['CTONET'], // + 'DU' => $tabInsee['DU'], // + 'TU' => $tabInsee['TU'], // + 'UU' => $tabInsee['UU'], // + 'TCD' => $tabInsee['TCD'], // + 'ZEMET' => $tabInsee['ZEMET'], // + 'ESAANN' => $tabInsee['ESAANN'], // + 'ESAAPEN' => $tabInsee['ESAAPEN'], // + 'DREACTET' => $tabInsee['DREACTET'], // + 'AMINTRET' => $tabInsee['AMINTRET'], // + 'DREACTEN' => $tabInsee['DREACTEN'], // + 'AMINTREN' => $tabInsee['AMINTREN'], // + 'CATEGORIE' => $tabInsee['insCATEGORIE'], // Catégorie d'entreprise + 'NOMEN_LONG' => $tabInsee['NOMEN_LONG'], // Nom ou raison sociale de l'entreprise + 'PRODET' => $tabInsee['PRODET'], + 'PRODEN' => $tabInsee['PRODEN'], + 'NATETAB' => $tabInsee['NATETAB'], + 'CEDEX' => $tabInsee['CEDEX'], + 'EPCI' => $tabInsee['EPCI'], + ); + + // Set Identite pour les autres méthodes + $this->Identite = $tabRet; + + // Estimation du Chiffre d'affaires + $cj1 = substr($tabInsee['CJ'], 0, 1)*1; + if ($tabRet['TrancheCA']*1==0 && $tabRet['AnneeTCA']*1==0 && $tabInsee['ACTIF']==1 + && $tabInsee['CJ'] != 1800 && $tabInsee['CJ'] != 1900 && $cj1 != 7 && $cj1 != 8 && $cj1 != 9) { + $caEstime = $this->getCAnafEffectif($tabInsee['APE_ENT'], $tabInsee['EFF_ENT']); + $tabRet['TrancheCA'] = $this->getTca($caEstime); + $tabRet['TrancheCALib'] = self::$tabTCA[$tabRet['TrancheCA']]; + if ($tabRet['TrancheCA']*1 > 0) { + $tabRet['TrancheCAType'] = 'E'; + $tabRet['AnneeTCA'] = date('Y')-2; + } + } + + // Si tourisme, recherche du classement + if (intval($siren) > 0) { + $tabNafTourisme = array( + '5510Z', // Hôtels et hébergement similaire + '5520Z', // Hébergement touristique et autre hébergement de co + '5530Z', // Terrains de camping et parcs pour caravanes ou véh + '702A', // Location de logements + '6820A', // Location de logements + '6820B', // Location de terrains et d'autres biens immobiliers + '551A', // Hôtels touristiques avec restaurant + '5610A', // Restauration traditionnelle + '741J', // Administration d'entreprises + '7010Z', // Activités des sièges sociaux + '552C', // Exploitation de terrains de camping + '702C', // Location d'autres biens immobiliers + '551C', // Hôtels touristiques sans restaurant + '553A', // Restauration de type traditionnel + ); + if (in_array($tabInsee['APE_ENT'], $tabNafTourisme) + || in_array($tabInsee['APE_ETAB'], $tabNafTourisme)) { + $stmt = $this->conn->executeQuery("SELECT id, nom, adresse, adrCp, adrVille, + nbEtoiles, typeClasse, categorie, dateClasse, tel, fax, mail, web, + typeChambres, capacite FROM jo.tourisme WHERE siren=$siren AND nic=$nic"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabRet['NafEtabLib'].= ' ('.$result['nbEtoiles'].' étoiles le '. + Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $result['dateClasse']).')'; + if ($tabRet['Tel'] == '') { + $tabRet['Tel'] = $result['tel']; + } + if ($tabRet['Fax'] == '') { + $tabRet['Fax'] = $result['fax']; + } + if ($tabRet['Web'] == '') { + $tabRet['Web'] = $result['web']; + } + if ($tabRet['Mail'] == '') { + $tabRet['Mail'] = $result['mail']; + } + } + } + } + + // Nombre d'actions du capital si disponible + if ($etab['capital'] > 0) { + try { + $stmt = $this->conn->executeQuery("SELECT capital, deviseCapital, nbActions, actionNominale, dateInfo + FROM sdv1.capitalActions WHERE siren=$siren AND capital>0 ORDER BY dateInfo DESC LIMIT 0,1"); + $tabRet['CapitalNbActions'] = 0; + $tabRet['CapitalMtActions'] = 0; + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($etab['capital'] == $result['capital']) { + $tabRet['CapitalNbActions'] = $result['nbActions']; + $tabRet['CapitalMtActions'] = $result['actionNominale']; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + $timer['nbActionsCapital'] = microtime(true); + + // Numéro de TVA non défini + if (!$vatDefined) { + // Dom Tom ou étranger + if ($tabRet['Dept'] > 96) { + $tabRet['TvaFacultatif'] = 2; + } + // Micro-entreprise + if ($tabRet['FJ']*1 < 2000 && $tabRet['Effectif'] == 0 && $tabRet['TrancheCA'] == 0) { + $tabRet['TvaFacultatif'] = 1; + } + // Erreur lors de la récupération du numéro de TVA + if ($vatDefined === null) { + $tabRet['TvaFacultatif'] = 99; + } + } + + // Date de début d'activité de l'entreprise si absente INSEE + if (intval($siren) > 100 && $tabRet['DateCreaEn'] == 0) { + try { + $stmt = $this->conn->executeQuery("SELECT DCREN FROM insee.identite + WHERE SIREN=$siren AND DCREN>0 ORDER BY DCREN ASC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $tabRet['DateCreaEn'] = $result->DCREN; + } else { + $tmp = $this->getAvisInsee($siren); + $dateCreaEn = Metier_Util_Date::dateT('Y-m-d', 'Ymd', $tmp['dateEtatEn']); + if (preg_match("/Prise d'activité/u", $tmp['etatEn']) && $dateCreaEn > 19000101) { + $this->conn->update('insee.identite', array('DCREN'=>$dateCreaEn), + array('SIREN'=>$siren, 'NIC'=>$etab['nic'])); + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + $timer['dateDebutActivite']=microtime(true); + + // Adresse de domiciliation + $tabDom = $this->infoAdresseDom($tabRet['AdresseNum'], $tabRet['AdresseBtq'], + $tabRet['AdresseVoie'], $tabRet['AdresseRue'], $tabRet['Adresse2'], + $tabRet['CP'], $tabRet['Ville']); + if (is_array($tabDom) && count($tabDom)>0) { + foreach ($tabDom as $i=>$dom) { + $tabRet['AdresseDom']=1; + $tabRet['AdresseDomNb']=$dom['nbEntrep']; + $domiciliataire=''; + if (preg_match('/^CHEZ (.*)$/i', $tabRet['Adresse2'], $matches) + && !preg_match('/ M | M. | MR | MME | MLLE /i', $tabRet['Adresse2'])) { + $domiciliataire = $matches[1]; + $tabRet['AdresseDom'] = 2; + } + $tabRet['AdresseDomEnt'][] = array( + 'siren' => $dom['siren'], + 'nom' => $dom['nom'] + ); + } + } + $timer['adresseDom'] = microtime(true); + + // --- Siren en doublon + if ($tab['sirenDoublon'] > 0) { + $tabRet['AutreSiren'] = array('listeSiren' => array( + 'siren' => $tab['sirenDoublon'], + 'type' => 'doublon' + )); + } + + // --- Situation Juridique + if (intval($siren) > 100) { + if ($this->debug) { + file_put_contents('procol.log', "=== Situation Juridique ===\n"); + } + + $tabAnn = $this->getAnnoncesLegales($siren, 0, '', false, false); + + if (count($tabAnn) > 0) { + // Date de dernière mise à jour + $tabDates = array(); + foreach ($tabAnn as $iAnn => $ann) { + $tabDates[] = $ann['dateInsertionSD']; + } + rsort($tabDates); + $tabRet['dateMajANN'] = Metier_Util_Date::dateT('Y-m-d', 'Y-m-d', $tabDates[0]); + if ($tabRet['dateMajANN'] == '--') { + $tabRet['dateMajANN'] = ''; + } else { + $dateAnnLastCompare = DateTime::createFromFormat('Y-m-d', $tabRet['dateMajANN']); + } + + // Procol + $tabProcol = $this->getAnnoncesLegales($siren, 0, 'P', false); + if (count($tabProcol) > 0) { + $tabDates = array(); + foreach ($tabProcol as $iProcol => $procol) { + $tabDates[] = $procol['dateJugement']; + } + rsort($tabDates); + $dateProcol = str_replace('-', '', $tabDates[0])*1; + // Plan + if ($this->dureePlan > 0 && date('Ymd') < $this->finPlan) { + if ($this->debug) { + file_put_contents('procol.log', "Plan (PL) : ".$this->dureePlan."-".$this->finPlan."\n", FILE_APPEND); + } + $tabRet['SituationJuridique'] = 'PL'; + } + // Plan révolu + elseif ($this->dureePlan > 0 && date('Ymd') >= $this->finPlan) { + if ($this->debug) { + file_put_contents('procol.log', "Plan revolu : ".$this->dureePlan."-".$this->finPlan."\n", FILE_APPEND); + } + $tabRet['SituationJuridique'] = ''; + } + // Appel de jugement + elseif ($this->appelJugement) { + $tabRet['SituationJuridique'] = 'PA'; + } + // Jugement de cloture après LJ + elseif ($this->SituationCloture) { + if ($this->debug) { + file_put_contents('procol.log', "Cloture (CL) "."\n", FILE_APPEND); + } + $tabRet['SituationJuridique'] = 'CL'; + } + // En cours de procédure + else { + if ($this->debug) { + file_put_contents('procol.log', "Procol (P) "."\n", FILE_APPEND); + } + $tabRet['SituationJuridique'] = 'P'; + } + + // RAZ SituationJuridique si cutoff plus récent que dernière procol + try { + $stmt = $this->conn->executeQuery("SELECT encours, scoreSolv, scoreDir, scoreConf, + DATE(dateInsert)*1 AS dateInsert, DATE(dateUpdate)*1 AS dateUpdate + FROM jo.scores_cutoff WHERE siren=$siren"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($result['scoreSolv'] > 0) { + //Tri des dates de procol + $tabDates = array(); + foreach ($tabProcol as $iProcol => $procol) { + $tabDates[] = $procol['dateJugement']; + } + rsort($tabDates); + $dateProcol = str_replace('-', '', $tabDates[0])*1; + if ($result['dateUpdate'] > $result['dateInsert']) { + $dateMaj = str_replace('-', '', $result['dateUpdate']); + } else { + $dateMaj = str_replace('-', '', $result['dateInsert']); + } + if ($dateProcol <= $dateMaj) { + $tabRet['SituationJuridique'] = ''; + } + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + // Absorption + if ($identite['SituationJuridique'] == '') { + $tabAnn = $this->getAnnoncesLegales($siren, 0, 'A', false); + $nbAnn = count($tabAnn); + if ($nbAnn > 0) { + if ($this->debug) { + file_put_contents('procol.log', "DETECTION ABSORPTION\n", FILE_APPEND); + } + $dateAnn = $tabAnn[$nbAnn-1]['dateInsertionSD']; + $dateAnnCompare = DateTime::createFromFormat('Y-m-d H:i:s', $dateAnn); + $dateAnnCompare->add(new DateInterval('P364D')); + if ($dateAnnCompare > $dateAnnLastCompare) { + $tabRet['SituationJuridique'] = 'A'; + if ($this->debug) { + file_put_contents('procol.log', "Entreprise absorbée\n", FILE_APPEND); + } + } + } + } + + // Dissolution + if ($identite['SituationJuridique'] == '') { + $tabAnn = $this->getAnnoncesLegales($siren, 0, 'D', false); + $nbAnn = count($tabAnn); + if ($nbAnn > 0) { + if ($this->debug) { + file_put_contents('procol.log', "DETECTION DISSOLUTION\n", FILE_APPEND); + } + $dateAnn = $tabAnn[$nbAnn-1]['dateInsertionSD']; + $dateAnnCompare = DateTime::createFromFormat('Y-m-d H:i:s', $dateAnn); + $dateAnnCompare->add(new DateInterval('P364D')); + if ($dateAnnCompare > $dateAnnLastCompare) { + $tabRet['SituationJuridique'] = 'D'; + if ($this->debug) { + file_put_contents('procol.log', "Entreprise dissolue\n", FILE_APPEND); + } + } + } + } + } + + if ($this->debug) { + file_put_contents('procol.log', "SituationJuridique = ".$tabRet['SituationJuridique']."\n", FILE_APPEND); + } + $timer['getAnnoncesLegales'] = microtime(true); + } // Fin Situation Juridique + + if (($tabInsee['CJ'] > 0 && $tabInsee['CJ'] < 20 + || $tabInsee['CJ'] > 999 && $tabInsee['CJ'] < 2000) && $tabInsee['DIR_FCT']=='') { + $tabRet['dir1Titre'] = self::$tabFct['PP']; + } + + if ($tabInsee['CIVILITE']>0 && $tabRet['dir1NomPrenom']=='') { + if ($tabInsee['CIVILITE']==1) { + $tabRet['dir1NomPrenom'] = 'M. '; + $tabRet['dir1Genre'] = 'M'; + } elseif ($tabInsee['CIVILITE']==2) { + $tabRet['dir1NomPrenom'] = 'Mme '; + $tabRet['dir1Genre'] = 'F'; + } elseif ($tabRet['dir1Genre'] != 'M' && $tabRet['dir1Genre'] != 'F') { + $tabRet['dir1Genre'] = ''; + } + $tabRet['dir1NomPrenom'].= $tabInsee['NOM']; + } + + if (intval($siren) > 0) { + if ($tabInsee['CIVILITE']>0 && ($tabRet['dir1Nom']=='' || $tabRet['dir1Prenom'])) { + $stmt = $this->conn->executeQuery("SELECT dirNom, dirNomUsage, dirPrenom, insCIVILITE + FROM insee.insee_even WHERE insSIREN=$siren ORDER BY insDATEVE DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $dir = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabRet['dir1Nom'] = strtoupper($dir['dirNom']); + $tabRet['dir1Prenom'] = ucwords(strtolower($dir['dirPrenom'])); + $tabRet['dir1NomUsage'] = strtoupper($dir['dirNomUsage']); + if ($dir['insCIVILITE'] == 1) { + $tabRet['dir1Genre'] = 'M'; + } elseif ($dir['insCIVILITE'] == 2) { + $tabRet['dir1Genre'] = 'F'; + } elseif ($tabRet['dir1Genre'] != 'M' && $tabRet['dir1Genre'] != 'F') { + $tabRet['dir1Genre'] = ''; + } + $entrep['sexe'] = $tabRet['dir1Genre']; + } + } + } + + if (intval($siren) > 100 && $tabInsee['ACTIF'] == 0) { + if ($etab['nic']*1>0) { + $strNic = 'AND insNIC='.$etab['nic']; + } else { + $strNic = ''; + } + $stmt = $this->conn->executeQuery("SELECT insDATEVE FROM insee.insee_even + WHERE insSIREN=$siren $strNic AND ( + insEVE IN ('FF', 'TF', '0F', 'TD', '0D', '410', '420', '425', '400', '430', '435', 'SC', 'SU', 'SE', 'SS', 'STE', 'STS') + OR insDESTINAT!='' ) ORDER BY insDATEVE DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $tabRet['DateClotEt'] = $result->insDATEVE; + } + $timer['dateClotureInsee'] = microtime(true); + } + + if ($tabRet['TrancheCALib'] == '') { + $tabRet['TrancheCALib'] = 'N/C'; + } + if ($tabRet['EffEnTrLib'] == '') { + $tabRet['EffEnTrLib'] = 'N/C'; + } + + $tabRet['CapitalLib'] = ''; + if (intval($siren) > 100) { + $strEvenVtLg = " AND Rubrique != 'ventes' AND typeEven NOT LIKE '%2700%' AND typeEven NOT LIKE '%2701%' AND typeEven NOT LIKE '%2702%' AND typeEven NOT LIKE '%2703%' AND typeEven NOT LIKE '%2710%' AND typeEven NOT LIKE '%2720%' AND typeEven NOT LIKE '%2721%' AND typeEven NOT LIKE '%2725%' AND typeEven NOT LIKE '%2730%' AND typeEven NOT LIKE '%2740%' AND typeEven NOT LIKE '%2750%' AND typeEven NOT LIKE '%2800%' AND typeEven NOT LIKE '%2840%' AND typeEven NOT LIKE '%2850%' AND typeEven NOT LIKE '%2851%' AND typeEven NOT LIKE '%2860%' AND typeEven NOT LIKE '%2870%' AND typeEven NOT LIKE '%2875%' AND typeEven NOT LIKE '%2880%' AND typeEven NOT LIKE '%2881%' AND typeEven NOT LIKE '%2885%' AND typeEven NOT LIKE '%2890%' AND typeEven NOT LIKE '%2891%' AND typeEven NOT LIKE '%2892%' "; + if ($tabRet['CapitalSrc'] != 5) { + // Recherche du n° RC, de la Forme Juridique et du Capital au Bodacc + try { + $stmt = $this->conn->executeQuery("SELECT Capital, CapitalDev FROM jo.bodacc_detail + WHERE siren=$siren AND capital != 0 $strEvenVtLg + ORDER BY Bodacc_Date_Parution DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $annCap = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($tabRet['Capital']==0 || $tabRet['CapitalDev']=='' || $tabRet['Capital'] != $annCap['Capital']*1) { + if ($tabInsee['CJ'] > 1999 && $tabInsee['CJ'] < 7000) { + $tabRet['Capital'] = $annCap['Capital']*1; + $tabRet['CapitalDev'] = $annCap['CapitalDev']; + $tabRet['CapitalSrc'] = 10; + } + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($tabRet['Capital']==0 || $tabRet['CapitalDev']=='') { + try { + $stmt = $this->conn->executeQuery("SELECT e.ANBASE, e.NOBOD, e.CODTRI, e.JAL, + e.DATE, e.CODEVE, e.SSCODE, e.DEPT, e.NOANN, e.ROLE, e.SIREN, e.E1GSIR, + e.E1GNIC, x.annonceNum, x.annonceTxt FROM historiques.entrep e, historiques.texte x + WHERE e.E1GSIR=$siren AND e.ANBASE=x.annonceNum AND e.DATE BETWEEN 19890101 AND 20041231 + AND x.annonceTxt LIKE '%capital%' GROUP BY e.ANBASE ORDER BY e.DATE DESC"); + if ($stmt->rowCount() > 0) { + while ($ann = $stmt->fetch(\PDO::FETCH_ASSOC)) { + if ($ann['DATE'] < 19960101 && $ann['E1GSIR'] != $ann['SIREN']) { + continue; + } + $tabCodeTri = $ann['CODTRI']; + if (($ann['CODEVE']>=10 && $ann['CODEVE']<20) || + ($ann['CODEVE']>=30 && $ann['CODEVE']<42) || + ($ann['CODEVE']>=51 && $ann['CODEVE']<80)) { + if (preg_match('/Capital(?:.|)\:(.*)(eur.|f|livre)/Uis', $ann['annonceTxt'], $matches) && $tabInsee['CJ']>1999 && $tabInsee['CJ']<7000) { + $tabRet['Capital']=trim(strtr($matches[1], array(' '=>'', ',00 '=>'', '.00 '=>'')))*1; + } + if (substr(strtoupper($matches[2]), 0, 3) == 'EUR') { + $tabRet['CapitalDev']='EUR'; + } elseif (substr(strtoupper($matches[2]), 0, 3) == 'LIV') { + $tabRet['CapitalDev'] = 'GBP'; + } else { + $tabRet['CapitalDev'] = 'FRF'; + } + break; + } + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + } + if ($tabRet['CapitalDev'] != '' && $tabRet['CapitalDev'] != 'EUR') { + $dev = $tabRet['CapitalDev']; + try { + $stmt = $this->conn->executeQuery("SELECT c.devise, c.valeur, c.date, l.devNom, + l.devNomPays, l.devPaysIso FROM sdv1.devise_liste l, sdv1.devise_cours c + WHERE c.devise='$dev' and l.devIso='$dev' ORDER BY c.date DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $dev = $stmt->fetch(\PDO::FETCH_ASSOC); + $devise = $tabRet['Capital'] * $dev['valeur'] * 1; + $tabRet['CapitalLib'] = ''.$dev['devNom'].' soit '.number_format(round($devise), null, null, ' ').' EUR'; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + $timer['capital'] = microtime(true); + + // Recherche du code Tribunal du siège + if ($tabRet['CapitalSrc'] != 5) { + try { + $stmt = $this->conn->executeQuery("SELECT RC, FJ, Tribunal_Code FROM jo.bodacc_detail + WHERE siren=$siren AND RC != '' $strEvenVtLg ORDER BY Bodacc_Date_Parution DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $bodacc = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($tabRet['AutreId']=='') { + $tabRet['AutreId'] = $bodacc['RC']; + } + if ($tabRet['Tribunal'] == '') { + $tabRet['Tribunal'] = $bodacc['Tribunal_Code']; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + if ($tabRet['FJ_lib'] == '') { + try { + $stmt = $this->conn->executeQuery("SELECT FJ FROM jo.bodacc_detail + WHERE siren=$siren AND FJ != '' $strEvenVtLg ORDER BY Bodacc_Date_Parution DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $tabRet['FJ_lib'] = $result->FJ; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + // Recherche de l'activité réelle + try { + $stmt = $this->conn->executeQuery("SELECT Activite FROM jo. + bodacc_detail WHERE siren=$siren AND Activite != '' + AND Activite NOT LIKE 'non precis%' $strEvenVtLg + ORDER BY Bodacc_Date_Parution DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $annCap = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($tabInsee['CJ'] < 7000 || $tabInsee['CJ'] > 7999) { + $tabRet['Activite'] = trim($annCap['Activite']); + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($tabRet['Activite'] == '' && trim($tab['activite']) != '') { + $tabRet['Activite'] = trim($tab['activite']); + } elseif ($tabRet['Activite'] == '' + && ($tabInsee['CJ']>90 && $tabInsee['CJ']<94 + || $tabInsee['CJ']>9000 && $tabInsee['CJ']<9400)) { + try { + $stmt = $this->conn->executeQuery("SELECT Assoc_Web, Assoc_Mail, Assoc_Objet, + Assoc_NObjet, Assoc_Nom, typeAsso, Waldec FROM jo.asso WHERE siren=$siren + AND dateSuppr=0 AND (Assoc_Objet != '' OR Assoc_NObjet != '') + ORDER BY Date_Parution DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $annCap = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabRet['Activite'] = trim($annCap['Assoc_NObjet']); + if (trim($tabRet['AutreId']) == '') { + $tabRet['AutreId'] = trim($annCap['Waldec']); + } + $tabRet['nomLong'] = trim($annCap['Assoc_Nom']); + if ($tabRet['Activite'] == '') { + $tabRet['Activite'] = trim($annCap['Assoc_Objet']); + } + if ($tabRet['Web'] == '') { + $tabRet['Web'] = trim($annCap['Assoc_Web']); + } + if ($tabRet['Mail'] == '') { + $tabRet['Mail'] = trim($annCap['Assoc_Mail']); + } + if ($annCap['typeAsso'] == 'ASL' && $tabRet['FJ'] != 9150) { + $tabRet['FJ2'] = $tabRet['FJ']; + $tabRet['FJ2_Lib'] = $tabRet['FJ_lib']; + $tabRet['FJ'] = 9150; + $tabRet['FJ_lib'] = $this->getLibelleFJ(9150); + } elseif ($annCap['typeAsso'] == 'FOD') { + $tabRet['FJ_lib'].= ' (Fonds de dotation)'; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + if (trim($tabRet['AutreId'])== '') { + $tabRet['AutreId'] = trim($waldec); + } + } elseif ($tabRet['Activite']=='' && ($tabInsee['CJ']<7000 || $tabInsee['CJ']>7999)) { + try { + $stmt = $this->conn->executeQuery("SELECT e.ANBASE, e.NOBOD, e.CODTRI, e.JAL, e.DATE, + e.CODEVE, e.SSCODE, e.DEPT, e.NOANN, e.ROLE, e.SIREN, e.E1GSIR, e.E1GNIC, + x.annonceNum, x.annonceTxt FROM historiques.entrep e, historiques.texte x + WHERE e.E1GSIR=$siren AND e.ANBASE=x.annonceNum AND e.DATE BETWEEN 19890101 AND 20041231 + AND x.annonceTxt LIKE '%ctivit%' + GROUP BY e.ANBASE ORDER BY e.DATE DESC"); + if ($stmt->rowCount() > 0) { + while ($ann = $stmt->fetch(\PDO::FETCH_ASSOC)) { + if ($ann['DATE']<19960101 && $ann['E1GSIR'] != $ann['SIREN']) { + continue; + } + if ($tabCodeTri != '' && $tabCodeTri != @$ann['CODTRI']) { + $tabCodeTri = $ann['CODTRI']; + } + if (($ann['CODEVE']<20) || ($ann['CODEVE']>=30 && $ann['CODEVE']<42) || + ($ann['CODEVE']>=51 && $ann['CODEVE']<80)) { + if (preg_match('/(.*)Activit(?:e|é)(?:.|)\:(.*)(?:Adresse(?:.*|)|Commentaires?|Administration|Etablissement principal|Date d\'effet|Date.de.d.but d.activit.|Capital|Nom commercial)(?:.|)\:/Uisu', $ann['annonceTxt'], $matches)) { + if (strpos(substr($matches[1], -20), 'cess') === false && + strpos(substr($matches[1], -20), 'date') === false) { + $tabRet['Activite']=$matches[2]; + break; + } + } + } + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + $timer['activiteReelle']=microtime(true); + + $stmt = $this->conn->executeQuery("SELECT nom, prenom, naissance_nom, civilite, + fonction_code as code, fonction_lib as libelle, naissance_date AS dateNaiss, + naissance_lieu AS lieuNaiss, dirRS as rs, '' as dateEffet + FROM jo.rncs_dirigeants + WHERE siren=$siren AND actif%10=1 AND fonction_lib NOT LIKE '%Administrateur%' + ORDER BY actif DESC, fonction_lib DESC"); + if ($stmt->rowCount() == 0) { + $stmt = $this->conn->executeQuery("SELECT nom, prenom, naissance_nom, civilite, + fonction_code as code, fonction_lib as libelle, naissance_date AS dateNaiss, + naissance_lieu AS lieuNaiss, dirRS as rs, '' as dateEffet + FROM jo.rncs_dirigeants + WHERE siren=$siren AND actif%10=0 AND fonction_lib NOT LIKE '%Administrateur%' + ORDER BY actif DESC, fonction_lib DESC"); + } + + if ($stmt->rowCount() > 0) { + $k = 1; + while ($ann = $stmt->fetch(\PDO::FETCH_ASSOC)) { + if ($tabInsee['CJ']>=7000 && $tabInsee['CJ']<=7999 && !in_array($ann['libelle'], + array('Maire', 'Président', 'Directeur général'))) { + continue; + } + $tabRet['dir'.$k.'Code'] = $ann['code']; + $tabRet['dir'.$k.'Titre'] = $ann['libelle']; + $nomNaiss = ''; + if (trim($ann['naissance_nom']) != '') { + if ($ann['civilite'] == 'MME' || $ann['civilite'] == 'MLLE') { + $nomNaiss=' née '.trim($ann['naissance_nom']); + $tabRet['dir'.$k.'Genre'] = 'F'; + } elseif ($ann['civilite'] == 'M') { + $nomNaiss=' né '.trim($ann['naissance_nom']); + $tabRet['dir'.$k.'Genre'] = 'M'; + } else { + $nomNaiss=' né(e) '.trim($ann['naissance_nom']); + } + } + if (trim($ann['rs']) != '') { + $tabRet['dir'.$k.'NomPrenom'] = $ann['rs']; + if (trim($ann['nom'])!='' || trim($ann['prenom'])!='') { + $tabRet['dir'.$k.'NomPrenom'].=' repr. par '.$ann['nom'].' '.$ann['prenom']; + } + } else { + $tabRet['dir'.$k.'NomPrenom']=$ann['nom'].' '.$ann['prenom'].$nomNaiss; + $tabRet['dir'.$k.'Nom']=$ann['nom']; + $tabRet['dir'.$k.'Prenom']=$ann['prenom']; + if ($ann['civilite']=='M') { + $tabRet['dir'.$k.'Genre'] = 'M'; + } elseif ($ann['civilite']=='MME' || $ann['civilite']=='MLLE') { + $tabRet['dir'.$k.'Genre'] = 'F'; + } + } + $tabRet['dir'.$k.'DateFct'] = $ann['dateEffet']; + $tabRet['dir'.$k.'DateNaiss'] = $ann['dateNaiss']; + $tabRet['dir'.$k.'LieuNaiss'] = $ann['lieuNaiss']; + $tabRet['dir'.$k.'Genre'] = ''; + if ($k==2) { + break; + } + $k++; + } + } else { + try { + $stmt = $this->conn->executeQuery("SELECT d.num, d.dateEffet, d.Rubrique, d.fonction, d.rs, + d.nom, d.prenom, d.nomUsage, d.depart, d.dateInsert, f.libelle + FROM jo.bodacc_dirigeants d, jo.bodacc_detail b, jo.bodacc_fonctions f + WHERE b.SIREN=$siren AND b.id=d.id AND b.typeEven NOT BETWEEN 5000 AND 5700 + AND b.typeEven NOT BETWEEN 2700 AND 2900 AND d.fonction=f.codeFct + AND d.depart != 1 AND f.triCode IN ('ASS','COG','DID','DIR','GER','PCS','PDG','PRD','PRE','PRT','VIC') + GROUP BY d.fonction, d.rs, d.nom, d.prenom ORDER BY d.dateEffet DESC"); + if ($stmt->rowCount() > 0) { + $k = 1; + while ($ann = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRet['dir'.$k.'Code'] = $ann['fonction']; + $tabRet['dir'.$k.'Titre'] = $ann['libelle']; + $tabRet['dir'.$k.'NomPrenom'] = $ann['rs'].' '.$ann['nom'].' '.$ann['prenom']; + $tabRet['dir'.$k.'Nom'] = $ann['nom']; + $tabRet['dir'.$k.'Prenom'] = $ann['prenom']; + $tabRet['dir'.$k.'DateFct'] = $ann['dateEffet']; + $tabRet['dir'.$k.'Genre'] = ''; + if ($k == 2) { + break; + } + $k++; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + $timer['dirigeants']=microtime(true); + + // Recherche du site Web ou Email dans le JO ASSO + if (($tabRet['Web']=='' || $tabRet['Mail']=='') && + ($tabInsee['CJ']>90 && $tabInsee['CJ']<94 || + $tabInsee['CJ']>9000 && $tabInsee['CJ']<9400)) { + + try { + $stmt = $this->conn->executeQuery("SELECT Assoc_Web, Assoc_Mail FROM jo.asso + WHERE siren=$siren AND dateSuppr=0 AND (Assoc_Web != '' OR Assoc_Mail != '') + ORDER BY Date_Parution DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $annCap = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($tabRet['Web'] == '') { + $tabRet['Web'] = trim($annCap['Assoc_Web']); + } + if ($tabRet['Mail'] == '') { + $tabRet['Mail'] = trim($annCap['Assoc_Mail']); + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + } else { + if ($etab['source'] == 3) { + $id = $etab['source_id']; + try { + $stmt = $this->conn->executeQuery("SELECT Activite, Sous_Prefecture, Assoc_Web, + Assoc_Mail, Assoc_Objet, Assoc_Fusion, Assoc_Date_Declaration2 + FROM jo.asso WHERE id=$id AND dateSuppr=0"); + if ($stmt->rowCount() > 0) { + $annCap = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabRet['Activite'] = $annCap['Assoc_Objet']; + $tabRet['Web'] = $annCap['Assoc_Web']; + $tabRet['Mail'] = $annCap['Assoc_Mail']; + $tabRet['VilleDecl'] = $annCap['Sous_Prefecture']; + if ($tabRet['Actif'] == 0) { + $tabRet['DateClotEt'] = $annCap['Assoc_Date_Declaration2']; + } else { + $tabRet['DateCreaEt'] = $annCap['Assoc_Date_Declaration2']; + $tabRet['DateCreaEn'] = $annCap['Assoc_Date_Declaration2']; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + } + $timer['association']=microtime(true); + + // On initialise les dernères variables en prov. d'Infogreffes + if (count($etabG) > 0) { + $tabRet['DateClotEt'] = $etabG['DateRadiation']; + $tabRet['dateImmat'] = $etabG['DateCreation']; + if ($tabRet['dateImmat']*1 == 0) { + $tabRet['dateImmat'] = substr($etabG['NumRC2'], 0, 4).'0101'; + } + $tabRet['DateCreaEt'] = $tabRet['DateCreaEn'] = substr($etabG['NumRC2'], 0, 4).'0100'; + + $tabRet['FJ'] = $etabG['FJ']; + if ($etabG['FJ'] == 1900) { + $tabRet['dir1Titre'] = 'PP'; + $tabNom = explode(' ', $etabG['Nom']); + $tabNom[0] = strtoupper($tabNom[0]); + for ($i=1; isset($tabNom[$i]); $i++) { + if ($tabNom[$i] == 'EPOUSE') { + $tabNom[$i] = 'epouse'; + } elseif ($tabNom[$i-1] != 'epouse') { + $tabNom[$i] = ucwords(strtolower($tabNom[$i])); + } + } + $tabRet['dir1NomPrenom']=implode(' ', $tabNom); + } + $tabRet['FJ_lib'] = $etabG['FJLib']; + $tabRet['AutreId'] = $etabG['NumRC']; + $tabRet['NafEtab'] = $etabG['NafEtab']; + $tabRet['NafEnt'] = $etabG['NafEnt']; + $tabRet['NafEntLib'] = $etabG['NafEntLib']; + $tabRet['NafEtabLib'] = $etabG['NafEtabLib']; + $tabRet['SiretSiege'] = $etabG['Siret']; + $tabRet['DateMajRCS'] = $etab['dateMAJ']; + $tabRet['numGreffe'] = $etabG['NumGreffe']; + $tabRet['numRC'] = $etabG['NumRC2']; + $tabRet['Enseigne'] = $etabG['Enseigne']; + $iRncs = new Metier_Partenaires_MRncs(); + $tabRet['Tribunal'] = $iRncs->getCodeBodaccTribunal($etabG['NumGreffe']); + } + + if ($tabRet['Siege']==1 && $tabRet['Actif'] && $tabRet['Tribunal']=='') { + $tabRet['Tribunal'] = $tabCodeTri; + } + + // RNCS Entrep et Etab, RM + if (intval($siren) > 0) { + $stmt = $this->conn->executeQuery("SELECT siren, sirenValide, actif, numGreffe, triCode, + triId, numRC, numRC2, raisonSociale, nom, prenom, nomUsage, sigle, dateNaiss, + lieuNaiss, sexe, nationalite, pays, naf, cj, capitalMontant, capitalDevise, + capitalDevIso, dateImma, dateRad, dateRad*1 AS dateRadNum, capitalType, capitalCent, + provisoires, flux, DATE(dateUpdate) AS jourUpdate FROM jo.rncs_entrep WHERE siren=$siren"); + if ($stmt->rowCount() > 0) { + $entrep = $stmt->fetch(\PDO::FETCH_ASSOC); + // ETRANGER + if (isset($entrep['numGreffe'])) { + $tabRet['numGreffe'] = $entrep['numGreffe']; + $tabRet['numRC'] = $entrep['numRC2']; + if ((preg_match('/[A-Z]/i', substr($tabRet['AutreId'], 2, 2)) && !preg_match('/[A-Z]/i', substr($tabRet['AutreId'], 0, 2))) || $tabRet['AutreId']=='') { + $tabRet['AutreId'] = $etabG['NumRC2']; + } + $tabRet['Tribunal'] = $entrep['triCode']; + if (strtoupper(trim($entrep['raisonSociale'])) != strtoupper(trim($tabRet['Nom']))) { + $tabRet['nomLong'] = strtoupper($entrep['raisonSociale']); + } + if (strtoupper(trim($entrep['sigle'])) != strtoupper(trim($tabRet['Sigle']))) { + $tabRet['sigleLong'] = strtoupper($entrep['sigle']); + } + $tabRet['dateImmat'] = $entrep['dateImma']; + $tabRet['dateRad'] = $entrep['dateRad']; + $tabRet['Capital'] = $entrep['capitalMontant']+($entrep['capitalCent']/100); + $tabRet['CapitalDev'] = $entrep['capitalDevIso']; + $tabRet['CapitalType'] = trim(strtoupper(substr($entrep['capitalType'], 0, 1))); + + // Par défaut, la Forme juridique qui fait foie est celle de l'INPI + $fjInpi = $entrep['cj']*1; + if ($tabRet['FJ']*1 != $fjInpi && $fjInpi>0) { + $tabRet['FJ2'] = $tabRet['FJ']; + $tabRet['FJ2_Lib'] = $tabRet['FJ_lib']; + $tabRet['FJ'] = $fjInpi; + $tabRet['FJ_lib'] = $this->getLibelleFJ($fjInpi); + } else { + $tabRet['FJ2'] = $tabRet['FJ']; + $tabRet['FJ2_Lib'] = $tabRet['FJ_lib']; + } + if ($fjInpi >= 1000 && $fjInpi < 2000) { + $tabRet['dir1Titre'] = 'Personne physique'; + $tabRet['dir1Code'] = '1050'; + $tabRet['dir1NomPrenom'] = strtoupper($entrep['nom']).' '. + ucwords(strtolower($entrep['prenom'])); + $tabRet['dir1Nom'] = strtoupper($entrep['nom']); + $tabRet['dir1Prenom'] = ucwords(strtolower($entrep['prenom'])); + $tabRet['dir1NomUsage'] = strtoupper($entrep['nomUsage']); + $tabRet['dir1DateNaiss'] = $entrep['dateNaiss']; + $tabRet['dir1LieuNaiss'] = $entrep['lieuNaiss']; + $tabRet['dir1Genre'] = $entrep['sexe']; + } + + if ($tabRet['DateMajRCS'] == '') { + if ($entrep['jourUpdate'] != '0000-00-00') { + $tabRet['DateMajRCS'] = $entrep['jourUpdate']; + } else { + $tabRet['DateMajRCS'] = $entrep['flux']; + } + } + // On signal que l'entreprise est active au RCS + if ($entrep['actif'] == 1 || $entrep['actif'] == 11) { + $tabRet['EntActiveRCS'] = 1; + } + // On signal que l'entreprise est radié du RCS + else { + $tabRet['EntActiveRCS'] = 0; + // On signal que l'entreprise est radié du RCS + if ($tabRet['SituationJuridique'] == '') { + $tabRet['SituationJuridique'] = 'RR'; + } + } + + // Spécificité EIRL + if ($fjInpi == 1000) { + try { + $stmt = $this->conn->executeQuery("SELECT denomination, activite FROM jo.rncs_eirl WHERE siren=$siren"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $tabRet['Activite'] = $result->activite; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + // Informations sur l'établissement au RNCS + try { + $stmt = $this->conn->executeQuery("SELECT id, siege, actif, enseigne, + nomCommercial, adrNumVoie, adrIndRep, adrLibVoie, adrTypeVoie, adrVoie, cp, + commune, adrComp, adresse1, adresse2, adresse3, naf, dateFermeture, flux, + dateInsert, DATE(dateUpdate) AS jourUpdate FROM jo.rncs_etab + WHERE siren=$siren AND nic=$nic"); + if ($stmt->rowCount() > 0) { + $rncsEtab = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabRet['EtabActifRCS'] = 0; + if ($rncsEtab['jourUpdate'] != '0000-00-00' && + str_replace('-', '', $rncsEtab['jourUpdate'])*1 > str_replace('-', '', $tabRet['DateMajRCS'])) { + $tabRet['DateMajRCS'] = $rncsEtab['jourUpdate']; + } + // On signal que l'établissement est actif au RCS + if ($rncsEtab['actif']*1 == 1) { + $tabRet['EtabActifRCS'] = 1; + } + $tabRet['NomCommercial'] = $rncsEtab['nomCommercial']; + $tabRet['enseigneLong'] = $rncsEtab['enseigne']; + + if ($codePaysIso2 != 'FR' && $codePaysIso2 != '') { + $tabRet['Adresse'] = trim(preg_replace('/ +/', ' ', $rncsEtab['adrNumVoie'] .' '.$rncsEtab['adrIndRep'].' '. + $rncsEtab['adrTypeVoie'].' '.$rncsEtab['adrVoie'])); + $tabRet['Adresse2'] = trim(preg_replace('/ +/', ' ', $rncsEtab['adrComp'])); + $tabRet['AdresseNum'] = $rncsEtab['adrNumVoie']; + $tabRet['AdresseBtq'] = $rncsEtab['adrIndRep']; + $tabRet['AdresseVoie'] = $rncsEtab['adrTypeVoie']; + $tabRet['AdresseRue'] = $rncsEtab['adrVoie']; + $tabRet['CP'] = $rncsEtab['cp']; + $tabRet['Ville'] = $rncsEtab['commune']; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + $timer['infosRNCS'] = microtime(true); + } elseif ($siren > 1000) { + // Recherche au RM + try { + $stmt = $this->conn->executeQuery("SELECT siren, actif, numRM, denomination, + sigle, nomCommercial, enseigne, fj, effectif, aprm, debutActivite, activite, + adresse, cp, ville, cessation, radiation, nom, prenom, nomUsage, dateNaiss, + lieuNaiss, qualite, qualif, dateQualif, dateFctDeb, dateFctFin, + DATE(dateUpdate) AS jourUpdate, DATE(dateInsert) AS dateInsert + FROM jo.artisanat WHERE siren=$siren"); + if ($stmt->rowCount() > 0) { + $rmEntrep = $stmt->fetch(\PDO::FETCH_ASSOC); + if (isset($entrep['numRM'])) { + $tabRet['AutreId'] = $rmEntrep['numRM']; + if ($tabRet['Activite']=='') { + $tabRet['Activite'] = $rmEntrep['activite']; + } + if ($tabRet['APRM'] == '') { + $tabRet['APRM'] = $rmEntrep['aprm']; + $tabRet['APRM_Lib'] = $this->getLibelleNafa($entrep['aprm']); + } + + if (strtoupper(trim($rmEntrep['nom'].' '.$rmEntrep['prenom'].' '.$rmEntrep['nomUsage'])) != strtoupper(trim($tabRet['Nom']))) { + $tabRet['nomLong'] = strtoupper(trim($rmEntrep['nom'].' '.$rmEntrep['prenom'].' '.$rmEntrep['nomUsage'])); + } + if (strtoupper(trim($rmEntrep['sigle'])) != strtoupper(trim($tabRet['Sigle']))) { + $tabRet['sigleLong']= strtoupper($rmEntrep['sigle']); + } + + $tabRet['dateImmat'] = $rmEntrep['debutActivite']; + $tabRet['dateRad'] = $rmEntrep['radiation']; + + // Si on est au greffe, on est artisan commercant + // Artisan Commerçant + if ($tabRet['numGreffe']*1 > 0) { + $fjInpi = 1100; + } + // Artisan + else { + $fjInpi = 1300; + } + + // Par défaut, la Forme juridique qui fait foie est celle de l'INPI + if ($tabRet['FJ']*1 != $fjInpi) { + $tabRet['FJ2'] = $tabRet['FJ']; + $tabRet['FJ2_Lib'] = $tabRet['FJ_lib']; + $tabRet['FJ'] = $fjInpi; + $tabRet['FJ_lib'] = $this->getLibelleFJ($fjInpi); + } else { + $tabRet['FJ2'] = $tabRet['FJ']; + $tabRet['FJ2_Lib'] = $tabRet['FJ_lib']; + } + + $tabRet['dir1Titre'] = ucwords(strtolower($rmEntrep['qualite'].' '.$rmEntrep['qualif'])); + $tabRet['dir1NomPrenom'] = strtoupper($rmEntrep['nom']).' '.ucwords(strtolower($rmEntrep['prenom'])); + $tabRet['dir1Nom'] = strtoupper($rmEntrep['nom']); + $tabRet['dir1Prenom'] = ucwords(strtolower($rmEntrep['prenom'])); + $tabRet['dir1DateNaiss'] = $rmEntrep['dateNaiss']; + $tabRet['dir1LieuNaiss'] = $rmEntrep['lieuNaiss']; + + if ($tabRet['DateMajRCS'] == '') { + if ($rmEntrep['jourUpdate'] != '0000-00-00') { + $tabRet['DateMajRCS'] = $rmEntrep['jourUpdate']; + } else { + $tabRet['DateMajRCS'] = $rmEntrep['dateInsert']; + } + } + // On signal que l'entreprise est active au RCS + if ($rmEntrep['actif'] == 1 || $rmEntrep['actif'] == 11) { + $tabRet['EntActiveRCS'] = 1; + } + // On signal que l'entreprise est radié du RCS + else { + $tabRet['EntActiveRCS'] = 0; + // On signal que l'entreprise est radié du RCS + if ($tabRet['SituationJuridique'] == '') { + $tabRet['SituationJuridique'] = 'RR'; + } + } + + $tabRet['NomCommercial'] = $rmEntrep['nomCommercial']; + $tabRet['enseigneLong'] = $rmEntrep['enseigne']; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + } + + if ($tabRet['dir1Genre'] == 'M' || $tabRet['dir1Genre'] == 'F') { + $tabRet['dir1Titre'] = 'Personne physique'; + $tabRet['dir1Code'] = '1050'; + } + + if ($accesDist && + // Département couvert par Infogreffe + !in_array($tabRet['Dept'], array(57, 67, 68, 97, 98, 99)) && + // Forme Juridique présente au greffe + (in_array($tabInsee['CJ'], array(1100,1200,1300,1700,9900)) || + ($tabInsee['CJ']>=3100 && $tabInsee['CJ']<=3299) || + ($tabInsee['CJ']>=4100 && $tabInsee['CJ']<=4199) || + ($tabInsee['CJ']>=5100 && $tabInsee['CJ']<=5899) || + ($tabInsee['CJ']>=6100 && $tabInsee['CJ']<=6599) || + preg_match('/EIRL/', $nom) || preg_match('/EIRL/', $nom2) || + preg_match('/EIRL/', $tabRet['Sigle']) || preg_match('/EIRL/', $tabRet['Enseigne']) || + preg_match('/EIRL/', $tabRet['Adresse']) || preg_match('/EIRL/', $tabRet['Adresse2']) + ) + && ($tabInsee['CJ'] == 1700 || // Agents commerciaux (uniquement au Greffes RSAC) + $tabRet['numRC'] == '' || // Numéro de RCS absent = Anomalie (<à3%) + $tabRet['Tribunal'] == '' || // Tribunal absent = anomalie + str_replace('-', '', $tabRet['dateImmat'])*1 == 0 || // Pas de date d'immat = anomalie (<à9%) + ($nbEtab*1 == 0 && str_replace('-', '', $tabRet['dateRad'])*1 == 0) // Inactif sans date de RAD + ) + ) { + if ($this->debugtime) { + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;MGreffes Avant\n", FILE_APPEND); + $tdeb = microtime(1); + } + + $iGeffes = new Metier_Partenaires_MGreffes(); + $etabG = $iGeffes->getIdentite($siren); + $iRncs = new Metier_Partenaires_MRncs(); + + if ($this->debugtime) { + $duree=round(microtime(1)-$tdeb, 3); + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;MGreffes APRES ($duree s)\n", FILE_APPEND); + } + + if ($etabG) { + if ($tabRet['numRC'] == '') { + $tabRet['numRC'] = $etabG['NumRC2']; + } + if ($tabRet['Tribunal']=='') { + $tabRet['Tribunal'] = $iRncs->getCodeBodaccTribunal($etabG['NumGreffe']); + } + if (str_replace('-', '', $tabRet['dateImmat'])*1 == 0) { + $tabRet['dateImmat'] = $etabG['DateCreation']; + } + if (str_replace('-', '', $tabRet['dateRad'])*1 == 0) { + $tabRet['dateRad'] = $etabG['DateRadiation']; + if (str_replace('-', '', $tabRet['dateRad'])*1 > 0 && $tabRet['SituationJuridique'] == '') { + $tabRet['SituationJuridique'] = 'RR'; + } + } + if (preg_match('/[A-Z]/i', substr($tabRet['AutreId'], 2, 2)) || $tabRet['AutreId']=='') { + $tabRet['AutreId'] = $etabG['NumRC2']; + } + } + $timer['infosInfogreffes'] = microtime(true); + } + + // Si il n'y a aucun établissement actif et qu'on est radié au RCS : on part chercher la dernière annonce de Radiation au Bodacc + if ($entrep['dateRadNum'] == 0 && ($nbEtab*1 == 0 || isset($entrep['numGreffe']) && $entrep['actif'] == 0)) { + $tabRad = $this->getAnnoncesLegales($siren, 0, 'R'); + // Il y a au moins une annonce de radiation au Bodacc + if (count($tabRad) > 0) { + if ($tabRet['SituationJuridique'] == '') { + $tabRet['SituationJuridique'] = 'RP'; + } + $dateEff = str_replace('-', '', $tabRad[0]['dateEffet'])*1; + $dateJug = str_replace('-', '', $tabRad[0]['dateJugement'])*1; + $datePar = str_replace('-', '', $tabRad[0]['DateParution'])*1; + if ($dateEff > 0) { + $tabRet['dateRad'] = $dateEff; + } elseif ($dateJug > 0) { + $tabRet['dateRad'] = $dateJug; + } elseif ($datePar > 0) { + $tabRet['dateRad'] = $datePar; + } + } + $timer['infosRadiation'] = microtime(true); + } + + // Eléments Financiers en provenance du dernier Bilan + try { + $stmt = $this->conn->executeQuery("SELECT siren, dateExercice, dureeExercice, monnaie, + typeBilan, unite, postes, dateProvPartenaire, dateInsert FROM jo.bilans + WHERE siren=$siren AND typeBilan IN ('N','S') ORDER BY dateExercice DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $bilEntrep = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabRet['bilanAnnee'] = substr($bilEntrep['dateExercice'], 0, 4); + $tabRet['bilanDate'] = $bilEntrep['dateExercice']; + $tabRet['bilanMois'] = $bilEntrep['dureeExercice']; + $tabRet['bilanDevise'] = $bilEntrep['monnaie']; + if ($bilEntrep['dateProvPartenaire'] > 0) { + $tabRet['bilanDateMaj'] = Metier_Util_Date::dateT('Ymd', 'Y-m-d', $bilEntrep['dateProvPartenaire']); + } else { + $tabRet['bilanDateMaj'] = Metier_Util_Date::dateT('Y-m-d', 'Y-m-d', $bilEntrep['dateInsert']); + } + + switch (strtoupper(trim($bilEntrep['unite']))) { + case 'M': $unite = 'M'; break; + case 'K': $unite = 'K'; break; + default: $unite = 'U'; break; + } + $tabTmp = explode(';', $bilEntrep['postes']); + $tabBilan = array(); + foreach ($tabTmp as $i=>$strTmp) { + $tabTmp2 = explode('=', $strTmp); + if (isset($tabTmp2[1])) { + if ($unite == 'K' && $tabTmp2[0] != 'YP' && $tabTmp2[0] != 'YP1' && $tabTmp2[0] != '376') { + $tabBilan[$tabTmp2[0]] = $tabTmp2[1]*1000; + } elseif ($unite=='M' && $tabTmp2[0] != 'YP' && $tabTmp2[0] != 'YP1' && $tabTmp2[0] != '376') { + $tabBilan[$tabTmp2[0]] = $tabTmp2[1]*1000000; + } else { + $tabBilan[$tabTmp2[0]] = $tabTmp2[1]; + } + } + } + if (strtoupper($bilEntrep['typeBilan'])=='S') { + $mBil = new Metier_Partenaires_MBilans(); + $tabTmp = $mBil->bilanSimplifie2Normal($tabBilan); + $tabBilan = array_merge($tabTmp, $tabBilan); + } + + $tabRet['bilanDA'] = $tabBilan['DA']; + $tabRet['bilanFL'] = $tabBilan['FL']; + $tabRet['bilanHN'] = $tabBilan['HN']; + $tabRet['bilanYP'] = $tabBilan['YP']; + + // Fiche AGS + $tabRet['bilanPQ'] = $tabBilan['PQ']; + $tabRet['bilanPU'] = $tabBilan['PU']; + $tabRet['bilanPY'] = $tabBilan['PY']; + $tabRet['bilanQC'] = $tabBilan['QC']; + + // Tranche de CA Bilan Réel si TCA Insee ou Estimée < dernière clôture + if ($tabRet['AnneeTCA'] <= $tabRet['bilanAnnee'] && $tabInsee['ACTIF']==1) { + $tabRet['TrancheCA'] = $this->getTca($tabBilan['FL']); + $tabRet['TrancheCALib'] = self::$tabTCA[$tabRet['TrancheCA']]; + $tabRet['TrancheCAType'] = 'R'; + $tabRet['AnneeTCA'] = $tabRet['bilanAnnee']; + } + + // Contrôle de la cohérence du type d'exploitation + if ($tabBilan['AH'] > 0 && // Je possède un fond commercial + $tabRet['TypeExploitation'] != 2 && // et je ne suis pas Loueur d'un fond + $tabRet['TypeExploitation'] != 3 && // et je ne suis pas Prestataire de personnel + $tabRet['TypeExploitation'] != 10) { // et je ne suis pas exploitant direct + $tabRet['TypeExploitation'] = 10; + } + + // Controle de cohérence du capital car parfois absent en Alsace Moselle au RNCS + if ($tabRet['FJ'] > 2000 && $tabRet['Capital'] == 0 && $tabRet['CapitalDev'] == '') { + $tabRet['Capital'] = $tabRet['bilanDA']; + $tabRet['CapitalDev'] = $tabRet['bilanDevise']; + } + + $timer['infosBilan'] = microtime(true); + } elseif ($caEstime > 0 && $tabInsee['ACTIF'] == 1) { + $tabRet['bilanAnnee'] = date('Y')-2; + $tabRet['bilanFLestime'] = $caEstime; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + $tabRet['TribunalLib'] = $this->iBodacc->getTribunalNom($tabRet['Tribunal']); + + if ($this->debugtime) { + $duree = round(microtime(1)-$tdebIni, 3); + file_put_contents(LOG_PATH.'/accesDistant.log', date('YmdHis').";$siren;getIdentiteEntreprise Fin ($duree s) ===\n", FILE_APPEND); + } + + // Si on n'a trouvé aucune activité, on prend le libellé de l'activité pages Jaunes + if ($tabRet['Activite'] == '' && $activitePJ_An8 != '') { + $tabRet['Activite'] = $activitePJ_An8; + } + + // Numero de Registre du métier si nécessaire + if (($tabRet['FJ']==1100 || $tabRet['FJ']==1300 || $tabRet['FJ']==11 || $tabRet['FJ']==13 || $tabInsee['APRM'] != '') + && ($tabRet['Dept']=='2A' || $tabRet['Dept']=='2B' || $tabRet['Dept']<98)) { + // Artisan Commerçant OU Artisan en FRANCE + $tabRet['NumRM'] = $siren.' RM '.$tabRet['Dept']; + // Ajaccio + if ($tabRet['Dept'] == '2A') { + $tabRet['NumRM'].= '.1'; + } + // Bastia + elseif ($tabRet['Dept'] == '2B') { + $tabRet['NumRM'].= '.2'; + } elseif ($tabRet['Dept'] == 97) { + $tabRet['NumRM'].= substr($tabRet['codeCommune'], 0, 1); + } + } + + // Recherche des infos boursières + $iBourse = new Metier_Partenaires_MBourse(); + $bourse = $iBourse->getInfosBourse($siren); + $tabRet['Bourse'] = array( + 'placeCotation' => $bourse['placeCotation'], + 'nombreTitres' => $bourse['nombreTitres'], + 'capitalisation' => $bourse['close']*$bourse['nombreTitres'], + 'derCoursDate' => $bourse['date'], + 'derCoursCloture' => $bourse['close'] + ); + $timer['infosBoursieres'] = microtime(true); + } + + // Date de dernière mise à jour + $lastMaj = str_replace('-', '', $tabRet['DateMajINSEE'])*1; + if (str_replace('-', '', $tabRet['DateMajRCS'])*1 > $lastMaj) { + $lastMaj = str_replace('-', '', $tabRet['DateMajRCS'])*1; + } + if (str_replace('-', '', $tabRet['bilanDateMaj'])*1>$lastMaj) { + $lastMaj = str_replace('-', '', $tabRet['bilanDateMaj'])*1; + } + if (str_replace('-', '', $tabRet['dateMajANN'])*1>$lastMaj) { + $lastMaj = str_replace('-', '', $tabRet['dateMajANN'])*1; + } + $tabRet['dateMajIdentite'] = Metier_Util_Date::dateT('Ymd', 'Y-m-d', $lastMaj); + + return $tabRet; + } + + /** + * Dirigeants Opérationnel + * @param string $siren + * @param string $id + * @return array + */ + public function getDirigeantsOp($siren, $id = null) + { + $siren = $siren*1; + $tabRet = array(); + + $where = "siren=$siren AND d.codFct=f.codeFct AND dateSuppr='0000-00-00 00:00:00.000000'"; + if ($id != null) { + $where = "id=$id AND d.codFct=f.codeFct AND dateSuppr='0000-00-00 00:00:00.000000'"; + } + + try { + $stmt = $this->conn->executeQuery("SELECT id, siren, nic, civ, nom, prenom, nom_usage, + lieuNais, dateNais, d.codFct, f.libelle, tel, fax, email, dateInsert, dateUpdate + FROM sdv1.dirigeantsOp d, jo.bodacc_fonctions f WHERE $where"); + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRet[] = array( + 'Id' => $row['id'], + 'Fonction' => $row['codFct'], + 'Titre' => $row['libelle'], + 'Societe' => '', + 'Civilite' => $row['civ'], + 'Nom' => trim(strtoupper($row['nom'])), + 'Prenom' => ucwords(strtolower($row['prenom'])), + 'NomUsage' => $row['nom_usage'], + 'NaissDate' => $row['dateNais'], + 'NaissVille' => $row['lieuNais'], + 'NaissDepPays' => '', + 'Tel' => $row['tel'], + 'Fax' => $row['fax'], + 'Email' => $row['email'], + 'Ancien' => 0, + 'DateFct' => '', + 'Cinf' => 0, + ); + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return $tabRet; + } + + /** + * Retourne les dirigeants actuelles ou l'historique + * @param string $siren + * @param boolean $histo + * @return array + */ + public function getDirigeants($siren, $histo = true) + { + $siren = intval($siren); + $tabRet = array(); + + if ($histo) { + try { + $stmt = $this->conn->executeQuery("SELECT d.num, d.dateEffet, d.Rubrique, d.fonction, + d.dirSiren, d.rs, d.nom, d.prenom, d.nomUsage, d.depart, d.dateInsert, f.libelle + FROM jo.bodacc_dirigeants d, jo.bodacc_detail b, jo.bodacc_fonctions f + WHERE b.SIREN=$siren AND b.id=d.id AND b.typeEven NOT BETWEEN 5000 AND 5700 AND b.typeEven + NOT BETWEEN 2700 AND 2900 AND d.fonction=f.codeFct + GROUP BY d.fonction, d.rs, d.nom, d.prenom + ORDER BY d.dateInsert DESC, d.dateEffet DESC, d.fonction DESC"); + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRet[] = array( + 'Fonction' => $row['fonction'], + 'Titre' => $row['libelle'], + 'Siren' => $row['dirSiren'], + 'Societe' => $row['rs'], + 'Nom' => trim(strtr($row['nom'], array( + "Modification d'"=>'', + "Modification de"=>'', + "Nomination d'un"=>'', + ))), + 'Prenom' => $row['prenom'], + 'NomUsage' => $row['nomUsage'], + 'Ancien' => $row['depart'], + 'DateFct' => $row['dateEffet'], //Date au format AAAA-MM-DD + ); + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + try { + $stmt = $this->conn->executeQuery("SELECT e.ANBASE, e.NOBOD, e.CODTRI, e.JAL, e.DATE, + e.CODEVE, e.SSCODE, e.DEPT, e.NOANN, e.ROLE, e.SIREN, e.E1GSIR, e.E1GNIC, + x.annonceNum, x.annonceTxt FROM historiques.entrep e, historiques.texte x + WHERE e.E1GSIR=$siren AND e.ANBASE=x.annonceNum + AND e.DATE BETWEEN 19960101 AND 20050101 AND x.annonceTxt LIKE '%Administration%' + GROUP BY e.ANBASE ORDER BY e.DATE DESC"); + if ($stmt->rowCount() > 0) { + while ($ann = $stmt->fetch(\PDO::FETCH_ASSOC)) { + if (($ann['CODEVE']<20) || ($ann['CODEVE']>=30 && $ann['CODEVE']<42) + || ($ann['CODEVE']>=51 && $ann['CODEVE']<80)) { + $pattern = '/Administration(?:.|)\:(.*)(?:Adresse.*|Commentaires?|Activit(?:e|é)|Etablissement principal|Date d\'effet|Date.de.d.but d.activit.)(?:.|)\:/Uisu'; + if (preg_match($pattern, $ann['annonceTxt'], $matches)) { + $iDir = 0; + $tabAdministration = $this->iBodacc->getDirigeants($matches[1]); + foreach ($tabAdministration as $tabDir) { + $nom = preg_replace('/ +/u', ' ', $tabDir['nom']); + $nom = trim(strtr($nom, array( + "Modification d'" => '', + "Modification" => '', + "Modification de" => '', + "Nomination d'un" => '', + "Nomination en qualité d'" => '', + "Nomination en qualité de" => '', + "dont le est" => '', + "nouvel" => '', + "partant" => '', + "ancien d'honneur" => '', + "nouveaux" => '', + "nouveau" => '', + "ancien" => '', + "Nouveau" => '', + "Cette société se constitue Date de début d'" => '', + ))); + if ($nom != '') { + $tabRet[] = array( + 'Fonction' => $tabDir['fonction'], + 'Titre' => $this->iBodacc->getFctDir($tabDir['fonction']), + 'Societe' => $tabDir['rs'], + 'Nom' => $nom, + 'Prenom' => $tabDir['prenom'], + 'NomUsage' => $tabDir['nomUsage'], + 'Ancien' => $tabDir['depart'], + 'DateFct' => Metier_Util_Date::dateT('Ymd', 'Y-m-d', $ann['DATE']), + ); + // Mauvaise idée performance + try { + $this->conn->insert('jo.bodacc_dirigeants_histo', array( + 'siren' => $siren, + 'id' => $ann['ANBASE'], + 'num' => $iDir, + 'dateEffet' => Metier_Util_Date::dateT('Ymd', 'Y-m-d', $ann['DATE']), + 'fonction' => $tabDir['fonction'], + 'rs' => $tabDir['rs'], + 'nom' => $nom, + 'prenom' => $tabDir['prenom'], + 'nomUsage' => $tabDir['nomUsage'], + 'depart' => $tabDir['depart'], + )); + } catch (\Doctrine\DBAL\DBALException $e) { + } + $iDir++; + } + } //End foreach + } + } + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + if (!$histo || ($histo && count($tabRet) == 0)) { + try { + $stmt = $this->conn->executeQuery("SELECT siren, raisonSociale, LPAD(dirSiren,9,0) AS dirSiren, + dirRS, civilite, nom, prenom, naissance_nom, naissance_date, naissance_lieu, + fonction_code, fonction_lib, cinf, dateFin, flux, dateInsert + FROM jo.rncs_dirigeants WHERE siren=$siren AND actif%10=1"); + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + if ($row['naissance_date'] != '0000-00-00') { + $dateNaiss = Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $row['naissance_date']); + } else { + $dateNaiss = ''; + } + + if ($row['flux'] != '0000-00-00') { + $dateModif = Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $row['flux']); + } else { + $dateModif = Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $row['dateInsert']); + } + + $nom = trim($row['nom']); + $nomUsage=''; + if (trim($row['naissance_nom']) != '') { + $nom = trim($row['naissance_nom']); + $nomUsage = trim($row['nom']); + } + $tabRet[] = array( + 'Fonction' => $row['fonction_code'], + 'Titre' => $row['fonction_lib'], + 'Siren' => $row['dirSiren'], + 'Societe' => $row['dirRS'], + 'Civilite' => $row['civilite'], + 'Nom' => $nom, + 'Prenom' => $row['prenom'], + 'NomUsage' => $nomUsage, + 'NaissDate' => $dateNaiss, + 'NaissVille' => $row['naissance_lieu'], + 'NaissDepPays' => '', // 25 + 'Ancien' => 0, + 'DateFct' => $dateModif, //Format AAAA-MM-DD + 'Cinf' => $row['cinf'], + ); + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + /** Recherche de CAC si liste des dirigeants actifs **/ + if (!$histo) { + try { + $stmt = $this->conn->executeQuery("SELECT d.num, d.dateEffet, d.Rubrique, d.fonction, + LPAD(d.dirSiren,9,0) AS dirSiren, d.rs, d.nom, d.prenom, d.nomUsage, d.depart, + d.dateInsert, f.libelle + FROM jo.bodacc_dirigeants d, jo.bodacc_detail b, jo.bodacc_fonctions f + WHERE b.SIREN=$siren AND b.id=d.id AND b.typeEven NOT BETWEEN 5000 AND 5700 + AND b.typeEven NOT BETWEEN 2700 AND 2900 AND d.fonction=f.codeFct + AND d.fonction BETWEEN 300 AND 304 GROUP BY d.fonction, d.rs, d.nom, d.prenom + ORDER BY d.dateEffet DESC, d.fonction DESC"); + if ($stmt->rowCount() > 0) { + $k = 0; + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $rs = trim(strtoupper($row['rs'])); + $nom = preg_replace('/en fonction le .*/i', '', $row['nom']); + $nom = preg_replace('/Nomination .*/i', '', $nom); + $nom = preg_replace('/Modification .*/i', '', $nom); + $nom = preg_replace('/Nouvelles?\s+$/i', '', trim($nom)); + $nom = preg_replace('/Nouveaux?\s+$/i', '', trim($nom)); + $nom = preg_replace('/ancien.*/i', '', $nom); + $nom = preg_replace('/en remplacement d.*/i', '', $nom); + $nom = trim(strtoupper(preg_replace('/(\.|,)$/', '', trim($nom)))); + $prenom = trim($row['prenom']); + if ($prenom == '' && $rs== '' && $nom != '') { + $rs = $nom; + $nom = ''; + } + $tabRet[] = array( + 'Fonction' => $row['fonction'], + 'Titre' => $row['libelle'], + 'Siren' => $row['dirSiren'], + 'Societe' => $rs, + 'Nom' => $nom, + 'Prenom' => $prenom, + 'NomUsage' => $row['nomUsage'], + 'Ancien' => $row['depart'], + 'DateFct' => $row['dateEffet'], //Format AAAA-MM-DD + ); + $k++; + // On s'arrête à 2 CAC (pb des co-cac non gérés) + if ($k>1) { + break; + } + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + /** Si on ne trouve absolument rien, on regarde quand même dans l'historique RNCS **/ + if (count($tabRet)==0) { + try { + $stmt = $this->conn->executeQuery("SELECT siren, raisonSociale, + LPAD(dirSiren,9,0) AS dirSiren, dirRS, civilite, nom, prenom, naissance_nom, + naissance_date, naissance_lieu, fonction_code, fonction_lib, cinf, dateFin, + flux, dateInsert, date(dateUpdate)*1 as dateUpdate + FROM jo.rncs_dirigeants WHERE siren=$siren AND actif%10=0 + ORDER BY dateUpdate DESC"); + if ($stmt->rowCount() > 0) { + $dateUpdatePre = null; + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + if ($row['naissance_date'] != '0000-00-00') { + $dateNaiss = Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $row['naissance_date']); + } else { + $dateNaiss = ''; + } + if ($row['flux'] != '0000-00-00') { + $dateModif = Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $row['flux']); + } else { + $dateModif = Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $row['dateInsert']); + } + + if ($dateUpdatePre === null) { + $dateUpdatePre = $row['dateUpdate']; + } + if ($row['dateUpdate'] != $dateUpdatePre) { + break; + } + $tabRet[] = array( + 'Fonction' => $row['fonction_code'], + 'Titre' => $row['fonction_lib'], + 'Siren' => $row['dirSiren'], + 'Societe' => $row['dirRS'], + 'Civilite' => $row['civilite'], + 'Nom' => trim($dir['nom']), + 'Prenom' => $row['prenom'], + 'NomUsage' => '', + 'NaissDate' => $dateNaiss, + 'NaissVille' => $row['naissance_lieu'], + 'NaissDepPays' => '', // 25 + 'Ancien' => 1, + 'DateFct' => $dateModif, //Format AAAA-MM-DD + 'Cinf' => $row['cinf'], + ); + $dateUpdatePre = $row['dateUpdate']; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + if (count($tabRet) == 0) { + if ($tabIdentite['FJ']*1 > 1000 && $tabIdentite['FJ']*1 < 2000) { + $tabTmp = explode(' ', $tabIdentite['Nom']); + $nom = $prenom = ''; + foreach ($tabTmp as $mot) { + if (strtoupper($mot) == $mot) { + $nom.= ' '.$mot; + } else { + $prenom.= ' '.$mot; + } + } + if ($etab['Civilite']*1==1) { + $genre = 'Monsieur '; + $civilite = 'M'; + } elseif ($etab['Civilite']*1==2) { + $genre = 'Madame '; + $civilite = 'MME'; + } else { + $genre = ''; + $civilite = ''; + } + try { + $stmt = $this->conn->executeQuery("SELECT SIREN, CJ, CIVILITE, DIR_DATEN, DIR_LIEUN + FROM insee.identite WHERE SIREN=$siren AND (DIR_DATEN>0 OR DIR_LIEUN != '') + ORDER BY DIR_DATEN DESC, DIR_LIEUN DESC"); + $row = $stmt->fetch(\PDO::FETCH_ASSOC); + $tabRet[] = array( + 'Titre' => 'Personne physique', + 'Societe' => '', + 'Civilite' => $civilite, + 'Nom' => trim($nom), + 'Prenom' => trim($prenom), + 'NomUsage' => '', + 'NaissDate' => Metier_Util_Date::dateT('Ymd', 'd/m/Y', $row['DIR_DATEN']), + 'NaissVille' => $row['DIR_LIEUN'], + 'NaissDepPays' => '', + 'Ancien' => 0, + 'DateFct' => $tabIdentite['DateCrea'], + ); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + try { + $this->conn->insert('jo.rncs_dirigeants', array( + 'siren' => $siren, + 'raisonSociale' => $etab['Nom'], + 'civilite' => $civilite, + 'nom' => trim($nom), + 'prenom' => trim($prenom), + 'naissance_nom' => '', + 'naissance_date'=> $row['DIR_DATEN'], + 'naissance_lieu'=> $row['DIR_LIEUN'], + 'fonction_code' => 1050, + 'fonction_lib' => 'Personne physique', + 'actif' => 1, + 'dateInsert' => date('YmdHis'), + 'source' => 'inp', + )); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + } + + return $tabRet; + } + + /** + * Retourne le nombre d'annonces + * @param string $siren + * @param number $idAnnonce + * @param string $rubrique + * @param string $deleted + * @return int + */ + public function getAnnoncesLegalesCount($siren, $idAnnonce = 0, $rubrique = '', $deleted = false) + { + // --- Where Bodacc + $sqlBodaccWhere = "d.siren=$siren"; + $sqlBodaccWhere.= $this->getAnnoncesLegalesRubrique('bodacc', $rubrique); + $sqlBodaccWhere.= " AND d.id=b.id AND b.Tribunal_Code=t.triCode"; + // --- Annonces supprimées ou rectifiées + if ($deleted === true) { + $sqlBodaccWhere.= " AND (d.dateSuppr=0 OR d.dateSuppr!='0000-00-00 00:00:00' AND d.idSuppr=0) "; + } else { + $sqlBodaccWhere.= " AND d.dateSuppr=0 "; + } + $sqlBodacc = $this->getAnnoncesLegalesBodacc(true)." WHERE ".$sqlBodaccWhere; + + // --- Where Histo + $sqlHistoWhere = "e.E1GSIR=$siren"; + $sqlHistoWhere.= $this->getAnnoncesLegalesRubrique('histo', $rubrique); + $sqlHistoWhere.= " AND e.ANBASE=x.annonceNum AND e.DATE BETWEEN 19890101 AND 20041231"; + $sqlHistoWhere.= " AND e.E1GSIR=e.SIREN"; + $sqlHistoWhere.= " GROUP BY e.ANBASE ORDER BY e.DATE DESC"; + $sqlHisto = $this->getAnnoncesLegalesHisto(true)." WHERE ".$sqlHistoWhere; + + // --- Where Annonce + $sqlAnnonceWhere = "a.siren=$siren"; + $sqlAnnonceWhere.= $this->getAnnoncesLegalesRubrique('annonce', $rubrique); + $sqlAnnonceWhere.= " AND a.tribunal=t.triCode AND a.dateSuppr=0"; + if ($visualisation === true) { + // --- Ne pas afficher les annonces si la procédure à plus de 4 mois + $sqlAnnonceWhere.= " AND a.dateJugement > DATE_SUB(NOW(), INTERVAL 24 MONTH)"; + } + $sqlAnnonceWhere.= " GROUP BY a.siren, a.dateJugement, a.typeEven ORDER BY a.dateJugement DESC"; + $sqlAnnonce = $this->getAnnoncesLegalesAnnonce(true)." WHERE ".$sqlAnnonceWhere; + + // --- SQL Union + try { + $sql = "SELECT count(*) AS num FROM ( (".$sqlBodacc.") + UNION ALL (".$sqlHisto.") UNION ALL (".$sqlAnnonce.") ) + results ORDER BY unionDate DESC"; + $stmt = $this->conn->executeQuery($sql); + $nb = 0; + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $nb = $result->nb; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return $nb; + } + + /** + * Where SQL + * @param string $type bodacc, histo + * @param mixed $rubrique + * @return boolean|string + */ + public function getAnnoncesLegalesRubrique($type, $rubrique = '') + { + $where = ''; + + // --- Type Bodacc + if ($type == 'bodacc') { + // Procédure collective + if ($rubrique=='P' || $rubrique=='PH') { + $where = " AND d.Rubrique='procol' + AND d.typeEven NOT LIKE '%1005%' + AND d.typeEven NOT LIKE '%1010%' + AND d.typeEven NOT LIKE '%1050%' + AND d.typeEven NOT LIKE '%1055%' + AND d.typeEven NOT LIKE '%1550%' "; + } + // Dissolution de la société + elseif ($rubrique=='D') { + $where =" AND (d.typeEven LIKE '%2202%' OR d.typeEven LIKE '%2203%' OR d.typeEven LIKE '%2204%' OR + d.typeEven LIKE '%2210%' OR d.typeEven LIKE '%2211%' OR d.typeEven LIKE '%2212%') "; + } + // Absorption + elseif ($rubrique=='A') { + $where =" AND (d.typeEven LIKE '%2720%' OR d.typeEven LIKE '%2721%') "; + } + // BODACC A + elseif ($rubrique=='BODA') { + $where =" AND d.Rubrique IN ('creations','procol','ventes') "; + } + // BODACC B + elseif ($rubrique=='BODB') { + $where =" AND d.Rubrique IN ('mmd','radiations') "; + } + // Dépôt des comptes, BODACC C + elseif ($rubrique=='C' || $rubrique=='BODC') { + $where =" AND (d.Rubrique='comptes' OR d.typeEven LIKE '%3100%' OR d.typeEven LIKE '%3200%' + OR d.typeEven LIKE '%3300%' OR d.typeEven LIKE '%3999%') "; + } elseif ($rubrique=='R') { + $where =" AND (d.typeEven LIKE '%2202%' OR d.typeEven LIKE '%2203%' OR d.typeEven LIKE '%2204%' OR + d.typeEven LIKE '%2210%' OR d.typeEven LIKE '%2211%' OR d.typeEven LIKE '%2212%' OR + d.Rubrique='radiations') "; + } + // Location gérance Locataire + elseif ($rubrique=='L') { + $where =" AND (d.typeEven LIKE '%2800%' OR d.typeEven LIKE '%2875%' OR d.typeEven LIKE '%2880%' OR + d.typeEven LIKE '%2881%' OR d.typeEven LIKE '%2885%' OR d.typeEven LIKE '%2840%' OR + d.typeEven LIKE '%4355%') "; + } + // Location gérance Propriétaire + elseif ($rubrique=='G') { + $where =" AND (d.typeEven LIKE '%2850%' OR d.typeEven LIKE '%2851%' OR d.typeEven LIKE '%2860%' OR + d.typeEven LIKE '%2870%') "; + } + // Ventes/Cessions + elseif ($rubrique=='V') { + $where =" AND (d.typeEven LIKE '%5500%' OR d.typeEven LIKE '%5501%' OR d.typeEven LIKE '%5502%' OR + d.typeEven LIKE '%5503%' OR d.typeEven LIKE '%5510%' OR d.typeEven LIKE '%5600%' OR + d.typeEven LIKE '%5650%') "; + } elseif (is_array($rubrique) && count($rubrique)>0) { + $where =" AND ("; + foreach ($rubrique as $codeEven) { + $tabTmp[]=" d.typeEven LIKE '%$codeEven%' "; + } + $where.= implode(' OR ', $tabTmp); + $where.=')'; + } + } + + // --- Type historique + if ($type == 'histo') { + if ($rubrique=='P') { + $where =" AND e.E1GSIR NOT IN(340460104) AND e.CODEVE BETWEEN 50 AND 79 "; + } elseif ($rubrique=='PH') { + $where =" AND e.CODEVE BETWEEN 50 AND 79 "; + } elseif ($rubrique=='R') { + $where =" AND e.CODEVE BETWEEN 40 AND 42 "; + } elseif ($rubrique=='L') { + $where =" AND e.CODEVE IN(37,42) "; + } elseif ($rubrique=='G') { + $where =" AND e.CODEVE=38 "; + } elseif ($rubrique=='BODA') { + $where =" AND e.JAL=1 "; + } elseif ($rubrique=='BODB') { + $where =" AND e.JAL=200 "; + } elseif (is_array($rubrique)) { + $tabCodEve = $tabCodRol = array(); + foreach ($rubrique as $codeEvenTmp) { + $codRet=array_search($codeEvenTmp, $this->HistoRoleConvert); // Ne gère pas les ; de tabtmp2 + if ($codRet) { + $tabCodRol[] = $codRet; + } else { + $tabCodEve[] = array_search($codeEvenTmp, $this->HistoEvenConvert)*1; + } + } + $where =''; + $tabCodEve = array_unique($tabCodEve); + $tabCodRol = array_unique($tabCodRol); + if (count($tabCodEve)>0) { + $where.=' AND e.CODEVE IN('.implode(',', $tabCodEve).') '; + } + if (count($tabCodRol)>0) { + $where.=" AND e.ROLE IN('".implode("','", $tabCodRol)."') "; + } + } elseif (!empty($rubrique)) { + return false; + } + } + + // --- Type annonce + if ($type == 'annonce') { + // Procédure collective + if ($rubrique=='P' || $rubrique=='PH') { + $where = " AND a.typeEven BETWEEN 1000 AND 1999 AND a.typeEven NOT IN(1005, 1010, 1050, 1055, 1550) "; + } + // Dissolution de la société + elseif ($rubrique=='D') { + $where = " AND a.typeEven IN (2202, 2203, 2204, 2210, 2211, 2212) "; + } + // Absorption + elseif ($rubrique=='A') { + $where = " AND a.typeEven IN (2720, 2721) "; + } + // Dépôt des comptes + elseif ($rubrique=='C' || $rubrique=='BODC') { + $where = " AND a.typeEven BETWEEN 3000 AND 3999 "; + } elseif ($rubrique=='R') { + $where = " AND a.typeEven IN (2202, 2203, 2204, 2210, 2211, 2212) "; + } + // Location gérance Locataire + elseif ($rubrique=='L') { + $where = " AND a.typeEven IN (2800, 2875, 2880, 2881, 2885, 2840) "; + } + // Location gérance Propriétaire + elseif ($rubrique=='G') { + $where = " AND a.typeEven IN (2850, 2851, 2860, 2870) "; + } + // Ventes/Cessions + elseif ($rubrique=='V') { + $where = " AND a.typeEven IN (5500, 5501, 5502, 5503, 5510, 5600, 5650) "; + } elseif (is_array($rubrique) && count($rubrique)>0) { + $where = " AND (a.typeEven IN (".implode(',', $rubrique).') OR '; + foreach ($rubrique as $codeEven) { + $tabTmp[] = " a.typeEven LIKE '%$codeEven%' "; + } + $where.= implode(' OR ', $tabTmp); + $where.= ')'; + } elseif (!empty($rubrique)) { + return false; + } + } + + return $where; + } + + /** + * Parse les annonces légales pour déterminer leur rubrique + * plus rapide d'executer sur la liste des annonces légales que d'executer les requetes SQL + * @param array $annonces Annonces au format BDD + * @param mixed $rubrique + * @return array + * Retourne une liste filtrer suivant la/les rubriques + */ + public function annoncesInRubrique($annonces, $rubrique) + { + $annonceFilter = array(); + + foreach ($annonces as $ann) { + + // --- Formatage bodacc + if ($ann['SourceTable'] == 'bodacc') { + $typeEven = explode(' ', $ann['typeEven']); + // Procédure collective + if ($rubrique=='P' || $rubrique=='PH') { + $evenOk = true; + foreach ($typeEven as $even) { + if (in_array($even, array('1005', '1010', '1050', '1055', '1550'))) { + $evenOk = false; + break; + } + } + if ($ann['Rubrique'] == 'procol' && $evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Dissolution de la société + elseif ($rubrique=='D') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2202', '2203', '2204', '2210', '2211', '2212'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Absorption + elseif ($rubrique=='A') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2720', '2721'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + // BODACC A + elseif ($rubrique=='BODA') { + if (in_array($ann['Rubrique'], array('creations', 'procol', 'ventes'))) { + $annonceFilter[] = $ann; + } + } + // BODACC B + elseif ($rubrique=='BODB') { + if (in_array($ann['Rubrique'], array('mmd', 'radiations'))) { + $annonceFilter[] = $ann; + } + } + // Dépôt des comptes, BODACC C + elseif ($rubrique=='C' || $rubrique=='BODC') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('3100', '3200', '3300', '3999'))) { + $evenOk = true; + break; + } + } + if ($ann['Rubrique'] == 'comptes' || $evenOk === true) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='R') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2202', '2203', '2204', '2210', '2211', '2212'))) { + $evenOk = true; + break; + } + } + if ($ann['Rubrique'] == 'radiations' || $evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Location gérance Locataire + elseif ($rubrique=='L') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2800', '2875', '2880', '2881', '2885', '2840', '4355'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Location gérance Propriétaire + elseif ($rubrique=='G') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2850', '2851', '2860', '2870'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Ventes/Cessions + elseif ($rubrique=='V') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('5500', '5501', '5502', '5503', '5510', '5600', '5650'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } elseif (is_array($rubrique) && count($rubrique) > 0) { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, $rubrique)) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + } + + // --- Formattage Histo + elseif ($ann['SourceTable'] == 'histo') { + if ($rubrique=='P') { + if ($ann['E1GSIR'] != 340460104 && $ann['CODEVE'] >= 50 && $ann['CODEVE'] <= 79) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='PH') { + if ($ann['CODEVE'] >= 50 && $ann['CODEVE'] <= 79) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='R') { + if ($ann['CODEVE'] >= 40 && $ann['CODEVE'] <= 42) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='L') { + if (in_array($ann['CODEVE'], array(37, 42))) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='G') { + if ($ann['CODEVE'] == 38) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='BODA') { + if ($ann['JAL'] == 1) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='BODB') { + if ($ann['JAL'] == 200) { + $annonceFilter[] = $ann; + } + } elseif (is_array($rubrique)) { + $tabCodEve = $tabCodRol = array(); + foreach ($rubrique as $codeEvenTmp) { + $codRet=array_search($codeEvenTmp, $this->HistoRoleConvert); // Ne gère pas les ; de tabtmp2 + if ($codRet) { + $tabCodRol[] = $codRet; + } else { + $tabCodEve[] = array_search($codeEvenTmp, $this->HistoEvenConvert)*1; + } + } + $where =''; + $tabCodEve = array_unique($tabCodEve); + $tabCodRol = array_unique($tabCodRol); + if (in_array($ann['CODEVE'], $tabCodEve) || in_array($ann['ROLE'], $tabCodRol)) { + $annonceFilter[] = $ann; + } + } + } + + // --- Formattage Annonce + elseif ($ann['SourceTable'] == 'annonce') { + // Procédure collective + if ($rubrique=='P' || $rubrique=='PH') { + if ($ann['typeEven'] >= 1000 && $ann['typeEven'] <= 1999 && !in_array($ann['typeEven'], + array('1005', '1010', '1050', '1055', '1550'))) { + $annonceFilter[] = $ann; + } + } + // Dissolution de la société + elseif ($rubrique=='D') { + if (in_array($ann['typeEven'], array('2202', '2203', '2204', '2210', '2211', '2212'))) { + $annonceFilter[] = $ann; + } + } + // Absorption + elseif ($rubrique=='A') { + if (in_array($ann['typeEven'], array('2720', '2721'))) { + $annonceFilter[] = $ann; + } + } + // Dépôt des comptes + elseif ($rubrique=='C' || $rubrique=='BODC') { + if ($ann['typeEven'] >= 3000 && $ann['typeEven'] <= 3999) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='R') { + if (in_array($ann['typeEven'], array('2202', '2203', '2204', '2210', '2211', '2212'))) { + $annonceFilter[] = $ann; + } + } + // Location gérance Locataire + elseif ($rubrique=='L') { + if (in_array($ann['typeEven'], array('2800', '2875', '2880', '2881', '2885', '2840'))) { + $annonceFilter[] = $ann; + } + } + // Location gérance Propriétaire + elseif ($rubrique=='G') { + if (in_array($ann['typeEven'], array('2850', '2851', '2860', '2870'))) { + $annonceFilter[] = $ann; + } + } + // Ventes/Cessions + elseif ($rubrique=='V') { + if (in_array($ann['typeEven'], array('5500', '5501', '5502', '5503', '5510', '5600', '5650'))) { + $annonceFilter[] = $ann; + } + } elseif (is_array($rubrique) && count($rubrique)>0) { + foreach ($typeEven as $even) { + if (in_array($even, $rubrique)) { + $annonceFilter[] = $ann; + } + } + } + } + } + + return $annonceFilter; + } + + /** + * Tri les annonces de la fonction getAnnoncesLegales + * @param array $annonces + * @param mixed $rubrique + * @return array + */ + public function annoncesFilter($annonces, $rubrique) + { + $annonceFilter = array(); + + foreach ($annonces as $ann) { + $typeEven = array(); + foreach ($ann['evenements'] as $item) { + $typeEven[] = $item['CodeEven']; + } + + // Procédure collective + if ($rubrique=='P' || $rubrique=='PH') { + $evenOk = true; + foreach ($typeEven as $even) { + if (in_array($even, array('1005', '1010', '1050', '1055', '1550'))) { + $evenOk = false; + break; + } + } + if ($ann['Rubrique'] == 'procol' && $evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Dissolution de la société + elseif ($rubrique=='D') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2202', '2203', '2204', '2210', '2211', '2212'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Absorption + elseif ($rubrique=='A') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2720', '2721'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + // BODACC A + elseif ($rubrique=='BODA') { + if (in_array($ann['Rubrique'], array('creations', 'procol', 'ventes'))) { + $annonceFilter[] = $ann; + } + } + // BODACC B + elseif ($rubrique=='BODB') { + if (in_array($ann['Rubrique'], array('mmd', 'radiations'))) { + $annonceFilter[] = $ann; + } + } + // Dépôt des comptes, BODACC C + elseif ($rubrique=='C' || $rubrique=='BODC') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('3100', '3200', '3300', '3999'))) { + $evenOk = true; + break; + } + } + if ($ann['Rubrique'] == 'comptes' || $evenOk === true) { + $annonceFilter[] = $ann; + } + } elseif ($rubrique=='R') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2202', '2203', '2204', '2210', '2211', '2212'))) { + $evenOk = true; + break; + } + } + if ($ann['Rubrique'] == 'radiations' || $evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Location gérance Locataire + elseif ($rubrique=='L') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2800', '2875', '2880', '2881', '2885', '2840', '4355'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Location gérance Propriétaire + elseif ($rubrique=='G') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('2850', '2851', '2860', '2870'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + // Ventes/Cessions + elseif ($rubrique=='V') { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, array('5500', '5501', '5502', '5503', '5510', '5600', '5650'))) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } elseif (is_array($rubrique) && count($rubrique) > 0) { + $evenOk = false; + foreach ($typeEven as $even) { + if (in_array($even, $rubrique)) { + $evenOk = true; + break; + } + } + if ($evenOk === true) { + $annonceFilter[] = $ann; + } + } + } + + return $annonceFilter; + } + + /** + * Analyse les annonces légales pour déterminer si en plan + * @param string $type Type d'annonce bodacc|histo|annonces + * @param int $fj Code catégorie juridique + * @param array $annonce Une annonce + */ + public function getAnnoncesLegalesPlan($type, $fj, $annonce) + { + // --- Bodacc + if ($type == 'bodacc') { + $tabEven = explode(';', $annonce['typeEven']); + foreach ($tabEven as $even) { + $this->matchPlanDuree($even, $annonce['dateJugement'], $annonce['annonce']); + } + } + // --- Annonce + if ($type == 'annonce') { + $this->matchPlanDuree($annonce['typeEven'], $annonce['dateJugement'], $annonce['annonce']); + } + + // --- Historique + if ($type == 'histo') { + $this->matchPlanDuree($annonce['CODEVE'], $annonce['DATE'], $annonce['annonceTxt']); + } + } + + /** + * + */ + protected function matchPlanDuree($eve, $date, $txt) + { + if ($this->debug) { + file_put_contents('procol.log', "MATCH DUREE PLAN : ", FILE_APPEND); + } + + $evenDetect = array( + '75', // Histo + '1407', // Modification de plan + '1409', // Modification du plan de continuation + '1413', // Arrêt du plan de continuation + '1414', // Arrêt du plan de redressement + '1101', // Arrêt du plan de sauvegarde + ); + + $fjDetect = array( + 16,1600, // Exploitant agricole + 63,6316,6317,6318, // Société coopérative agricole + 5431,5432,5531,5532, // SMIA, SICA + 5631,5632,6532, + 6533,6534,6535, // GAEC, GFA, Gpt Agricole Foncier + 6597,6598, + ); + + if (in_array($eve, $evenDetect)) { + if (($this->dureePlan == 0 || $this->dureePlan == 120)) { + // --- Lecture dureePlan dans annonce + $this->debutPlan = str_replace('-', '', $date); // SSAAMMJJ + if (preg_match('/dur.e(?:.*)plan(?:.*)(\d+)\s+ans?/Uisu', $txt, $matches)) { + $this->dureePlan = $matches[1]*12; // 10 ans = 120 mois + } + if (preg_match('/dur.e(?:.*)plan(?:.*)(\d+)\s+mois?/Uisu', $txt, $matches)) { + $this->dureePlan = $matches[1]; + } + // --- Duree du Plan par défaut sur FJ et par défaut + if ($this->dureePlan < 1 || $this->dureePlan > 120) { + if (in_array($fj, $fjDetect)) { + $this->dureePlan = 180; // 15 ans + } else { + $this->dureePlan = 120; // 10 ans = 120 mois + } + } + if ($this->debug) { + file_put_contents('procol.log', $this->dureePlan." mois", FILE_APPEND); + } + $this->finPlan = Metier_Util_Date::period2Days($this->debutPlan, $this->dureePlan.' mois'); + } + } + + if ($this->debug) { + file_put_contents('procol.log', "\n", FILE_APPEND); + } + } + + protected function getAnnoncesLegalesEffacement($siren, $rubrique, $tabRet) + { + if ($this->debug) { + file_put_contents('procol.log', "Effacement Procol\n", FILE_APPEND); + } + $effacement = false; + $MaxPeriodProcol = 80000; + // --- Si il y a des annonces + if (count($tabRet) > 0) { + $tabJugements = array(); + $TopEvenCloture = false; + // --- Liste des jugements principaux - Tri chronologique par date de jugement + foreach ($tabRet as $i => $ann) { + $item = new stdClass(); + $dateJug = str_replace('-', '', $ann['dateJugement'])*1; + $datePar = str_replace('-', '', $ann['DateParution'])*1; + if ($dateJug > 0) { + $item->date = $dateJug; + $item->dateISO8601 = $ann['dateJugement']; + } elseif ($datePar > 0) { + $item->date = $datePar; + $item->dateISO8601 = $ann['DateParution']; + } + $item->code = $ann['evenements'][0]['CodeEven']; + $tabJugements[] = $item; + // Detection TopDepart Cloture + if (in_array($item->code, array(1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1311, 1312, 1313, 1314, 1417))) { + $TopEvenCloture = true; + } + // Dernier Evenement de Procol + $evenProcolLastDate = $item->date; + $evenProcolLast = $item->code; + if ($this->debug) { + file_put_contents('procol.log', "Parcours Even : $evenProcolLastDate - $evenProcolLast ($TopEvenCloture)\n", FILE_APPEND); + } + } + // --- Gestions des conditions pour l'affichage de l'indicateur procédure collectives + if ($rubrique == 'P') { + if ($this->debug) { + file_put_contents('procol.log', "Rubrique P\n", FILE_APPEND); + } + // Si plan recherche des annonces suivantes + if ($this->dureePlan > 0) { + if ($this->debug) { + file_put_contents('procol.log', "=== Vérification Elimination du plan === \n", FILE_APPEND); + } + // Tableau chronologique des dates de jugement => code jugement + foreach ($tabJugements as $i => $j) { + if ($this->debug) { + file_put_contents('procol.log', $j->date.'>'.$this->debutPlan.', Jugement='.$j->code."\n", FILE_APPEND); + } + // Si plan suivi de SV, RJ, LJ ou clôture alors pas de plan + if ($j->date > $this->debutPlan && in_array($j->code, array( + // Sauvegarde + 1100, 1101, + // RJ + 1200, 1201, 1202, 1211, 1217, + // LJ + 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, + // Extension SV, LJ, RJ + 1417, 1418, 1419, + // Cloture + 1500, 1501, 1502, 1503, 1504, 1514 ))) { + $this->dureePlan = 0; + } + } + if ($this->debug) { + file_put_contents('procol.log', "Durée du plan : ".$this->dureePlan."\n", FILE_APPEND); + } + } + + // --- Gestion de la cloture + if (substr($this->Identite['FJ'], 0, 1) != 1 && $TopEvenCloture && in_array($evenProcolLast, array(1502, 1503))) { + if ($this->debug) { + file_put_contents('procol.log', "=== Cloture ===\n", FILE_APPEND); + } + if ($this->debug) { + file_put_contents('procol.log', "Cloture après procédure\n", FILE_APPEND); + } + $this->SituationCloture = true; + } + // --- Evenements effaçant l'indicateur P dans Situation Juridique + else { + if ($this->debug) { + file_put_contents('procol.log', "=== Traitement effacement procol ===\n", FILE_APPEND); + } + $tabNoProcol = array(); + try { + $stmt = $this->conn->executeQuery("SELECT codEven, affProcol FROM jo.tabEvenements WHERE affProcol>0"); + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabNoProcol[$row['codEven']] = $row['affProcol']; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if (array_key_exists($evenProcolLast, $tabNoProcol)) { + if ($this->debug) { + file_put_contents('procol.log', "Vérification Effacement procol : $evenProcolLast\n", FILE_APPEND); + } + switch ($tabNoProcol[$evenProcolLast]) { + // PAS DE MENTION DE LA PROCOL + case 1: + if ($this->debug) { + file_put_contents('procol.log', "affProcol = 1\n", FILE_APPEND); + } + $effacement = true; + break; + // Ne pas mentionner la procol si CJ=1xxx OU si actif et CJ!=9xxx et even de plus d'un mois + case 2: + if (substr($this->Identite['FJ'], 0, 1)*1==1) { + if ($this->debug) { + file_put_contents('procol.log', "affProcol = 2\n", FILE_APPEND); + } + $effacement = true; + } elseif ($this->Identite['Actif']*1 > 0 && substr($this->Identite['FJ'], 0, 1)*1 != 9) { + if ($this->debug) { + file_put_contents('procol.log', "affProcol = 2\n", FILE_APPEND); + } + $maxLatence = date('Ymd', mktime(0, 0, 0, + substr($evenProcolLastDate, 4, 2)*1+1, + substr($evenProcolLastDate, 6, 2), + substr($evenProcolLastDate, 0, 4))); + if (date('Ymd') > $maxLatence) { + $effacement = true; + } + } + break; + // Pas Procol si actif RCS + case 3: + if ($this->Identite['Actif']*1>0) { + if ($this->debug) { + file_put_contents('procol.log', "affProcol = 3\n", FILE_APPEND); + } + $effacement = true; + } + break; + // Le dernier jugement est un appel => Procol Suspendu + case 4: + if ($this->debug) { + file_put_contents('procol.log', "affProcol = 4\n", FILE_APPEND); + } + $this->appelJugement = true; + break; + } + } + + // --- Procédure trop ancienne plus de 12 ans et actif + $dateTropAncienne = (date('Ymd')*1) - $MaxPeriodProcol; + if ($evenProcolLastDate < $dateTropAncienne && $this->Identite['Actif']*1 > 0) { + $derPr = Metier_Util_Date::dateT('Ymd', 'd/m/Y', $evenProcolLastDate); + $effacement = true; + if ($this->debug) { + file_put_contents('procol.log', "Procédure trop ancienne plus de 12 ans et actif\n", FILE_APPEND); + } + } + // --- En Procol mais présence d'une annonce de cloture ou LJ avec Bilan publié ultérieurement + elseif (in_array($evenProcolLast, array( + 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1311, 1312, 1313, + 1500, 1501, 1502, 1503, 1504 + ))) { + $mBil = new Metier_Partenaires_MBilans(); + $mBil->setSiren($siren); + $tabBilans = $mBil->listeBilans(false); + $derExercice = 0; + foreach ($tabBilans as $idx => $bilan) { + if ($bilan['dateExercice'] > $derExercice) { + $derExercice = $bilan['dateExercice']; + } + } + if ($derExercice > $evenProcolLastDate) { + if ($this->debug) { + file_put_contents('procol.log', "En Procol mais présence d'une annonce de cloture ou LJ avec Bilan publié ultérieurement\n", FILE_APPEND); + } + if ($this->debug) { + file_put_contents('procol.log', "$derExercice > $evenProcolLastDate\n", FILE_APPEND); + } + $derEx = Metier_Util_Date::dateT('Ymd', 'd/m/Y', $derExercice); + $derPr = Metier_Util_Date::dateT('Ymd', 'd/m/Y', $evenProcolLastDate); + $effacement = true; + } + } + } + } + // --- Dissolution mais bilan après événements + elseif ($rubrique == 'D') { + $mBil = new Metier_Partenaires_MBilans(); + $mBil->setSiren($siren); + $tabBilans = $mBil->listeBilans(false, 3); + $derExercice = 0; + foreach ($tabBilans as $idx => $bilan) { + if ($bilan['dateExercice'] > $derExercice) { + $derExercice = $bilan['dateExercice']; + } + } + if ($derExercice > $evenProcolLastDate) { + $derEx = Metier_Util_Date::dateT('Ymd', 'd/m/Y', $derExercice); + $derPr = Metier_Util_Date::dateT('Ymd', 'd/m/Y', $evenProcolLastDate); + $effacement = true; + + if ($this->debug) { + file_put_contents('procol.log', "Effacement dissolution : $derExercice > $evenProcolLastDate\n", FILE_APPEND); + } + } + } + } + + return $effacement; + } + + protected function getAnnoncesLegalesBodacc($count = false) + { + if ($count === true) { + $sql = "SELECT b.id AS id, b.Bodacc_Date_Parution AS unionDate, 'bodacc' AS SourceTable"; + } else { + if ($this->AnnoncesLegalesVisu) { + $unionDate = 'b.Bodacc_Date_Parution AS unionDate'; + } else { + $unionDate = 'd.dateJugement AS unionDate'; + } + $sql = "SELECT + b.id AS id, + /* BODACC */ + b.Bodacc_Code, + b.Bodacc_Annee_Parution, + b.Bodacc_Num, + b.Num_Annonce, + b.Bodacc_Date_Parution, + b.Tribunal_Dept, + b.Tribunal_Code, + d.Rubrique, + b.typeAnnonce, + b.corrNum_Annonce, + b.corrBodacc_Date_Parution, + b.corrPage, + b.corrNumParution, + b.corrTexteRectificatif, + b.annonce, + b.dateInsert, + d.typeEven, + d.dateEffet, + d.dateDebutActivite, + d.dateCessationActivite, + d.dateJugement, + d.dateFinObservation, + d.VenteMt, + d.VenteDev, + d.FJ, + d.Capital, + d.CapitalDev, + CONCAT(d.commentaires,' ',d.fusion) AS complement, + d.raisonSociale, + d.nomCommercial, + d.enseigne, + d.sigle, + d.adresse, + d.codePostal, + d.ville, + d.adresseSiege, + d.codePostalSiege, + d.villeSiege, + /* HISTO */ + '' AS ANBASE, + '' AS NOBOD, + '' AS CODTRI, + '' AS JAL, + '' AS DATE, + '' AS CODEVE, + '' AS SSCODE, + '' AS DEPT, + '' AS NOANN, + '' AS ROLE, + '' AS SIREN, + '' AS E1GSIR, + '' AS E1GNIC, + '' AS annonceNum, + '' AS annonceTxt, + /* ANNONCE */ + '' AS strEven, + '' AS dateCessationPaiement, + '' AS dateEffetFinP, + '' AS numero, + '' AS inter1type, + '' AS inter1id, + '' AS inter1nom, + '' AS inter2type, + '' AS inter2id, + '' AS inter2nom, + '' AS inter3type, + '' AS inter3id, + '' AS inter3nom, + '' AS inter4type, + '' AS inter4id, + '' AS inter4nom, + '' AS tribunal, + '' AS montant, + '' AS actionsNb, + '' AS nouvActivite, + '' AS nouvDir, + '' AS nouvAdr, + '' AS nouvFJ, + '' AS source, + '' AS parutionIdJal, + '' AS parutionNum, + '' AS dateSource, + /* UNION NEEDED */ + t.triCode, + t.triNom, + t.triSiret, + t.triCP, + IF(d.dateSuppr=0,'',d.dateSuppr) AS deleted, + ".$unionDate.", + 'bodacc' AS SourceTable + FROM jo.bodacc_detail d, jo.bodacc b, jo.tribunaux t"; + } + + return $sql; + } + + protected function getAnnoncesLegalesHisto($count = false) + { + if ($count === true) { + $sql = "SELECT e.ANBASE AS id, DATE_FORMAT(e.DATE, '%Y-%m-%d') AS unionDate, 'histo' AS SourceTable"; + } else { + $sql = "SELECT + e.ANBASE AS id, + /* BODACC */ + '' AS Bodacc_Code, + '' AS Bodacc_Annee_Parution, + '' AS Bodacc_Num, + '' AS Num_Annonce, + '' AS Bodacc_Date_Parution, + '' AS Tribunal_Dept, + '' AS Tribunal_Code, + '' AS Rubrique, + '' AS typeAnnonce, + '' AS corrNum_Annonce, + '' AS corrBodacc_Date_Parution, + '' AS corrPage, + '' AS corrNumParution, + '' AS corrTexteRectificatif, + '' AS annonce, + '' AS dateInsert, + '' AS typeEven, + '' AS dateEffet, + '' AS dateDebutActivite, + '' AS dateCessationActivite, + '' AS dateJugement, + '' AS dateFinObservation, + '' AS VenteMt, + '' AS VenteDev, + '' AS FJ, + '' AS Capital, + '' AS CapitalDev, + '' AS complement, + '' AS raisonSociale, + '' AS nomCommercial, + '' AS enseigne, + '' AS sigle, + '' AS adresse, + '' AS codePostal, + '' AS ville, + '' AS adresseSiege, + '' AS codePostalSiege, + '' AS villeSiege, + /* HISTO */ + e.ANBASE, + e.NOBOD, + e.CODTRI, + e.JAL, + e.DATE, + e.CODEVE, + e.SSCODE, + e.DEPT, + e.NOANN, + e.ROLE, + e.SIREN AS siren, + e.E1GSIR, + e.E1GNIC, + x.annonceNum, + x.annonceTxt, + /* ANNONCE */ + '' AS strEven, + '' AS dateCessationPaiement, + '' AS dateEffetFinP, + '' AS numero, + '' AS inter1type, + '' AS inter1id, + '' AS inter1nom, + '' AS inter2type, + '' AS inter2id, + '' AS inter2nom, + '' AS inter3type, + '' AS inter3id, + '' AS inter3nom, + '' AS inter4type, + '' AS inter4id, + '' AS inter4nom, + '' AS tribunal, + '' AS montant, + '' AS actionsNb, + '' AS nouvActivite, + '' AS nouvDir, + '' AS nouvAdr, + '' AS nouvFJ, + '' AS source, + '' AS parutionIdJal, + '' AS parutionNum, + '' AS dateSource, + /* UNION NEEDED */ + '' AS triCode, + '' AS triNom, + '' AS triSiret, + '' AS triCP, + '' AS deleted, + DATE_FORMAT(e.DATE, '%Y-%m-%d') AS unionDate, + 'histo' AS SourceTable + FROM historiques.texte x, historiques.entrep e"; + } + + return $sql; + } + + protected function getAnnoncesLegalesAnnonce($count = false) + { + if ($count == true) { + $sql = "SELECT a.id AS id, a.dateJugement AS unionDate, 'annonce' AS SourceTable"; + } else { + if ($this->AnnoncesLegalesVisu) { + $unionDate = 'a.dateJugement AS unionDate'; + } else { + $unionDate = 'a.dateJugement AS unionDate'; + } + $sql = "SELECT + a.id AS id, + /* BODACC */ + '' AS Bodacc_Code, + '' AS Bodacc_Annee_Parution, + '' AS Bodacc_Num, + '' AS Num_Annonce, + '' AS Bodacc_Date_Parution, + '' AS Tribunal_Dept, + '' AS Tribunal_Code, + '' AS Rubrique, + '' AS typeAnnonce, + '' AS corrNum_Annonce, + '' AS corrBodacc_Date_Parution, + '' AS corrPage, + '' AS corrNumParution, + '' AS corrTexteRectificatif, + a.annonce, + a.dateInsert, + a.typeEven, + '' AS dateEffet, + '' AS dateDebutActivite, + '' AS dateCessationActivite, + a.dateJugement, + '' AS dateFinObservation, + '' AS VenteMt, + '' AS VenteDev, + '' AS FJ, + '' AS Capital, + '' AS CapitalDev, + a.complement, + a.raisonSociale, + '' AS nomCommercial, + '' AS enseigne, + '' AS sigle, + a.adresse, + a.codePostal, + a.ville, + '' AS adresseSiege, + '' AS codePostalSiege, + '' AS villeSiege, + /* HISTO */ + '' AS ANBASE, + '' AS NOBOD, + '' AS CODTRI, + '' AS JAL, + '' AS DATE, + '' AS CODEVE, + '' AS SSCODE, + '' AS DEPT, + '' AS NOANN, + '' AS ROLE, + a.siren, + '' AS E1GSIR, + '' AS E1GNIC, + '' AS annonceNum, + '' AS annonceTxt, + /* ANNONCE */ + a.strEven, + a.dateCessationPaiement, + a.dateEffetFinP, + a.numero, + a.inter1type, + a.inter1id, + a.inter1nom, + a.inter2type, + a.inter2id, + a.inter2nom, + a.inter3type, + a.inter3id, + a.inter3nom, + a.inter4type, + a.inter4id, + a.inter4nom, + a.tribunal, + a.montant, + a.actionsNb, + a.nouvActivite, + a.nouvDir, + a.nouvAdr, + a.nouvFJ, + a.source, + a.parutionIdJal, + a.parutionNum, + DATE_FORMAT(a.dateSource, '%Y-%m-%d') AS dateSource, + /* UNION NEEDED */ + t.triCode, + t.triNom, + t.triSiret, + t.triCP, + '' AS deleted, + ".$unionDate.", + 'annonce' AS SourceTable + FROM jo.annonces a, jo.tribunaux t"; + } + + return $sql; + } + + /** + * Liste des annonces légales pour un siren donnée + * @param integer $siren + * @param integer $idAnnonce + * @param mixed $rubrique Filter par rubrique + * (P)rocol, (D)issolution, (R)adiation, (A)bsorption, (L)ocataire, (G)érance:propriétaire, + * (V)endeur, bodacc (C), (BODA) (BODB) (BODC) ou tableau des codeEven + * @param bool $forceVerif + * @return array + */ + public function getAnnoncesLegales($siren, $idAnnonce=0, $rubrique='', $forceVerif=false, $allTextes=false, $deleted=false) + { + $siren = intval($siren); + $tabRet = array(); + $this->dureePlan = 0; // Par défaut, on ne trouve aucune durée de plan + + if (!is_array($rubrique) && !in_array($rubrique, array('', 'P', 'PH', 'D', 'A', 'C', 'R', 'L', 'G', 'V', 'BODA', 'BODB', 'BODC'))) { + return false; + } + + if ($idAnnonce != 0) { + // --- Annonce + if (substr($idAnnonce, 0, 2) == '0.') { + $idAnnonce = substr($idAnnonce, 2); + $sqlAnnonceWhere = "a.id=$idAnnonce"; + $sqlAnnonceWhere.= " AND a.tribunal=t.triCode AND a.dateSuppr=0"; + $sqlAnnonceWhere.= " GROUP BY a.siren, a.dateJugement, a.typeEven ORDER BY a.dateJugement DESC"; + $sql = $this->getAnnoncesLegalesAnnonce()." WHERE ".$sqlAnnonceWhere; + } + // --- Histo + elseif ($idAnnonce < 0) { + $idAnnonce = abs($idAnnonce); + $sqlHistoWhere = "e.ANBASE=$idAnnonce "; + $sqlHistoWhere.= " AND e.ANBASE=x.annonceNum AND e.DATE BETWEEN 19890101 AND 20041231"; + /*$sqlHistoWhere.= " AND e.E1GSIR=e.SIREN";*/ + $sqlHistoWhere.= " GROUP BY e.ANBASE ORDER BY e.DATE DESC"; + $sql = $this->getAnnoncesLegalesHisto()." WHERE ".$sqlHistoWhere; + } + // --- Bodacc + elseif ($idAnnonce > 0) { + $sqlBodaccWhere ="d.id=$idAnnonce "; + $sqlBodaccWhere.= " AND d.id=b.id AND b.Tribunal_Code=t.triCode"; + $sql = $this->getAnnoncesLegalesBodacc()." WHERE ".$sqlBodaccWhere; + } + } else { + // --- Where Bodacc + $sqlBodaccWhere = "d.siren=$siren"; + $sqlBodaccWhere.= $this->getAnnoncesLegalesRubrique('bodacc', $rubrique); + $sqlBodaccWhere.= " AND d.id=b.id AND b.Tribunal_Code=t.triCode"; + // --- Annonces supprimées ou rectifiées + if ($deleted === true) { + $sqlBodaccWhere.= " AND (d.dateSuppr=0 OR d.dateSuppr!='0000-00-00 00:00:00' AND d.idSuppr=0) "; + } else { + $sqlBodaccWhere.= " AND d.dateSuppr=0 "; + } + $sqlBodacc = $this->getAnnoncesLegalesBodacc()." WHERE ".$sqlBodaccWhere; + + // --- Where Histo + $sqlHistoRubrique = $this->getAnnoncesLegalesRubrique('histo', $rubrique); + if ($sqlHistoRubrique !== false) { + $sqlHistoWhere = "e.E1GSIR=$siren"; + $sqlHistoWhere.= $sqlHistoRubrique; + $sqlHistoWhere.= " AND e.ANBASE=x.annonceNum AND (e.DATE BETWEEN 19960101 AND 20041231 OR e.DATE<19960101 AND e.E1GSIR=e.SIREN)"; + $sqlHistoWhere.= " GROUP BY e.ANBASE"; + $sqlHisto = $this->getAnnoncesLegalesHisto()." WHERE ".$sqlHistoWhere; + } + + // --- Where Annonce + $sqlAnnonceRubrique = $this->getAnnoncesLegalesRubrique('annonce', $rubrique); + if ($sqlAnnonceRubrique !== false) { + $sqlAnnonceWhere = "a.siren=$siren"; + $sqlAnnonceWhere.= $sqlAnnonceRubrique; + $sqlAnnonceWhere.= " AND a.tribunal=t.triCode AND a.dateSuppr=0"; + // --- Ne pas utiliser les annonces si la procédure à plus de 4 mois + $sqlAnnonceWhere.= " AND a.dateJugement > DATE_SUB(NOW(), INTERVAL 24 MONTH)"; + $sqlAnnonceWhere.= " GROUP BY a.siren, a.dateJugement, a.typeEven"; + $sqlAnnonce = $this->getAnnoncesLegalesAnnonce()." WHERE ".$sqlAnnonceWhere; + } + + // --- SQL Union + $sql = "SELECT * FROM ( (".$sqlBodacc.") "; + if (!empty($sqlHisto)) { + $sql.= " UNION ALL (".$sqlHisto.") "; + } + if (!empty($sqlAnnonce)) { + $sql.= " UNION ALL (".$sqlAnnonce.") "; + } + + // --- Gestion des événements à date + if ($this->companyEvenDateStop != null) { + $sql.= ") results WHERE unionDate < '".$this->companyEvenDateStop."'"; + } else { + $sql.= ") results"; + } + + // --- Gestion de l'ordre de tri + if ($this->AnnoncesLegalesVisu) { + $sql.= " ORDER BY unionDate DESC"; + } else { + $sql.= " ORDER BY unionDate ASC, FIELD(SourceTable, 'histo', 'annonce', 'bodacc')"; + } + } + + try { + $stmt = $this->conn->executeQuery($sql); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + // --- Traitement des resultats + if ($stmt->rowCount() > 0) { + // --- Identite Light de l'entité + if ($this->Identite === null) { + $this->Identite = $this->getIdentiteLight($siren); + } + // --- Parcours des annonces + while ($ann = $stmt->fetch(\PDO::FETCH_ASSOC)) { + // --- Formatage bodacc + if ($ann['SourceTable'] == 'bodacc') { + $tabEven = explode(';', $ann['typeEven']); + $tabRetEven = array(); + // --- Annonce rubrique insertion + if ($ann['typeAnnonce']!='Insertion') { + // --- Sélection des événements + foreach ($tabEven as $even) { + if (intval($even) != 0) { + $tabRetEven[] = array( + 'CodeEven' => $even, + 'LibEven' => $this->iBodacc->getEvenement($even) + ); + } + } + // Libellé générique + $tabRetEven[] = array( + 'CodeEven' => '0000', + 'LibEven' => $ann['typeAnnonce']." de l'annonce du ". + Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $ann['corrBodacc_Date_Parution']) + ); + } + // --- Annonce autre rubrique + else { + if (trim($ann['typeEven'])!='') { + foreach ($tabEven as $even) { + if (intval($even) != 0) { + $tabRetEven[] = array( + 'CodeEven' => $even, + 'LibEven' => $this->iBodacc->getEvenement($even) + ); + } + } + // --- Detection plan + if ($this->AnnoncesLegalesVisu === false) { + $this->getAnnoncesLegalesPlan('bodacc', $this->Identite['FJ'], $ann); + } + } else { + switch ($ann['Rubrique']) { + case 'mmd': $codeEven='2313'; $libEven = "Modification(s) diverse(s)"; break; + case 'comptes': $codeEven='3999'; $libEven = "Dépôt des comptes"; break; + case 'creations': $codeEven='4999'; $libEven = "Création d'entreprise"; break; + case 'procol': $codeEven='1999'; $libEven = "Procédure collective"; break; + case 'radiations': $codeEven='6700'; $libEven = "Radiation"; break; + case 'ventes': $codeEven='5999'; $libEven = "Vente/Cession"; break; + default: $codeEven='0000'; $libEven = $ann['Rubrique']; break; + } + $tabRetEven[] = array( + 'CodeEven' => $codeEven, + 'LibEven' => $libEven + ); + } + } + + $dateCes = str_replace('-', '', $ann['dateCessationActivite'])*1; + $dateDeb = str_replace('-', '', $ann['dateDebutActivite'])*1; + $dateEff = str_replace('-', '', $ann['dateEffet'])*1; + if ($dateCes > 0) { + $dateEffet = $ann['dateCessationActivite']; + } elseif ($dateDeb > 0) { + $dateEffet = $ann['dateDebutActivite']; + } else { + $dateEffet = $ann['dateEffet']; + } + $adresseAnn = trim(preg_replace('/ +/', ' ', $ann['adresseSiege'].' '.$ann['codePostalSiege'].' '.$ann['villeSiege'])); + + if (strlen($adresse) <8) { + $adresseAnn = trim(preg_replace('/ +/', ' ', $ann['adresse'].' '.$ann['codePostal'].' '.$ann['ville'])); + } + // --- Retour bodacc + $retFormat = array( + 'id' => $ann['id'], + 'BodaccCode' => 'BOD'.$ann['Bodacc_Code'], + 'BodaccNum' => $ann['Bodacc_Num'], + 'NumAnnonce' => $ann['Num_Annonce'], + 'DateParution' => $ann['Bodacc_Date_Parution'], + 'Departement' => $ann['Tribunal_Dept'], + 'Tribunal' => $ann['triNom'], + 'TribunalCode' => $ann['triCode'], + 'TribunalSiret' => $ann['triSiret'], + 'Rubrique' => $ann['Rubrique'], + 'typeAnnonce' => $ann['typeAnnonce'], + 'texteRectificatif' => $ann['corrTexteRectificatif'], + 'dateEffet' => $dateEffet, + 'dateJugement' => $ann['dateJugement'], + 'dateFin' => $ann['dateFinObservation'], + 'montantVente' => trim($ann['VenteMt'].' '.$ann['VenteDev']), + 'libFJ' => $ann['FJ'], + 'codFJ' => $this->iBodacc->getCodeFormeJur($ann['FJ']), + 'capital' => $ann['Capital'], + 'capitalDev' => $ann['CapitalDev'], + 'raisonSociale' => $ann['raisonSociale'], + 'nomCommercial' => $ann['nomCommercial'], + 'sigle' => $ann['sigle'], + 'adresse' => $adresseAnn, + 'dateInsertionSD' => $ann['dateInsert'], + 'evenements' => $tabRetEven, + 'complement' => $ann['complement'], + 'deleted' => $ann['deleted'], + 'texteAnnonce' => $ann['annonce'], + ); + $tabRet[] = $retFormat; + } + // --- Formattage Histo + elseif ($ann['SourceTable'] == 'histo') { + if ($ann['JAL']==1) { + $Bodacc_Code='BODA'; + } elseif ($ann['JAL']==200) { + $Bodacc_Code='BODB'; + } + // 4xxx + if ($ann['CODEVE']<20) { + $rub='creations'; + } + // 5xxx + elseif ($ann['CODEVE']<=25) { + $rub='ventes'; + } + // 2xxx + elseif ($ann['CODEVE']<40) { + $rub='mmd'; + } + // 6xxx + elseif ($ann['CODEVE']<42) { + $rub='radiations'; + } + // 2xxx + elseif ($ann['CODEVE']<50) { + $rub='mmd'; + } + // 1xxx + elseif ($ann['CODEVE']<80) { + $rub='procol'; + } + + $tabEvens = array(); + $newCodeEven = $this->HistoEvenConvert[$ann['CODEVE']]; + if ($newCodeEven*1 == 2318) { + $tabNewEven = explode(';', $this->HistoRoleConvert[$ann['ROLE']]); + if (count($tabNewEven) > 0) { + foreach ($tabNewEven as $newCodeEven) { + $tabEvens[] = array( + 'CodeEven' => $newCodeEven, + 'LibEven' => $this->iBodacc->getEvenement($newCodeEven)); + } + } else { + $tabEvens[] = array( + 'CodeEven' => $newCodeEven, + 'LibEven' => $this->iBodacc->getEvenement($newCodeEven) + ); + } + } else { + $tabEvens[] = array( + 'CodeEven' => $newCodeEven, + 'LibEven' => $this->iBodacc->getEvenement($newCodeEven) + ); + + // --- Detection plan + if ($this->AnnoncesLegalesVisu === false) { + $this->getAnnoncesLegalesPlan('histo', $this->Identite['FJ'], $ann); + } + } + // Recherche du capital et de la FJ dans le texte histo + if (($ann['CODEVE']>=10 && $ann['CODEVE']<20) + || ($ann['CODEVE']>=30 && $ann['CODEVE']<42) + || ($ann['CODEVE']>=51 && $ann['CODEVE']<80)) { + // Recherche du capital + if (preg_match('/Capital(?:.|)\:(.*)(eur.|f|livre)/Uis', $ann['annonceTxt'], $matches)) { + $capital=trim(strtr($matches[1], array(' '=>'', ',00 '=>'', '.00 '=>'')))*1; + if (substr(strtoupper($matches[2]), 0, 3)=='EUR') { + $capitalDev = 'EUR'; + } elseif (substr(strtoupper($matches[2]), 0, 3)=='LIV') { + $capitalDev = 'GBP'; + } else { + $capitalDev = 'FRF'; + } + } else { + $capital=$capitalDev=''; + } + // Recherche de la forme juridique + if (preg_match('/Forme(?:.|)\:(.*)(Capital|Adresse|Activit.|Administration|Commentaire)(?:.|)\:/Uisu', $ann['annonceTxt'], $matches)) { + $libFJ = trim($matches[1]); + } + } + + // --- Retour histo + $retFormat = array( + 'id' => -$ann['ANBASE'], + 'BodaccCode' => $Bodacc_Code, + 'BodaccNum' => $ann['NOBOD'], + 'NumAnnonce' => $ann['NOANN'], + 'DateParution' => substr($ann['DATE'], 0, 4).'-'.substr($ann['DATE'], 4, 2).'-'.substr($ann['DATE'], 6, 2), + 'Departement' => $ann['DEPT'], + 'Tribunal' => $this->iBodacc->getTribunalNom($ann['CODTRI']), //$ann['triNom'], + 'TribunalSiret' => $this->iBodacc->getTribunalSiret($ann['CODTRI']),//$ann['triSiret'], + 'Rubrique' => $rub, + 'typeAnnonce' => 'Insertion', + 'dateEffet' => substr($ann['DATE'], 0, 4).'-'.substr($ann['DATE'], 4, 2).'-'.substr($ann['DATE'], 6, 2), + 'dateJugement' => substr($ann['DATE'], 0, 4).'-'.substr($ann['DATE'], 4, 2).'-'.substr($ann['DATE'], 6, 2), + 'dateFin' => '', + 'montantVente' => '', + 'libFJ' => $libFJ, + 'codFJ' => $this->iBodacc->getCodeFormeJur($libFJ), + 'capital' => $capital, + 'capitalDev' => $capitalDev, + 'raisonSociale' => '',//$ann['raisonSociale'], + 'nomCommercial' => '',//$ann['nomCommercial'], + 'sigle' => '',//$ann['sigle'], + 'adresse' => '',//$adresseAnn, + 'dateInsertionSD' => '', + 'evenements' => $tabEvens, + 'texteAnnonce' => $ann['NOANN'].' - '.$ann['annonceTxt'], + ); + $tabRet[] = $retFormat; + } + // --- Formattage Annonce + elseif ($ann['SourceTable'] == 'annonce') { + $rubriqueRet = ''; + $tabInter = array( + 'A' => 'Administrateur judiciaire', + 'M' => 'Mandataire judiciaire', + 'H' => 'Huissier', + 'L' => 'Liquidateur', + 'R' => 'Représentant des Créanciers', + 'O' => 'Opposition', + 'U' => 'Curateur', + 'C' => 'Commissaire au plan', + 'S' => 'Syndic', + 'D' => 'Commissaire au concordat', + 'T' => 'Conciliateur', + 'V' => 'Avocat', + 'N' => 'Notaire', + 'J' => 'Juge Commissaire', + 'K' => 'Juge Commissaire Suppléant', + ); + $dept = substr($ann['triCP'], 0, 2)*1; + $depotComptes = false; + if ($dept==97) { + $dept = substr($ann['triCP'], 0, 3)*1; + } + $adresse=''; + + /** Ajout des informations identitaires pour les annonces collecte avant Décembre 2008 **/ + if (trim($ann['raisonSociale'])=='' || trim($ann['adresse'])=='' + || trim($ann['codePostal'])=='' || trim($ann['ville'])=='') { + $ann['raisonSociale'] = $this->Identite['Nom']; + $ann['adresse'] = $this->Identite['Adresse']; + $ann['codePostal'] = $this->Identite['CP']; + $ann['ville'] = $this->Identite['Ville']; + } + $adresse.=ucfirst(strtolower($ann['adresse'])).', '; + + $adresse=trim(preg_replace('/^0+/', '', preg_replace('/ +/', ' ', $adresse))); + if (preg_match('/(3100|3200|3300|3999)/', $ann['typeEven'].';'.$ann['strEven'])) { + $depotComptes = true; + $strRCS = 'Siren : '. $ann['siren'] . '. '; + } else { + $strRCS = $ann['siren'] . ' RCS '. ucfirst(strtolower(strtr($ann['triNom'], array('TGIcc '=>'', 'TGI '=>'', 'TC '=>'', 'TI '=>'', )))).'. '; + } + + $texteAnnonce = 'Date : '.strtolower(Metier_Util_Date::dateT('Y-m-d', 'd M Y', $ann['dateJugement'])) .'. '. $this->iBodacc->getEvenement($ann['typeEven']).'. '. + $strRCS . trim($ann['raisonSociale']). '. Adresse : '. $adresse.' '.$ann['codePostal'].' '.$ann['ville'].'. '; + + if (trim($ann['numero']) != '') { + $texteAnnonce.='Jugement Numéro : '.trim($ann['numero']).'. '; + } + + if ($ann['dateCessationPaiement']*1 != 0) { + $texteAnnonce.='Cessation des paiements le '.strtolower(Metier_Util_Date::dateT('Y-m-d', 'd M Y', $ann['dateCessationPaiement'])).'. '; + } + + for ($mandNum = 1; $mandNum < 5; $mandNum++) { + if (trim($ann['inter'.$mandNum.'type']) != '' + && ($ann['inter'.$mandNum.'id']>0 || trim($ann['inter'.$mandNum.'nom']) != '')) { + $texteAnnonce.= $tabInter[$ann['inter'.$mandNum.'type']].' : '.$ann['inter'.$mandNum.'nom']; + if ($ann['inter'.$mandNum.'id'] != 0) { + $mandStmt = $this->conn->executeQuery("SELECT sirenGrp, sirenMand, + tel, fax, email FROM jo.tabMandataires + WHERE id=".$ann['inter'.$mandNum.'id']); + $mand = $mandStmt->fetch(\PDO::FETCH_ASSOC); + if ($mand['sirenGrp'] != 0) { + $texteAnnonce.= ', Siren SCP '.$mand['sirenGrp']; + } + if ($mand['sirenMand'] != 0) { + $texteAnnonce.= ', Siren '.$mand['sirenMand']; + } + if ($mand['tel'] != '') { + $texteAnnonce.= ', Telephone '.$mand['tel']; + } + if ($mand['fax'] != '') { + $texteAnnonce.= ', Telecopie '.$mand['fax']; + } + if ($mand['email'] != '') { + $texteAnnonce.= ', E-mail : '.$mand['email']; + } + } + $texteAnnonce.= '. '; + } + } + + if (trim($ann['nouvActivite']) != '') { + $texteAnnonce.= ' Activité : '.trim($ann['nouvActivite']).'. '; + } + if (trim($ann['nouvDir']) != '') { + $texteAnnonce.= ' Administration : '.trim($ann['nouvDir']).'. '; + } + if (trim($ann['nouvAdr']) != '') { + $texteAnnonce.= ' Nouvelle adresse : '.trim($ann['nouvAdr']).'. '; + } + if ($ann['nouvFJ']*1 > 0) { + $texteAnnonce.= ' Transformation de la société en '.$this->getLibelleFJ($ann['nouvFJ']).'. '; + } + + if ($ann['dateEffetFinP']*1 != '') { + if ($depotComptes) { + $texteAnnonce.= ' Comptes annuels et rapports de l\'exercice clos le : '. + strtolower(Metier_Util_Date::dateT('Y-m-d', 'd M Y', $ann['dateEffetFinP'])).'. '; + } else { + $texteAnnonce.= ' Date d\'effet : '. + strtolower(Metier_Util_Date::dateT('Y-m-d', 'd M Y', $ann['dateEffetFinP'])).'. '; + } + } + + if (trim($ann['complement']) != '') { + $texteAnnonce.= ' Observations : '.trim($ann['complement']).'.'; + } + + $tabRetEven = array(); + $tabRetEven[] = array( + 'CodeEven' => $ann['typeEven'], + 'LibEven' => $this->iBodacc->getEvenement($ann['typeEven']) + ); + if ($ann['typeEven']==2102 || $ann['typeEven']==2100) { + $capital = true; + } else { + $capital = false; + } + + if (trim($ann['strEven']) != '') { + $tabEven = explode(';', $ann['strEven']); + foreach ($tabEven as $even) { + $tabRetEven[] = array( + 'CodeEven' => $even, + 'LibEven' => $this->iBodacc->getEvenement($even) + ); + if ($even>=1000 && $even<2000) { + $rubriqueRet = 'procol'; + } elseif ($even>=2000 && $even<3000) { + $rubriqueRet='mmd'; + } elseif ($even>=3000 && $even<4000) { + $rubriqueRet = 'comptes'; + } elseif ($even>=4000 && $even<5000) { + $rubriqueRet = 'creations'; + } elseif ($even>=5000 && $even<6000) { + $rubriqueRet = 'ventes'; + } elseif ($even>=6000 && $even<7000) { + $rubriqueRet = 'radiations'; + } + if ($even==2102 || $even==2100) { + $capital = true; + } + } + } + + // --- Detection plan + if ($this->AnnoncesLegalesVisu === false) { + $this->getAnnoncesLegalesPlan('annonce', $this->Identite['FJ'], $ann); + } + + $strVente=''; + $nouvCapital=''; + if ($ann['montant']>0) { + if ($capital) { + $nouvCapital=$ann['montant']; + $texteAnnonce.=' Nouveau capital : '.trim($ann['montant']). ' euros'; + if ($ann['actionsNb']>0) { + $texteAnnonce.=' divisé en '.$ann['actionsNb'].' actions de '. round($ann['montant']/$ann['actionsNb']). ' euros'; + } + } elseif (!preg_match('/ pour un montant de /Uis', $ann['complement'])) { + $texteAnnonce.=' Montant : '.trim($ann['montant']). ' euros'; + $strVente=trim($ann['montant']). ' EUR'; + } + $texteAnnonce.='. '; + } + + // On ne prend l'annonce saisie directement que si elle est plus volumineuse + if (trim($ann['annonce']) != '' && strlen(trim($ann['annonce']))>strlen($texteAnnonce)) { + $texteAnnonce=trim($ann['annonce']); + } + + $texteAnnonce = preg_replace('/ +/', ' ', strtr($texteAnnonce, array('*'=>' ', '/'=>' ', '..'=>'.'))); + + if (str_replace('-', '', $ann['dateSource'])*1 != 0) { + $dateParution = $ann['dateSource']; + } else { + $dateParution = $ann['dateInsert']; + } + + $retFormat = array( + 'id' => '0.'.$ann['id'], + 'BodaccCode' => $ann['source'].'-'.$ann['parutionIdJal'], + 'BodaccNum' => $ann['parutionNum'], + 'NumAnnonce' => 0, + 'DateParution' => $dateParution, + 'Departement' => $dept, + 'Tribunal' => $ann['triNom'], + 'TribunalSiret' => $ann['triSiret'], + 'Rubrique' => $rubriqueRet, + 'typeAnnonce' => 'insertion', + 'dateEffet' => $ann['dateCessationPaiement'], + 'dateJugement' => $ann['dateJugement'], + 'dateFin' => $ann['dateEffetFinP'], + 'montantVente' => $strVente, + 'libFJ' => $ann['nouvFJ'], + 'codFJ' => $this->iBodacc->getCodeFormeJur($ann['nouvFJ']), + 'capital' => $nouvCapital, + 'capitalDev' => 'EUR', + 'raisonSociale' => $ann['raisonSociale'], + 'nomCommercial' => '', + 'sigle' => '', + 'adresse' => $ann['nouvAdr'], + 'dateInsertionSD' => $ann['dateInsert'], + 'evenements' => $tabRetEven, + 'texteAnnonce' => $texteAnnonce, + 'complement' => $ann['complement'], + ); + if ($depotComptes) { + $retFormat['dateEffet'] = $ann['dateEffetFinP']; + } + $tabRet[] = $retFormat; + } + } // --- Fin du parcours des annonces + + // --- Effacement procol + if ($this->AnnoncesLegalesVisu === false) { + if ($this->getAnnoncesLegalesEffacement($siren, $rubrique, $tabRet) === true) { + return array(); + } + } + } + + return $tabRet; + } + + /** + * Retourne les annonces du bulletin des annonces légales officielles + * @param string $siren + * @param int $idAnnonce + * @param int $offset + * @param int $lignes + * @return array + */ + public function getAnnoncesBalo($siren, $idAnnonce=0, $offset=0, $lignes=100) + { + $siren = str_pad($siren, 9, '0', STR_PAD_LEFT); + + $strIdAnn = ''; + $tabRet = array(); + + if ($idAnnonce > 0) { + $tmp = explode('.', $idAnnonce); + if (is_numeric($tmp[0])) { + $num = $tmp[0]; + if (is_numeric($tmp[1])) { + $par = $tmp[1]; + } + $strIdAnn = " AND Num_Affaire='$num' AND Num_Parution='$par' "; + } + } + + $mBalo = new Metier_Bodacc_MBalo(); + + try { + $stmt = $this->conn->executeQuery("SELECT Societe_Rcs, Categorie, Num_Affaire, + Date_Parution, Num_Parution, Url_Annonce_Html, Url_Annonce_Pdf, Annonce_Html, dateInsert + FROM jo.balo WHERE Societe_Rcs='$siren' $strIdAnn + ORDER BY Date_Parution DESC, Num_Affaire LIMIT $offset, $lignes"); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($stmt->rowCount() > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRetEven = array( 0 => array( + 'CodeEven' => $mBalo->getLibEven($row['Categorie']), + 'LibEven' => $row['Categorie'] + )); + + $texte = ''; + if ($idAnnonce != 0) { + $texte = strtr(preg_replace('//Uis', '', + preg_replace('/( class=".*")/ie', ' ', $row['Annonce_Html'])), + array(' '=>' ', ''=>'', ''=>'') + ); + } + + $tabRet[] = array( + 'id' => $row['Num_Affaire'].'.'.$row['Num_Parution'], + 'BodaccCode' => 'BALO', + 'BodaccNum' => $row['Num_Parution'], + 'NumAnnonce' => $row['Num_Affaire'], + 'DateParution' => $row['Date_Parution'], + 'typeAnnonce' => 'Insertion', + 'dateInsertionSD' => $row['dateInsert'], + 'evenements' => $tabRetEven, + 'Lien_Annonce_Pdf' => basename($row['Url_Annonce_Pdf']), + 'texteAnnonce' => $texte, + ); + } + } + + return $tabRet; + } + + /** + * Retourne le nombre d'annonce Balo pour un siren + * @param string $siren + * @return int + */ + public function getAnnoncesBaloCount($siren) + { + $nb = 0; + + try { + $stmt = $this->conn->executeQuery("SELECT COUNT(*) AS nb FROM jo.balo + WHERE Societe_Rcs='$siren' ORDER BY Date_Parution DESC, Num_Affaire"); + if ($stmt->rowCount()) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + return $result->nb; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return $nb; + } + + /** + * Retourne les annonces du bulletin officiel des annonces de marché publique + * @param string $siren + * @param string $idAnnonce + * @param string|array $type A:Avis d'attribution, M:Avis de marché + * @param int $offset + * @param int $lignes + * @return Ambigous multitype:multitype:string Ambigous , unknown> + */ + public function getAnnoncesBoamp($siren, $idAnnonce='', $type=array('A', 'M'), $offset=0, $lignes=100) + { + $siren = intval($siren); + + $strIdAnn = ''; + $idA = 0; + $tabRet = array(); + + $mBoamp = new Metier_Bodacc_MBoamp(); + + // --- Recherche dans les avis d'attribution + if (is_string($type) && $type == 'A' || is_array($type) && in_array('A', $type)) { + if ($idAnnonce != '') { + $tmp = explode('.', $idAnnonce); + $idA = $tmp[1]; + if ($tmp[0] == 'A') { + $strIdAnn = " AND l.id='$idA' "; + } elseif ($tmp[0] == 'O') { + $strIdAnn = ""; + } + } + try { + $stmt = $this->conn->executeQuery("SELECT l.id, l.idAnn, l.Boamp_Code, l.Boamp_Rubrique, + b.Boamp_Rubrique_Lib, b.typeAnnonce, l.Boamp_Date_Parution, b.Boamp_Num, + b.Boamp_Annee_Parution, b.Num_AnnoncePre, b.Num_Annonce, b.Boamp_Dept, b.annonce, + l.num, l.`desc` AS description, l.nom, d.raisonSociale, l.montantTxt, + sum(l.montant) AS montant, l.montantAnMin, l.montantAnMax, l.trancheCond, + l.trancheFerme, l.dateAttrib, l.intitule, l.nomenclature, l.objets, l.cpv, + l.cpvComp, l.volume, l.execution, l.livraison, l.dureeJours, l.dureeMois, l.dateDeb, + l.dateFin, l.dateInsert, d.titre, d.objet, d.titreMarche, d.typeObjetMarche, d.objetAutre, d.autres + FROM jo.boamp_lots l, jo.boamp b, jo.boamp_detail d + WHERE l.siren=$siren AND l.idAnn=b.id $strIdAnn AND d.id=b.id + GROUP BY b.id ORDER BY l.Boamp_Date_Parution DESC LIMIT $offset,$lignes"); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + if ($stmt->rowCount() > 0) { + while ($ann = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabRetEven = array(); + if ($ann['nom'] != '') { + $strMontant= ' "'.strtoupper($ann['raisonSociale']).'"'; + } + if ($ann['montant']*1 > 0) { + $strMontant.= ' ('.number_format($ann['montant'], 2, ',', ' ').' EUR)'; + } elseif ($ann['montantTxt'] != '') { + $strMontant.= ' ('.$ann['montantTxt'].')'; + } elseif ($ann['montantAnMin'] != '' && $ann['montantAnMax']) { + $strMontant.= ' ('.$ann['montantAnMin'].' à '.$ann['montantAnMax'].')'; + } elseif ($ann['trancheCond'] != '' && $ann['trancheFerme']) { + $strMontant.= ' ('.$ann['trancheCond'].' / '.$ann['trancheFerme'].')'; + } else { + $strMontant.= ''; + } + + $tabRetEven[] = array( + 'CodeEven' => $mBoamp->getCodEvenSd($ann['Boamp_Rubrique']), + 'LibEven' => $mBoamp->getLibEvenBoamp($ann['Boamp_Rubrique'], + $ann['Boamp_Rubrique_Lib']).$strMontant + ); + + // Axxx pour lot attribué ou Oxxx pour Organisation + if ($ann['Num_AnnoncePre'] != 0) { + $numAnn = $ann['Num_AnnoncePre'].'-'.$ann['Num_Annonce']; + } else { + $numAnn = $ann['Num_Annonce']; + } + if ($ann['Boamp_Code']=='MAPA') { + $lienMapa = 'http://www.boamp.fr/index.php?action=avis&num_parution=MAPA&num_annonce='. + $ann['Num_AnnoncePre'].'-'.$ann['Num_Annonce'].'&total=500&_s=0&indice=0'; + } else { + $lettre = substr($ann['Boamp_Code'], -1); + $annee = $ann['Boamp_Annee_Parution']; + $num = sprintf("%04d", $ann['Boamp_Num']); + $numPar = $lettre.$annee.$num; + $lienMapa = 'http://www.boamp.fr/index.php?action=avis&num_parution='. + $numPar.'&num_annonce='.$ann['Num_Annonce'].'&total=500&_s=0&indice=0'; + } + $objetMarche = trim($ann['objet'].' '.$ann['objetAutre'].' '.$ann['autres']); + if ($idA != 0) { + if ($ann['Boamp_Code'] == 'MAPA') { + $texte = $ann['annonce']; + } else { + $texte = strtr(preg_replace('//Uis', '', + preg_replace('//Uis', '', + preg_replace('/( class=".*")/ie', ' ', $ann['annonce']))), + array(' '=>' ', ''=>'', ''=>'', '

'=>'
') + ); + } + } + $tabRet[] = array( + 'id' => 'A.'.$ann['id'], + 'BodaccCode' => $ann['Boamp_Code'], + 'BodaccNum' => $ann['Boamp_Num'], + 'NumAnnonce' => $numAnn, + 'DateParution' => $ann['Boamp_Date_Parution'], + 'Departement' => $ann['Boamp_Dept'], + 'typeAnnonce' => $ann['typeAnnonce'], + 'dateInsertionSD' => $ann['dateInsert'], + 'Montant' => $ann['montant'], + 'Organisme' => strtoupper($ann['raisonSociale']), + 'Objet' => $objetMarche, + 'evenements' => $tabRetEven, + 'infosComp' => '', + 'Lien_Annonce_Html' => $lienMapa, + 'texteAnnonce' => $texte, + ); + } + } + } + + // --- Recherche dans les avis de marchés + if (is_string($type) && $type=='M' || is_array($type) && in_array('M', $type)) { + if ($idAnnonce != '') { + $tmp = explode('.', $idAnnonce); + $idA = $tmp[1]; + if ($tmp[0] == 'A') { + $strIdAnn = " AND d.id='$idA' "; + } elseif ($tmp[0] == 'O') { + $strIdAnn = ""; + } + } + try { + $stmt = $this->conn->executeQuery("SELECT d.id, d.Boamp_Code, d.Boamp_Rubrique, + b.Boamp_Rubrique_Lib, b.typeAnnonce, d.Boamp_Date_Parution, b.Boamp_Num, + b.Boamp_Annee_Parution, b.Num_AnnoncePre, b.Num_Annonce, b.Boamp_Dept, + b.annonce, titre AS description, d.raisonSociale, d.estimValeur AS montantTxt, + d.estimValeurMin AS montantAnMin, d.estimValeurMax AS montantAnMax, + objet, cpv_obj, cpv_comp, d.dateInsert + FROM jo.boamp b, jo.boamp_detail d + WHERE d.siren=$siren AND d.id=b.id $strIdAnn + GROUP BY b.id ORDER BY d.Boamp_Date_Parution DESC LIMIT $offset,$lignes"); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($stmt->rowCount() > 0) { + while ($ann = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $id = $ann['id']; + $rub = $ann['Boamp_Rubrique']; + $tabRetEven = array(); + $strMontant = ''; + if ($ann['objet'] != '') { + $strMontant.= ' "'.$ann['objet'].'"'; + } + + if ($rub=='6' || // Avis d'attribution + $rub=='7' || // Avis en cas de transparence ex ante volontaire + $rub=='77' || // Avis d'attribution + $rub=='8' || // Avis d'attribution + $rub=='82' || // Rectificatif + $rub=='83' || // Rectificatif + $rub=='84' || // Avis d'attribution comportant des lots infructueux + $rub=='9' || // Résultat de marché + $rub=='92' || // Rectificatif + $rub=='93' || // Résultat de marché / Infructueux - Sans suite + $rub=='94' || // Résultat de marché / Résultat de marché comportant des lots infructueux + $rub=='96' || // Annulation - Rectificatif - Sans suite - Infructueux + $rub=='977' // Annulation - Rectificatif / Avis en cas de transparence ex ante volontaire + ) { + $stmt2 = $this->conn->executeQuery("SELECT l.id, l.idAnn, l.Boamp_Code, + l.Boamp_Rubrique, l.Boamp_Date_Parution, l.num, l.desc AS description, + l.nom, l.montantTxt, l.montant, l.montantAnMin, l.montantAnMax, + l.trancheCond, l.trancheFerme, l.dateAttrib, l.intitule, l.nomenclature, + l.objets, l.cpv, l.cpvComp, l.volume, l.execution, l.livraison, + l.dureeJours, l.dureeMois, l.dateDeb, l.dateFin + FROM jo.boamp_lots l WHERE l.idAnn=$id"); + while ($ann2 = $stmt2->fetch(\PDO::FETCH_ASSOC)) { + if ($ann2['nom'] != '') { + $strMontant.= ' "'.strtoupper($ann2['nom']).'"'; + } + if ($ann2['montant']*1 > 0) { + $strMontant.= ' ('.number_format($ann2['montant'], 2, ',', ' ').' EUR)'; + } elseif ($ann2['montantTxt'] != '') { + $strMontant.= ' ('.$ann2['montantTxt'].')'; + } elseif ($ann2['montantAnMin'] != '' && $ann2['montantAnMax']) { + $strMontant.= ' ('.$ann2['montantAnMin'].' à '.$ann2['montantAnMax'].')'; + } elseif ($ann2['trancheCond'] != '' && $ann2['trancheFerme']) { + $strMontant.= ' ('.$ann['trancheCond'].' / '.$ann['trancheFerme'].')'; + } else { + $strMontant.= ''; + } + } + } + $tabRetEven[] = array( + 'CodeEven' => $mBoamp->getCodEvenSd($ann['Boamp_Rubrique']), + 'LibEven' => $mBoamp->getLibEvenBoamp($ann['Boamp_Rubrique'], + $ann['Boamp_Rubrique_Lib']).$strMontant + ); + + // Axxx pour lot attribué ou Oxxx pour Organisation + if ($ann['Num_AnnoncePre'] != 0) { + $numAnn = $ann['Num_AnnoncePre'].'-'.$ann['Num_Annonce']; + } else { + $numAnn = $ann['Num_Annonce']; + } + if ($ann['Boamp_Code'] == 'MAPA') { + $lienMapa = 'http://www.boamp.fr/index.php?action=avis&num_parution=MAPA&num_annonce='. + $ann['Num_AnnoncePre'].'-'.$ann['Num_Annonce'].'&total=500&_s=0&indice=0'; + } else { + $lettre = substr($ann['Boamp_Code'], -1); + $annee = $ann['Boamp_Annee_Parution']; + $num = sprintf("%04d", $ann['Boamp_Num']); + $numPar = $lettre.$annee.$num; + $lienMapa = 'http://www.boamp.fr/index.php?action=avis&num_parution='.$numPar. + '&num_annonce='.$ann['Num_Annonce'].'&total=500&_s=0&indice=0'; + } + if ($idA != 0) { + if ($ann['Boamp_Code'] == 'MAPA') { + $texte = $ann['annonce']; + } else { + $texte = strtr(preg_replace('//Uis', '', + preg_replace('//Uis', '', + preg_replace('/( class=".*")/ie', ' ', $ann['annonce']))), + array(' '=>' ', ''=>'', ''=>'', '

'=>'
') + ); + } + } + $tabRet[] = array( + 'id' => 'O.'.$id, + 'BodaccCode' => $ann['Boamp_Code'], + 'BodaccNum' => $ann['Boamp_Num'], + 'NumAnnonce' => $numAnn, + 'DateParution' => $ann['Boamp_Date_Parution'], + 'Departement' => $ann['Boamp_Dept'], + 'typeAnnonce' => $ann['typeAnnonce'], + 'dateInsertionSD' => $ann['dateInsert'], + 'evenements' => $tabRetEven, + 'infosComp' => '', + 'Lien_Annonce_Html' => $lienMapa, + 'texteAnnonce' => $texte, + ); + } + } + } + + if ($this->logger !== null) { + $this->logger->info("getAnnoncesBoamp(siren=$siren, idAnnonce=$idAnnonce, $idA)"); + } + return $tabRet; + } + + /** + * Nombre total d'annonces BOAMP + * @param string $siren + * @param string $type A:avis d'attribution, M:Avis de marché + */ + public function getAnnoncesBoampCount($siren, $type='') + { + $bodaccA = 0; + $bodaccM = 0; + + // --- Recherche dans les avis d'attribution + if ($type=='' || $type=='A') { + try { + $stmt = $this->conn->executeQuery("SELECT COUNT(b.id) AS nb FROM jo.boamp_lots l, jo.boamp b, jo.boamp_detail d + WHERE l.siren=$siren AND l.idAnn=b.id AND d.id=b.id"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $bodaccA = $result->nb; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + // --- Recherche dans les avis de marchés + if ($type=='' || $type=='M') { + try { + $stmt = $this->conn->executeQuery("SELECT COUNT(d.id) AS nb FROM jo.boamp b, jo.boamp_detail d + WHERE d.siren=$siren AND d.id=b.id"); + if ($stmt->rowCount()) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $bodaccM = $result->nb; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + return $bodaccA + $bodaccM; + } + + /** + * + * @param unknown $siren + * @param number $idAnnonce + * @param number $offset + * @param number $lignes + */ + public function getAnnoncesAsso($siren, $idAnnonce=0, $offset=0, $lignes=100) + { + if ($this->logger !== null) { + $this->logger->info("Début getAnnoncesAsso(siren=$siren, idAnnonce=$idAnnonce)"); + } + $siretMin = $siren.'00000'; + $siretMax = $siren.'99999'; + $strIdAnn = ''; + $tabRet = array(); + + if ($idAnnonce > 0) { + $strIdAnn = "id=$idAnnonce"; + } elseif (substr($siren, 0, 1)=='W' && $idAnnonce == 0) { + $strIdAnn = "Waldec='$siren'"; + } else { + $strIdAnn = "siren=$siren"; + } + + $annonceNb = 0; + try { + $stmt = $this->conn->executeQuery("SELECT id, Assoc_Nom, siren, nic, Waldec, Activite, Num_Annonce, + Date_Parution, Num_Parution, Departement, Sous_Prefecture, Type_Annonce, Annonce_Html, + Assoc_Objet, Assoc_Adresse, Assoc_NObjet, Assoc_AObjet, Assoc_NAdresse, Assoc_Fusion, + Assoc_Annulation, Assoc_ANom, Assoc_NNom, Assoc_Date_Declaration, Assoc_Date_Declaration2, + typeAnnonce, codEven, dateInsert + FROM jo.asso WHERE $strIdAnn AND dateSuppr=0 ORDER BY Date_Parution DESC LIMIT $offset,$lignes"); + $annonceNb = $stmt->rowCount(); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + if ($annonceNb > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tabEven = explode(';', $row['codEven']); + $tabRetEven = array(); + if ($row['typeAnnonce'] != 'Insertion') { + $tabRetEven[] = array( + 'CodeEven'=>'0000', + 'LibEven'=> $row['typeAnnonce'].' de l\'annonce du '. + Metier_Util_Date::dateT('Y-m-d', 'd/m/Y', $row['corrDate_Parution']) + ); + } else { + if (trim($row['codEven']) != '') { + foreach ($tabEven as $even) { + $tabRetEven[] = array( + 'CodeEven' => $even, + 'LibEven' => $this->iBodacc->getEvenement($even) + ); + } + } else { + $tabRetEven[] = array( + 'CodeEven' => 0000, + 'LibEven' => $row['Type_Annonce'] + ); + } + } + + // Rubrique + if (preg_match('/cr(é|e)ation/iu', $row['Type_Annonce'])) { + $rub = 'creations'; + } elseif (preg_match('/Dissolution/i', $row['Type_Annonce'])) { + $rub = 'radiations'; + } else { + $rub = 'mmd'; + } + + // typeAnnonce + if (preg_match('/Annulation/i', $row['Type_Annonce'])) { + $type = 'Suppression'; + } elseif (preg_match('/Rectif/i', $row['Type_Annonce'])) { + $type = 'Rectificatif'; + } else { + $type = 'Insertion'; + } + + $dateInsert = ''; + if (str_replace('-', '', $row['Date_Parution'])*1>=20070401) { + $dateInsert = $row['Date_Parution']; + } + + $texte = ''; + if ($idAnnonce != 0) { + if (mb_detect_encoding($row['Annonce_Html']) == 'UTF-8') { + $texte = utf8_decode($row['Annonce_Html']); + } else { + $texte = $row['Annonce_Html']; + } + } + + $tabRet[] = array( + 'id' => $row['id'], + 'BodaccCode' => 'ASSO', + 'BodaccNum' => $row['Num_Parution'], + 'NumAnnonce' => $row['Num_Annonce'], + 'DateParution' => $row['Date_Parution'], + 'Departement' => $row['Departement'], + 'Tribunal' => $row['Sous_Prefecture'], + 'Rubrique' => $rub, + 'typeAnnonce' => $type, + 'dateInsertionSD' => $dateInsert, + 'evenements' => $tabRetEven, + 'texteAnnonce' => $texte, + ); + } + } + + if ($this->logger !== null) { + $this->logger->info("Fin getAnnoncesAsso(siren=$siren, idAnnonce=$idAnnonce) : ".count($tabRet).' annonce(s)'); + } + return $tabRet; + } + + /** + * Nombre d'annonces association + * @param int $idAnnonce + * @param string $siren + */ + public function getAnnoncesAssoCount($siren, $idAnnonce = 0) + { + $strIdAnn = ''; + + if ($idAnnonce > 0) { + $strIdAnn = "id=$idAnnonce"; + } elseif (substr($siren, 0, 1) == 'W' && $idAnnonce == 0) { + $strIdAnn = "Waldec='$siren'"; + } else { + $strIdAnn = "siren=$siren"; + } + + try { + $stmt = $this->conn->executeQuery("SELECT COUNT(*) AS nb FROM jo.asso WHERE $strIdAnn AND dateSuppr=0"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + return $result->nb; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + + return 0; + } + + /** @todo $nic inutilisé pour l'instant **/ + public function getIdentitePart($siren, $rs, $enseigne, $sigle, $nic=0, $refresh=false) + { + $dateUpdate = 0; + $lastYear = date('Ymd', mktime(0, 0, 0, date('m'), date('d'), date('Y')-1))*1; + $tabRet = array(); + + /** Chargement initial au cas ou la requête Coface plante **/ + try { + $stmt = $this->conn->executeQuery("SELECT raisonSociale, isin, nscrl, tel, fax, web, mail, + DATE(dateUpdate)*1 as dateUpdate FROM jo.infos_entrep WHERE siren=$siren"); + if ($stmt->rowCount() > 0) { + $idComp = $stmt->fetch(\PDO::FETCH_ASSOC); + // L'entrep est en base infos_entrep + if ($idComp['web'] != 'http://') { + $web = $idComp['web']; + } else { + $web = ''; + } + $tabRet = array( + 'raisonSociale' => $idComp['raisonSociale'], + 'isin' => $idComp['isin'], + 'nscrl' => $idComp['nscrl'], + 'tel' => $idComp['tel'], + 'fax' => $idComp['fax'], + 'web' => $web, + 'mail' => $idComp['mail'], + 'enCache' => true, + ); + $dateUpdate = $idComp['dateUpdate']; + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return $tabRet; + } + + /** + * + * @param unknown $naf4 + * @param number $dep + * @return boolean|multitype:[] + */ + public function listeConventions($naf4, $dep=0) + { + $dep = $dep*1; + if ($dep > 0) { + if ($dep < 10) { + $dep = 'Dep0'.$dep; + } else { + $dep = 'Dep'.$dep; + } + $strDep = "AND (n.territoire='' OR n.territoire LIKE '%$dep%')"; + } + try { + $stmt = $this->conn->executeQuery("SELECT n.`id CC`, n.`nom CC`, n.`editeur CC`, n.`nb page CC`, n.`isbn CC`, n.`date edition CC`, c.infoCC, joCCmaj + FROM jo.conv_naf n, jo.conventions c WHERE n.naf='$naf4' AND substring(n.`id CC`,1,4)=c.numBrochure $strDep GROUP BY n.`id CC`"); + if ($stmt->rowCount() > 0) { + return $stmt->fetchAll(\PDO::FETCH_ASSOC); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + protected function findSiteWeb($rs) + { + return false; + } + + /** + * + * @param unknown $siren + * @param string $type + * @param string $annee + * @return boolean|multitype:[] + */ + public function getImportExport($siren, $type='', $annee='') + { + if ($type == '') { + $strimportExport = " AND importExport IN ('I','E') "; + } elseif ($type == 'I') { + $strimportExport = " AND importExport='I' "; + } elseif ($type == 'E') { + $strimportExport = " AND importExport='E' "; + } + if ($annee*1 > 0) { + $strAnnees = " AND annee=$annee "; + } else { + $tabAnnees = array(); + $strAnnees = ' AND annee IN ('; + for ($an = date('Y')-6; $an < date('Y'); $an++) { + $tabAnnees[] = $an; + } + $strAnnees.= implode(',', $tabAnnees).')'; + } + try { + $stmt = $this->conn->executeQuery("SELECT importExport, annee, rangNational, deptSiege + FROM jo.importExport WHERE siren=$siren $strImportExport $strAnnees ORDER BY annee DESC, importExport ASC"); + if ($stmt->rowCount() > 0) { + return $stmt->fetch(\PDO::FETCH_ASSOC); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + /** + * Elements provenant du Notice 80 hors identité + * @param string $siren + * @param string $nic + * @return multitype: + */ + public function getInfosNotice($siren, $nic) + { + try { + $stmt = $this->conn->executeQuery("SELECT LPAD(insSIREN,9,0) AS insSIREN, LPAD(insNIC,5,0) AS insNIC, + insL4_VOIE, insL6_POST, LPAD(insRPET,2,0) AS insRPET, insDEPCOMEN, LPAD(insRPEN,2,0) AS insRPEN, + insARRONET, insCTONET, insTCD, LPAD(insZEMET,2,0) AS insZEMET, insDU, insTU, + LPAD(insUU,2,0) AS insUU, LPAD(insMMINTRET,2,0) AS insMMINTRET, LPAD(insMMINTREN,2,0) AS insMMINTREN, + insVMAJ, insVMAJ1, insVMAJ2, insVMAJ3, insRECME, insEAEANT, insEAEAPET, insEAESEC1T, + insEAESEC2T, insEAEANN, insEAEAPEN, insEAESEC1N, insEAESEC2N, insEAESEC3N, insEAESEC4N, + dateNotice FROM insee.insee_notices WHERE insSIREN=$siren AND insNIC=$nic ORDER BY dateNotice DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + return $stmt->fetch(\PDO::FETCH_ASSOC); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + try { + $stmt = $this->conn->executeQuery("SELECT LPAD(insSIREN,9,0) AS insSIREN, LPAD(insNIC,5,0) AS insNIC, + insL4_VOIE, insL6_POST, LPAD(insRPET,2,0) AS insRPET, insDEPCOMEN, LPAD(insRPEN,2,0) AS insRPEN, + insARRONET, insCTONET, insTCD, LPAD(insZEMET,2,0) AS insZEMET, insDU, insTU, + LPAD(insUU,2,0) AS insUU, insAMINTRET, insAMINTREN, insVMAJ, insVMAJ1, insVMAJ2, + insVMAJ3, '' AS insRECME, '' AS insEAEANT, '' AS insEAEAPET, '' AS insEAESEC1T, '' AS insEAESEC2T, + insESAANN AS insEAEANN, insESAPEN AS insEAEAPEN, insESASEC1N AS insEAESEC1N, + insESASEC2N AS insEAESEC2N, insESASEC3N AS insEAESEC3N, insESASEC4N AS insEAESEC4N, + dateInsert AS dateNotice FROM insee.insee_even WHERE insSIREN=$siren AND insNIC=$nic ORDER BY dateNotice DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + return $stmt->fetch(\PDO::FETCH_ASSOC); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return array(); + } + + /** + * + * @param unknown $adresseNum + * @param unknown $adresseBtq + * @param unknown $adresseVoie + * @param unknown $adresseRue + * @param unknown $adresseComp + * @param unknown $cp + * @param unknown $ville + * @param string $active + * @return boolean|boolean|multitype:[] + */ + public function infoAdresseDom($adresseNum, $adresseBtq, $adresseVoie, $adresseRue, $adresseComp, $cp, $ville, $active=true) + { + $adresseNum = trim($adresseNum)*1; + $adresseBtq = '';//trim($adresseBtq); + $adresseVoie = trim($adresseVoie); + $adresseRue = trim($adresseRue); + $cp = trim($cp); + $ville = trim($ville); + + if ($adresseNum == '' && $adresseBtq == '' && $adresseVoie == '' && $adresseRue == '' && $cp == '' && $ville == '') { + return false; + } + + $tabAdr = $this->structureVoie($adresseNum.' '.$adresseBtq.' '.$adresseVoie.' '.$adresseRue); + $num = $tabAdr['num']*1; + if ($num == 0) { + return false; + } + $indRep = trim($tabAdr['indRep']); + $typeVoie = trim($tabAdr['typeVoie']); + $libVoie = trim(substr($tabAdr['libVoie'], -5)); + + $strAdrActive = ''; + if ($active) { + $strAdrActive.= " AND (enActif=1 OR etActif=1) AND nbEntrep>30 AND pasEntrepDom=0 AND siren>1000 "; + } + + try { + $stmt = $this->conn->executeQuery("SELECT id, siren, nic, enActif, etActif, procol, nom, nom2, + sigle, enseigne, adrNum, adrBtq, adrTypVoie, adrLibVoie, ville, cp, adrComp, adrDistSp, + cj, apen, apet, nbEntrep, dateInsert, dateUpdate FROM jo.tabAdrDom + WHERE adrNum=$num AND adrBtq='$indRep' AND adrTypVoie LIKE '%$typeVoie%' AND + adrLibVoie LIKE '%$libVoie%' AND cp=$cp $strAdrActive GROUP BY siren ORDER BY enActif DESC"); + if ($stmt->rowCount() > 0) { + return $stmt->fetchAll(\PDO::FETCH_ASSOC); + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + return false; + } + + /** + * Retourne l'adresse normalisé + * @param string $siren + * @param string $nic + * @param string $cedexa (1=>On, 0=>Off) + * @return array + * L1_NOM, L2_NOM2, L3_ADRCOMP, L4_VOIE, L5_DISTSP, L6_POST, L7_PAYS + */ + public function getAdresse($siren, $nic, $cedexa=1) + { + // Table etablissements + $tabIdentite = $this->getIdentiteLight($siren, $nic); + $codeVoie = strtoupper($this->getCodeVoie($tabIdentite['AdresseVoie'])); + if ($codeVoie == '') { + $codeVoie = $tabIdentite['AdresseVoie']; + } + $tabRet = array( + 'L1_NOM' => $tabIdentite['Nom'], + 'L2_NOM2' => $tabIdentite['Enseigne'], + 'L3_ADRCOMP' => '', + 'L4_VOIE' => trim(preg_replace('/ +/', ' ', preg_replace('/^0+/', '', $tabIdentite['AdresseNum'].' '. + $tabIdentite['AdresseBtq'].' '. $codeVoie.' '. $tabIdentite['AdresseRue']))), + 'L5_DISTSP' => $tabIdentite['Adresse2'], + 'L6_POST' => $tabIdentite['CP'].' '.$tabIdentite['Ville'], + 'L7_PAYS' => '', + ); + + if (strlen($tabRet['L4_VOIE']) > 38) { + $tabRet['L4_VOIE'] = trim(preg_replace('/ +/', ' ', preg_replace('/^0+/', '', + $tabIdentite['AdresseNum'].' '. + $tabIdentite['AdresseBtq'].' '. + $tabIdentite['AdresseVoie'].' '. + $tabIdentite['AdresseRue']))); + } + + //Notice 80 - Override $tabRet + $tabNotice = $this->getInfosNotice($siren, $nic); + if ($tabNotice['L6_POST'] != '' && $tabNotice['L6_POST'] != $tabRet['L6_POST']) { + $tabRet['L6_POST'] = $tabNotice['L6_POST']; + } + + $stmt = $this->conn->executeQuery("SELECT NOM2, ADR_COMP, ADR_DISTSP, PAYS + FROM insee.identite WHERE SIREN=$siren AND NIC=$nic"); + if ($stmt->rowCount() > 0) { + $tabIdentite = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($tabIdentite['NOM2'] != '' && $tabIdentite['NOM2'] != $tabRet['L2_NOM2']) { + $tabRet['L2_NOM2'] = $tabIdentite['NOM2']; + } + if ($tabIdentite['ADR_COMP'] != '' && $tabIdentite['ADR_COMP'] != $tabRet['L3_ADRCOMP']) { + $tabRet['L3_ADRCOMP'] = $tabIdentite['ADR_COMP']; + } + if ($tabIdentite['ADR_DISTSP'] != '' && $tabIdentite['ADR_DISTSP'] != $tabRet['L5_DISTSP']) { + $tabRet['L5_DISTSP'] = $tabIdentite['ADR_DISTSP']; + } + if ($tabIdentite['PAYS'] != '' && $tabIdentite['PAYS'] != $tabRet['L7_PAYS']) { + $tabRet['L7_PAYS'] = $tabIdentite['PAYS']; + } + } + + //Cedexa + if ($cedexa = 1) { + try { + $stmt = $this->conn->executeQuery("SELECT contrat, hexavia, codePostal, l1_nom, l2_nomComp, + l3_compGeo, l4_numVoie, l4_indRep, l4_libVoie, l5_distrib, l5_numMS, l5_libCom, + l6_codCedex, l6_achCedex, codeInsee, actif, dateFlux, dateInsert, dateUpdate + FROM insee.cedexa WHERE siren=$siren AND nic=$nic"); + if ($stmt->rowCount() > 0) { + $tabCedex = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($tabCedex['l2_nomComp'] != '' && $tabCedex['l2_nomComp'] != $tabRet['L2_NOM2']) { + $tabRet['L2_NOM2'] = $tabCedex['l2_nomComp']; + } + if ($tabCedex['l3_compGeo'] != '' && $tabCedex['l3_compGeo'] != $tabRet['L3_ADRCOMP']) { + $tabRet['L3_ADRCOMP'] = $tabCedex['l3_compGeo']; + } + $l4 = trim(preg_replace('/ +/', ' ', preg_replace('/^0+/', '', $tabCedex['l4_numVoie'].' '.$tabCedex['l4_indRep'].' '.$tabCedex['l4_libVoie']))); + if ($l4 != '' && $l4 != $tabRet['L4_VOIE']) { + $tabRet['L4_VOIE'] = $l4; + } + $l5 = trim(preg_replace('/ +/', ' ', $tabCedex['l5_distrib'].' '.$tabCedex['l5_numMS'].' '.$tabCedex['l5_libCom'])); + if ($l5 != '' && $l5 != $tabRet['L5_DISTSP']) { + $tabRet['L5_DISTSP'] = $l5; + } + $l6 = trim(preg_replace('/ +/', ' ', $tabCedex['l6_codCedex'].' '.$tabCedex['l6_achCedex'])); + if ($l6 != '' && $l6 != $tabRet['L6_POST']) { + $tabRet['L6_POST'] = $l6; + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + } + + return $tabRet; + } + + /** + * + * @param unknown $siren + * @param number $nic + * @return mixed + */ + public function getActivite($siren, $nic=0) + { + $tabIdentite = $this->getIdentiteLight($siren, $nic); + // F.Jur + $fj = $tabIdentite['FJ']; + // Naf 5 + $naf5en = $tabIdentite['NafEnt']; + $naf5et = $tabIdentite['NafEtab']; + // Naf 4 + $naf4en = $naf4et = -1; + $tabNaf4 = $this->getNaf4($siren, $nic); + if (isset($tabNaf4['apen4'])) { + $naf4en = $tabNaf4['apen4']; + } + if (isset($tabNaf4['apet4'])) { + $naf4et = $tabNaf4['apet4']; + } + + // Activité Pages Jaunes + $strNic = ''; + $an8en = $an8et = -1; + if ($nic*1 > 0) { + $strNic = "AND nic=$nic"; + } + + try { + $stmt = $this->conn->executeQuery("SELECT infoTel, count(*) AS nb FROM jo.telephonie + WHERE siren=$siren AND typeTel='an8' ORDER BY nb DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + if ($result->nb > 0) { + $an8en = $result->infoTel; + $stmt = $this->conn->executeQuery("SELECT infoTel FROM jo.telephonie + WHERE siren=$siren $strNic AND typeTel='an8' ORDER BY dateProvPartenaire DESC LIMIT 0,1"); + if ($stmt->rowCount() > 0) { + $result = $stmt->fetch(\PDO::FETCH_OBJ); + $an8et = $result->infoTel; + } + } + } + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + // Recherche des activités réglementées possibles Naf4&5 ou An8 + $actregNb = 0; + try { + $stmt = $this->conn->executeQuery("SELECT id, libActivite, listeActivite, naf5, naf4, codAn8, listeCJ, nomAutorite + FROM jo.tabActivReg WHERE naf5='$naf5en' OR naf5='$naf5et' OR naf4='$naf4en' + OR naf4='$naf4et' OR codAn8='$an8en' OR codAn8='$an8et'"); + $actregNb = $stmt->rowCount(); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + if ($actregNb > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + // Filtre 'listeActivite' : Si défini, on recherche la présence de mots dans l'activité + if (trim($row['listeActivite']) != '') { + $ok = false; + $tabTmp = explode(';', trim($row['listeActivite'])); + $tabIdentite = $this->getIdentiteEntreprise($siren, $nic); + foreach ($tabTmp as $strTmp) { + if (preg_match("/$strTmp/i", $tabIdentite['Activite'])) { + $ok = true; + } + } + if (!$ok) { + continue; + } + } + // Filtre 'listeCJ' : Si défini, on limite aux CJ listées + if (trim($row['listeCJ']) != '') { + $ok = false; + $tabTmp = explode(';', trim($row['listeCJ'])); + foreach ($tabTmp as $strTmp) { + if (preg_match("/^$strTmp/", $fj)) { + $ok = true; + } + } + if (!$ok) { + continue; + } + } + return array( + 'idActivite' => $row['id'], + 'libActivite' => $row['libActivite'], + 'nomAutorite' => $row['nomAutorite'], + ); + } + } + + return false; + } + + /** + * + * @param unknown $naf5 + * @return string|string + */ + public function getCodeNace($naf5) + { + if ($naf5 != '') { + $this->setTabCodesNaf(); + return $this->tabCodesNace[$naf5]; + } else { + return ''; + } + } + + /** + * + * @param unknown $refClient + * @param unknown $idClient + * @param unknown $login + * @param number $deb + * @param number $nbRep + * @param number $maxRep + * @return array + */ + public function getEtabClients($refClient, $idClient, $login, $deb=0, $nbRep=20, $maxRep=200) + { + $this->setTabCodesNaf(); + $deb = $deb*1; + $nbRep = $nbRep*1; + $limit = "LIMIT $deb, $nbRep"; + + try { + $stmt = $this->conn->executeQuery("SELECT 'Etab' AS Loc, e.id, e.source, e.source_id, + e.triCode, e.autre_id, e.siren, e.nic, e.siege, e.raisonSociale, e.enseigne, e.sigle, + e.adr_num, e.adr_btq, e.adr_typeVoie, e.adr_libVoie, e.adr_comp, e.adr_cp, e.adr_ville, + LPAD(e.tel,10,0) AS tel, LPAD(e.fax,10,0) AS fax, e.cj, e.ape_etab, e.ape_entrep, + CONCAT(e.siren, e.nic) AS siret, e.actif FROM jo.etablissements e, jo.surveillances_site s + WHERE s.login='$login' AND s.siren=e.siren AND (s.nic=e.nic OR e.siege=1) + AND s.ref='$refClient' ORDER BY e.siege DESC, e.actif DESC $limit"); + + $nbTot = $stmt->rowCount(); + } catch (\Doctrine\DBAL\DBALException $e) { + if ($this->logger !== null) { + $this->logger->error($e->getMessage()); + } + } + + if ($nbTot > 0) { + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $tel = sprintf('%010d', strtr($row['tel'], array('-'=>'', '/'=>'', '.'=>'', ','=>''))); + if ($tel != '0000000000') { + $tel = implode('.', str_split($tel, 2)); + } else { + $tel=''; + } + + $fax = sprintf('%010d', strtr($row['fax'], array('-'=>'', '/'=>'', '.'=>'', ','=>''))); + if ($fax != '0000000000') { + $fax = implode('.', str_split($fax, 2)); + } else { + $fax = ''; + } + + $tabRet[] = array( + 'Localisation' => $row['Loc'], + 'id' => $row['id'], + 'Pertinence' => 100, + 'Siret' => $row['siret'], + 'Siege' => $row['siege'], + 'Nom' => $row['raisonSociale'], + 'Sigle' => $row['sigle'], + 'Enseigne' => $row['enseigne'], + 'Adresse' => trim(preg_replace('/ +/', ' ', + trim($row['adr_num'] .' '. $row['adr_btq'] .' '. $row['adr_typeVoie'] + .' '. $row['adr_libVoie']))), + 'Adresse2' => trim(preg_replace('/ +/', ' ', $row['adr_comp'])), + 'CP' => $row['adr_cp'], + 'Ville' => $row['adr_ville'], + 'Tel' => $tel, + 'Fax' => $fax, + 'FJ' => $row['cj'], + 'FJLib' => $this->getLibelleFJ($row['cj']), + 'Siren' => $row['siren'], + 'Nic' => $row['nic'], + 'Actif' => $row['actif'], + 'NafEtab' => $row['ape_etab'], // Etablissement + 'NafEnt' => $row['ape_entrep'], // Entreprise + 'NafEtabLib' => $this->getLibelleNaf($row['ape_etab']), + 'NafEntLib' => $this->getLibelleNaf($row['ape_entrep']), + ); + } + } + + + // Evite l'affichage d'un 0 inutile sur l'Extranet + if ($dep==0) { + $dep=''; + } + + return array( + 'criteres' => array('siren'=>$siren, 'nic'=>$nic, 'dep'=>$dep), + 'nbReponses' => count($tabRet), + 'nbReponsesTotal' => $nbTot, + 'reponses' => $tabRet); + } + + /** + * + * @param unknown $siren + * @param string $nic + * @return boolean|boolean|string[]|boolean[]|unknown[]|mixed[]|NULL[] + */ + public function getAvisInsee($siren, $nic='') + { + if ($siren*1==0 || !$this->valideSiren($siren, $nic)) { + return false; + } + if ($nic == '' || $nic*1 == 0 || $nic > 99999) { + $strNic = " AND nic=nicSiege"; + } else { + $strNic = " AND nic=$nic"; + } + $stmt = $this->conn->executeQuery("SELECT raiSoc, dateMaj, siren, nic, etatEt, dateEtatEt, + typeEtab, adresseEt0, adresseEt1, adresseEt2, adresseEt3, fj, fjLib, nafEt, nafEtLib, + effEtPeriode, effEtTr, erreurs, adresseEn0, adresseEn1, adresseEn2, adresseEn3, nafEn, + nafEnLib, effEnPeriode, effEnTr, fjEn, fjEnLib, employes, etatEn, dateEtatEn, nicSiege, + nbEtabActifs, dateInsert, dateUpdate, + DATE(IF(dateUpdate>dateInsert, dateUpdate, dateInsert))*1 AS dateMajSD + FROM insee.insee_avis WHERE siren=$siren $strNic"); + $tabInfos = $stmt->fetch(\PDO::FETCH_ASSOC); + if ($tabInfos['dateMajSD'] == date('Ymd')) { + $tabInfos['enCache'] = true; + return $tabInfos; + } + + /** Initialisation de la session sur le site de l'Insee **/ + $url = 'http://avis-situation-sirene.insee.fr/avisitu/jsp/avis.jsp'; + $referer = $cookie = ''; + $page = getUrl($url, $cookie, '', $referer, false, 'avis-situation-sirene.insee.fr', '', 5); + //Code en 4xx ou 5xx signifie une erreur du serveur + $codeN = floor($page['code']/100); + if ($codeN == 4 || $codeN == 5) { + return false; + } else { + $tabInfos=array(); + $referer = $url; + $body = $page['body']; + $serviceDispo = true; + + if (preg_match("/
$siren, + 'critere' => $crit, // S pour le siège ou vide avec un NIC !!! + 'nic' => $nic, + 'departement' => $dep, + 'departement_actif' => $depActif, + 'bSubmit' => 'Valider'); + $page = getUrl($url, $cookie, $post, $referer, false, 'avis-situation-sirene.insee.fr', '', 5); + $referer=$url; + $body = $page['body']; + + if (preg_match("/

Fiche établissement<\/h3>/Uis", $body, $matches)) { + //
  • établissement
  • + $tabInfos['fiche']='etab'; + } + + if (preg_match('/
    (.*)/Uis', $body, $matches)) { + $tabInfos['raiSoc']=str_replace(''', "'", trim($matches[1])); + } + + if (preg_match("/Dernière mise à jour : (.*)<\/div>/Uis", $body, $matches)) { + $tabInfos['dateMaj']=Metier_Util_Date::dateT('d/m/Y', 'Y-m-d', trim($matches[1])); + } + + $s1=substr($siren, 0, 3); + $s2=substr($siren, 3, 3); + $s3=substr($siren, 6, 3); + if (preg_match('/
    (?:.*)('.$s1.'(?:.*)'.$s2.'(?:.*)'.$s3.')(?:.*)(\d\d\d\d\d)(?:.*)<\/div>/Uis', $body, $matches)) { + $tabInfos['siren'] = trim(str_replace(' ', '', $matches[1])); + $tabInfos['nic'] = trim($matches[2]); + if ($nic=='') { + $nic=$tabInfos['nic']; + } + } else { + $tabInfos['siren']=$siren; + } + + if (preg_match('/