From e6917cb2d229465e2f103678ac295050fc7d1b2c Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 2 Apr 2024 21:40:47 +0000 Subject: [PATCH] template fixes + bug fixes + style fixes --- Admin/Install/Navigation.install.json | 4 +- Controller/ApiController.php | 4 +- Controller/BackendController.php | 67 ++++-- Theme/Backend/Lang/de.lang.php | 9 +- Theme/Backend/Lang/en.lang.php | 5 + Theme/Backend/client-create.tpl.php | 289 -------------------------- Theme/Backend/client-view.tpl.php | 133 +++++++----- 7 files changed, 143 insertions(+), 368 deletions(-) delete mode 100755 Theme/Backend/client-create.tpl.php diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index 0d1976d..0204d78 100755 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -79,8 +79,8 @@ "pid": "/sales", "type": 3, "subtype": 1, - "name": "Values", - "uri": "{/base}/sales/client/attribute/value/list?{?}", + "name": "Create", + "uri": "{/base}/sales/client/attribute/type/create?{?}", "target": "self", "icon": null, "order": 15, diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 2b4f9dc..0d61cab 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -285,7 +285,7 @@ final class ApiController extends Controller /** * Create directory for an account * - * @param int $id Item number + * @param int $id Item number * @param int $createdBy Creator of the directory * * @return Collection @@ -332,7 +332,7 @@ final class ApiController extends Controller /** @var \Modules\Attribute\Models\AttributeType[] $types */ $types = ClientAttributeTypeMapper::getAll() ->where('name', \array_keys($segmentation), 'IN') - ->execute(); + ->executeGetArray(); foreach ($types as $type) { $internalResponse = clone $response; diff --git a/Controller/BackendController.php b/Controller/BackendController.php index f13e07a..9106291 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -14,6 +14,7 @@ declare(strict_types=1); namespace Modules\ClientManagement\Controller; +use Modules\Attribute\Models\NullAttributeValue; use Modules\Auditor\Models\AuditMapper; use Modules\ClientManagement\Models\Attribute\ClientAttributeTypeL11nMapper; use Modules\ClientManagement\Models\Attribute\ClientAttributeTypeMapper; @@ -21,8 +22,6 @@ use Modules\ClientManagement\Models\Attribute\ClientAttributeValueL11nMapper; use Modules\ClientManagement\Models\Attribute\ClientAttributeValueMapper; use Modules\ClientManagement\Models\ClientMapper; use Modules\ClientManagement\Models\PermissionCategory; -use Modules\ItemManagement\Models\Attribute\ItemAttributeTypeMapper; -use Modules\ItemManagement\Models\Attribute\ItemAttributeValueL11nMapper; use Modules\Media\Models\MediaMapper; use Modules\Media\Models\MediaTypeMapper; use Modules\Organization\Models\Attribute\UnitAttributeMapper; @@ -62,13 +61,13 @@ final class BackendController extends Controller */ public function viewClientManagementAttributeTypeList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { - $view = new \Modules\Attribute\Theme\Backend\Components\AttributeTypeListView($this->app->l11nManager, $request, $response); + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeTypeListView($this->app->l11nManager, $request, $response); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003101001, $request, $response); $view->attributes = ClientAttributeTypeMapper::getAll() ->with('l11n') ->where('l11n/language', $response->header->l11n->language) - ->execute(); + ->executeGetArray(); $view->path = 'sales/client'; @@ -97,7 +96,7 @@ final class BackendController extends Controller $attributes = ClientAttributeValueMapper::getAll() ->with('l11n') ->where('l11n/language', $response->header->l11n->language) - ->execute(); + ->executeGetArray(); $view->data['attributes'] = $attributes; @@ -118,7 +117,7 @@ final class BackendController extends Controller */ public function viewClientManagementAttributeType(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { - $view = new \Modules\Attribute\Theme\Backend\Components\AttributeTypeView($this->app->l11nManager, $request, $response); + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeTypeView($this->app->l11nManager, $request, $response); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003101001, $request, $response); $view->attribute = ClientAttributeTypeMapper::get() @@ -132,7 +131,7 @@ final class BackendController extends Controller $view->l11ns = ClientAttributeTypeL11nMapper::getAll() ->where('ref', $view->attribute->id) - ->execute(); + ->executeGetArray(); $view->path = 'sales/client'; @@ -153,7 +152,7 @@ final class BackendController extends Controller */ public function viewClientManagementAttributeValue(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { - $view = new \Modules\Attribute\Theme\Backend\Components\AttributeValueView($this->app->l11nManager, $request, $response); + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeValueView($this->app->l11nManager, $request, $response); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003101001, $request, $response); $view->attribute = ClientAttributeValueMapper::get() @@ -164,7 +163,7 @@ final class BackendController extends Controller $view->l11ns = ClientAttributeValueL11nMapper::getAll() ->where('ref', $view->attribute->id) - ->execute(); + ->executeGetArray(); // @todo Also find the ItemAttributeType @@ -195,7 +194,7 @@ final class BackendController extends Controller ->with('mainAddress') ->where('unit', $this->app->unitId) ->limit(25) - ->execute(); + ->executeGetArray(); $view->data['client'] = $client; @@ -217,7 +216,7 @@ final class BackendController extends Controller public function viewClientManagementClientCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/ClientManagement/Theme/Backend/client-create'); + $view->setTemplate('/Modules/ClientManagement/Theme/Backend/client-view'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003102001, $request, $response); return $view; @@ -285,7 +284,7 @@ final class BackendController extends Controller $view->data['attributeTypes'] = ClientAttributeTypeMapper::getAll() ->with('l11n') ->where('l11n/language', $response->header->l11n->language) - ->execute(); + ->executeGetArray(); // Get item profile image // @feature Create a new read mapper function that returns relation models instead of its own model @@ -318,17 +317,18 @@ final class BackendController extends Controller $view->data['business_start'] = $businessStart->id === 0 ? 1 : $businessStart->value->getValue(); - $view->data['hasBilling'] = $this->app->moduleManager->isActive('Billing'); + $view->data['hasBilling'] = $this->app->moduleManager->isActive('Billing'); + $view->data['hasAccounting'] = $this->app->moduleManager->isActive('Accounting'); $view->data['prices'] = $view->data['hasBilling'] ? \Modules\Billing\Models\Price\PriceMapper::getAll() ->where('client', $view->data['client']->id) ->where('type', \Modules\Billing\Models\Price\PriceType::SALES) - ->execute() + ->executeGetArray() : []; /** @var \Modules\Attribute\Models\AttributeType[] $tmp */ - $tmp = ItemAttributeTypeMapper::getAll() + $tmp = ClientAttributeTypeMapper::getAll() ->with('defaults') ->with('defaults/l11n') ->where('name', [ @@ -336,9 +336,9 @@ final class BackendController extends Controller 'sales_tax_code', 'purchase_tax_code', ], 'IN') ->where('defaults/l11n', (new Where($this->app->dbPool->get())) - ->where(ItemAttributeValueL11nMapper::getColumnByMember('ref') ?? '', '=', null) - ->orWhere(ItemAttributeValueL11nMapper::getColumnByMember('language') ?? '', '=', $response->header->l11n->language)) - ->execute(); + ->where(ClientAttributeValueL11nMapper::getColumnByMember('ref') ?? '', '=', null) + ->orWhere(ClientAttributeValueL11nMapper::getColumnByMember('language') ?? '', '=', $response->header->l11n->language)) + ->executeGetArray(); $defaultAttributeTypes = []; foreach ($tmp as $t) { @@ -358,7 +358,7 @@ final class BackendController extends Controller ->where('defaults/l11n', (new Where($this->app->dbPool->get())) ->where(ClientAttributeValueL11nMapper::getColumnByMember('ref') ?? '', '=', null) ->orWhere(ClientAttributeValueL11nMapper::getColumnByMember('language') ?? '', '=', $response->header->l11n->language)) - ->execute(); + ->executeGetArray(); $clientSegmentationTypes = []; foreach ($tmp as $t) { @@ -381,7 +381,7 @@ final class BackendController extends Controller ->where('type', StringUtils::intHash(ClientMapper::class)) ->where('module', 'ClientManagement') ->where('ref', (string) $view->data['client']->id) - ->execute(); + ->executeGetArray(); } $view->data['logs'] = $logs; @@ -392,7 +392,7 @@ final class BackendController extends Controller ->with('types') ->join('id', ClientMapper::class, 'files') // id = media id, files = client relations ->on('id', $view->data['client']->id, relation: 'files') // id = item id - ->execute(); + ->executeGetArray(); $view->data['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); $view->data['note'] = new \Modules\Editor\Theme\Backend\Components\Note\BaseView($this->app->l11nManager, $request, $response); @@ -419,4 +419,29 @@ final class BackendController extends Controller { return new View($this->app->l11nManager, $request, $response); } + + /** + * Routing end-point for application behavior. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewClientManagementAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeValueView($this->app->l11nManager, $request, $response); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003101001, $request, $response); + + $view->type = ClientAttributeTypeMapper::get()->where('id', (int) $request->getData('type'))->execute(); + $view->attribute = new NullAttributeValue(); + + $view->path = 'sales/client'; + + return $view; + } } diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php index 350f19b..f3a8e5f 100755 --- a/Theme/Backend/Lang/de.lang.php +++ b/Theme/Backend/Lang/de.lang.php @@ -33,6 +33,7 @@ return ['ClientManagement' => [ 'Country' => 'Land', 'Created' => 'Erstellt', 'CreateBill' => 'Rechnung erstellen', + 'ViewAccount' => 'Buchhaltung', 'CreatedAt' => 'Erstellt', 'Creditcard' => 'Kreditkarte', 'DSO' => 'DSO.', @@ -104,7 +105,7 @@ return ['ClientManagement' => [ 'PrimarySupplier' => 'Hauptlieferant', 'LeadTime' => 'Lieferzeit', 'UnitQuantity' => 'Einheitsmenge', - 'Suppliers' => 'Lieferanten', + 'Suppliers' => 'Lieferanten', 'CostCenter' => 'Kostenstelle', 'CostObject' => 'Kostenträger', 'DefaultStock' => 'Standard Lager', @@ -123,7 +124,11 @@ return ['ClientManagement' => [ 'ClientGroup' => 'Kundengruppe', 'ClientType' => 'Kundenart', 'ItemType' => 'Artikeltyp', - 'Item' => 'Item', + 'Item' => 'Artikel', + 'Status' => 'Status', 'EarningIndicator' => 'Verkaufssteuerkennzeichen', 'CostIndicator' => 'Einkaufssteuerkennzeichen', + ':status-1' => 'Aktiv', + ':status-2' => 'Inaktiv', + ':status-3' => 'Blockiert', ]]; diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index 67367de..4729173 100755 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -33,6 +33,7 @@ return ['ClientManagement' => [ 'Country' => 'Country', 'Created' => 'Created', 'CreateBill' => 'Create Bill', + 'ViewAccount' => 'View Account', 'CreatedAt' => 'Created at', 'Creditcard' => 'Creditcard', 'DSO' => 'DSO', @@ -124,6 +125,10 @@ return ['ClientManagement' => [ 'ClientType' => 'Client Type', 'ItemType' => 'Item Type', 'Item' => 'Item', + 'Status' => 'Status', 'EarningIndicator' => 'Sales tax code', 'CostIndicator' => 'Purchase tax code', + ':status-1' => 'Active', + ':status-2' => 'Inactive', + ':status-3' => 'Banned', ]]; diff --git a/Theme/Backend/client-create.tpl.php b/Theme/Backend/client-create.tpl.php deleted file mode 100755 index 73172b4..0000000 --- a/Theme/Backend/client-create.tpl.php +++ /dev/null @@ -1,289 +0,0 @@ -data['nav']->render(); ?> - -
-
- -
-
- request->uri->fragment === 'c-tab-1' ? ' checked' : ''; ?>> -
-
-
-
-

getHtml('Client'); ?>

-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- request->uri->fragment === 'c-tab-2' ? ' checked' : ''; ?>> -
-
-
-
-

getHtml('Contact'); ?>

-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>> -
-
-
-
-

getHtml('Address'); ?>

-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- request->uri->fragment === 'c-tab-4' ? ' checked' : ''; ?>> -
-
-
-
-

getHtml('PaymentTerm'); ?>

-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- request->uri->fragment === 'c-tab-5' ? ' checked' : ''; ?>> -
-
-
-
-

getHtml('Payment'); ?>

-
-
- -
-
-
-
-
-
-
-
-
-
- request->uri->fragment === 'c-tab-6' ? ' checked' : ''; ?>> -
-
-
-
-

getHtml('Price'); ?>

-
-
- - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- request->uri->fragment === 'c-tab-7' ? ' checked' : ''; ?>> -
-
-
-
-

getHtml('AreaManager'); ?>

-
-
- - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- request->uri->fragment === 'c-tab-8' ? ' checked' : ''; ?>> -
-
- request->uri->fragment === 'c-tab-9' ? ' checked' : ''; ?>> -
-
-
- l11nManager, $this->request, $this->response); - $footerView->setTemplate('/Web/Templates/Lists/Footer/PaginationBig'); - $footerView->setPages(20); - $footerView->setPage(1); - ?> -
- - - - - - -
getHtml('Logs'); ?>download
IP - getHtml('ID', '0', '0'); ?> - getHtml('Name'); ?> - getHtml('Log'); ?> - getHtml('Date'); ?> -
printHtml($this->request->getOrigin()); ?> - printHtml((string) $this->request->header->account); ?> - printHtml((string) $this->request->header->account); ?> - Creating customer - printHtml((new \DateTime('now'))->format('Y-m-d H:i:s')); ?> -
-
-
-
-
-
-
diff --git a/Theme/Backend/client-view.tpl.php b/Theme/Backend/client-view.tpl.php index ae696ed..2d25372 100644 --- a/Theme/Backend/client-view.tpl.php +++ b/Theme/Backend/client-view.tpl.php @@ -16,6 +16,8 @@ use Modules\Admin\Models\ContactType; use Modules\Billing\Models\BillMapper; use Modules\Billing\Models\Price\PriceType; use Modules\Billing\Models\SalesBillMapper; +use Modules\ClientManagement\Models\ClientStatus; +use Modules\ClientManagement\Models\NullClient; use Modules\Media\Models\NullMedia; use phpOMS\DataStorage\Database\Query\OrderType; use phpOMS\Localization\ISO3166CharEnum; @@ -38,9 +40,13 @@ $languages = ISO639Enum::getConstants(); /** * @var \Modules\ClientManagement\Models\Client $client */ -$client = $this->data['client']; +$client = $this->data['client'] ?? new NullClient(); +$isNew = $client->id === 0; + $clientImage = $this->data['clientImage'] ?? new NullMedia(); +$clientStatus = ClientStatus::getConstants(); + $logs = $this->data['logs'] ?? []; /** @@ -49,41 +55,54 @@ $logs = $this->data['logs'] ?? []; echo $this->data['nav']->render(); ?>
+
+
- request->uri->fragment === 'c-tab-1' ? ' checked' : ''; ?>> + request->uri->fragment === 'c-tab-1' ? ' checked' : ''; ?>>
+ data['hasBilling'] ?? false) || ($this->data['hasAccounting'] ?? false))) : ?>
- + data['hasBilling'] ?? false) : ?> getHtml('CreateBill'); ?> - - getHtml('ViewAccount', 'Accounting'); ?> + data['hasAccounting'] ?? false) : ?> + getHtml('ViewAccount'); ?>
+
-
+
- + > +
+ +
+ +
@@ -102,7 +121,12 @@ echo $this->data['nav']->render();
- + + + + + +
@@ -115,17 +139,17 @@ echo $this->data['nav']->render();
- +
- +
- +
@@ -158,48 +182,51 @@ echo $this->data['nav']->render(); mainAddress->fao)) : ?>
- +
- +
mainAddress->addressAddition)) : ?>
- +
- +
- +
- $code2) : ?>
+
+
+
<?= $this->printHtml($clientImage->name); ?>data['nav']->render();
+
+ +
notes) && ($warning = $client->getEditorDocByTypeName('client_backend_warning'))->id !== 0) : ?> @@ -227,7 +257,7 @@ echo $this->data['nav']->render();
- data['hasBilling']) : ?> + data['hasBilling'] ?? false) : ?>
@@ -321,7 +351,7 @@ echo $this->data['nav']->render(); foreach ($client->files as $file) : ++$count; $url = UriFactory::build('{/base}/media/view?{?}&id=' . $file->id); - ?> + ?> name; ?> extension; ?> @@ -336,7 +366,7 @@ echo $this->data['nav']->render();
- data['hasBilling']) : ?> + data['hasBilling'] ?? false) : ?>
@@ -360,19 +390,20 @@ echo $this->data['nav']->render(); ->where('type/l11n/language', $this->response->header->l11n->language) ->sort('id', OrderType::DESC) ->limit(5) - ->execute(); + ->executeGetArray(); $count = 0; /** @var \Modules\Billing\Models\Bill $invoice */ foreach ($newestInvoices as $invoice) : ++$count; - $url = UriFactory::build('{/base}/sales/bill?{?}&id=' . $invoice->id); + $url = UriFactory::build('{/base}/sales/bill/view?{?}&id=' . $invoice->id); + $clientUrl = UriFactory::build('{/base}/sales/client/view?{?}&id=' . $invoice->client->id); ?> getNumber(); ?> type->getL11n(); ?> - billTo; ?> + billTo; ?> getCurrency($invoice->netSales, symbol: ''); ?> performanceDate->format('Y-m-d'); ?> @@ -386,10 +417,11 @@ echo $this->data['nav']->render();
- data['hasBilling']) : + data['hasBilling'] ?? false) : $monthlySalesCosts = SalesBillMapper::getClientMonthlySalesCosts($client->id, (new SmartDateTime('now'))->createModify(-1), new SmartDateTime('now')); + + if (!empty($monthlySalesCosts)) : ?> -
id, 'segment', 'en', (new SmartDateTime('now'))->createModify(-1), new SmartDateTime('now')); ?>
@@ -543,16 +575,18 @@ echo $this->data['nav']->render();
+
- request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>> + + request->uri->fragment === 'c-tab-2' ? ' checked' : ''; ?>>
data['contact-component']->render('client-contact', 'contacts', $client->account->contacts); ?> data['address-component']->render('client-address', 'addresses', $client->account->addresses); ?>
- request->uri->fragment === 'c-tab-5' ? ' checked' : ''; ?>> + request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>>
@@ -611,9 +645,6 @@ echo $this->data['nav']->render();
-
- -
@@ -624,7 +655,7 @@ echo $this->data['nav']->render();
- request->uri->fragment === 'c-tab-6' ? ' checked' : ''; ?>> + request->uri->fragment === 'c-tab-4' ? ' checked' : ''; ?>>
@@ -950,7 +981,7 @@ echo $this->data['nav']->render(); discount->getAmount(); ?> getPercentage($value->discountPercentage); ?> bonus->getAmount(); ?> - printHtml((string) $value->item); ?> + printHtml((string) $value->item->id); ?> printHtml((string) $value->itemsegment->getL11n()); ?> printHtml((string) $value->itemsection->getL11n()); ?> printHtml((string) $value->itemsalesgroup->getL11n()); ?> @@ -975,7 +1006,7 @@ echo $this->data['nav']->render();
- request->uri->fragment === 'c-tab-7' ? ' checked' : ''; ?>> + request->uri->fragment === 'c-tab-5' ? ' checked' : ''; ?>>
data['attributeView']->render( @@ -1018,13 +1049,13 @@ echo $this->data['nav']->render(); ->where('client', $client->id) ->where('type/l11n/language', $this->response->header->l11n->language) ->where('billDate', SmartDateTime::startOfYear($this->data['business_start']), '>=') - ->execute(); + ->executeGetArray(); $count = 0; /** @var \Modules\Billing\Models\Bill $invoice */ foreach ($allInvoices as $invoice) : ++$count; - $url = UriFactory::build('{/base}/sales/bill?{?}&id=' . $invoice->id); + $url = UriFactory::build('{/base}/sales/bill/view?{?}&id=' . $invoice->id); ?> getNumber(); ?> @@ -1044,7 +1075,7 @@ echo $this->data['nav']->render();
- request->uri->fragment === 'c-tab-9' ? ' checked' : ''; ?>> + request->uri->fragment === 'c-tab-6' ? ' checked' : ''; ?>>
@@ -1080,7 +1111,7 @@ echo $this->data['nav']->render();
- id, SmartDateTime::startOfYear($this->data['business_start']), new SmartDateTime('now')); ?> + id, SmartDateTime::startOfYear($this->data['business_start']), new SmartDateTime('now')); ?>
@@ -1216,13 +1247,10 @@ echo $this->data['nav']->render(); $value) : - if ($value->itemNumber === '') { - continue; - } - + foreach ($billElements as $key => $value) : ++$count; - $url = UriFactory::build('{/base}/sales/item/view?{?}&id=' . $value->id); + $url = UriFactory::build('{/base}/sales/bill/view?{?}&id=' . $value->bill->id); + $itemUrl = UriFactory::build('{/base}/sales/item/view?{?}&id=' . $value->item->id); ?> bill->performanceDate?->format('Y-m-d'); ?> printHtml($value->bill->getNumber()); ?> - printHtml($value->itemNumber); ?> - printHtml($value->itemName); ?> + printHtml($value->itemNumber); ?> + printHtml($value->itemName); ?> printHtml((string) $value->quantity->getAmount()); ?> getCurrency($value->singleSalesPriceNet, symbol: ''); ?> getCurrency($value->singleDiscountP, symbol: ''); ?> @@ -1250,7 +1278,7 @@ echo $this->data['nav']->render();
- +
data['note']->render('client-note', 'notes', $client->notes); ?>
@@ -1318,5 +1346,6 @@ echo $this->data['nav']->render();
+