'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 //-------------------------------------------------------------------- }