From 9e199d15d940d8a357b4d64720ee00dfe157c3d7 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Tue, 4 Aug 2020 09:44:37 +0200 Subject: [PATCH] Ottimizzazioni per la sincronizzazione con l'applicazione --- config/namespaces.php | 2 +- modules/interventi/actions.php | 3 ++- src/API/App/v1/Clienti.php | 42 +++++++++++++++++++++++++-------- src/API/App/v1/Impostazioni.php | 23 +++++++++++++++++- src/API/App/v1/Interventi.php | 34 ++++++++++++++++++-------- update/2_4_17.sql | 14 ++++++++--- 6 files changed, 92 insertions(+), 26 deletions(-) diff --git a/config/namespaces.php b/config/namespaces.php index 1a10bacbd..d12c34cac 100755 --- a/config/namespaces.php +++ b/config/namespaces.php @@ -31,7 +31,7 @@ return [ 'modules/tipi_intervento' => 'Modules\TipiIntervento', 'modules/categorie_documenti' => 'Modules\CategorieDocumentali', 'modules/listini' => 'Modules\Listini', - 'modules/my_impianti' => 'Modules\Impianti', + 'modules/impianti' => 'Modules\Impianti', 'modules/impostazioni' => 'Modules\Impostazioni', 'plugins/exportFE' => 'Plugins\ExportFE', 'plugins/importFE' => 'Plugins\ImportFE', diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index 61eeab661..685e565e6 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -405,7 +405,8 @@ switch (post('op')) { flash()->info(tr('Firma salvata correttamente!')); flash()->info(tr('Attività completata!')); - $stato = $dbo->selectOne('in_statiintervento', '*', ['codice' => 'OK']); + $id_stato = setting("Stato dell'attività dopo la firma"); + $stato = $dbo->selectOne('in_statiintervento', '*', ['idstatointervento' => $id_stato]); // Notifica chiusura intervento if (!empty($stato['notifica']) && !empty($stato['destinatari'])) { $template = Template::find($stato['id_email']); diff --git a/src/API/App/v1/Clienti.php b/src/API/App/v1/Clienti.php index 904712652..209d65e70 100644 --- a/src/API/App/v1/Clienti.php +++ b/src/API/App/v1/Clienti.php @@ -3,8 +3,7 @@ namespace API\App\v1; use API\App\AppResource; -use Illuminate\Database\Eloquent\Builder; -use Modules\Anagrafiche\Anagrafica; +use Auth; class Clienti extends AppResource { @@ -15,20 +14,43 @@ class Clienti extends AppResource public function getModifiedRecords($last_sync_at) { - $statement = Anagrafica::select('idanagrafica') - ->whereHas('tipi', function (Builder $query) { - $query->where('descrizione', '=', 'Cliente'); - }); + $query = "SELECT an_anagrafiche.idanagrafica AS id FROM an_anagrafiche + INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche_anagrafiche.idanagrafica = an_anagrafiche.idanagrafica + INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica = an_tipianagrafiche.idtipoanagrafica + WHERE an_tipianagrafiche.descrizione = 'Cliente' AND an_anagrafiche.deleted_at IS NULL"; + + $sincronizza_lavorati = setting('Sincronizza Clienti per cui il Tecnico ha lavorato in passato'); + if (!empty($sincronizza_lavorati)) { + $query .= ' + AND an_anagrafiche.idanagrafica IN ( + SELECT idanagrafica FROM in_interventi + INNER JOIN in_interventi_tecnici ON in_interventi_tecnici.idintervento = in_interventi.id + WHERE in_interventi_tecnici.orario_fine BETWEEN :period_start AND :period_end + AND in_interventi_tecnici.idtecnico = :id_tecnico + + UNION + + SELECT idanagrafica FROM in_interventi + WHERE in_interventi.id NOT IN ( + SELECT idintervento FROM in_interventi_tecnici + ) + )'; + } // Filtro per data if ($last_sync_at) { - $statement = $statement->where('updated_at', '>', $last_sync_at); + $query .= ' AND an_anagrafiche.updated_at > '.prepare($last_sync_at); } - $results = $statement->get() - ->pluck('idanagrafica'); + $date = (new Interventi())->getDateDiInteresse(); + $id_tecnico = Auth::user()->id_anagrafica; + $records = database()->fetchArray($query, [ + ':period_start' => $date['start'], + ':period_end' => $date['end'], + ':id_tecnico' => $id_tecnico, + ]); - return $results; + return array_column($records, 'id'); } public function retrieveRecord($id) diff --git a/src/API/App/v1/Impostazioni.php b/src/API/App/v1/Impostazioni.php index efb6c8736..5a6527796 100644 --- a/src/API/App/v1/Impostazioni.php +++ b/src/API/App/v1/Impostazioni.php @@ -13,7 +13,19 @@ class Impostazioni extends AppResource public function getModifiedRecords($last_sync_at) { - $query = 'SELECT zz_settings.id FROM zz_settings WHERE sezione = "Applicazione"'; + $query = "SELECT zz_settings.id FROM zz_settings WHERE (sezione = 'Applicazione'"; + + // Aggiunta delle impostazioni esterne alla sezione Applicazione + $impostazioni_esterne = $this->getImpostazioniEsterne(); + if (!empty($impostazioni_esterne)) { + $impostazioni = []; + foreach ($impostazioni_esterne as $imp) { + $impostazioni[] = prepare($imp); + } + + $query .= ' OR nome IN ('.implode(', ', $impostazioni).')'; + } + $query .= ')'; // Filtro per data if ($last_sync_at) { @@ -39,4 +51,13 @@ class Impostazioni extends AppResource return $record; } + + protected function getImpostazioniEsterne() + { + return [ + 'Mostra prezzi al tecnico', + "Stato dell'attività alla chiusura", + "Stato dell'attività dopo la firma", + ]; + } } diff --git a/src/API/App/v1/Interventi.php b/src/API/App/v1/Interventi.php index de1f67971..78d569f42 100644 --- a/src/API/App/v1/Interventi.php +++ b/src/API/App/v1/Interventi.php @@ -13,19 +13,33 @@ use Modules\TipiIntervento\Tipo as TipoSessione; class Interventi extends AppResource { + public function getDateDiInteresse() + { + // Periodo per selezionare gli interventi + $today = new Carbon(); + $mesi_precedenti = intval(setting('Mesi per lo storico delle Attività')); + $start = $today->copy()->subMonths($mesi_precedenti); + $end = $today->copy()->addMonth(1); + + return [ + 'today' => $today, + 'start' => $start, + 'end' => $end, + ]; + } + public function getCleanupData($last_sync_at) { // Periodo per selezionare interventi - $today = new Carbon(); - $start = $today->copy()->subMonths(2); - $end = $today->copy()->addMonth(1); + $date = $this->getDateDiInteresse(); + $start = $date['start']; + $end = $date['end']; $remove_end = $start->copy(); $remove_start = $remove_end->copy()->subMonths(2); // Informazioni sull'utente - $user = Auth::user(); - $id_tecnico = $user->id_anagrafica; + $id_tecnico = Auth::user()->id_anagrafica; $query = 'SELECT in_interventi.id FROM in_interventi WHERE deleted_at IS NOT NULL @@ -58,13 +72,12 @@ class Interventi extends AppResource public function getModifiedRecords($last_sync_at) { // Periodo per selezionare interventi - $today = new Carbon(); - $start = $today->copy()->subMonths(2); - $end = $today->copy()->addMonth(1); + $date = $this->getDateDiInteresse(); + $start = $date['start']; + $end = $date['end']; // Informazioni sull'utente - $user = Auth::user(); - $id_tecnico = $user->id_anagrafica; + $id_tecnico = Auth::user()->id_anagrafica; $query = 'SELECT in_interventi.id FROM in_interventi WHERE deleted_at IS NULL AND ( @@ -86,6 +99,7 @@ class Interventi extends AppResource if ($last_sync_at) { $query .= ' AND in_interventi.updated_at > '.prepare($last_sync_at); } + $records = database()->fetchArray($query, [ ':period_start' => $start, ':period_end' => $end, diff --git a/update/2_4_17.sql b/update/2_4_17.sql index d497234b4..f6447031e 100644 --- a/update/2_4_17.sql +++ b/update/2_4_17.sql @@ -145,9 +145,17 @@ INSERT INTO `zz_api_resources` (`id`, `version`, `type`, `resource`, `class`, `e (NULL, 'app-v1', 'create', 'email-rapportino', 'API\\App\\v1\\RapportinoIntervento', '1'); -- Impostazioni relative all'applicazione -INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES -(NULL, 'Google Maps API key', '', 'string', '1', 'Applicazione', 1), -(NULL, 'Mostra prezzi', '1', 'boolean', '1', 'Applicazione', 1); +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES +(NULL, 'Google Maps API key', '', 'string', '1', 'Applicazione', 1, ''), +(NULL, 'Mostra prezzi', '1', 'boolean', '1', 'Applicazione', 2, ''), +(NULL, 'Sincronizza Clienti per cui il Tecnico ha lavorato in passato', '1', 'boolean', '1', 'Applicazione', 3, ''), +(NULL, 'Mesi per lo storico delle Attività', '6', 'integer', '1', 'Applicazione', 3, ''); + +-- Impostazioni relative gli stati delle Attività +UPDATE `zz_settings` SET `sezione` = 'Attività' WHERE `sezione` = 'Interventi'; +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES +(NULL, 'Stato dell''attività alla chiusura', '1', 'query=SELECT idstatointervento AS id, descrizione AS text FROM in_statiintervento WHERE is_completato = 1', (SELECT idstatointervento AS id FROM in_statiintervento WHERE codice = 'OK'), 'Attività', 1, 'Stato in cui spostare l''attitivà a seguito della chiusura'), +(NULL, 'Stato dell''attività dopo la firma', '1', 'query=SELECT idstatointervento AS id, descrizione AS text FROM in_statiintervento WHERE is_completato = 1', (SELECT idstatointervento AS id FROM in_statiintervento WHERE codice = 'OK'), 'Attività', 2, 'Stato in cui spostare l''attitivà dopo la firma del cliente');; -- Aggiunta risorsa per il download degli allegati INSERT INTO `zz_api_resources` (`id`, `version`, `type`, `resource`, `class`, `enabled`) VALUES (NULL, 'v1', 'retrieve', 'allegato', 'API\\Common\\Allegato', '1');