Files
CSiCoDB2/app/Models/Commesse_Model.php
T

200 lines
8.5 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');
// 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');
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