public function up()
 {
     $indexedTables = [];
     foreach (\DB::collection('tables')->get() as $table) {
         $table['variants'] = [['_id' => new MongoDB\BSON\ObjectID(), 'title' => $table['title'], 'description' => $table['description'], 'default_title' => $table['default_title'] ?? '', 'default_decision' => $table['default_decision'] ?? '', 'default_description' => $table['default_description'] ?? '', 'rules' => $table['rules'] ?? []]];
         $id = strval($table['_id']);
         \DB::collection('tables')->where('_id', $id)->update(['$set' => ['variants_probability' => '', 'variants' => $table['variants']], '$unset' => ['rules' => null, 'default_title' => null, 'default_decision' => null, 'default_description' => null]]);
         $indexedTables[$id] = $table;
     }
     $decisionsToRemove = [];
     $bulk = new MongoDB\Driver\BulkWrite();
     $manager = new MongoDB\Driver\Manager(sprintf('mongodb://%s:%s', env('DB_HOST'), env('DB_PORT')));
     $skip = 0;
     $limit = 200;
     while ($decisions = \DB::collection('decisions')->limit($limit)->skip($skip)->get()) {
         if (!$decisions) {
             break;
         }
         foreach ($decisions as $decision) {
             $tableId = array_key_exists('table_id', $decision) ? strval($decision['table_id']) : (array_key_exists('table', $decision) ? strval($decision['table']['_id']) : null);
             if (!$tableId or !array_key_exists($tableId, $indexedTables)) {
                 $decisionsToRemove[] = $decision['_id'];
             } else {
                 $table = $indexedTables[$tableId];
                 $variant = $table['variants'][0];
                 $bulk->update(['_id' => $decision['_id']], ['$unset' => ['table_id' => null], '$set' => ['table' => ['_id' => $table['_id'], 'title' => $table['title'], 'description' => $table['description'], 'matching_type' => $table['matching_type'] ?? 'first', 'variant' => ['_id' => $variant['_id'], 'title' => $variant['title'], 'description' => $variant['description']]]]]);
             }
         }
         $skip += $limit;
         $manager->executeBulkWrite(env('DB_DATABASE') . '.decisions', $bulk);
     }
     if ($decisionsToRemove) {
         \DB::collection('decisions')->where('_id', ['$in' => $decisionsToRemove])->delete();
     }
 }
 public function up()
 {
     $appColl = \DB::collection('applications');
     $appColl->where('users', ['$elemMatch' => ['role' => 'admin', 'scope' => ['$nin' => ['update_consumers']]]])->update(['$push' => ['users.$.scope' => 'update_consumers']]);
     $tables = [];
     foreach (\DB::collection('tables')->get() as $table) {
         $tables[(string) $table['_id']] = $table['applications'];
     }
     $bulk = new MongoDB\Driver\BulkWrite();
     $manager = new MongoDB\Driver\Manager(sprintf('mongodb://%s:%s', env('DB_HOST'), env('DB_PORT')));
     $skip = 0;
     $limit = 200;
     while ($decisions = \DB::collection('decisions')->limit($limit)->skip($skip)->get()) {
         if (!$decisions) {
             break;
         }
         foreach ($decisions as $decision) {
             $applications = [];
             if (array_key_exists('table_id', $decision)) {
                 $applications = array_key_exists((string) $decision['table_id'], $tables) ? $tables[(string) $decision['table_id']] : [];
             } elseif (array_key_exists('table', $decision)) {
                 $applications = array_key_exists((string) $decision['table']['_id'], $tables) ? $tables[(string) $decision['table']['_id']] : [];
             }
             $bulk->update(['_id' => $decision['_id']], ['$set' => ['applications' => $applications]]);
         }
         $skip += $limit;
         $manager->executeBulkWrite(env('DB_DATABASE') . '.decisions', $bulk);
     }
 }
Exemple #3
0
    public function import($statOnly = '')
    {
        $dateFilter = '`data_ora_rich` > CURDATE() - INTERVAL 1 MONTH';
        if ($statOnly != '') {
            $config = clone $this->db->config;
            $configDb = $this->db->config->database->toArray();
            $configDb['options']['buffer_results'] = false;
            $this->db = new \Zend\Db\Adapter\Adapter($configDb);
            $this->db->config = $config;
            $dateFilter = 'TRUE';
            if ($this->db->config->storeExpiryStatFile->VisSintRep != '') {
                $statHandler = fopen($this->db->config->storeExpiryStatFile->VisSintRep, 'w');
            }
            $manager = new \MongoDB\Driver\Manager("mongodb://localhost:27017");
            $bulk = new \MongoDB\Driver\BulkWrite();
        }
        $this->db->query('ALTER TABLE company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE company_to_company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person_to_company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $archiviRichieste = array(array('dir' => 'risposteBaseDirMass', 'sql' => '
SELECT aps_prod_backup.eps_richiesta_mass.id_richiesta,
aps_prod_backup.eps_richiesta_mass.id_mov_contab,
aps_prod_backup.eps_richiesta_mass.id_richiesta_cache,
aps_prod_backup.eps_richiesta_mass.stringa_richiesta,
aps_prod_backup.eps_richiesta_mass.data_ora_rich,
aps_prod_backup.eps_richiesta_mass.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab_mass.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab_mass.importo as importo ,
aps_prod_backup.eps_mov_contab_mass.id_mov_contab_gen as id_mov_contab_gen ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza
FROM aps_prod_backup.eps_richiesta_mass
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta_mass.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab_mass ON aps_prod_backup.eps_mov_contab_mass.id_mov_contab=aps_prod_backup.eps_richiesta_mass.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab_mass.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab_mass.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE
' . $dateFilter . ' AND
aps_prod.eps_operazione.cod_operazione = "vissintrep"
                    ', 'sqlp' => '
SELECT aps_prod_backup.eps_richiesta.id_richiesta,
aps_prod_backup.eps_richiesta.id_mov_contab,
aps_prod_backup.eps_richiesta.id_richiesta_cache,
aps_prod_backup.eps_richiesta.stringa_richiesta,
aps_prod_backup.eps_richiesta.data_ora_rich,
aps_prod_backup.eps_richiesta.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab.importo as importo ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza

FROM aps_prod_backup.eps_richiesta
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab ON aps_prod_backup.eps_mov_contab.id_mov_contab=aps_prod_backup.eps_richiesta.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE  
aps_prod_backup.eps_mov_contab.id_mov_contab = %d
'), array('dir' => 'risposteBaseDir', 'sql' => '
SELECT aps_prod_backup.eps_richiesta.id_richiesta,
aps_prod_backup.eps_richiesta.id_mov_contab,
aps_prod_backup.eps_richiesta.id_richiesta_cache,
aps_prod_backup.eps_richiesta.stringa_richiesta,
aps_prod_backup.eps_richiesta.data_ora_rich,
aps_prod_backup.eps_richiesta.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab.importo as importo ,
aps_prod_backup.eps_mov_contab.id_mov_contab_gen as id_mov_contab_gen ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza

FROM aps_prod_backup.eps_richiesta
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab ON aps_prod_backup.eps_mov_contab.id_mov_contab=aps_prod_backup.eps_richiesta.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE  
' . $dateFilter . ' AND
aps_prod.eps_operazione.cod_operazione = "vissintrep"
                    ', 'sqlp' => '
SELECT aps_prod_backup.eps_richiesta.id_richiesta,
aps_prod_backup.eps_richiesta.id_mov_contab,
aps_prod_backup.eps_richiesta.id_richiesta_cache,
aps_prod_backup.eps_richiesta.stringa_richiesta,
aps_prod_backup.eps_richiesta.data_ora_rich,
aps_prod_backup.eps_richiesta.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab.importo as importo ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza

FROM aps_prod_backup.eps_richiesta
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab ON aps_prod_backup.eps_mov_contab.id_mov_contab=aps_prod_backup.eps_richiesta.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE  
aps_prod_backup.eps_mov_contab.id_mov_contab = %d
'));
        $totalCount = 0;
        $asXML = array();
        foreach ($archiviRichieste as $archivioRichieste) {
            $richieste = $this->db->query($archivioRichieste['sql'], \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
            $count = 0;
            $groupCount = 0;
            $company = new \crm\Company($this->db);
            $rCompany = new \crm\Company($this->db);
            $person = new \crm\Person($this->db);
            while (is_object($richiesta = $richieste->current())) {
                echo "\r" . $count++ . '/' . ($richieste->count() - 1) . str_repeat(' ', 5);
                $dati = array();
                $imprese = array();
                $esponenti = array();
                $sId = str_pad($richiesta->id_richiesta, 9, '0', STR_PAD_LEFT);
                $dM = 'M' . substr($sId, 0, 3);
                $dK = 'K' . substr($sId, 3, 3);
                $nomeFile = $this->db->config->{$archivioRichieste['dir']} . "/{$dM}/{$dK}/F{$sId}.xml";
                if (!is_file($nomeFile)) {
                    $richieste->next();
                    continue;
                }
                $dati['id_mov_contab'] = $richiesta->id_mov_contab;
                $dati['massiva'] = $archivioRichieste['dir'] == 'risposteBaseDir' ? 0 : 1;
                $dati['id_richiesta'] = $richiesta->id_richiesta;
                $dati['test_nome_file'] = "\"" . str_replace('"', '\\"', basename($nomeFile)) . "\"";
                $dati['errore'] = '';
                $dati['data_ora_rich'] = $richiesta->data_ora_rich;
                $dati['data_ora_evas'] = $richiesta->data_ora_evas;
                $dati['cod_operazione'] = $richiesta->cod_operazione;
                $dati['cod_prodotto'] = $richiesta->cod_prodotto;
                $dati['cod_cliente'] = $richiesta->cod_cliente;
                $dati['cod_istanza'] = $richiesta->cod_istanza;
                $dati['importo'] = $richiesta->importo;
                $dati['differita'] = 1;
                if ($richiesta->importo == 0 && $richiesta->id_richiesta_cache == 0) {
                    $richieste->next();
                    continue;
                }
                $richiestaGen = $this->db->query(sprintf($archivioRichieste['sqlp'], $richiesta->id_mov_contab_gen), \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
                $richiestaGen = $richiestaGen->current();
                $nomeFileGen = null;
                if (is_object($richiestaGen)) {
                    $sIdGen = str_pad($richiestaGen->id_richiesta, 9, '0', STR_PAD_LEFT);
                    $dMG = 'M' . substr($sIdGen, 0, 3);
                    $dKG = 'K' . substr($sIdGen, 3, 3);
                    $nomeFileGen = $this->db->config->{$archivioRichieste['dir']} . "/{$dMG}/{$dKG}/F{$sIdGen}.xml";
                }
                $content = file_get_contents($nomeFile);
                preg_match('/\\-+=.*/', $content, $separator);
                if (sizeof($separator) == 0) {
                    $main = '';
                    $report = $content;
                } else {
                    $separator = trim($separator[0]);
                    $parts = explode($separator, $content);
                    $main = $parts[1];
                    $report = $parts[2];
                    $main = preg_replace('/.*\\r\\n\\r\\n/ms', '', $main);
                    $report = preg_replace('/.*\\r\\n\\r\\n/ms', '', $report);
                }
                set_error_handler(create_function('', ''));
                try {
                    $scXML = new \SimpleXMLElement($main);
                    $scXML->registerXPathNamespace('env', 'http://schemas.xmlsoap.org/soap/envelope/');
                    $scXML->registerXPathNamespace('ns2', 'http://www.lince.it/WSCorporate_1/RetrieveReportService');
                    $scXML->registerXPathNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance');
                    $sXML = new \SimpleXMLElement($report);
                    $compmany = null;
                    if (is_file($nomeFileGen)) {
                        $sgXML = new \SimpleXMLElement($nomeFileGen, 0, true);
                        $sgXML->registerXPathNamespace('env', 'http://schemas.xmlsoap.org/soap/envelope/');
                        $sgXML->registerXPathNamespace('ns2', 'http://www.lince.it/WSCorporate_1/ThreeStepService');
                        $sgXML->registerXPathNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance');
                        $companiesSearch = $sgXML->xpath('/env:Envelope/env:Body/ns2:searchCompanyResponse/searchResult/companies');
                        foreach ($companiesSearch as $companySearch) {
                            if ($companySearch->fiscalCode == (string) $sXML->xpath('/BasicAbbrevia/CompanyIdentificationSection/TaxCode')[0]) {
                                break;
                            }
                        }
                    }
                    /*$errore = $sXML->xpath('/env:Envelope/env:Body/env:Fault/faultstring');
                      if (is_array($errore)) {
                         $dati['errore'] = "\"".array_shift($errore)."\"";
                      }
                      $sContenuto = base64_decode($sXML->xpath('//document')[0]);
                      $sXML = new \SimpleXMLElement($sContenuto);*/
                } catch (\Exception $e) {
                }
                $companyData = $sXML->xpath('/BasicAbbrevia/CompanyIdentificationSection')[0];
                $companyAddress = $sXML->xpath('/BasicAbbrevia/CompanyIdentificationSection/RHOAddress')[0];
                $companyBusiness = $sXML->xpath('/BasicAbbrevia/CompanyIdentificationSection/RHOSlimActivityList/SlimBusinessActivity')[0];
                $dati['dataCerved'] = '';
                $dateObject = date_create_from_format('d/m/Y H:i:s.u', (string) $sXML->xpath('/BasicAbbrevia/Metadata/Response/Stats/ServiceResponseTime')[0]);
                if (!is_object($dateObject)) {
                    $dateObject = date_create_from_format('d/m/Y H:i:s,u', (string) $sXML->xpath('/BasicAbbrevia/Metadata/Response/Stats/ServiceResponseTime')[0]);
                }
                if (is_object($dateObject)) {
                    $dati['dataCerved'] = date_format($dateObject, 'Y-m-d H:i:s');
                }
                $dati['gruppo'] = '';
                $dati['gruppoRuolo'] = '';
                $dati['partIVA'] = (string) $companySearch->vatNumber;
                $dati['ragSoc'] = (string) $companyData->CompanyName;
                $dati['codFisc'] = (string) $companyData->TaxCode;
                $dati['provCCIAA'] = (string) $companyData->REAProvinceCode;
                $dati['nCCIAA'] = (string) $companyData->REANumber;
                $dati['prov'] = (string) $companyAddress->ProvinceCode;
                $dati['comune'] = (string) $companyAddress->City;
                $dati['indirizzo'] = (string) $companyAddress->StreetName . ' ' . (string) $companyAddress->StreetNo;
                $dati['CAP'] = (string) $companyAddress->PostCode;
                $dati['nazione'] = 'ITALIA';
                $dati['sitoWeb'] = '';
                $dati['email'] = (string) $companyData->CertifiedEmail;
                $dati['telefono'] = (string) $companySearch->phoneNumber;
                $dati['statoAttivita'] = (string) $companySearch->activityStatus;
                $dati['formaGiurid'] = (string) $companySearch->legalForm;
                $dati['tipoSoc'] = '';
                $dati['capitaleSociale'] = '';
                $dati['codISTAT'] = (string) $companyBusiness->Code;
                $dati['desISTAT'] = (string) $companySearch->cAtecoDescription;
                if (method_exists($companyBusiness->Code, 'attributes')) {
                    $dati['desISTAT'] = (string) $companyBusiness->Code->attributes()->description;
                }
                $dati['codNACE'] = '';
                $dati['dataInizioAtt'] = '';
                $dati['dataCostituzione'] = '';
                $dati['dataREA'] = date_format(date_create((string) $companySearch->registrationDate), 'Y-m-d H:i:s');
                if (strlen($dati['dataREA']) < 6) {
                    $dati['dataREA'] = '';
                }
                $dati['fidoAffidabilta'] = '';
                $dati['fidoAffidabiltaNote'] = '';
                $dati['fidoAccordabile'] = '';
                $dati['numUffSedi'] = '';
                $dati['desAttivita'] = '';
                $dati['eventi'] = '';
                $dati['protesti'] = '';
                $dati['fallimenti'] = '';
                $dati['pregiudizievoli'] = '';
                $dati['cassaIntegrazione'] = '';
                $dati['nDipendenti'] = '';
                $dati['fatturato'] = '';
                $dati['annoFatturato'] = '';
                $dati['trendFatturato'] = '';
                $dati['utilePerdita'] = '';
                $dati['patrimonioNetto'] = '';
                $dati['margineOperativoLordo'] = '';
                $dati['risultatoOperativoLordo'] = '';
                $dati['indiceIndebitamento'] = '';
                $dati['ROI'] = '';
                $dati['ROE'] = '';
                $dati['indiceLiquidita'] = '';
                $dati['dataChiusuraBilancio'] = '';
                foreach ($sXML->xpath('/BasicAbbrevia/RepresentativesSection/RepresentativeList/Representative') as $shareolder) {
                    if (property_exists($shareolder, 'Individual')) {
                        $esponente = array();
                        $esponente['nome'] = (string) $shareolder->Individual->FirstName;
                        $esponente['cognome'] = (string) $shareolder->Individual->LastName;
                        $esponente['codFisc'] = (string) $shareolder->TaxCode;
                        $esponente['dataNas'] = (string) date_format(date_create_from_format('d/m/Y', (string) $shareolder->Individual->Birth->BirthDate->Value), 'Y-m-d');
                        $esponente['luogoNas'] = (string) $shareolder->Individual->Birth->City;
                        $esponente['prov'] = (string) $shareolder->Individual->TaxDomicile->ProvinceCode;
                        $esponente['comune'] = (string) $shareolder->Individual->TaxDomicile->City;
                        $esponente['indirizzo'] = (string) $shareolder->Individual->TaxDomicile->StreetName . ' ' . (string) $shareolder->Individual->TaxDomicile->StreetNo;
                        $esponente['CAP'] = (string) $shareolder->Individual->TaxDomicile->PostCode;
                        $esponente['titolo'] = 'ESPONENTE';
                        $esponenti[] = $esponente;
                    } else {
                        if (property_exists($shareolder, 'CompanyEquivalent')) {
                            $impresa = array();
                            $impresa['ragSoc'] = (string) $shareolder->CompanyEquivalent->CompanyName;
                            $impresa['formaGiurid'] = '';
                            $impresa['partIVA'] = (string) $shareolder->TaxCode;
                            $impresa['capitaleSociale'] = '';
                            $impresa['statoAttivita'] = '';
                            $impresa['provCCIAA'] = (string) $shareolder->CompanyEquivalent->REAProvinceCode;
                            $impresa['nCCIAA'] = (string) $shareolder->CompanyEquivalent->REANo;
                            $impresa['prov'] = (string) $shareolder->CompanyEquivalent->Address->ProvinceCode;
                            $impresa['comune'] = (string) $shareolder->CompanyEquivalent->Address->City;
                            $impresa['indirizzo'] = (string) $shareolder->CompanyEquivalent->Address->StreetName . ' ' . (string) $shareolder->CompanyEquivalent->Address->StreetNo;
                            $impresa['CAP'] = (string) $shareolder->CompanyEquivalent->Address->PostCode;
                            $impresa['titolo'] = 'CORRELATA';
                            $imprese[] = $impresa;
                        }
                    }
                }
                restore_error_handler();
                if ($statOnly != '') {
                    array_walk($dati, create_function('&$item', '$item=str_replace("\\"","",$item);'));
                    if (isset($statHandler)) {
                        if (ftell($statHandler) == 0) {
                            fputcsv($statHandler, array_keys($dati));
                        }
                        fputcsv($statHandler, $dati);
                        fflush($statHandler);
                    }
                    $domXml = dom_import_simplexml($sXML);
                    $aXML = array('_id' => $dati['id_mov_contab']);
                    $this->xml2array($domXml, $aXML);
                    $this->singlexml2array($domXml, $asXML);
                    file_put_contents('/tmp/vissintrep.json', json_encode($asXML));
                    /*$xml = new \SimpleXMLElement('<root/>');
                    
                    
                                   $this->array_to_xml($aXML,$xml);*/
                    if (true || is_array($aXML) && $totalCount++ < 10000.0) {
                        $bulk->update(array('_id' => $dati['id_mov_contab']), $aXML, array('multi' => false, 'upsert' => true));
                    }
                }
                if ($dati['partIVA'] == '' || $dati['partIVA'] == 0 || $statOnly != '') {
                    $richieste->next();
                    continue;
                }
                $company->setData(array());
                $company->loadFromId($dati['partIVA']);
                $cDati = $company->getData();
                if (is_array($cDati) && count($cDati) > 0) {
                    $company->setData(array_merge($cDati, array_filter($dati)));
                    $company->update();
                } else {
                    $company->setData($dati);
                    $company->insert();
                }
                foreach ($imprese as $impresa) {
                    $rCompany->setData(array());
                    $rCompany->loadFromId($impresa['partIVA']);
                    $cDati = $rCompany->getData();
                    if (is_array($cDati) && count($cDati) > 0) {
                        $rCompany->setData(array_merge($cDati, array_filter($impresa)));
                        $rCompany->update();
                    } else {
                        $rCompany->setData($impresa);
                        $rCompany->insert();
                    }
                    $company->addRelatedCompany($rCompany);
                }
                foreach ($esponenti as $esponente) {
                    if (strlen($esponente['codFisc']) == 16) {
                        $person->setData(array());
                        $person->loadFromId($esponente['codFisc']);
                        $cDati = $person->getData();
                        if (is_array($cDati) && count($cDati) > 0) {
                            $person->setData(array_merge($cDati, array_filter($esponente)));
                            $person->update();
                        } else {
                            $person->setData($esponente);
                            $person->insert();
                        }
                        $company->addRelatedExponent($person);
                    } else {
                        $rCompany->setData(array());
                        $esponente['partIVA'] = $esponente['codFisc'];
                        $rCompany->loadFromId($esponente['partIVA']);
                        $cDati = $rCompany->getData();
                        if (is_array($cDati) && count($cDati) > 0) {
                            $rCompany->setData(array_merge($cDati, array_filter($esponente)));
                            $rCompany->update();
                        } else {
                            $rCompany->setData($esponente);
                            $rCompany->insert();
                        }
                        $company->addRelatedCompany($rCompany);
                    }
                }
                $richieste->next();
            }
        }
        $this->db->query('ALTER TABLE company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE company_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        if (isset($statHandler)) {
            fclose($statHandler);
            if ($bulk->count() > 0) {
                $manager->executeBulkWrite('report_impresa.vissintrep', $bulk);
            }
        }
        echo PHP_EOL;
    }
Exemple #4
0
<?php

$m = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$b = new MongoDB\Driver\BulkWrite();
$doc = ['_id' => new MongoDB\BSON\ObjectID(), 'name' => 'runnoob'];
$_id = $b->insert($doc);
var_dump($_id);
$write = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$res = $m->executeBulkWrite('test.runnoob', $b, $write);
echo 'createCollection success!';
    public function import($statOnly = '')
    {
        $dateFilter = '`data_ora_rich` > CURDATE() - INTERVAL 2 MONTH';
        if ($statOnly != '') {
            $config = clone $this->db->config;
            $configDb = $this->db->config->database->toArray();
            $configDb['options']['buffer_results'] = false;
            $this->db = new \Zend\Db\Adapter\Adapter($configDb);
            $this->db->config = $config;
            $dateFilter = 'TRUE';
            $manager = new \MongoDB\Driver\Manager("mongodb://localhost:27017");
            $bulk = new \MongoDB\Driver\BulkWrite();
        }
        $this->db->query('ALTER TABLE company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE company_to_company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person_to_company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $richieste = $this->db->query('
SELECT aps_prod_backup.eps_richiesta.id_richiesta,
aps_prod_backup.eps_richiesta.id_mov_contab,
aps_prod_backup.eps_richiesta.id_richiesta_cache,
aps_prod_backup.eps_richiesta.stringa_richiesta,
aps_prod_backup.eps_richiesta.data_ora_rich,
aps_prod_backup.eps_richiesta.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab.importo as importo ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza

FROM aps_prod_backup.eps_richiesta
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab ON aps_prod_backup.eps_mov_contab.id_mov_contab=aps_prod_backup.eps_richiesta.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE  
' . $dateFilter . ' AND
   aps_prod.eps_operazione.cod_operazione = "negflagpreg2"
', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $count = 0;
        $totalCount = 0;
        $groupCount = 0;
        $company = new \crm\Company($this->db);
        $rCompany = new \crm\Company($this->db);
        $person = new \crm\Person($this->db);
        while (is_object($richiesta = $richieste->current())) {
            echo "\r" . $count++ . '/' . ($richieste->count() - 1) . str_repeat(' ', 5);
            $dati = array();
            $sId = str_pad($richiesta->id_richiesta, 9, '0', STR_PAD_LEFT);
            $dM = 'M' . substr($sId, 0, 3);
            $dK = 'K' . substr($sId, 3, 3);
            $nomeFile = $this->db->config->risposteBaseDir . "/{$dM}/{$dK}/F{$sId}.xml";
            if (!is_file($nomeFile)) {
                $richieste->next();
                continue;
            }
            $dati['id_mov_contab'] = $richiesta->id_mov_contab;
            $dati['massiva'] = 0;
            $dati['id_richiesta'] = $richiesta->id_richiesta;
            $dati['test_nome_file'] = "\"" . str_replace('"', '\\"', basename($nomeFile)) . "\"";
            $dati['errore'] = '';
            $dati['data_ora_rich'] = $richiesta->data_ora_rich;
            $dati['data_ora_evas'] = $richiesta->data_ora_evas;
            $dati['cod_operazione'] = $richiesta->cod_operazione;
            $dati['cod_prodotto'] = $richiesta->cod_prodotto;
            $dati['cod_cliente'] = $richiesta->cod_cliente;
            $dati['cod_istanza'] = $richiesta->cod_istanza;
            $dati['importo'] = $richiesta->importo;
            $dati['differita'] = 0;
            /*if ($richiesta->importo ==0 && $richiesta->id_richiesta_cache == 0) {
                 $richieste->next();
                 continue;
              }*/
            set_error_handler(create_function('', ''));
            try {
                $report = new \SimpleXMLElement($nomeFile, 0, true);
            } catch (\Exception $e) {
                var_dump($e);
            }
            restore_error_handler();
            if ($statOnly != '') {
                array_walk($dati, create_function('&$item', '$item=str_replace("\\"","",$item);'));
                if (isset($statHandler)) {
                    if (ftell($statHandler) == 0) {
                        fputcsv($statHandler, array_keys($dati));
                    }
                    fputcsv($statHandler, $dati);
                    fflush($statHandler);
                }
                $domXml = dom_import_simplexml($report);
                $aXML = array('_id' => $dati['id_mov_contab']);
                $this->xml2array($domXml, $aXML);
                /*$xml = new \SimpleXMLElement('<root/>');
                
                
                         $t*his->array_to_xml($aXML,$xml);*/
                if (true || is_array($aXML) && $totalCount++ < 10000.0) {
                    $bulk->update(array('_id' => $dati['id_mov_contab']), $aXML, array('multi' => false, 'upsert' => true));
                }
            }
            $richieste->next();
        }
        $this->db->query('ALTER TABLE company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE company_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        if ($statOnly != '') {
            $manager->executeBulkWrite('risk.negflagpreg2', $bulk);
        }
        echo PHP_EOL;
    }
Exemple #6
0
    public function import($statOnly = '')
    {
        $dateFilter = '`data_ora_rich` > CURDATE() - INTERVAL 2 MONTH';
        if ($statOnly != '') {
            $config = clone $this->db->config;
            $configDb = $this->db->config->database->toArray();
            $configDb['options']['buffer_results'] = false;
            $this->db = new \Zend\Db\Adapter\Adapter($configDb);
            $this->db->config = $config;
            $dateFilter = 'TRUE';
            if ($this->db->config->storeExpiryStatFile->Skimp != '') {
                $statHandler = fopen($this->db->config->storeExpiryStatFile->Skimp, 'w');
            }
            $manager = new \MongoDB\Driver\Manager("mongodb://localhost:27017");
            $bulk = new \MongoDB\Driver\BulkWrite();
        }
        $this->db->query('ALTER TABLE company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE company_to_company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person_to_company DISABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $archiviRichieste = array(array('dir' => 'risposteBaseDirMass', 'sql' => '
SELECT aps_prod_backup.eps_richiesta_mass.id_richiesta,
aps_prod_backup.eps_richiesta_mass.id_mov_contab,
aps_prod_backup.eps_richiesta_mass.id_richiesta_cache,
aps_prod_backup.eps_richiesta_mass.stringa_richiesta,
aps_prod_backup.eps_richiesta_mass.data_ora_rich,
aps_prod_backup.eps_richiesta_mass.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab_mass.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab_mass.importo as importo ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza

FROM aps_prod_backup.eps_richiesta_mass
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta_mass.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab_mass ON aps_prod_backup.eps_mov_contab_mass.id_mov_contab=aps_prod_backup.eps_richiesta_mass.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab_mass.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab_mass.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE  
' . $dateFilter . ' AND (
   aps_prod.eps_operazione.cod_operazione = "skimpord" OR 
   aps_prod.eps_operazione.cod_operazione = "skimpsto"
)

          '), array('dir' => 'risposteBaseDir', 'sql' => '
SELECT aps_prod_backup.eps_richiesta.id_richiesta,
aps_prod_backup.eps_richiesta.id_mov_contab,
aps_prod_backup.eps_richiesta.id_richiesta_cache,
aps_prod_backup.eps_richiesta.stringa_richiesta,
aps_prod_backup.eps_richiesta.data_ora_rich,
aps_prod_backup.eps_richiesta.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab.importo as importo ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza

FROM aps_prod_backup.eps_richiesta
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab ON aps_prod_backup.eps_mov_contab.id_mov_contab=aps_prod_backup.eps_richiesta.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE  
' . $dateFilter . ' AND (
   aps_prod.eps_operazione.cod_operazione = "skimpord" OR 
   aps_prod.eps_operazione.cod_operazione = "skimpsto"
)
'));
        foreach ($archiviRichieste as $archivioRichieste) {
            $richieste = $this->db->query($archivioRichieste['sql'], \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
            $count = 0;
            $totalCount = 0;
            $groupCount = 0;
            $company = new \crm\Company($this->db);
            $rCompany = new \crm\Company($this->db);
            $person = new \crm\Person($this->db);
            while (is_object($richiesta = $richieste->current())) {
                echo "\r" . $count++ . '/' . ($richieste->count() - 1) . str_repeat(' ', 5);
                $dati = array();
                $imprese = array();
                $esponenti = array();
                $sId = str_pad($richiesta->id_richiesta, 9, '0', STR_PAD_LEFT);
                $dM = 'M' . substr($sId, 0, 3);
                $dK = 'K' . substr($sId, 3, 3);
                $nomeFile = $this->db->config->{$archivioRichieste['dir']} . "/{$dM}/{$dK}/F{$sId}.xml";
                if (!is_file($nomeFile)) {
                    $richieste->next();
                    continue;
                }
                $dati['id_mov_contab'] = $richiesta->id_mov_contab;
                $dati['massiva'] = 0;
                $dati['id_richiesta'] = $richiesta->id_richiesta;
                $dati['test_nome_file'] = "\"" . str_replace('"', '\\"', basename($nomeFile)) . "\"";
                $dati['errore'] = '';
                $dati['data_ora_rich'] = $richiesta->data_ora_rich;
                $dati['data_ora_evas'] = $richiesta->data_ora_evas;
                $dati['cod_operazione'] = $richiesta->cod_operazione;
                $dati['cod_prodotto'] = $richiesta->cod_prodotto;
                $dati['cod_cliente'] = $richiesta->cod_cliente;
                $dati['cod_istanza'] = $richiesta->cod_istanza;
                $dati['importo'] = $richiesta->importo;
                $dati['differita'] = 0;
                if ($richiesta->importo == 0 && $richiesta->id_richiesta_cache == 0) {
                    $richieste->next();
                    continue;
                }
                set_error_handler(create_function('', ''));
                try {
                    $sXML = new \SimpleXMLElement($nomeFile, 0, true);
                } catch (\Exception $e) {
                    $dati['differita'] = 1;
                    $data = file_get_contents($nomeFile);
                    preg_match('/--(?<MIME_boundary>.+?)\\s/', $data, $match);
                    $mimeBoundary = $match['MIME_boundary'];
                    preg_match('/(.*Content-Id.+' . PHP_EOL . ')/', $data, $match);
                    $start = strpos($data, $match[1]) + strlen($match[1]);
                    $end = strpos($data, "--{$mimeBoundary}--");
                    $data = substr($data, $start, $end - $start);
                    try {
                        $sXML = new \SimpleXMLElement(trim($data));
                    } catch (\Exception $e) {
                        $dati['differita'] = 0;
                    }
                }
                $dati['dataCerved'] = '';
                $report = $sXML->xpath('/s:Envelope/s:Body/*')[0]->BasicReportDocument;
                $date = new \DateTime((string) $sXML->xpath('/s:Envelope/s:Body/*')[0]->TransactionResponse->Details->ResponseTimestamp[0]);
                if (is_object($date)) {
                    $dati['dataCerved'] = $date->format('Y-m-d H:i:s');
                }
                $dati['gruppo'] = '';
                $dati['gruppoRuolo'] = '';
                $dati['partIVA'] = (string) $report->CRR->ID->C->attributes()->VC[0];
                $dati['ragSoc'] = (string) $report->CRR->ID->C->attributes()->ND[0];
                $dati['codFisc'] = (string) $report->CRR->ID->C->attributes()->TC[0];
                $dati['provCCIAA'] = (string) $report->CRR->ID->C->attributes()->PCCIAA[0];
                $dati['nCCIAA'] = (string) $report->CRR->ID->C->attributes()->RC[0];
                $dati['prov'] = (string) $report->CRR->ID->C->AD->attributes()->PC[0];
                $dati['comune'] = (string) $report->CRR->ID->C->AD->attributes()->TD[0];
                $dati['indirizzo'] = (string) $report->CRR->ID->C->AD->attributes()->TP[0] . ' ' . (string) $report->CRR->ID->C->AD->attributes()->AD[0] . ' ' . (string) $report->CRR->ID->C->AD->attributes()->N[0];
                $dati['CAP'] = (string) $report->CRR->ID->C->AD->attributes()->ZC[0];
                $dati['nazione'] = 'IT';
                $dati['sitoWeb'] = '';
                $dati['email'] = '';
                $dati['telefono'] = '';
                foreach ($report->CRR->ID->C->C as $contact) {
                    switch ($contact->attributes()->TC) {
                        case 'U':
                            $dati['sitoWeb'] = (string) $contact->attributes()->CV[0];
                            break;
                        case 'T':
                            $dati['telefono'] = (string) $contact->attributes()->CV[0];
                            break;
                        case 'E':
                        case 'C':
                            $dati['email'] = (string) $contact->attributes()->CV[0];
                            break;
                    }
                }
                $dati['statoAttivita'] = (string) $report->CRR->ID->C->attributes()->BSD[0];
                $dati['formaGiurid'] = (string) $report->CRR->ID->C->attributes()->LFCD[0];
                $dati['tipoSoc'] = (string) $report->CRR->ID->C->attributes()->LFGCD[0];
                $dati['capitaleSociale'] = '';
                if (is_object($report->CRR->AF->LD->FA->SC->AC)) {
                    $dati['capitaleSociale'] = (string) $report->CRR->AF->LD->FA->SC->AC->attributes()->A[0];
                }
                $dati['codISTAT'] = '';
                $dati['desISTAT'] = '';
                if (is_object($report->CRR->AF->A->IA->PA07)) {
                    $dati['codISTAT'] = (string) $report->CRR->AF->A->IA->PA07->attributes()->C[0];
                    $dati['desISTAT'] = (string) $report->CRR->AF->A->IA->PA07->attributes()->D[0];
                }
                if (is_object($report->CRR->AF->A->NACE)) {
                    $dati['codNACE'] = (string) $report->CRR->AF->A->NACE->attributes()->C[0];
                }
                $dati['dataInizioAtt'] = '';
                $date = new \DateTime((string) $report->CRR->ID->C->attributes()->SD[0]);
                if (is_object($date)) {
                    $dati['dataInizioAtt'] = $date->format('Y-m-d H:i:s');
                }
                $dati['dataCostituzione'] = '';
                $dati['dataREA'] = '';
                $date = new \DateTime((string) $report->CRR->AF->LD->H->attributes()->SD[0]);
                if (is_object($date)) {
                    $dati['dataREA'] = $date->format('Y-m-d H:i:s');
                }
                $dati['fidoAffidabilta'] = '';
                $dati['fidoAffidabiltaNote'] = '';
                $dati['fidoAccordabile'] = '';
                $dati['numUffSedi'] = count($report->CRR->Bs->B);
                $dati['desAttivita'] = (string) $report->CRR->AF->LD->AA->attributes()->SO[0];
                $dati['eventi'] = count($report->CRR->RE->LE);
                $dati['protesti'] = count($report->CRR->RE->NE->PRTs);
                $dati['fallimenti'] = count($report->CRR->RE->NE->PE);
                $dati['pregiudizievoli'] = count($report->CRR->RE->NE->LPs) + count($report->CRR->RE->NE->PERER);
                $dati['cassaIntegrazione'] = '';
                if (is_object($report->CRR->AF->A->ED)) {
                    $dati['nDipendenti'] = $report->CRR->AF->A->ED->attributes()->N + $report->CRR->AF->A->ED->attributes()->SEN;
                }
                $dati['fatturato'] = '';
                $dati['annoFatturato'] = '';
                $dati['utilePerdita'] = '';
                $dati['patrimonioNetto'] = '';
                $dati['trendFatturato'] = '';
                $dati['margineOperativoLordo'] = '';
                $dati['risultatoOperativoLordo'] = '';
                $dati['indiceIndebitamento'] = '';
                $dati['ROI'] = '';
                $dati['ROE'] = '';
                $dati['indiceLiquidita'] = '';
                if (is_object($report->CRR->BSs->BSS->BSD)) {
                    $dati['fatturato'] = (string) $report->CRR->BSs->BSS->BSD->PLA->attributes()->TR[0];
                    $dati['annoFatturato'] = (string) $report->CRR->BSs->BSS->BSD->attributes()->Y[0];
                    $dati['utilePerdita'] = (string) $report->CRR->BSs->BSS->BSD->PLA->attributes()->PL[0];
                    $dati['patrimonioNetto'] = (string) $report->CRR->BSs->BSS->BSD->LB->attributes()->PL[0];
                }
                $dati['dataChiusuraBilancio'] = '';
                foreach ($report->CRR->Rs->R as $subsidiarie) {
                    if (is_object($subsidiarie->ID->P)) {
                        $esponente = array();
                        $esponente['nome'] = (string) $subsidiarie->ID->P->attributes()->N;
                        $esponente['cognome'] = (string) $subsidiarie->ID->P->attributes()->S;
                        $esponente['codFisc'] = (string) $subsidiarie->ID->P->attributes()->TC;
                        $esponente['dataNas'] = '';
                        if (is_object($subsidiarie->ID->P->BD)) {
                            $date = new \DateTime((string) $subsidiarie->ID->P->BD->attributes()->D);
                            if (is_object($date)) {
                                $esponente['dataNas'] = $date->format('Y-m-d');
                            }
                            $esponente['luogoNas'] = (string) $subsidiarie->ID->P->BD->attributes()->TD;
                        }
                        if (is_object($subsidiarie->ID->P->AD)) {
                            $esponente['prov'] = (string) $subsidiarie->ID->P->AD->attributes()->PC;
                            $esponente['comune'] = (string) $subsidiarie->ID->P->AD->attributes()->TD;
                            $esponente['indirizzo'] = (string) $subsidiarie->ID->P->AD->attributes()->TP . ' ' . (string) $subsidiarie->ID->P->AD->attributes()->AD . ' ' . (string) $subsidiarie->ID->P->AD->attributes()->N;
                            $esponente['CAP'] = (string) $subsidiarie->ID->P->AD->attributes()->ZC;
                        }
                        if (is_object($subsidiarie->RPs->RP->R)) {
                            $esponente['titolo'] = (string) $subsidiarie->RPs->RP->R->attributes()->RDES;
                        }
                        $esponenti[] = $esponente;
                    } else {
                        if (is_object($subsidiarie->ID->C)) {
                            $impresa = array();
                            $impresa['ragSoc'] = (string) $subsidiarie->ID->C->attributes()->ND;
                            $impresa['formaGiurid'] = '';
                            $impresa['partIVA'] = (string) $subsidiarie->ID->C->attributes()->TC;
                            $impresa['capitaleSociale'] = '';
                            $impresa['statoAttivita'] = '';
                            $impresa['provCCIAA'] = '';
                            $impresa['nCCIAA'] = '';
                            $impresa['prov'] = (string) $subsidiarie->ID->C->AD->attributes()->PC;
                            $impresa['comune'] = (string) $subsidiarie->ID->C->AD->attributes()->TD;
                            $impresa['indirizzo'] = (string) $subsidiarie->ID->C->AD->attributes()->TP . ' ' . (string) $subsidiarie->ID->C->AD->attributes()->AD . ' ' . (string) $subsidiarie->ID->C->AD->attributes()->N;
                            $impresa['CAP'] = (string) $subsidiarie->ID->C->AD->attributes()->ZC;
                            $impresa['titolo'] = (string) $subsidiarie->RPs->RP->R->attributes()->RDES;
                            $imprese[] = $impresa;
                        }
                    }
                }
                foreach ($report->CRR->Ss->S->SI as $subsidiarie) {
                    if (is_object($subsidiarie->ID->P)) {
                        $esponente = array();
                        $esponente['nome'] = (string) $subsidiarie->ID->P->attributes()->N;
                        $esponente['cognome'] = (string) $subsidiarie->ID->P->attributes()->S;
                        $esponente['codFisc'] = (string) $subsidiarie->ID->P->attributes()->TC;
                        $esponente['dataNas'] = '';
                        if (is_object($subsidiarie->ID->P->BD) && is_object($subsidiarie->ID->P->BD->attributes())) {
                            $date = new \DateTime((string) $subsidiarie->ID->P->BD->attributes()->D);
                            if (is_object($date)) {
                                $esponente['dataNas'] = $date->format('Y-m-d');
                            }
                            $esponente['luogoNas'] = (string) $subsidiarie->ID->P->BD->attributes()->TD;
                        }
                        if (is_object($subsidiarie->ID->P->AD)) {
                            $esponente['prov'] = (string) $subsidiarie->ID->P->AD->attributes()->PC;
                            $esponente['comune'] = (string) $subsidiarie->ID->P->AD->attributes()->TD;
                            $esponente['indirizzo'] = (string) $subsidiarie->ID->P->AD->attributes()->TP . ' ' . (string) $subsidiarie->ID->P->AD->attributes()->AD . ' ' . (string) $subsidiarie->ID->P->AD->attributes()->N;
                            $esponente['CAP'] = (string) $subsidiarie->ID->P->AD->attributes()->ZC;
                        }
                        $esponente['titolo'] = 'SOCIO';
                        $esponenti[] = $esponente;
                    } else {
                        if (is_object($subsidiarie->ID->C)) {
                            $impresa = array();
                            $impresa['ragSoc'] = (string) $subsidiarie->ID->C->attributes()->ND;
                            $impresa['formaGiurid'] = '';
                            $impresa['partIVA'] = (string) $subsidiarie->ID->C->attributes()->TC;
                            $impresa['capitaleSociale'] = '';
                            $impresa['statoAttivita'] = '';
                            $impresa['provCCIAA'] = '';
                            $impresa['nCCIAA'] = '';
                            $impresa['prov'] = (string) $subsidiarie->ID->C->AD->attributes()->PC;
                            $impresa['comune'] = (string) $subsidiarie->ID->C->AD->attributes()->TD;
                            $impresa['indirizzo'] = (string) $subsidiarie->ID->C->AD->attributes()->TP . ' ' . (string) $subsidiarie->ID->C->AD->attributes()->AD . ' ' . (string) $subsidiarie->ID->C->AD->attributes()->N;
                            $impresa['CAP'] = (string) $subsidiarie->ID->C->AD->attributes()->ZC;
                            $impresa['titolo'] = 'SOCIO';
                            $imprese[] = $impresa;
                        }
                    }
                }
                restore_error_handler();
                if ($statOnly != '') {
                    array_walk($dati, create_function('&$item', '$item=str_replace("\\"","",$item);'));
                    if (isset($statHandler)) {
                        if (ftell($statHandler) == 0) {
                            fputcsv($statHandler, array_keys($dati));
                        }
                        fputcsv($statHandler, $dati);
                        fflush($statHandler);
                    }
                    $domXml = dom_import_simplexml($report);
                    $aXML = array('_id' => $dati['id_mov_contab']);
                    $this->xml2array($domXml, $aXML);
                    /*$xml = new \SimpleXMLElement('<root/>');
                    
                    
                                $t*his->array_to_xml($aXML,$xml);*/
                    if (true || is_array($aXML) && $totalCount++ < 10000.0) {
                        $bulk->update(array('_id' => $dati['id_mov_contab']), $aXML, array('multi' => false, 'upsert' => true));
                    }
                }
                if ($dati['partIVA'] == '' || $dati['partIVA'] == 0 || $statOnly != '') {
                    $richieste->next();
                    continue;
                }
                $company->setData(array());
                $company->loadFromId($dati['partIVA']);
                $cDati = $company->getData();
                if (is_array($cDati) && count($cDati) > 0) {
                    $company->setData(array_merge($cDati, array_filter($dati)));
                    $company->update();
                } else {
                    $company->setData($dati);
                    $company->insert();
                }
                foreach ($imprese as $impresa) {
                    $rCompany->setData(array());
                    $rCompany->loadFromId($impresa['partIVA']);
                    $cDati = $rCompany->getData();
                    if (is_array($cDati) && count($cDati) > 0) {
                        $rCompany->setData(array_merge($cDati, array_filter($impresa)));
                        $rCompany->update();
                    } else {
                        $rCompany->setData($impresa);
                        $rCompany->insert();
                    }
                    $company->addRelatedCompany($rCompany);
                }
                foreach ($esponenti as $esponente) {
                    if (strlen($esponente['codFisc']) == 16) {
                        $person->setData(array());
                        $person->loadFromId($esponente['codFisc']);
                        $cDati = $person->getData();
                        if (is_array($cDati) && count($cDati) > 0) {
                            $person->setData(array_merge($cDati, array_filter($esponente)));
                            $person->update();
                        } else {
                            $person->setData($esponente);
                            $person->insert();
                        }
                        $company->addRelatedExponent($person);
                    } else {
                        $rCompany->setData(array());
                        $esponente['partIVA'] = $esponente['codFisc'];
                        $rCompany->loadFromId($esponente['partIVA']);
                        $cDati = $rCompany->getData();
                        if (is_array($cDati) && count($cDati) > 0) {
                            $rCompany->setData(array_merge($cDati, array_filter($esponente)));
                            $rCompany->update();
                        } else {
                            $rCompany->setData($esponente);
                            $rCompany->insert();
                        }
                        $company->addRelatedCompany($rCompany);
                    }
                }
                $richieste->next();
            }
        }
        $this->db->query('ALTER TABLE company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE company_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        if (isset($statHandler)) {
            fclose($statHandler);
            if ($bulk->count() > 0) {
                $manager->executeBulkWrite('report_impresa.skimp', $bulk);
            }
        }
        echo PHP_EOL;
    }
Exemple #7
0
    public function import($statOnly = '')
    {
        $dateFilter = '`data_ora_rich` > CURDATE() - INTERVAL 2 MONTH';
        if ($statOnly != '') {
            $config = clone $this->db->config;
            $configDb = $this->db->config->database->toArray();
            $configDb['options']['buffer_results'] = false;
            $this->db = new \Zend\Db\Adapter\Adapter($configDb);
            $this->db->config = $config;
            $dateFilter = 'TRUE';
            if ($this->db->config->storeExpiryStatFile->Sksocieta != '') {
                $statHandler = fopen($this->db->config->storeExpiryStatFile->Sksocieta, 'w');
            }
            $manager = new \MongoDB\Driver\Manager("mongodb://localhost:27017");
            $bulk = new \MongoDB\Driver\BulkWrite();
        }
        $archiviRichieste = array(array('dir' => 'risposteBaseDirMass', 'sql' => '
SELECT aps_prod_backup.eps_richiesta_mass.id_richiesta,
aps_prod_backup.eps_richiesta_mass.id_mov_contab,
aps_prod_backup.eps_richiesta_mass.id_richiesta_cache,
aps_prod_backup.eps_richiesta_mass.stringa_richiesta,
aps_prod_backup.eps_richiesta_mass.data_ora_rich,
aps_prod_backup.eps_richiesta_mass.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab_mass.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab_mass.importo as importo ,
aps_prod_backup.eps_mov_contab_mass.id_mov_contab_gen as id_mov_contab_gen ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza
FROM aps_prod_backup.eps_richiesta_mass
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta_mass.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab_mass ON aps_prod_backup.eps_mov_contab_mass.id_mov_contab=aps_prod_backup.eps_richiesta_mass.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab_mass.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab_mass.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE
' . $dateFilter . ' AND
aps_prod.eps_operazione.cod_operazione = "sksocieta"
                    '), array('dir' => 'risposteBaseDir', 'sql' => '
SELECT aps_prod_backup.eps_richiesta.id_richiesta,
aps_prod_backup.eps_richiesta.id_mov_contab,
aps_prod_backup.eps_richiesta.id_richiesta_cache,
aps_prod_backup.eps_richiesta.stringa_richiesta,
aps_prod_backup.eps_richiesta.data_ora_rich,
aps_prod_backup.eps_richiesta.data_ora_evas,
aps_prod.eps_operazione.cod_operazione as cod_operazione ,
aps_prod_backup.eps_mov_contab.cod_causale as cod_causale ,
aps_prod_backup.eps_mov_contab.importo as importo ,
aps_prod_backup.eps_mov_contab.id_mov_contab_gen as id_mov_contab_gen ,
aps_prod.eps_prodotto.cod_prodotto as cod_prodotto ,
aps_prod.eps_cliente.cod_cliente as cod_cliente ,
aps_prod.eps_istanza.cod_istanza as cod_istanza

FROM aps_prod_backup.eps_richiesta
LEFT JOIN aps_prod.eps_operazione ON aps_prod.eps_operazione.id_operazione=aps_prod_backup.eps_richiesta.id_operazione
LEFT JOIN aps_prod_backup.eps_mov_contab ON aps_prod_backup.eps_mov_contab.id_mov_contab=aps_prod_backup.eps_richiesta.id_mov_contab
LEFT JOIN aps_prod.eps_prodotto ON aps_prod.eps_prodotto.id_prodotto =aps_prod_backup.eps_mov_contab.id_prodotto
LEFT JOIN aps_prod.eps_cliente ON aps_prod.eps_cliente.id_cliente=aps_prod_backup.eps_mov_contab.id_cliente
LEFT JOIN aps_prod.eps_istanza ON aps_prod.eps_istanza.id_istanza=aps_prod.eps_cliente.id_istanza
WHERE
' . $dateFilter . ' AND
aps_prod.eps_operazione.cod_operazione = "sksocieta"
                    '));
        $totalCount = 0;
        foreach ($archiviRichieste as $archivioRichieste) {
            $richieste = $this->db->query($archivioRichieste['sql'], \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
            $count = 0;
            $groupCount = 0;
            $rCompany = new \crm\Company($this->db);
            $company = new \crm\Company($this->db);
            $person = new \crm\Person($this->db);
            while (is_object($richiesta = $richieste->current())) {
                echo "\r" . $count++ . '/' . ($richieste->count() - 1) . str_repeat(' ', 5);
                $dati = array();
                $imprese = array();
                $esponenti = array();
                $sId = str_pad($richiesta->id_richiesta, 9, '0', STR_PAD_LEFT);
                $dM = 'M' . substr($sId, 0, 3);
                $dK = 'K' . substr($sId, 3, 3);
                $nomeFile = $this->db->config->{$archivioRichieste['dir']} . "/{$dM}/{$dK}/F{$sId}.xml";
                if (!is_file($nomeFile)) {
                    $richieste->next();
                    continue;
                }
                $dati['id_mov_contab'] = $richiesta->id_mov_contab;
                $dati['massiva'] = $archivioRichieste['dir'] == 'risposteBaseDir' ? 0 : 1;
                $dati['id_richiesta'] = $richiesta->id_richiesta;
                $dati['test_nome_file'] = "\"" . str_replace('"', '\\"', basename($nomeFile)) . "\"";
                $dati['errore'] = '';
                $dati['data_ora_rich'] = $richiesta->data_ora_rich;
                $dati['data_ora_evas'] = $richiesta->data_ora_evas;
                $dati['cod_operazione'] = $richiesta->cod_operazione;
                $dati['cod_prodotto'] = $richiesta->cod_prodotto;
                $dati['cod_cliente'] = $richiesta->cod_cliente;
                $dati['cod_istanza'] = $richiesta->cod_istanza;
                $dati['importo'] = $richiesta->importo;
                $dati['differita'] = 1;
                if ($richiesta->importo == 0 && $richiesta->id_richiesta_cache == 0) {
                    $richieste->next();
                    continue;
                }
                $sXML = new \SimpleXMLElement($nomeFile, 0, true);
                $dati['dataCerved'] = '';
                $dateObject = date_create_from_format('Y m d H:i:s', (string) $sXML->xpath('/s2xResponse/s2xStatus/s2xTime')[0]);
                if (is_object($dateObject)) {
                    $dati['dataCerved'] = date_format($dateObject, 'Y-m-d H:i:s');
                }
                $sobject = $sXML->xpath('/s2xResponse/s2xData/Shareholders/Identification');
                if (!is_array($sobject) || sizeof($sobject) < 1) {
                    $richieste->next();
                    continue;
                }
                $sobject = $sobject[0];
                $dati['partIVA'] = (string) $sobject->TaxCode;
                $dati['ragSoc'] = (string) $sobject->CompanyName;
                $dati['codFisc'] = (string) $sobject->TaxCode;
                $dati['provCCIAA'] = (string) $sobject->ProvinceCode;
                $dati['nCCIAA'] = (string) $sobject->REARegistrationNumber;
                $dati['formaGiurid'] = (string) $sobject->CompanyTitle;
                $dati['capitaleSociale'] = (string) $sobject->EquityCapital->Subscribed;
                $dati['dataREA'] = '';
                $dateObject = date_create_from_format('Ymd', (string) $sobject->REARegistrationDate);
                if (is_object($dateObject)) {
                    $dati['dataREA'] = date_format($dateObject, 'Y-m-d H:i:s');
                }
                if (property_exists($sobject, 'IdentificationAddedValue')) {
                    $dati['prov'] = (string) $sobject->IdentificationAddedValue->Address->ProvinceCode;
                    if (is_object($sobject->IdentificationAddedValue->Address->MunicipalityCode)) {
                        $dati['comune'] = (string) $sobject->IdentificationAddedValue->Address->MunicipalityCode->attributes()->Description;
                    }
                    $dati['indirizzo'] = (string) $sobject->IdentificationAddedValue->Address->ToponymCode . ' ' . (string) $sobject->IdentificationAddedValue->Address->StreetName . ' ' . (string) $sobject->IdentificationAddedValue->Address->StreetNo;
                    $dati['CAP'] = (string) $sobject->IdentificationAddedValue->Address->Postcode;
                    $dati['nazione'] = 'ITALIA';
                    $dati['sitoWeb'] = '';
                    $dati['email'] = '';
                    $dati['telefono'] = (string) $sobject->IdentificationAddedValue->Telephone->AreaCode . ' ' . (string) $sobject->IdentificationAddedValue->Telephone->TelephoneNumber;
                    $dati['statoAttivita'] = (string) $sobject->BusinessStatus->Code;
                    $dati['tipoSoc'] = '';
                    $dati['codISTAT'] = (string) $sobject->IdentificationAddedValue->Activity->CERVEDActivityCode;
                    $dati['desISTAT'] = '';
                    if (is_object($sobject->IdentificationAddedValue->Activity->CERVEDActivityCode) && $sobject->IdentificationAddedValue->Activity->CERVEDActivityCode->count() > 0) {
                        $dati['desISTAT'] = (string) $sobject->IdentificationAddedValue->Activity->CERVEDActivityCode->attributes()->Description;
                    }
                    $dati['fatturato'] = (string) $sobject->IdentificationAddedValue->DataBalanceSheet->Revenue;
                    $dati['annoFatturato'] = '';
                    if (is_object($sobject->IdentificationAddedValue->DataBalanceSheet->ClosingDate)) {
                        $dati['annoFatturato'] = (string) $sobject->IdentificationAddedValue->DataBalanceSheet->ClosingDate->attributes()->year;
                    }
                    $dati['gruppo'] = (string) $sobject->IdentificationAddedValue->MemberOfGroup->NameMemberOfGroup;
                    if ($dati['gruppo'] == '') {
                        $dati['gruppo'] = (string) $sobject->IdentificationAddedValue->MemberOfGroup3->NameMemberOfGroup3;
                    }
                    $dati['gruppoRuolo'] = '';
                    $dati['codNACE'] = '';
                    $dati['dataInizioAtt'] = '';
                    $dati['dataCostituzione'] = '';
                }
                $dati['fidoAffidabilta'] = '';
                $dati['fidoAffidabiltaNote'] = '';
                $dati['fidoAccordabile'] = '';
                $dati['numUffSedi'] = '';
                $dati['desAttivita'] = '';
                $dati['eventi'] = '';
                $dati['protesti'] = '';
                $dati['fallimenti'] = '';
                $dati['pregiudizievoli'] = '';
                $dati['cassaIntegrazione'] = '';
                $dati['nDipendenti'] = '';
                $dati['trendFatturato'] = '';
                $dati['utilePerdita'] = '';
                $dati['patrimonioNetto'] = '';
                $dati['margineOperativoLordo'] = '';
                $dati['risultatoOperativoLordo'] = '';
                $dati['indiceIndebitamento'] = '';
                $dati['ROI'] = '';
                $dati['ROE'] = '';
                $dati['indiceLiquidita'] = '';
                $dati['dataChiusuraBilancio'] = '';
                restore_error_handler();
                if ($statOnly != '') {
                    array_walk($dati, create_function('&$item', '$item=str_replace("\\"","",$item);'));
                    if (isset($statHandler)) {
                        if (ftell($statHandler) == 0) {
                            fputcsv($statHandler, array_keys($dati));
                        }
                        fputcsv($statHandler, $dati);
                        fflush($statHandler);
                    }
                    $domXml = dom_import_simplexml($sobject);
                    $aXML = array();
                    $this->xml2array($domXml, $aXML);
                    /*$xml = new \SimpleXMLElement('<root/>');
                    
                    
                                   $this->array_to_xml($aXML,$xml);*/
                    if (true || is_array($aXML) && $totalCount++ < 10000.0) {
                        $bulk->update(array('_id' => $dati['id_mov_contab']), $aXML, array('multi' => false, 'upsert' => true));
                    }
                    $richieste->next();
                    continue;
                }
                foreach ($sXML->xpath('/s2xResponse/s2xData/NotConsolidatedShareholdingsSection/SharesList/Shares') as $related) {
                    if (property_exists($related, 'Shareholdings_NotConsolidated')) {
                        $socio = array();
                        $socio['codFisc'] = (string) $related->Shareholdings_NotConsolidated->TaxCode;
                        if (strlen($socio['codFisc']) == 16) {
                            $socio['nome'] = (string) $related->Shareholdings_NotConsolidated->FirstName;
                            $socio['cognome'] = (string) $related->Shareholdings_NotConsolidated->LastName;
                            $socio['prov'] = (string) $related->Shareholdings_NotConsolidated->Domicile->ProvinceCode;
                            $socio['comune'] = (string) $related->Shareholdings_NotConsolidated->Domicile->Municipality;
                            $socio['indirizzo'] = (string) $related->Shareholdings_NotConsolidated->Domicile->Street . ' ' . (string) $related->Shareholdings_NotConsolidated->Domicile->StreetNo;
                            $socio['CAP'] = (string) $related->Shareholdings_NotConsolidated->Domicile->PostalCode;
                            $socio['dataNas'] = '';
                            if (is_object($related->Shareholdings_NotConsolidated->IndividualAddedValue->BirthInformation)) {
                                $dateObject = date_create_from_format('Ymd', (string) $related->Shareholdings_NotConsolidated->IndividualAddedValue->BirthInformation->BirthData);
                                if (is_object($dateObject)) {
                                    $socio['dataNas'] = date_format($dateObject, 'Y-m-d');
                                }
                            }
                            $esponenti[] = $socio;
                        } else {
                            if (strlen($socio['codFisc']) == 11) {
                                $socio['partIVA'] = $socio['codFisc'];
                                $socio['ragSoc'] = (string) $related->Shareholdings_NotConsolidated->CompanyName;
                                $socio['prov'] = (string) $related->Shareholdings_NotConsolidated->Domicile->ProvinceCode;
                                $socio['comune'] = (string) $related->Shareholdings_NotConsolidated->Domicile->Municipality;
                                $socio['indirizzo'] = (string) $related->Shareholdings_NotConsolidated->Domicile->Street . ' ' . (string) $related->Shareholdings_NotConsolidated->Domicile->StreetNo;
                                if (is_object($related->Shareholdings_NotConsolidated->PartnershipAddedValue)) {
                                    if (is_object($related->Shareholdings_NotConsolidated->PartnershipAddedValue->ReaKey)) {
                                        $socio['provCCIAA'] = (string) $related->Shareholdings_NotConsolidated->PartnershipAddedValue->ReaKey->REAProvinceCode;
                                        $socio['nCCIAA'] = (string) $related->Shareholdings_NotConsolidated->PartnershipAddedValue->ReaKey->REANo;
                                    }
                                    if (is_object($related->Shareholdings_NotConsolidated->PartnershipAddedValue->BusinessStatus)) {
                                        $socio['statoAttivita'] = (string) $related->Shareholdings_NotConsolidated->PartnershipAddedValue->BusinessStatus->Code;
                                    }
                                    $socio['gruppo'] = '';
                                    if (is_object($related->Shareholdings_NotConsolidated->PartnershipAddedValue->MemberOfGroup)) {
                                        $socio['gruppo'] = (string) $related->Shareholdings_NotConsolidated->PartnershipAddedValue->MemberOfGroup->NameMemberOfGroup;
                                    }
                                    if ($socio['gruppo'] == '' && is_object($related->Shareholdings_NotConsolidated->PartnershipAddedValue->MemberOfGroup3)) {
                                        $socio['gruppo'] = (string) $related->Shareholdings_NotConsolidated->PartnershipAddedValue->MemberOfGroup3->NameMemberOfGroup3;
                                    }
                                }
                                $imprese[] = $socio;
                            }
                        }
                    }
                    $company->setData(array());
                    $company->loadFromId($dati['partIVA']);
                    $cDati = $company->getData();
                    if (is_array($cDati) && count($cDati) > 0) {
                        $company->setData(array_merge($cDati, array_filter($dati)));
                        $company->update();
                    } else {
                        $company->setData($dati);
                        $company->insert();
                    }
                    foreach ($imprese as $impresa) {
                        $rCompany->setData(array());
                        $rCompany->loadFromId($impresa['partIVA']);
                        $cDati = $rCompany->getData();
                        if (is_array($cDati) && count($cDati) > 0) {
                            $rCompany->setData(array_merge($cDati, array_filter($impresa)));
                            $rCompany->update();
                        } else {
                            $rCompany->setData($impresa);
                            $rCompany->insert();
                        }
                        $company->addRelatedCompany($rCompany);
                    }
                    foreach ($esponenti as $esponente) {
                        if (strlen($esponente['codFisc']) == 16) {
                            $person->setData(array());
                            $person->loadFromId($esponente['codFisc']);
                            $cDati = $person->getData();
                            if (is_array($cDati) && count($cDati) > 0) {
                                $person->setData(array_merge($cDati, array_filter($esponente)));
                                $person->update();
                            } else {
                                $person->setData($esponente);
                                $person->insert();
                            }
                            $company->addRelatedExponent($person);
                        } else {
                            $rCompany->setData(array());
                            $esponente['partIVA'] = $esponente['codFisc'];
                            $rCompany->loadFromId($esponente['partIVA']);
                            $cDati = $rCompany->getData();
                            if (is_array($cDati) && count($cDati) > 0) {
                                $rCompany->setData(array_merge($cDati, array_filter($esponente)));
                                $rCompany->update();
                            } else {
                                $rCompany->setData($esponente);
                                $rCompany->insert();
                            }
                            $company->addRelatedCompany($rCompany);
                        }
                    }
                }
                $richieste->next();
            }
        }
        if (isset($statHandler)) {
            fclose($statHandler);
            if ($bulk->count() > 0) {
                $manager->executeBulkWrite('report_impresa.sksocieta', $bulk);
            }
        }
        echo PHP_EOL;
    }
Exemple #8
0
    public function import($statOnly = '')
    {
        $dateFilter = '`data_ora_rich` > CURDATE() - INTERVAL 2 MONTH';
        if ($statOnly != '') {
            $config = clone $this->db->config;
            $configDb = $this->db->config->database->toArray();
            $configDb['options']['buffer_results'] = false;
            $this->db = new \Zend\Db\Adapter\Adapter($configDb);
            $this->db->config = $config;
            $dateFilter = 'TRUE';
            if ($this->db->config->storeExpiryStatFile->Rep3P != '') {
                $statHandler = fopen($this->db->config->storeExpiryStatFile->Rep3P, 'w');
            }
            $manager = new \MongoDB\Driver\Manager("mongodb://*****:*****@year')[0];
            $dati['dataCerved'] .= '-';
            $dati['dataCerved'] .= str_pad((string) $sXML->xpath('/*/ns3:DeliveryAndSummaryDetails/DeliveredOn/@month')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataCerved'] .= '-';
            $dati['dataCerved'] .= str_pad((string) $sXML->xpath('/*/ns3:DeliveryAndSummaryDetails/DeliveredOn/@day')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataCerved'] .= ' ';
            $dati['dataCerved'] .= str_pad((string) $sXML->xpath('/*/ns3:DeliveryAndSummaryDetails/DeliveredOn/@hour24')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataCerved'] .= ':';
            $dati['dataCerved'] .= str_pad((string) $sXML->xpath('/*/ns3:DeliveryAndSummaryDetails/DeliveredOn/@minutes')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataCerved'] .= ':';
            $dati['dataCerved'] .= str_pad((string) $sXML->xpath('/*/ns3:DeliveryAndSummaryDetails/DeliveredOn/@seconds')[0], 2, '0', STR_PAD_LEFT);
            if (strlen($dati['dataCerved']) < 6) {
                $dati['dataCerved'] = '';
            }
            $dati['gruppo'] = (string) $sXML->xpath('/*/ns4:ItemInformation/MemberOfGroup')[0];
            $dati['gruppoRuolo'] = (string) $sXML->xpath('/*/ns4:ItemInformation/Role')[0];
            $dati['partIVA'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/VATRegistrationNo')[0];
            $dati['ragSoc'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/CompanyName')[0];
            $dati['codFisc'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/TaxCode')[0];
            $dati['provCCIAA'] = (string) $sXML->xpath('/*/ns4:ItemInformation/ReaCode/CoCProvinceCode')[0];
            $dati['nCCIAA'] = (string) $sXML->xpath('/*/ns4:ItemInformation/ReaCode/REANo')[0];
            $dati['prov'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/Address/Province/@Code')[0];
            $dati['comune'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/Address/Municipality')[0];
            $dati['indirizzo'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/Address/Street')[0];
            $dati['CAP'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/Address/PostCode')[0];
            $dati['nazione'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/Address/Country')[0];
            $dati['sitoWeb'] = (string) $sXML->xpath('/*/ns4:ItemInformation/WebSite')[0];
            $dati['email'] = (string) $sXML->xpath('/*/ns4:ItemInformation/Email')[0];
            $dati['telefono'] = (string) $sXML->xpath('/*/ns4:ItemInformation/Telephone')[0];
            $dati['statoAttivita'] = (string) $sXML->xpath('/*/ns4:ItemInformation/ActivityStatusDescription')[0];
            $dati['formaGiurid'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/CompanyForm')[0];
            $dati['tipoSoc'] = (string) $sXML->xpath('/*/ns4:ItemInformation/CompanyInformation/CompanyForm/@LegalFormType')[0];
            $dati['capitaleSociale'] = (string) $sXML->xpath('/*/ns4:ItemInformation/EquityCapital')[0];
            $dati['codISTAT'] = (string) $sXML->xpath('/*/ns4:ItemInformation/ISTATCode/@Code')[0];
            $dati['desISTAT'] = (string) $sXML->xpath('/*/ns4:ItemInformation/ISTATCode')[0];
            $dati['codNACE'] = (string) $sXML->xpath('/*/ns4:ItemInformation/NaceCode')[0];
            $dati['dataInizioAtt'] = (string) $sXML->xpath('/*/ns4:ItemInformation/ActivityStartDate/@year')[0];
            $dati['dataInizioAtt'] .= '-';
            $dati['dataInizioAtt'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/ActivityStartDate/@month')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataInizioAtt'] .= '-';
            $dati['dataInizioAtt'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/ActivityStartDate/@day')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataInizioAtt'] .= ' ';
            $dati['dataInizioAtt'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/ActivityStartDate/@hour24')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataInizioAtt'] .= ':';
            $dati['dataInizioAtt'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/ActivityStartDate/@minutes')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataInizioAtt'] .= ':';
            $dati['dataInizioAtt'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/ActivityStartDate/@seconds')[0], 2, '0', STR_PAD_LEFT);
            if (strlen($dati['dataInizioAtt']) < 6) {
                $dati['dataInizioAtt'] = '';
            }
            $dati['dataCostituzione'] = (string) $sXML->xpath('/*/ns4:ItemInformation/IncorporationDate/@year')[0];
            $dati['dataCostituzione'] .= '-';
            $dati['dataCostituzione'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/IncorporationDate/@month')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataCostituzione'] .= '-';
            $dati['dataCostituzione'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/IncorporationDate/@day')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataCostituzione'] .= ' ';
            $dati['dataCostituzione'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/IncorporationDate/@hour24')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataCostituzione'] .= ':';
            $dati['dataCostituzione'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/IncorporationDate/@minutes')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataCostituzione'] .= ':';
            $dati['dataCostituzione'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/IncorporationDate/@seconds')[0], 2, '0', STR_PAD_LEFT);
            if (strlen($dati['dataCostituzione']) < 6) {
                $dati['dataCostituzione'] = '';
            }
            $dati['dataREA'] = (string) $sXML->xpath('/*/ns4:ItemInformation/RegistrationDate/@year')[0];
            $dati['dataREA'] .= '-';
            $dati['dataREA'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/RegistrationDate/@month')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataREA'] .= '-';
            $dati['dataREA'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/RegistrationDate/@day')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataREA'] .= ' ';
            $dati['dataREA'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/RegistrationDate/@hour24')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataREA'] .= ':';
            $dati['dataREA'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/RegistrationDate/@minutes')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataREA'] .= ':';
            $dati['dataREA'] .= str_pad((string) $sXML->xpath('/*/ns4:ItemInformation/RegistrationDate/@seconds')[0], 2, '0', STR_PAD_LEFT);
            if (strlen($dati['dataREA']) < 6) {
                $dati['dataREA'] = '';
            }
            $codiceFido = (string) $sXML->xpath('/*/ns19_:AverageGrantableCredit/CreditLimit/Code')[0];
            if ($codiceFido == '') {
                $codiceFido = (string) $sXML->xpath('/*/ns19_:AverageGrantableCredit/BlockCode')[0];
            }
            $dati['fidoAffidabilta'] = '';
            if (key_exists($codiceFido, $aFido)) {
                $dati['fidoAffidabilta'] = $aFido[$codiceFido];
            }
            $codiceFido = (string) $sXML->xpath('/*/ns19_:AverageGrantableCredit/CreditLimit/Note')[0];
            $dati['fidoAffidabiltaNote'] = '';
            if (key_exists($codiceFido, $this->aFido)) {
                $dati['fidoAffidabiltaNote'] = $this->aFido[$codiceFido];
            }
            $dati['fidoAccordabile'] = (string) $sXML->xpath('/*/ns19_:AverageGrantableCredit/CreditLimit/Value')[0];
            $dati['numUffSedi'] = (string) $sXML->xpath('/*/ns4:ItemInformation/OfficesAndSubOrganizationsNumber')[0];
            $dati['desAttivita'] = (string) $sXML->xpath('/*/ns16:Activity/ActivityDescription')[0];
            $dati['eventi'] = count($sXML->xpath('/*/ns17:ExtraordinaryEvents/ns17:ExtraordinaryEventsList/EventItem'));
            $dati['protesti'] = count($sXML->xpath('/*/ns6:Protests/ns6:ProtestsBlock/ns6:SingleProtestBlock'));
            $dati['fallimenti'] = count($sXML->xpath('/*/ns7:Bankruptcy/ns7:BankruptcyBlock/ns7:SingleBankruptcyBlock'));
            $dati['pregiudizievoli'] = count($sXML->xpath('/*/ns8:AgreedWindingUpProcedures/ns8:ItemAgreeWindingUpProcedure/ns8:AgreedWindingUpProcedure'));
            $dati['cassaIntegrazione'] = count($sXML->xpath('/*/ns20:Layoffs/Decree'));
            $dati['nDipendenti'] = (string) $sXML->xpath('/*/ns9:CompanyEmployee/NumberOfEmployees')[0];
            $dati['fatturato'] = (string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ProfitAndLoss/Sales/Value')[0];
            $dati['annoFatturato'] = (string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ReferenceYear')[0];
            $dati['trendFatturato'] = (string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ProfitAndLoss/Sales/Change')[0];
            $dati['utilePerdita'] = (string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ProfitAndLoss/ProfitAndLoss/Value')[0];
            $dati['patrimonioNetto'] = (string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/Assets/TotalAssets/Value')[0];
            $dati['margineOperativoLordo'] = (string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ProfitAndLoss/GrossProfit/Value')[0];
            $dati['risultatoOperativoLordo'] = (string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ProfitAndLoss/OperatingProfit/Value')[0];
            $dati['indiceIndebitamento'] = (string) $sXML->xpath('/*/ns41:BalanceSheetAnalysis/BalanceSheetRatios/Voices/DebtRatio/Value')[0];
            $dati['ROI'] = (string) $sXML->xpath('/*/ns41:BalanceSheetAnalysis/BalanceSheetRatios/Voices/Roi/Value')[0];
            $dati['ROE'] = (string) $sXML->xpath('/*/ns41:BalanceSheetAnalysis/BalanceSheetRatios/Voices/Roe/Value')[0];
            $dati['indiceLiquidita'] = (string) $sXML->xpath('/*/ns41:BalanceSheetAnalysis/BalanceSheetRatios/Voices/CurrentAssetsRatio/Value')[0];
            $dati['fidoAccordabile201604'] = fidoRep3P201604($dati['fidoAccordabile'], $dati['tipoSoc'], $dati['fatturato']);
            $dati['dataChiusuraBilancio'] = (string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ClosingDate/@year')[0];
            $dati['dataChiusuraBilancio'] .= '-';
            $dati['dataChiusuraBilancio'] .= str_pad((string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ClosingDate/@month')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataChiusuraBilancio'] .= '-';
            $dati['dataChiusuraBilancio'] .= str_pad((string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ClosingDate/@day')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataChiusuraBilancio'] .= ' ';
            $dati['dataChiusuraBilancio'] .= str_pad((string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ClosingDate/@hour24')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataChiusuraBilancio'] .= ':';
            $dati['dataChiusuraBilancio'] .= str_pad((string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ClosingDate/@minutes')[0], 2, '0', STR_PAD_LEFT);
            $dati['dataChiusuraBilancio'] .= ':';
            $dati['dataChiusuraBilancio'] .= str_pad((string) $sXML->xpath('/*/ns40:BalanceSheet/BalanceSheetInfo/ClosingDate/@seconds')[0], 2, '0', STR_PAD_LEFT);
            if (strlen($dati['dataChiusuraBilancio']) < 6) {
                $dati['dataChiusuraBilancio'] = '';
            }
            foreach ($sXML->xpath('/*/ns5:Subsidiaries/ns5:Othersubsidiaries') as $subsidiarie) {
                $esponente = array();
                $esponente['nome'] = (string) $subsidiarie->xpath('OthersubsidiarieInfos')[0];
                $esponente['cognome'] = '';
                $esponente['codFisc'] = (string) $subsidiarie->xpath('TaxCode')[0];
                $esponente['dataNas'] = '';
                $esponente['luogoNas'] = '';
                $esponente['prov'] = '';
                $esponente['comune'] = '';
                $esponente['indirizzo'] = '';
                $esponente['CAP'] = '';
                $esponente['titolo'] = (string) $subsidiarie->xpath('MainPosition')[0];
                $esponenti[] = $esponente;
            }
            foreach ($sXML->xpath('/*/ns23:Shareholders/ShareholdersList/Shareholder/ShareholderItem') as $shareolder) {
                if (count($shareolder->xpath('ns22:Aziendaslim'))) {
                    $impresa = array();
                    $impresa['ragSoc'] = (string) $shareolder->xpath('ns22:Aziendaslim/CompanyInformation/CompanyName')[0];
                    $impresa['formaGiurid'] = (string) $shareolder->xpath('ns22:Aziendaslim/CompanyInformation/CompanyForm')[0];
                    $impresa['partIVA'] = (string) $shareolder->xpath('ns22:Aziendaslim/CompanyInformation/TaxCode')[0];
                    $impresa['capitaleSociale'] = (string) $shareolder->xpath('ns22:Aziendaslim/EquityCapital')[0];
                    $impresa['statoAttivita'] = (string) $shareolder->xpath('ns22:Aziendaslim/ActivityDescription')[0];
                    $impresa['provCCIAA'] = (string) $shareolder->xpath('ns22:Aziendaslim/ReaCode/CoCProvinceCode')[0];
                    $impresa['nCCIAA'] = (string) $shareolder->xpath('ns22:Aziendaslim/ReaCode/REANo')[0];
                    $impresa['prov'] = (string) $shareolder->xpath('ns22:Aziendaslim/CompanyInformation/Address/Province/@Code')[0];
                    $impresa['comune'] = (string) $shareolder->xpath('ns22:Aziendaslim/CompanyInformation/Address/Municipality')[0];
                    $impresa['indirizzo'] = (string) $shareolder->xpath('ns22:Aziendaslim/CompanyInformation/Address/Street')[0];
                    $impresa['CAP'] = (string) $shareolder->xpath('ns22:Aziendaslim/CompanyInformation/Address/PostCode')[0];
                    $impresa['titolo'] = 'SOCIO';
                    $imprese[] = $impresa;
                } else {
                    $esponente = array();
                    $esponente['nome'] = (string) $shareolder->xpath('IndividualInformation/FirstName')[0];
                    $esponente['cognome'] = (string) $shareolder->xpath('IndividualInformation/LastName')[0];
                    $esponente['codFisc'] = (string) $shareolder->xpath('IndividualInformation/TaxCode')[0];
                    $esponente['dataNas'] = '';
                    $esponente['luogoNas'] = '';
                    $esponente['prov'] = '';
                    $esponente['comune'] = '';
                    $esponente['indirizzo'] = '';
                    $esponente['CAP'] = '';
                    $esponente['titolo'] = 'SOCIO';
                    $esponenti[] = $esponente;
                }
            }
            foreach ($sXML->xpath('/*/ns24:Holdings/ControllatedCompany') as $controlledCompany) {
                $impresa = array();
                $impresa['ragSoc'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/CompanyName')[0];
                $impresa['formaGiurid'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/CompanyForm')[0];
                $impresa['partIVA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/TaxCode')[0];
                $impresa['capitaleSociale'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/EquityCapital')[0];
                $impresa['statoAttivita'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ActivityDescription')[0];
                $impresa['provCCIAA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ReaCode/CoCProvinceCode')[0];
                $impresa['nCCIAA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ReaCode/REANo')[0];
                $impresa['prov'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Province/@Code')[0];
                $impresa['comune'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Municipality')[0];
                $impresa['indirizzo'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Street')[0];
                $impresa['CAP'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/PostCode')[0];
                $impresa['titolo'] = 'CONTROLLATA';
                $imprese[] = $impresa;
            }
            foreach ($sXML->xpath('/*/ns24:Holdings/LinkedCompany') as $controlledCompany) {
                $impresa = array();
                $impresa['ragSoc'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/CompanyName')[0];
                $impresa['formaGiurid'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/CompanyForm')[0];
                $impresa['partIVA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/TaxCode')[0];
                $impresa['capitaleSociale'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/EquityCapital')[0];
                $impresa['statoAttivita'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ActivityDescription')[0];
                $impresa['provCCIAA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ReaCode/CoCProvinceCode')[0];
                $impresa['nCCIAA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ReaCode/REANo')[0];
                $impresa['prov'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Province/@Code')[0];
                $impresa['comune'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Municipality')[0];
                $impresa['indirizzo'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Street')[0];
                $impresa['CAP'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/PostCode')[0];
                $impresa['titolo'] = 'COLLEGATA';
                $imprese[] = $impresa;
            }
            foreach ($sXML->xpath('/*/ns25:OfficialDirectors/Director') as $director) {
                $esponente = array();
                $esponente['nome'] = (string) $director->xpath('Individual/FirstName')[0];
                $esponente['cognome'] = (string) $director->xpath('Individual/LastName')[0];
                $esponente['codFisc'] = (string) $director->xpath('Individual/TaxCode')[0];
                $esponente['dataNas'] = substr((string) $director->xpath('Individual/BirthDate')[0], 0, 10);
                $esponente['luogoNas'] = (string) $director->xpath('Individual/BirthPlace')[0];
                $esponente['prov'] = (string) $director->xpath('Individual/ResidenceAddress/Province/@Code')[0];
                $esponente['comune'] = (string) $director->xpath('Individual/ResidenceAddress/Municipality')[0];
                $esponente['indirizzo'] = (string) $director->xpath('Individual/ResidenceAddress/Street')[0];
                $esponente['CAP'] = (string) $director->xpath('Individual/ResidenceAddress/PostCode')[0];
                $esponente['titolo'] = (string) $director->xpath('IndividualPosition/Type')[0];
                $esponenti[] = $esponente;
            }
            foreach ($sXML->xpath('/*/ns26:PreviousOfficialDirectors/Director') as $director) {
                $esponente = array();
                $esponente['nome'] = (string) $director->xpath('Individual/FirstName')[0];
                $esponente['cognome'] = (string) $director->xpath('Individual/LastName')[0];
                $esponente['codFisc'] = (string) $director->xpath('Individual/TaxCode')[0];
                $esponente['dataNas'] = substr((string) $director->xpath('Individual/BirthDate')[0], 0, 10);
                $esponente['luogoNas'] = (string) $director->xpath('Individual/BirthPlace')[0];
                $esponente['prov'] = (string) $director->xpath('Individual/ResidenceAddress/Province/@Code')[0];
                $esponente['comune'] = (string) $director->xpath('Individual/ResidenceAddress/Municipality')[0];
                $esponente['indirizzo'] = (string) $director->xpath('Individual/ResidenceAddress/Street')[0];
                $esponente['CAP'] = (string) $director->xpath('Individual/ResidenceAddress/PostCode')[0];
                $esponente['titolo'] = 'PRECEDENTE ' . (string) $director->xpath('IndividualPosition/Type')[0];
                $esponenti[] = $esponente;
            }
            foreach ($sXML->xpath('/*/ns27:PositionCompany/ns27:PositionRelatedCompany/Director') as $director) {
                $esponente = array();
                $esponente['nome'] = (string) $director->xpath('Individual/FirstName')[0];
                $esponente['cognome'] = (string) $director->xpath('Individual/LastName')[0];
                $esponente['codFisc'] = (string) $director->xpath('Individual/TaxCode')[0];
                $esponente['dataNas'] = substr((string) $director->xpath('Individual/BirthDate')[0], 0, 10);
                $esponente['luogoNas'] = (string) $director->xpath('Individual/BirthPlace')[0];
                $esponente['prov'] = (string) $director->xpath('Individual/ResidenceAddress/Province/@Code')[0];
                $esponente['comune'] = (string) $director->xpath('Individual/ResidenceAddress/Municipality')[0];
                $esponente['indirizzo'] = (string) $director->xpath('Individual/ResidenceAddress/Street')[0];
                $esponente['CAP'] = (string) $director->xpath('Individual/ResidenceAddress/PostCode')[0];
                $esponente['titolo'] = (string) $director->xpath('Position/Type')[0];
                $esponenti[] = $esponente;
            }
            foreach ($sXML->xpath('/*/ns27:PositionCompany/ns27:PositionRelatedCompany/RelatedCompany') as $controlledCompany) {
                $impresa = array();
                $impresa['ragSoc'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/CompanyName')[0];
                $impresa['formaGiurid'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/CompanyForm')[0];
                $impresa['partIVA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/TaxCode')[0];
                $impresa['capitaleSociale'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/EquityCapital')[0];
                $impresa['statoAttivita'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ActivityDescription')[0];
                $impresa['provCCIAA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ReaCode/CoCProvinceCode')[0];
                $impresa['nCCIAA'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/ReaCode/REANo')[0];
                $impresa['prov'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Province/@Code')[0];
                $impresa['comune'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Municipality')[0];
                $impresa['indirizzo'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/Street')[0];
                $impresa['CAP'] = (string) $controlledCompany->xpath('ns22:Aziendaslim/CompanyInformation/Address/PostCode')[0];
                $impresa['titolo'] = 'CORRELATA';
                $imprese[] = $impresa;
            }
            restore_error_handler();
            if ($statOnly != '') {
                array_walk($dati, create_function('&$item', '$item=str_replace("\\"","",$item);'));
                if (isset($statHandler)) {
                    if (ftell($statHandler) == 0) {
                        fputcsv($statHandler, array_keys($dati));
                    }
                    fputcsv($statHandler, $dati);
                    fflush($statHandler);
                }
                $domXml = dom_import_simplexml($sXML);
                $aXML = array('_id' => $dati['id_mov_contab']);
                $this->xml2array($domXml, $aXML);
                /*$xml = new \SimpleXMLElement('<root/>');
                
                
                         $t*his->array_to_xml($aXML,$xml);*/
                if (true || is_array($aXML) && $totalCount++ < 10000.0) {
                    $bulk->update(array('_id' => $dati['id_mov_contab']), $aXML, array('multi' => false, 'upsert' => true));
                }
            }
            if ($dati['partIVA'] == '' || $dati['partIVA'] == 0 || $statOnly != '') {
                $richieste->next();
                continue;
            }
            $company->setData(array());
            $company->loadFromId($dati['partIVA']);
            $cDati = $company->getData();
            if (is_array($cDati) && count($cDati) > 0) {
                $company->setData(array_merge($cDati, array_filter($dati)));
                $company->update();
            } else {
                $company->setData($dati);
                $company->insert();
            }
            foreach ($imprese as $impresa) {
                $rCompany->setData(array());
                $rCompany->loadFromId($impresa['partIVA']);
                $cDati = $rCompany->getData();
                if (is_array($cDati) && count($cDati) > 0) {
                    $rCompany->setData(array_merge($cDati, array_filter($impresa)));
                    $rCompany->update();
                } else {
                    $rCompany->setData($impresa);
                    $rCompany->insert();
                }
                $company->addRelatedCompany($rCompany);
            }
            foreach ($esponenti as $esponente) {
                if (strlen($esponente['codFisc']) == 16) {
                    $person->setData(array());
                    $person->loadFromId($esponente['codFisc']);
                    $cDati = $person->getData();
                    if (is_array($cDati) && count($cDati) > 0) {
                        $person->setData(array_merge($cDati, array_filter($esponente)));
                        $person->update();
                    } else {
                        $person->setData($esponente);
                        $person->insert();
                    }
                    $company->addRelatedExponent($person);
                } else {
                    $rCompany->setData(array());
                    $esponente['partIVA'] = $esponente['codFisc'];
                    $rCompany->loadFromId($esponente['partIVA']);
                    $cDati = $rCompany->getData();
                    if (is_array($cDati) && count($cDati) > 0) {
                        $rCompany->setData(array_merge($cDati, array_filter($esponente)));
                        $rCompany->update();
                    } else {
                        $rCompany->setData($esponente);
                        $rCompany->insert();
                    }
                    $company->addRelatedCompany($rCompany);
                }
            }
            $richieste->next();
        }
        $this->db->query('ALTER TABLE company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE company_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        if (isset($statHandler)) {
            fclose($statHandler);
            if ($bulk->count() > 0) {
                $manager->executeBulkWrite('report_impresa.rep3p', $bulk);
            }
        }
        echo PHP_EOL;
    }
Exemple #9
0
    public function import($statOnly = '')
    {
        $dateFilter = '`data_ora_rich` > CURDATE() - INTERVAL 2 MONTH';
        if ($statOnly != '') {
            $config = clone $this->db->config;
            $configDb = $this->db->config->database->toArray();
            $configDb['options']['buffer_results'] = false;
            $this->db = new \Zend\Db\Adapter\Adapter($configDb);
            $this->db->config = $config;
            $dateFilter = 'TRUE';
            if ($this->db->config->storeExpiryStatFile->AnaimpVis != '') {
                $statHandler = fopen($this->db->config->storeExpiryStatFile->AnaimpVis, 'w');
            }
            $manager = new \MongoDB\Driver\Manager("mongodb://*****:*****@Description');
                if (sizeof($activity) > 1) {
                    $dati['desISTAT'] = (string) $activity[0];
                }
                $dati['codNACE'] = '';
                $dati['dataInizioAtt'] = '';
                $dateObject = date_create_from_format('Ymd', (string) $companyData->RegisteredHeadOfficeIdentification->CompanyRegistryRegistrationDate);
                if (is_object($dateObject)) {
                    $dati['dataInizioAtt'] = date_format($dateObject, 'Y-m-d H:i:s');
                }
                $dati['dataCostituzione'] = '';
                $dati['dataREA'] = '';
                $dateObject = date_create_from_format('Ymd', (string) $companyData->RegisteredHeadOfficeIdentification->REARegistrationDate);
                if (is_object($dateObject)) {
                    $dati['dataREA'] = date_format($dateObject, 'Y-m-d H:i:s');
                }
                $dati['fidoAffidabilta'] = '';
                $dati['fidoAffidabiltaNote'] = '';
                $dati['fidoAccordabile'] = '';
                $dati['numUffSedi'] = '';
                $sedi = $sXML->xpath('/s2xResponse/s2xData/BranchList');
                if (is_array($sedi) && sizeof($sedi) > 0) {
                    $dati['numUffSedi'] = sizeof($sedi[0]);
                }
                $dati['desAttivita'] = '';
                $desAttivita = $sXML->xpath('/s2xResponse/s2xData/CompanyIdentification/CompanyPurpose');
                if (sizeof($desAttivita) > 0) {
                    $dati['desAttivita'] = strip_tags($desAttivita[0]->asXML());
                }
                $dati['eventi'] = '';
                $dati['protesti'] = '';
                $dati['fallimenti'] = '';
                $dati['pregiudizievoli'] = '';
                $dati['cassaIntegrazione'] = '';
                $dati['nDipendenti'] = '';
                $nDipendenti = $sXML->xpath('/s2xResponse/s2xData/CERVEDAddedValue/Employees/Number');
                if (is_array($nDipendenti) && sizeof($nDipendenti) > 0) {
                    $dati['nDipendenti'] = (string) $nDipendenti[0];
                }
                $dati['fatturato'] = '';
                $fatturato = $sXML->xpath('/s2xResponse/s2xData/CERVEDAddedValue/Revenue/Value');
                if (is_array($nDipendenti) && sizeof($nDipendenti) > 0) {
                    $dati['fatturato'] = (string) $fatturato[0];
                }
                $annofatturato = $sXML->xpath('/s2xResponse/s2xData/CERVEDAddedValue/Revenue/FinancialStatementDate/@year');
                if (is_array($annofatturato) && sizeof($annofatturato) > 0) {
                    $dati['annoFatturato'] = (string) $annofatturato[0];
                }
                $dati['trendFatturato'] = '';
                $dati['utilePerdita'] = '';
                $dati['patrimonioNetto'] = '';
                $dati['margineOperativoLordo'] = '';
                $dati['risultatoOperativoLordo'] = '';
                $dati['indiceIndebitamento'] = '';
                $dati['ROI'] = '';
                $dati['ROE'] = '';
                $dati['indiceLiquidita'] = '';
                $dati['dataChiusuraBilancio'] = '';
                foreach ($sXML->xpath('/s2xResponse/s2xData/Representatives/IndividualList/Individual') as $shareolder) {
                    if (property_exists($shareolder, 'PersonalData')) {
                        $esponente = array();
                        $esponente['nome'] = (string) $shareolder->PersonalData->FirstName;
                        $esponente['cognome'] = (string) $shareolder->PersonalData->LastName;
                        $esponente['codFisc'] = (string) $shareolder->PersonalData->TaxCode;
                        $esponente['dataNas'] = '';
                        $dateObject = date_create_from_format('Ymd', (string) $shareolder->PersonalData->Birth->BirthDate);
                        if (is_object($dateObject)) {
                            $esponente['dataNas'] = (string) date_format($dateObject, 'Y-m-d');
                        }
                        $esponente['luogoNas'] = (string) $shareolder->PersonalData->Birth->City;
                        $esponente['prov'] = (string) $shareolder->PersonalData->TaxDomicile->ProvinceCode;
                        $esponente['comune'] = (string) $shareolder->PersonalData->TaxDomicile->City;
                        $esponente['indirizzo'] = (string) $shareolder->PersonalData->TaxDomicile->ToponymCode . ' ' . (string) $shareolder->PersonalData->TaxDomicile->StreetName . ' ' . (string) $shareolder->PersonalData->TaxDomicile->StreetNo;
                        $esponente['CAP'] = (string) $shareolder->PersonalData->TaxDomicile->Postcode;
                        $esponente['titolo'] = 'ESPONENTE';
                        $esponenti[] = $esponente;
                    }
                }
                foreach ($sXML->xpath('/s2xResponse/s2xData/Representatives/EquivalentCompanyList/EquivalentCompany') as $shareolder) {
                    if (property_exists($shareolder, 'CompanyIdentification')) {
                        $impresa = array();
                        $impresa['ragSoc'] = (string) $shareolder->CompanyIdentification->CompanyName;
                        $impresa['formaGiurid'] = '';
                        $impresa['partIVA'] = (string) $shareolder->CompanyIdentification->TaxCode;
                        $impresa['capitaleSociale'] = '';
                        $impresa['statoAttivita'] = '';
                        $impresa['provCCIAA'] = (string) $shareolder->CompanyIdentification->REAProvinceCode;
                        $impresa['nCCIAA'] = (string) $shareolder->CompanyIdentification->REANo;
                        $impresa['prov'] = (string) $shareolder->CompanyIdentification->Address->ProvinceCode;
                        $impresa['comune'] = (string) $shareolder->CompanyIdentification->Address->City;
                        $impresa['indirizzo'] = (string) $shareolder->CompanyIdentification->Address->ToponymCode . ' ' . (string) $shareolder->CompanyIdentification->Address->StreetName . ' ' . (string) $shareolder->CompanyIdentification->Address->StreetNo;
                        $impresa['CAP'] = (string) $shareolder->CompanyIdentification->Address->PostCode;
                        $impresa['titolo'] = 'CORRELATA';
                        $imprese[] = $impresa;
                    }
                }
                restore_error_handler();
                if ($statOnly != '') {
                    array_walk($dati, create_function('&$item', '$item=str_replace("\\"","",$item);'));
                    if (isset($statHandler)) {
                        if (ftell($statHandler) == 0) {
                            fputcsv($statHandler, array_keys($dati));
                        }
                        fputcsv($statHandler, $dati);
                        fflush($statHandler);
                    }
                    $domXml = dom_import_simplexml($sXML);
                    $aXML = array('_id' => $dati['id_mov_contab']);
                    $this->xml2array($domXml, $aXML);
                    /*$xml = new \SimpleXMLElement('<root/>');
                    
                    
                                   $t*his->array_to_xml($aXML,$xml);*/
                    if (true || is_array($aXML) && $totalCount++ < 10000.0) {
                        $bulk->update(array('_id' => $dati['id_mov_contab']), $aXML, array('multi' => false, 'upsert' => true));
                    }
                }
                if ($dati['partIVA'] == '' || $dati['partIVA'] == 0 || $statOnly != '') {
                    $richieste->next();
                    continue;
                }
                $company->setData(array());
                $company->loadFromId($dati['partIVA']);
                $cDati = $company->getData();
                if (is_array($cDati) && count($cDati) > 0) {
                    $company->setData(array_merge($cDati, array_filter($dati)));
                    $company->update();
                } else {
                    $company->setData($dati);
                    $company->insert();
                }
                foreach ($imprese as $impresa) {
                    $rCompany->setData(array());
                    $rCompany->loadFromId($impresa['partIVA']);
                    $cDati = $rCompany->getData();
                    if (is_array($cDati) && count($cDati) > 0) {
                        $rCompany->setData(array_merge($cDati, array_filter($impresa)));
                        $rCompany->update();
                    } else {
                        $rCompany->setData($impresa);
                        $rCompany->insert();
                    }
                    $company->addRelatedCompany($rCompany);
                }
                foreach ($esponenti as $esponente) {
                    if (strlen($esponente['codFisc']) == 16) {
                        $person->setData(array());
                        $person->loadFromId($esponente['codFisc']);
                        $cDati = $person->getData();
                        if (is_array($cDati) && count($cDati) > 0) {
                            $person->setData(array_merge($cDati, array_filter($esponente)));
                            $person->update();
                        } else {
                            $person->setData($esponente);
                            $person->insert();
                        }
                        $company->addRelatedExponent($person);
                    } else {
                        $rCompany->setData(array());
                        $esponente['partIVA'] = $esponente['codFisc'];
                        $rCompany->loadFromId($esponente['partIVA']);
                        $cDati = $rCompany->getData();
                        if (is_array($cDati) && count($cDati) > 0) {
                            $rCompany->setData(array_merge($cDati, array_filter($esponente)));
                            $rCompany->update();
                        } else {
                            $rCompany->setData($esponente);
                            $rCompany->insert();
                        }
                        $company->addRelatedCompany($rCompany);
                    }
                }
                $richieste->next();
            }
        }
        $this->db->query('ALTER TABLE company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE company_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        $this->db->query('ALTER TABLE person_to_company ENABLE KEYS', \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
        if (isset($statHandler)) {
            fclose($statHandler);
            if ($bulk->count() > 0) {
                $manager->executeBulkWrite('report_impresa.anaimpvis', $bulk);
            }
        }
        echo PHP_EOL;
    }