Invoice Widgets completed

This commit is contained in:
2026-02-11 19:38:06 +01:00
parent 87531237c7
commit 882752472e
16 changed files with 240 additions and 18 deletions

View File

@@ -5,8 +5,10 @@ namespace App\Domains\Dashboard\Controllers;
use App\Providers\AuthCheckProvider;
use App\Providers\InertiaProvider;
use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Js;
class DashboardController extends CommonController {
public function __invoke(Request $request) {
@@ -15,10 +17,6 @@ class DashboardController extends CommonController {
}
return redirect()->intended('/login');
dd('U');
return $this->renderForGuest($request);
}
private function renderForLoggedInUser(Request $request) {
@@ -29,4 +27,14 @@ class DashboardController extends CommonController {
private function renderForGuest(Request $request) {
}
public function getMyInvoices() : JsonResponse {
$invoices = $this->invoices->getMyInvoicesWidget();
return response()->json(['myInvoices' => $invoices]);
}
public function getOpenCostUnits() : JsonResponse {
$costUnits = $this->costUnits->listForSummary(5);
return response()->json(['openCostUnits' => $costUnits]);
}
}

View File

@@ -0,0 +1,15 @@
<?php
use App\Domains\Dashboard\Controllers\DashboardController;
use App\Middleware\IdentifyTenant;
use Illuminate\Support\Facades\Route;
Route::middleware(IdentifyTenant::class)->group(function () {
Route::middleware(['auth'])->group(function () {
Route::prefix('api/v1/dashboard')->group(function () {
Route::get('/my-invoices', [DashboardController::class, 'getMyInvoices']);
Route::get('/open-cost-units', [DashboardController::class, 'getOpenCostUnits']);
});
});
});

View File

@@ -0,0 +1 @@
<?php

View File

@@ -1,11 +0,0 @@
<script setup>
</script>
<template>
</template>
<style scoped>
</style>

View File

@@ -0,0 +1,31 @@
<script setup>
import {onMounted, reactive} from "vue";
const myInvoices = reactive({
'myInvoices': '',
'approvedInvoices': '',
'deniedInvoices': '',
})
onMounted(async () => {
const response = await fetch('/api/v1/dashboard/my-invoices');
const data = await response.json();
Object.assign(myInvoices, data);
});
</script>
<template>
<p v-for="invoice in myInvoices.myInvoices" class="widget-content-item">
<a :href="'/invoices/my-invoices/' + invoice.slug" class="link">{{invoice.title}} ({{invoice.count}})</a>
<label>
{{invoice.amount}}
</label>
</p>
</template>
<style scoped>
</style>

View File

@@ -0,0 +1,40 @@
<script setup>
import {onMounted, reactive} from "vue";
const costUnits = reactive({
'openCostUnits': '',
})
onMounted(async () => {
const response = await fetch('/api/v1/dashboard/open-cost-units');
const data = await response.json();
Object.assign(costUnits, data);
});
</script>
<template>
<table class="widget-content-item" v-if="costUnits.openCostUnits.length > 0">
<tr>
<td style="font-weight: bold">Kostenstelle</td>
<td style="font-weight: bold">Neu</td>
<td style="font-weight: bold">Ang</td>
<td style="font-weight: bold">Betrag</td>
</tr>
<tr v-for="costUnit in costUnits.openCostUnits">
<td>{{costUnit.name}}</td>
<td>{{costUnit.new_invoices_count}}</td>
<td>{{costUnit.approved_invoices_count}}</td>
<td>{{costUnit.totalAmount}}</td>
</tr>
</table>
<p v-else style="padding: 10px; font-weight: bold">Es existieren im Moment keine Abrechnugnen, um die du dich kümmern musst.</p>
</template>
<style scoped>
</style>