198 lines
8.3 KiB
PHP
198 lines
8.3 KiB
PHP
<?php namespace App\Models;
|
|
|
|
|
|
/*
|
|
|
|
CREATE TABLE IF NOT EXISTS `Commesse` (
|
|
`coIDcommessa` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificativo univoco della commessa',
|
|
`coNome` varchar(32) NOT NULL COMMENT 'Nome univoco della commessa o codice identificativo della commessa',
|
|
`coIDcliente` int(11) NOT NULL COMMENT 'Codice identificativo del cliente a cui la commessa è associata',
|
|
`coDescrizione` text NOT NULL COMMENT 'Descrizione della commessa, cioè del lavoro che essa richiede',
|
|
`coIDstatoCommessa` varchar(16) NOT NULL COMMENT 'Stato a cui la commessa è associata, ne permette la filtrazione in modo conveniente',
|
|
`coCreatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp di inserimento del record nel database',
|
|
`coUpdatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp in cui il record è stato aggiornato',
|
|
`coDeletedAt` timestamp NULL DEFAULT NULL COMMENT 'Timestamp in cui il record è stato virtualmente cancellato (senza delete reale)',
|
|
PRIMARY KEY (`coIDcommessa`),
|
|
UNIQUE KEY `coIDcommessa` (`coIDcommessa`),
|
|
UNIQUE KEY `coNome` (`coNome`),
|
|
KEY `idx_Clienti_Used` (`coIDstatoCommessa`,`coModificatoIl`,`coNome`),
|
|
KEY `FK_Commesse-Clienti` (`coIDcliente`),
|
|
KEY `FK_Commesse-StatiCommessa` (`coIDstatoCommessa`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=197 DEFAULT CHARSET=utf8 COMMENT='Elenco delle Commesse';
|
|
|
|
Fields:
|
|
Tab: Commesse = ['coIDcommessa', 'coNome', 'coIDcliente', 'coDescrizione', 'coIDstatoCommessa', 'coCreatedAt', 'coUpdatedAt', 'coDeletedAt'];
|
|
|
|
*/
|
|
|
|
|
|
use CodeIgniter\Model;
|
|
|
|
|
|
|
|
class Commesse_Model extends Model{
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
// Property
|
|
|
|
|
|
protected $table = 'Commesse';
|
|
protected $primaryKey = 'coIDcommessa';
|
|
|
|
protected $returnType = 'App\Entities\Commessa';
|
|
//protected $returnType = 'array';
|
|
|
|
protected $allowedFields = ['coNome', 'coIDcliente', 'coDescrizione', 'coIDstatoCommessa'];
|
|
|
|
protected $useSoftDeletes = true;
|
|
protected $useTimestamps = true;
|
|
protected $createdField = 'coCreatedAt';
|
|
protected $updatedField = 'coUpdatedAt';
|
|
protected $deletedField = 'coDeletedAt';
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
// Events
|
|
|
|
|
|
//protected $beforeInsert = ['beforeInsert'];
|
|
//protected $afterInsert = ['afterInsert'];
|
|
//protected $beforeUpdate = ['beforeUpdate'];
|
|
//protected $afterUpdate = ['afterUpdate'];
|
|
//protected $beforeDelete = ['beforeDelete'];
|
|
//protected $afterDelete = ['afterDelete'];
|
|
//protected $afterFind = ['afterFind'];
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
// Methods
|
|
|
|
|
|
|
|
// Ritorna le coppie val,txt per compilare il select delle commesse in base al filtro attivo sugli orari
|
|
public function get_select_on_orari(){
|
|
// Tab: Commesse = ['coIDcommessa', 'coNome', 'coIDcliente', 'coDescrizione', 'coIDstatoCommessa', 'coModificatoIl', 'coCreatedAt', 'coUpdatedAt', 'coDeletedAt'];
|
|
|
|
// Creo la string SQL:
|
|
// - join fra le tabelle
|
|
$sql = 'SELECT Commesse.coIDcommessa AS val, Commesse.coNome AS txt FROM Commesse, Orari WHERE Commesse.coIDcommessa=Orari.orIDcommessa';
|
|
// - elimino le commesse chiuse:
|
|
$sql .= ' AND coIDstatoCommessa<>\'Chiusa\'';
|
|
// - 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 Orari.orIDlavoratore=\'' . session()->get('filter_lavoratore') . '\'';
|
|
}
|
|
// - Applico il filtro sulla tipologia di orario
|
|
if ((null !== session()->get('filter_tipo_ore')) && (session()->get('filter_tipo_ore')!='-1')) {
|
|
$sql .= ' AND Orari.orIDTipoOre=\'' . session()->get('filter_tipo_ore') . '\'';
|
|
}
|
|
// - Non applico il filtro sulla commessa:
|
|
if ((null !== session()->get('filter_commessa')) && (session()->get('filter_commessa')!='-1')) {
|
|
$sql .= ' AND Orari.orIDcommessa=\'' . session()->get('filter_commessa') . '\'';
|
|
}
|
|
// - 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 delle commesse in base al filtro attivo sulle spese
|
|
public function get_select_on_spese(){
|
|
|
|
// Creo la string SQL:
|
|
// - join fra le tabelle\
|
|
$sql = 'SELECT Commesse.coIDcommessa AS val, CONCAT(Commesse.coNome, \' : \', Commesse.coDescrizione) AS txt FROM Commesse, Spese WHERE Commesse.coIDcommessa=Spese.spIDcommessa';
|
|
// - elimino le commesse chiuse:
|
|
$sql .= ' AND coIDstatoCommessa<>\'Chiusa\'';
|
|
// - 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 Spese.spIDlavoratore=\'' . session()->get('filter_lavoratore') . '\'';
|
|
}
|
|
// - Applico il filtro sulla tipologia di spesa
|
|
if ((null !== session()->get('filter_rimborso')) && (session()->get('filter_rimborso')!='-1')) {
|
|
$sql .= ' AND Spese.spDaRimborsare=\'' . session()->get('filter_rimborso') . '\'';
|
|
}
|
|
// - Non applico il filtro sulla commessa:
|
|
if ((null !== session()->get('filter_commessa')) && (session()->get('filter_commessa')!='-1')) {
|
|
$sql .= ' AND Spese.spIDcommessa=\'' . session()->get('filter_commessa') . '\'';
|
|
}
|
|
// - 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 delle commesse
|
|
public function get_select(){
|
|
$query = $this->query('SELECT coIDcommessa AS val, CONCAT(coNome, \' : \', coDescrizione) AS txt FROM Commesse WHERE coIDstatoCommessa<>\'Chiusa\' ORDER BY coUpdatedAt DESC');
|
|
return $query->getResult();
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
|
|
|
// Ritorna i dati per il report della commessa indicata
|
|
public function get_ReportByCommessa($ID){
|
|
$query = $this->query("
|
|
SELECT
|
|
coIDcommessa AS ID,
|
|
coNome AS Nome,
|
|
(SELECT clNome FROM `Clienti` WHERE clIDcliente=coIDcliente) AS Cliente,
|
|
coDescrizione AS Descrizione,
|
|
(SELECT sum(stStima) FROM `Stime` WHERE stIDcommessa=coIDcommessa) AS Stima,
|
|
(SELECT sum(orOre) FROM `Orari` WHERE orIDcommessa=coIDcommessa) AS Usate,
|
|
coIDstatoCommessa AS Stato,
|
|
coCreatedAt AS CreatedAt,
|
|
coUpdatedAt AS UpdatedAt,
|
|
coDeletedAt AS DeletedAt
|
|
FROM `Commesse`
|
|
WHERE coIDcommessa='$ID'
|
|
");
|
|
return $query->getResult();
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
|
|
|
}//class Commesse_Model
|