From 70638a246bbc57e7af63aaa449d2e4edb7bf7426 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Wed, 26 Jul 2023 09:18:04 +0000 Subject: [PATCH] fix default respone generation --- Admin/Install/Taxes/de_small_business.json | 362 +++++++++++++++++++++ Admin/Install/{ => Taxes}/taxes.json | 0 Admin/Installer.php | 6 +- Controller/ApiAttributeController.php | 74 ++--- Controller/ApiBillController.php | 42 ++- Controller/ApiBillTypeController.php | 31 +- Controller/ApiPriceController.php | 15 +- Controller/ApiTaxController.php | 160 ++++++--- Models/Price/PriceMapper.php | 4 +- Models/Tax/TaxCombinationMapper.php | 4 +- 10 files changed, 563 insertions(+), 135 deletions(-) create mode 100644 Admin/Install/Taxes/de_small_business.json rename Admin/Install/{ => Taxes}/taxes.json (100%) mode change 100755 => 100644 diff --git a/Admin/Install/Taxes/de_small_business.json b/Admin/Install/Taxes/de_small_business.json new file mode 100644 index 0000000..691de90 --- /dev/null +++ b/Admin/Install/Taxes/de_small_business.json @@ -0,0 +1,362 @@ +[ + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "EU", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "AT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "BE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "BG", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "HR", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "CY", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "CZ", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "DK", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "EE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "FI", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "FR", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "DE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "GR", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "HU", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "IE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "IT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "LV", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "LT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "LU", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "MT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "NL", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "PL", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "PT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "RO", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "SK", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "SI", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "ES", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "SE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "GB", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "INT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "EU", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "AT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "BE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "BG", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "HR", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "CY", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "CZ", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "DK", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "EE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "FI", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "FR", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "DE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "GR", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "HU", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "IE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "IT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "LV", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "LT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "LU", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "MT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "NL", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "PL", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "PT", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "RO", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "SK", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "SI", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "ES", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "SE", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "GB", + "tax_code": "SBIZ_0" + }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "INT", + "tax_code": "SBIZ_0" + } +] \ No newline at end of file diff --git a/Admin/Install/taxes.json b/Admin/Install/Taxes/taxes.json old mode 100755 new mode 100644 similarity index 100% rename from Admin/Install/taxes.json rename to Admin/Install/Taxes/taxes.json diff --git a/Admin/Installer.php b/Admin/Installer.php index c65df07..0a7faea 100755 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -15,8 +15,8 @@ declare(strict_types=1); namespace Modules\Billing\Admin; use Modules\Billing\Models\BillTransferType; -use Modules\ClientManagement\Models\ClientAttributeTypeMapper; -use Modules\ItemManagement\Models\ItemAttributeTypeMapper; +use Modules\ClientManagement\Models\Attribute\ClientAttributeTypeMapper; +use Modules\ItemManagement\Models\Attribute\ItemAttributeTypeMapper; use Modules\SupplierManagement\Models\SupplierAttributeTypeMapper; use phpOMS\Application\ApplicationAbstract; use phpOMS\Config\SettingsInterface; @@ -72,7 +72,7 @@ final class Installer extends InstallerAbstract self::createBillTypes($app, $types, $defaultTemplate); /* Tax types */ - $fileContent = \file_get_contents(__DIR__ . '/Install/taxes.json'); + $fileContent = \file_get_contents(__DIR__ . '/Install/Taxes/taxes.json'); if ($fileContent === false) { return; } diff --git a/Controller/ApiAttributeController.php b/Controller/ApiAttributeController.php index f54753c..e1bac43 100755 --- a/Controller/ApiAttributeController.php +++ b/Controller/ApiAttributeController.php @@ -24,10 +24,8 @@ use Modules\Billing\Models\Attribute\BillAttributeValueL11nMapper; use Modules\Billing\Models\Attribute\BillAttributeValueMapper; use phpOMS\Localization\BaseStringL11n; use phpOMS\Message\Http\RequestStatusCode; -use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; -use phpOMS\Model\Message\FormValidation; /** * Billing class. @@ -39,7 +37,7 @@ use phpOMS\Model\Message\FormValidation; */ final class ApiAttributeController extends Controller { - use \Modules\Attribute\Controller\ApiTraitController; + use \Modules\Attribute\Controller\ApiAttributeTraitController; /** * Api method to create item attribute @@ -57,15 +55,15 @@ final class ApiAttributeController extends Controller public function apiBillAttributeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeCreate($request))) { - $response->data['attribute_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $attribute = $this->createAttributeFromRequest($request); $this->createModel($request->header->account, $attribute, BillAttributeMapper::class, 'attribute', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully created', $attribute); + $this->createStandardCreateResponse($request, $response, $attribute); } /** @@ -84,15 +82,15 @@ final class ApiAttributeController extends Controller public function apiBillAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeTypeL11nCreate($request))) { - $response->data['attr_type_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $attrL11n = $this->createAttributeTypeL11nFromRequest($request); $this->createModel($request->header->account, $attrL11n, BillAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + $this->createStandardCreateResponse($request, $response, $attrL11n); } /** @@ -111,15 +109,15 @@ final class ApiAttributeController extends Controller public function apiBillAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeTypeCreate($request))) { - $response->data['attr_type_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $attrType = $this->createAttributeTypeFromRequest($request); $this->createModel($request->header->account, $attrType, BillAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type', 'Attribute type successfully created', $attrType); + $this->createStandardCreateResponse($request, $response, $attrType); } /** @@ -138,8 +136,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeValueCreate($request))) { - $response->data['attr_value_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } @@ -161,7 +159,7 @@ final class ApiAttributeController extends Controller ); } - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute value', 'Attribute value successfully created', $attrValue); + $this->createStandardCreateResponse($request, $response, $attrValue); } /** @@ -180,15 +178,15 @@ final class ApiAttributeController extends Controller public function apiBillAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeValueL11nCreate($request))) { - $response->data['attr_value_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $attrL11n = $this->createAttributeValueL11nFromRequest($request); $this->createModel($request->header->account, $attrL11n, BillAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + $this->createStandardCreateResponse($request, $response, $attrL11n); } /** @@ -207,8 +205,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -256,8 +254,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } @@ -293,8 +291,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeTypeL11nUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeTypeL11nUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -323,8 +321,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeTypeL11nDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeTypeL11nDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } @@ -351,8 +349,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeTypeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeTypeUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -383,8 +381,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeTypeDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeTypeDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } @@ -411,8 +409,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeValueUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeValueUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -453,8 +451,8 @@ final class ApiAttributeController extends Controller // However, It should be possible to remove UNUSED default values // either here or other function? if (!empty($val = $this->validateAttributeValueDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } @@ -481,8 +479,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeValueL11nUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeValueL11nUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -511,8 +509,8 @@ final class ApiAttributeController extends Controller public function apiBillAttributeValueL11nDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateAttributeValueL11nDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } diff --git a/Controller/ApiBillController.php b/Controller/ApiBillController.php index 72582ea..403fce0 100755 --- a/Controller/ApiBillController.php +++ b/Controller/ApiBillController.php @@ -1,5 +1,4 @@ validateBillUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -142,15 +140,14 @@ final class ApiBillController extends Controller public function apiBillCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillCreate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $bill = $this->createBillFromRequest($request, $response, $data); $this->createBillDatabaseEntry($bill, $request); - $this->createStandardCreateResponse($request, $response, $bill); } @@ -303,7 +300,8 @@ final class ApiBillController extends Controller */ public function createBaseBillElement(Client $client, Item $item, Bill $bill, RequestAbstract $request) : BillElement { - $taxCode = $this->app->moduleManager->get('Billing', 'ApiTax')->getTaxCodeFromClientItem($client, $item, $request->header->l11n->country); + $taxCode = $this->app->moduleManager->get('Billing', 'ApiTax') + ->getTaxCodeFromClientItem($client, $item, $request->header->l11n->country); $element = BillElement::fromItem( $item, @@ -392,8 +390,8 @@ final class ApiBillController extends Controller public function apiMediaAddToBill(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateMediaAddToBill($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -504,8 +502,8 @@ final class ApiBillController extends Controller { // @todo: check that it is not system generated media! if (!empty($val = $this->validateMediaRemoveFromBill($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } @@ -644,8 +642,8 @@ final class ApiBillController extends Controller public function apiBillElementCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillElementCreate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } @@ -1140,8 +1138,8 @@ final class ApiBillController extends Controller public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateNoteCreate($request))) { - $response->data['bill_note_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } @@ -1196,8 +1194,8 @@ final class ApiBillController extends Controller public function apiBillDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } @@ -1267,8 +1265,8 @@ final class ApiBillController extends Controller public function apiBillElementUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillElementUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -1339,8 +1337,8 @@ final class ApiBillController extends Controller public function apiBillElementDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillElementDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } diff --git a/Controller/ApiBillTypeController.php b/Controller/ApiBillTypeController.php index e9b6f78..a69d845 100755 --- a/Controller/ApiBillTypeController.php +++ b/Controller/ApiBillTypeController.php @@ -24,10 +24,8 @@ use Modules\Media\Models\NullCollection; use phpOMS\Localization\BaseStringL11n; use phpOMS\Localization\ISO639x1Enum; use phpOMS\Message\Http\RequestStatusCode; -use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; -use phpOMS\Model\Message\FormValidation; /** * Billing class. @@ -55,16 +53,15 @@ final class ApiBillTypeController extends Controller public function apiBillTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillTypeCreate($request))) { - $response->data['bill_type_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $billType = $this->createBillTypeFromRequest($request); $this->createModel($request->header->account, $billType, BillTypeMapper::class, 'bill_type', $request->getOrigin()); - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Bill type', 'Bill type successfully created', $billType); + $this->createStandardCreateResponse($request, $response, $billType); } /** @@ -132,15 +129,15 @@ final class ApiBillTypeController extends Controller public function apiBillTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillTypeL11nCreate($request))) { - $response->data['bill_type_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $billTypeL11n = $this->createBillTypeL11nFromRequest($request); $this->createModel($request->header->account, $billTypeL11n, BillTypeL11nMapper::class, 'bill_type_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $billTypeL11n); + $this->createStandardCreateResponse($request, $response, $billTypeL11n); } /** @@ -201,8 +198,8 @@ final class ApiBillTypeController extends Controller public function apiBillTypeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillTypeUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -277,8 +274,8 @@ final class ApiBillTypeController extends Controller public function apiBillTypeDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillTypeDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } @@ -324,8 +321,8 @@ final class ApiBillTypeController extends Controller public function apiBillTypeL11nUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillTypeL11nUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -394,8 +391,8 @@ final class ApiBillTypeController extends Controller public function apiBillTypeL11nDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateBillTypeL11nDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } diff --git a/Controller/ApiPriceController.php b/Controller/ApiPriceController.php index 58a9fc3..2a47d24 100755 --- a/Controller/ApiPriceController.php +++ b/Controller/ApiPriceController.php @@ -238,16 +238,15 @@ final class ApiPriceController extends Controller public function apiPriceCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validatePriceCreate($request))) { - $response->data['price_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $tax = $this->createPriceFromRequest($request); $this->createModel($request->header->account, $tax, PriceMapper::class, 'price', $request->getOrigin()); - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Price', 'Price successfully created', $tax); + $this->createStandardCreateResponse($request, $response, $tax); } /** @@ -332,8 +331,8 @@ final class ApiPriceController extends Controller public function apiPriceUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validatePriceUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -428,8 +427,8 @@ final class ApiPriceController extends Controller public function apiPriceDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validatePriceDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } diff --git a/Controller/ApiTaxController.php b/Controller/ApiTaxController.php index 64e3e64..c8b7df7 100755 --- a/Controller/ApiTaxController.php +++ b/Controller/ApiTaxController.php @@ -1,5 +1,4 @@ where('itemCode', $item->getAttribute('sales_tax_code')->value->id) - ->where('clientCode', $client->getAttribute('sales_tax_code')->value->id) - ->execute(); + ->where('itemCode', $item->getAttribute('sales_tax_code')->value->id) + ->where('clientCode', $client->getAttribute('sales_tax_code')->value->id) + ->execute(); /** @var \Modules\Finance\Models\TaxCode $taxCode */ $taxCode = TaxCodeMapper::get() ->where('abbr', $taxCombination->taxCode) ->execute(); - // If now tax code could be found, the local tax code should be used. - if ($taxCode->id === 0) { - /** @var \Modules\Organization\Models\Unit $unit */ - $unit = UnitMapper::get() - ->with('mainAddress') - ->where('id', $this->app->unitId) - ->execute(); - - // Create dummy client - $client = new Client(); - $client->mainAddress = $unit->mainAddress; - - if (!empty($defaultCountry)) { - $client->mainAddress->setCountry($defaultCountry); - } - - $taxCodeAttribute = $this->getClientTaxCode($client, $unit->mainAddress); - - /** @var \Modules\Billing\Models\Tax\TaxCombination $taxCombination */ - $taxCombination = TaxCombinationMapper::get() - ->where('itemCode', $item->getAttribute('sales_tax_code')->value->id) - ->where('clientCode', $taxCodeAttribute->id) - ->execute(); - - /** @var \Modules\Finance\Models\TaxCode $taxCode */ - $taxCode = TaxCodeMapper::get() - ->where('abbr', $taxCombination->taxCode) - ->execute(); + if ($taxCode->id !== 0) { + return $taxCode; } + /** @var \Modules\Organization\Models\Unit $unit */ + $unit = UnitMapper::get() + ->with('mainAddress') + ->where('id', $this->app->unitId) + ->execute(); + + // Create dummy client + $client = new Client(); + $client->mainAddress = $unit->mainAddress; + + if (!empty($defaultCountry)) { + $client->mainAddress->setCountry($defaultCountry); + } + + $taxCodeAttribute = $this->getClientTaxCode($client, $unit->mainAddress); + + /** @var \Modules\Billing\Models\Tax\TaxCombination $taxCombination */ + $taxCombination = TaxCombinationMapper::get() + ->where('itemCode', $item->getAttribute('sales_tax_code')->value->id) + ->where('clientCode', $taxCodeAttribute->id) + ->execute(); + + /** @var \Modules\Finance\Models\TaxCode $taxCode */ + $taxCode = TaxCodeMapper::get() + ->where('abbr', $taxCombination->taxCode) + ->execute(); + return $taxCode; } @@ -117,16 +117,15 @@ final class ApiTaxController extends Controller public function apiTaxCombinationCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateTaxCombinationCreate($request))) { - $response->data['tax_combination_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $tax = $this->createTaxCombinationFromRequest($request); $this->createModel($request->header->account, $tax, TaxCombinationMapper::class, 'tax_combination', $request->getOrigin()); - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Tax combination', 'Tax combination successfully created', $tax); + $this->createStandardCreateResponse($request, $response, $tax); } /** @@ -197,6 +196,7 @@ final class ApiTaxController extends Controller $taxCode = new NullAttributeValue(); + // @todo: need to consider own tax id as well if ($taxOfficeAddress->getCountry() === $client->mainAddress->getCountry()) { $taxCode = $codes->getDefaultByValue($client->mainAddress->getCountry()); } elseif (\in_array($taxOfficeAddress->getCountry(), ISO3166CharEnum::getRegion('eu')) @@ -236,8 +236,8 @@ final class ApiTaxController extends Controller public function apiTaxCombinationUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateTaxCombinationUpdate($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); return; } @@ -250,6 +250,80 @@ final class ApiTaxController extends Controller $this->createStandardUpdateResponse($request, $response, $new); } + /** + * Api method to update TaxCombination + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiChangeDefaultTaxCombinations(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateDefaultTaxCombinationChange($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + if (!Guard::isSafePath( + $path = __DIR__ . '/../Admin/Install/Taxes/' . $request->getDataString('type') . '.json', + __DIR__ . '/../Admin/Install/Taxes' + ) + ) { + return; + } + + $combinations = \json_decode(\file_get_contents($path), true); + + foreach ($combinations as $combination) { + $old = TaxCombinationMapper::getAll() + ->with('clientCode') + ->with('itemCode') + ->where('clientCode/valueStr', $combination['account_code']) + ->where('itemCode/valueStr', $combination['item_code']) + ->execute(); + + if (\count($old) !== 1) { + continue; + } + + $old = \reset($old); + + $new = clone $old; + $new->taxCode = $combination['tax_code']; + + $this->updateModel($request->header->account, $old, $new, TaxCombinationMapper::class, 'tax_combination', $request->getOrigin()); + } + + $this->createStandardUpdateResponse($request, $response, []); + } + + /** + * Validate TaxCombination update request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDefaultTaxCombinationChange(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = !$request->hasData('type'))) { + return $val; + } + + return []; + } + /** * Method to update TaxCombination from request. * @@ -310,8 +384,8 @@ final class ApiTaxController extends Controller public function apiTaxCombinationDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateTaxCombinationDelete($request))) { - $response->data[$request->uri->__toString()] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); return; } diff --git a/Models/Price/PriceMapper.php b/Models/Price/PriceMapper.php index c61457f..595ad82 100755 --- a/Models/Price/PriceMapper.php +++ b/Models/Price/PriceMapper.php @@ -14,9 +14,9 @@ declare(strict_types=1); namespace Modules\Billing\Models\Price; -use Modules\ClientManagement\Models\ClientAttributeValueMapper; +use Modules\ClientManagement\Models\Attribute\ClientAttributeValueMapper; use Modules\ClientManagement\Models\ClientMapper; -use Modules\ItemManagement\Models\ItemAttributeValueMapper; +use Modules\ItemManagement\Models\Attribute\ItemAttributeValueMapper; use Modules\ItemManagement\Models\ItemMapper; use Modules\SupplierManagement\Models\SupplierMapper; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; diff --git a/Models/Tax/TaxCombinationMapper.php b/Models/Tax/TaxCombinationMapper.php index 1e21542..e59fe9f 100755 --- a/Models/Tax/TaxCombinationMapper.php +++ b/Models/Tax/TaxCombinationMapper.php @@ -14,8 +14,8 @@ declare(strict_types=1); namespace Modules\Billing\Models\Tax; -use Modules\ClientManagement\Models\ClientAttributeValueMapper; -use Modules\ItemManagement\Models\ItemAttributeValueMapper; +use Modules\ClientManagement\Models\Attribute\ClientAttributeValueMapper; +use Modules\ItemManagement\Models\Attribute\ItemAttributeValueMapper; use Modules\SupplierManagement\Models\SupplierAttributeValueMapper; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;