Files
CSiCoDB2/app/Models/Lavoratori_Model.php
2026-05-06 11:04:41 +02:00

201 lines
7.7 KiB
PHP

<?php namespace App\Models;
/*
CREATE TABLE IF NOT EXISTS `Lavoratori` (
`lvIDlavoratore` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificativo univoco del lavoratore',
`lvNome` varchar(64) NOT NULL COMMENT 'Nome anagrafico del lavoratore',
`lvCognome` varchar(64) NOT NULL COMMENT 'Cognome anagrfico del lavoratore',
`lvMail` varchar(128) NOT NULL COMMENT 'Indirizzo mail assegnato al al lavoratore',
`lvLevel` int(1) NOT NULL DEFAULT '1' COMMENT 'Livello di accesso alla webapp. 0=Guest; 1=Oper; 2=Inven; 3=Admin; 4=Root.',
`lvRimborsoKm` float NOT NULL DEFAULT '0' COMMENT 'Valore del rimborso kilometrico corrisposto al lavoratore',
`lvNickname` varchar(8) NOT NULL COMMENT 'Nickname distindivo del lavoratore',
`lvPassword` varchar(255) NOT NULL COMMENT 'Codice Hash della password editata dal lavoratore',
`lvCreatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp di inserimento del record nel database',
`lvUpdatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp in cui il record è stato aggiornato',
`lvDeletedAt` timestamp NULL DEFAULT NULL COMMENT 'Timestamp in cui il record è stato virtualmente cancellato (senza delete reale)',
PRIMARY KEY (`lvIDlavoratore`),
UNIQUE KEY `lvIDlavoratore` (`lvIDlavoratore`),
UNIQUE KEY `lvNikname` (`lvNickname`,`lvDeletedAt`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COMMENT='Elenco dei Lavoratori della CSiCo (CSiCoBoys)';
Fields:
Tab: Lavoratori = ['lvIDlavoratore', 'lvNome', 'lvCognome', 'lvMail', 'lvLevel', 'lvRimborsoKm', 'lvNickname', 'lvPassword', 'lvCreatedAt', 'lvUpdatedAt', 'lvDeletedAt'];
*/
use CodeIgniter\Model;
class Lavoratori_Model extends Model{
//--------------------------------------------------------------------
// Property
protected $table = 'Lavoratori';
protected $primaryKey = 'lvIDlavoratore';
protected $returnType = 'App\Entities\Lavoratore';
//protected $returnType = 'array';
protected $allowedFields = ['lvNome', 'lvCognome', 'lvMail', 'lvLevel', 'lvRimborsoKm', 'lvNickname', 'lvPassword', 'ccStato'];
protected $useSoftDeletes = true;
protected $useTimestamps = true;
protected $createdField = 'lvCreatedAt';
protected $updatedField = 'lvUpdatedAt';
protected $deletedField = 'lvDeletedAt';
//--------------------------------------------------------------------
// Events
protected $beforeInsert = ['beforeInsert'];
//protected $afterInsert = ['afterInsert'];
protected $beforeUpdate = ['beforeUpdate'];
//protected $afterUpdate = ['afterUpdate'];
//protected $beforeDelete = ['beforeDelete'];
//protected $afterDelete = ['afterDelete'];
//protected $afterFind = ['afterFind'];
//--------------------------------------------------------------------
// Methods
protected function beforeInsert(array $data){
$data = $this->passwordHash($data);
return $data;
}
protected function beforeUpdate(array $data){
$data = $this->passwordHash($data);
return $data;
}
protected function passwordHash(array $data){
if(isset($data['data']['lvPassword']))
$data['data']['lvPassword'] = password_hash($data['data']['lvPassword'], PASSWORD_DEFAULT);
return $data;
}
//--------------------------------------------------------------------
/**
* Ritorna le coppie val,txt per compilare il select dei lavoratori, in base al filtro attivo
*/
public function get_select_on_orari(){
// Creo la string SQL:
// - join fra le tabelle
$sql = 'SELECT Lavoratori.lvIDlavoratore AS val, Lavoratori.lvNickname AS txt FROM Lavoratori, Orari WHERE Lavoratori.lvIDlavoratore=Orari.orIDlavoratore';
// - Filtro fra i lavoratori Guest o i cancellati:
$sql .= " AND lvDeletedAt IS null AND lvLevel>0";
// - Applico il filtro temporale:
$sql .= ' AND Orari.orData>=\'' . session()->get('filter_dal') . '\' AND Orari.orData<=\'' . session()->get('filter_al') . " 23:59:59" . '\'';
// - applico eventuale filtro per lavoratore
if ((null !== session()->get('filter_lavoratore')) && (session()->get('filter_lavoratore')!='-1')) {
$sql .= ' AND Lavoratori.lvIDlavoratore=\'' . session()->get('filter_lavoratore') . '\'';
}
// - applico eventuale filtro per commessa
if ((null !== session()->get('filter_commessa')) && (session()->get('filter_commessa')!='-1')) {
$sql .= ' AND Orari.orIDcommessa=\'' . session()->get('filter_commessa') . '\'';
}
// - applico eventuale filtro per tipologia di ora:
if ((null !== session()->get('filter_tipo_ore')) && (session()->get('filter_tipo_ore')!='-1')) {
$sql .= ' AND Orari.orIDTipoOre=\'' . session()->get('filter_tipo_ore') . '\'';
}
// - Raggruppo i risultati:
$sql .= ' GROUP BY(txt)';
// - Ordino in modo decrescente sul numero di presenze e in modo alfabetico.
$sql .= ' ORDER BY COUNT(val) DESC, txt';
// Creo la query:
$query = $this->query($sql);
// Eseguo la query sul DB:
return $query->getResult();
} // function select_on_orari
//--------------------------------------------------------------------
// Ritorna le coppie val,txt per compilare il select dei lavoratori, in base al filtro attivo
public function get_select_on_spese(){
// Creo la string SQL:
// - join fra le tabelle
$sql = 'SELECT Lavoratori.lvIDlavoratore AS val, Lavoratori.lvNickname AS txt FROM Lavoratori, Spese WHERE Lavoratori.lvIDlavoratore=Spese.spIDlavoratore';
// - Filtro fra i lavoratori Guest o i cancellati:
$sql .= " AND lvDeletedAt IS null AND lvLevel>0";
// - Applico il filtro temporale:
$sql .= ' AND Spese.spData>=\'' . session()->get('filter_dal') . '\' AND Spese.spData<=\'' . session()->get('filter_al') . " 23:59:59" . '\'';
// - applico eventuale filtro per lavoratore
if ((null !== session()->get('filter_lavoratore')) && (session()->get('filter_lavoratore')!='-1')) {
$sql .= ' AND Lavoratori.lvIDlavoratore=\'' . session()->get('filter_lavoratore') . '\'';
}
// - applico eventuale filtro per commessa
if ((null !== session()->get('filter_commessa')) && (session()->get('filter_commessa')!='-1')) {
$sql .= ' AND Spese.spIDcommessa=\'' . session()->get('filter_commessa') . '\'';
}
// - applico eventuale filtro per tipologia di rimborso:
if ((null !== session()->get('filter_rimborso')) && (session()->get('filter_rimborso')!='-1')) {
$sql .= ' AND Spese.spDaRimborsare=\'' . session()->get('filter_rimborso') . '\'';
}
// - Raggruppo i risultati:
$sql .= ' GROUP BY(txt)';
// - Ordino in modo decrescente sul numero di presenze e in modo alfabetico.
$sql .= ' ORDER BY COUNT(val) DESC, txt';
// Creo la query:
$query = $this->query($sql);
// Eseguo la query sul DB:
return $query->getResult();
} // function select_on_spese
//--------------------------------------------------------------------
/**
* Ritorna le coppie val,txt per compilare il select dei lavoratori
*/
public function get_select() {
// Filtro fra i lavoratori cancellati e quelli solo guest:
$query = $this->query('SELECT lvIDlavoratore AS val, lvNickname AS txt FROM Lavoratori WHERE lvDeletedAt IS null AND lvLevel>0 ORDER BY lvNickname');
return $query->getResult();
}//function get_select
//--------------------------------------------------------------------
}//class Lavoratori_Model