Files
2026-05-06 11:04:41 +02:00

557 lines
18 KiB
PHP

<?php namespace App\Controllers;
use App\Models\Lavoratori_Model;
use App\Models\TipoOre_Model;
use App\Models\TipiWork_Model;
use App\Models\Orari_Model;
use App\Models\Spese_Model;
use App\Models\Commesse_Model;
use App\Models\CreditCardEvents_Model;
use App\Models\CreditCards_Model;
use App\Models\CSiCoCars_Model;
use App\Models\CSiCoCarEvents_Model;
use App\Models\SIMs_Model;
use App\Models\SIMEvents_Model;
class Dashboard extends BaseController {
//--------------------------------------------------------------------
public function index() {
return $this->home();
}//function index
//--------------------------------------------------------------------
public function home() {
helper(['tools','form']);
$data['tab'] = 'home';
// Verifico sessione e livello:
if (!CheckLevel(0)) { return redirect()->to('/Lavoratori/login'); }
$lav = session()->get('lavoratore');
// // Gli utenti Guest non possono inserire valori e per sicurezza visualizzo una pagina apposta.
// if ($lav->lvLevel==1){ return redirect()->to('/dashboard/home'); }
// Gli utenti guest non possono inserire ore, quindi per loro non gestisco le
// Gestione POST
if ($this->request->getMethod() == 'post') {
// verifico chi ha fatto il POST (ore o spese):
if(isset($_POST['PBinsetrOraPOST'])) {
// POST di aggiunta dell'orario e quindi verifico i dati dell'orario e se validi lo inserisco.
// Regole per validare i campi introdotti nel form:
$rules = [
'o_IDcommessa' => 'trim|required',
'o_Data' => 'trim|required',
'o_Ore' => 'trim|required',
'o_IDTipoOre' => 'trim|required',
'o_Descrizione' => 'trim|required|min_length[8]',
];
// analisi della validazione
if (! $this->validate($rules)) {
$data['validation'] = $this->validator;
session()->setFlashdata('warning', $data['validation']->listErrors());
}else{
// validazione passata
// Preparo i dati per l'inserimento
$newData = [
'orIDcommessa' => $this->request->getVar('o_IDcommessa'),
'orIDlavoratore' => $lav->lvIDlavoratore,
'orData' => $this->request->getVar('o_Data'),
'orOre' => $this->request->getVar('o_Ore'),
'orIDTipoOre' => $this->request->getVar('o_IDTipoOre'),
'orDescrizione' => $this->request->getVar('o_Descrizione'),
];
$modelOrari = new Orari_Model();
if ($modelOrari->save($newData)) {
session()->setFlashdata('success', 'Record inserito con successo sul DB');
UpdateCommessa($newData['orIDcommessa']);
//return redirect()->to('/dashboard/home');
} else {
session()->setFlashdata('danger', 'Errore durante l\'inserimento del record nel DB.');
}
}// analisi validazione
} // if PBinsetrOraPOST
if(isset($_POST['PBinsetrSpesaPOST'])) {
// POST di aggiunta della spesa e quindi verifico i dati della spesa e se validi lo inserisco.
// Regole per validare i campi introdotti nel form:
$rules = [
's_IDcommessa' => 'trim|required',
's_Data' => 'trim|required',
's_Importo' => 'trim|required',
's_DaRimborsare' => 'trim|required',
's_Descrizione' => 'trim|required|min_length[8]',
];
// analisi della validazione
if (! $this->validate($rules)) {
$data['validation'] = $this->validator;
session()->setFlashdata('warning', $data['validation']->listErrors());
}else{
// validazione passata
// Preparo i dati per l'inserimento
$newData = [
'spIDcommessa' => $this->request->getVar('s_IDcommessa'),
'spIDlavoratore' => $lav->lvIDlavoratore,
'spData' => $this->request->getVar('s_Data'),
'spImporto' => $this->request->getVar('s_Importo'),
'spDaRimborsare' => $this->request->getVar('s_DaRimborsare'),
'spDescrizione' => $this->request->getVar('s_Descrizione'),
];
$modelOrari = new Spese_Model();
if ($modelOrari->save($newData)) {
session()->setFlashdata('success', 'Record inserito con successo sul DB');
UpdateCommessa($newData['spIDcommessa']);
//return redirect()->to('/dashboard/home');
} else {
session()->setFlashdata('danger', 'Errore durante l\'inserimento del record nel DB.');
}
}// analisi validazione
} // if PBinsetrSpesaPOST
}// Gestione POST
// Ricavo riepilogo ultimi orari inseriti
$modelCommesse = new Commesse_Model();
$data['orari'] = $modelCommesse->join('Orari', 'Commesse.coIDcommessa = Orari.orIDcommessa')
->where('orIDlavoratore', $lav->lvIDlavoratore)
->orderBy('orIDorario', 'DESC')
->findAll(3);
// Ricavo ultime spese inserite
$data['spese'] = $modelCommesse->join('Spese', 'Commesse.coIDcommessa = Spese.spIDcommessa')
->where('spIDlavoratore', $lav->lvIDlavoratore)
->orderBy('spIDspesa', 'DESC')
->findAll(3);
// Ricavo i dati per il select delle tipologie di orario:
$modelTipoOre = new TipoOre_Model();
$data['select_tipo_ore'] = $modelTipoOre->get_select();
// Ricavo i dati per il select delle commesse:
$data['select_commesse'] = $modelCommesse->get_select();
// Ricavo i dati per il select dei lavoratori:
$modelLavoratori = new Lavoratori_Model();
$data['select_lavoratori'] = $modelLavoratori->get_select();
return view('pages/home', $data);
}//function home
//--------------------------------------------------------------------
public function orari() {
helper(['tools','form']);
$data['tab'] = 'orari';
// Verifico sessione e livello:
if (!CheckLevel(1)) { return redirect()->to('/dashboard'); }
// Ricavo le ore dell'utente:
// Tab: Orari = ['orIDorario', 'orIDcommessa', 'orIDlavoratore', 'orData', 'orOre', 'orIDTipoOre', 'orIDTipoWork', 'orDescrizione'];
// Tab: Lavoratori = ['lvIDlavoratore', 'lvNome', 'lvCognome', 'lvMail', 'lvLevel', 'lvRimborsoKm', 'lvNickname', 'lvPassword', 'lvCreatedAt', 'lvUpdatedAt', 'lvDeletedAt'];
// Tab: Commesse = ['coIDcommessa', 'coNome', 'coIDcliente', 'coDescrizione', 'coIDstatoCommessa', 'coModificatoIl', 'coCreatedAt', 'coUpdatedAt', 'coDeletedAt'];
$model = new Orari_Model();
$model->join('Lavoratori', 'Lavoratori.lvIDlavoratore = Orari.orIDlavoratore');
$model->join('Commesse', 'Commesse.coIDcommessa = Orari.orIDcommessa');
// Costruisco la query per selezionare le ore da mostrare:
// - applico il filtro sull'intervallo temporale:
$model->where('orData >=', session()->get('filter_dal'))
->where('orData <=', session()->get('filter_al') . " 23:59:59");
// - applico eventuale filtro per lavoratore
if (session()->filter_lavoratore!='-1') { $model->where('orIDlavoratore', session()->get('filter_lavoratore')); }
// - applico eventuale filtro per commessa
if (session()->filter_commessa!='-1') { $model->where('orIDcommessa', session()->get('filter_commessa')); }
// - applico eventuale filtro per tipologia di ora:
if (session()->filter_tipo_ore!='-1') { $model->where('orIDTipoOre', session()->get('filter_tipo_ore')); }
// imposto l'ordinamento richiesto:
CheckSort('orari',true);
$data['sortCol'] = session()->get('sort')['col'];
$data['sortDir'] = session()->get('sort')['dir'];
$model->orderBy($data['sortCol'], $data['sortDir']);
// eseguo la query con paginazione:
$data['dataset'] = $model->paginate(session()->get('pager_num'));
$data['pager'] = $model->pager;
// Ricavo i dati per il select delle commesse:
$modelCommesse = new Commesse_Model();
$data['select_commesse'] = $modelCommesse->get_select_on_orari();
// Ricavo i dati per il select delle tipologie di orario:
$modelTipoOre = new TipoOre_Model();
$data['select_tipo_ore'] = $modelTipoOre->get_select_on_orari();
// Ricavo i dati per il select dei lavoratori:
$modelLavoratori = new Lavoratori_Model();
$data['select_lavoratori'] = $modelLavoratori->get_select_on_orari();
// Ricavo i dati per il select delle tipologie di lavoro:
$modelTipoWork = new TipiWork_Model();
$data['select_tipo_work'] = $modelTipoWork->get_select_on_orari();
return view('pages/orari', $data);
}//function orari
//--------------------------------------------------------------------
public function spese() {
helper(['tools','form']);
$data['tab'] = 'spese';
// Verifico sessione e livello:
if (!CheckLevel(1)) { return redirect()->to('/dashboard'); }
// Ricavo le ore dell'utente:
// Tab: Spese = ['spIDspesa', 'spIDcommessa', 'spIDlavoratore', 'spImporto', 'spDaRimborsare', 'spDescrizione', 'spData'];
// Tab: Lavoratori = ['lvIDlavoratore', 'lvNome', 'lvCognome', 'lvMail', 'lvLevel', 'lvRimborsoKm', 'lvNickname', 'lvPassword', 'lvCreatedAt', 'lvUpdatedAt', 'lvDeletedAt'];
// Tab: Commesse = ['coIDcommessa', 'coNome', 'coIDcliente', 'coDescrizione', 'coIDstatoCommessa', 'coModificatoIl', 'coCreatedAt', 'coUpdatedAt', 'coDeletedAt'];
$model = new Spese_Model();
$model->join('Lavoratori', 'Lavoratori.lvIDlavoratore = Spese.spIDlavoratore');
$model->join('Commesse', 'Commesse.coIDcommessa = Spese.spIDcommessa');
// Costruisco la query per selezionare le ore da mostrare:
// - applico il filtro sull'intervallo temporale:
$model->where('spData >=', session()->get('filter_dal'))
->where('spData <=', session()->get('filter_al') . " 23:59:59");
// - applico eventuale filtro per lavoratore
if (session()->filter_lavoratore!='-1') { $model->where('spIDlavoratore', session()->get('filter_lavoratore')); }
// - applico eventuale filtro per commessa
if (session()->filter_commessa!='-1') { $model->where('coIDcommessa', session()->get('filter_commessa')); }
// - applico eventuale filtro per rimborso:
if (session()->filter_rimborso!='-1') { $model->where('spDaRimborsare', session()->get('filter_rimborso')); }
// imposto l'ordinamento richiesto:
CheckSort('spese',true);
$data['sortCol'] = session()->get('sort')['col'];
$data['sortDir'] = session()->get('sort')['dir'];
$model->orderBy($data['sortCol'], $data['sortDir']);
// eseguo la query con paginazione:
$data['dataset'] = $model->paginate(session()->get('pager_num'));
$data['pager'] = $model->pager;
// Ricavo i dati per il select delle commesse:
$modelCommesse = new Commesse_Model();
$data['select_commesse'] = $modelCommesse->get_select_on_spese();
// Ricavo i dati per il select dei lavoratori:
$modelLavoratori = new Lavoratori_Model();
$data['select_lavoratori'] = $modelLavoratori->get_select_on_spese();
return view('pages/spese', $data);
}//function spese
//--------------------------------------------------------------------
public function archivio() {
helper(['tools','form']);
$data['tab'] = 'archivio';
// Verifico sessione e livello:
if (!CheckLevel(1)) { return redirect()->to('/dashboard'); }
return view('pages/archivio', $data);
}//function archivio
//--------------------------------------------------------------------
public function cars() {
helper(['tools','form']);
$data['tab'] = 'cars';
// Verifico sessione e livello:
if (!CheckLevel(1)) { return redirect()->to('/dashboard'); }
// Ricavo le car:
// Tab: CSiCoCars = ['caIDcar', 'caTarga', 'caDescrizione', 'caDataAssicurazione', 'caTipoGomme', 'caCreatedAt', 'caUpdatedAt', 'caStato', 'caDeletedAt'];
$model = new CSiCoCars_Model();
// Costruisco la query per selezionare le macchine da mostrare:
// - applico il filtro sullo stato:
if (session()->filter_caStato!='-1') { $model->where('caStato', session()->get('filter_caStato')); }
// imposto l'ordinamento richiesto:
CheckSort('cars',true);
$data['sortCol'] = session()->get('sort')['col'];
$data['sortDir'] = session()->get('sort')['dir'];
$model->orderBy($data['sortCol'], $data['sortDir']);
// eseguo la query con paginazione:
$data['dataset'] = $model->paginate(session()->get('pager_num'));
$data['pager'] = $model->pager;
return view('pages/cars', $data);
}//function cars
//--------------------------------------------------------------------
public function credit() {
helper(['tools','form']);
$data['tab'] = 'credit';
// Verifico sessione e livello:
if (!CheckLevel(1)) { return redirect()->to('/dashboard'); }
// Ricavo le carte:
// Tab: CreditCards = ['ccIDcard', 'ccNumero', 'ccDescrizione', 'ccScadeIl', 'ccPIN', 'ccCreatedAt', 'ccUpdatedAt', ', 'ccStato', 'ccDeletedAt'];
$model = new CreditCards_Model();
// Costruisco la query per selezionare le ore da mostrare:
// - applico il filtro sullo stato:
if (session()->filter_ccStato!='-1') { $model->where('ccStato', session()->get('filter_ccStato')); }
// imposto l'ordinamento richiesto:
CheckSort('credit',true);
$data['sortCol'] = session()->get('sort')['col'];
$data['sortDir'] = session()->get('sort')['dir'];
$model->orderBy($data['sortCol'], $data['sortDir']);
// eseguo la query con paginazione:
$data['dataset'] = $model->paginate(session()->get('pager_num'));
$data['pager'] = $model->pager;
return view('pages/credit', $data);
}//function credit
//--------------------------------------------------------------------
public function sims() {
helper(['tools','form']);
$data['tab'] = 'sims';
// Verifico sessione e livello:
if (!CheckLevel(1)) { return redirect()->to('/dashboard'); }
// Ricavo le sim:
// SIMs = ['smIDsim', 'smNumero', 'smPIN', 'smPUK', 'smDescrizione', 'smCredito', 'smCreatedAt', 'smUpdatedAt', 'smStato', 'smDeletedAt'];
$model = new SIMs_Model();
// Costruisco la query per selezionare le macchine da mostrare:
// - applico il filtro sullo stato:
if (session()->filter_smStato!='-1') { $model->where('smStato', session()->get('filter_smStato')); }
// imposto l'ordinamento richiesto:
CheckSort('sims',true);
$data['sortCol'] = session()->get('sort')['col'];
$data['sortDir'] = session()->get('sort')['dir'];
$model->orderBy($data['sortCol'], $data['sortDir']);
// eseguo la query con paginazione:
$data['dataset'] = $model->paginate(session()->get('pager_num'));
$data['pager'] = $model->pager;
return view('pages/sims', $data);
}//function sims
//--------------------------------------------------------------------
public function admin() {
helper(['tools','form']);
$data['tab'] = 'admin';
// Verifico sessione e livello:
if (!CheckLevel(1)) { return redirect()->to('/dashboard'); }
return view('pages/admin', $data);
}//function admin
//--------------------------------------------------------------------
public function set_order($tab, $col, $dir){
helper(['tools','form']);
// Verifico sessione e livello:
if (!CheckLevel(0)) { return redirect()->to('/dashboard'); }
if (SetSort($tab, $col, $dir)) {
if ($tab=='anagrafica') return redirect()->to('/Lavoratori/anagrafica');
if ($tab=='evncredit') return redirect()->to('/CreditCardEvents/show');
if ($tab=='evncar') return redirect()->to('/CSiCoCarEvents/show');
if ($tab=='Issues') return redirect()->to('/Issues/View');
return redirect()->to('/dashboard/' . $tab);
} else {
// ordinamento non riuscito, avviso l'utente e torno alla home
session()->setFlashdata('warning', 'Errore durante il riordino dei records');
return redirect()->to('/dashboard');
}
}
//--------------------------------------------------------------------
public function set_filter($page, $new_filter_dal, $new_filter_al, $new_option, $new_filter_commessa, $new_filter_lavoratore) {
helper(['tools','form']);
// Verifico sessione e livello:
if (!CheckLevel(0)) { return redirect()->to('/dashboard'); }
// Questi filtri sono indipendenti dalla tabella
session()->set('filter_dal', $new_filter_dal);
session()->set('filter_al', $new_filter_al);
session()->set('filter_commessa', $new_filter_commessa);
// Questo filtro dipende dal tipo di tabella:
if ($page=='orari'){
session()->set('filter_tipo_ore', $new_option);
}
if ($page=='spese'){
session()->set('filter_rimborso', $new_option);
}
// solo gli amministratori possono vedere tutto e quindi cambiare il filtro del lavoratore:
if (CheckLevel(3, false)) {
session()->set('filter_lavoratore', $new_filter_lavoratore);
} else {
session()->set('filter_lavoratore', session()->get('lavoratore')->lvIDlavoratore);
}
return redirect()->to("/dashboard/$page");
}
//--------------------------------------------------------------------
public function set_filter1($page, $new_option) {
helper(['tools','form']);
// Verifico sessione e livello:
if (!CheckLevel(0)) { return redirect()->to('/dashboard'); }
// Questo filtro dipende dal tipo di tabella:
if ($page=='cars'){
session()->set('filter_caStato', $new_option);
return redirect()->to("/dashboard/$page");
}
if ($page=='credit'){
session()->set('filter_ccStato', $new_option);
return redirect()->to("/dashboard/$page");
}
if ($page=='sims'){
session()->set('filter_smStato', $new_option);
return redirect()->to("/dashboard/$page");
}
if ($page=='Stime'){
session()->set('filter_commessa', $new_option);
return redirect()->to("/Stime");
}
}
//--------------------------------------------------------------------
public function reset_filter($page) {
helper(['tools','form']);
// Verifico sessione e livello:
if (!CheckLevel(0)) { return redirect()->to('/dashboard'); }
// Questi filtri sono indipendenti dalla tabella
session()->set('filter_dal', date("Y-m-d", strtotime("first day of this month")));
session()->set('filter_al', date("Y-m-d", strtotime("last day of this month")));
session()->set('filter_commessa', '-1');
// Questo filtro dipende dal tipo di tabella:
if ($page=='orari'){
session()->set('filter_tipo_ore', '-1');
}
if ($page=='spese'){
session()->set('filter_rimborso', '-1');
}
if ($page=='cars'){
session()->set('filter_caStato', '-1');
}
if ($page=='credit'){
session()->set('filter_ccStato', '-1');
}
if ($page=='sims'){
session()->set('filter_smStato', '-1');
}
// solo gli amministratori possono vedere tutto e quindi cambiare il filtro del lavoratore:
if (CheckLevel(3, false)) {
session()->set('filter_lavoratore', '-1');
} else {
session()->set('filter_lavoratore', session()->get('lavoratore')->lvIDlavoratore);
}
if ($page=='Stime'){
return redirect()->to("/Stime");
}
return redirect()->to("/dashboard/$page");
}
}//class Dashboard