예제 #1
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->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;
    }