2026-05-06 11:04:41 +02:00
<? 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 (){
2026-05-06 11:27:14 +02:00
//$query = $this->query('SELECT coIDcommessa AS val, CONCAT(coNome, \' : \', coDescrizione) AS txt FROM Commesse WHERE coIDstatoCommessa<>\'Chiusa\' ORDER BY coUpdatedAt DESC');
// 2026/05/06 su richiesta di Irene, lascio selezionabili le commesse chiuse.
$query = $this -> query ( 'SELECT coIDcommessa AS val, CONCAT(coNome, \' : \', coDescrizione) AS txt FROM Commesse ORDER BY coUpdatedAt DESC' );
2026-05-06 11:04:41 +02:00
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