From 1bb8e6e67ac4ededb47a5c55c659ea39e925218e Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Thu, 16 Jul 2020 11:32:56 +0200 Subject: [PATCH] Risorse Interventi e Sessioni per applicazione --- .../anagrafiche/src/API/AppV1/Anagrafiche.php | 2 +- .../anagrafiche/src/API/AppV1/Referenti.php | 14 ++- modules/anagrafiche/src/API/AppV1/Sedi.php | 2 +- .../interventi/src/API/AppV1/Interventi.php | 103 +++++++++++------- modules/interventi/src/API/AppV1/Sessioni.php | 81 ++++++++++++++ update/2_4_16.sql | 8 +- 6 files changed, 164 insertions(+), 46 deletions(-) create mode 100644 modules/interventi/src/API/AppV1/Sessioni.php diff --git a/modules/anagrafiche/src/API/AppV1/Anagrafiche.php b/modules/anagrafiche/src/API/AppV1/Anagrafiche.php index 813b054e4..20bb23791 100644 --- a/modules/anagrafiche/src/API/AppV1/Anagrafiche.php +++ b/modules/anagrafiche/src/API/AppV1/Anagrafiche.php @@ -16,7 +16,7 @@ class Anagrafiche extends AppResource protected function getData($last_sync_at) { - $statement = Anagrafica::withTrashed()->select('idanagrafica') + $statement = Anagrafica::select('idanagrafica') ->whereHas('tipi', function (Builder $query) { $query->where('descrizione', '=', 'Cliente'); }); diff --git a/modules/anagrafiche/src/API/AppV1/Referenti.php b/modules/anagrafiche/src/API/AppV1/Referenti.php index f59a849c2..2e8dc8bf0 100644 --- a/modules/anagrafiche/src/API/AppV1/Referenti.php +++ b/modules/anagrafiche/src/API/AppV1/Referenti.php @@ -19,7 +19,7 @@ class Referenti extends AppResource implements RetrieveInterface INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = an_referenti.idanagrafica 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'"; + WHERE an_tipianagrafiche.descrizione = 'Cliente' AND an_anagrafiche.deleted_at IS NULL"; // Filtro per data if ($last_sync_at) { @@ -35,11 +35,13 @@ class Referenti extends AppResource implements RetrieveInterface protected function getDetails($id) { // Gestione della visualizzazione dei dettagli del record - $query = 'SELECT an_referenti.id, - an_referenti.nome, - an_referenti.mansione, - an_referenti.telefono, - an_referenti.email + $query = 'SELECT id, + idanagrafica AS id_anagrafica, + IF(idsede = 0, NULL, idsede) AS id_sede, + nome, + mansione, + telefono, + email FROM an_referenti WHERE an_referenti.id = '.prepare($id); diff --git a/modules/anagrafiche/src/API/AppV1/Sedi.php b/modules/anagrafiche/src/API/AppV1/Sedi.php index 9cae04485..7d815b109 100644 --- a/modules/anagrafiche/src/API/AppV1/Sedi.php +++ b/modules/anagrafiche/src/API/AppV1/Sedi.php @@ -18,7 +18,7 @@ class Sedi extends AppResource INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = an_sedi.idanagrafica 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'"; + WHERE an_tipianagrafiche.descrizione = 'Cliente' AND an_anagrafiche.deleted_at IS NULL"; // Filtro per data if ($last_sync_at) { diff --git a/modules/interventi/src/API/AppV1/Interventi.php b/modules/interventi/src/API/AppV1/Interventi.php index 813b054e4..36504464e 100644 --- a/modules/interventi/src/API/AppV1/Interventi.php +++ b/modules/interventi/src/API/AppV1/Interventi.php @@ -1,64 +1,93 @@ getDeleted('an_anagrafiche', 'idanagrafica'); + // Periodo per selezionare interventi + $today = new Carbon(); + $start = $today->copy()->subMonths(2); + $end = $today->copy()->addMonth(1); + + // Informazioni sull'utente + $user = Auth::user(); + $id_tecnico = $user->id_anagrafica; + + $query = 'SELECT in_interventi.id FROM in_interventi WHERE + deleted_at IS NOT NULL + OR EXISTS( + SELECT orario_fine FROM in_interventi_tecnici WHERE + in_interventi_tecnici.idintervento = in_interventi.id + AND orario_fine NOT BETWEEN :period_start AND :period_end + AND idtecnico = :id_tecnico + )'; + $records = database()->fetchArray($query, [ + ':period_end' => $end, + ':period_start' => $start, + ':id_tecnico' => $id_tecnico, + ]); + + return array_column($records, 'id'); } protected function getData($last_sync_at) { - $statement = Anagrafica::withTrashed()->select('idanagrafica') - ->whereHas('tipi', function (Builder $query) { - $query->where('descrizione', '=', 'Cliente'); - }); + // Periodo per selezionare interventi + $today = new Carbon(); + $start = $today->copy()->subMonths(2); + $end = $today->copy()->addMonth(1); + + // Informazioni sull'utente + $user = Auth::user(); + $id_tecnico = $user->id_anagrafica; + + $query = 'SELECT in_interventi.id FROM in_interventi WHERE + in_interventi.id IN ( + SELECT idintervento FROM in_interventi_tecnici + WHERE in_interventi_tecnici.idintervento = in_interventi.id + AND in_interventi_tecnici.orario_fine BETWEEN :period_start AND :period_end + AND in_interventi_tecnici.idtecnico = :id_tecnico + ) + AND deleted_at IS NULL'; // Filtro per data if ($last_sync_at) { $last_sync = new Carbon($last_sync_at); - $statement = $statement->where('updated_at', '>', $last_sync); + $query .= ' AND in_interventi.updated_at > '.prepare($last_sync); } + $records = database()->fetchArray($query, [ + ':period_start' => $start, + ':period_end' => $end, + ':id_tecnico' => $id_tecnico, + ]); - $results = $statement->get() - ->pluck('idanagrafica'); - - return $results; + return array_column($records, 'id'); } protected function getDetails($id) { // Gestione della visualizzazione dei dettagli del record - $query = 'SELECT an_anagrafiche.idanagrafica AS id, - an_anagrafiche.ragione_sociale, - an_anagrafiche.piva AS partita_iva, - an_anagrafiche.codice_fiscale, - an_anagrafiche.indirizzo, - an_anagrafiche.indirizzo2, - an_anagrafiche.citta, - an_anagrafiche.cap, - an_anagrafiche.provincia, - an_anagrafiche.km, - IFNULL(an_anagrafiche.lat, 0.00) AS latitudine, - IFNULL(an_anagrafiche.lng, 0.00) AS longitudine, - an_nazioni.nome AS nazione, - an_anagrafiche.fax, - an_anagrafiche.telefono, - an_anagrafiche.cellulare, - an_anagrafiche.email, - an_anagrafiche.sitoweb AS sito_web, - an_anagrafiche.note, - an_anagrafiche.deleted_at - FROM an_anagrafiche - LEFT OUTER JOIN an_nazioni ON an_anagrafiche.id_nazione = an_nazioni.id - WHERE an_anagrafiche.idanagrafica = '.prepare($id); + $query = "SELECT id, + codice, + richiesta, + data_richiesta, + descrizione, + idanagrafica AS id_anagrafica, + idtipointervento AS id_tipo_intervento, + idstatointervento AS id_stato_intervento, + informazioniaggiuntive AS informazioni_aggiuntive, + IF(idsede_destinazione = 0, NULL, idsede_destinazione) AS id_sede, + firma_file, + IF(firma_data = '0000-00-00 00:00:00', '', firma_data) AS firma_data, + firma_nome + FROM in_interventi + WHERE in_interventi.id = ".prepare($id); $record = database()->fetchOne($query); diff --git a/modules/interventi/src/API/AppV1/Sessioni.php b/modules/interventi/src/API/AppV1/Sessioni.php new file mode 100644 index 000000000..783d52cb3 --- /dev/null +++ b/modules/interventi/src/API/AppV1/Sessioni.php @@ -0,0 +1,81 @@ +copy()->subMonths(2); + $end = $today->copy()->addMonth(1); + + // Informazioni sull'utente + $user = Auth::user(); + $id_tecnico = $user->id_anagrafica; + + $query = 'SELECT in_interventi_tecnici.id FROM in_interventi_tecnici + INNER JOIN in_interventi ON in_interventi_tecnici.idintervento = in_interventi.id + WHERE + in_interventi.deleted_at IS NOT NULL + OR (orario_fine NOT BETWEEN :period_start AND :period_end AND idtecnico = :id_tecnico)'; + $records = database()->fetchArray($query, [ + ':period_end' => $end, + ':period_start' => $start, + ':id_tecnico' => $id_tecnico, + ]); + + return array_column($records, 'id'); + } + + protected function getData($last_sync_at) + { + // Periodo per selezionare interventi + $today = new Carbon(); + $start = $today->copy()->subMonths(2); + $end = $today->copy()->addMonth(1); + + // Informazioni sull'utente + $user = Auth::user(); + $id_tecnico = $user->id_anagrafica; + + $query = 'SELECT in_interventi_tecnici.id FROM in_interventi_tecnici + INNER JOIN in_interventi ON in_interventi_tecnici.idintervento = in_interventi.id + WHERE + in_interventi.deleted_at IS NULL + AND (orario_fine BETWEEN :period_start AND :period_end AND idtecnico = :id_tecnico)'; + + // Filtro per data + if ($last_sync_at) { + $last_sync = new Carbon($last_sync_at); + $query .= ' AND in_interventi_tecnici.updated_at > '.prepare($last_sync); + } + $records = database()->fetchArray($query, [ + ':period_start' => $start, + ':period_end' => $end, + ':id_tecnico' => $id_tecnico, + ]); + + return array_column($records, 'id'); + } + + protected function getDetails($id) + { + // Gestione della visualizzazione dei dettagli del record + $query = 'SELECT id, + idintervento AS id_intervento, + orario_inizio, + orario_fine + FROM in_interventi_tecnici + WHERE in_interventi_tecnici.id = '.prepare($id); + + $record = database()->fetchOne($query); + + return $record; + } +} diff --git a/update/2_4_16.sql b/update/2_4_16.sql index cc69a14ba..005eb0b61 100644 --- a/update/2_4_16.sql +++ b/update/2_4_16.sql @@ -146,4 +146,10 @@ INSERT INTO `zz_api_resources` (`id`, `version`, `type`, `resource`, `class`, `e (NULL, 'app-v1', 'retrieve', 'tipo-intervento', 'Modules\\TipiIntervento\\API\\AppV1\\TipiIntervento', '1'), (NULL, 'app-v1', 'retrieve', 'articoli', 'Modules\\Articoli\\API\\AppV1\\Articoli', '1'), (NULL, 'app-v1', 'retrieve', 'articoli-cleanup', 'Modules\\Articoli\\API\\AppV1\\Articoli', '1'), -(NULL, 'app-v1', 'retrieve', 'articolo', 'Modules\\Articoli\\API\\AppV1\\Articoli', '1'); +(NULL, 'app-v1', 'retrieve', 'articolo', 'Modules\\Articoli\\API\\AppV1\\Articoli', '1'), +(NULL, 'app-v1', 'retrieve', 'interventi', 'Modules\\Interventi\\API\\AppV1\\Interventi', '1'), +(NULL, 'app-v1', 'retrieve', 'interventi-cleanup', 'Modules\\Interventi\\API\\AppV1\\Interventi', '1'), +(NULL, 'app-v1', 'retrieve', 'intervento', 'Modules\\Interventi\\API\\AppV1\\Interventi', '1'), +(NULL, 'app-v1', 'retrieve', 'sessioni', 'Modules\\Interventi\\API\\AppV1\\Sessioni', '1'), +(NULL, 'app-v1', 'retrieve', 'sessioni-cleanup', 'Modules\\Interventi\\API\\AppV1\\Sessioni', '1'), +(NULL, 'app-v1', 'retrieve', 'sessione', 'Modules\\Interventi\\API\\AppV1\\Sessioni', '1');