akaunting 3.0 (the last dance)
This commit is contained in:
7
resources/views/components/reports/detail.blade.php
Normal file
7
resources/views/components/reports/detail.blade.php
Normal file
@ -0,0 +1,7 @@
|
||||
@include($class->views['detail.content.header'])
|
||||
|
||||
@foreach($class->tables as $table_key => $table_name)
|
||||
@include($class->views['detail.table'])
|
||||
@endforeach
|
||||
|
||||
@include($class->views['detail.content.footer'])
|
@ -0,0 +1,7 @@
|
||||
<div class="overflow-x-visible mb-8">
|
||||
<table class="w-full rp-border-collapse">
|
||||
@include($class->views['detail.table.header'])
|
||||
@include($class->views['detail.table.body'])
|
||||
@include($class->views['detail.table.footer'])
|
||||
</table>
|
||||
</div>
|
@ -0,0 +1,13 @@
|
||||
<tbody>
|
||||
@if (!empty($class->row_values[$table_key]))
|
||||
@foreach($class->row_tree_nodes[$table_key] as $id => $node)
|
||||
@include($class->views['detail.table.row'], ['tree_level' => 0])
|
||||
@endforeach
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="{{ count($class->dates) + 2 }}">
|
||||
<div class="text-muted pl-0">{{ trans('general.no_records') }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
</tbody>
|
@ -0,0 +1,11 @@
|
||||
@php $grand_total = array_sum($class->footer_totals[$table_key]); @endphp
|
||||
|
||||
<tfoot>
|
||||
<tr class="px-3">
|
||||
<th class="{{ $class->column_name_width }} text-uppercase text-left">{{ trans_choice('general.totals', 1) }}</th>
|
||||
@foreach($class->footer_totals[$table_key] as $total)
|
||||
<th class="{{ $class->column_value_width }} text-right px-0">{{ $class->has_money ? money($total, default_currency(), true) : $total }}</th>
|
||||
@endforeach
|
||||
<th class="{{ $class->column_name_width }} text-right pl-0 pr-4">{{ $class->has_money ? money($grand_total, default_currency(), true) : $grand_total }}</th>
|
||||
</tr>
|
||||
</tfoot>
|
@ -0,0 +1,13 @@
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
@if (($table_key == 'default') && !empty($class->groups))
|
||||
<th class="{{ $class->column_name_width }}">{{ $class->groups[$class->model->settings->group] }}</th>
|
||||
@else
|
||||
<th class="{{ $class->column_name_width }}">{{ $table_name }}</th>
|
||||
@endif
|
||||
@foreach($class->dates as $date)
|
||||
<th class="{{ $class->column_value_width }} text-right px-0">{{ $date }}</th>
|
||||
@endforeach
|
||||
<th class="{{ $class->column_name_width }} text-right pl-0 pr-4">{{ trans_choice('general.totals', 1) }}</th>
|
||||
</tr>
|
||||
</thead>
|
@ -0,0 +1,87 @@
|
||||
<!-- if it HAS NOT subcategories -->
|
||||
@if (is_null($node))
|
||||
@php
|
||||
$rows = $class->row_values[$table_key][$id];
|
||||
@endphp
|
||||
|
||||
@if ($row_total = array_sum($rows))
|
||||
@if (isset($parent_id))
|
||||
<tr class="collapse-sub" data-collapse="child-{{ $parent_id }}">
|
||||
<td class="{{ $class->column_name_width }} py-top text-left text-black-400" style="padding-left: {{ $tree_level * 20 }}px;" title="{{ $class->row_names[$table_key][$id] }}">{{ $class->row_names[$table_key][$id] }}</td>
|
||||
@else
|
||||
<tr>
|
||||
<td class="{{ $class->column_name_width }} py-top text-left text-black-400" title="{{ $class->row_names[$table_key][$id] }}">{{ $class->row_names[$table_key][$id] }}</td>
|
||||
@endif
|
||||
|
||||
@foreach($rows as $row)
|
||||
<td class="{{ $class->column_value_width }} py-top ltr:text-right rtl:text-left text-alignment-right text-black-400 text-xs">{{ $class->has_money ? money($row, default_currency(), true) : $row }}</td>
|
||||
@endforeach
|
||||
<td class="{{ $class->column_name_width }} py-top ltr:text-right rtl:text-left text-alignment-right text-black-400 text-xs uppercase">{{ $class->has_money ? money($row_total, default_currency(), true) : $row }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
<!-- if it HAS subcategories -->
|
||||
@if (is_array($node))
|
||||
<!-- parent part -->
|
||||
@php
|
||||
$parent_row_values = $class->row_values[$table_key][$id];
|
||||
|
||||
array_walk_recursive($node, function ($value, $key) use ($class, $table_key, $id, &$parent_row_values) {
|
||||
if ($key == $id) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach($class->row_values[$table_key][$key] as $date => $amount) {
|
||||
$parent_row_values[$date] += $amount;
|
||||
}
|
||||
});
|
||||
@endphp
|
||||
|
||||
@if ($row_total = array_sum($parent_row_values))
|
||||
@if (isset($parent_id))
|
||||
<tr class="collapse-sub" data-collapse="child-{{ $parent_id }}">
|
||||
<td class="{{ $class->column_name_width }} py-top text-left text-black-400" style="padding-left: {{ $tree_level * 20 }}px;" title="{{ $class->row_names[$table_key][$id] }}">
|
||||
@else
|
||||
<tr>
|
||||
<td class="{{ $class->column_name_width }} py-top text-left text-black-400" title="{{ $class->row_names[$table_key][$id] }}">
|
||||
@endif
|
||||
|
||||
{{ $class->row_names[$table_key][$id] }}
|
||||
@if (array_sum($parent_row_values) != array_sum($class->row_values[$table_key][$id]))
|
||||
<button type="button" class="align-text-top" node="child-{{ $id }}" onClick="toggleSub('child-{{ $id }}', event)">
|
||||
<span class="material-icons transform transition-all rotate-90 text-lg leading-none">navigate_next</span>
|
||||
</button>
|
||||
@endif
|
||||
</td>
|
||||
@foreach($parent_row_values as $row)
|
||||
<td class="{{ $class->column_value_width }} py-top ltr:text-right rtl:text-left text-alignment-right text-black-400 text-xs">{{ $class->has_money ? money($row, default_currency(), true) : $row }}</td>
|
||||
@endforeach
|
||||
<td class="{{ $class->column_name_width }} py-top ltr:text-right rtl:text-left text-alignment-right text-black-400 text-xs uppercase">{{ $class->has_money ? money($row_total, default_currency(), true) : $row }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
|
||||
<!-- no categories part -->
|
||||
@php $rows = $class->row_values[$table_key][$id]; @endphp
|
||||
@if (($row_total = array_sum($rows)) && array_sum($parent_row_values) != array_sum($rows))
|
||||
<tr class="collapse-sub" data-collapse="child-{{ $id }}">
|
||||
<td class="{{ $class->column_name_width }} py-top text-left text-black-400" style="padding-left: {{ ($tree_level + 1) * 20 }}px;" title="{{ $class->row_names[$table_key][$id] }}">{{ $class->row_names[$table_key][$id] }}</td>
|
||||
@foreach($rows as $row)
|
||||
<td class="{{ $class->column_value_width }} py-top ltr:text-right rtl:text-left text-alignment-right text-black-400 text-xs">{{ $class->has_money ? money($row, default_currency(), true) : $row }}</td>
|
||||
@endforeach
|
||||
<td class="{{ $class->column_name_width }} py-top ltr:text-right rtl:text-left text-alignment-right text-black-400 text-xs uppercase">{{ $class->has_money ? money($row_total, default_currency(), true) : $row }}</td>
|
||||
</tr>
|
||||
@endif
|
||||
|
||||
<!-- subcategories part -->
|
||||
@php
|
||||
$parent_id = $id;
|
||||
$tree_level++;
|
||||
@endphp
|
||||
|
||||
@foreach($node as $id => $node)
|
||||
@if ($parent_id != $id)
|
||||
@include($class->views['detail.table.row'], ['parent_id' => $parent_id, 'tree_level' => $tree_level])
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
102
resources/views/components/reports/fields.blade.php
Normal file
102
resources/views/components/reports/fields.blade.php
Normal file
@ -0,0 +1,102 @@
|
||||
@foreach($fields as $field)
|
||||
@php $type = $field['type']; @endphp
|
||||
|
||||
@switch($type)
|
||||
@case('text')
|
||||
@case('textGroup')
|
||||
<x-form.group.text
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
data-field="settings"
|
||||
:dynamic-attributes="$field['attributes']"
|
||||
/>
|
||||
@break
|
||||
|
||||
@case('email')
|
||||
@case('emailGroup')
|
||||
<x-form.group.email
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
data-field="settings"
|
||||
:dynamic-attributes="$field['attributes']"
|
||||
/>
|
||||
@break
|
||||
|
||||
@case('password')
|
||||
@case('passwordGroup')
|
||||
<x-form.group.email
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
data-field="settings"
|
||||
:dynamic-attributes="$field['attributes']"
|
||||
/>
|
||||
@break
|
||||
|
||||
@case('textarea')
|
||||
@case('textareaGroup')
|
||||
<x-form.group.textarea
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
data-field="settings"
|
||||
:dynamic-attributes="$field['attributes']"
|
||||
/>
|
||||
@break
|
||||
|
||||
@case('date')
|
||||
@case('dateGroup')
|
||||
<x-form.group.date
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
data-field="settings"
|
||||
:dynamic-attributes="array_merge([
|
||||
'model' => 'form.settings'.'.'.$field['name'],
|
||||
'show-date-format' => company_date_format(),
|
||||
], $field['attributes'])"
|
||||
|
||||
/>
|
||||
@break
|
||||
|
||||
@case('select')
|
||||
@case('selectGroup')
|
||||
<x-form.group.select
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
:options="$field['values']"
|
||||
:selected="$field['selected']"
|
||||
data-field="settings"
|
||||
:dynamic-attributes="$field['attributes']"
|
||||
/>
|
||||
@break
|
||||
|
||||
@case('radio')
|
||||
@case('radioGroup')
|
||||
<x-form.group.radio
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
:dynamic-attributes="array_merge([
|
||||
'data-field' => 'settings'
|
||||
], $field['attributes'])"
|
||||
/>
|
||||
@break
|
||||
|
||||
@case('checkbox')
|
||||
@case('checkboxGroup')
|
||||
<x-form.group.checkbox
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
:dynamic-attributes="array_merge([
|
||||
'data-field' => 'settings'
|
||||
], $field['attributes'])"
|
||||
/>
|
||||
@break
|
||||
|
||||
@default
|
||||
<x-form.group.text
|
||||
name="{{ $field['name'] }}"
|
||||
label="{{ $field['title'] }}"
|
||||
:dynamic-attributes="array_merge([
|
||||
'data-field' => 'settings'
|
||||
], $field['attributes'])"
|
||||
/>
|
||||
@endswitch
|
||||
@endforeach
|
94
resources/views/components/reports/filter.blade.php
Normal file
94
resources/views/components/reports/filter.blade.php
Normal file
@ -0,0 +1,94 @@
|
||||
<x-form id="report-show" action="{{ route('reports.show', $class->model->id) }}">
|
||||
@php
|
||||
$filters = [];
|
||||
$filtered = [];
|
||||
|
||||
$skipped = [
|
||||
'keys', 'names', 'types', 'routes', 'defaults'
|
||||
];
|
||||
|
||||
foreach ($class->filters as $filter_name => $filter_values) {
|
||||
if (in_array($filter_name, $skipped)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$key = $filter_name;
|
||||
|
||||
if (isset($class->filters['keys']) && !empty($class->filters['keys'][$filter_name])) {
|
||||
$key = $class->filters['keys'][$filter_name];
|
||||
} else if ($key == 'years') {
|
||||
$key = 'year';
|
||||
} else if ($key == 'customers' || $key == 'vendors') {
|
||||
$key = 'contact_id';
|
||||
} else {
|
||||
$key = Str::singular($key) . '_id';
|
||||
}
|
||||
|
||||
$value = '';
|
||||
|
||||
if (isset($class->filters['names']) && !empty($class->filters['names'][$filter_name])) {
|
||||
$value = $class->filters['names'][$filter_name];
|
||||
} else if (trans('reports.' . $filter_name) != 'reports.' . $filter_name) {
|
||||
$value = (strpos(trans('reports.' . $filter_name), '|') !== false) ? trans_choice('reports.' . $filter_name, 1) : trans('reports.' . $filter_name);
|
||||
} else {
|
||||
$value = (strpos(trans('general.' . $filter_name), '|') !== false) ? trans_choice('general.' . $filter_name, 1) : trans('general.' . $filter_name);
|
||||
}
|
||||
|
||||
if ($key == 'year') {
|
||||
$value = trans('general.financial_year');
|
||||
}
|
||||
|
||||
$type = 'select';
|
||||
|
||||
if (isset($class->filters['types']) && !empty($class->filters['types'][$filter_name])) {
|
||||
$type = $class->filters['types'][$filter_name];
|
||||
}
|
||||
|
||||
$url = '';
|
||||
|
||||
if (isset($class->filters['routes']) && !empty($class->filters['routes'][$filter_name])) {
|
||||
$route = $class->filters['routes'][$filter_name];
|
||||
|
||||
$url = (is_array($route)) ? route($route[0], $route[1]) : route($route);
|
||||
}
|
||||
|
||||
$default_value = null;
|
||||
|
||||
if (isset($class->filters['defaults']) && !empty($class->filters['defaults'][$filter_name])) {
|
||||
$default_value = $class->filters['defaults'][$filter_name];
|
||||
}
|
||||
|
||||
if ($key == 'year') {
|
||||
$default_value = \Date::now()->year;
|
||||
}
|
||||
|
||||
$filters[] = [
|
||||
'key' => $key,
|
||||
'value' => $value,
|
||||
'type' => $type,
|
||||
'url' => $url,
|
||||
'values' => $filter_values,
|
||||
];
|
||||
|
||||
if (!is_null($default_value)) {
|
||||
$filtered[] = [
|
||||
'option' => $key,
|
||||
'operator' => '=',
|
||||
'value' => $default_value,
|
||||
];
|
||||
}
|
||||
|
||||
if (old($key) || request()->get($key)) {
|
||||
$filtered[] = [
|
||||
'option' => $key,
|
||||
'operator' => '=',
|
||||
'value' => old($key, request()->get($key)),
|
||||
];
|
||||
}
|
||||
}
|
||||
@endphp
|
||||
|
||||
<div class="items-center">
|
||||
<x-search-string :filters="$filters" :filtered="$filtered" />
|
||||
</div>
|
||||
</x-form>
|
13
resources/views/components/reports/print.blade.php
Normal file
13
resources/views/components/reports/print.blade.php
Normal file
@ -0,0 +1,13 @@
|
||||
<x-layouts.print>
|
||||
<x-slot name="title">
|
||||
{{ $class->model->name }}
|
||||
</x-slot>
|
||||
|
||||
<x-slot name="content">
|
||||
<h2>{{ $class->model->name }}</h2>
|
||||
|
||||
{{ setting('company.name') }}
|
||||
|
||||
@include($class->views[$class->type])
|
||||
</x-slot>
|
||||
</x-layouts.print>
|
31
resources/views/components/reports/show.blade.php
Normal file
31
resources/views/components/reports/show.blade.php
Normal file
@ -0,0 +1,31 @@
|
||||
<x-layouts.admin>
|
||||
<x-slot name="title">
|
||||
{{ $class->model->name }}
|
||||
</x-slot>
|
||||
|
||||
<x-slot name="favorite"
|
||||
title="{{ $class->model->name }}"
|
||||
icon="{{ $class->icon }}"
|
||||
:route="['reports.show', $class->model->id]"
|
||||
></x-slot>
|
||||
|
||||
<x-slot name="buttons">
|
||||
<x-link href="{{ url($class->getUrl('print')) }}" target="_blank">
|
||||
{{ trans('general.print') }}
|
||||
</x-link>
|
||||
|
||||
<x-link href="{{ url($class->getUrl('export')) }}">
|
||||
{{ trans('general.export') }}
|
||||
</x-link>
|
||||
</x-slot>
|
||||
|
||||
<x-slot name="content">
|
||||
<div class="my-10">
|
||||
@include($class->views['filter'])
|
||||
|
||||
@include($class->views[$class->type])
|
||||
</div>
|
||||
</x-slot>
|
||||
|
||||
<x-script folder="common" file="reports" />
|
||||
</x-layouts.admin>
|
10
resources/views/components/reports/summary.blade.php
Normal file
10
resources/views/components/reports/summary.blade.php
Normal file
@ -0,0 +1,10 @@
|
||||
@include($class->views['summary.content.header'])
|
||||
|
||||
@foreach($class->tables as $table_key => $table_name)
|
||||
<div class="flex flex-col lg:flex-row mt-12">
|
||||
@include($class->views['summary.table'])
|
||||
@include($class->views['summary.chart'])
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
@include($class->views['summary.content.footer'])
|
30
resources/views/components/reports/summary/chart.blade.php
Normal file
30
resources/views/components/reports/summary/chart.blade.php
Normal file
@ -0,0 +1,30 @@
|
||||
@php $charts = $class->getCharts($table_key); @endphp
|
||||
|
||||
<div class="w-full lg:w-6/12 lg:ltr:pl-24 lg:rtl:pr-24">
|
||||
<div class="relative mb-10" x-data="{ toggle: 'donut' }">
|
||||
<div class="flex border-b pb-2">
|
||||
<div class="w-full lg:w-11/12 text-xl text-left text-black-400">
|
||||
<h2 x-show="toggle === 'donut'">{{ trans('general.timeline') }}</h2>
|
||||
<h2 x-show="toggle === 'bar'">{{ trans('general.distribution') }}</h2>
|
||||
</div>
|
||||
|
||||
<div class="w-full lg:w-1/12 flex items-center justify-center text-right cursor-pointer hover:shadow-lg hover:translate-y-0 hover:rounded-md" x-on:click="toggle === 'bar' ? toggle = 'donut' : toggle = 'bar'">
|
||||
<span class="material-icons-outlined" x-bind:class="toggle === 'donut' ? 'block': 'hidden'" title="{{ trans('general.distribution') }}">donut_small</span>
|
||||
<span class="material-icons" x-bind:class="toggle === 'bar' ? 'block': 'hidden'" title="{{ trans('general.timeline') }}">signal_cellular_alt</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div x-show="toggle === 'donut'">
|
||||
{!! $charts['bar']->container() !!}
|
||||
</div>
|
||||
|
||||
<div x-show="toggle === 'bar'">
|
||||
{!! $charts['donut']->container() !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@push('body_scripts')
|
||||
{!! $charts['bar']->script() !!}
|
||||
{!! $charts['donut']->script() !!}
|
||||
@endpush
|
@ -0,0 +1,7 @@
|
||||
@php $grand_total = array_sum($class->footer_totals[$table_key]); @endphp
|
||||
|
||||
<div class="w-full lg:w-6/12">
|
||||
@include($class->views['summary.table.header'])
|
||||
@include($class->views['summary.table.body'])
|
||||
@include($class->views['summary.table.footer'])
|
||||
</div>
|
@ -0,0 +1,19 @@
|
||||
<div>
|
||||
<div class="flex items-center justify-between text-xl text-black-400 border-b pb-2">
|
||||
<h2>{{ $table_name }}</h2>
|
||||
<span>{{ $class->has_money ? money($grand_total, default_currency(), true) : $grand_total }}</span>
|
||||
</div>
|
||||
@if (!empty($class->row_values[$table_key]))
|
||||
<ul class="space-y-2 my-3">
|
||||
@foreach($class->row_tree_nodes[$table_key] as $id => $node)
|
||||
@include($class->views['summary.table.row'], ['tree_level' => 0])
|
||||
@endforeach
|
||||
</ul>
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="{{ count($class->dates) + 2 }}">
|
||||
<div class="text-muted pl-0">{{ trans('general.no_records') }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
</div>
|
@ -0,0 +1,88 @@
|
||||
<!-- if it HAS NOT subcategories -->
|
||||
@if (is_null($node))
|
||||
@php
|
||||
$rows = $class->row_values[$table_key][$id];
|
||||
@endphp
|
||||
|
||||
@if ($row_total = array_sum($rows))
|
||||
@if (isset($parent_id))
|
||||
<li class="collapse-sub" data-collapse="child-{{ $parent_id }}">
|
||||
@else
|
||||
<li>
|
||||
@endif
|
||||
<div class="flex justify-between border-0 m-0 p-0">
|
||||
@if (isset($parent_id))
|
||||
<div class="flex items-center" style="padding-left: {{ $tree_level * 20 }}px;">
|
||||
@else
|
||||
<div class="flex items-center">
|
||||
@endif
|
||||
<span>{{ $class->row_names[$table_key][$id] }}</span>
|
||||
</div>
|
||||
<span>{{ $class->has_money ? money($row_total, default_currency(), true) : $row_total }}</span>
|
||||
</div>
|
||||
</li>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
<!-- if it HAS subcategories -->
|
||||
@if (is_array($node))
|
||||
<!-- parent part -->
|
||||
@php
|
||||
$parent_row_values = $class->row_values[$table_key][$id];
|
||||
|
||||
array_walk_recursive($node, function ($value, $key) use ($class, $table_key, $id, &$parent_row_values) {
|
||||
if ($key == $id) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach($class->row_values[$table_key][$key] as $date => $amount) {
|
||||
$parent_row_values[$date] += $amount;
|
||||
}
|
||||
});
|
||||
@endphp
|
||||
|
||||
@if ($row_total = array_sum($parent_row_values))
|
||||
@if (isset($parent_id))
|
||||
<li class="collapse-sub" data-collapse="child-{{ $parent_id }}">
|
||||
@else
|
||||
<li>
|
||||
@endif
|
||||
<div class="flex justify-between border-0 m-0 p-0">
|
||||
<div class="flex items-center" style="padding-left: {{ $tree_level * 20 }}px;">
|
||||
<span>{{ $class->row_names[$table_key][$id] }}</span>
|
||||
@if (array_sum($parent_row_values) != array_sum($class->row_values[$table_key][$id]))
|
||||
<button type="button" class="align-text-top" node="child-{{ $id }}" onClick="toggleSub('child-{{ $id }}', event)">
|
||||
<span class="material-icons transform transition-all rotate-90 text-lg leading-none">navigate_next</span>
|
||||
</button>
|
||||
@endif
|
||||
</div>
|
||||
<span>{{ $class->has_money ? money($row_total, setting('default.currency'), true) : $row_total }}</span>
|
||||
</div>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
<!-- no categories part -->
|
||||
@php $rows = $class->row_values[$table_key][$id]; @endphp
|
||||
@if (($row_total = array_sum($rows)) && array_sum($parent_row_values) != array_sum($rows))
|
||||
<li class="collapse-sub" data-collapse="child-{{ $id }}">
|
||||
<div class="flex justify-between border-0 m-0 p-0">
|
||||
<div class="flex items-center" style="padding-left: {{ ($tree_level + 1) * 20 }}px;">
|
||||
<span>{{ $class->row_names[$table_key][$id] }}</span>
|
||||
</div>
|
||||
<span>{{ $class->has_money ? money($row_total, setting('default.currency'), true) : $row_total }}</span>
|
||||
</div>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
<!-- subcategories part -->
|
||||
@php
|
||||
$parent_id = $id;
|
||||
$tree_level++;
|
||||
@endphp
|
||||
|
||||
@foreach($node as $id => $node)
|
||||
@if ($parent_id != $id)
|
||||
@include($class->views['summary.table.row'], ['parent_id' => $parent_id, 'tree_level' => $tree_level])
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
Reference in New Issue
Block a user