fix default respone generation

This commit is contained in:
Dennis Eichhorn 2023-07-26 09:18:04 +00:00
parent b777d200a4
commit 70638a246b
10 changed files with 563 additions and 135 deletions

View File

@ -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"
}
]

View File

View File

@ -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;
}

View File

@ -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;
}

View File

@ -1,5 +1,4 @@
<?php
/**
* Jingga
*
@ -28,7 +27,6 @@ use Modules\Billing\Models\NullBillElement;
use Modules\Billing\Models\SettingsEnum;
use Modules\ClientManagement\Models\Client;
use Modules\ClientManagement\Models\ClientMapper;
use Modules\Editor\Models\EditorDocMapper;
use Modules\ItemManagement\Models\Item;
use Modules\ItemManagement\Models\ItemMapper;
use Modules\Media\Models\CollectionMapper;
@ -78,8 +76,8 @@ final class ApiBillController extends Controller
public function apiBillUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -1,5 +1,4 @@
<?php
/**
* Jingga
*
@ -21,18 +20,17 @@ use Modules\Attribute\Models\AttributeValue;
use Modules\Attribute\Models\NullAttributeValue;
use Modules\Billing\Models\Tax\TaxCombination;
use Modules\Billing\Models\Tax\TaxCombinationMapper;
use Modules\ClientManagement\Models\Attribute\ClientAttributeTypeMapper;
use Modules\ClientManagement\Models\Client;
use Modules\ClientManagement\Models\ClientAttributeTypeMapper;
use Modules\Finance\Models\TaxCode;
use Modules\Finance\Models\TaxCodeMapper;
use Modules\ItemManagement\Models\Item;
use Modules\Organization\Models\UnitMapper;
use phpOMS\Localization\ISO3166CharEnum;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\NotificationLevel;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Model\Message\FormValidation;
use phpOMS\Security\Guard;
/**
* Billing class.
@ -59,47 +57,49 @@ final class ApiTaxController extends Controller
{
// @todo: define default sales tax code if none available?!
// @todo: consider to actually use a ownsOne reference instead of only a string, this way the next line with the TaxCodeMapper can be removed
/** @var \Modules\Billing\Models\Tax\TaxCombination $taxCombination */
$taxCombination = TaxCombinationMapper::get()
->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<string, bool>
*
* @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;
}

View File

@ -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;

View File

@ -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;