mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-18 12:30:35 +01:00
Revisione sincronizzazione Flash da Applicazione
This commit is contained in:
parent
23b31347e4
commit
9027bfad75
@ -30,10 +30,37 @@ use Carbon\Carbon;
|
|||||||
|
|
||||||
class Intervento extends Resource implements UpdateInterface
|
class Intervento extends Resource implements UpdateInterface
|
||||||
{
|
{
|
||||||
public function update($request)
|
/**
|
||||||
|
* Elenco risorse API.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $risorse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifica sulla presenza di conflitti.
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $conflitti_rilevati = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Record da considerare per l'importazione.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $records = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response delle richieste.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $response = [];
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
{
|
{
|
||||||
// Elenco risorse API
|
$this->risorse = [
|
||||||
$risorse = [
|
|
||||||
'cliente' => new Clienti(),
|
'cliente' => new Clienti(),
|
||||||
'intervento' => new Interventi(),
|
'intervento' => new Interventi(),
|
||||||
|
|
||||||
@ -41,41 +68,22 @@ class Intervento extends Resource implements UpdateInterface
|
|||||||
'sessioni' => new SessioniInterventi(),
|
'sessioni' => new SessioniInterventi(),
|
||||||
'allegati' => new AllegatiInterventi(),
|
'allegati' => new AllegatiInterventi(),
|
||||||
];
|
];
|
||||||
$sezioni = array_keys($risorse);
|
}
|
||||||
|
|
||||||
// Generazione record semplificati
|
|
||||||
$records = [];
|
|
||||||
foreach ($sezioni as $sezione) {
|
|
||||||
if (isset($request[$sezione][0])) {
|
|
||||||
foreach ($request[$sezione] as $record) {
|
|
||||||
$records[] = [$record, $risorse[$sezione]];
|
|
||||||
}
|
|
||||||
} elseif (!empty($request[$sezione])) {
|
|
||||||
$records[] = [$request[$sezione], $risorse[$sezione]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public function update($request)
|
||||||
|
{
|
||||||
// Controlli sui conflitti
|
// Controlli sui conflitti
|
||||||
$conflict = false;
|
foreach ($request as $key => $record) {
|
||||||
foreach ($records as $key => [$record, $risorsa]) {
|
$records = $record;
|
||||||
$ultima_modifica = new Carbon($record['updated_at']);
|
if (!isset($records[0])) {
|
||||||
$ultima_sincronizzazione = new Carbon($record['last_sync_at']);
|
$records = [$records];
|
||||||
if (!empty($record['last_sync_at']) && !$ultima_modifica->greaterThan($ultima_sincronizzazione)) {
|
|
||||||
unset($records[$key]);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$modifiche = $risorsa->getModifiedRecords($record['last_sync_at']);
|
$this->processaRecords($key, $records);
|
||||||
$modifiche = array_keys($modifiche);
|
|
||||||
|
|
||||||
if (in_array($record['id'], $modifiche)) {
|
|
||||||
$conflict = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Messaggio di conflitto in caso di problematica riscontrata
|
// Messaggio di conflitto in caso di problematica riscontrata
|
||||||
if ($conflict) {
|
if ($this->conflitti_rilevati) {
|
||||||
return [
|
return [
|
||||||
'status' => 200,
|
'status' => 200,
|
||||||
'message' => 'CONFLICT',
|
'message' => 'CONFLICT',
|
||||||
@ -83,16 +91,87 @@ class Intervento extends Resource implements UpdateInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Salvataggio delle modifiche
|
// Salvataggio delle modifiche
|
||||||
foreach ($records as [$record, $risorsa]) {
|
foreach ($this->records as $key => $records) {
|
||||||
if (!empty($record['deleted_at'])) {
|
$this->importaRecords($key, $records);
|
||||||
$risorsa->deleteRecord($record['id']);
|
}
|
||||||
} elseif (!empty($record['remote_id'])) {
|
|
||||||
$risorsa->updateRecord($record);
|
return $this->response;
|
||||||
} else {
|
}
|
||||||
$risorsa->createRecord($record);
|
|
||||||
|
/**
|
||||||
|
* @param $key
|
||||||
|
* @param $records
|
||||||
|
*/
|
||||||
|
protected function processaRecords($key, $request)
|
||||||
|
{
|
||||||
|
$records = [];
|
||||||
|
|
||||||
|
// Controlli sui conflitti
|
||||||
|
foreach ($request as $id => $record) {
|
||||||
|
$risorsa = $this->risorse[$key];
|
||||||
|
if (empty($risorsa) || empty($record)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$includi = $this->verificaConflitti($record, $risorsa);
|
||||||
|
if ($includi) {
|
||||||
|
$records[$id] = $record;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return [];
|
// Registrazione dei record individuati
|
||||||
|
if (!empty($records)) {
|
||||||
|
$this->records[$key] = $records;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $key
|
||||||
|
* @param $records
|
||||||
|
*/
|
||||||
|
protected function importaRecords($key, $records)
|
||||||
|
{
|
||||||
|
$this->response[$key] = [];
|
||||||
|
$risorsa = $this->risorse[$key];
|
||||||
|
|
||||||
|
foreach ($records as $id => $record) {
|
||||||
|
// Fix id_cliente per Intervento in caso di generazione da zero
|
||||||
|
if ($risorsa instanceof Interventi && !empty($this->response['cliente'][$id])) {
|
||||||
|
$record['id_cliente'] = $this->response['cliente'][$id]['id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = null;
|
||||||
|
if (!empty($record['deleted_at'])) {
|
||||||
|
$risorsa->deleteRecord($record['id']);
|
||||||
|
} elseif (!empty($record['remote_id'])) {
|
||||||
|
$response = $risorsa->updateRecord($record);
|
||||||
|
} else {
|
||||||
|
$response = $risorsa->createRecord($record);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->response[$key][$id] = $response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $record
|
||||||
|
* @param $risorsa
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function verificaConflitti($record, $risorsa)
|
||||||
|
{
|
||||||
|
$ultima_modifica = new Carbon($record['updated_at']);
|
||||||
|
$ultima_sincronizzazione = new Carbon($record['last_sync_at']);
|
||||||
|
if (!empty($record['last_sync_at']) && !$ultima_modifica->greaterThan($ultima_sincronizzazione)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$modifiche = $risorsa->getModifiedRecords($record['last_sync_at']);
|
||||||
|
$modifiche = array_keys($modifiche);
|
||||||
|
|
||||||
|
$this->conflitti_rilevati |= in_array($record['id'], $modifiche);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ use API\Resource;
|
|||||||
|
|
||||||
class Revisione extends Resource implements RetrieveInterface
|
class Revisione extends Resource implements RetrieveInterface
|
||||||
{
|
{
|
||||||
const REVISION = '1.2';
|
const REVISION = '1.3';
|
||||||
|
|
||||||
public function retrieve($request)
|
public function retrieve($request)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user