diff --git a/Admin/Install/Media.install.json b/Admin/Install/Media.install.json index d031c96..7f9b9d0 100755 --- a/Admin/Install/Media.install.json +++ b/Admin/Install/Media.install.json @@ -6,6 +6,13 @@ "virtualPath": "/Modules", "user": 1 }, + { + "type": "collection", + "create_directory": true, + "name": "Suppliers", + "virtualPath": "/Modules/SupplierManagement", + "user": 1 + }, { "type": "type", "name": "supplier_profile_image", diff --git a/Admin/Install/attributes.json b/Admin/Install/attributes.json index d5c8c8f..36ceba9 100755 --- a/Admin/Install/attributes.json +++ b/Admin/Install/attributes.json @@ -310,7 +310,7 @@ { "value": "FI" }, { "value": "FR" }, { "value": "DE" }, - { "value": "DE_0" }, + { "value": "DE_S" }, { "value": "GR" }, { "value": "HU" }, { "value": "IE" }, @@ -329,6 +329,7 @@ { "value": "SE" }, { "value": "GB" }, { "value": "INT" }, + { "value": "EU_S" }, { "value": "EU" } ] }, diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php new file mode 100644 index 0000000..f044041 --- /dev/null +++ b/Admin/Routes/Web/Api.php @@ -0,0 +1,187 @@ + [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiController:apiSupplierFind', + 'verb' => RouteVerb::GET, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + ], + '^.*/supplier/attribute$' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + ], + '^.*/supplier/attribute/type$' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeTypeCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeTypeUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + ], + '^.*/supplier/attribute/type/l11n$' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeTypeL11nCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeTypeL11nUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + ], + '^.*/supplier/attribute/value$' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeValueCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeValueUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + ], + '^.*/supplier/attribute/value/l11n$' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeValueL11nCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiAttributeController:apiSupplierAttributeValueL11nUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + ], + '^.*/supplier/l11n$' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiController:apiSupplierL11nCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiController:apiSupplierL11nUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + ], + '^.*/supplier/l11n/type$' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiController:apiSupplierL11nTypeCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + [ + 'dest' => '\Modules\SupplierManagement\Controller\ApiController:apiSupplierL11nTypeUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::SUPPLIER, + ], + ], + ], +]; diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 283534f..65b398c 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -25,18 +25,51 @@ return [ 'permission' => [ 'module' => BackendController::NAME, 'type' => PermissionType::READ, - 'state' => PermissionCategory::SUPPLIER, + 'state' => PermissionCategory::ATTRIBUTE, ], ], ], - '^.*/purchase/supplier/attribute/type(\?.*$|$)' => [ + '^.*/purchase/supplier/attribute/type/view(\?.*$|$)' => [ [ 'dest' => '\Modules\SupplierManagement\Controller\BackendController:viewSupplierManagementAttributeType', 'verb' => RouteVerb::GET, 'permission' => [ 'module' => BackendController::NAME, 'type' => PermissionType::READ, - 'state' => PermissionCategory::SUPPLIER, + 'state' => PermissionCategory::ATTRIBUTE, + ], + ], + ], + '^.*/purchase/supplier/attribute/type/create(\?.*$|$)' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\BackendController:viewSupplierManagementAttributeType', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ATTRIBUTE, + ], + ], + ], + '^.*/purchase/supplier/attribute/value/view(\?.*$|$)' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\BackendController:viewSupplierManagementAttributeValue', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::ATTRIBUTE, + ], + ], + ], + '^.*/purchase/supplier/attribute/value/create(\?.*$|$)' => [ + [ + 'dest' => '\Modules\SupplierManagement\Controller\BackendController:viewSupplierManagementAttributeValueCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ATTRIBUTE, ], ], ], diff --git a/Controller.js b/Controller.js index 9fc99c0..dade4ea 100755 --- a/Controller.js +++ b/Controller.js @@ -48,6 +48,7 @@ omsApp.Modules.SupplierManagement = class { const self = this; const data = JSON.parse(chart.getAttribute('data-chart')); + /** global: Chart */ const myChart = new Chart(chart.getContext('2d'), data); }; @@ -59,6 +60,7 @@ omsApp.Modules.SupplierManagement = class { return; } + /** global: OpenLayers */ const mapObj = new OpenLayers.Map(map.getAttribute('id'), { controls: [ new OpenLayers.Control.Navigation( diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 6d83e48..0fc0452 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -16,6 +16,8 @@ namespace Modules\SupplierManagement\Controller; use Modules\Admin\Models\Account; use Modules\Admin\Models\NullAccount; +use Modules\Media\Models\Collection; +use Modules\Media\Models\CollectionMapper; use Modules\Media\Models\MediaMapper; use Modules\Media\Models\PathSettings; use Modules\SupplierManagement\Models\Attribute\SupplierAttributeTypeMapper; @@ -69,6 +71,10 @@ final class ApiController extends Controller $supplier = $this->createSupplierFromRequest($request); $this->createModel($request->header->account, $supplier, SupplierMapper::class, 'supplier', $request->getOrigin()); + // Create media dir + // @todo should this collection get added to the parent collection? + $this->createMediaDirForSupplier($supplier->id, $request->header->account); + // Create stock if ($this->app->moduleManager->isActive('WarehouseManagement')) { $internalResponse = new HttpResponse(); @@ -87,6 +93,29 @@ final class ApiController extends Controller $this->createStandardCreateResponse($request, $response, $supplier); } + /** + * Create directory for an account + * + * @param int $id Item number + * @param int $createdBy Creator of the directory + * + * @return Collection + * + * @since 1.0.0 + */ + private function createMediaDirForSupplier(int $id, int $createdBy) : Collection + { + $collection = new Collection(); + $collection->name = $id; + $collection->setVirtualPath('/Modules/SupplierManagement/Suppliers'); + $collection->setPath('/Modules/Media/Files/Modules/SupplierManagement/Suppliers/' . $id); + $collection->createdBy = new NullAccount($createdBy); + + CollectionMapper::create()->execute($collection); + + return $collection; + } + /** * Method to create news article from request. * @@ -343,8 +372,8 @@ final class ApiController extends Controller fileNames: $request->getDataList('filenames'), files: $uploadedFiles, account: $request->header->account, - basePath: __DIR__ . '/../../../Modules/Media/Files/Modules/SupplierManagement/' . ($request->getData('supplier') ?? '0'), - virtualPath: '/Modules/SupplierManagement/' . ($request->getData('supplier') ?? '0'), + basePath: __DIR__ . '/../../../Modules/Media/Files/Modules/SupplierManagement/Suppliers/' . ($request->getData('supplier') ?? '0'), + virtualPath: '/Modules/SupplierManagement/Suppliers/' . ($request->getData('supplier') ?? '0'), pathSettings: PathSettings::FILE_PATH ); @@ -393,7 +422,7 @@ final class ApiController extends Controller */ public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { - $request->setData('virtualpath', '/Modules/SupplierManagement/' . $request->getData('id'), true); + $request->setData('virtualpath', '/Modules/SupplierManagement/Suppliers/' . $request->getData('id'), true); $this->app->moduleManager->get('Editor')->apiEditorCreate($request, $response, $data); $data = $response->getDataArray($request->uri->__toString()); diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 71075aa..46ee841 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -19,6 +19,7 @@ use Modules\Media\Models\MediaMapper; use Modules\Media\Models\MediaTypeMapper; use Modules\SupplierManagement\Models\Attribute\SupplierAttributeTypeL11nMapper; use Modules\SupplierManagement\Models\Attribute\SupplierAttributeTypeMapper; +use Modules\SupplierManagement\Models\Attribute\SupplierAttributeValueL11nMapper; use Modules\SupplierManagement\Models\Attribute\SupplierAttributeValueMapper; use Modules\SupplierManagement\Models\SupplierMapper; use phpOMS\Asset\AssetType; @@ -56,17 +57,15 @@ final class BackendController extends Controller */ public function viewSupplierManagementAttributeTypeList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { - $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/SupplierManagement/Theme/Backend/attribute-type-list'); - $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004801001, $request, $response); + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeTypeListView($this->app->l11nManager, $request, $response); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003203001, $request, $response); - /** @var \Modules\Attribute\Models\AttributeType[] $attributes */ - $attributes = SupplierAttributeTypeMapper::getAll() + $view->attributes = SupplierAttributeTypeMapper::getAll() ->with('l11n') ->where('l11n/language', $response->header->l11n->language) ->execute(); - $view->data['attributes'] = $attributes; + $view->path = 'purchase/supplier'; return $view; } @@ -87,7 +86,7 @@ final class BackendController extends Controller { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/SupplierManagement/Theme/Backend/attribute-value-list'); - $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004801001, $request, $response); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003203001, $request, $response); /** @var \Modules\Attribute\Models\AttributeValue[] $attributes */ $attributes = SupplierAttributeValueMapper::getAll() @@ -114,23 +113,55 @@ final class BackendController extends Controller */ public function viewSupplierManagementAttributeType(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { - $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/SupplierManagement/Theme/Backend/attribute-type'); - $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004801001, $request, $response); + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeTypeView($this->app->l11nManager, $request, $response); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003203001, $request, $response); - /** @var \Modules\Attribute\Models\AttributeType $attribute */ - $attribute = SupplierAttributeTypeMapper::get() + $view->attribute = SupplierAttributeTypeMapper::get() ->with('l11n') + ->with('defaults') + ->with('defaults/l11n') ->where('id', (int) $request->getData('id')) ->where('l11n/language', $response->header->l11n->language) + ->where('defaults/l11n/language', [$response->header->l11n->language, null]) ->execute(); - $l11ns = SupplierAttributeTypeL11nMapper::getAll() - ->where('ref', $attribute->id) + $view->l11ns = SupplierAttributeTypeL11nMapper::getAll() + ->where('ref', $view->attribute->id) ->execute(); - $view->data['attribute'] = $attribute; - $view->data['l11ns'] = $l11ns; + $view->path = 'purchase/supplier'; + + return $view; + } + + /** + * 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 viewSupplierManagementAttributeValue(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(1003203001, $request, $response); + + $view->attribute = SupplierAttributeValueMapper::get() + ->with('l11n') + ->where('id', (int) $request->getData('id')) + ->where('l11n/language', [$response->header->l11n->language, null]) + ->execute(); + + $view->l11ns = SupplierAttributeValueL11nMapper::getAll() + ->where('ref', $view->attribute->id) + ->execute(); + + // @todo Also find the ItemAttributeType return $view; } diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php index ea2a509..a370a98 100755 --- a/Models/PermissionCategory.php +++ b/Models/PermissionCategory.php @@ -29,4 +29,6 @@ abstract class PermissionCategory extends Enum public const SUPPLIER = 1; public const ANALYSIS = 2; + + public const ATTRIBUTE = 4; } diff --git a/Theme/Backend/attribute-type-list.tpl.php b/Theme/Backend/attribute-type-list.tpl.php deleted file mode 100644 index d3a6d83..0000000 --- a/Theme/Backend/attribute-type-list.tpl.php +++ /dev/null @@ -1,71 +0,0 @@ -data['attributes']; - -echo $this->data['nav']->render(); ?> - -
| - | - | = $this->getHtml('Language', '0', '0'); ?> - | = $this->getHtml('Title'); ?> - |
| close - | settings - | = ISO639Enum::getByName('_' . \strtoupper($value->language)); ?> - | = $value->content; ?> - - - |
| = $this->getHtml('Empty', '0', '0'); ?> - - | |||