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

321 lines
9.2 KiB
PHP

<?php namespace App\Controllers;
use App\Libraries\Crud;
use App\Models\Stime_Model;
use App\Models\TipiWork_Model;
use App\Models\Commesse_Model;
class Stime extends CRUDController {
// Tab: Stime = ['stIDcommessa', 'stIDTipoWork', 'stStima', 'stNota'];
protected $crud;
function __construct() {
$params = [
'table' => 'Stime',
'dev' => false,
'fields' => $this->field_options(),
'form_title_add' => 'Nuova stima',
'form_title_update' => 'Edit stima',
'form_submit' => 'Add',
'table_title' => 'Pagina per la tabella Stime',
'form_submit_update' => 'Update',
'base' => '',
'UpdatedAt' => '',
'DeletedAt' => '',
];
$this->crud = new Crud($params, service('request'));
}// __construct
protected function field_options() {
$fields = [];
$fields['stIDcommessa'] = ['label' => 'ID Commessa', 'helper' => 'Identificativo univoco della commessa a cui si riferisce la stima', 'required' => true];
$fields['stIDTipoWork'] = ['label' => 'ID Tipo Work', 'helper' => 'Identificativo univoco della tipologia di lavoro a cui si riferisce la stima', 'required' => true];
$fields['stStima'] = ['label' => 'Stima', 'helper' => 'Stima oraria', 'required' => true];
$fields['stNota'] = ['label' => 'Nota', 'helper' => 'Eventuale nota associata alla stima', 'required' => true];
return $fields;
}// field_options
// public function index() {
// return $this->CRUD_view(['stIDcommessa', 'stIDTipoWork', 'stStima', 'stNota']);
// }
//--------------------------------------------------------------------
// Auto CRUD terminato
//--------------------------------------------------------------------
//--------------------------------------------------------------------
public function index() {
helper(['tools','form']);
$data['tab'] = 'admin';
// Verifico sessione e livello:
if (!CheckLevel(1)) { return redirect()->to('/dashboard'); }
// Ricavo le stime in base al filtro:
// Tab: Stime = ['stIDcommessa', 'stIDTipoWork', 'stStima', 'stNota'];
// Tab: TipiWork = ['twIDTipoWork', 'twDescrizione', 'twOrdinamento'];
// Tab: Commesse = ['coIDcommessa', 'coNome', 'coIDcliente', 'coDescrizione', 'coIDstatoCommessa', 'coCreatedAt', 'coUpdatedAt', 'coDeletedAt'];
$model = new Stime_Model();
$model->join('TipiWork', 'stIDTipoWork = twIDTipoWork');
$model->join('Commesse', 'stIDcommessa = coIDcommessa');
// Costruisco la query per selezionare le ore da mostrare:
if (session()->filter_commessa!='-1') { $model->where('stIDcommessa', session()->get('filter_commessa')); }
// imposto l'ordinamento richiesto:
$model->orderBy('twOrdinamento', 'ASC');
// 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();
//return view('test', $data);
return view('pages/stime', $data);
}//function index
//--------------------------------------------------------------------
public function add(){
helper(['tools','form']);
$data['tab'] = 'admin';
$data['add'] = true;
$data['title'] = 'Dettagli nuova stima';
// Verifico sessione e livello:
if (!CheckLevel(1)) {
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Stime/add -> Error code 001'); }
return redirect()->to('/Lavoratori/login');
}
// Gestione POST
// Tab: Stime = ['stIDcommessa', 'stIDTipoWork', 'stStima', 'stNota'];
if ($this->request->getMethod() == 'post') {
// Regole per validare i campi introdotti nel form:
//
$rules = [
'IDcommessa' => 'trim|required',
'IDTipoWork' => 'trim|required',
'Stima' => 'trim|required',
'Nota' => 'trim|required',
];
// 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 = [
'stIDcommessa' => $this->request->getVar('IDcommessa'),
'stIDTipoWork' => $this->request->getVar('IDTipoWork'),
'stStima' => $this->request->getVar('Stima'),
'stNota' => $this->request->getVar('Nota'),
];
$model = new Stime_Model();
if ($model->save($newData)) {
session()->setFlashdata('success', 'Record inserito con successo sul DB');
if(isset($_POST['crea_continua'])) {
// è stato premuto il secondo pulsante, quindi inserisco un secondo valore:
//return redirect()->to('/dashboard/orari');
} else {
return redirect()->to('/Stime');
}
} else {
session()->setFlashdata('danger', 'Errore durante l\'inserimento del record nel DB.');
}
}// analisi validazione
}// Gestione POST
// Ricavo i dati per il select delle commesse:
$modelCommesse = new Commesse_Model();
$data['select_commesse'] = $modelCommesse->get_select();
// Ricavo i dati per il select delle tipologie:
$modelTipi = new TipiWork_Model();
$data['select_tipologie'] = $modelTipi->get_select();
// Show profile
echo view('pages/form/stime_form_add_edit', $data);
} // function add()
//--------------------------------------------------------------------
public function edit($IDcm, $IDtw){
helper(['tools','form']);
$data['tab'] = 'admin';
$data['add'] = false;
$data['title'] = 'Dettagli stima';
// Verifico sessione e livello:
if (!CheckLevel(1)) {
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Stime/add -> Error code 001'); }
return redirect()->to('/Lavoratori/login');
}
// Ricavo il profilo della stima da editare
// Tab: Stime = ['stIDcommessa', 'stIDTipoWork', 'stStima', 'stNota'];
$model = new Stime_Model();
$data['stima'] = $model->where('stIDcommessa', $IDcm)->where('stIDTipoWork', $IDtw)->first();
// Gestione POST
// Tab: Stime = ['stIDcommessa', 'stIDTipoWork', 'stStima', 'stNota'];
if ($this->request->getMethod() == 'post') {
// Regole per validare i campi introdotti nel form:
//
$rules = [
'IDcommessa' => 'trim|required',
'IDTipoWork' => 'trim|required',
'Stima' => 'trim|required',
'Nota' => 'trim|required',
];
// 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 = [
'stIDcommessa' => $this->request->getVar('IDcommessa'),
'stIDTipoWork' => $this->request->getVar('IDTipoWork'),
'stStima' => $this->request->getVar('Stima'),
'stNota' => $this->request->getVar('Nota'),
];
// Cancello i record che devo andare a sostituire o aggiornare:
$model->where('stIDcommessa',$IDcm)->where('stIDTipoWork',$IDtw)->delete(); // Record di partenza
$model->where('stIDcommessa',$newData['stIDcommessa'])->where('stIDTipoWork',$newData['stIDTipoWork'])->delete(); // Nuovo record
if ($model->save($newData)) {
session()->setFlashdata('success', 'Record editato con successo sul DB');
if(isset($_POST['crea_continua'])) {
// è stato premuto il secondo pulsante, quindi inserisco un secondo valore:
//return redirect()->to('/dashboard/orari');
} else {
return redirect()->to('/Stime');
}
} else {
session()->setFlashdata('danger', 'Errore durante l\'inserimento del record nel DB.');
}
}// analisi validazione
}// Gestione POST
// Ricavo i dati per il select delle commesse:
$modelCommesse = new Commesse_Model();
$data['select_commesse'] = $modelCommesse->get_select();
// Ricavo i dati per il select delle tipologie:
$modelTipi = new TipiWork_Model();
$data['select_tipologie'] = $modelTipi->get_select();
// Show profile
echo view('pages/form/stime_form_add_edit', $data);
} // function edit($id)
//--------------------------------------------------------------------
public function Delete($IDcm = null, $IDtw = null){
helper(['tools','form']);
$data = [];
// Tab: Stime = ['stIDcommessa', 'stIDTipoWork', 'stStima', 'stNota'];
$model = new Stime_Model();
// Verifico sessione e livello:
if (!CheckLevel(3)) {
session()->setFlashdata('warning', 'Non si hanno i permessi per cancellare una stima.');
return redirect()->to('/Stime');
}
// Verifico dato introdotto:
if (($IDcm==null) OR ($IDtw==null)) {
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Stime/delete -> Error code 001'); }
return redirect()->to('/Stime');
}
// Elimino il record:
if ($model->where('stIDcommessa',$IDcm)->where('stIDTipoWork',$IDtw)->delete()) {
session()->setFlashdata('success', 'Records cancellato correttamente.');
} else {
$data['validation'] = $this->validator;
session()->setFlashdata('warning', 'Errore durante la cancellazione del record.');
}
// Show profile
return redirect()->to('/Stime');
} // function edit($id)
//--------------------------------------------------------------------
}