Aggiornamento api

This commit is contained in:
Pek5892 2023-09-21 11:59:43 +02:00
parent 26b5d3027e
commit 0e7f05a4fc
10 changed files with 182 additions and 139 deletions

View File

@ -31,75 +31,49 @@ class Anagrafiche extends Resource implements RetrieveInterface, CreateInterface
{
public function retrieve($request)
{
$database = database();
$table = 'an_anagrafiche';
$query = $database->table('an_anagrafiche')
->leftJoin('an_nazioni', 'an_anagrafiche.id_nazione', '=', 'an_nazioni.id')
->select(
'an_anagrafiche.ragione_sociale',
'an_anagrafiche.piva',
'an_anagrafiche.codice_fiscale',
'an_anagrafiche.indirizzo',
'an_anagrafiche.indirizzo2',
'an_anagrafiche.citta',
'an_anagrafiche.cap',
'an_anagrafiche.provincia',
'an_anagrafiche.km',
$database->raw('IFNULL(an_anagrafiche.lat, 0.00) AS latitudine'),
$database->raw('IFNULL(an_anagrafiche.lng, 0.00) AS longitudine'),
$database->raw('an_nazioni.nome AS nazione'),
'an_anagrafiche.telefono',
'an_anagrafiche.fax',
'an_anagrafiche.cellulare',
'an_anagrafiche.email',
'an_anagrafiche.sitoweb',
'an_anagrafiche.note',
'an_anagrafiche.idzona',
'an_anagrafiche.deleted_at'
)->orderBy('an_anagrafiche.ragione_sociale');
$select = [
'an_anagrafiche.*',
'an_nazioni.nome AS nazione'
];
$joins[] = [
'an_nazioni',
'an_anagrafiche.id_nazione',
'an_nazioni.id'
];
$where[] = ['an_anagrafiche.deleted_at', '=', null];
$order['an_anagrafiche.ragione_sociale'] = 'ASC';
if ($request['resource'] != 'anagrafiche') {
$type = 'Cliente';
$query = $query->whereRaw('an_anagrafiche.idanagrafica IN (SELECT idanagrafica FROM an_tipianagrafiche_anagrafiche WHERE idtipoanagrafica = (SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione = ?))', [$type]);
$joins[] = [
'an_tipianagrafiche_anagrafiche',
'an_anagrafiche.idanagrafica',
'an_tipianagrafiche_anagrafiche.idanagrafica'
];
$joins[] = [
'an_tipianagrafiche',
'an_tipianagrafiche_anagrafiche.idtipoanagrafica',
'an_tipianagrafiche.idtipoanagrafica'
];
$where[] = ['an_tipianagrafiche.descrizione', '=', $type];
}
// Filtri da richiesta API
$allow_list = [
'idanagrafica',
'ragione_sociale',
];
$conditions = array_intersect_key((array) $request['where'], array_flip($allow_list));
// Filtro per ID
if (!empty($conditions['idanagrafica'])) {
$query = $query->whereIn('an_anagrafiche.idanagrafica', (array) $conditions['idanagrafica']);
}
// Filtro per Ragione sociale
if (!empty($conditions['ragione_sociale'])) {
$query = $query->where('an_anagrafiche.ragione_sociale', 'like', '%'.$conditions['ragione_sociale'].'%');
}
// Filtri aggiuntivi predefiniti
$module = Modules::get('Anagrafiche');
$additionals = Modules::getAdditionals($module->id, false);
foreach ($additionals['WHR'] as $where) {
$query = $query->whereRaw($where);
}
foreach ($additionals['HVN'] as $having) {
$query = $query->havingRaw($having);
}
$total_count = $query->count();
return [
'results' => $query->skip($request['page'] * $request['length'])
->limit($request['length'])
->get()->toArray(),
'total-count' => $total_count,
'table' => $table,
'select' => $select,
'joins' => $joins,
'where' => $where,
'order' => $order
];
}
public function create($request)
@ -119,14 +93,14 @@ class Anagrafiche extends Resource implements RetrieveInterface, CreateInterface
{
$anagrafica = Anagrafica::find($request['id']);
$result = $anagrafica->delete();
$anagrafica->delete();
}
public function update($request)
{
$data = $request['data'];
$anagrafica = Anagrafica::find($request['id']);
$anagrafica = Anagrafica::find($data['id']);
if (isset($data['ragione_sociale'])) {
$anagrafica->ragione_sociale = $data['ragione_sociale'];

View File

@ -26,8 +26,10 @@ class Sedi extends Resource implements RetrieveInterface
{
public function retrieve($request)
{
$table = 'an_sedi';
return [
'table' => 'an_sedi',
'table' => $table
];
}
}

View File

@ -49,6 +49,9 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C
];
$where[] = ['mg_articoli.deleted_at', '=', NULL ];
$whereraw = [];
$order['mg_articoli.id'] = 'ASC';
return [
@ -56,6 +59,7 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C
'select' => $select,
'joins' => $joins,
'where' => $where,
'whereraw' => $whereraw,
'order' => $order
];
}

View File

@ -26,10 +26,31 @@ class Impianti extends Resource implements RetrieveInterface
{
public function retrieve($request)
{
$query = 'SELECT id, idanagrafica, matricola, nome, descrizione FROM my_impianti';
$table = 'my_impianti';
$select = [
'my_impianti.id',
'my_impianti.idanagrafica',
'my_impianti.matricola',
'my_impianti.nome',
'my_impianti.descrizione'
];
$where = [];
$whereraw = [];
$order = [];
$group = [];
return [
'query' => $query,
'table' => $table,
'select' => $select,
'where' => $where,
'whereraw' => $whereraw,
'order' => $order,
'group' => $group
];
}
}

View File

@ -30,15 +30,22 @@ class Articoli extends Resource implements RetrieveInterface, CreateInterface
{
public function retrieve($request)
{
$query = 'SELECT id, idarticolo AS id_articolo, idintervento AS id_intervento, qta, created_at as data FROM in_righe_interventi WHERE `idarticolo` IS NOT NULL AND `idintervento` = :id_intervento';
$table = 'in_righe_interventi';
$parameters = [
':id_intervento' => $request['id_intervento'],
$select = [
'in_righe_interventi.id',
'in_righe_interventi.idarticolo AS id_articolo',
'in_righe_interventi.idintervento AS id_intervento',
'in_righe_interventi.qta',
'in_righe_interventi.created_at as data'
];
$where = [['in_righe_interventi.idarticolo', '!=', NULL ], ['in_righe_interventi.idintervento', '=', $request['id_intervento']]];
return [
'query' => $query,
'parameters' => $parameters,
'table' => $table,
'select' => $select,
'where' => $where
];
}
@ -58,13 +65,5 @@ class Articoli extends Resource implements RetrieveInterface, CreateInterface
$articolo->save();
}
public function delete($request)
{
$database = database();
$database->query('DELETE FROM `in_righe_interventi` WHERE `idarticolo` IS NOT NULL AND `idintervento` = :id_intervento', [
':id_intervento' => $request['id_intervento'],
]);
}
}

View File

@ -25,6 +25,8 @@ use Models\Upload;
class Firma extends Resource implements UpdateInterface
{
// TODO: Da rivedere con upload in base64
public function update($request)
{
$database = database();

View File

@ -27,15 +27,19 @@ class Impianti extends Resource implements RetrieveInterface, CreateInterface
{
public function retrieve($request)
{
$query = 'SELECT idimpianto AS id_impianto, idintervento AS id_intervento FROM my_impianti_interventi WHERE `idintervento` = :id_intervento';
$table = 'my_impianti_interventi';
$parameters = [
':id_intervento' => $request['id_intervento'],
$select = [
'idimpianto AS id_impianto',
'idintervento AS id_intervento'
];
$where[] = ['my_impianti_interventi.idintervento', '=', $request['id_intervento']];
return [
'query' => $query,
'parameters' => $parameters,
'table' => $table,
'select' => $select,
'where' => $where
];
}
@ -44,14 +48,13 @@ class Impianti extends Resource implements RetrieveInterface, CreateInterface
$data = $request['data'];
$id_record = $data['id_intervento'];
$database = database();
$database->query('DELETE FROM my_impianti_interventi WHERE `idintervento` = :id_intervento', [
database()->query('DELETE FROM my_impianti_interventi WHERE `idintervento` = :id_intervento', [
':id_intervento' => $id_record,
]);
$impianti = $data['impianti'];
foreach ($impianti as $impianto) {
$database->insert('my_impianti_interventi', [
database()->insert('my_impianti_interventi', [
'idintervento' => $id_record,
'idimpianto' => $impianto,
]);

View File

@ -35,58 +35,58 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface,
public function retrieve($request)
{
// Periodo per selezionare interventi
$today = date('Y-m-d');
$period_end = date('Y-m-d', strtotime($today.' +7 days'));
$period_start = date('Y-m-d', strtotime($today.' -2 months'));
$user = Auth::user();
// AND `in_statiintervento`.`is_completato`=0
$query = "SELECT `in_interventi`.`id`,
`in_interventi`.`codice`,
`in_interventi`.`data_richiesta`,
`in_interventi`.`richiesta`,
`in_interventi`.`descrizione`,
`in_interventi`.`idtipointervento`,
`in_interventi`.`idanagrafica`,
`in_interventi`.`idsede_destinazione`,
`in_interventi`.`idstatointervento`,
`in_interventi`.`informazioniaggiuntive`,
`in_interventi`.`idclientefinale`,
`in_interventi`.`firma_file`,
IF(firma_data = '0000-00-00 00:00:00', '', firma_data) AS `firma_data`,
`in_interventi`.firma_nome,
(SELECT GROUP_CONCAT(CONCAT(my_impianti.matricola, ' - ', my_impianti.nome) SEPARATOR ', ') FROM (my_impianti_interventi INNER JOIN my_impianti ON my_impianti_interventi.idimpianto=my_impianti.id) WHERE my_impianti_interventi.idintervento = `in_interventi`.`id`) AS `impianti`,
(SELECT MAX(`orario_fine`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) AS `data`,
(SELECT GROUP_CONCAT(DISTINCT ragione_sociale SEPARATOR ', ') FROM `in_interventi_tecnici` INNER JOIN `an_anagrafiche` ON `in_interventi_tecnici`.`idtecnico` = `an_anagrafiche`.`idanagrafica` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) AS `tecnici`,
`in_statiintervento`.`colore` AS `bgcolor`,
`in_statiintervento`.`descrizione` AS `stato`,
`in_interventi`.`idtipointervento` AS `tipo`
FROM `in_interventi`
INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento` = `in_statiintervento`.`idstatointervento`
INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
LEFT JOIN `an_sedi` ON `in_interventi`.`idsede_destinazione` = `an_sedi`.`id`
WHERE EXISTS(SELECT `orario_fine` FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` AND `orario_fine` BETWEEN :period_start AND :period_end AND idtecnico LIKE :idtecnico)";
$table = 'in_interventi';
// Se sono l'admin posso vedere tutte le attività
$id_anagrafica = $user->is_admin ? '%' : $user->idanagrafica;
$query .= '
HAVING 2=2
ORDER BY `in_interventi`.`data_richiesta` DESC';
$parameters = [
':period_end' => $period_end,
':period_start' => $period_start,
':idtecnico' => $id_anagrafica,
$select = [
'in_interventi.*',
'MAX(in_interventi_tecnici.orario_fine) as data',
'GROUP_CONCAT(DISTINCT b.ragione_sociale SEPARATOR \', \') AS tecnici',
'in_statiintervento.descrizione AS stato'
];
$module = Modules::get('Interventi');
$joins[] = [
'in_statiintervento',
'in_interventi.idstatointervento',
'in_statiintervento.idstatointervento'
];
$query = Modules::replaceAdditionals($module->id, $query);
$joins[] = [
'an_anagrafiche',
'in_interventi.idanagrafica',
'an_anagrafiche.idanagrafica'
];
$joins[] = [
'in_interventi_tecnici',
'in_interventi_tecnici.idintervento',
'in_interventi.id'
];
$joins[] = [
'an_anagrafiche as b',
'in_interventi_tecnici.idtecnico',
'b.ragione_sociale'
];
$where = [];
if(!$user->is_admin){
$where[] = ['in_interventi_tecnici.idtecnico', '=', $user->idanagrafica];
}
$whereraw = [];
$group = 'in_interventi.id';
return [
'query' => $query,
'parameters' => $parameters,
'table' => $table,
'select' => $select,
'joins' => $joins,
'where' => $where,
'whereraw' => $whereraw,
'group' => $group,
];
}

View File

@ -75,7 +75,7 @@ class Manager
$where = [];
$order = [];
$whereraw = [];
// Selezione campi personalizzati
// Esempio:
// display=[id,ragione_sociale,telefono]
@ -137,6 +137,7 @@ class Manager
'order' => $order,
'page' => $page,
'length' => $length,
'whereraw' => $whereraw
]);
$response = $this->getResponse($data);
@ -144,7 +145,14 @@ class Manager
$table = $response['table'];
$joins = $response['joins'];
$where = array_merge($where, $response['where']);
$group = $response['group'];
if(!empty($response['where'])){
$where = array_merge($where, $response['where']);
}
if(!empty($response['whereraw'])){
$whereraw = $response['whereraw'];
}
if (empty($select)) {
$select = $response['select'] ?: $select;
@ -166,20 +174,36 @@ class Manager
$where['#created_at'] = 'created_at >= '.prepare($request['crd']);
}
$query = $database->table($table);
// Query per ottenere le informazioni
$query = $database->table($table)->select($select);
foreach ($select as $s) {
$query->selectRaw($s);
}
foreach ($joins as $join) {
$query->leftJoin($join[0], $join[1], $join[2]);
}
$query->where($where);
if (!empty($where)) {
$query->where($where);
}
foreach ($whereraw as $w) {
$query->whereRaw($w);
}
if (!empty($group)) {
$query->groupBy($group);
}
$count = $query->count();
// Composizione query finale
$response = [];
$response['records'] = $database->select($table, $select, $joins, $where, $order, [$page * $length, $length]);
$response['records'] = $database->select($table, $select, $joins, $where, $order, [$page * $length, $length], null, $group, $whereraw);
$response['total-count'] = $count;
}

View File

@ -451,7 +451,7 @@ class Database extends Util\Singleton
*
* @return string|array
*/
public function select($table, $array = [], $joins = [], $conditions = [], $order = [], $limit = null, $return = false)
public function select($table, $array = [], $joins = [], $conditions = [], $order = [], $limit = null, $return = false, $group = [], $whereraw = [])
{
if (
!is_string($table) ||
@ -473,8 +473,17 @@ class Database extends Util\Singleton
foreach ($joins as $join) {
$statement = $statement->leftJoin($join[0], $join[1], $join[2]);
}
$statement->where($conditions)->select($select);
foreach ($whereraw as $w) {
$statement->whereRaw($w);
}
$statement->where($conditions);
foreach ($select as $s) {
$statement->selectRaw($s);
}
// Impostazioni di ordinamento
if (!empty($order)) {
@ -490,6 +499,11 @@ class Database extends Util\Singleton
}
}
// Gruppo
if (!empty($group)) {
$statement = $statement->groupBy($group);
}
// Eventuali limiti
if (!empty($limit)) {
$offset = is_array($limit) ? $limit[0] : null;