<?php
/**
 * crontab
 * 30 9 * * * /home/scores/batch/scripts/getInpiDecisions.php >> /home/scores/batch/shared/sources/log/getInpiDecisions.log
 * 00 19 * * * /home/scores/batch/getInpiDecisions.php >> /home/scores/batch/shared/sources/log/getInpiDecisionsSoir.log
 */

// --- Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(__DIR__ . '/../application'));

// --- Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// --- Composer autoload
require_once realpath(__DIR__ . '/../vendor/autoload.php');

// --- Create application, bootstrap, and run
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');

$c = new Zend_Config($application->getOptions());
Zend_Registry::set('config', $c);
$db = Zend_Db::factory($c->profil->db->metier);
Zend_Db_Table::setDefaultAdapter($db);

require_once APPLICATION_PATH.'/configs/config.php';

require_once 'framework/fwk.php';
require_once 'framework/common/chiffres.php';
require_once 'framework/common/dates.php';
require_once 'framework/mail/sendMail.php';
require_once 'Metier/insee/classMInsee.php';
require_once 'Metier/partenaires/classMRncs.php';
require_once 'Metier/partenaires/classMGreffes.php';

$table='jo.annonces';

function wsLog($service, $siret='', $ref='') {}

define('RNCS_IMR_FTP_HOST',		'194.5.119.252');
define('RNCS_IMR_FTP_LOGIN',	'score');
define('RNCS_IMR_FTP_PASS',		'1eUauTJZ');
define('RNCS_IMR_FTP_DIR',		'/var/home_ftp/score/Send/');
define('RNCS_IMR_FTP_LOCALDIR',	'/home/scores/batch/shared/sources/rncs/extelia/');
define('RNCS_IMR_BACKUP_DIR',	'/home/scores/batch/shared/sources/rncs/imr/');

$strInfoScript='Usage : '.basename($argv[0]). " <option> [FICHIERS]
Chargement du/des informations complémentaires en provenance des actes Infogreffe (license RNCS IMR).

Options :
  -d            Mode debug (Verbosité au maximum)
  -q            Ne pas mettre à jour les listes d'évènements commandés ce jour
  -b            Ne pas mettre à jour les listes des nouveaux bilans PDF
  -j            Ne pas collecter les évènements INPI (annonces JAL Inpi)
  -s:AAAAMMJJ   Reprendre le chargement des annonces JAL Inpi à compter du AAAAMMJJ
  				Reprendre les actes INPI du AAAAMMJJ
  -i:XXX        Reprendre les accès aux évènements Infogreffe à la ligne XXX
";

global $iInsee;

$iDb = new WDB();
$iDbR = new WDB();
$iInsee = new MInsee($iDb);
$iRncs = new MRncs($iDb);

$nbInsert=$nbDeja=0;
$nbNatu=$nbDeci=0;

$modeDebug=false;		// Par défaut, pas de message de debug
$iReprise=false;		// Reprendre les accès Infogreffe à la ligne d'évènenement nouveaux reçu XXX

$message='';			// Initialisation du contenu du message d'information
$loadInpiLocal=true;	// Par défaut on charge les évènements INPI (génération des annonces JAL)
$jourStock=0;			// Jour du stock SSAMMJJ (génération des annonces JAL à partir du ...)
$loadActesDuJour=true;	// Par défaut on charge les listes d'évènements commandés ce jour par l'extranet
$loadBilans=true;		// Par défaut on charge les listes de bilans IMAGES disponibles

$argv=$_SERVER['argv'];

for ($i=1,$j=0; isset($argv[$i]); $i++) {
	if (substr($argv[$i],0,1)=='-') {
		switch (substr($argv[$i],1,1)) {
			case 'd':	$modeDebug=true;								break;
			case 's':	$jourStock=substr($argv[$i],3,8);				break;
			case 'j':	$loadInpiLocal=false;							break;
			case 'q':	$loadActesDuJour=false;							break;
			case 'b':	$loadBilans=false;								break;
			case 'i':	$iReprise=substr($argv[$i],3);					break;
			case '-':
			case '?':	die($strInfoScript);							break;
		   	default:	die('Option '. $argv[$i] . ' inconnue !'."\n");	break;
		}
	} else $tabFichLigneCmd[]=$argv[$i];
}

echo date ('Y/m/d - H:i:s') . " - Début du traitement des évènements INPI"."\n";

$strDateFlux='';
if ($jourStock>0) {
	$dateMaj=WDate::dateT('Ymd', 'Y-m-d', $jourStock);
	$strDateFlux=" AND dateFlux='$dateMaj' ";
	$message.="Forçage du dernier chargement de la collecte INPI en date du $dateMaj...\r\n";
	echo date ('Y/m/d - H:i:s') . " - Forçage de l'accès aux évènements Infogreffe en date du $dateMaj..."."\n";
}

// Date du dernier chargement INPI
$tabTmp=$iDb->select('jo.rncs_chargements', "nomFichier, dateFlux, nbEvenAnn", "1 $strDateFlux ORDER BY dateFlux DESC LIMIT 0,1", true, MYSQL_ASSOC);
echo "SELECT nomFichier, dateFlux, nbEvenAnn
    FROM jo.rncs_chargements
    WHERE 1 $strDateFlux ORDER BY dateFlux DESC LIMIT 0,1;".mysql_error()."\n";
$dateMaj=$tabTmp[0]['dateFlux'];
$nomFichier=$tabTmp[0]['nomFichier'];
$nbEvenAnn=$tabTmp[0]['nbEvenAnn'];
echo "dateMaj='$dateMaj', nomFichier='$nomFichier', nbEvenAnn=$nbEvenAnn"."\n";

// Nombre d'évènements chargés
echo "SELECT e.siren, e.codeInterne, e.dateDepot, e.codeEven, t.libEven, t.codEven, e.flux
    FROM   jo.rncs_even e, jo.tabEvenRncs t
    WHERE  e.flux='$dateMaj' AND e.codeEven=t.codeEven GROUP BY siren, dateDepot, codeEven;"."\n";
$nbEven=$iDbR->select(	'jo.rncs_even e, jo.tabEvenRncs t',
						"e.siren, e.codeInterne, e.dateDepot, e.codeEven, t.libEven, t.codEven, e.flux",
						"e.flux='$dateMaj' AND e.codeEven=t.codeEven GROUP BY siren, dateDepot, codeEven LIMIT 0,100000",
						true, MYSQL_ASSOC, true);
echo mysql_error()."\n";

// Nombre d'évènements déjà mis à jour (complétés)
$tabTmp=$iDb->select('jo.rncs_even_info', "count(*) AS nb", "flux='$dateMaj'", true, MYSQL_ASSOC);
$nbEvenMaj=$tabTmp[0]['nb'];
if ($nbEvenMaj>$nbEven && !$iReprise && $nbEvenAnn>0) {
	$message.="Le dernier chargement INPI date du $dateMaj et contient $nbEvenMaj évènements déjà mis à jour sur les $nbEven évènements du jour !\r\n";
	echo date ('Y/m/d - H:i:s') . " - Le dernier chargement INPI date du $dateMaj et contient $nbEvenMaj évènements déjà mis à jour sur les $nbEven évènements du jour !."."\n";
} else {
	$message.="Le dernier chargement INPI date du $dateMaj et contient $nbEven nouveaux évènements dont $nbEvenMaj à jour.\r\n";
	echo date ('Y/m/d - H:i:s') . " - Le dernier chargement INPI date du $dateMaj et contient $nbEven nouveaux évènements dont $nbEvenMaj à jour."."\n";
	$sirenPre=false;
	$iEven=-1;
	while($even=$iDbR->fetch(MYSQL_ASSOC)) {
		$iEven++;
		if ($iEven<$iReprise)	continue;

		echo "$iEven/$nbEven:".$even['siren'].' le '.$even['dateDepot'].': '.$even['codeEven'].' '.$even['libEven'].' ('.$even['codeInterne'].') ... ';

		$infogreffe = new SdMetier_Infogreffe_DocAC($even['siren']);
		$tabActes = $infogreffe->getList(true);

		foreach ( $tabActes as $acte ) {
			if ( $even['dateDepot'] == $acte->DepotDate ) {

				if ($acte->ActeDate=='0000-00-00') {
					$dateActe = $even['dateDepot'];
				} else {
					$dateActe = $acte->ActeDate;
				}

				echo $acte->infos;
				$infos = explode(' : ',$acte->infos);
				if ( count($infos)>1 ) {
                    $acteNature = $infos[0];
				}

				$tabInsert=array(
					'siren'			=> $even['siren'],
					'codeInterne'	=> $even['codeInterne'],
					'dateDepot'		=> $even['dateDepot'],
					'codeEven'		=> $even['codeEven'],
					'flux'		 	=> $even['flux'],
					'depot_num'		=> $acte->DepotNum,
					'depot_date'	=> $acte->DepotDate,
					'acte_num'		=> $acte->ActeNum,
					'acte_date'		=> $dateActe,
					'acte_type'		=> $acte->ActeType,
					'acte_lib'		=> $acte->ActeTypeLabel,
					'acte_pages'	=> $acte->ActeNumberOfPages,
					'acte_nature'	=> $acte->ActeDecisionNature,
					'acte_decision'	=> $acte->ActeDecisionLabel,
					'collecte'		=> $even['codEven'],
				);

				if ( $iDb->insert('jo.rncs_even_info', $tabInsert) ) {
					$nbInsert++;
					if ($acte->ActeDecisionNature<>'')	$nbNatu++;
					if ($acte->ActeDecisionLabel<>'')	$nbDeci++;
				} else {
                    $nbDeja++;
				}
			}
		}
		echo "\n";
		$sirenPre=$even['siren'];
	}
	$message.="$nbInsert évènements avec compléments ajoutés et $nbDeja évènements déjà en base ($nbNatu natures et $nbDeci décisions.\r\n";
	echo date('Y/m/d - H:i:s') ." - $nbInsert évènements avec compléments ajoutés et $nbDeja évènements déjà en base ($nbNatu natures et $nbDeci décisions."."\n";
	$iDb->update('jo.rncs_chargements', array('nbEvenAnn'=>@$iEven*1), "nomFichier='$nomFichier'");
}

if ($loadInpiLocal) {
	/**
	 * Evènements importants en collecte INPI
	 */
	if ($jourStock>0) {
		$dateMaj=WDate::dateT('Ymd', 'Y-m-d', $jourStock).' 00:00:00';
		$message.="Forçage du dernier chargement de la collecte INPI en date du $dateMaj...\r\n";
		echo date ('Y/m/d - H:i:s') . " - Forçage du dernier chargement de la collecte INPI en date du $dateMaj..."."\n";
	}

	$AnnDb=$iDb->select('jo.rncs_even_info j, jo.rncs_entrep e, jo.tabEvenRncs l',
						"j.siren, e.sirenValide, l.codEven AS typeEven, j.acte_date AS dateJugement, j.depot_date AS dateSource,
						 j.dateInsert, 'PP' AS source, e.triCode AS tribunal, e.raisonSociale, l.codeEven AS codeEvenRncs,
						 j.acte_nature, j.acte_decision, e.flux",
						"j.dateInsert>'$dateMaj' AND j.siren=e.siren AND DATEDIFF(NOW(), j.dateDepot)<=60 AND
						 j.codeEven=l.codeEven AND
						 (l.codEven>0
						  OR j.acte_decision LIKE '%FUSION%' OR j.acte_decision LIKE '%ABSORPTION%'
						  OR j.acte_decision LIKE '%TRANSMISSION%UNIVERSELLE%PATRIMOINE%'
						  OR j.acte_decision LIKE '%TUP%' OR j.acte_decision LIKE '%T.U.P%'
						  OR j.acte_decision LIKE '%DISSOLUTION%' OR j.acte_nature LIKE '%DISSOLUTION%'
						  OR j.acte_decision LIKE '%MISE%SOMMEIL%'
						  OR j.acte_decision LIKE '%APPORT%PARTIEL%ACTIF%'
						  OR j.acte_decision LIKE '%SCISSION%'
						 ) ",
						false, MYSQL_ASSOC);
	$nbAnnonces=count($AnnDb);

	$message.="Il y a $nbAnnonces énements INPI IMR depuis le dernier chargement du $dateMaj :\r\n";
	echo date('Y/m/d - H:i:s') ." - Il y a $nbAnnonces énements INPI IMR depuis le dernier chargement du $dateMaj."."\n";

	foreach ($AnnDb as $i=>$tabInsert) {
		$siren=$tabInsert['siren'];
		$dateJugement=$tabInsert['dateJugement'];
		if ($dateJugement=='0000-00-00')	$tabInsert['dateJugement']=$tabInsert['dateSource'];
		$typeEven=$tabInsert['typeEven']*1;
		$strEven='';
		if ($typeEven==0) {//projet de fusion par absorption
		if (preg_match('/(FUSION|ABSORPTION)/i', $tabInsert['acte_decision'], $matches)) {
				if (preg_match('/PROJET/i', $tabInsert['acte_decision'], $matches))	$typeEven=2726;
				else 																$typeEven=2725;
			} elseif (preg_match('/SCISSION/i', $tabInsert['acte_decision'], $matches)) {
				if (preg_match('/PROJET/i', $tabInsert['acte_decision'], $matches))	$typeEven=2741;
				else 																$typeEven=2740;
			} elseif (preg_match('/TRANSMISSION.{1,3}UNIVERSELLE.{1,5}PATRIMOINE/i', $tabInsert['acte_decision'], $matches) ||
					  preg_match('/T.U.P/i', $tabInsert['acte_decision'], $matches) ||
					  preg_match('/\bTUP\b/i', $tabInsert['acte_decision'], $matches))
				$typeEven=2620;
			elseif (preg_match('/APPORT.{1,3}PARTIEL.{1,5}ACTIF/i', $tabInsert['acte_decision'], $matches)) {
				if (preg_match('/PROJET/i', $tabInsert['acte_decision'], $matches))	$typeEven=2665;
				else 																$typeEven=2661;
			} elseif (preg_match('/DISSOLUTION/i', $tabInsert['acte_decision'], $matches) ||
					  preg_match('/DISSOLUTION/i', $tabInsert['acte_nature'], $matches) )
				$typeEven=2203;
			elseif (preg_match('/MISE.{1,9}SOMMEIL/iu', $tabInsert['acte_decision'], $matches)) {
				if (preg_match('/REPRISE/i', $tabInsert['acte_decision'], $matches))	$typeEven=2316;
				else 																	$typeEven=2206;
			}
		} elseif (preg_match('/(FUSION|ABSORPTION)/i', $tabInsert['acte_decision'], $matches)) {
			if (preg_match('/PROJET/i', $tabInsert['acte_decision'], $matches))		$strEven=2726;
			else 																	$strEven=2725;
		}

		$tabInsert['complement']='';
		if ($typeEven==2100 || $typeEven==2101 || $typeEven==2102) {	// Modification de capital
			$tabIdentite=$iRncs->getInfosEntrep($siren);
			$tabInsert['montant']=$tabIdentite['capital'];
			//$tabInsert['actionsNb']	='';
			/** @todo Rechercher l'ancien capital **/
		} elseif ($typeEven==2305) {									// Modification de la dénomination
			$tabIdentite=$iRncs->getInfosEntrep($siren);
			$tabInsert['complement'].="Nouvelle dénomination : ".$tabIdentite['raisonSociale'].'. ';

			// Recherche de l'ancienne RS
			$dateFlux=$tabInsert['flux'];
			$rep=$iDb->select(	'jo.rncs_modifs',
								'siren, `table`, champs, valeur, flux, dateInsert',
								"siren=$siren AND type='raisonSociale' AND `table`='rncs_entrep'
								 AND flux<='$dateFlux' ORDER BY flux DESC LIMIT 0,1", false, MYSQL_ASSOC);
			$modif=@trim($rep[0]['valeur']).'';
			if ($modif<>'')
				$tabInsert['complement'].="Ancienne dénomination : $modif. ";

			if ($tabIdentite['sigle']<>'')
				$tabInsert['complement'].="Sigle : ".$tabIdentite['sigle'].'. ';
		} elseif ($typeEven==2307) {									// Modification de la forme juridique
			$tabIdentite=$iRncs->getInfosEntrep($siren);
			$tabInsert['nouvFJ']=$tabIdentite['cj'];
			/** @todo Rechercher l'ancienne FJ **/
		} elseif ($typeEven==2315) {
			switch ($tabInsert['codeEvenRncs']*1) {
				case 34:	$tabInsert['complement'].='Changement de Gérant : ';						break;
				case 37: 	$tabInsert['complement'].='Changement de Président : ';						break;
				case 40: 	$tabInsert['complement'].='Modification du Conseil d\'Administration : ';	break;
				case 81: 	$tabInsert['complement'].='Changement de Commissaire aux Comptes : ';		break;
				default:	$tabInsert['complement'].='Administration : ';								break;
			}
			$dirs=$iInsee->getDirigeants($siren,false);
			foreach ($dirs as $nb=>$dir) {
				$tabInsert['complement'].=$dir['Titre'].' : '.@$dir['Civilite'].' '.$dir['Nom'].' '.$dir['Prenom'];
				if (($nb+1)<count($dirs))
					$tabInsert['complement'].=', ';
				else
					$tabInsert['complement'].='. ';
			}
		} elseif ($typeEven==2320) {									// RECONSTITUTION DE LA L'ACTIF NET
			if (preg_match('/MOITIE/i', $tabInsert['acte_nature'], $matches))
				$typeEven=2321;
		} elseif ($typeEven==2203 &&
				  (preg_match('/SANS/i', $tabInsert['acte_nature'], $matches)) ||
				  (preg_match('/SANS/i', $tabInsert['acte_decision'], $matches))
				 )
			// On ignore l'annonce
			continue;

		unset($tabInsert['codeEvenRncs']);
		unset($tabInsert['flux']);
		//if ($tabInsert['acte_nature']<>'')		$tabInsert['complement'].=$tabInsert['acte_nature'].' ';
		if ($tabInsert['acte_decision']<>'')	$tabInsert['complement'].=strtolower($tabInsert['acte_decision']).' ';
		unset($tabInsert['acte_nature']);
		unset($tabInsert['acte_decision']);
		if ($strEven<>'')						$tabInsert['strEven']=$strEven;

		//echo "$siren $dateJugement $typeEven"."\n";
		$tabTmp=@$iInsee->getIdentiteLight($tabInsert['siren']);
		$tabInsert['typeEven']		= $typeEven;
		if ($typeEven==0) {
			print_r($tabInsert);
			sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', 'Chargement des évènements Greffes', "Erreur typeEven=0 ligne n°$i ($dateMaj)"."\n".print_r($tabInsert,true));
			//die();
		}
		$tabInsert['adresse']		= $tabTmp['Adresse'];
		$tabInsert['codePostal']	= $tabTmp['CP'];
		$tabInsert['ville']			= $tabTmp['Ville'];
		if (!$iDb->insert($table, $tabInsert)) {
			if (mysql_errno()==1062) {
				$tabTmp=$iDb->select($table, 'id, siren, typeEven, dateJugement, inter1type, inter1id, inter1nom,	inter2type, inter2id, inter2nom, dateSource, dateInsert, source, tribunal, raisonSociale',"siren=$siren AND dateJugement='$dateJugement' AND typeEven=$typeEven", false, MYSQL_ASSOC);
				$tabEnbase=@$tabTmp[0];
				if ($tabEnbase['source']=='PC') {
					unset($tabInsert['source']);
					unset($tabInsert['dateInsert']);
					if (!$iDb->update($table, $tabInsert,"siren=$siren AND dateJugement='$dateJugement' AND typeEven=$typeEven", false, MYSQL_ASSOC))
						echo date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .' : '. mysql_error() ." lors de la mise à jour de l'évènement $typeEven en date du $dateJugement pour $siren..."."\n";
					else $nbAnnUpdateE++;
				}
			} else
				echo date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .' : '. mysql_error() ." lors de l'ajout de l'évènement $typeEven en date du $dateJugement pour $siren..."."\n";
		} else {
			$nbAnnInsertE++;
			echo date('Y/m/d - H:i:s') ." - Ajout de l'évènement $typeEven en date du $dateJugement pour $siren..."."\n";
			@$tabCptAnn[$typeEven]++;
		}
	}

	$message.=" $nbAnnInsertE ajouts et $nbAnnUpdateE mises à jours sur $nbAnnonces annonces.\r\n\r\n";
	$message.=print_r(@$tabCptAnn, true);

}

/**
 * Mise à jour de la liste des actes greffe à partir des éléments consultés
 */
if ( $loadActesDuJour ) {

	$today=date('Y-m-d').' 00:00:00';
	$nbDepotsTot=0;
	$tabActes = $iDb->select("sdv1.logs", "siren", "page='greffe_actes' AND dateHeure>='$today' GROUP BY siren", false, MYSQL_ASSOC);
	shuffle($tabActes);
	$nbActesQuoti = count($tabActes);
	if ( $nbActesQuoti > 0) {
    	foreach ($tabActes as $i=>$acte) {
    		echo date('Y/m/d - H:i:s')." - $i/$nbActesQuoti: Mise à jour de la liste des actes pour ".$acte['siren'].'... ';
    		$infogreffe = new SdMetier_Infogreffe_DocAC($acte['siren']);
    		$nbDepots = count($infogreffe->getList(true));
    		echo date('Y/m/d - H:i:s')."$nbDepots dépot(s)."."\n";
    		$nbDepotsTot+=$nbDepots;
    	}
	}
	$message.="$nbActesQuoti listes d'évènements mises à jours pour un total de $nbDepotsTot dépots (listes du jour).\r\n";
	echo date('Y/m/d - H:i:s')." - $nbActesQuoti listes d'évènements mises à jours pour un total de $nbDepotsTot dépots (listes du jour)."."\n";
}

/**
 * Mise à jour de la liste des bilans greffe à partir des bilans déposés
 */
if ( $loadBilans ) {
	$tabTmp = $iDb->select('jo.bilans_deposes', 'MAX(DATE(dateInsert)) AS lastMAJ', '1', true, MYSQL_ASSOC);
	$lastUpdate = $tabTmp[0]['lastMAJ'];
	$message.="La dernière mise à jour des bilans Greffes date du $lastUpdate !\r\n";
	echo date ('Y/m/d - H:i:s') . " - La dernière mise à jour des bilans Greffes date du $lastUpdate !"."\n";

	$bilansDep = $iDb->select('jo.bilans_deposes', "siren, nicSiege, dateProvPartenaire, dateExercice, dureeExercice, monnaie, chiffreAffaire", "dateInsert>'$lastUpdate 00:00:00'", true, MYSQL_ASSOC);
	echo mysql_error();

	$nbBilans = count($bilansDep);
	$message.="Il y a $nbBilans listes de bilans PDF à mettre à jour !\r\n";
	echo date ('Y/m/d - H:i:s') . " - Il y a $nbBilans listes de bilans PDF à mettre à jour !"."\n";

	if ( $nbBilans > 0 ) {
    	foreach ( $bilansDep as $iBilan=>$bil ) {
    	    echo date('Y/m/d - H:i:s') . " - $iBilan/$nbBilans: Mise à jour de la liste de bilans PDF pour ".$bil['siren']."... \n";
    	    $infogreffe = new SdMetier_Infogreffe_DocBI($bil['siren']);
    	    $infogreffe->getList(true);
    	}
	}

	$message.="Fin de la mise à jour des listes de bilans PDF.\r\n";
	echo date ('Y/m/d - H:i:s') . " - Fin de la mise à jour des listes de bilans PDF."."\n";
}

//Envoi du mail d'information
sendMail('production@scores-decisions.com', 'suivi@scores-decisions.com', 'Chargement des informations Greffes', $message);