diff --git a/Controller/ApiController.php b/Controller/ApiController.php new file mode 100644 index 0000000..e7229a4 --- /dev/null +++ b/Controller/ApiController.php @@ -0,0 +1,152 @@ +validateSupplierCreate($request))) { + $response->set('supplier_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $supplier = $this->createSupplierFromRequest($request); + $this->createModel($request->getHeader()->getAccount(), $supplier, SupplierMapper::class, 'supplier', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Supplier', 'Supplier successfully created', $supplier); + } + + /** + * Method to create news article from request. + * + * @param RequestAbstract $request Request + * + * @return Supplier + * + * @since 1.0.0 + */ + private function createSupplierFromRequest(RequestAbstract $request) : Supplier + { + $account = new Account(); + $account->setName1($request->getData('name1') ?? ''); + $account->setName2($request->getData('name2') ?? ''); + + $profile = new Profile($account); + + $supplier = new Supplier(); + $supplier->setNumber($request->getData('number') ?? ''); + $supplier->setProfile($profile); + + $addr = new Address(); + $addr->setAddress($request->getData('address') ?? ''); + $addr->setPostal($request->getData('postal') ?? ''); + $addr->setCity($request->getData('city') ?? ''); + $addr->setCountry($request->getData('country') ?? ''); + $addr->setState($request->getData('state') ?? ''); + $supplier->setMainAddress($addr); + + return $supplier; + } + + /** + * Validate news create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateSupplierCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['number'] = empty($request->getData('number'))) + || ($val['name1'] = empty($request->getData('name1'))) + ) { + return $val; + } + + return []; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiContactElementCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $profileModule = $this->app->moduleManager->get('Profile'); + + if (!empty($val = $profileModule->validateContactElementCreate($request))) { + $response->set('contact_element_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $contactElement = $profileModule->createContactElementFromRequest($request); + + $this->createModel($request->getHeader()->getAccount(), $contactElement, ContactElementMapper::class, 'supplier-contactElement', $request->getOrigin()); + $this->createModelRelation( + $request->getHeader()->getAccount(), + (int) $request->getData('supplier'), + $contactElement->getId(), + SupplierMapper::class, 'contactElements', '', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Contact Element', 'Contact element successfully created', $contactElement); + } +}