batch/1.1/old/loadSO.php
2013-06-19 08:24:49 +00:00

330 lines
20 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
/** @todo
**/
define ('TODAY', substr(DATETIME,0,8));
//Initialistaion des variables
$argv=$_SERVER['argv'];
if ($_SERVER['argc']==1) die('Usage : '.basename($argv[0]). " [OPTION]... FICHIERS
Charger un fichier SO2000 dans une base de données avec création de la table qui aura le nom du fichier chargé..
Les arguments obligatoires pour les options de formes longues le sont aussi
pour les options de formes courtes.
-s:xxx Structures SO2000 à intégrer :
=> TXT structures ID, ANN et TXT (*)
=> ID structure IDentité seulement
=> BI structure BIlans uniquement
-d:database Base de données (si absent : modelisation)
-t:nom_table Table de la base de données (si absent : nom du fichier sans l'extension)
(*): Valeurs par défaut !
");
$f=0;
$tabStructures=array('ID', 'ANN', 'TXT');
for ($i=1; isset($argv[$i]); $i++) {
if (substr($argv[$i],0,1)=='-') {
switch (substr($argv[$i],1,1)) {
case 's':
if (trim(substr($argv[$i],3,3))=='ID')
$tabStructures=array('ID');
if (trim(substr($argv[$i],3,3))=='BI')
$tabStructures=array('ID', 'BI');
elseif (substr($argv[$i],3,3)=='TXT')
$tabStructures=array('ID', 'ANN', 'TXT');
break;
case 'd': $db_name=trim(substr($argv[$i],3)); break;
case 't': $table=trim(substr($argv[$i],3)); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
}
} else {
$tabFichier[$f]=$argv[$i];
$f++;
}
}
if (!isset($table) || $table=='') $nom_table=str_replace('.csv', '', str_replace('.txt', '', basename($tabFichier[0])));
if ($db_name=='') $db_name='modelisation';
$iDb=new WDB($db_name);
echo date ('Y/m/d - H:i:s') . " - Début du traitement\r\n";
$nbFiches=$nbLignesTOT=$nbLignesID=$nbLignesID_er=$nbLignesID_ok=$nbLignesBI=0;
$tabDataToInsert=$tab_ret=array();
$tab_ret_pre=array();
for ($f=0; isset($tabFichier[$f]); $f++) { // Boucle sur l'ensemble des fichiers à traiter
if ($f>0) echo date ('Y/m/d - H:i:s')." - Fin du traitement du fichier ". $fichier_csv .", $nbLignes lignes traitées !\n";
$nbLignes=0;
$fichier_csv=$tabFichier[$f];
$comment='Chargement de fichier SO';
$fp=fopen($fichier_csv, 'r');
if (!$fp) {
echo date ('Y/m/d - H:i:s')." - Impossible d'ouvrir le fichier : ".$fichier_csv." !\n";
echo date ('Y/m/d - H:i:s') . " - Fin du traitement\n";
exit();
}
echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier ". $fichier_csv ."...\n";
flush();
while (($ligne = fgets($fp, 4096)) !== FALSE)
{
$tab_ret_pre=$tab_ret;
//Données communes aux 3 types de fichier
$tab_ret['SONABO'] =trim(substr($ligne, 0, 9)); // N°ABONNE (I) ********************
$tab_ret['SONUME'] =trim(substr($ligne, 9, 9)); // N°ENTREPRISE (I) * FICHE COMPLETE *
$tab_ret['SONUS'] =trim(substr($ligne, 18, 9)); // N°UFS (I) * +EXTENSION INSEE * SONUS_V
$tab_ret['SOANN'] =trim(substr($ligne, 27, 9)); // N° ANNONCE (I) ********************
$tab_ret['SORCS'] =trim(substr($ligne, 36, 14)); // N°SIRET (I)
$tab_ret['SIREN'] =substr($tab_ret['SORCS'],0,9);
$tab_ret['NIC'] =substr($tab_ret['SORCS'],9,5);
$tab_ret['SOPRD'] =trim(substr($ligne, 50, 2)); // CODE PRODUIT (I) SOPRD_N
$tab_ret['SOSEQ'] =trim(substr($ligne, 52, 5)); // SEQUENCE DANS GROUPE(I) SOSEQ_N
$tab_ret['SODTEN'] =trim(substr($ligne, 57, 8)); // DATE ENVOI (I) AAAAMMJJ SODTEN_D
$Sotenr =trim(substr($ligne, 65, 1));
$tab_ret['SOTENR'] =$Sotenr; // CODE ENREGISTREMENT (I)
$Sotyp =trim(substr($ligne, 66, 3));
$tab_ret['SOTYP'] =$Sotyp; // TYPE STRUCTURE (I) "ID " SOTYP_V
$tab_ret['SOCONF'] =trim(substr($ligne, 69, 1)); // Code confirmé (I)
$tab_ret['SOREFC'] =trim(substr($ligne, 70, 30)); // REFERENCE CLIENT (I) SOREFC_X
$tab_ret['SOORIG'] =trim(substr($ligne, 100, 1)); // Code Origine BIL (S)
$tabLigne[$Sotyp]++;
if ($Sotyp=='ID' && in_array($Sotyp, $tabStructures)) {
if (count($tabStructures)==1) {
$tabToInsert=array_merge(array('DateAjout'=>TODAY),$tab_ret_pre, $tab_retID);
//print_r($tabToInsert);
$ret=$iDb->insert($table, $tabToInsert);
if (!$ret){
$nbLignesID_er++;
print_r($tabToInsert);
$iDb->insert($table, $tabToInsert, true);
}
else $nbLignesID_ok++;
$nbLignesID++;
//echo "Ligne $nbLignes : ". memory_get_usage() . " octets\n";
//if ($nbFiches==100) die();
} elseif (in_array('BI', $tabStructures)) {
if ($nbLignesTOT>0)
$ret=$iDb->insert('bilans2', $tabBilan, true);
//echo 'Bilan '. $tabBilan['siren'] .' - '. $tabBilan['dateExercice'] . " inséré !\n";
$tabBilan['postes']='';
} elseif (isset($tab_ret_pre['SOANN']) && $tab_ret_pre['SOANN']<>'') {
$tabToInsert=array_merge(array('DateAjout'=>TODAY),$tab_ret_pre, $tab_retID, $tabDataToInsert);
//print_r($tabToInsert);
$ret=$iDb->insert($table, $tabToInsert);
//echo "Ligne $nbLignes : ". memory_get_usage() . " octets\n";
//if ($nbFiches==100) die();
$tabDataToInsert['ann']='';
}
$tab_retID=array(
'SOSDTX'=>trim(substr($ligne, 101, 1)), // INDIC. QUALITE (S)
'SOMAJ' =>trim(substr($ligne, 102, 9)), // TEMOIN DE MAJ (S) SOMAJ_N
'SONOM' =>trim(substr($ligne, 111, 60)), // RAISON SOCIALE p/1 (I) (INSEE=40) SONOM_X
'SONOM2'=>trim(substr($ligne, 171, 30)), // RAISON SOCIALE p/2 (I) (INSEE=BLANC) SONOM_N
'SOSIG' =>trim(substr($ligne, 201, 30)), // SIGLE (S) (INSEE=20) SOSIG_N
'SOENS' =>trim(substr($ligne, 231, 60)), // ENSEIGNE (S) (INSEE=40) SOENS_X
'SONRU' =>trim(substr($ligne, 291, 4)), // N°DS LA RUE (S)
'SOBTQ' =>trim(substr($ligne, 295, 1)), // B=BIS T=TER Q=QUAT. (S)
'SORUE' =>trim(substr($ligne, 296, 33)), // NOM DE LA RUE (S)
'SOCOM' =>trim(substr($ligne, 329, 32)), // LIBELLE COMMUNE (I)
'SOCP' =>trim(substr($ligne, 361, 5)), // CODE POSTAL (I) SOCP_N
'SOCPLA'=>trim(substr($ligne, 366, 30)), // COMPLEMENT ADRESSE (S) SOCPLA_N
'SODTCT'=>trim(substr($ligne, 396, 8)), // DATE CREATION ENTREP (S) AAAAMMJJ DTCREE_D
'SOSTAE'=>trim(substr($ligne, 404, 1)), // STATUT ETABLISSEMENT (S) Table INS
'SOCJEN'=>trim(substr($ligne, 405, 4)), // CATEG JURIDIQUE (S) Table INC SOCJEN_X
'SOTSEX'=>trim(substr($ligne, 409, 1)), // SEXE SI PP (S) Table IMF
'SONBET'=>trim(substr($ligne, 410, 4)), // NOMBRE ETAB. (S) NBRETE_C
'SOAPET'=>trim(substr($ligne, 414, 4)), // NAF ENTREPRISE (S) Table APE
'SOAPFT'=>trim(substr($ligne, 418, 4)), // CODE "FAMILLE" ENTR. (C) Table APY SOAPFT_N
'SOAPEE'=>trim(substr($ligne, 422, 4)), // NAF ETABLISSEMT (S) Table APE
'SOAPFE'=>trim(substr($ligne, 426, 4)), // CODE "FAMILLE" ETAB. (C) Table APY SOAPFE_N
'SORLJ' =>trim(substr($ligne, 430, 1)), // Proc.Collective (C) "O"=RLJ SORLJ_N
'SOCAPM'=>trim(substr($ligne, 431, 2)), // MONNAIE (C) Table BDV SOCAPM_N
'SOCAPI'=>trim(substr($ligne, 433, 13)), // MONTANT CAPITAL (C) CAPITE_X
'SOEFF' =>trim(substr($ligne, 446, 7)), // EFFECTIF (+Ext) blanc=non précisé SOEFF_N
'SORCE' =>trim(substr($ligne, 453, 9)), // N°RC (C) RCE_X
'SOETEL'=>trim(substr($ligne, 462, 10)), // TELEPHONE SOURCE BIL (S)
'SOEFAX'=>trim(substr($ligne, 472, 10)), // FAX SOURCE BIL (S)
'SOEWEB'=>trim(substr($ligne, 482, 40)), // SITE WEB SOURCE BIL (S) non encore renseigné SOEWEB_N
'SOEDRQ'=>trim(substr($ligne, 522, 3)), // QUALITE DIRIGEANT (C) source BIL
'SOEDRN'=>trim(substr($ligne, 525, 60)), // NOM-prénom DIRIGEANT (C) source BIL SOEDRN_X
'SDEDRD'=>trim(substr($ligne, 585, 8)), // DATE NAISSANCE DIRIG (C) AAAAMMJJ SOEDRD_D
'SOEDRL'=>trim(substr($ligne, 593, 35)), // LIEU NAISSANCE DIRIG (C) source BIL SOEDRL_N
'SORSNO'=>trim(substr($ligne, 628, 2)), // NOTE SUR 20 (+sc) BLANC=PAS DE NOTE
'SORSEC'=>trim(substr($ligne, 630, 7)), // ENCOURS EN KILO (+sc) BLANC=PAS D ENCOURS
'SORSCP'=>trim(substr($ligne, 637, 1)), // CODE PAIEMENT (+sc) Table S53
'SORSSF'=>trim(substr($ligne, 638, 1)), // CODE SITU FINANCERE (+sc) Table S53
'SORSCA'=>trim(substr($ligne, 639, 1)), // CODE AVIS (+sc) Table S53
'SORSMO'=>trim(substr($ligne, 640, 3)), // MONNAIE LIVRAISON ENCOURS (+sc) Table BDV
'SOSICO'=>trim(substr($ligne, 643, 6)), // CODE SICOVAM (C) STE COTEE EN BOURSE SOSICO_N
'SOTYPM'=>trim(substr($ligne, 649, 2)), // TYPE DE MARCHE (C) STE COTEE EN BOURSE SOTYPM_N
'SOISIN'=>trim(substr($ligne, 651, 12)), // CODE ISIN (C) STE COTEE EN BOURSE SOISIN_N
'SOIDR1'=>trim(substr($ligne, 663, 41)), // réserve, non encore renseigné
'SONICC'=>trim(substr($ligne, 704, 5)), // NIC SOURCE/CIBLE (C)(+Ext) TRANSFERT ADRESSE SONICC_N
'SODCAP'=>trim(substr($ligne, 709, 8)), // DATE MAJ CAPITAL (C) AAAAMMJJ SODCAP_D
'SOCAPO'=>trim(substr($ligne, 717, 3)), // CAPITAL MONNAIE ORI (C) Table BDV
'SOCAPL'=>trim(substr($ligne, 720, 3)), // CAPITAL MONNAIE LIV (C) Table BDV
'SODTCE'=>trim(substr($ligne, 723, 8)), // DATE CREAT ETAB (+Ext) AAAAMMJJ SODTCE_D
'SOORIC'=>trim(substr($ligne, 731, 1)), // ORI.CREATION ENTREP (+Ext) Table INJ SOORIC_N
'SOCLAT'=>trim(substr($ligne, 732, 2)), // TR.EFFECTIF ENTREP(C)(+Ext*)Table INL
'CLAE' =>trim(substr($ligne, 734,2)), //TR.EFFECTIF ETAB(+Ext)TableINL
'SOA40T'=>trim(substr($ligne, 736,2)), //NAP 40 ENTREP(+Ext)TableA40
'SOA40E'=>trim(substr($ligne, 738,2)), //NAP 40 ETAB(+Ext)TableA40
'SOEACA'=>trim(substr($ligne, 740,5)), //ACT.ARTISANALE ETAB(+Ext)TableARA
'SOEMDT'=>trim(substr($ligne, 745,1)), //MODALITE ACT. ENTREP(+Ext)TableIMO
'SOEMDE'=>trim(substr($ligne, 746,1)), //MODALITE ACT. ETAB(+Ext)TableIMO
'SOERGS'=>trim(substr($ligne, 747,2)), //CODE REGION ENTREP(C)(+Ext*)TableINGSOERGS_N
'SOERGE'=>trim(substr($ligne, 749,2)), //CODE REGION ETAB(C)(+Ext*)TableING
'SOEDPS'=>trim(substr($ligne, 751,2)), //DEPARTEMENT SIEGE(S) (+Ext*)DPSIE_C
'SOELCS'=>trim(substr($ligne, 753,3)), //CODE LOCALITE SIEGE(S) (+Ext*)
'SOEDPE'=>trim(substr($ligne, 756,2)), //DEPARTEMENT ETAB(S) (+Ext*)
'SOELCE'=>trim(substr($ligne, 758,3)), //CODE LOCALITE ETAB(S) (+Ext*)SOLIN_C
'SOARDO'=>trim(substr($ligne, 761,1)), //DEP.OUTRE MER(+Ext) NRTableIDOSOARDO_N
'SOARD' =>trim(substr($ligne, 762,1)), //ARRONDISSEMENT(+Ext)
'SOCANO'=>trim(substr($ligne, 763,1)), //DEP.OUTRE MER(+Ext) NRTableIDOSOCANO_N
'SOCAN' =>trim(substr($ligne, 764,2)), //CANTON(+Ext)
'SOILOT'=>trim(substr($ligne, 766,8)), //CODE ILOT(+Ext) NRSOILOT_N
'SOTZEM'=>trim(substr($ligne, 774,2)), //ZONE EMPLOI ETAB(+Ext)TableINZ
'SOTTCO'=>trim(substr($ligne, 776,2)), //TRANCHE COMMUNE ETAB(+Ext)TableICD
'SOTDPU'=>trim(substr($ligne, 778,2)), //DEP UNITE.URB ETAB(+Ext)SOTDPU_N
'SOTTLU'=>trim(substr($ligne, 780,1)), //TAILLE UN.URB ETAB(+Ext)TableICUSOTTLU_N
'SOTUNU'=>trim(substr($ligne, 781,2)), //UNITE URBAINE ETAB(+Ext)SOTUNU_X
'SOTRIV'=>trim(substr($ligne, 783,5)), //CODE RIVOLI ETAB(+Ext)SOTRIV_X
'SOTRGP'=>trim(substr($ligne, 788,2)), //PPALE REGION ENTREP(+Ext)TableING
'SOTMON'=>trim(substr($ligne, 790,1)), //MONOREGIONALITE(+Ext)TableIMR
'SOTMOA'=>trim(substr($ligne, 791,1)), //MONOACTIVITE(+Ext)TableIMPSOTMOA_N
'SOECA' =>trim(substr($ligne, 792,1)), //CODE TRANCHE CA(C)(+Ext*)TableINTSOECA_X
'SOECAX'=>trim(substr($ligne, 793,1)), //TRANCHE PART EXPORT(C)(+Ext*)TableINPSOECAX_X
'SOTRPE'=>trim(substr($ligne, 794,1)), //REPERTOIRE ENT ETAT(+Ext)TableIEE
'SOORDI'=>trim(substr($ligne, 795,1)), //ENTREPRISE ORDINAIRE(+Ext)TableIEOSOORDI_N
'SOENAT'=>trim(substr($ligne, 796,2)), //CODE NATURE ETAB(+Ext)TableINN
'SOSINE'=>trim(substr($ligne, 798,2)), //Type Exploitation(C)(+Ext*)TableINE
);
$nbFiches++;
} elseif ($Sotyp=='ANN' && in_array($Sotyp,$tabStructures)) {
$tabDataToInsert['codjou']=substr($ligne, 101, 3);
$tabDataToInsert['datpar']=substr($ligne, 104, 8);
$tabDataToInsert['PagJou']=substr($ligne, 112, 5);
$tabDataToInsert['codevt']=substr($ligne, 117, 2);
$tabDataToInsert['codpar']=substr($ligne, 119, 2);
$tabDataToInsert['numannjou']=substr($ligne, 121, 6);
$tabDataToInsert['roleEnt']=substr($ligne, 127, 1);
$tabDataToInsert['libann']=substr($ligne, 128, 5);
$tabDataToInsert['codtri']=substr($ligne, 133, 6);
$tabDataToInsert['numbod']=substr($ligne, 139, 3);
$tabDataToInsert['dateEvnt']=substr($ligne,142,8);
$tabDataToInsert['dateEffet']=substr($ligne,150,8);
$tabDataToInsert['dateCess']=substr($ligne,158,8);
$tabDataToInsert['monnaie']=substr($ligne,166,2);
$tabDataToInsert['montantVente']=substr($ligne, 168, 11);
$tabDataToInsert['particularite']= substr($ligne, 179, 33);
$tabDataToInsert['codeRubrique']=substr($ligne,212,4);
$tabDataToInsert['codeLibInj']=substr($ligne,216,6);
$tabDataToInsert['codSyn']=substr($ligne,222,5);
$tabDataToInsert['typeSyn']=substr($ligne,227,1);
$tabDataToInsert['idSyn']=trim(substr($ligne,228,7));
$tabDataToInsert['nomsyn']=trim(substr($ligne, 235, 30));
$tabDataToInsert['numruesyn']=trim(substr($ligne, 265, 4));
$tabDataToInsert['compruessyn']=trim(substr($ligne,269,1));
$tabDataToInsert['typvoisyn']=trim(substr($ligne,270 , 3));
$tabDataToInsert['ruesyn']=trim(substr($ligne, 273, 33));
$tabDataToInsert['liesyn']=trim(substr($ligne, 306, 32));
$tabDataToInsert['CdpSyn']=trim(substr($ligne, 338, 5));
$tabDataToInsert['vilsyn']=trim(substr($ligne, 343, 32));
$tabDataToInsert['telsyn']=trim(substr($ligne, 375, 10));
$tabDataToInsert['codAdm']=substr($ligne,385,5);
$tabDataToInsert['typeAdm']=substr($ligne,390,1);
$tabDataToInsert['idAdm']=trim(substr($ligne,391,7));
$tabDataToInsert['nomadm']=trim(substr($ligne, 398, 30));
$tabDataToInsert['numrueadm']=trim(substr($ligne, 428, 4));
$tabDataToInsert['compruesadm']=trim(substr($ligne,432,1));
$tabDataToInsert['typvoiadm']=trim(substr($ligne,433 , 3));
$tabDataToInsert['ruesadm']=trim(substr($ligne, 436, 33));
$tabDataToInsert['lieadm']=trim(substr($ligne, 469, 32));
$tabDataToInsert['Cdpadm']=trim(substr($ligne, 501, 5));
$tabDataToInsert['viladm']=trim(substr($ligne, 506, 32));
$tabDataToInsert['teladm']=trim(substr($ligne, 538, 10));
} elseif ($Sotyp=='TXT' && in_array($Sotyp,$tabStructures)) {
$tabDataToInsert['codjou']=substr($ligne, 101, 3);
$tabDataToInsert['datpar']=substr($ligne, 104, 8);
$tabDataToInsert['PagJou']=substr($ligne, 112, 5);
$tabDataToInsert['codevt']=substr($ligne, 117, 2);
$tabDataToInsert['codpar']=substr($ligne, 119, 2);
$tabDataToInsert['numannjou']=substr($ligne, 121, 6);
$tabDataToInsert['roleEnt']=substr($ligne, 127, 1);
$tabDataToInsert['typeAnnonce']=substr($ligne,128,1);
$tabDataToInsert['ann'].=chop(substr($ligne, 129, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 169, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 209, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 249, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 289, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 329, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 369, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 409, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 449, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 489, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 529, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 569, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 609, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 649, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 689, 40)).' ';
$tabDataToInsert['ann'].=chop(substr($ligne, 729, 40)).' ';
} elseif ($Sotyp=='BI' && in_array($Sotyp,$tabStructures)) {
$tabBilan['siren'] =trim(substr($ligne, 36, 9));
$tabBilan['dateProvPartenaire'] =trim(substr($ligne, 57, 8)); // SSAAMMJJ
$tabBilan['dateExercice'] =trim(substr($ligne, 101, 8)); // SSAAMMJJ
$tabBilan['dateExercicePre'] =trim(substr($ligne, 109, 8)); // SSAAMMJJ
$tabBilan['dureeExercice'] =trim(substr($ligne, 117, 2));
$tabBilan['dureeExercicePre'] =trim(substr($ligne, 119, 2));
$tabBilan['monnaie'] =trim(substr($ligne, 121, 2));
$tabBilan['typeBilan'] =trim(substr($ligne, 123, 1)); // C = Bilan consolidé
$tabBilan['monnaieOrigine'] =trim(substr($ligne, 793, 3));
$tabBilan['unite'] =trim(substr($ligne, 796, 1));
for ($j=0; $j<30; $j++)
{
$code =rtrim(substr($ligne, 124+$j*20, 4));
if ($code!='')
{
$colonneLiasse=(int)substr($code,2,1);
$signe =substr($ligne, 128+$j*20, 1);
$valeur =(double)substr($ligne, 129+$j*20, 15);
if ($signe=='-')
$valeur*=-1;
$tabBilan['postes'].="$code=$valeur;";
}
}
$nbLignesBI++;
// print_r($tabBilan);
}
$nbLignes++;
$nbLignesTOT++;
}
}
echo date ('Y/m/d - H:i:s') . " - Nombre de lignes Identité traitées = $nbLignesID !\n";
print_r($tabLigne);
echo date ('Y/m/d - H:i:s') . " - Fin du traitement du fichier $fichier_csv, $nbLignes lignes traitées !\n";
echo date ('Y/m/d - H:i:s') . " - Fin du traitement : $nbLignesTOT lignes traitées au total !\r\n";
echo date ('Y/m/d - H:i:s') . " - Fin du traitement\r\n\r\n";
exit();
function ecrireFichier($fichier, $texte){
$fp = fopen($fichier, "a");
fwrite($fp, $texte."\r\n");
fclose ($fp);
}
?>