diff --git a/Admin/Install/Admin.install.json b/Admin/Install/Admin.install.json new file mode 100644 index 0000000..d14ce9e --- /dev/null +++ b/Admin/Install/Admin.install.json @@ -0,0 +1,10 @@ +[ + { + "description": "Default supplier segmentation (segment, section, sales group, product group)", + "type": "setting", + "name": "1003200001", + "content": "[\"segment\":1, \"section\":1, \"supplier_group\":1]", + "pattern": "", + "module": "SupplierManagement" + } +] \ No newline at end of file diff --git a/Admin/Install/Admin.php b/Admin/Install/Admin.php new file mode 100644 index 0000000..f9b75bc --- /dev/null +++ b/Admin/Install/Admin.php @@ -0,0 +1,43 @@ + __DIR__ . '/Admin.install.json']); + } +} diff --git a/Admin/Install/attributes.json b/Admin/Install/attributes.json index c356cb7..20879c0 100755 --- a/Admin/Install/attributes.json +++ b/Admin/Install/attributes.json @@ -56,10 +56,52 @@ ] }, { - "name": "group", + "name": "segment", "l11n": { - "en": "Group", - "de": "Gruppe" + "en": "Segment", + "de": "Segment" + }, + "value_type": 1, + "is_custom_allowed": false, + "validation_pattern": "", + "is_required": true, + "default_value": "", + "values": [ + { + "value": 1, + "l11n": { + "en": "Segment 1", + "de": "Segment 1" + } + } + ] + }, + { + "name": "section", + "l11n": { + "en": "Section", + "de": "Sparte" + }, + "value_type": 1, + "is_custom_allowed": false, + "validation_pattern": "", + "is_required": true, + "default_value": "", + "values": [ + { + "value": 1, + "l11n": { + "en": "Section 1", + "de": "Section 1" + } + } + ] + }, + { + "name": "supplier_group", + "l11n": { + "en": "Supplier Group", + "de": "Lieferantengruppe" }, "value_type": 1, "is_custom_allowed": false, @@ -75,6 +117,27 @@ } } ] + }, + { + "name": "supplier_type", + "l11n": { + "en": "Supplier Type", + "de": "Lieferantentyp" + }, + "value_type": 1, + "is_custom_allowed": false, + "validation_pattern": "", + "is_required": true, + "default_value": "", + "values": [ + { + "value": 1, + "l11n": { + "en": "Type 1", + "de": "Typ 1" + } + } + ] }, { "name": "vat_id", diff --git a/Controller/ApiAttributeController.php b/Controller/ApiAttributeController.php new file mode 100644 index 0000000..cd16cd4 --- /dev/null +++ b/Controller/ApiAttributeController.php @@ -0,0 +1,524 @@ +validateAttributeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $type = SupplierAttributeTypeMapper::get()->with('defaults')->where('id', (int) $request->getData('type'))->execute(); + $attribute = $this->createAttributeFromRequest($request, $type); + $this->createModel($request->header->account, $attribute, SupplierAttributeMapper::class, 'attribute', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attribute); + } + + /** + * Api method to create supplier attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrL11n = $this->createAttributeTypeL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, SupplierAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrL11n); + } + + /** + * Api method to create supplier attribute type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrType = $this->createAttributeTypeFromRequest($request); + $this->createModel($request->header->account, $attrType, SupplierAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrType); + } + + /** + * Api method to create supplier attribute value + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\Attribute\Models\AttributeType $type */ + $type = SupplierAttributeTypeMapper::get() + ->where('id', $request->getDataInt('type') ?? 0) + ->execute(); + + $attrValue = $this->createAttributeValueFromRequest($request, $type); + $this->createModel($request->header->account, $attrValue, SupplierAttributeValueMapper::class, 'attr_value', $request->getOrigin()); + + if ($attrValue->isDefault) { + $this->createModelRelation( + $request->header->account, + (int) $request->getData('type'), + $attrValue->id, + SupplierAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() + ); + } + + $this->createStandardCreateResponse($request, $response, $attrValue); + } + + /** + * Api method to create supplier attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, SupplierAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrL11n); + } + + /** + * Api method to update SupplierAttribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var Attribute $old */ + $old = SupplierAttributeMapper::get() + ->with('type') + ->with('type/defaults') + ->with('value') + ->where('id', (int) $request->getData('id')) + ->execute(); + + $new = $this->updateAttributeFromRequest($request, clone $old); + + if ($new->id === 0) { + // Set response header to invalid request because of invalid data + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $new); + + return; + } + + $this->updateModel($request->header->account, $old, $new, SupplierAttributeMapper::class, 'supplier_attribute', $request->getOrigin()); + + if ($new->value->getValue() !== $old->value->getValue() + && $new->type->custom + ) { + $this->updateModel($request->header->account, $old->value, $new->value, SupplierAttributeValueMapper::class, 'attribute_value', $request->getOrigin()); + } + + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete SupplierAttribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + $supplierAttribute = SupplierAttributeMapper::get() + ->with('type') + ->where('id', (int) $request->getData('id')) + ->execute(); + + if ($supplierAttribute->type->isRequired) { + $this->createInvalidDeleteResponse($request, $response, []); + + return; + } + + $this->deleteModel($request->header->account, $supplierAttribute, SupplierAttributeMapper::class, 'supplier_attribute', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $supplierAttribute); + } + + /** + * Api method to update SupplierAttributeTypeL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeTypeL11nUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $old */ + $old = SupplierAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateAttributeTypeL11nFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, SupplierAttributeTypeL11nMapper::class, 'supplier_attribute_type_l11n', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete SupplierAttributeTypeL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeTypeL11nDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $supplierAttributeTypeL11n */ + $supplierAttributeTypeL11n = SupplierAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $supplierAttributeTypeL11n, SupplierAttributeTypeL11nMapper::class, 'supplier_attribute_type_l11n', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $supplierAttributeTypeL11n); + } + + /** + * Api method to update SupplierAttributeType + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeTypeUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var AttributeType $old */ + $old = SupplierAttributeTypeMapper::get()->with('defaults')->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateAttributeTypeFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, SupplierAttributeTypeMapper::class, 'supplier_attribute_type', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete SupplierAttributeType + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @todo Implement API function + * + * @since 1.0.0 + */ + public function apiSupplierAttributeTypeDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var AttributeType $supplierAttributeType */ + $supplierAttributeType = SupplierAttributeTypeMapper::get()->with('defaults')->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $supplierAttributeType, SupplierAttributeTypeMapper::class, 'supplier_attribute_type', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $supplierAttributeType); + } + + /** + * Api method to update SupplierAttributeValue + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeValueUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var AttributeValue $old */ + $old = SupplierAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute(); + + /** @var \Modules\Attribute\Models\Attribute $attr */ + $attr = SupplierAttributeMapper::get() + ->with('type') + ->where('id', $request->getDataInt('attribute') ?? 0) + ->execute(); + + $new = $this->updateAttributeValueFromRequest($request, clone $old, $attr); + + $this->updateModel($request->header->account, $old, $new, SupplierAttributeValueMapper::class, 'supplier_attribute_value', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete SupplierAttributeValue + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeValueDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + // @todo I don't think values can be deleted? Only Attributes + // However, It should be possible to remove UNUSED default values + // either here or other function? + // if (!empty($val = $this->validateAttributeValueDelete($request))) { + // $response->header->status = RequestStatusCode::R_400; + // $this->createInvalidDeleteResponse($request, $response, $val); + + // return; + // } + + // /** @var \Modules\SupplierManagement\Models\SupplierAttributeValue $supplierAttributeValue */ + // $supplierAttributeValue = SupplierAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute(); + // $this->deleteModel($request->header->account, $supplierAttributeValue, SupplierAttributeValueMapper::class, 'supplier_attribute_value', $request->getOrigin()); + // $this->createStandardDeleteResponse($request, $response, $supplierAttributeValue); + } + + /** + * Api method to update SupplierAttributeValueL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeValueL11nUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $old */ + $old = SupplierAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id')); + $new = $this->updateAttributeValueL11nFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, SupplierAttributeValueL11nMapper::class, 'supplier_attribute_value_l11n', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete SupplierAttributeValueL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiSupplierAttributeValueL11nDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $supplierAttributeValueL11n */ + $supplierAttributeValueL11n = SupplierAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $supplierAttributeValueL11n, SupplierAttributeValueL11nMapper::class, 'supplier_attribute_value_l11n', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $supplierAttributeValueL11n); + } +} diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 28a5446..ecc7126 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -15,24 +15,26 @@ declare(strict_types=1); namespace Modules\SupplierManagement\Controller; use Modules\Admin\Models\Account; +use Modules\Admin\Models\NullAccount; use Modules\Media\Models\MediaMapper; use Modules\Media\Models\PathSettings; +use Modules\SupplierManagement\Models\SettingsEnum; use Modules\SupplierManagement\Models\Supplier; -use Modules\SupplierManagement\Models\SupplierAttributeMapper; -use Modules\SupplierManagement\Models\SupplierAttributeTypeL11nMapper; -use Modules\SupplierManagement\Models\SupplierAttributeTypeMapper; -use Modules\SupplierManagement\Models\SupplierAttributeValueL11nMapper; -use Modules\SupplierManagement\Models\SupplierAttributeValueMapper; +use Modules\SupplierManagement\Models\Attribute\SupplierAttributeTypeMapper; use Modules\SupplierManagement\Models\SupplierL11nMapper; use Modules\SupplierManagement\Models\SupplierL11nTypeMapper; use Modules\SupplierManagement\Models\SupplierMapper; +use phpOMS\Api\Geocoding\Nominatim; use phpOMS\Localization\BaseStringL11n; use phpOMS\Localization\BaseStringL11nType; +use phpOMS\Localization\ISO3166TwoEnum; use phpOMS\Localization\NullBaseStringL11nType; +use phpOMS\Message\Http\HttpRequest; use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; use phpOMS\Stdlib\Base\Address; +use phpOMS\Uri\HttpUri; /** * SupplierManagement class. @@ -70,6 +72,9 @@ final class ApiController extends Controller $supplier = $this->createSupplierFromRequest($request); $this->createModel($request->header->account, $supplier, SupplierMapper::class, 'supplier', $request->getOrigin()); + + $this->createSupplierSegmentation($request, $response, $supplier); + $this->createStandardCreateResponse($request, $response, $supplier); } @@ -84,27 +89,70 @@ final class ApiController extends Controller */ private function createSupplierFromRequest(RequestAbstract $request) : Supplier { - $account = new Account(); - $account->name1 = $request->getDataString('name1') ?? ''; - $account->name2 = $request->getDataString('name2') ?? ''; + $account = null; + if (!$request->hasData('account')) { + $account = new Account(); + $account->name1 = $request->getDataString('name1') ?? ''; + $account->name2 = $request->getDataString('name2') ?? ''; + } else { + $account = new NullAccount((int) $request->getData('account')); + } $supplier = new Supplier(); $supplier->number = $request->getDataString('number') ?? ''; $supplier->account = $account; + $supplier->unit = $request->getDataInt('unit') ?? 1; + // Handle main address $addr = new Address(); $addr->address = $request->getDataString('address') ?? ''; $addr->postal = $request->getDataString('postal') ?? ''; $addr->city = $request->getDataString('city') ?? ''; $addr->state = $request->getDataString('state') ?? ''; - $addr->setCountry($request->getDataString('country') ?? ''); + $addr->setCountry($request->getDataString('country') ?? ISO3166TwoEnum::_XXX); $supplier->mainAddress = $addr; - $supplier->unit = $request->getDataInt('unit'); + // Try to find lat/lon through external API + $geocoding = Nominatim::geocoding($addr->country, $addr->city, $addr->address); + if ($geocoding === ['lat' => 0.0, 'lon' => 0.0]) { + $geocoding = Nominatim::geocoding($addr->country, $addr->city); + } + + $supplier->mainAddress->lat = $geocoding['lat']; + $supplier->mainAddress->lon = $geocoding['lon']; return $supplier; } + private function createSupplierSegmentation(RequestAbstract $request, ResponseAbstract $response, Supplier $supplier) : void + { + /** @var \Model\Setting $settings */ + $settings = $this->app->appSettings->get(null, [ + SettingsEnum::DEFAULT_SEGMENTATION, + ]); + + $segmentation = \json_decode($settings->content, true); + if ($segmentation === false) { + return; + } + + $types = SupplierAttributeTypeMapper::get() + ->where('name', \array_keys($segmentation), 'IN') + ->execute(); + + foreach ($types as $type) { + $internalResponse = clone $response; + $internalRequest = new HttpRequest(new HttpUri('')); + + $internalRequest->header->account = $request->header->account; + $internalRequest->setData('ref', $supplier->id); + $internalRequest->setData('type', $type->id); + $internalRequest->setData('value_id', $segmentation[$type->name]); + + $this->app->moduleManager->get('SupplierManagement', 'ApiAttribute')->apiItemAttributeCreate($internalRequest, $internalResponse); + } + } + /** * Validate news create request * @@ -261,157 +309,6 @@ final class ApiController extends Controller return []; } - /** - * Api method to create supplier attribute - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param array $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiSupplierAttributeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void - { - if (!empty($val = $this->validateAttributeCreate($request))) { - $response->header->status = RequestStatusCode::R_400; - $this->createInvalidCreateResponse($request, $response, $val); - - return; - } - - $type = SupplierAttributeTypeMapper::get()->with('defaults')->where('id', (int) $request->getData('type'))->execute(); - $attribute = $this->createAttributeFromRequest($request, $type); - $this->createModel($request->header->account, $attribute, SupplierAttributeMapper::class, 'attribute', $request->getOrigin()); - $this->createStandardCreateResponse($request, $response, $attribute); - } - - /** - * Api method to create supplier attribute l11n - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param array $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiSupplierAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void - { - if (!empty($val = $this->validateAttributeTypeL11nCreate($request))) { - $response->header->status = RequestStatusCode::R_400; - $this->createInvalidCreateResponse($request, $response, $val); - - return; - } - - $attrL11n = $this->createAttributeTypeL11nFromRequest($request); - $this->createModel($request->header->account, $attrL11n, SupplierAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); - $this->createStandardCreateResponse($request, $response, $attrL11n); - } - - /** - * Api method to create supplier attribute type - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param array $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiSupplierAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void - { - if (!empty($val = $this->validateAttributeTypeCreate($request))) { - $response->header->status = RequestStatusCode::R_400; - $this->createInvalidCreateResponse($request, $response, $val); - - return; - } - - $attrType = $this->createAttributeTypeFromRequest($request); - $this->createModel($request->header->account, $attrType, SupplierAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); - $this->createStandardCreateResponse($request, $response, $attrType); - } - - /** - * Api method to create supplier attribute value - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param array $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiSupplierAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void - { - if (!empty($val = $this->validateAttributeValueCreate($request))) { - $response->header->status = RequestStatusCode::R_400; - $this->createInvalidCreateResponse($request, $response, $val); - - return; - } - - /** @var \Modules\Attribute\Models\AttributeType $type */ - $type = SupplierAttributeTypeMapper::get() - ->where('id', $request->getDataInt('type') ?? 0) - ->execute(); - - $attrValue = $this->createAttributeValueFromRequest($request, $type); - $this->createModel($request->header->account, $attrValue, SupplierAttributeValueMapper::class, 'attr_value', $request->getOrigin()); - - if ($attrValue->isDefault) { - $this->createModelRelation( - $request->header->account, - (int) $request->getData('type'), - $attrValue->id, - SupplierAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() - ); - } - - $this->createStandardCreateResponse($request, $response, $attrValue); - } - - /** - * Api method to create item attribute l11n - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param array $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiSupplierAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void - { - if (!empty($val = $this->validateAttributeValueL11nCreate($request))) { - $response->header->status = RequestStatusCode::R_400; - $this->createInvalidCreateResponse($request, $response, $val); - - return; - } - - $attrL11n = $this->createAttributeValueL11nFromRequest($request); - $this->createModel($request->header->account, $attrL11n, SupplierAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); - $this->createStandardCreateResponse($request, $response, $attrL11n); - } - /** * Api method to create supplier files * diff --git a/Controller/BackendController.php b/Controller/BackendController.php index a452b5c..6881cbd 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -43,7 +43,7 @@ use phpOMS\Views\View; final class BackendController extends Controller { /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -72,7 +72,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -101,7 +101,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -136,7 +136,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -165,7 +165,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -186,7 +186,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -275,7 +275,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response diff --git a/Models/SupplierAttributeMapper.php b/Models/Attribute/SupplierAttributeMapper.php old mode 100755 new mode 100644 similarity index 93% rename from Models/SupplierAttributeMapper.php rename to Models/Attribute/SupplierAttributeMapper.php index 826a250..c31bf48 --- a/Models/SupplierAttributeMapper.php +++ b/Models/Attribute/SupplierAttributeMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\SupplierManagement\Models; +namespace Modules\SupplierManagement\Models\Attribute; use Modules\Attribute\Models\Attribute; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; @@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Supplier mapper class. * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/SupplierAttributeTypeL11nMapper.php b/Models/Attribute/SupplierAttributeTypeL11nMapper.php old mode 100755 new mode 100644 similarity index 91% rename from Models/SupplierAttributeTypeL11nMapper.php rename to Models/Attribute/SupplierAttributeTypeL11nMapper.php index 801d648..52dab4e --- a/Models/SupplierAttributeTypeL11nMapper.php +++ b/Models/Attribute/SupplierAttributeTypeL11nMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\SupplierManagement\Models; +namespace Modules\SupplierManagement\Models\Attribute; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; use phpOMS\Localization\BaseStringL11n; @@ -20,7 +20,7 @@ use phpOMS\Localization\BaseStringL11n; /** * Supplier mapper class. * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/SupplierAttributeTypeMapper.php b/Models/Attribute/SupplierAttributeTypeMapper.php old mode 100755 new mode 100644 similarity index 94% rename from Models/SupplierAttributeTypeMapper.php rename to Models/Attribute/SupplierAttributeTypeMapper.php index 5c31826..004e727 --- a/Models/SupplierAttributeTypeMapper.php +++ b/Models/Attribute/SupplierAttributeTypeMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\SupplierManagement\Models; +namespace Modules\SupplierManagement\Models\Attribute; use Modules\Attribute\Models\AttributeType; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; @@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Supplier mapper class. * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/SupplierAttributeValueL11nMapper.php b/Models/Attribute/SupplierAttributeValueL11nMapper.php old mode 100755 new mode 100644 similarity index 91% rename from Models/SupplierAttributeValueL11nMapper.php rename to Models/Attribute/SupplierAttributeValueL11nMapper.php index ec1125e..86ff5b8 --- a/Models/SupplierAttributeValueL11nMapper.php +++ b/Models/Attribute/SupplierAttributeValueL11nMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\SupplierManagement\Models; +namespace Modules\SupplierManagement\Models\Attribute; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; use phpOMS\Localization\BaseStringL11n; @@ -20,7 +20,7 @@ use phpOMS\Localization\BaseStringL11n; /** * Supplier mapper class. * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/SupplierAttributeValueMapper.php b/Models/Attribute/SupplierAttributeValueMapper.php old mode 100755 new mode 100644 similarity index 94% rename from Models/SupplierAttributeValueMapper.php rename to Models/Attribute/SupplierAttributeValueMapper.php index 1b3751b..90a1f97 --- a/Models/SupplierAttributeValueMapper.php +++ b/Models/Attribute/SupplierAttributeValueMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\SupplierManagement\Models; +namespace Modules\SupplierManagement\Models\Attribute; use Modules\Attribute\Models\AttributeValue; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; @@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Supplier mapper class. * - * @package Modules\SupplierManagement\Models + * @package Modules\SupplierManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php index 730bf7e..78eca9d 100755 --- a/Models/PermissionCategory.php +++ b/Models/PermissionCategory.php @@ -17,7 +17,7 @@ namespace Modules\SupplierManagement\Models; use phpOMS\Stdlib\Base\Enum; /** - * Permision state enum. + * Permission category enum. * * @package Modules\SupplierManagement\Models * @license OMS License 2.0 diff --git a/Models/SettingsEnum.php b/Models/SettingsEnum.php new file mode 100644 index 0000000..ca27f89 --- /dev/null +++ b/Models/SettingsEnum.php @@ -0,0 +1,30 @@ +data['nav']->render(); ?>
getHtml('Language', '0', '0'); ?>download
- +
diff --git a/Theme/Backend/supplier-create.tpl.php b/Theme/Backend/supplier-create.tpl.php index c2eb748..d85d5d4 100755 --- a/Theme/Backend/supplier-create.tpl.php +++ b/Theme/Backend/supplier-create.tpl.php @@ -20,12 +20,12 @@ echo $this->data['nav']->render(); ?>
@@ -40,11 +40,11 @@ echo $this->data['nav']->render(); ?>
-
+
-
+
-
+
@@ -168,7 +168,7 @@ echo $this->data['nav']->render(); ?> $footerView->setPage(1); ?>
- +
diff --git a/Theme/Backend/supplier-profile-bills.tpl.php b/Theme/Backend/supplier-profile-bills.tpl.php index 2e44a10..3fe6911 100644 --- a/Theme/Backend/supplier-profile-bills.tpl.php +++ b/Theme/Backend/supplier-profile-bills.tpl.php @@ -22,7 +22,7 @@ $bills = $this->data['newestInvoices'] ?? [];
getHtml('Bills'); ?>download
-
getHtml('Logs'); ?>download
+