201 lines
7.7 KiB
PHP
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
|
|
|
|
|