rechnungsanhang handlign
charts bugfix only empty database
This commit is contained in:
@@ -56,6 +56,9 @@ class Charts extends BaseController {
|
|||||||
GROUP BY description, account_id
|
GROUP BY description, account_id
|
||||||
EOD;
|
EOD;
|
||||||
$data = array();
|
$data = array();
|
||||||
|
$werte = array();
|
||||||
|
$ids = array();
|
||||||
|
$labels = array();
|
||||||
$result = $this->db->query($query);
|
$result = $this->db->query($query);
|
||||||
foreach ($result->getResult() as $row) {
|
foreach ($result->getResult() as $row) {
|
||||||
$werte[] = $row->amount;
|
$werte[] = $row->amount;
|
||||||
|
|||||||
@@ -160,17 +160,23 @@ class Home extends BaseController
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function viewBill($filename) {
|
public function viewBill(string $filename) {
|
||||||
$filePath= WRITEPATH . '/uploads';
|
$filePath= WRITEPATH . '/uploads';
|
||||||
$file = new \CodeIgniter\Files\File($filePath."/".$filename);
|
$file = new \CodeIgniter\Files\File($filePath."/".$filename);
|
||||||
log_message('debug',$file->getMimeType());
|
log_message('debug',$file->getMimeType());
|
||||||
if ($file->getMimeType() == 'application/pdf')
|
if ($file->getMimeType() == 'application/pdf')
|
||||||
$this->viewPdf($filename);
|
$this->viewPdf($filename);
|
||||||
else
|
else{
|
||||||
return view('viewBillImg', ['filename'=>WRITEPATH . '/uploads'.$filename]);
|
$imginfo = getimagesize($filePath."/".$filename);
|
||||||
|
header("Content-type: {$imginfo['mime']}");
|
||||||
|
readfile($filePath."/".$filename);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
// return view('viewBillImg', ['filename'=>'writable/uploads/'.$filename]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function viewPdf($filename) {
|
|
||||||
|
public function viewPdf(string $filename) {
|
||||||
$view = \Config\Services::renderer();
|
$view = \Config\Services::renderer();
|
||||||
log_message('debug',$filename);
|
log_message('debug',$filename);
|
||||||
$filePath= WRITEPATH . '/uploads';
|
$filePath= WRITEPATH . '/uploads';
|
||||||
@@ -212,7 +218,7 @@ class Home extends BaseController
|
|||||||
if (! $file->isValid() && ($file->getError() != UPLOAD_ERR_NO_FILE)) {
|
if (! $file->isValid() && ($file->getError() != UPLOAD_ERR_NO_FILE)) {
|
||||||
throw new \RuntimeException($file->getErrorString() . '(' . $file->getError() . ')');
|
throw new \RuntimeException($file->getErrorString() . '(' . $file->getError() . ')');
|
||||||
} else if ($file->isValid()) {
|
} else if ($file->isValid()) {
|
||||||
$rules['billfile'] = ['uploaded[billfile]','max_size[billfile,10000]','mime_in[billfile,application/pdf]'];
|
$rules['billfile'] = ['uploaded[billfile]','max_size[billfile,10000]','mime_in[billfile,application/pdf,image/jpg,image/jpeg]'];
|
||||||
$errors['billfile'] = ['uploaded'=>'Fehler beim Upload','max_size' => 'Zu Groß', 'mime_in' => "Ungültiger Datentyp"];
|
$errors['billfile'] = ['uploaded'=>'Fehler beim Upload','max_size' => 'Zu Groß', 'mime_in' => "Ungültiger Datentyp"];
|
||||||
$uploading = true;
|
$uploading = true;
|
||||||
}
|
}
|
||||||
@@ -223,23 +229,30 @@ class Home extends BaseController
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$data = $this->request->getPost();
|
$data = $this->request->getPost();
|
||||||
//log_message('debug',print_r($data,true));
|
log_message('debug',print_r($data,true));
|
||||||
|
|
||||||
if ($this->request->getPost('scheduled') =="0"){
|
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 = model('App\Models\mBills');
|
||||||
$bills->saveBill($data);
|
if ($this->request->getPost('removeBillFile')){
|
||||||
|
$bills->deleteBillFile($data['id']);
|
||||||
|
unlink(WRITEPATH . 'uploads/'.$this->request->getPost('removeBillFile'));
|
||||||
|
}
|
||||||
|
$billId = $bills->saveBill($data);
|
||||||
|
|
||||||
|
if ($uploading){
|
||||||
|
$date = Time::parse($data['datum']);
|
||||||
|
$file->move(WRITEPATH . 'uploads',$date->toLocalizedString('yyyyMMdd')." ".$data['receiver']." ".$billId.".".$file->guessExtension());
|
||||||
|
log_message('debug', $file->getName());
|
||||||
|
$bills->storeBillFile($billId, $file->getName());
|
||||||
|
}
|
||||||
|
|
||||||
$redirectURL = session('redirect_url') ?? site_url('/');
|
$redirectURL = session('redirect_url') ?? site_url('/');
|
||||||
unset($_SESSION['redirect_url']);
|
unset($_SESSION['redirect_url']);
|
||||||
return redirect()->to($redirectURL);
|
return redirect()->to($redirectURL);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$scheduled = model('App\Models\mScheduled');
|
$scheduled = model('App\Models\mScheduled');
|
||||||
$scheduled->saveBill($this->request->getPost());
|
$scheduled->saveBill($data);
|
||||||
}
|
}
|
||||||
$this->response->redirect(site_url('/'));
|
$this->response->redirect(site_url('/'));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,17 @@ use App\Models\Mcategories;
|
|||||||
|
|
||||||
class mBills extends Model {
|
class mBills extends Model {
|
||||||
protected $table = 'budget_bills';
|
protected $table = 'budget_bills';
|
||||||
protected $primaryKey = 'id';
|
|
||||||
|
|
||||||
|
protected $primaryKey = 'id';
|
||||||
protected $useAutoIncrement = true;
|
protected $useAutoIncrement = true;
|
||||||
|
|
||||||
protected $returnType = 'object';
|
protected $returnType = 'object';
|
||||||
|
|
||||||
protected $useSoftDeletes = false;
|
protected $useSoftDeletes = false;
|
||||||
|
//TODO timestamps aktivieren
|
||||||
|
// protected $createdField = 'created_at';
|
||||||
|
// protected $updatedField = 'updated_at';
|
||||||
|
// protected $deletedField = 'deleted_at';
|
||||||
|
|
||||||
protected $allowedFields = ['renummer','datum','receiver','source_id','amount','type','comment','validate','lkz','rechnung'];
|
protected $allowedFields = ['renummer','datum','receiver','source_id','amount','type','comment','validate','lkz','rechnung'];
|
||||||
|
|
||||||
@@ -131,45 +136,19 @@ class mBills extends Model {
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
function getAccountsBalance(){
|
function getAccountsBalance(){
|
||||||
// $this->select('SUM(amount) as amount, source_id as idd, budget_accounts.description',FALSE);
|
|
||||||
// $this->groupby('source_id')->asArray();
|
|
||||||
// $this->join('budget_accounts', 'budget_accounts.id = budget_bills.source_id', 'left');
|
|
||||||
// $this->where('budget_accounts.type','account');
|
|
||||||
// $this->where('budget_accounts.lkz',null);
|
|
||||||
// $this->where('budget_bills.validate',false);
|
|
||||||
// $result1 = $this->where('budget_bills.lkz',null)->findAll();
|
|
||||||
// $assoc1 = array();
|
|
||||||
// foreach ($result1 as $value) {
|
|
||||||
// $assoc1[$value['idd']] = $value;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// $details = model('App\Models\mBillDetails');
|
|
||||||
// $details->select('SUM((-1)*subamount) as amount, account_id as idd, budget_accounts.description',FALSE);
|
|
||||||
// $details->groupby('account_id')->asArray();
|
|
||||||
// $details->join('budget_accounts', 'budget_accounts.id = budget_billdetails.account_id', 'left');
|
|
||||||
// $details->join('budget_bills', 'budget_bills.id = budget_billdetails.bill_id', 'left');
|
|
||||||
// $details->where('budget_accounts.type','account');
|
|
||||||
// $details->where('budget_bills.validate',false);
|
|
||||||
// $details->where('budget_accounts.lkz',NULL);
|
|
||||||
// $result3 = $details->where('budget_billdetails.lkz',NULL)->findAll();
|
|
||||||
// $assoc3 = array();
|
|
||||||
// foreach ($result3 as $value) {
|
|
||||||
// $assoc3[$value['idd']] = $value;
|
|
||||||
// }
|
|
||||||
// $sums = array();
|
|
||||||
// foreach (array_keys($assoc1 + $assoc3) as $key) {
|
|
||||||
// $obj = new \stdClass;
|
|
||||||
// $obj->amount = (isset($assoc1[$key]) ? floatval($assoc1[$key]['amount']) : 0) + (isset($assoc3[$key]) ? floatval($assoc3[$key]['amount']) : 0);
|
|
||||||
// $obj->description = isset($assoc1[$key]) ? $assoc1[$key]['description'] : $assoc3[$key]['description'];
|
|
||||||
// $sums[] = $obj;
|
|
||||||
// }
|
|
||||||
$sums = $this->db->query("SELECT * FROM get_account_balance4()");
|
$sums = $this->db->query("SELECT * FROM get_account_balance4()");
|
||||||
//$this->from("get_account_balance4()")->findAll();
|
|
||||||
// $this->groupby('source_id')->asArray();
|
|
||||||
return $sums->getResult();
|
return $sums->getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function saveBill($data){
|
public function storeBillFile(int $billId, string $filename){
|
||||||
|
$this->update($billId, [ 'rechnung' => $filename ]);
|
||||||
|
}
|
||||||
|
public function deleteBillFile(int $billId){
|
||||||
|
$this->set('rechnung', 'NULL',false);
|
||||||
|
$this->update($billId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function saveBill($data) : int {
|
||||||
$details = model('App\Models\mBillDetails');
|
$details = model('App\Models\mBillDetails');
|
||||||
$accounts = model('App\Models\mAccounts');
|
$accounts = model('App\Models\mAccounts');
|
||||||
$this->set('datum', date( "Y-m-d", strtotime($data['datum'] ) ));
|
$this->set('datum', date( "Y-m-d", strtotime($data['datum'] ) ));
|
||||||
@@ -201,7 +180,7 @@ class mBills extends Model {
|
|||||||
$this->update($data['id']);
|
$this->update($data['id']);
|
||||||
}
|
}
|
||||||
$details->saveEntries($data, $billId);
|
$details->saveEntries($data, $billId);
|
||||||
|
return $billId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?= $this->extend('layouts/smarthome'); ?>
|
<?= $this->extend('layout'); ?>
|
||||||
|
|
||||||
<?= $this->section('menu'); ?>
|
<?= $this->section('menu'); ?>
|
||||||
<?= $this->include('menu/dashboard_menu') ?>
|
<?= $this->include('sidebar') ?>
|
||||||
<?= $this->endSection(); ?>
|
<?= $this->endSection(); ?>
|
||||||
<?= $this->section('content'); ?>
|
<?= $this->section('content'); ?>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
@@ -14,7 +14,12 @@
|
|||||||
<div class="col-md-8 col-12">
|
<div class="col-md-8 col-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header pb-0">
|
<div class="card-header pb-0">
|
||||||
<h4 class="card-title"><?= ($transfer?'Neuer Transfer':($isScheduled?'Neue Terminbuchung':'Neue Rechnung'))?></h4>
|
<?php if ($id) : ?>
|
||||||
|
<h4 class="card-title"><?= ($transfer?'Transfer bearbeiten':($isScheduled?'Terminbuchung bearbeiten':'Rechnung bearbeiten'))?></h4>
|
||||||
|
<?php else: ?>
|
||||||
|
<h4 class="card-title"><?= ($transfer?'Neuer Transfer':($isScheduled?'Neue Terminbuchung':'Neue Rechnung'))?></h4>
|
||||||
|
|
||||||
|
<?php endif; ?>
|
||||||
<?php if (! empty($validation)) : ?>
|
<?php if (! empty($validation)) : ?>
|
||||||
<div class='alert alert-danger mt-2'>
|
<div class='alert alert-danger mt-2'>
|
||||||
<div class="errors" role="alert">
|
<div class="errors" role="alert">
|
||||||
@@ -42,11 +47,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 <?= ($transfer?' d-none':($isScheduled?' d-none':'')) ?>">
|
<div class="col-12 <?= ($transfer?' d-none':($isScheduled?' d-none':'')) ?>">
|
||||||
<label for="billfile">Rechnung</label>
|
<label for="billfile">Rechnung:</label>
|
||||||
<?php if (!isset($billfile)): ?>
|
<input type="file" id="billfile" name="billfile" class="form-control <?= (!isset($billfile))?'':'d-none' ?>" capture="environment" accept="image/*, application/pdf">
|
||||||
<input type="file" id="billfile" name="billfile" class="form-control" capture="environment" accept="image/*, application/pdf">
|
<?php if (isset($billfile)): ?>
|
||||||
<?php else: ?>
|
<a href="/viewBill/<?= $billfile ?>" id="billfileRef"><?= $billfile ?></a>
|
||||||
<input type="text" disabled="disabled" name="temp" id="billfile1" class="form-control" value="<?= set_value('billfile1', $billfile??'') ?>">
|
<a class="" onclick="removeBillFile(this);"><i class="fa fa-trash"></i></a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 <?= ($transfer?' d-none':'d-none') ?>">
|
<div class="col-12 <?= ($transfer?' d-none':'d-none') ?>">
|
||||||
@@ -124,8 +129,11 @@
|
|||||||
<a class="btn btn-info multi" onclick="addLine();" role="button">+ Zeile</a>
|
<a class="btn btn-info multi" onclick="addLine();" role="button">+ Zeile</a>
|
||||||
<input type="checkbox" id="validate" name="validate" value="1" class='btn-check' autocomplete="off" <?= set_checkbox('validate', '1', (($validate??"f")=="t")?true:false) ?>>
|
<input type="checkbox" id="validate" name="validate" value="1" class='btn-check' autocomplete="off" <?= set_checkbox('validate', '1', (($validate??"f")=="t")?true:false) ?>>
|
||||||
<label class="btn btn-outline-danger" for="validate">Entwurf</label>
|
<label class="btn btn-outline-danger" for="validate">Entwurf</label>
|
||||||
|
<?php if ($id) : ?>
|
||||||
|
<a class="btn btn-danger" data-bs-toggle="modal" data-bs-id="<?= $id ?>" data-bs-target="#mymodal"><i class="fa fa-trash"></i></a>
|
||||||
|
<?php endif; ?>
|
||||||
<button type="submit" class="btn btn-primary">Submit</button>
|
<button type="submit" class="btn btn-primary">Submit</button>
|
||||||
<a class="btn btn-secondary" onclick="history.back();" role="button">Zurück</a>
|
<a class="btn btn-secondary" onclick="history.back();" role="button"><i class="fa-solid fa-rotate-left"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
1
app/Views/viewBillImg.php
Normal file
1
app/Views/viewBillImg.php
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<img src="<?=$filename?>" alt="Rechnung <?=$filename?>">
|
||||||
@@ -1,81 +1,97 @@
|
|||||||
$(function() {
|
$(function () {
|
||||||
$('.parent').change(function() {
|
$('.parent').change(function () {
|
||||||
var $subs = $(this).parent().parent().children( ".sub" ).children();
|
var $subs = $(this).parent().parent().children(".sub").children();
|
||||||
$subs.children().remove().end();
|
$subs.children().remove().end();
|
||||||
var $output = '';
|
var $output = '';
|
||||||
$liste = subsdata[$(this).val()];
|
$liste = subsdata[$(this).val()];
|
||||||
$sort = Object.entries($liste).sort((a,b) => (a[1]>b[1])?1:(b[1]>a[1])?-1:0);
|
$sort = Object.entries($liste).sort((a, b) => (a[1] > b[1]) ? 1 : (b[1] > a[1]) ? -1 : 0);
|
||||||
$.each($sort, function(key, value) {
|
$.each($sort, function (key, value) {
|
||||||
$output += '<option value="'+value[0]+'">' + value[1] + '</option>';
|
$output += '<option value="' + value[0] + '">' + value[1] + '</option>';
|
||||||
});
|
});
|
||||||
$subs.append($output);
|
$subs.append($output);
|
||||||
});
|
});
|
||||||
$('#multi').change(function() {
|
$('#multi').change(function () {
|
||||||
if($(this).is(":checked")) {
|
if ($(this).is(":checked")) {
|
||||||
$('.single').addClass('d-none');
|
$('.single').addClass('d-none');
|
||||||
$('.multi').removeClass('d-none');
|
$('.multi').removeClass('d-none');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$('.single').removeClass('d-none');
|
$('.single').removeClass('d-none');
|
||||||
$('.multi').addClass('d-none');
|
$('.multi').addClass('d-none');
|
||||||
//'unchecked' event code
|
//'unchecked' event code
|
||||||
}).change();
|
}).change();
|
||||||
$('.dt-amount, .dt-subamount').change(function() {
|
$('.dt-amount, .dt-subamount').change(function () {
|
||||||
var temp = convertInput( $(this).val());
|
var temp = convertInput($(this).val());
|
||||||
$(this).val( convertOutput(temp));
|
$(this).val(convertOutput(temp));
|
||||||
if ($('#multi').is(":checked")) {
|
if ($('#multi').is(":checked")) {
|
||||||
recalcOpenAmount();
|
recalcOpenAmount();
|
||||||
}
|
}
|
||||||
}).change();
|
}).change();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function logData(event){
|
function logData(event) {
|
||||||
var data = document.getElementById("billfile");
|
var data = document.getElementById("billfile");
|
||||||
console.log(data.value);
|
console.log(data.value);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function addLine(){
|
function addLine() {
|
||||||
$('#linecont > div').each(function () {
|
$('#linecont > div').each(function () {
|
||||||
if ($(this).hasClass("d-none")){
|
if ($(this).hasClass("d-none")) {
|
||||||
$(this).removeClass("d-none");
|
$(this).removeClass("d-none");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertInput( number )
|
function removeBillFile(e) {
|
||||||
{
|
e.classList.add("d-none");
|
||||||
var zahl = number.replace( /\,/g, "." );
|
document.getElementById("billfile").classList.remove("d-none");
|
||||||
var czahl = eval( zahl );
|
|
||||||
|
const billFile = document.getElementById("billfileRef");
|
||||||
|
const form = document.getElementById('newbill');
|
||||||
|
var DOB = document.createElement("input");
|
||||||
|
DOB.setAttribute("name", "removeBillFile");
|
||||||
|
DOB.setAttribute("value", billFile.innerText);
|
||||||
|
DOB.setAttribute("type", "hidden");
|
||||||
|
form.appendChild(DOB);
|
||||||
|
|
||||||
|
|
||||||
|
billFile.innerText = "REMOVED FILE: "+billFile.innerText;
|
||||||
|
billFile.classList.add("text-decoration-line-through");
|
||||||
|
billFile.classList.add("text-danger");
|
||||||
|
billFile.removeAttribute("href");
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertInput(number) {
|
||||||
|
var zahl = number.replace(/\,/g, ".");
|
||||||
|
var czahl = eval(zahl);
|
||||||
return czahl;
|
return czahl;
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertOutput( number )
|
function convertOutput(number) {
|
||||||
{
|
if (typeof number !== 'undefined') {
|
||||||
if ( typeof number !== 'undefined' )
|
var string = number.toFixed(2);
|
||||||
{
|
return string.replace(/\,/g, ".");
|
||||||
var string = number.toFixed( 2 );
|
|
||||||
return string.replace( /\,/g, "." );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function recalcOpenAmount(){
|
function recalcOpenAmount() {
|
||||||
var summe = 0.0;
|
var summe = 0.0;
|
||||||
$('.dt-subamount').each(function () {
|
$('.dt-subamount').each(function () {
|
||||||
b = $(this).val();
|
b = $(this).val();
|
||||||
b = convertInput(b);
|
b = convertInput(b);
|
||||||
if (typeof b !== 'undefined'){
|
if (typeof b !== 'undefined') {
|
||||||
b = $(this).hasClass("text-danger") ? b*(-1) : b;
|
b = $(this).hasClass("text-danger") ? b * (-1) : b;
|
||||||
summe = summe +b;
|
summe = summe + b;
|
||||||
}
|
}
|
||||||
// summe = summe + convertInput($(this).val());
|
// summe = summe + convertInput($(this).val());
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#openamount').val(Math.round( ($('#total_in').val() - $('#total_out').val() - summe) * 100 ) / 100);
|
$('#openamount').val(Math.round(($('#total_in').val() - $('#total_out').val() - summe) * 100) / 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// $('form').submit(function () {
|
// $('form').submit(function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user