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->Catasto != '') { $statHandler = fopen($this->db->config->storeExpiryStatFile->Catasto, 'w'); } } $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 = "omicf" OR aps_prod.eps_operazione.cod_operazione = "omi" OR aps_prod.eps_operazione.cod_operazione = "sintecf" OR aps_prod.eps_operazione.cod_operazione = "sintesi" OR aps_prod.eps_operazione.cod_operazione = "sintesi3" OR aps_prod.eps_operazione.cod_operazione = "visucf" OR aps_prod.eps_operazione.cod_operazione = "visura" OR aps_prod.eps_operazione.cod_operazione = "visura3" ) '), 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 = "sintecf" OR aps_prod.eps_operazione.cod_operazione = "omicf" OR aps_prod.eps_operazione.cod_operazione = "sintesi" OR aps_prod.eps_operazione.cod_operazione = "omi" OR aps_prod.eps_operazione.cod_operazione = "sintecf" OR aps_prod.eps_operazione.cod_operazione = "sintecf" OR aps_prod.eps_operazione.cod_operazione = "sintesi" OR aps_prod.eps_operazione.cod_operazione = "sintesi" OR aps_prod.eps_operazione.cod_operazione = "sintesi3" OR aps_prod.eps_operazione.cod_operazione = "sintesi3" OR aps_prod.eps_operazione.cod_operazione = "sintecf" OR aps_prod.eps_operazione.cod_operazione = "visucf" OR aps_prod.eps_operazione.cod_operazione = "sintesi" OR aps_prod.eps_operazione.cod_operazione = "visura" OR aps_prod.eps_operazione.cod_operazione = "sintesi3" OR aps_prod.eps_operazione.cod_operazione = "visura3" ) ')); foreach ($archiviRichieste as $archivioRichieste) { $richieste = $this->db->query($archivioRichieste['sql'], \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE); $count = 0; $rCompany = new \crm\Company($this->db); $company = new \crm\Company($this->db); $person = new \crm\Person($this->db); $rPerson = 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->{$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; $dati['stornata'] = 0; if ($richiesta->importo == 0 && $richiesta->id_richiesta_cache == 0) { $dati['stornata'] = 1; } set_error_handler(create_function('', '')); $filecontent = file_get_contents($nomeFile); $filecontent = iconv('ISO-8859-1', 'UTF-8//IGNORE', $filecontent); libxml_use_internal_errors(true); try { $sXML = new \SimpleXMLElement($filecontent); } catch (Exception $e) { var_dump(libxml_get_errors()); var_dump(file_get_contents($nomeFile)); } $dati['dataADTI'] = (string) $sXML->xpath('/ADTIReport/time/data/anno')[0]; $dati['dataADTI'] .= '-'; $dati['dataADTI'] .= str_pad((string) $sXML->xpath('/ADTIReport/time/data/mese')[0], 2, '0', STR_PAD_LEFT); $dati['dataADTI'] .= '-'; $dati['dataADTI'] .= str_pad((string) $sXML->xpath('/ADTIReport/time/data/giorno')[0], 2, '0', STR_PAD_LEFT); $dati['dataADTI'] .= ' '; $dati['dataADTI'] .= str_pad((string) $sXML->xpath('/ADTIReport/time/ora/ore')[0], 2, '0', STR_PAD_LEFT); $dati['dataADTI'] .= ':'; $dati['dataADTI'] .= str_pad((string) $sXML->xpath('/ADTIReport/time/ora/minuti')[0], 2, '0', STR_PAD_LEFT); $dati['dataADTI'] .= ':'; $dati['dataADTI'] .= str_pad((string) $sXML->xpath('/ADTIReport/time/ora/secondi')[0], 2, '0', STR_PAD_LEFT); if (strlen($dati['dataADTI']) < 6) { $dati['dataADTI'] = ''; } 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); } } $soggetto = $sXML->xpath('/ADTIReport/visuraCatastale/elencoInfoCatasto/infoCatasto/soggetto'); if (sizeof($soggetto) < 1 || $statOnly != '') { $richieste->next(); continue; } $soggetto = $soggetto[0]; $dati['codFisc'] = (string) $soggetto->codiceFiscale; if (strlen($dati['codFisc']) == 16) { preg_match("/^(\\w+)/", $soggetto->denominazione, $matches); $cognome = $matches[1]; $nome = trim(str_replace($cognome, '', $soggetto->denominazione)); $dati['nome'] = $nome; $dati['cognome'] = $cognome; $person->setData(array()); $person->loadFromId($dati['codFisc']); $cDati = $person->getData(); if (is_array($cDati) && count($cDati) > 0) { $person->setData(array_merge($cDati, array_filter($dati))); $person->update(); } else { $person->setData($dati); $person->insert(); } } else { if ($dati['codFisc'] != '') { $dati['partIVA'] = $dati['codFisc']; $dati['ragSoc'] = (string) $soggetto->denominazione; $company->setData(array()); $company->loadFromId($dati['codFisc']); $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(); } } } $correlati = $sXML->xpath('/ADTIReport/visuraCatastale/elencoInfoCatasto/infoCatasto/elencoUnitaImmobiliari/unitaImmobiliari/elencoIntestatari/intestatari/soggetto'); if (!is_array($correlati)) { $richieste->next(); continue; } foreach ($correlati as $correlato) { $rDati = array(); $rDati['codFisc'] = (string) $correlato->codiceFiscale; if (strlen($rDati['codFisc']) == 16) { $rDati['nome'] = (string) $correlato->nominativo->nome; $rDati['cognome'] = (string) $correlato->nominativo->cognome; $rDati['dataNas'] = ''; if (is_object($correlato->datiNascita->data) && !is_null($correlato->datiNascita->data->anno)) { $dateObject = date_date_set(new \DateTime(), (string) $correlato->datiNascita->data->anno, (string) $correlato->datiNascita->data->mese, (string) $correlato->datiNascita->data->giorno); if (is_object($dateObject)) { $rDati['dataNas'] = (string) date_format($dateObject, 'Y-m-d'); } } $rDati['luogoNas'] = ''; if (is_object($correlato->datiNascita->comune) && !is_null($correlato->datiNascita->comune->descrComune)) { $rDati['luogoNas'] = trim(preg_replace('/\\(.*\\)/', '', (string) $correlato->datiNascita->comune->descrComune)); } $rPerson->setData(array()); $rPerson->loadFromId($rDati['codFisc']); $cDati = $rPerson->getData(); if (is_array($cDati) && count($cDati) > 0) { $rPerson->setData(array_merge($cDati, array_filter($rDati))); $rPerson->update(); } else { $rPerson->setData($rDati); $rPerson->insert(); } if ($dati['codFisc'] == $rDati['codFisc']) { continue; } if (strlen($dati['codFisc']) == 16) { $person->addRelatedPerson($rPerson); } else { if ($dati['codFisc'] != '') { $company->addRelatedExponent($rPerson); } } } else { if ($rDati['codFisc'] != '') { $rDati['partIVA'] = $rDati['codFisc']; $rDati['ragSoc'] = (string) $correlato->denominazione; $rCompany->setData(array()); $rCompany->loadFromId($rDati['partIVA']); $cDati = $rCompany->getData(); if (is_array($cDati) && count($cDati) > 0) { $rCompany->setData(array_merge($cDati, array_filter($rDati))); $rCompany->update(); } else { $rCompany->setData($rDati); $rCompany->insert(); } if ($dati['codFisc'] == $rDati['codFisc']) { continue; } if (strlen($dati['codFisc']) == 16) { $rCompany->addRelatedExponent($person); } else { if ($dati['codFisc'] != '') { $rCompany->addRelatedCompany($company); } } } } } $richieste->next(); } } if (isset($statHandler)) { fclose($statHandler); } echo PHP_EOL; }