'Orari', 'dev' => false, 'fields' => $this->field_options(), 'form_title_add' => 'Add Orario', 'form_title_update' => 'Edit Orario', 'form_submit' => 'Add', 'table_title' => 'Pagina per la tabella Orari', 'form_submit_update' => 'Update', 'base' => '', 'UpdatedAt' => '', 'DeletedAt' => '', ]; $this->crud = new Crud($params, service('request')); }// __construct protected function field_options() { $fields = []; $fields['orIDorario'] = ['label' => 'ID', 'helper' => 'Identificativo univoco del record nel database']; $fields['orIDcommessa'] = [ 'label' => 'Commessa', 'required' => true, 'type' => 'dropdown', 'helper' => 'Commessa a cui si riferisce l\'orario', 'relation' => [ 'table'=> 'Commesse', 'primary_key' => 'coIDcommessa', 'display' => ['coNome'], 'order_by' => 'coUpdatedAt', 'order' => 'DESC' ] ]; $fields['orIDlavoratore'] = [ 'label' => 'Lavoratore', 'required' => true, 'type' => 'dropdown', 'helper' => 'Lavoratore a cui si riferisce l\'orario', 'relation' => [ 'table'=> 'Lavoratori', 'primary_key' => 'lvIDlavoratore', 'display' => ['lvNickname', 'lvNome', 'lvCognome'], //'display' => ['lvNickname'], 'order_by' => 'lvNickname', 'order' => 'ASC' ] ]; $fields['orData'] = ['label' => 'Data', 'helper' => 'Data dell\'orario','required' => true]; $fields['orOre'] = ['label' => 'Durata', 'helper' => 'Durata dell\'orario di lavoro. Approssimare al quarto d\'ora (0.25)', 'required' => true]; $fields['orIDTipoOre'] = [ 'label' => 'Tipologia', 'required' => true, 'type' => 'dropdown', 'helper' => 'Tipologia dell\'orario', 'relation' => [ 'table'=> 'TipoOre', 'primary_key' => 'toIDTipoOre', 'display' => ['toDescrizione'], 'order_by' => 'toOrdinamento', 'order' => 'ASC' ] ]; $fields['orDescrizione'] = ['label' => 'Descrizione', 'helper' => 'Descrizione esaustiva di quanto fatto durante l\'orario inserito','required' => true]; return $fields; }// field_options public function index() { return $this->CRUD_view(['orIDorario', 'orIDcommessa', 'orIDlavoratore', 'orData', 'orOre', 'orIDTipoOre', 'orIDTipoWork', 'orDescrizione']); } //-------------------------------------------------------------------- // Auto CRUD terminato //-------------------------------------------------------------------- //-------------------------------------------------------------------- public function add(){ helper(['tools','form']); $data['Data'] = date('Y-m-d'); $model = new Orari_Model(); // Verifico sessione e livello: if (!CheckLevel(1)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/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: // $rules = [ 'IDcommessa' => 'trim|required', 'Data' => 'trim|required', 'Durata' => 'trim|required', 'IDTipoOre' => 'trim|required', 'IDTipoWork' => 'trim|required', 'Descrizione' => 'trim|required|min_length[8]', ]; if ($enable){ $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 // Tab: Orari = ['orIDorario', 'orIDcommessa', 'orIDlavoratore', 'orData', 'orOre', 'orIDTipoOre', 'orIDTipoWork', 'orDescrizione']; $newData = [ 'orIDcommessa' => $this->request->getVar('IDcommessa'), 'orData' => $this->request->getVar('Data'), 'orOre' => $this->request->getVar('Durata'), 'orIDTipoOre' => $this->request->getVar('IDTipoOre'), 'orIDTipoWork' => $this->request->getVar('IDTipoWork'), 'orDescrizione' => $this->request->getVar('Descrizione'), ]; if ($enable){ $newData['orIDlavoratore'] = $this->request->getVar('IDlavoratore'); } else { $newData['orIDlavoratore'] = session()->get('lavoratore')->lvIDlavoratore; } if ($model->save($newData)) { session()->setFlashdata('success', 'Record inserito con successo sul DB'); UpdateCommessa($newData['orIDcommessa']); if(isset($_POST['crea_continua'])) { // è stato premuto il secondo pulsante, quindi inserisco un secondo valore: //return redirect()->to('/dashboard/orari'); } else { return redirect()->to('/dashboard/orari'); } } 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(); // Ricavo i dati per il select deila tipologia di ore: $modelTipoOre = new TipoOre_Model(); $data['select_tipo_ore'] = $modelTipoOre->get_select(); // Ricavo i dati per il select deila tipologia di lavoro: $modelTipiWork = new TipiWork_Model(); $data['select_tipi_work'] = $modelTipiWork->get_select(); // Show profile echo view('pages/orari/orari_form_add', $data); } // function add($id) //-------------------------------------------------------------------- public function edit($IDorario = null){ helper(['tools','form']); $data = []; $model = new Orari_Model(); // Verifico sessione e livello: if (!CheckLevel(1)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/edit -> 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); // Verifico dato introdotto: if ($IDorario==null) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/edit -> Error code 002'); } return redirect()->to('/dashboard'); } // Ricavo il profilo dell'orario da editare $orario = $model->where('orIDorario', $IDorario) ->first(); // Verifico che esista il record dell'orario: if (null==$orario) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/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 orari $lav = session()->get('lavoratore'); if ((!$enable) && ($lav->lvIDlavoratore<>$orario->orIDlavoratore)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/edit -> Error code 004'); } return redirect()->to('/dashboard'); } // Gestione POST if ($this->request->getMethod() == 'post') { // Regole per validare i campi introdotti nel form: // $rules = [ 'IDorario' => 'trim|required', 'IDcommessa' => 'trim|required', 'Data' => 'trim|required', 'Durata' => 'trim|required', 'IDTipoOre' => 'trim|required', 'IDTipoWork' => '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 = [ 'orIDorario' => $orario->orIDorario, 'orIDcommessa' => $this->request->getVar('IDcommessa'), 'orData' => $this->request->getVar('Data'), 'orOre' => $this->request->getVar('Durata'), 'orIDTipoOre' => $this->request->getVar('IDTipoOre'), 'orIDTipoWork' => $this->request->getVar('IDTipoWork'), 'orDescrizione' => $this->request->getVar('Descrizione'), ]; if ($enable){ $newData['orIDlavoratore'] = $this->request->getVar('IDlavoratore'); } if ($model->save($newData)) { session()->setFlashdata('success', 'Successfuly Updated'); UpdateCommessa($newData['orIDcommessa']); return redirect()->to('/dashboard/orari'); } else { session()->setFlashdata('danger', 'Errore durante l\'update del record nel DB.'); } }// analisi validazione }// Gestione POST // Rileggo i dati dal DB $data['orario'] = $orario; $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(); // Ricavo i dati per il select deila tipologia di ore: $modelTipoOre = new TipoOre_Model(); $data['select_tipo_ore'] = $modelTipoOre->get_select(); // Ricavo i dati per il select deila tipologia di lavoro: $modelTipiWork = new TipiWork_Model(); $data['select_tipi_work'] = $modelTipiWork->get_select(); // Show profile echo view('pages/orari/orari_form_edit', $data); } // function edit($id) //-------------------------------------------------------------------- public function delete($IDorario = null){ helper(['tools']); $data = []; $model = new Orari_Model(); // Verifico sessione e livello: if (!CheckLevel(1)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/delete -> 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); // Verifico dato introdotto: if ($IDorario==null) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/delete -> Error code 002'); } return redirect()->to('/dashboard'); } // Ricavo il record dell'orario da editare $orario = $model->where('orIDorario', $IDorario) ->first(); // Verifico che esista il record dell'orario: //if (null==$orario) { return redirect()->to('/dashboard'); } if (!isset($orario)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/delete -> Error code 003'); } return redirect()->to('/dashboard'); } // Verifico se posso editare il record: // - utente amministratore o superiore, cancellare qualunque orario // - utente normale può cancellare solo i propi orari $lav = session()->get('lavoratore'); if ((!$enable) && ($lav->IDlavoratore<>$orario->IDlavoratore)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/delete -> Error code 004'); } return redirect()->to('/dashboard'); } // Elimino il record: if ($model->delete($IDorario)) { 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/orari'); } // function delete($id) //-------------------------------------------------------------------- public function export_csv(){ helper(['tools','form']); // Verifico sessione e livello: if (!CheckLevel(1)) { if (ENVIRONMENT === 'development') { session()->setFlashdata('warning', '/Orari/export_csv -> Error code 001'); } return redirect()->to('/Lavoratori/login'); } // Ricavo le ore dell'utente: // Tab: Orari = ['orIDorario', 'orIDcommessa', 'orIDlavoratore', 'orData', 'orOre', 'orIDTipoOre', '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'); $model->join('TipoOre', 'TipoOre.toIDTipoOre = Orari.orIDTipoOre'); // Costruisco la query per selezionare le ore da esportare: // - 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: $data['dataset'] = $model->asArray() ->findAll(); // Imposto il nome del file da downloadare: $filepath = $_SERVER['MRK_FILE_PATH']; $filename = 'CSiCoDB_Orari_il_' . date('Y-m-d_H-i-s') . '.csv'; // file creation $file = fopen($filepath . $filename,"w"); // Esport header fputcsv($file,['IDorario','IDcommessa','Commessa','IDlavoratore','Lavoratore','Il','Durata','IDTipoOre','Tipologia','IDTipoWork','Descrizione']); foreach ($data['dataset'] as $line){ //fputcsv($file,$line); // Seleziono le colonne da esportare: $record = []; $record['orIDorario'] = $line['orIDorario']; $record['orIDcommessa'] = $line['orIDcommessa']; $record['coNome'] = $line['coNome']; $record['orIDlavoratore'] = $line['orIDlavoratore']; $record['lvNickname'] = $line['lvNickname']; $record['orData'] = $line['orData']; $record['orOre'] = $line['orOre']; $record['orIDTipoOre'] = $line['orIDTipoOre']; $record['toDescrizione'] = $line['toDescrizione']; $record['orIDTipoWork'] = $line['orIDTipoWork']; $record['orDescrizione'] = $line['orDescrizione']; 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 //-------------------------------------------------------------------- }//class Orari