From 3cba69b447adf18ba235ea320dfd6a2cbd5db0eb Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 19 Dec 2021 20:20:39 +0100 Subject: [PATCH] bug fixes / dbmapper fixes --- Controller/ApiController.php | 1 + Controller/BackendController.php | 28 ++++--- Models/Supplier.php | 21 +++++ Models/SupplierAttributeMapper.php | 16 ++-- Models/SupplierAttributeTypeL11nMapper.php | 8 +- Models/SupplierAttributeTypeMapper.php | 30 +++---- Models/SupplierAttributeValueMapper.php | 20 ++--- Models/SupplierMapper.php | 24 +++--- Theme/Backend/supplier-list.tpl.php | 2 +- Theme/Backend/supplier-profile.tpl.php | 93 +++++++++++++++++----- 10 files changed, 163 insertions(+), 80 deletions(-) diff --git a/Controller/ApiController.php b/Controller/ApiController.php index e7b4ed4..e9b6c08 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -144,6 +144,7 @@ final class ApiController extends Controller */ public function apiContactElementCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { + /** @var \Modules\Profile\Controller\ApiController $profileModule */ $profileModule = $this->app->moduleManager->get('Profile'); if (!empty($val = $profileModule->validateContactElementCreate($request))) { diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 4c26e6f..e869ce4 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -14,11 +14,11 @@ declare(strict_types=1); namespace Modules\SupplierManagement\Controller; -use Modules\Billing\Models\BillTypeL11n; use Modules\Billing\Models\PurchaseBillMapper; use Modules\SupplierManagement\Models\SupplierMapper; use phpOMS\Asset\AssetType; use phpOMS\Contract\RenderableInterface; +use phpOMS\DataStorage\Database\Query\OrderType; use phpOMS\Localization\Money; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; @@ -54,10 +54,13 @@ final class BackendController extends Controller $view->setTemplate('/Modules/SupplierManagement/Theme/Backend/supplier-list'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1003202001, $request, $response)); - $supplier = SupplierMapper::with('notes', models: null) - ::with('contactElements', models: null) - //::with('type', 'backend_image', models: [Media::class]) // @todo: it would be nicer if I coult say files:type or files/type and remove the models parameter? - ::getAfterPivot(0, null, 25); + $supplier = SupplierMapper::getAll() + ->with('profile') + ->with('profile/account') + ->with('profile/image') + ->with('mainAddress') + ->limit(25) + ->execute(); $view->addData('supplier', $supplier); @@ -108,10 +111,15 @@ final class BackendController extends Controller $view->setTemplate('/Modules/SupplierManagement/Theme/Backend/supplier-profile'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1003202001, $request, $response)); - $supplier = SupplierMapper - ::with('files', limit: 5)::orderBy('createdAt', 'ASC') - ::with('notes', limit: 5)::orderBy('id', 'ASC') - ::get((int) $request->getData('id')); + $supplier = SupplierMapper::get() + ->with('profile') + ->with('profile/account') + ->with('contactElements') + ->with('mainAddress') + ->with('files')->limit(5, 'files')->sort('files/id', OrderType::DESC) + ->with('notes')->limit(5, 'files')->sort('notes/id', OrderType::DESC) + ->where('id', (int) $request->getData('id')) + ->execute(); $view->setData('supplier', $supplier); @@ -120,7 +128,7 @@ final class BackendController extends Controller $ytd = PurchaseBillMapper::getPurchaseBySupplierId($supplier->getId(), new SmartDateTime('Y-01-01'), new SmartDateTime('now')); $mtd = PurchaseBillMapper::getPurchaseBySupplierId($supplier->getId(), new SmartDateTime('Y-m-01'), new SmartDateTime('now')); $lastOrder = PurchaseBillMapper::getLastOrderDateBySupplierId($supplier->getId()); - $newestInvoices = PurchaseBillMapper::with('language', $response->getLanguage(), [BillTypeL11n::class])::getNewestSupplierInvoices($supplier->getId(), 5); + $newestInvoices = PurchaseBillMapper::getAll()->with('supplier')->where('supplier', $supplier->getId())->sort('id', OrderType::DESC)->limit(5)->execute(); $monthlyPurchaseCosts = PurchaseBillMapper::getSupplierMonthlyPurchaseCosts($supplier->getId(), (new SmartDateTime('now'))->createModify(-1), new SmartDateTime('now')); } else { $ytd = new Money(); diff --git a/Models/Supplier.php b/Models/Supplier.php index 44e7e65..c454649 100755 --- a/Models/Supplier.php +++ b/Models/Supplier.php @@ -18,6 +18,7 @@ use Modules\Admin\Models\Address; use Modules\Admin\Models\NullAddress; use Modules\Editor\Models\EditorDoc; use Modules\Media\Models\Media; +use Modules\Media\Models\NullMedia; use Modules\Profile\Models\ContactElement; use Modules\Profile\Models\NullContactElement; use Modules\Profile\Models\Profile; @@ -304,6 +305,26 @@ class Supplier return $files; } + /** + * Get all media files by type + * + * @param int $type Media type + * + * @return Media + * + * @since 1.0.0 + */ + public function getFileByType(int $type) : Media + { + foreach ($this->files as $file) { + if ($file->type === $type) { + return $file; + } + } + + return new NullMedia(); + } + /** * {@inheritdoc} */ diff --git a/Models/SupplierAttributeMapper.php b/Models/SupplierAttributeMapper.php index 725a41a..8c13ec1 100755 --- a/Models/SupplierAttributeMapper.php +++ b/Models/SupplierAttributeMapper.php @@ -33,10 +33,10 @@ final class SupplierAttributeMapper extends DataMapperFactory * @since 1.0.0 */ public const COLUMNS = [ - 'suppliermgmt_supplier_attr_id' => ['name' => 'suppliermgmt_supplier_attr_id', 'type' => 'int', 'internal' => 'id'], - 'suppliermgmt_supplier_attr_supplier' => ['name' => 'suppliermgmt_supplier_attr_supplier', 'type' => 'int', 'internal' => 'supplier'], - 'suppliermgmt_supplier_attr_type' => ['name' => 'suppliermgmt_supplier_attr_type', 'type' => 'int', 'internal' => 'type'], - 'suppliermgmt_supplier_attr_value' => ['name' => 'suppliermgmt_supplier_attr_value', 'type' => 'int', 'internal' => 'value'], + 'suppliermgmt_supplier_attr_id' => ['name' => 'suppliermgmt_supplier_attr_id', 'type' => 'int', 'internal' => 'id'], + 'suppliermgmt_supplier_attr_supplier' => ['name' => 'suppliermgmt_supplier_attr_supplier', 'type' => 'int', 'internal' => 'supplier'], + 'suppliermgmt_supplier_attr_type' => ['name' => 'suppliermgmt_supplier_attr_type', 'type' => 'int', 'internal' => 'type'], + 'suppliermgmt_supplier_attr_value' => ['name' => 'suppliermgmt_supplier_attr_value', 'type' => 'int', 'internal' => 'value'], ]; /** @@ -47,12 +47,12 @@ final class SupplierAttributeMapper extends DataMapperFactory */ public const OWNS_ONE = [ 'type' => [ - 'mapper' => SupplierAttributeTypeMapper::class, - 'external' => 'suppliermgmt_supplier_attr_type', + 'mapper' => SupplierAttributeTypeMapper::class, + 'external' => 'suppliermgmt_supplier_attr_type', ], 'value' => [ - 'mapper' => SupplierAttributeValueMapper::class, - 'external' => 'suppliermgmt_supplier_attr_value', + 'mapper' => SupplierAttributeValueMapper::class, + 'external' => 'suppliermgmt_supplier_attr_value', ], ]; diff --git a/Models/SupplierAttributeTypeL11nMapper.php b/Models/SupplierAttributeTypeL11nMapper.php index 53699e9..c32db2c 100755 --- a/Models/SupplierAttributeTypeL11nMapper.php +++ b/Models/SupplierAttributeTypeL11nMapper.php @@ -33,10 +33,10 @@ final class SupplierAttributeTypeL11nMapper extends DataMapperFactory * @since 1.0.0 */ public const COLUMNS = [ - 'suppliermgmt_attr_type_l11n_id' => ['name' => 'suppliermgmt_attr_type_l11n_id', 'type' => 'int', 'internal' => 'id'], - 'suppliermgmt_attr_type_l11n_title' => ['name' => 'suppliermgmt_attr_type_l11n_title', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true], - 'suppliermgmt_attr_type_l11n_type' => ['name' => 'suppliermgmt_attr_type_l11n_type', 'type' => 'int', 'internal' => 'type'], - 'suppliermgmt_attr_type_l11n_lang' => ['name' => 'suppliermgmt_attr_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + 'suppliermgmt_attr_type_l11n_id' => ['name' => 'suppliermgmt_attr_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'suppliermgmt_attr_type_l11n_title' => ['name' => 'suppliermgmt_attr_type_l11n_title', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true], + 'suppliermgmt_attr_type_l11n_type' => ['name' => 'suppliermgmt_attr_type_l11n_type', 'type' => 'int', 'internal' => 'type'], + 'suppliermgmt_attr_type_l11n_lang' => ['name' => 'suppliermgmt_attr_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], ]; /** diff --git a/Models/SupplierAttributeTypeMapper.php b/Models/SupplierAttributeTypeMapper.php index 2ab8121..caf3c13 100755 --- a/Models/SupplierAttributeTypeMapper.php +++ b/Models/SupplierAttributeTypeMapper.php @@ -33,12 +33,12 @@ final class SupplierAttributeTypeMapper extends DataMapperFactory * @since 1.0.0 */ public const COLUMNS = [ - 'suppliermgmt_attr_type_id' => ['name' => 'suppliermgmt_attr_type_id', 'type' => 'int', 'internal' => 'id'], - 'suppliermgmt_attr_type_name' => ['name' => 'suppliermgmt_attr_type_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], - 'suppliermgmt_attr_type_fields' => ['name' => 'suppliermgmt_attr_type_fields', 'type' => 'int', 'internal' => 'fields'], - 'suppliermgmt_attr_type_custom' => ['name' => 'suppliermgmt_attr_type_custom', 'type' => 'bool', 'internal' => 'custom'], - 'suppliermgmt_attr_type_pattern' => ['name' => 'suppliermgmt_attr_type_pattern', 'type' => 'string', 'internal' => 'validationPattern'], - 'suppliermgmt_attr_type_required' => ['name' => 'suppliermgmt_attr_type_required', 'type' => 'bool', 'internal' => 'isRequired'], + 'suppliermgmt_attr_type_id' => ['name' => 'suppliermgmt_attr_type_id', 'type' => 'int', 'internal' => 'id'], + 'suppliermgmt_attr_type_name' => ['name' => 'suppliermgmt_attr_type_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], + 'suppliermgmt_attr_type_fields' => ['name' => 'suppliermgmt_attr_type_fields', 'type' => 'int', 'internal' => 'fields'], + 'suppliermgmt_attr_type_custom' => ['name' => 'suppliermgmt_attr_type_custom', 'type' => 'bool', 'internal' => 'custom'], + 'suppliermgmt_attr_type_pattern' => ['name' => 'suppliermgmt_attr_type_pattern', 'type' => 'string', 'internal' => 'validationPattern'], + 'suppliermgmt_attr_type_required' => ['name' => 'suppliermgmt_attr_type_required', 'type' => 'bool', 'internal' => 'isRequired'], ]; /** @@ -49,17 +49,17 @@ final class SupplierAttributeTypeMapper extends DataMapperFactory */ public const HAS_MANY = [ 'l11n' => [ - 'mapper' => SupplierAttributeTypeL11nMapper::class, - 'table' => 'suppliermgmt_attr_type_l11n', - 'self' => 'suppliermgmt_attr_type_l11n_type', - 'column' => 'title', - 'external' => null, + 'mapper' => SupplierAttributeTypeL11nMapper::class, + 'table' => 'suppliermgmt_attr_type_l11n', + 'self' => 'suppliermgmt_attr_type_l11n_type', + 'column' => 'title', + 'external' => null, ], 'defaults' => [ - 'mapper' => SupplierAttributeValueMapper::class, - 'table' => 'suppliermgmt_supplier_attr_default', - 'self' => 'suppliermgmt_supplier_attr_default_type', - 'external' => 'suppliermgmt_supplier_attr_default_value' + 'mapper' => SupplierAttributeValueMapper::class, + 'table' => 'suppliermgmt_supplier_attr_default', + 'self' => 'suppliermgmt_supplier_attr_default_type', + 'external' => 'suppliermgmt_supplier_attr_default_value' ], ]; diff --git a/Models/SupplierAttributeValueMapper.php b/Models/SupplierAttributeValueMapper.php index f3eeaf1..363dcad 100755 --- a/Models/SupplierAttributeValueMapper.php +++ b/Models/SupplierAttributeValueMapper.php @@ -8,7 +8,7 @@ * @copyright Dennis Eichhorn * @license OMS License 1.0 * @version 1.0.0 - * @link https: //orange-management.org + * @link https://orange-management.org */ declare(strict_types=1); @@ -21,7 +21,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; * * @package Modules\SupplierManagement\Models * @license OMS License 1.0 - * @link https: //orange-management.org + * @link https://orange-management.org * @since 1.0.0 */ final class SupplierAttributeValueMapper extends DataMapperFactory @@ -33,15 +33,15 @@ final class SupplierAttributeValueMapper extends DataMapperFactory * @since 1.0.0 */ public const COLUMNS = [ - 'suppliermgmt_attr_value_id' => ['name' => 'suppliermgmt_attr_value_id', 'type' => 'int', 'internal' => 'id'], - 'suppliermgmt_attr_value_default' => ['name' => 'suppliermgmt_attr_value_default', 'type' => 'bool', 'internal' => 'isDefault'], - 'suppliermgmt_attr_value_type' => ['name' => 'suppliermgmt_attr_value_type', 'type' => 'int', 'internal' => 'type'], - 'suppliermgmt_attr_value_valueStr' => ['name' => 'suppliermgmt_attr_value_valueStr', 'type' => 'string', 'internal' => 'valueStr'], - 'suppliermgmt_attr_value_valueInt' => ['name' => 'suppliermgmt_attr_value_valueInt', 'type' => 'int', 'internal' => 'valueInt'], - 'suppliermgmt_attr_value_valueDec' => ['name' => 'suppliermgmt_attr_value_valueDec', 'type' => 'float', 'internal' => 'valueDec'], + 'suppliermgmt_attr_value_id' => ['name' => 'suppliermgmt_attr_value_id', 'type' => 'int', 'internal' => 'id'], + 'suppliermgmt_attr_value_default' => ['name' => 'suppliermgmt_attr_value_default', 'type' => 'bool', 'internal' => 'isDefault'], + 'suppliermgmt_attr_value_type' => ['name' => 'suppliermgmt_attr_value_type', 'type' => 'int', 'internal' => 'type'], + 'suppliermgmt_attr_value_valueStr' => ['name' => 'suppliermgmt_attr_value_valueStr', 'type' => 'string', 'internal' => 'valueStr'], + 'suppliermgmt_attr_value_valueInt' => ['name' => 'suppliermgmt_attr_value_valueInt', 'type' => 'int', 'internal' => 'valueInt'], + 'suppliermgmt_attr_value_valueDec' => ['name' => 'suppliermgmt_attr_value_valueDec', 'type' => 'float', 'internal' => 'valueDec'], 'suppliermgmt_attr_value_valueDat' => ['name' => 'suppliermgmt_attr_value_valueDat', 'type' => 'DateTime', 'internal' => 'valueDat'], - 'suppliermgmt_attr_value_lang' => ['name' => 'suppliermgmt_attr_value_lang', 'type' => 'string', 'internal' => 'language'], - 'suppliermgmt_attr_value_country' => ['name' => 'suppliermgmt_attr_value_country', 'type' => 'string', 'internal' => 'country'], + 'suppliermgmt_attr_value_lang' => ['name' => 'suppliermgmt_attr_value_lang', 'type' => 'string', 'internal' => 'language'], + 'suppliermgmt_attr_value_country' => ['name' => 'suppliermgmt_attr_value_country', 'type' => 'string', 'internal' => 'country'], ]; /** diff --git a/Models/SupplierMapper.php b/Models/SupplierMapper.php index 6f0b2d0..46af929 100755 --- a/Models/SupplierMapper.php +++ b/Models/SupplierMapper.php @@ -38,15 +38,15 @@ final class SupplierMapper extends DataMapperFactory * @since 1.0.0 */ public const COLUMNS = [ - 'suppliermgmt_supplier_id' => ['name' => 'suppliermgmt_supplier_id', 'type' => 'int', 'internal' => 'id'], - 'suppliermgmt_supplier_no' => ['name' => 'suppliermgmt_supplier_no', 'type' => 'string', 'internal' => 'number'], - 'suppliermgmt_supplier_no_reverse' => ['name' => 'suppliermgmt_supplier_no_reverse', 'type' => 'string', 'internal' => 'numberReverse'], - 'suppliermgmt_supplier_status' => ['name' => 'suppliermgmt_supplier_status', 'type' => 'int', 'internal' => 'status'], - 'suppliermgmt_supplier_type' => ['name' => 'suppliermgmt_supplier_type', 'type' => 'int', 'internal' => 'type'], - 'suppliermgmt_supplier_info' => ['name' => 'suppliermgmt_supplier_info', 'type' => 'string', 'internal' => 'info'], + 'suppliermgmt_supplier_id' => ['name' => 'suppliermgmt_supplier_id', 'type' => 'int', 'internal' => 'id'], + 'suppliermgmt_supplier_no' => ['name' => 'suppliermgmt_supplier_no', 'type' => 'string', 'internal' => 'number'], + 'suppliermgmt_supplier_no_reverse' => ['name' => 'suppliermgmt_supplier_no_reverse', 'type' => 'string', 'internal' => 'numberReverse'], + 'suppliermgmt_supplier_status' => ['name' => 'suppliermgmt_supplier_status', 'type' => 'int', 'internal' => 'status'], + 'suppliermgmt_supplier_type' => ['name' => 'suppliermgmt_supplier_type', 'type' => 'int', 'internal' => 'type'], + 'suppliermgmt_supplier_info' => ['name' => 'suppliermgmt_supplier_info', 'type' => 'string', 'internal' => 'info'], 'suppliermgmt_supplier_created_at' => ['name' => 'suppliermgmt_supplier_created_at', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt', 'readonly' => true], - 'suppliermgmt_supplier_profile' => ['name' => 'suppliermgmt_supplier_profile', 'type' => 'int', 'internal' => 'profile'], - 'suppliermgmt_supplier_address' => ['name' => 'suppliermgmt_supplier_address', 'type' => 'int', 'internal' => 'mainAddress'], + 'suppliermgmt_supplier_profile' => ['name' => 'suppliermgmt_supplier_profile', 'type' => 'int', 'internal' => 'profile'], + 'suppliermgmt_supplier_address' => ['name' => 'suppliermgmt_supplier_address', 'type' => 'int', 'internal' => 'mainAddress'], ]; /** @@ -81,12 +81,12 @@ final class SupplierMapper extends DataMapperFactory */ public const OWNS_ONE = [ 'profile' => [ - 'mapper' => ProfileMapper::class, - 'external' => 'suppliermgmt_supplier_profile', + 'mapper' => ProfileMapper::class, + 'external' => 'suppliermgmt_supplier_profile', ], 'mainAddress' => [ - 'mapper' => AddressMapper::class, - 'external' => 'suppliermgmt_supplier_address', + 'mapper' => AddressMapper::class, + 'external' => 'suppliermgmt_supplier_address', ], ]; diff --git a/Theme/Backend/supplier-list.tpl.php b/Theme/Backend/supplier-list.tpl.php index d5fce97..aa1b2e0 100755 --- a/Theme/Backend/supplier-list.tpl.php +++ b/Theme/Backend/supplier-list.tpl.php @@ -104,7 +104,7 @@ echo $this->getData('nav')->render(); ?> $value) : ++$count; $url = UriFactory::build('{/prefix}purchase/supplier/profile?{?}&id=' . $value->getId()); - $image = $value->getFileByType('backend_image'); ?> + $image = $value->getFileByType(0); ?>
-
+
@@ -73,23 +74,6 @@ echo $this->getData('nav')->render();
-

getHtml('Address'); ?>

- mainAddress->addition)) : ?> -
-
- -
-
-
-
-
-
-
-
@@ -98,6 +82,73 @@ echo $this->getData('nav')->render();
+
+ +
+ +
+
+
+
+
+
+
+
+
+ +
+
+ getHtml('Address'); ?> + + + + + +
+
+ + mainAddress->addition)) : ?> +
+
+ +
+
+
+
+
+
+
+
+
+ mainAddress->getCountry()) . '.svg')) : ?> + + +
+
+
+
@@ -233,14 +284,16 @@ echo $this->getData('nav')->render(); getHtml('Net'); ?> getHtml('Date'); ?> - getId()); ?> getNumber(); ?> type->getL11n(); ?> billTo; ?> - net->getCurrency(); ?> + netSales->getCurrency(); ?> createdAt->format('Y-m-d'); ?>