mirror of
https://github.com/Karaka-Management/oms-Billing.git
synced 2026-01-11 23:28:41 +00:00
551 lines
19 KiB
PHP
Executable File
551 lines
19 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Jingga
|
|
*
|
|
* PHP Version 8.1
|
|
*
|
|
* @package Modules\Billing
|
|
* @copyright Dennis Eichhorn
|
|
* @license OMS License 2.0
|
|
* @version 1.0.0
|
|
* @link https://jingga.app
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Modules\Billing\Controller;
|
|
|
|
use Modules\Attribute\Models\Attribute;
|
|
use Modules\Attribute\Models\AttributeType;
|
|
use Modules\Attribute\Models\AttributeValue;
|
|
use Modules\Billing\Models\Attribute\BillAttributeMapper;
|
|
use Modules\Billing\Models\Attribute\BillAttributeTypeL11nMapper;
|
|
use Modules\Billing\Models\Attribute\BillAttributeTypeMapper;
|
|
use Modules\Billing\Models\Attribute\BillAttributeValueL11nMapper;
|
|
use Modules\Billing\Models\Attribute\BillAttributeValueMapper;
|
|
use phpOMS\Localization\BaseStringL11n;
|
|
use phpOMS\Message\Http\RequestStatusCode;
|
|
use phpOMS\Message\RequestAbstract;
|
|
use phpOMS\Message\ResponseAbstract;
|
|
|
|
/**
|
|
* Billing class.
|
|
*
|
|
* @package Modules\Billing
|
|
* @license OMS License 2.0
|
|
* @link https://jingga.app
|
|
* @since 1.0.0
|
|
*/
|
|
final class ApiAttributeController extends Controller
|
|
{
|
|
use \Modules\Attribute\Controller\ApiAttributeTraitController;
|
|
|
|
/**
|
|
* Api method to create item attribute
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeCreate(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 = BillAttributeTypeMapper::get()
|
|
->with('defaults')
|
|
->where('id', (int) $request->getData('type'))
|
|
->execute();
|
|
|
|
if (!$type->repeatable) {
|
|
$attr = BillAttributeMapper::count()
|
|
->with('type')
|
|
->where('type/id', $type->id)
|
|
->where('ref', (int) $request->getData('ref'))
|
|
->execute();
|
|
|
|
if ($attr > 0) {
|
|
$response->header->status = RequestStatusCode::R_409;
|
|
$this->createInvalidCreateResponse($request, $response, $val);
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
$attribute = $this->createAttributeFromRequest($request, $type);
|
|
$this->createModel($request->header->account, $attribute, BillAttributeMapper::class, 'attribute', $request->getOrigin());
|
|
$this->createStandardCreateResponse($request, $response, $attribute);
|
|
}
|
|
|
|
/**
|
|
* Api method to create bill attribute l11n
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeTypeL11nCreate(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, BillAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin());
|
|
$this->createStandardCreateResponse($request, $response, $attrL11n);
|
|
}
|
|
|
|
/**
|
|
* Api method to create bill attribute type
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeTypeCreate(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, BillAttributeTypeMapper::class, 'attr_type', $request->getOrigin());
|
|
$this->createStandardCreateResponse($request, $response, $attrType);
|
|
}
|
|
|
|
/**
|
|
* Api method to create bill attribute value
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeValueCreate(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 = BillAttributeTypeMapper::get()
|
|
->where('id', $request->getDataInt('type') ?? 0)
|
|
->execute();
|
|
|
|
if ($type->isInternal) {
|
|
$response->header->status = RequestStatusCode::R_403;
|
|
$this->createInvalidCreateResponse($request, $response, $val);
|
|
|
|
return;
|
|
}
|
|
|
|
$attrValue = $this->createAttributeValueFromRequest($request, $type);
|
|
$this->createModel($request->header->account, $attrValue, BillAttributeValueMapper::class, 'attr_value', $request->getOrigin());
|
|
|
|
if ($attrValue->isDefault) {
|
|
$this->createModelRelation(
|
|
$request->header->account,
|
|
$type->id,
|
|
$attrValue->id,
|
|
BillAttributeTypeMapper::class, 'defaults', '', $request->getOrigin()
|
|
);
|
|
}
|
|
|
|
$this->createStandardCreateResponse($request, $response, $attrValue);
|
|
}
|
|
|
|
/**
|
|
* Api method to create bill attribute l11n
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeValueL11nCreate(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, BillAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin());
|
|
$this->createStandardCreateResponse($request, $response, $attrL11n);
|
|
}
|
|
|
|
/**
|
|
* Api method to update BillAttribute
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeUpdate(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 = BillAttributeMapper::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, BillAttributeMapper::class, 'bill_attribute', $request->getOrigin());
|
|
|
|
if ($new->value->getValue() !== $old->value->getValue()
|
|
&& $new->type->custom
|
|
) {
|
|
$this->updateModel($request->header->account, $old->value, $new->value, BillAttributeValueMapper::class, 'attribute_value', $request->getOrigin());
|
|
}
|
|
|
|
$this->createStandardUpdateResponse($request, $response, $new);
|
|
}
|
|
|
|
/**
|
|
* Api method to delete BillAttribute
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeDelete(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;
|
|
}
|
|
|
|
$billAttribute = BillAttributeMapper::get()
|
|
->with('type')
|
|
->where('id', (int) $request->getData('id'))
|
|
->execute();
|
|
|
|
if ($billAttribute->type->isRequired) {
|
|
$this->createInvalidDeleteResponse($request, $response, []);
|
|
|
|
return;
|
|
}
|
|
|
|
$this->deleteModel($request->header->account, $billAttribute, BillAttributeMapper::class, 'bill_attribute', $request->getOrigin());
|
|
$this->createStandardDeleteResponse($request, $response, $billAttribute);
|
|
}
|
|
|
|
/**
|
|
* Api method to update BillAttributeTypeL11n
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeTypeL11nUpdate(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 = BillAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
|
$new = $this->updateAttributeTypeL11nFromRequest($request, clone $old);
|
|
|
|
$this->updateModel($request->header->account, $old, $new, BillAttributeTypeL11nMapper::class, 'bill_attribute_type_l11n', $request->getOrigin());
|
|
$this->createStandardUpdateResponse($request, $response, $new);
|
|
}
|
|
|
|
/**
|
|
* Api method to delete BillAttributeTypeL11n
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeTypeL11nDelete(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 $billAttributeTypeL11n */
|
|
$billAttributeTypeL11n = BillAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
|
$this->deleteModel($request->header->account, $billAttributeTypeL11n, BillAttributeTypeL11nMapper::class, 'bill_attribute_type_l11n', $request->getOrigin());
|
|
$this->createStandardDeleteResponse($request, $response, $billAttributeTypeL11n);
|
|
}
|
|
|
|
/**
|
|
* Api method to update BillAttributeType
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeTypeUpdate(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 = BillAttributeTypeMapper::get()->with('defaults')->where('id', (int) $request->getData('id'))->execute();
|
|
$new = $this->updateAttributeTypeFromRequest($request, clone $old);
|
|
|
|
$this->updateModel($request->header->account, $old, $new, BillAttributeTypeMapper::class, 'bill_attribute_type', $request->getOrigin());
|
|
$this->createStandardUpdateResponse($request, $response, $new);
|
|
}
|
|
|
|
/**
|
|
* Api method to delete BillAttributeType
|
|
*
|
|
* @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 apiBillAttributeTypeDelete(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 $billAttributeType */
|
|
$billAttributeType = BillAttributeTypeMapper::get()->with('defaults')->where('id', (int) $request->getData('id'))->execute();
|
|
$this->deleteModel($request->header->account, $billAttributeType, BillAttributeTypeMapper::class, 'bill_attribute_type', $request->getOrigin());
|
|
$this->createStandardDeleteResponse($request, $response, $billAttributeType);
|
|
}
|
|
|
|
/**
|
|
* Api method to update BillAttributeValue
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeValueUpdate(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 = BillAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
|
|
|
/** @var \Modules\Attribute\Models\Attribute $attr */
|
|
$attr = BillAttributeMapper::get()
|
|
->with('type')
|
|
->where('id', $request->getDataInt('attribute') ?? 0)
|
|
->execute();
|
|
|
|
$new = $this->updateAttributeValueFromRequest($request, clone $old, $attr);
|
|
|
|
$this->updateModel($request->header->account, $old, $new, BillAttributeValueMapper::class, 'bill_attribute_value', $request->getOrigin());
|
|
$this->createStandardUpdateResponse($request, $response, $new);
|
|
}
|
|
|
|
/**
|
|
* Api method to delete BillAttributeValue
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeValueDelete(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\Billing\Models\BillAttributeValue $billAttributeValue */
|
|
// $billAttributeValue = BillAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
|
// $this->deleteModel($request->header->account, $billAttributeValue, BillAttributeValueMapper::class, 'bill_attribute_value', $request->getOrigin());
|
|
// $this->createStandardDeleteResponse($request, $response, $billAttributeValue);
|
|
}
|
|
|
|
/**
|
|
* Api method to update BillAttributeValueL11n
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeValueL11nUpdate(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 = BillAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id'));
|
|
$new = $this->updateAttributeValueL11nFromRequest($request, clone $old);
|
|
|
|
$this->updateModel($request->header->account, $old, $new, BillAttributeValueL11nMapper::class, 'bill_attribute_value_l11n', $request->getOrigin());
|
|
$this->createStandardUpdateResponse($request, $response, $new);
|
|
}
|
|
|
|
/**
|
|
* Api method to delete BillAttributeValueL11n
|
|
*
|
|
* @param RequestAbstract $request Request
|
|
* @param ResponseAbstract $response Response
|
|
* @param array $data Generic data
|
|
*
|
|
* @return void
|
|
*
|
|
* @api
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function apiBillAttributeValueL11nDelete(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 $billAttributeValueL11n */
|
|
$billAttributeValueL11n = BillAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
|
$this->deleteModel($request->header->account, $billAttributeValueL11n, BillAttributeValueL11nMapper::class, 'bill_attribute_value_l11n', $request->getOrigin());
|
|
$this->createStandardDeleteResponse($request, $response, $billAttributeValueL11n);
|
|
}
|
|
}
|