diff --git a/src/API/AppResource.php b/src/API/App/AppResource.php similarity index 69% rename from src/API/AppResource.php rename to src/API/App/AppResource.php index 419fea67c..0c1ab5bba 100644 --- a/src/API/AppResource.php +++ b/src/API/App/AppResource.php @@ -1,13 +1,17 @@ getDetails($id); + $details = $this->retrieveRecord($id); // Fix per la gestione dei contenuti numerici foreach ($details as $key => $value) { @@ -47,6 +51,33 @@ abstract class AppResource extends Resource implements RetrieveInterface ]; } + public function create($request) + { + $data = $request['data']; + $response_data = $this->createRecord($data); + + return [ + 'id' => $response_data['id'], + 'data' => $response_data, + ]; + } + + public function update($request) + { + $data = $request['data']; + $response_data = $this->updateRecord($data); + + return [ + 'data' => $response_data, + ]; + } + + public function delete($request) + { + $id = $request['id']; + $this->deleteRecord($id); + } + /** * @param string $table_name Tabella da analizzare * @param string $column Colonna di tipo AUTO_INCREMENT della tabella @@ -121,5 +152,40 @@ abstract class AppResource extends Resource implements RetrieveInterface * * @return array */ - abstract protected function getDetails($id); + abstract protected function retrieveRecord($id); + + /** + * Crea un nuovo record relativo alla risorsa, restituendo l'ID relativo ed eventuali campi da aggiornare in remoto. + * + * @param array $data + * + * @return array + */ + protected function createRecord($data) + { + return []; + } + + /** + * Aggiorna un record relativo alla risorsa, restituendo eventuali campi da aggiornare in remoto. + * + * @param array $data + * + * @return array + */ + protected function updateRecord($data) + { + return []; + } + + /** + * Elimina un record relativo alla risorsa. + * + * @param string $id + * + * @return void + */ + protected function deleteRecord($id) + { + } } diff --git a/modules/iva/src/API/AppV1/AliquoteIva.php b/src/API/App/v1/AliquoteIva.php similarity index 89% rename from modules/iva/src/API/AppV1/AliquoteIva.php rename to src/API/App/v1/AliquoteIva.php index 604255f6c..74479d88a 100644 --- a/modules/iva/src/API/AppV1/AliquoteIva.php +++ b/src/API/App/v1/AliquoteIva.php @@ -1,9 +1,8 @@ richiesta = $data['richiesta']; + $intervento->descrizione = $data['descrizione']; + $intervento->informazioniaggiuntive = $data['informazioni_aggiuntive']; + $intervento->save(); + + return [ + 'id' => $intervento->id, + 'codice' => $intervento->codice, + ]; + } + + protected function updateRecord($data) + { + $intervento = Intervento::find($data['id']); + + $intervento->idstatointervento = $data['id_stato_intervento']; + $intervento->descrizione = $data['descrizione']; + $intervento->informazioniaggiuntive = $data['informazioni_aggiuntive']; + $intervento->save(); + + return []; + } } diff --git a/modules/utenti/src/API/AppV1/Login.php b/src/API/App/v1/Login.php similarity index 98% rename from modules/utenti/src/API/AppV1/Login.php rename to src/API/App/v1/Login.php index 239477e7e..1818f7dfe 100644 --- a/modules/utenti/src/API/AppV1/Login.php +++ b/src/API/App/v1/Login.php @@ -1,6 +1,6 @@ fetchOne('SELECT idintervento AS id_intervento, - idarticolo AS id_articolo, - is_descrizione, - is_sconto - FROM in_righe_interventi WHERE in_righe_interventi.id = '.prepare($id)); - // Individuazione riga tramite classi - if (!empty($dati['is_sconto'])) { - $type = Sconto::class; - } elseif (!empty($dati['id_articolo'])) { - $type = Articolo::class; - } else { - $type = Riga::class; - } - $intervento = Intervento::find($dati['id_intervento']); - $riga = $intervento->getRiga($type, $id); + $riga = $this->getRecord($id); // Generazione del record ristretto ai campi di interesse $record = [ @@ -141,4 +129,85 @@ class Righe extends AppResource return $record; } + + protected function getRecord($id) + { + // Individuazione delle caratteristiche del record + $data = database()->fetchOne('SELECT idintervento AS id_intervento, + IF(idarticolo IS NULL OR idarticolo = 0, 0, 1) AS is_articolo, + is_descrizione, + is_sconto + FROM in_righe_interventi WHERE in_righe_interventi.id = '.prepare($id)); + + // Individuazione riga tramite classi + $type = $this->getType($data); + $intervento = Intervento::find($data['id_intervento']); + + return $intervento->getRiga($type, $id); + } + + protected function getType($data) + { + if (!empty($data['is_sconto'])) { + $type = Sconto::class; + } elseif (!empty($data['is_articolo'])) { + $type = Articolo::class; + } else { + $type = Riga::class; + } + + return $type; + } + + protected function createRecord($data) + { + $intervento = Intervento::find($data['id_intervento']); + if ($data['is_articolo']) { + $originale = ArticoloOriginale::find($data['id_articolo']); + $riga = Articolo::build($intervento, $originale); + } elseif ($data['is_sconto']) { + // TODO: sconti + } else { + $riga = Riga::build($intervento); + } + + $this->aggiornaRecord($riga, $data); + $riga->save(); + + return [ + 'id' => $riga->id, + ]; + } + + protected function updateRecord($data) + { + $riga = $this->getRecord($data['id']); + + $this->aggiornaRecord($riga, $data); + $riga->save(); + + return []; + } + + protected function deleteRecord($id) + { + $riga = $this->getRecord($id); + $riga->delete(); + } + + protected function aggiornaRecord($record, $data) + { + $record->descrizione = $data['descrizione']; + $record->um = $data['um'] ?: null; + + //$record->costo_unitario = $data['costo_unitario'] ?: 0; + $record->setPrezzoUnitario($data['prezzo_unitario'], $data['id_iva']); + $record->setSconto($data['sconto_percentuale'] ?: $data['sconto_unitario'], $data['tipo_sconto']); + + try { + $record->qta = $data['qta']; + } catch (UnexpectedValueException $e) { + throw new InternalError(); + } + } } diff --git a/modules/anagrafiche/src/API/AppV1/Sedi.php b/src/API/App/v1/Sedi.php similarity index 95% rename from modules/anagrafiche/src/API/AppV1/Sedi.php rename to src/API/App/v1/Sedi.php index 7d815b109..711c0f0b4 100644 --- a/modules/anagrafiche/src/API/AppV1/Sedi.php +++ b/src/API/App/v1/Sedi.php @@ -1,8 +1,8 @@ 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']); + + $sessione->orario_inizio = $data['orario_inizio']; + $sessione->orario_fine = $data['orario_fine']; + $sessione->km = $data['km']; + + $id_tipo = $data['id_tipo_intervento']; + $sessione->setTipo($id_tipo); + + $this->aggiornaSessione($sessione, $data); + $sessione->save(); + + return []; + } + + /** + * Aggiorna i dati della sessione sulla base dei dati caricati dall'applicazione. + * + * @param $sessione + * @param $data + */ + protected function aggiornaSessione($sessione, $data) + { + // 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(); + } } diff --git a/modules/stati_intervento/src/API/AppV1/StatiIntervento.php b/src/API/App/v1/StatiIntervento.php similarity index 91% rename from modules/stati_intervento/src/API/AppV1/StatiIntervento.php rename to src/API/App/v1/StatiIntervento.php index d41c1f4e1..88c9a2100 100644 --- a/modules/stati_intervento/src/API/AppV1/StatiIntervento.php +++ b/src/API/App/v1/StatiIntervento.php @@ -1,8 +1,8 @@