Ottimizzazioni per la sincronizzazione con l'applicazione

This commit is contained in:
Thomas Zilio 2020-08-04 09:44:37 +02:00
parent 0703214738
commit 9e199d15d9
6 changed files with 92 additions and 26 deletions

View File

@ -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',

View File

@ -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']);

View File

@ -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)

View File

@ -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",
];
}
}

View File

@ -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,

View File

@ -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');