428 lines
15 KiB
PHP
428 lines
15 KiB
PHP
<?php namespace App\Controllers;
|
|
|
|
use App\Libraries\Crud;
|
|
use App\Models\Lavoratori_Model;
|
|
use App\Models\Commesse_Model;
|
|
use App\Models\TipoOre_Model;
|
|
use App\Models\Orari_Model;
|
|
use App\Models\Spese_Model;
|
|
|
|
|
|
class Spese extends CRUDController {
|
|
|
|
// Tab: Spese = ['spIDspesa', 'spIDcommessa', 'spIDlavoratore', 'spImporto', 'spDaRimborsare', 'spDescrizione', 'spData'];
|
|
|
|
protected $crud;
|
|
|
|
function __construct() {
|
|
|
|
$params = [
|
|
'table' => 'Spese',
|
|
'dev' => false,
|
|
'fields' => $this->field_options(),
|
|
'form_title_add' => 'Add Spesa',
|
|
'form_title_update' => 'Edit Spesa',
|
|
'form_submit' => 'Add',
|
|
'table_title' => 'Pagina per la tabella Spese',
|
|
'form_submit_update' => 'Update',
|
|
'base' => '',
|
|
'UpdatedAt' => '',
|
|
'DeletedAt' => '',
|
|
];
|
|
|
|
$this->crud = new Crud($params, service('request'));
|
|
}// __construct
|
|
|
|
|
|
protected function field_options() {
|
|
|
|
$fields = [];
|
|
$fields['spIDspesa'] = ['label' => 'ID', 'helper' => 'Identificativo univoco del record nel database'];
|
|
$fields['spIDcommessa'] = [
|
|
'label' => 'Commessa',
|
|
'required' => true,
|
|
'type' => 'dropdown',
|
|
'helper' => 'Commessa a cui si riferisce la spesa',
|
|
'relation' => [
|
|
'table'=> 'Commesse',
|
|
'primary_key' => 'coIDcommessa',
|
|
'display' => ['coNome'],
|
|
'order_by' => 'coUpdatedAt',
|
|
'order' => 'DESC'
|
|
]
|
|
];
|
|
$fields['spIDlavoratore'] = [
|
|
'label' => 'Lavoratore',
|
|
'required' => true,
|
|
'type' => 'dropdown',
|
|
'helper' => 'Lavoratore a cui si riferisce la spesa',
|
|
'relation' => [
|
|
'table'=> 'Lavoratori',
|
|
'primary_key' => 'lvIDlavoratore',
|
|
'display' => ['lvNickname', 'lvNome', 'lvCognome'], //'display' => ['lvNickname'],
|
|
'order_by' => 'lvNickname',
|
|
'order' => 'ASC'
|
|
]
|
|
];
|
|
$fields['spImporto'] = ['label' => 'Importo', 'helper' => 'Importo della spesa. Se non in € specificare nella descrizione il cambio attuale relativo', 'required' => true];
|
|
$fields['spDaRimborsare'] = ['label' => 'Rimborsare', 'helper' => 'Indiva se la spesa è da rimborsare al lavoratore', 'required' => true];
|
|
$fields['spDescrizione'] = ['label' => 'Descrizione', 'helper' => 'Descrizione esaustiva della spesa effettuata.','required' => true];
|
|
$fields['spData'] = ['label' => 'Data', 'helper' => 'Data in cui si è avvenuta la spesa','required' => true];
|
|
|
|
return $fields;
|
|
}// field_options
|
|
|
|
|
|
public function index() { return $this->CRUD_view(['spIDspesa', 'spIDcommessa', 'spIDlavoratore', 'spImporto', 'spDaRimborsare', 'spDescrizione', 'spData']); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
// Auto CRUD terminato
|
|
//--------------------------------------------------------------------
|
|
|
|
|
|
|
|
public function add(){
|
|
helper(['form','tools']);
|
|
$data['Data'] = date('Y-m-d');
|
|
$model = new Spese_Model();
|
|
|
|
// Verifico sessione e livello:
|
|
if (!CheckLevel(1)) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/add -> Error code 001'); }
|
|
return redirect()->to('/Lavoratori/login');
|
|
}
|
|
|
|
// Ricavo livello del lavoratore (solo amministratori o superiori, possono editare tutti i campi)
|
|
$enable = CheckLevel(3, false);
|
|
|
|
// Gestione POST
|
|
if ($this->request->getMethod() == 'post') {
|
|
// Regole per validare i campi introdotti nel form:
|
|
// Tab: Spese = ['spIDspesa', 'spIDcommessa', 'spIDlavoratore', 'spImporto', 'spDaRimborsare', 'spDescrizione', 'spData'];
|
|
$rules = [
|
|
'IDcommessa' => 'trim|required',
|
|
'Data' => 'trim|required',
|
|
'Importo' => 'trim|required',
|
|
'DaRimborsare' => 'trim|required',
|
|
'Descrizione' => 'trim|required|min_length[8]',
|
|
];
|
|
if ($enable){
|
|
//$rules['Level'] = 'trim|required|min_length[8]|max_length[255]';
|
|
$rules['IDlavoratore'] = '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 = [
|
|
'spIDcommessa' => $this->request->getVar('IDcommessa'),
|
|
'spData' => $this->request->getVar('Data'),
|
|
'spImporto' => $this->request->getVar('Importo'),
|
|
'spDaRimborsare' => $this->request->getVar('DaRimborsare'),
|
|
'spDescrizione' => $this->request->getVar('Descrizione'),
|
|
];
|
|
if ($enable){
|
|
$newData['spIDlavoratore'] = $this->request->getVar('IDlavoratore');
|
|
} else {
|
|
$newData['spIDlavoratore'] = session()->get('lavoratore')->lvIDlavoratore;
|
|
}
|
|
|
|
if ($model->save($newData)) {
|
|
session()->setFlashdata('success', 'Record inserito con successo sul DB');
|
|
UpdateCommessa($newData['spIDcommessa']);
|
|
if(isset($_POST['crea_continua'])) {
|
|
// è stato premuto il secondo pulsante, quindi inserisco un secondo valore:
|
|
//return redirect()->to('/dashboard/spese');
|
|
} else {
|
|
return redirect()->to('/dashboard/spese');
|
|
}
|
|
} else {
|
|
session()->setFlashdata('danger', 'Errore durante l\'inserimento del record nel DB.');
|
|
}
|
|
|
|
}// analisi validazione
|
|
|
|
}// Gestione POST
|
|
|
|
// Rileggo i dati dal DB
|
|
$data['enable'] = $enable;
|
|
|
|
// Ricavo i dati per il select delle commesse:
|
|
$modelCommesse = new Commesse_Model();
|
|
$data['select_commesse'] = $modelCommesse->get_select();
|
|
|
|
// Ricavo i dati per il select dei lavoratori:
|
|
$modelLavoratori = new Lavoratori_Model();
|
|
$data['select_lavoratori'] = $modelLavoratori->get_select();
|
|
|
|
|
|
// Show profile
|
|
echo view('pages/spese/spese_form_add', $data);
|
|
|
|
} // function add($id)
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
|
|
|
public function edit($IDspesa = null){
|
|
helper(['form','tools']);
|
|
$data = [];
|
|
$model = new Spese_Model();
|
|
|
|
// Verifico sessione e livello:
|
|
if (!CheckLevel(1)) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/edit -> Error code 001'); }
|
|
return redirect()->to('/dashboard');
|
|
}
|
|
|
|
// Ricavo livello del lavoratore (solo amministratori o superiori, possono editare tutti i campi)
|
|
$enable = CheckLevel(3, false);
|
|
|
|
// Verifico dato introdotto:
|
|
if ($IDspesa==null) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/edit -> Error code 002'); }
|
|
return redirect()->to('/dashboard');
|
|
}
|
|
|
|
// Ricavo il profilo della spesa da editare
|
|
$spesa = $model->where('spIDspesa', $IDspesa)
|
|
->first();
|
|
|
|
// Verifico che esista il record della spesa:
|
|
if (null==$spesa) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/edit -> Error code 003'); }
|
|
return redirect()->to('/dashboard');
|
|
}
|
|
|
|
// Verifico se posso editare il campo:
|
|
// - utente amministratore o superiore, può editare tutti i campi
|
|
// - utente normale può editare solo i propi spese
|
|
$lav = session()->get('lavoratore');
|
|
if ((!$enable) && ($lav->IDlavoratore<>$spesa->IDlavoratore)) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/edit -> Error code 004'); }
|
|
return redirect()->to('/dashboard');
|
|
}
|
|
|
|
// Gestione POST
|
|
if ($this->request->getMethod() == 'post') {
|
|
// Regole per validare i campi introdotti nel form:
|
|
//
|
|
$rules = [
|
|
'IDspesa' => 'trim|required',
|
|
'IDcommessa' => 'trim|required',
|
|
'Data' => 'trim|required',
|
|
'Importo' => 'trim|required',
|
|
'DaRimborsare' => 'trim|required',
|
|
'Descrizione' => 'trim|required',
|
|
];
|
|
if ($enable){
|
|
//$rules['Level'] = 'trim|required|min_length[8]|max_length[255]';
|
|
$rules['IDlavoratore'] = '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'aggiornamento
|
|
$newData = [
|
|
'spIDspesa' => $spesa->spIDspesa,
|
|
'spIDcommessa' => $this->request->getVar('IDcommessa'),
|
|
'spData' => $this->request->getVar('Data'),
|
|
'spImporto' => $this->request->getVar('Importo'),
|
|
'spDaRimborsare' => $this->request->getVar('DaRimborsare'),
|
|
'spDescrizione' => $this->request->getVar('Descrizione'),
|
|
];
|
|
if ($enable){
|
|
$newData['spIDlavoratore'] = $this->request->getVar('IDlavoratore');
|
|
} else {
|
|
$newData['spIDlavoratore'] = session()->get('lavoratore')->lvIDlavoratore;
|
|
}
|
|
|
|
if ($model->save($newData)) {
|
|
session()->setFlashdata('success', 'successfuly Updated');
|
|
UpdateCommessa($newData['spIDcommessa']);
|
|
return redirect()->to('/dashboard/spese');
|
|
} else {
|
|
session()->setFlashdata('danger', 'Errore durante l\'update del record nel DB.');
|
|
}
|
|
|
|
}// analisi validazione
|
|
|
|
}// Gestione POST
|
|
|
|
// Rileggo i dati dal DB
|
|
$data['spesa'] = $spesa;
|
|
$data['enable'] = $enable;
|
|
|
|
// Ricavo i dati per il select delle commesse:
|
|
$modelCommesse = new Commesse_Model();
|
|
$data['select_commesse'] = $modelCommesse->get_select();
|
|
|
|
// Ricavo i dati per il select dei lavoratori:
|
|
$modelLavoratori = new Lavoratori_Model();
|
|
$data['select_lavoratori'] = $modelLavoratori->get_select();
|
|
|
|
// Show profile
|
|
echo view('pages/spese/spese_form_edit', $data);
|
|
} // function edit($id)
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
|
|
|
public function delete($IDSpesa = null){
|
|
helper(['tools']);
|
|
$data = [];
|
|
$model = new Spese_Model();
|
|
|
|
// Verifico sessione e livello:
|
|
if (!CheckLevel(1)) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/delete -> Error code 001'); }
|
|
return redirect()->to('/dashboard');
|
|
}
|
|
|
|
// Ricavo livello del lavoratore (solo amministratori o superiori, possono editare tutti i campi)
|
|
$enable = CheckLevel(3, false);
|
|
|
|
// Verifico dato introdotto:
|
|
if ($IDSpesa==null) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/delete -> Error code 002'); }
|
|
return redirect()->to('/dashboard');
|
|
}
|
|
|
|
// Ricavo il record della spesa da editare
|
|
$Spesa = $model->where('spIDSpesa', $IDSpesa)
|
|
->first();
|
|
|
|
// Verifico che esista il record della spesa:
|
|
//if (null==$Spesa) { return redirect()->to('/dashboard'); }
|
|
if (!isset($Spesa)) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/delete -> Error code 003'); }
|
|
return redirect()->to('/dashboard');
|
|
}
|
|
|
|
// Verifico se posso editare il record:
|
|
// - utente amministratore o superiore, cancellare qualunque Spesa
|
|
// - utente normale può cancellare solo i propi spese
|
|
$lav = session()->get('lavoratore');
|
|
if ((!$enable) && ($lav->IDlavoratore<>$Spesa->IDlavoratore)) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/delete -> Error code 004'); }
|
|
return redirect()->to('/dashboard');
|
|
}
|
|
|
|
// Elimino il record:
|
|
if ($model->delete($IDSpesa)) {
|
|
session()->setFlashdata('success', 'Recors cancellato correttamente.');
|
|
|
|
} else {
|
|
$data['validation'] = $this->validator;
|
|
session()->setFlashdata('warning', 'Errore durante la cancellazione del record.');
|
|
}
|
|
|
|
// Show profile
|
|
return redirect()->to('/dashboard/spese');
|
|
} // function delete($id)
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
|
|
|
public function export_csv(){
|
|
helper(['tools']);
|
|
|
|
// Verifico sessione e livello:
|
|
if (!CheckLevel(1)) {
|
|
if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Spese/export_csv -> Error code 001'); }
|
|
return redirect()->to('/Lavoratori/login');
|
|
}
|
|
|
|
// 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, in base al filtro attivo:
|
|
// - 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('spIDcommessa', session()->get('filter_commessa')); }
|
|
// - applico eventuale filtro per tipologia di ora:
|
|
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:
|
|
$data['dataset'] = $model->asArray()
|
|
->findAll();
|
|
|
|
// Imposto il nome del file da downloadare:
|
|
$filepath = $_SERVER['MRK_FILE_PATH'];
|
|
$filename = 'CSiCoDB_Spese_il_' . date('Y-m-d_H-i-s') . '.csv';
|
|
// file creation
|
|
$file = fopen($filepath . $filename,"w");
|
|
// Esport header
|
|
fputcsv($file,['ID-Spesa','ID-Commessa','Commessa','ID-Lavoratore','Lavoratore','Importo','Data','Rimborso','Descrizione']);
|
|
foreach ($data['dataset'] as $line){
|
|
//fputcsv($file,$line);
|
|
$record = [];
|
|
$record['spIDspesa'] = $line['spIDspesa'];
|
|
$record['spIDcommessa'] = $line['spIDcommessa'];
|
|
$record['coNome'] = $line['coNome'];
|
|
$record['spIDlavoratore'] = $line['spIDlavoratore'];
|
|
$record['lvNickname'] = $line['lvNickname'];
|
|
$record['spImporto'] = number_format( $line['spImporto'], 4);
|
|
$record['spData'] = $line['spData'];
|
|
$record['spDaRimborsare'] = ($line['spDaRimborsare'] ? 'Da Rimborsare' : 'No Rimborso');
|
|
$record['spDescrizione'] = $line['spDescrizione'];
|
|
fputcsv($file,$record);
|
|
}
|
|
// Chiudo il file
|
|
fclose($file);
|
|
// download
|
|
header("Content-Description: File Transfer");
|
|
header("Content-Disposition: attachment; filename=".$filename);
|
|
header("Content-Type: application/csv; ");
|
|
readfile($filepath . $filename);
|
|
// deleting file
|
|
unlink($filepath . $filename);
|
|
exit();
|
|
|
|
} // function export_csv
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------
|
|
|
|
|
|
|
|
} |