209 lines
5.9 KiB
PHP
209 lines
5.9 KiB
PHP
<?php
|
|
class Metier_Partenaires_MBourse
|
|
{
|
|
protected $siren = false;
|
|
protected $iDb;
|
|
|
|
public function __construct($siren=0, $db = null)
|
|
{
|
|
$this->siren = $siren;
|
|
|
|
if ( $db === null ) {
|
|
$this->iDb = new Metier_Util_Db();
|
|
} else {
|
|
$this->iDb = $db;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Libellé de la source
|
|
*
|
|
* @param string $source
|
|
* @return string
|
|
*/
|
|
public function getLibSource($code)
|
|
{
|
|
switch ($code) {
|
|
case 'B':
|
|
return 'Business Wire';
|
|
break;
|
|
case 'H':
|
|
return 'Hugin';
|
|
break;
|
|
case 'A':
|
|
return 'ActusNews';
|
|
break;
|
|
case 'D':
|
|
return 'DiRelease';
|
|
break;
|
|
case 'E':
|
|
return 'Les Echos';
|
|
break;
|
|
default:
|
|
return 'N/C';
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Vérifie la validité de la structure d'un code ISIN
|
|
*
|
|
* @param string $isin
|
|
* @return boolean
|
|
*/
|
|
public function isIsin($isin)
|
|
{
|
|
if (strlen(trim($isin))) {
|
|
$cle = substr($isin, -1);
|
|
$isinLeft = substr($isin, 0, strlen($isin)-1);
|
|
$letter2number = array(
|
|
'A'=>10, 'B'=>11, 'C'=>12, 'D'=>13, 'E'=>14,
|
|
'F'=>15, 'G'=>16, 'H'=>17, 'I'=>18, 'J'=>19,
|
|
'K'=>20, 'L'=>21, 'M'=>22, 'N'=>23, 'O'=>24,
|
|
'P'=>25, 'Q'=>26, 'R'=>27, 'S'=>28, 'T'=>29,
|
|
'U'=>30, 'V'=>31, 'W'=>32, 'X'=>33, 'Y'=>34, 'Z'=>35
|
|
);
|
|
$isinConvertion = strtr($isinLeft, $letter2number);
|
|
$sum = '';
|
|
$sumFinal = 0;
|
|
for($i=0; $i<strlen($isinConvertion); ++$i) {
|
|
$sum .= (($i % 2) ? 1 : 2) * $isinConvertion[$i];
|
|
}
|
|
for($i=0; $i<strlen($sum); ++$i) {
|
|
$sumFinal += $sum[$i];
|
|
}
|
|
if ($sumFinal % 10){
|
|
$cleVerif = ((int)($sumFinal / 10) + 1) * 10 - $sumFinal;
|
|
} else {
|
|
$cleVerif = 0;
|
|
}
|
|
if ($cle == $cleVerif) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else return false;
|
|
}
|
|
|
|
/**
|
|
* Obtenir le code ISIN à partir d'un siren
|
|
* @param string $siren
|
|
* @return string
|
|
*/
|
|
public function getCodeIsin($siren=false)
|
|
{
|
|
if (!$siren) {
|
|
$siren = $this->siren;
|
|
}
|
|
|
|
$tabTmp = $this->iDb->select('jo.infos_entrep', 'isin', "siren=$siren AND isin!=''", false, MYSQL_ASSOC);
|
|
return trim(@$tabTmp[0]['isin']);
|
|
}
|
|
|
|
/**
|
|
* Obtenir le SIREN à partir d'un code ISIN
|
|
* @param string $isin
|
|
* @return string
|
|
*/
|
|
public function getCodeSiren($isin)
|
|
{
|
|
$tabTmp = $this->iDb->select('jo.infos_entrep', 'siren', "isin='$isin' AND siren!=0", false, MYSQL_ASSOC);
|
|
return trim($tabTmp[0]['siren']);
|
|
}
|
|
|
|
/**
|
|
* A partir d'un siren, récupère les informations règlementés
|
|
* @param string $siren
|
|
* @param integer $id
|
|
* @return array
|
|
*/
|
|
public function getInfosReg($siren=false, $id=null)
|
|
{
|
|
if (!$siren) $siren = $this->siren;
|
|
|
|
$isin = $this->getCodeIsin($siren);
|
|
$tabRet = array();
|
|
if ($isin!='') {
|
|
|
|
$sqlID = '';
|
|
if (null !== $id) {
|
|
$sqlID=" AND id=$id ";
|
|
}
|
|
|
|
$bodacc = $this->iDb->select(
|
|
'presse.articles',
|
|
'id, companyName, companyIsin, companySiren, companyWebSite, pressReleaseDate, pressReleaseTitle, '.
|
|
'pressReleaseText, pressReleaseHtml, pressReleaseAttachments, pressReleaseUrl, source, dateInsert',
|
|
"companyIsin='$isin' $sqlID ORDER BY pressReleaseDate DESC", true, MYSQL_ASSOC);
|
|
if (count($bodacc)>0) {
|
|
foreach ($bodacc as $k=>$ann) {
|
|
if ($id)
|
|
$tabRet[$k]=array(
|
|
'id'=>$ann['id'],
|
|
'source'=>$this->getLibSource($ann['source']),
|
|
'DateParution'=>$ann['pressReleaseDate'],
|
|
'raisonSociale'=>$ann['companyName'],
|
|
'titre'=>$ann['pressReleaseTitle'],
|
|
'communique'=>$ann['pressReleaseText'],
|
|
'communiqueHtml'=>$ann['pressReleaseHtml'],
|
|
'pj'=>$ann['pressReleaseAttachments'],
|
|
'url'=>$ann['pressReleaseUrl'],
|
|
'dateInsertionSD'=>$ann['dateInsert'],
|
|
);
|
|
else
|
|
$tabRet[$k]=array(
|
|
'id'=>$ann['id'],
|
|
'source'=>$this->getLibSource($ann['source']),
|
|
'DateParution'=>$ann['pressReleaseDate'],
|
|
'raisonSociale'=>$ann['companyName'],
|
|
'titre'=>$ann['pressReleaseTitle'],
|
|
'pj'=>$ann['pressReleaseAttachments'],
|
|
'url'=>$ann['pressReleaseUrl'],
|
|
'dateInsertionSD'=>$ann['dateInsert'],
|
|
);
|
|
}
|
|
}
|
|
}
|
|
return $tabRet;
|
|
}
|
|
|
|
/**
|
|
* A partir d'un siren, récupère les informations boursières
|
|
*
|
|
* @param string $siren
|
|
* @return array
|
|
*/
|
|
public function getInfosBourse($siren=false)
|
|
{
|
|
if (!$siren) {
|
|
$siren = $this->siren;
|
|
}
|
|
|
|
$isin = $this->getCodeIsin($siren);
|
|
|
|
$tabRet = array();
|
|
if ($isin != '') {
|
|
$tabRes = $this->iDb->select(
|
|
'sdv1.bourse_isin b, sdv1.bourse_cours c',
|
|
'siren, raisonSociale, adresse, effectif, code_sicovam, code_mnemo, code_bloomberg, code_datastream, code_isin, logo, code_ric, '.
|
|
'dateIntroduction, dateDerAG, dateRadiation, autre_isin, eligibleSRD, eligiblePEA, nombreTitres, tel1, tel2, fax1, fax2, web, mail, '.
|
|
'marche, placeCotation, description, secteur, activite, activiteDet, dirigeants, actionnaires, chiffresTrim, '.
|
|
'c.autre, c.`date`, c.`heure`, c.`open` , c.`high` , c.`low` , c.`close` , c.`volume`',
|
|
"code_isin='$isin' /*OR siren=$siren)*/ AND b.code_isin=c.isin AND c.autre IN('','e','f','g','m','s','u') ORDER BY c.`date` DESC, c.`heure` DESC LIMIT 0,1", false, MYSQL_ASSOC);
|
|
if (count($tabRes) > 0) {
|
|
$tabRet = $tabRes[0];
|
|
$tabRes = $this->iDb->select('sdv1.bourse_cours',
|
|
'min(close) AS coursMin, avg(close) AS coursMoy, max(close) AS coursMax',
|
|
"isin='$isin' GROUP BY isin", false, MYSQL_ASSOC);
|
|
if (count($tabRes) > 0) {
|
|
$tabTmp = $tabRes[0];
|
|
$tabRet['coursMin'] = $tabTmp['coursMin'];
|
|
$tabRet['coursMoy'] = $tabTmp['coursMoy'];
|
|
$tabRet['coursMax'] = $tabTmp['coursMax'];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $tabRet;
|
|
}
|
|
} |