Displaying estimates
This commit is contained in:
@@ -112,8 +112,8 @@
|
||||
|
||||
<div class="event-flexbox" v-else>
|
||||
<div class="event-flexbox-row top">
|
||||
<div class="left"><ParticipationSummary v-if="dynamicProps.event" :event="dynamicProps.event" /></div>
|
||||
<div class="right">
|
||||
<div class="actions-left"><ParticipationSummary v-if="dynamicProps.event" :event="dynamicProps.event" /></div>
|
||||
<div class="actions-right">
|
||||
<a :href="'/event/details/' + props.data.event.identifier + '/pdf/first-aid-list'">
|
||||
<input type="button" value="Erste-Hilfe-Liste (PDF)" />
|
||||
</a><br/>
|
||||
@@ -186,6 +186,7 @@
|
||||
<label style="font-size: 9pt;" class="link" @click="showCommonSettings">Allgemeine Einstellungen</label>
|
||||
<label style="font-size: 9pt;" class="link" @click="showEventManagement">Veranstaltungsleitung</label>
|
||||
<label style="font-size: 9pt;" class="link" @click="showParticipationFees">Teilnahmegebühren</label>
|
||||
<a style="font-size: 9pt;" class="link" :href="'/budget/' + props.data.event.costUnit.id">Budget bearbeiten</a>
|
||||
<a style="font-size: 9pt;" class="link" :href="'/cost-unit/' + props.data.event.costUnit.id">Ausgabenübersicht</a>
|
||||
<a v-if="!dynamicProps.event.registrationAllowed && !dynamicProps.event.archived" style="color: #ff0000; font-size: 9pt;" class="link" @click="archiveEvent">Archivieren</a>
|
||||
</div>
|
||||
@@ -248,13 +249,13 @@
|
||||
gap: 10px; /* Abstand zwischen den Spalten */
|
||||
}
|
||||
|
||||
.event-flexbox-row.top .left {
|
||||
.event-flexbox-row.top .actions-left {
|
||||
flex: 0 0 calc(100% - 300px);
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.event-flexbox-row.top .right {
|
||||
flex: 0 0 250px;
|
||||
.event-flexbox-row.top .actions-right {
|
||||
flex: 0 0 200px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
@@ -263,7 +264,7 @@
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.event-flexbox-row.top .right input[type="button"] {
|
||||
.event-flexbox-row.top .actions-right input[type="button"] {
|
||||
width: 100% !important;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
@@ -96,19 +96,31 @@ const props = defineProps({
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th style="padding-top: 20px; font-size: 12pt !important;" colspan="2">Budget</th>
|
||||
<td v-if="props.event.totalBalance.expected.value >= 0" style="color: #4caf50; font-weight: bold; padding-top: 20px; font-size: 12pt !important;">
|
||||
{{ props.event.totalBalance.estimated.readable }}
|
||||
</td>
|
||||
<td v-else style="color: #f44336; font-weight: bold; padding-top: 20px; font-size: 12pt !important;">
|
||||
{{props.event.totalBalance.estimated.readable}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="right">
|
||||
<h3>Ausgaben</h3>
|
||||
<table class="event-payment-table" style="font-size: 10pt;">
|
||||
<table class="event-payment-table" style="font-size: 10pt; width:100%">
|
||||
<tr v-for="amount in props.event.costUnit.amounts">
|
||||
<th>{{amount.name}}</th>
|
||||
<td>{{amount.string}}</td>
|
||||
<td>({{ amount.estimatedString }}) </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="color:#f44336; border-width: 1px; border-top-style: solid; ">Gesamt</th>
|
||||
<td style="color:#f44336; border-width: 1px; border-top-style: solid; font-weight: bold">{{props.event.costUnit.overAllAmount.text}}</td>
|
||||
<td style="color:#f44336; border-width: 1px; border-top-style: solid; font-weight: bold; padding-right: 20px;">{{props.event.costUnit.overAllAmount.text}}</td>
|
||||
<td style="color:#f44336; border-width: 1px; border-top-style: solid; font-weight: bold">({{props.event.costUnit.overAllEstimatedAmount.text}}))</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
@@ -121,7 +133,7 @@ const props = defineProps({
|
||||
.participant-flexbox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
gap: 20px;
|
||||
width: 95%;
|
||||
margin: 20px auto 0;
|
||||
}
|
||||
@@ -135,7 +147,7 @@ const props = defineProps({
|
||||
.participant-flexbox-row.top .left,
|
||||
.participant-flexbox-row.top .right {
|
||||
|
||||
padding: 10px;
|
||||
padding: 20px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Scopes\InstancedModel;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
|
||||
/**
|
||||
* @property string $name
|
||||
@@ -44,7 +45,15 @@ class CostUnit extends InstancedModel
|
||||
return $this->hasMany(Invoice::class);
|
||||
}
|
||||
|
||||
public function estimates() : hasMany {
|
||||
return $this->hasMany(CostUnitEstimate::class);
|
||||
}
|
||||
|
||||
public function tenant() : BelongsTo {
|
||||
return $this->belongsTo(Tenant::class, 'tenant', 'slug');
|
||||
}
|
||||
|
||||
public function event() : HasOne {
|
||||
return $this->hasOne(Event::class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,6 +178,18 @@ class CostUnitRepository {
|
||||
return $amount;
|
||||
}
|
||||
|
||||
public function sumupEstimatedByInvoiceType(CostUnit $costUnit, InvoiceType $invoiceType) : Amount {
|
||||
$amount = new Amount(0, 'Euro');
|
||||
foreach ($costUnit->estimates()->get() as $estimate) {
|
||||
if ($estimate->type !== $invoiceType->slug) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$amount->addAmount($estimate->calculateAmount());
|
||||
}
|
||||
return $amount;
|
||||
}
|
||||
|
||||
public function sumupUnhandledAmounts(CostUnit $costUnit, bool $donatedAmount = false) : Amount {
|
||||
$amount = new Amount(0, '');
|
||||
|
||||
|
||||
@@ -31,10 +31,15 @@ class CostUnitResource {
|
||||
|
||||
$amounts = [];
|
||||
$overAllAmount = new Amount(0, 'Euro');
|
||||
$overAllEstimatedAmount = new Amount(0, 'Euro');
|
||||
foreach (InvoiceType::orderBy('sort_order')->get() as $invoiceType) {
|
||||
$overAllAmount->addAmount($costUnitRepository->sumupByInvoiceType($this->costUnit, $invoiceType));
|
||||
$overAllEstimatedAmount->addAmount($costUnitRepository->sumupEstimatedByInvoiceType($this->costUnit, $invoiceType));
|
||||
$amounts[$invoiceType->slug]['string'] = $costUnitRepository->sumupByInvoiceType($this->costUnit, $invoiceType)->toString();
|
||||
$amounts[$invoiceType->slug]['name'] = $invoiceType->name;
|
||||
$amounts[$invoiceType->slug]['estimated'] = $costUnitRepository->sumupEstimatedByInvoiceType($this->costUnit, $invoiceType);
|
||||
$amounts[$invoiceType->slug]['estimatedString'] = $costUnitRepository->sumupEstimatedByInvoiceType($this->costUnit, $invoiceType)->toString();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +57,7 @@ class CostUnitResource {
|
||||
'treasurers' => $this->costUnit->treasurers()->get()->map(fn($user) => new UserResource($user))->toArray(),
|
||||
'amounts' => $amounts,
|
||||
'overAllAmount' => ['text' => $overAllAmount->toString(), 'value' => $overAllAmount],
|
||||
'overAllEstimatedAmount' => ['text' => $overAllEstimatedAmount->toString(), 'value' => $overAllEstimatedAmount],
|
||||
]);
|
||||
|
||||
|
||||
|
||||
@@ -86,6 +86,7 @@ class EventResource extends JsonResource{
|
||||
$returnArray['eventEnd'] = $this->event->end_date->format('d.m.Y');
|
||||
$returnArray['eventEndInternal'] = $this->event->end_date;
|
||||
$returnArray['duration'] = $duration;
|
||||
$returnArray['totalParticipantCount'] = $this->event->participants()->count();
|
||||
|
||||
$returnArray['supportPersonIndex'] = $this->event->support_per_person->toString();
|
||||
$returnArray['supportPerson'] = $this->calculateSupportPerPerson($returnArray['participants']);
|
||||
@@ -95,12 +96,15 @@ class EventResource extends JsonResource{
|
||||
|
||||
$totalBalanceReal = new Amount(0, 'Euro');
|
||||
$totalBalanceExpected = new Amount(0, 'Euro');
|
||||
$totalBalanceEstimated = new Amount(0, 'Euro');
|
||||
|
||||
$totalBalanceReal->addAmount($returnArray['income']['real']['amount']);
|
||||
$totalBalanceExpected->addAmount($returnArray['income']['expected']['amount']);
|
||||
$totalBalanceEstimated->addAmount($returnArray['income']['expected']['amount']);
|
||||
|
||||
$totalBalanceReal->subtractAmount($returnArray['costUnit']['overAllAmount']['value']);
|
||||
$totalBalanceExpected->subtractAmount($returnArray['costUnit']['overAllAmount']['value']);
|
||||
$totalBalanceEstimated->subtractAmount($returnArray['costUnit']['overAllEstimatedAmount']['value']);
|
||||
$returnArray['totalBalance'] = [
|
||||
'real' => [
|
||||
'value' => $totalBalanceReal->getAmount(),
|
||||
@@ -108,7 +112,11 @@ class EventResource extends JsonResource{
|
||||
], 'expected' => [
|
||||
'value' => $totalBalanceExpected->getAmount(),
|
||||
'readable' => $totalBalanceExpected->toString(),
|
||||
]
|
||||
],
|
||||
'estimated' => [
|
||||
'value' => $totalBalanceEstimated->getAmount(),
|
||||
'readable' => $totalBalanceEstimated->toString(),
|
||||
]
|
||||
];
|
||||
|
||||
$returnArray['flatSupport'] = $this->event->support_flat->toString();
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace App\Scopes;
|
||||
use App\Models\Tenant;
|
||||
use App\Providers\AuthCheckProvider;
|
||||
use App\Repositories\CostUnitRepository;
|
||||
use App\Repositories\EstimatesRepository;
|
||||
use App\Repositories\EventParticipantRepository;
|
||||
use App\Repositories\EventRepository;
|
||||
use App\Repositories\InvoiceRepository;
|
||||
@@ -21,6 +22,7 @@ abstract class CommonController {
|
||||
protected InvoiceRepository $invoices;
|
||||
protected EventRepository $events;
|
||||
protected EventParticipantRepository $eventParticipants;
|
||||
protected EstimatesRepository $estimates;
|
||||
|
||||
public function __construct() {
|
||||
$this->tenant = app('tenant');
|
||||
@@ -30,6 +32,7 @@ abstract class CommonController {
|
||||
$this->invoices = new InvoiceRepository();
|
||||
$this->events = new EventRepository();
|
||||
$this->eventParticipants = new EventParticipantRepository();
|
||||
$this->estimates = new EstimatesRepository();
|
||||
}
|
||||
|
||||
protected function checkAuth() {
|
||||
|
||||
@@ -21,6 +21,8 @@ require_once __DIR__ . '/../app/Domains/Invoice/Routes/web.php';
|
||||
require_once __DIR__ . '/../app/Domains/Invoice/Routes/api.php';
|
||||
require_once __DIR__ . '/../app/Domains/Event/Routes/web.php';
|
||||
require_once __DIR__ . '/../app/Domains/Event/Routes/api.php';
|
||||
require_once __DIR__ . '/../app/Domains/Budget/Routes/web.php';
|
||||
require_once __DIR__ . '/../app/Domains/Budget/Routes/api.php';
|
||||
|
||||
|
||||
Route::get('/LKvDUqWl', function () {
|
||||
|
||||
Reference in New Issue
Block a user