2020-07-16 11:32:56 +02:00
|
|
|
<?php
|
|
|
|
|
2020-07-24 10:20:42 +02:00
|
|
|
namespace API\App\v1;
|
2020-07-16 11:32:56 +02:00
|
|
|
|
2020-07-24 10:20:42 +02:00
|
|
|
use API\App\AppResource;
|
2020-07-16 11:32:56 +02:00
|
|
|
use Auth;
|
|
|
|
use Carbon\Carbon;
|
2020-07-24 10:20:42 +02:00
|
|
|
use Modules\Anagrafiche\Anagrafica;
|
|
|
|
use Modules\Interventi\Components\Sessione;
|
|
|
|
use Modules\Interventi\Intervento;
|
2020-07-16 11:32:56 +02:00
|
|
|
|
2020-07-28 09:42:05 +02:00
|
|
|
class SessioniInterventi extends AppResource
|
2020-07-16 11:32:56 +02:00
|
|
|
{
|
2020-07-28 09:42:05 +02:00
|
|
|
protected function getCleanupData($last_sync_at)
|
2020-07-16 11:32:56 +02:00
|
|
|
{
|
|
|
|
// 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 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,
|
|
|
|
]);
|
2020-07-22 10:52:18 +02:00
|
|
|
$da_interventi = array_column($records, 'id');
|
2020-07-28 09:42:05 +02:00
|
|
|
$mancanti = $this->getMissingIDs('in_interventi_tecnici', 'id', $last_sync_at);
|
2020-07-16 11:32:56 +02:00
|
|
|
|
2020-07-22 10:52:18 +02:00
|
|
|
$results = array_unique(array_merge($da_interventi, $mancanti));
|
|
|
|
|
|
|
|
return $results;
|
2020-07-16 11:32:56 +02:00
|
|
|
}
|
|
|
|
|
2020-07-28 09:42:05 +02:00
|
|
|
protected function getModifiedRecords($last_sync_at)
|
2020-07-16 11:32:56 +02:00
|
|
|
{
|
|
|
|
// 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) {
|
2020-07-28 09:42:05 +02:00
|
|
|
$query .= ' AND in_interventi_tecnici.updated_at > '.prepare($last_sync_at);
|
2020-07-16 11:32:56 +02:00
|
|
|
}
|
|
|
|
$records = database()->fetchArray($query, [
|
|
|
|
':period_start' => $start,
|
|
|
|
':period_end' => $end,
|
|
|
|
':id_tecnico' => $id_tecnico,
|
|
|
|
]);
|
|
|
|
|
|
|
|
return array_column($records, 'id');
|
|
|
|
}
|
|
|
|
|
2020-07-24 10:20:42 +02:00
|
|
|
protected function retrieveRecord($id)
|
2020-07-16 11:32:56 +02:00
|
|
|
{
|
|
|
|
// Gestione della visualizzazione dei dettagli del record
|
|
|
|
$query = 'SELECT id,
|
|
|
|
idintervento AS id_intervento,
|
2020-07-27 12:25:51 +02:00
|
|
|
idtipointervento AS id_tipo_intervento,
|
2020-07-16 11:32:56 +02:00
|
|
|
orario_inizio,
|
2020-07-23 10:58:38 +02:00
|
|
|
orario_fine,
|
|
|
|
km,
|
|
|
|
|
|
|
|
prezzo_ore_unitario AS prezzo_orario,
|
|
|
|
IF(tipo_sconto = "UNT", sconto_unitario, sconto_unitario * prezzo_ore_unitario / 100) AS sconto_orario,
|
|
|
|
IF(tipo_sconto = "PRC", sconto_unitario, 0) AS sconto_orario_percentuale,
|
|
|
|
tipo_sconto AS tipo_sconto_orario,
|
|
|
|
|
|
|
|
prezzo_km_unitario AS prezzo_chilometrico,
|
|
|
|
IF(tipo_scontokm = "UNT", scontokm_unitario, scontokm_unitario * prezzo_km_unitario / 100) AS sconto_chilometrico,
|
|
|
|
IF(tipo_scontokm = "PRC", scontokm_unitario, 0) AS sconto_chilometrico_percentuale,
|
|
|
|
tipo_sconto AS tipo_sconto_chilometrico,
|
|
|
|
|
|
|
|
prezzo_dirittochiamata AS prezzo_diritto_chiamata
|
2020-07-16 11:32:56 +02:00
|
|
|
FROM in_interventi_tecnici
|
|
|
|
WHERE in_interventi_tecnici.id = '.prepare($id);
|
|
|
|
|
|
|
|
$record = database()->fetchOne($query);
|
|
|
|
|
|
|
|
return $record;
|
|
|
|
}
|
2020-07-24 10:20:42 +02:00
|
|
|
|
|
|
|
protected function createRecord($data)
|
|
|
|
{
|
|
|
|
// Informazioni sull'utente
|
|
|
|
$user = Auth::user();
|
|
|
|
$id_tecnico = $user->id_anagrafica;
|
|
|
|
|
|
|
|
// Informazioni di base
|
|
|
|
$intervento = Intervento::find($data['id_intervento']);
|
|
|
|
$anagrafica = Anagrafica::find($id_tecnico);
|
|
|
|
|
|
|
|
// Creazione della sessione
|
|
|
|
$sessione = Sessione::build($intervento, $anagrafica, $data['orario_inizio'], $data['orario_fine']);
|
|
|
|
|
|
|
|
$this->aggiornaSessione($sessione, $data);
|
|
|
|
$sessione->save();
|
|
|
|
|
|
|
|
return [
|
|
|
|
'id' => $sessione->id,
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function updateRecord($data)
|
|
|
|
{
|
|
|
|
$sessione = Sessione::find($data['id']);
|
|
|
|
|
|
|
|
$this->aggiornaSessione($sessione, $data);
|
|
|
|
$sessione->save();
|
|
|
|
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Aggiorna i dati della sessione sulla base dei dati caricati dall'applicazione.
|
|
|
|
*
|
|
|
|
* @param $sessione
|
|
|
|
* @param $data
|
2020-07-27 12:25:51 +02:00
|
|
|
*
|
|
|
|
* @return array
|
2020-07-24 10:20:42 +02:00
|
|
|
*/
|
|
|
|
protected function aggiornaSessione($sessione, $data)
|
|
|
|
{
|
2020-07-27 12:25:51 +02:00
|
|
|
$id_tipo = $data['id_tipo_intervento'];
|
|
|
|
$sessione->setTipo($id_tipo);
|
|
|
|
|
|
|
|
// Campi di base
|
|
|
|
$sessione->orario_inizio = $data['orario_inizio'];
|
|
|
|
$sessione->orario_fine = $data['orario_fine'];
|
|
|
|
$sessione->km = $data['km'];
|
|
|
|
|
2020-07-24 10:20:42 +02:00
|
|
|
// Prezzi
|
|
|
|
$sessione->prezzo_ore_unitario = $data['prezzo_orario'];
|
|
|
|
$sessione->prezzo_km_unitario = $data['prezzo_chilometrico'];
|
|
|
|
$sessione->prezzo_dirittochiamata = $data['prezzo_diritto_chiamata'];
|
|
|
|
|
|
|
|
// Sconto orario
|
|
|
|
$sessione->sconto_unitario = $data['sconto_orario_percentuale'] ?: $data['sconto_orario'];
|
|
|
|
$sessione->tipo_sconto = $data['tipo_sconto_orario'];
|
|
|
|
|
|
|
|
// Sconto chilometrico
|
|
|
|
$sessione->scontokm_unitario = $data['sconto_chilometrico_percentuale'] ?: $data['sconto_chilometrico'];
|
|
|
|
$sessione->tipo_scontokm = $data['tipo_sconto_chilometrico'];
|
|
|
|
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function deleteRecord($id)
|
|
|
|
{
|
|
|
|
$sessione = Sessione::find($id);
|
|
|
|
$sessione->delete();
|
|
|
|
}
|
2020-07-16 11:32:56 +02:00
|
|
|
}
|