session = service('session'); $this->accounts = model('App\Models\mAccounts'); } public function overview() { return view('table'); } private function checkDDPList(&$arr, $ele){ if (!array_key_exists($ele, $arr)){ $arr[$ele] = $this->accounts->getDropDownEntry($ele); } } private function checkDDSList($arr, $par, $ele){ if (!array_key_exists($par, $arr)){ $ret = array(); if ($ele > 0) $ret[$ele] = $this->accounts->getDropDownEntry($ele); else $ret[0] = '-----'; return $ret; } else{ return $arr[$par]; } } private function loadFormDefaults(){ $data['id'] = 0; $data['source'] = 0; $data['datum'] =''; $data['renummer'] = false; $data['multi'] = false; $data['transfer'] = false; $data['receiver'] = ''; $data['total_in'] = ''; $data['total_out'] = ''; $data['validate'] = false; $data['scheduled'] = false; $data['scheduledNum'] = 0; $data['scheduledType'] = 0; for ($i=0;$i<10;$i++){ $data['sid'][$i] = 0; $data['category_parent'][$i] = 0; $data['category'][$i] = 0; $data['input'][$i] = ''; $data['output'][$i] = ''; $data['comment'][$i] = ''; } return $data; } /** * Legt eine neue Terminbuchung an * @param bool $transfer ob Terminbuchung vom Typ Transfer ist * @return char gibt die View zurück **/ public function newScheduled($transfer = 0){ $data = $this->loadFormDefaults(); $data['transfer'] = (bool)$transfer; return $this->newBill($data,NULL,true); } public function newTransfer(){ $data = $this->loadFormDefaults(); $data['transfer'] = true; return $this->newBill($data,NULL); } public function newBill($data = NULL, $errors = NULL,$scheduled = false){ helper('form'); $data = $data ?? $this->loadFormDefaults(); $data['isScheduled'] = $scheduled; $data['validation'] = $errors; $srclist = $this->accounts->getDropDownList( 'Acc', TRUE ); $this->checkDDPList($srclist,$data['source']); $data['sourcelist'] = $srclist; $data['scheduled'] = array('NumList' => array('1'=>'1','2'=>'2','3'=>'3','4'=>'4','5'=>'5','6'=>'6'), 'TypeList' => array('week'=>'Woche(n)','month'=>'Monat(e)','year'=>'Jahr(e)'), 'style' => 'class="form-select"'); if ($data['transfer']) $categories = $this->accounts->getDropDownLists( 'Acc', TRUE ); else $categories = $this->accounts->getDropDownLists( 'InOut', TRUE ); // $data['catparentlist'] = $categories['parent']; // if (!array_key_exists('catparent', $data)) // $data['catparent'] = $this->accounts->getParent($data['cat']); // $this->checkDDPList($data['catparentlist'],$data['catparent']); // $data['catlist'] = $this->checkDDSList((array)$categories['subs'],$data['catparent'],$data['cat']); $data['subsparent'] = array(); $data['subscategory'] = array(); for ($i=0;$i<10;$i++){ $data['subsparent'][$i] = $categories['parent']; $data['category_parent'][$i] = $data['category_parent'][$i] ?? 0; $this->checkDDPList($data['subsparent'][$i],$data['category_parent'][$i]); $data['subscategory'][$i] = $this->checkDDSList((array)$categories['subs'],$data['category_parent'][$i],$data['category'][$i]??0); } $data['subsdata'] = json_encode($categories['subs']); return view('newBill', $data); } private function customValidation(&$errors){ $result = true; // if ( "on" == $this->request->getPost('multi') ) // { for ($i=0;$i<10;$i++){ $inp = $this->request->getPost("input[$i]"); $outp = $this->request->getPost("output[$i]"); $cat = $this->request->getPost("category[$i]"); if ((is_numeric($inp) && $inp > 0.0) || (is_numeric($outp) && $outp > 0.0)){ if ($cat == 0){ $result &= false; $errors['Kategorie']="Kategorie [$i] fehlt oder ungültig"; } } if ($cat > 0){ $errors['log2'] = "cat recognized"; if (!((is_numeric($inp) && ($inp > 0.0)) || (is_numeric($outp) && ($outp > 0.0)))){ $errors['Betrag']="Betrag [$i] fehlt oder ungültig"; $result &= false; } } } // } // else{ // if ((is_numeric($this->request->getPost('total_in')) && $this->request->getPost('total_in') > 0.0) || (is_numeric($this->request->getPost('total_out')) && $this->request->getPost('total_out') > 0.0)){ // return true; // } // else // $errors['Betrag']="Betrag fehlt oder ungültig"; // } return $result; } public function viewBill($filename) { $filePath= WRITEPATH . '/uploads'; $file = new \CodeIgniter\Files\File($filePath."/".$filename); log_message('debug',$file->getMimeType()); if ($file->getMimeType() == 'application/pdf') $this->viewPdf($filename); else return view('viewBillImg', ['filename'=>WRITEPATH . '/uploads'.$filename]); } public function viewPdf($filename) { $view = \Config\Services::renderer(); log_message('debug',$filename); $filePath= WRITEPATH . '/uploads'; header("Cache-Control: maxage=1"); header("Pragma: public"); header('Content-type:application/pdf'); header('Content-disposition: inline; filename="'.$filename.'"'); header('content-Transfer-Encoding:binary'); header('Content-Length:' .filesize($filePath."/".$filename)); if (($pdf =file_get_contents($filePath."/".$filename)) === false) print $filePath."/".$filename; else print $pdf; exit; } public function attemptNewBilling() { helper('form'); $uploading = false; $rules = [ 'source' => 'required|greater_than[0]', 'datum' => 'required', 'category.0' => 'required|greater_than[0]' // 'totalamount'=>'required|numeric' ]; $errors = [ // Errors 'source' => ['required' => 'Konto fehlt','greater_than' => 'Konto fehlt'], 'datum' => ['required' => 'Datum fehlt']]; // 'totalamount' => ['required' => 'Betrag fehlt','numeric' => 'Betrag muss eine Zahl sein']]; if ( 'on' == $this->request->getPost('multi') ) { $rules['openamount'] = 'equals[0]'; $errors['openamount'] = ['equals' => 'Betrag muss 0 sein']; } $fehler= array(); $valid = $this->customValidation($fehler); $file = $this->request->getFile('billfile'); if ($file) { if (! $file->isValid() && ($file->getError() != UPLOAD_ERR_NO_FILE)) { throw new \RuntimeException($file->getErrorString() . '(' . $file->getError() . ')'); } else if ($file->isValid()) { $rules['billfile'] = ['uploaded[billfile]','max_size[billfile,10000]','mime_in[billfile,application/pdf]']; $errors['billfile'] = ['uploaded'=>'Fehler beim Upload','max_size' => 'Zu Groß', 'mime_in' => "Ungültiger Datentyp"]; $uploading = true; } } if ((! $this->validate($rules,$errors)) || (!$valid)){ return $this->newBill($this->request->getPost(), array_merge($this->validator->getErrors(),$fehler),$this->request->getPost('scheduled')); // return redirect()->back()->withInput()->with('errors', $validation->getErrors()); } else{ $data = $this->request->getPost(); //log_message('debug',print_r($data,true)); if ($this->request->getPost('scheduled') =="0"){ if ($uploading){ $date = Time::parse($this->request->getPost('datum')); $file->move(WRITEPATH . 'uploads',$date->toLocalizedString('yyyyMMdd')." ".$this->request->getPost('receiver')." ".$this->request->getPost("comment[0]").".".$file->guessExtension()); $data['rechnung'] = $file->getName(); log_message('debug', $file->getName()); } $bills = model('App\Models\mBills'); $bills->saveBill($data); $redirectURL = session('redirect_url') ?? site_url('/'); unset($_SESSION['redirect_url']); return redirect()->to($redirectURL); } else{ $scheduled = model('App\Models\mScheduled'); $scheduled->saveBill($this->request->getPost()); } $this->response->redirect(site_url('/')); } } public function editBill($id){ $bills = model('App\Models\mBills'); $data = $this->loadFormDefaults(); $result = $bills->getEntry($id, $data, $this->accounts); return $this->newBill($result); } public function editScheduled($id){ $scheduled = model('App\Models\mScheduled'); $entry = $scheduled->getEntry($id); // $bill = array_merge($this->loadFormDefaults(),(array)json_decode($entry['data'])); // $bill['datum'] = $entry['next_date']; return $this->newBill($entry,NULL,true); } public function deleteScheduled($id){ $scheduled = model('App\Models\mScheduled'); $entry = $scheduled->getEntry($id); // $bill = array_merge($this->loadFormDefaults(),(array)json_decode($entry['data'])); // $bill['datum'] = $entry['next_date']; return $this->newBill($entry,NULL,true); } public function syncScheduled(){ if (!$this->request->isAJAX()) return; $scheduled = model('App\Models\mScheduled'); $schedules = $scheduled->findAll(); $result = array(); $line = ""; foreach ( $schedules as $schedule ) { $cur_date = $schedule['next_date']; while ( strtotime( $cur_date ) <= strtotime( "now" ) ) { $line .= " $cur_date - "; $bill = array_merge($this->loadFormDefaults(),(array)json_decode($schedule['data'])); //echo "Hugo:".$schedule['id']; $bill['id']=0; // to generate a new booking $bill['datum'] = $cur_date; $bill['type'] = $bill['transfer']?'transfer':'multiple'; $line .= $bill['receiver']; $bills = model('App\Models\mBills'); $bills->saveBill($bill); $cur_date = $scheduled->calcNextDate( $cur_date, $bill['scheduledNum'], $bill['scheduledType']); $line .= " - $cur_date
"; //log_message('debug','BudgetScheduled:process data: '.logArray($booking->getData())); $scheduled->update($schedule['id'], ['next_date'=>$cur_date ]); } } return $line; //$this->showTableBookings(); } public function viewAccountsTree(){ helper('form'); $data = $this->accounts->getTreeData(); $data['ddlist'] = $this->accounts->getDropDownList( 'all', false,true ); return view('accountstree',$data); } public function attemptEditAccount(){ $rules = [ 'description' => 'required', 'type' => 'required', ]; if (! $this->validate($rules)) { return redirect()->back()->withInput()->with('errors', $this->validator->getErrors()); } $this->accounts->saveAccount($this->request->getPost()); // $this->accounts = model('App\Models\mAccounts', false); return $this->viewAccountsTree(); } public function viewAccountActivities(){ helper('form'); $data = array(); $data['source'] = 0; $data['start'] = session('datum_start') ?? date("d.m.Y", strtotime( "- 2 weeks", strtotime( "now" ) )); $data['ende'] = session('datum_ende') ?? date("d.m.Y", strtotime( "now" ) ); $data['source'] = session('source') ?? 0; $data['sourcelist'] = $this->accounts->getDropDownList( 'all', TRUE ); return view('activities', $data); } public function viewScheduled(){ helper('form'); return view('scheduled'); } }