auto fixes + some impl.

This commit is contained in:
Dennis Eichhorn 2024-01-26 22:53:59 +00:00
parent bfc6a49bf2
commit 4d4e065fa1
19 changed files with 200 additions and 193 deletions

View File

@ -20,7 +20,6 @@ use phpOMS\Message\Http\HttpRequest;
use phpOMS\Message\Http\HttpResponse;
use phpOMS\Module\InstallerAbstract;
use phpOMS\Module\ModuleInfo;
use phpOMS\Uri\HttpUri;
/**
* Installer class.
@ -89,7 +88,7 @@ final class Installer extends InstallerAbstract
/** @var array $type */
foreach ($types as $type) {
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('name', $type['name'] ?? '');
@ -115,7 +114,7 @@ final class Installer extends InstallerAbstract
}
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('title', $l11n);
@ -150,7 +149,7 @@ final class Installer extends InstallerAbstract
/** @var array $type */
foreach ($types as $type) {
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('name', $type['name'] ?? '');
@ -176,7 +175,7 @@ final class Installer extends InstallerAbstract
}
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('title', $l11n);

View File

@ -18,7 +18,7 @@ use phpOMS\Account\PermissionType;
use phpOMS\Router\RouteVerb;
return [
'^.*/businessexpenses/expense/list.*$' => [
'^.*/businessexpenses/expense/list(\?.*$|$)' => [
[
'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesList',
'verb' => RouteVerb::GET,
@ -29,7 +29,7 @@ return [
],
],
],
'^.*/businessexpenses/expense/create.*$' => [
'^.*/businessexpenses/expense/create(\?.*$|$)' => [
[
'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesExpenseCreate',
'verb' => RouteVerb::GET,
@ -40,7 +40,7 @@ return [
],
],
],
'^.*/businessexpenses/expense(\?.*|$)$' => [
'^.*/businessexpenses/expense(\?.*$|$)' => [
[
'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesExpense',
'verb' => RouteVerb::GET,
@ -51,7 +51,7 @@ return [
],
],
],
'^.*/businessexpenses/type/list\?.*$' => [
'^.*/businessexpenses/type/list(\?.*$|$)' => [
[
'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesTypeList',
'verb' => RouteVerb::GET,
@ -62,7 +62,7 @@ return [
],
],
],
'^.*/businessexpenses/type(\?.*|$)$' => [
'^.*/businessexpenses/type(\?.*$|$)' => [
[
'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesType',
'verb' => RouteVerb::GET,
@ -73,7 +73,7 @@ return [
],
],
],
'^.*/businessexpenses/type/create.*$' => [
'^.*/businessexpenses/type/create(\?.*$|$)' => [
[
'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesTypeCreate',
'verb' => RouteVerb::GET,

View File

@ -93,7 +93,10 @@ final class ApiController extends Controller
{
$type = new BaseStringL11nType();
$type->title = $request->getDataString('name') ?? '';
$type->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN);
$type->setL11n(
$request->getDataString('title') ?? '',
ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? ISO639x1Enum::_EN
);
return $type;
}
@ -157,12 +160,10 @@ final class ApiController extends Controller
*/
private function createExpenseTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n
{
$typeL11n = new BaseStringL11n();
$typeL11n->ref = $request->getDataInt('type') ?? 0;
$typeL11n->setLanguage(
$request->getDataString('language') ?? $request->header->l11n->language
);
$typeL11n->content = $request->getDataString('title') ?? '';
$typeL11n = new BaseStringL11n();
$typeL11n->ref = $request->getDataInt('type') ?? 0;
$typeL11n->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $request->header->l11n->language;
$typeL11n->content = $request->getDataString('title') ?? '';
return $typeL11n;
}
@ -229,7 +230,10 @@ final class ApiController extends Controller
{
$type = new BaseStringL11nType();
$type->title = $request->getDataString('name') ?? '';
$type->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN);
$type->setL11n(
$request->getDataString('title') ?? '',
ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? ISO639x1Enum::_EN
);
return $type;
}
@ -293,12 +297,10 @@ final class ApiController extends Controller
*/
private function createExpenseElementTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n
{
$typeL11n = new BaseStringL11n();
$typeL11n->ref = $request->getDataInt('type') ?? 0;
$typeL11n->setLanguage(
$request->getDataString('language') ?? $request->header->l11n->language
);
$typeL11n->content = $request->getDataString('title') ?? '';
$typeL11n = new BaseStringL11n();
$typeL11n->ref = $request->getDataInt('type') ?? 0;
$typeL11n->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $request->header->l11n->language;
$typeL11n->content = $request->getDataString('title') ?? '';
return $typeL11n;
}
@ -365,7 +367,7 @@ final class ApiController extends Controller
$expense = new Expense();
$expense->from = new NullAccount((int) $request->header->account);
$expense->type = new NullBaseStringL11nType((int) $request->getDataInt('type'));
$expense->status = $request->getDataInt('status') ?? ExpenseStatus::DRAFT;
$expense->status = ExpenseStatus::tryFromValue($request->getDataInt('status')) ?? ExpenseStatus::DRAFT;
$expense->description = $request->getDataString('description') ?? '';
$country = $request->getDataString('country') ?? '';
@ -1195,10 +1197,8 @@ final class ApiController extends Controller
*/
public function updateExpenseTypeL11nFromRequest(RequestAbstract $request, BaseStringL11n $new) : BaseStringL11n
{
$new->setLanguage(
$request->getDataString('language') ?? $new->language
);
$new->content = $request->getDataString('title') ?? $new->content;
$new->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $new->language;
$new->content = $request->getDataString('title') ?? $new->content;
return $new;
}
@ -1437,10 +1437,8 @@ final class ApiController extends Controller
*/
public function updateExpenseElementTypeL11nFromRequest(RequestAbstract $request, BaseStringL11n $new) : BaseStringL11n
{
$new->setLanguage(
$request->getDataString('language') ?? $new->language
);
$new->content = $request->getDataString('title') ?? $new->content;
$new->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $new->language;
$new->content = $request->getDataString('title') ?? $new->content;
return $new;
}
@ -1562,7 +1560,7 @@ final class ApiController extends Controller
public function updateExpenseFromRequest(RequestAbstract $request, Expense $new) : Expense
{
$new->type = $request->hasData('type') ? new NullBaseStringL11nType((int) $request->getDataInt('type')) : $new->type;
$new->status = $request->getDataInt('status') ?? $new->status;
$new->status = ExpenseStatus::tryFromValue($request->getDataInt('status')) ?? $new->status;
$new->description = $request->getDataString('description') ?? $new->description;
$new->country = $request->getDataString('country') ?? $new->country;

View File

@ -75,7 +75,7 @@ final class BackendController extends Controller
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-single');
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-view');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1001001001, $request, $response);
$expense = ExpenseMapper::get()
@ -110,7 +110,7 @@ final class BackendController extends Controller
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-single');
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-view');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1001001001, $request, $response);
$expense = ExpenseMapper::get()
@ -139,7 +139,7 @@ final class BackendController extends Controller
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-single');
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-view');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1001001001, $request, $response);
$expense = ExpenseMapper::get()
@ -168,7 +168,7 @@ final class BackendController extends Controller
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-single');
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-view');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1001001001, $request, $response);
$expense = ExpenseMapper::get()
@ -197,7 +197,7 @@ final class BackendController extends Controller
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-single');
$view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-view');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1001001001, $request, $response);
$expense = ExpenseMapper::get()

View File

@ -54,8 +54,6 @@ class ExpenseElement
public ?Account $ref = null;
public array $media = [];
public string $taxId = '';
public ?Supplier $supplier = null;
@ -82,4 +80,6 @@ class ExpenseElement
$this->start = new \DateTime('now');
$this->end = new \DateTime('now');
}
use \Modules\Media\Models\MediaListTrait;
}

View File

@ -20,7 +20,7 @@ use Modules\SupplierManagement\Models\SupplierMapper;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/**
* mapper class.
* Expense element mapper class.
*
* @package Modules\BusinessExpenses\Models
* @license OMS License 2.0
@ -39,23 +39,23 @@ final class ExpenseElementMapper extends DataMapperFactory
* @since 1.0.0
*/
public const COLUMNS = [
'bizexpenses_expense_element_id' => ['name' => 'bizexpenses_expense_element_id', 'type' => 'int', 'internal' => 'id'],
'bizexpenses_expense_element_description' => ['name' => 'bizexpenses_expense_element_description', 'type' => 'string', 'internal' => 'description'],
'bizexpenses_expense_element_approved' => ['name' => 'bizexpenses_expense_element_approved', 'type' => 'bool', 'internal' => 'approved'],
'bizexpenses_expense_element_approvedby' => ['name' => 'bizexpenses_expense_element_approvedby', 'type' => 'int', 'internal' => 'approvedBy'],
'bizexpenses_expense_element_net' => ['name' => 'bizexpenses_expense_element_net', 'type' => 'Serializable', 'internal' => 'net'],
'bizexpenses_expense_element_gross' => ['name' => 'bizexpenses_expense_element_gross', 'type' => 'Serializable', 'internal' => 'gross'],
'bizexpenses_expense_element_taxp' => ['name' => 'bizexpenses_expense_element_taxp', 'type' => 'Serializable', 'internal' => 'taxP'],
'bizexpenses_expense_element_taxr' => ['name' => 'bizexpenses_expense_element_taxr', 'type' => 'Serializable', 'internal' => 'taxR'],
'bizexpenses_expense_element_quantity' => ['name' => 'bizexpenses_expense_element_quantity', 'type' => 'Serializable', 'internal' => 'quantity'],
'bizexpenses_expense_element_taxid' => ['name' => 'bizexpenses_expense_element_taxid', 'type' => 'string', 'internal' => 'taxId'],
'bizexpenses_expense_element_start' => ['name' => 'bizexpenses_expense_element_start', 'type' => 'DateTime', 'internal' => 'start'],
'bizexpenses_expense_element_end' => ['name' => 'bizexpenses_expense_element_end', 'type' => 'DateTime', 'internal' => 'end'],
'bizexpenses_expense_element_supplier' => ['name' => 'bizexpenses_expense_element_supplier', 'type' => 'int', 'internal' => 'supplier'],
'bizexpenses_expense_element_ref' => ['name' => 'bizexpenses_expense_element_ref', 'type' => 'int', 'internal' => 'ref'],
'bizexpenses_expense_element_type' => ['name' => 'bizexpenses_expense_element_type', 'type' => 'int', 'internal' => 'type'],
'bizexpenses_expense_element_country' => ['name' => 'bizexpenses_expense_element_country', 'type' => 'string', 'internal' => 'country'],
'bizexpenses_expense_element_expense' => ['name' => 'bizexpenses_expense_element_expense', 'type' => 'int', 'internal' => 'expense'],
'bizexpenses_expense_element_id' => ['name' => 'bizexpenses_expense_element_id', 'type' => 'int', 'internal' => 'id'],
'bizexpenses_expense_element_description' => ['name' => 'bizexpenses_expense_element_description', 'type' => 'string', 'internal' => 'description'],
'bizexpenses_expense_element_approved' => ['name' => 'bizexpenses_expense_element_approved', 'type' => 'bool', 'internal' => 'approved'],
'bizexpenses_expense_element_approvedby' => ['name' => 'bizexpenses_expense_element_approvedby', 'type' => 'int', 'internal' => 'approvedBy'],
'bizexpenses_expense_element_net' => ['name' => 'bizexpenses_expense_element_net', 'type' => 'Serializable', 'internal' => 'net'],
'bizexpenses_expense_element_gross' => ['name' => 'bizexpenses_expense_element_gross', 'type' => 'Serializable', 'internal' => 'gross'],
'bizexpenses_expense_element_taxp' => ['name' => 'bizexpenses_expense_element_taxp', 'type' => 'Serializable', 'internal' => 'taxP'],
'bizexpenses_expense_element_taxr' => ['name' => 'bizexpenses_expense_element_taxr', 'type' => 'Serializable', 'internal' => 'taxR'],
'bizexpenses_expense_element_quantity' => ['name' => 'bizexpenses_expense_element_quantity', 'type' => 'Serializable', 'internal' => 'quantity'],
'bizexpenses_expense_element_taxid' => ['name' => 'bizexpenses_expense_element_taxid', 'type' => 'string', 'internal' => 'taxId'],
'bizexpenses_expense_element_start' => ['name' => 'bizexpenses_expense_element_start', 'type' => 'DateTime', 'internal' => 'start'],
'bizexpenses_expense_element_end' => ['name' => 'bizexpenses_expense_element_end', 'type' => 'DateTime', 'internal' => 'end'],
'bizexpenses_expense_element_supplier' => ['name' => 'bizexpenses_expense_element_supplier', 'type' => 'int', 'internal' => 'supplier'],
'bizexpenses_expense_element_ref' => ['name' => 'bizexpenses_expense_element_ref', 'type' => 'int', 'internal' => 'ref'],
'bizexpenses_expense_element_type' => ['name' => 'bizexpenses_expense_element_type', 'type' => 'int', 'internal' => 'type'],
'bizexpenses_expense_element_country' => ['name' => 'bizexpenses_expense_element_country', 'type' => 'string', 'internal' => 'country'],
'bizexpenses_expense_element_expense' => ['name' => 'bizexpenses_expense_element_expense', 'type' => 'int', 'internal' => 'expense'],
];
/**
@ -65,7 +65,7 @@ final class ExpenseElementMapper extends DataMapperFactory
* @since 1.0.0
*/
public const HAS_MANY = [
'media' => [
'files' => [
'mapper' => MediaMapper::class,
'table' => 'bizexpenses_expense_element_media',
'external' => 'bizexpenses_expense_element_media_dst',
@ -81,16 +81,16 @@ final class ExpenseElementMapper extends DataMapperFactory
*/
public const BELONGS_TO = [
'ref' => [
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_element_ref',
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_element_ref',
],
'supplier' => [
'mapper' => SupplierMapper::class,
'external' => 'bizexpenses_expense_element_supplier',
'mapper' => SupplierMapper::class,
'external' => 'bizexpenses_expense_element_supplier',
],
'approvedBy' => [
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_element_approvedby',
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_element_approvedby',
],
];
@ -102,8 +102,8 @@ final class ExpenseElementMapper extends DataMapperFactory
*/
public const OWNS_ONE = [
'type' => [
'mapper' => ExpenseElementTypeMapper::class,
'external' => 'bizexpenses_expense_element_type',
'mapper' => ExpenseElementTypeMapper::class,
'external' => 'bizexpenses_expense_element_type',
],
];

View File

@ -18,7 +18,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\Localization\BaseStringL11n;
/**
* mapper class.
* Expense element type l11n mapper class.
*
* @package Modules\BusinessExpenses\Models
* @license OMS License 2.0

View File

@ -37,8 +37,8 @@ final class ExpenseElementTypeMapper extends DataMapperFactory
* @since 1.0.0
*/
public const COLUMNS = [
'bizexpenses_expense_element_type_id' => ['name' => 'bizexpenses_expense_element_type_id', 'type' => 'int', 'internal' => 'id'],
'bizexpenses_expense_element_type_name' => ['name' => 'bizexpenses_expense_element_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true],
'bizexpenses_expense_element_type_id' => ['name' => 'bizexpenses_expense_element_type_id', 'type' => 'int', 'internal' => 'id'],
'bizexpenses_expense_element_type_name' => ['name' => 'bizexpenses_expense_element_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true],
];
/**

View File

@ -20,7 +20,7 @@ use Modules\Media\Models\MediaMapper;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/**
* mapper class.
* Expense mapper class.
*
* @package Modules\BusinessExpenses\Models
* @license OMS License 2.0
@ -39,21 +39,21 @@ final class ExpenseMapper extends DataMapperFactory
* @since 1.0.0
*/
public const COLUMNS = [
'bizexpenses_expense_id' => ['name' => 'bizexpenses_expense_id', 'type' => 'int', 'internal' => 'id'],
'bizexpenses_expense_status' => ['name' => 'bizexpenses_expense_status', 'type' => 'int', 'internal' => 'status'],
'bizexpenses_expense_description' => ['name' => 'bizexpenses_expense_description', 'type' => 'string', 'internal' => 'description'],
'bizexpenses_expense_approved' => ['name' => 'bizexpenses_expense_approved', 'type' => 'bool', 'internal' => 'approved'],
'bizexpenses_expense_approvedby' => ['name' => 'bizexpenses_expense_approvedby', 'type' => 'int', 'internal' => 'approvedBy'],
'bizexpenses_expense_paid' => ['name' => 'bizexpenses_expense_paid', 'type' => 'bool', 'internal' => 'paid'],
'bizexpenses_expense_net' => ['name' => 'bizexpenses_expense_net', 'type' => 'Serializable', 'internal' => 'net'],
'bizexpenses_expense_gross' => ['name' => 'bizexpenses_expense_gross', 'type' => 'Serializable', 'internal' => 'gross'],
'bizexpenses_expense_taxp' => ['name' => 'bizexpenses_expense_taxp', 'type' => 'Serializable', 'internal' => 'taxP'],
'bizexpenses_expense_created' => ['name' => 'bizexpenses_expense_created', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt'],
'bizexpenses_expense_start' => ['name' => 'bizexpenses_expense_start', 'type' => 'DateTime', 'internal' => 'start'],
'bizexpenses_expense_end' => ['name' => 'bizexpenses_expense_end', 'type' => 'DateTime', 'internal' => 'end'],
'bizexpenses_expense_type' => ['name' => 'bizexpenses_expense_type', 'type' => 'int', 'internal' => 'type'],
'bizexpenses_expense_from' => ['name' => 'bizexpenses_expense_from', 'type' => 'int', 'internal' => 'from'],
'bizexpenses_expense_country' => ['name' => 'bizexpenses_expense_country', 'type' => 'string', 'internal' => 'country'],
'bizexpenses_expense_id' => ['name' => 'bizexpenses_expense_id', 'type' => 'int', 'internal' => 'id'],
'bizexpenses_expense_status' => ['name' => 'bizexpenses_expense_status', 'type' => 'int', 'internal' => 'status'],
'bizexpenses_expense_description' => ['name' => 'bizexpenses_expense_description', 'type' => 'string', 'internal' => 'description'],
'bizexpenses_expense_approved' => ['name' => 'bizexpenses_expense_approved', 'type' => 'bool', 'internal' => 'approved'],
'bizexpenses_expense_approvedby' => ['name' => 'bizexpenses_expense_approvedby', 'type' => 'int', 'internal' => 'approvedBy'],
'bizexpenses_expense_paid' => ['name' => 'bizexpenses_expense_paid', 'type' => 'bool', 'internal' => 'paid'],
'bizexpenses_expense_net' => ['name' => 'bizexpenses_expense_net', 'type' => 'Serializable', 'internal' => 'net'],
'bizexpenses_expense_gross' => ['name' => 'bizexpenses_expense_gross', 'type' => 'Serializable', 'internal' => 'gross'],
'bizexpenses_expense_taxp' => ['name' => 'bizexpenses_expense_taxp', 'type' => 'Serializable', 'internal' => 'taxP'],
'bizexpenses_expense_created' => ['name' => 'bizexpenses_expense_created', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt'],
'bizexpenses_expense_start' => ['name' => 'bizexpenses_expense_start', 'type' => 'DateTime', 'internal' => 'start'],
'bizexpenses_expense_end' => ['name' => 'bizexpenses_expense_end', 'type' => 'DateTime', 'internal' => 'end'],
'bizexpenses_expense_type' => ['name' => 'bizexpenses_expense_type', 'type' => 'int', 'internal' => 'type'],
'bizexpenses_expense_from' => ['name' => 'bizexpenses_expense_from', 'type' => 'int', 'internal' => 'from'],
'bizexpenses_expense_country' => ['name' => 'bizexpenses_expense_country', 'type' => 'string', 'internal' => 'country'],
];
/**
@ -64,12 +64,12 @@ final class ExpenseMapper extends DataMapperFactory
*/
public const HAS_MANY = [
'elements' => [
'mapper' => ExpenseElementMapper::class,
'table' => 'bizexpenses_expense_element',
'self' => 'bizexpenses_expense_element_expense',
'external' => null,
'mapper' => ExpenseElementMapper::class,
'table' => 'bizexpenses_expense_element',
'self' => 'bizexpenses_expense_element_expense',
'external' => null,
],
'files' => [
'files' => [
'mapper' => MediaMapper::class,
'table' => 'bizexpenses_expense_media',
'external' => 'bizexpenses_expense_media_dst',
@ -91,12 +91,12 @@ final class ExpenseMapper extends DataMapperFactory
*/
public const BELONGS_TO = [
'from' => [
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_from',
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_from',
],
'approvedBy' => [
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_approvedby',
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_approvedby',
],
];
@ -108,8 +108,8 @@ final class ExpenseMapper extends DataMapperFactory
*/
public const OWNS_ONE = [
'type' => [
'mapper' => ExpenseTypeMapper::class,
'external' => 'bizexpenses_expense_type',
'mapper' => ExpenseTypeMapper::class,
'external' => 'bizexpenses_expense_type',
],
];

View File

@ -18,7 +18,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\Localization\BaseStringL11n;
/**
* mapper class.
* Expense type l11n mapper class.
*
* @package Modules\BusinessExpenses\Models
* @license OMS License 2.0

View File

@ -37,8 +37,8 @@ final class ExpenseTypeMapper extends DataMapperFactory
* @since 1.0.0
*/
public const COLUMNS = [
'bizexpenses_expense_type_id' => ['name' => 'bizexpenses_expense_type_id', 'type' => 'int', 'internal' => 'id'],
'bizexpenses_expense_type_name' => ['name' => 'bizexpenses_expense_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true],
'bizexpenses_expense_type_id' => ['name' => 'bizexpenses_expense_type_id', 'type' => 'int', 'internal' => 'id'],
'bizexpenses_expense_type_name' => ['name' => 'bizexpenses_expense_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true],
];
/**

View File

@ -30,7 +30,7 @@ return ['BusinessExpenses' => [
'Report' => 'Bericht',
'Start' => 'Start',
'Status' => 'Status',
'Overview' => 'Übersicht',
'Clocking' => 'Zeiterfassung',
'Type' => 'Typ',
'Overview' => 'Übersicht',
'Clocking' => 'Zeiterfassung',
'Type' => 'Typ',
]];

View File

@ -30,7 +30,7 @@ return ['BusinessExpenses' => [
'Report' => 'Report',
'Start' => 'Start',
'Status' => 'Status',
'Overview' => 'Overview',
'Clocking' => 'Clocking',
'Type' => 'Type',
'Overview' => 'Overview',
'Clocking' => 'Clocking',
'Type' => 'Type',
]];

View File

@ -26,29 +26,29 @@ echo $this->data['nav']->render(); ?>
<section class="portlet">
<div class="portlet-head"><?= $this->getHtml('Expenses'); ?><i class="g-icon download btn end-xs">download</i></div>
<div class="slider">
<table id="iSalesClientList" class="default sticky">
<table id="iExpenseList" class="default sticky">
<thead>
<tr>
<td>
<td><?= $this->getHtml('ID', '0', '0'); ?>
<label for="iSalesClientList-sort-1">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-1">
<label for="iExpenseList-sort-1">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-1">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-2">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-2">
<label for="iExpenseList-sort-2">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-2">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
<i class="filter g-icon">filter_alt</i>
</label>
<td><?= $this->getHtml('Status'); ?>
<label for="iSalesClientList-sort-3">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-3">
<label for="iExpenseList-sort-3">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-3">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-4">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-4">
<label for="iExpenseList-sort-4">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-4">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
@ -63,56 +63,57 @@ echo $this->data['nav']->render(); ?>
<i class="filter g-icon">filter_alt</i>
</label>
<td class="wf-100"><?= $this->getHtml('From'); ?>
<label for="iSalesClientList-sort-5">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-5">
<label for="iExpenseList-sort-5">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-5">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-6">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-6">
<label for="iExpenseList-sort-6">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-6">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
<i class="filter g-icon">filter_alt</i>
</label>
<td><?= $this->getHtml('Amount'); ?>
<label for="iSalesClientList-sort-7">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-7">
<label for="iExpenseList-sort-7">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-7">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-8">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-8">
<label for="iExpenseList-sort-8">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-8">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
<i class="filter g-icon">filter_alt</i>
</label>
<td><?= $this->getHtml('Start'); ?>
<label for="iSalesClientList-sort-7">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-7">
<label for="iExpenseList-sort-7">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-7">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-8">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-8">
<label for="iExpenseList-sort-8">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-8">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
<i class="filter g-icon">filter_alt</i>
</label>
<td><?= $this->getHtml('End'); ?>
<label for="iSalesClientList-sort-7">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-7">
<label for="iExpenseList-sort-7">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-7">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-8">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-8">
<label for="iExpenseList-sort-8">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-8">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
<i class="filter g-icon">filter_alt</i>
</label>
<tbody>
<?php $count = 0; foreach ($expenses as $key => $value) : ++$count;
$url = UriFactory::build('{/base}/businessexpenses/expense?{?}&id=' . $value->id);
<?php $count = 0;
foreach ($expenses as $key => $value) : ++$count;
$url = UriFactory::build('{/base}/businessexpenses/expense?{?}&id=' . $value->id);
?>
<tr data-href="<?= $url; ?>">
<td>
@ -121,7 +122,7 @@ echo $this->data['nav']->render(); ?>
<td class="centerText" data-label="<?= $this->getHtml('Paid'); ?>"><a href="<?= $url; ?>"><i class="g-icon"><?= $value->paid ? 'check' : 'close'; ?></i></a>
<td class="centerText" data-label="<?= $this->getHtml('Approved'); ?>"><a href="<?= $url; ?>"><i class="g-icon"><?= $value->approved ? 'check' : 'close'; ?></i></a>
<td data-label="<?= $this->getHtml('From'); ?>"><a href="<?= $url; ?>"><?= $this->printHtml($this->renderUserName('%3$s %2$s %1$s', [$value->from->name1, $value->from->name2, $value->from->name3])); ?></a>
<td data-label="<?= $this->getHtml('Amount'); ?>"><a href="<?= $url; ?>"><?= $this->getCurrency($value->gross); ?></a>
<td data-label="<?= $this->getHtml('Amount'); ?>"><a href="<?= $url; ?>"><?= $this->getCurrency($value->gross, symbol: ''); ?></a>
<td data-label="<?= $this->getHtml('Start'); ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->start->format('Y-m-d')); ?></a>
<td data-label="<?= $this->getHtml('End'); ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->end->format('Y-m-d')); ?></a>
<?php endforeach; ?>

View File

@ -14,10 +14,9 @@
declare(strict_types=1);
use Modules\BusinessExpenses\Models\NullExpense;
use phpOMS\Uri\UriFactory;
/** @var \phpOMS\Views\View $this */
$expense = $this->getData('expense') ?? new NullExpense();
$expense = $this->getData('expense') ?? new NullExpense();
$sessions = $this->data['sessions'] ?? [];
echo $this->data['nav']->render(); ?>
@ -109,17 +108,17 @@ echo $this->data['nav']->render(); ?>
<section class="portlet">
<div class="portlet-head"><?= $this->getHtml('Expenses'); ?><i class="g-icon download btn end-xs">download</i></div>
<div class="slider">
<table id="iSalesClientList" class="default sticky">
<table id="iExpenseList" class="default sticky">
<thead>
<tr>
<td>
<td><?= $this->getHtml('ID', '0', '0'); ?>
<label for="iSalesClientList-sort-1">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-1">
<label for="iExpenseList-sort-1">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-1">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-2">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-2">
<label for="iExpenseList-sort-2">
<input type="radio" name="iExpenseList-sort" id="iExpenseList-sort-2">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
@ -245,21 +244,21 @@ echo $this->data['nav']->render(); ?>
<td>
<?php
if ($lastOpenSession !== null
&& $session->getStart()->format('Y-m-d') === $lastOpenSession->getStart()->format('Y-m-d')
&& $session->start->format('Y-m-d') === $lastOpenSession->start->format('Y-m-d')
) : ?>
<span class="tag">Today</span>
<?php else : ?>
<?= $session->getStart()->format('Y-m-d'); ?> - <?= $this->getHtml('D' . $session->getStart()->format('w')); ?>
<?= $session->start->format('Y-m-d'); ?> - <?= $this->getHtml('D' . $session->start->format('w')); ?>
<?php endif; ?>
<td><span class="tag"><?= $this->getHtml('CT' . $session->getType()); ?></span>
<td><span class="tag"><?= $this->getHtml('CS' . $session->getStatus()); ?></span>
<td><?= $session->getStart()->format('H:i'); ?>
<td><span class="tag"><?= $this->getHtml('CT' . $session->type); ?></span>
<td><span class="tag"><?= $this->getHtml('CS' . $session->status); ?></span>
<td><?= $session->start->format('H:i'); ?>
<td><?= (int) ($session->getBreak() / 3600); ?>h <?= ((int) ($session->getBreak() / 60) % 60); ?>m
<td><?= $session->getEnd() !== null ? $session->getEnd()->format('H:i') : ''; ?>
<td><?= (int) ($session->getBusy() / 3600); ?>h <?= ((int) ($session->getBusy() / 60) % 60); ?>m
<?php
$busy['week'] += $session->getBusy();
if ($session->getStart()->getTimestamp() < $startWeek->getTimestamp()
if ($session->start->getTimestamp() < $startWeek->getTimestamp()
|| $count === $sessionCount
) : ?>
<tr>
@ -273,7 +272,7 @@ echo $this->data['nav']->render(); ?>
?>
<?php
$busy['month'] += $session->getBusy();
if ($session->getStart()->getTimestamp() < $startMonth->getTimestamp()
if ($session->start->getTimestamp() < $startMonth->getTimestamp()
|| $count === $sessionCount
) : ?>
<tr>

View File

@ -75,8 +75,8 @@ final class Autoloader
*/
public static function defaultAutoloader(string $class) : void
{
$class = \ltrim($class, '\\');
$class = \strtr($class, '_\\', '//');
$class = \ltrim($class, '\\');
$class = \strtr($class, '_\\', '//');
if (\stripos($class, 'Web/Backend') !== false || \stripos($class, 'Web/Api') !== false) {
$class = \is_dir(__DIR__ . '/Web') ? $class : \str_replace('Web/', 'MainRepository/Web/', $class);

View File

@ -1,4 +1,15 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\BusinessExpenses\tests
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
\ini_set('memory_limit', '2048M');
@ -67,10 +78,10 @@ $GLOBALS['is_github'] = $IS_GITHUB;
$tmp = FileLogger::getInstance(__DIR__ . '/../Logs');
$CONFIG = [
'db' => [
'db' => [
'core' => [
'masters' => [
'admin' => [
'admin' => [
'db' => 'mysql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '3306', /* db host port */
@ -80,7 +91,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'insert' => [
'insert' => [
'db' => 'mysql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '3306', /* db host port */
@ -90,7 +101,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'select' => [
'select' => [
'db' => 'mysql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '3306', /* db host port */
@ -100,7 +111,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'update' => [
'update' => [
'db' => 'mysql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '3306', /* db host port */
@ -110,7 +121,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'delete' => [
'delete' => [
'db' => 'mysql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '3306', /* db host port */
@ -120,7 +131,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'schema' => [
'schema' => [
'db' => 'mysql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '3306', /* db host port */
@ -132,7 +143,7 @@ $CONFIG = [
],
],
'postgresql' => [
'admin' => [
'admin' => [
'db' => 'pgsql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
@ -142,7 +153,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'insert' => [
'insert' => [
'db' => 'pgsql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
@ -152,7 +163,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'select' => [
'select' => [
'db' => 'pgsql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
@ -162,7 +173,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'update' => [
'update' => [
'db' => 'pgsql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
@ -172,7 +183,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'delete' => [
'delete' => [
'db' => 'pgsql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
@ -182,7 +193,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'schema' => [
'schema' => [
'db' => 'pgsql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
@ -194,37 +205,37 @@ $CONFIG = [
],
],
'sqlite' => [
'admin' => [
'admin' => [
'db' => 'sqlite', /* db type */
'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'insert' => [
'insert' => [
'db' => 'sqlite', /* db type */
'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'select' => [
'select' => [
'db' => 'sqlite', /* db type */
'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'update' => [
'update' => [
'db' => 'sqlite', /* db type */
'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'delete' => [
'delete' => [
'db' => 'sqlite', /* db type */
'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'schema' => [
'schema' => [
'db' => 'sqlite', /* db type */
'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */
'weight' => 1000, /* db table prefix */
@ -232,7 +243,7 @@ $CONFIG = [
],
],
'mssql' => [
'admin' => [
'admin' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '1433', /* db host port */
@ -242,7 +253,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'insert' => [
'insert' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '1433', /* db host port */
@ -252,7 +263,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'select' => [
'select' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '1433', /* db host port */
@ -262,7 +273,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'update' => [
'update' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '1433', /* db host port */
@ -272,7 +283,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'delete' => [
'delete' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '1433', /* db host port */
@ -282,7 +293,7 @@ $CONFIG = [
'weight' => 1000, /* db table prefix */
'datetimeformat' => 'Y-m-d H:i:s',
],
'schema' => [
'schema' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '1433', /* db host port */
@ -322,16 +333,16 @@ $CONFIG = [
'password' => '123456',
],
],
'log' => [
'log' => [
'file' => [
'path' => __DIR__ . '/Logs',
],
],
'page' => [
'page' => [
'root' => '/',
'https' => false,
],
'app' => [
'app' => [
'path' => __DIR__,
'default' => [
'app' => 'Backend',
@ -350,7 +361,7 @@ $CONFIG = [
],
],
],
'socket' => [
'socket' => [
'master' => [
'host' => '127.0.0.1',
'limit' => 300,
@ -360,7 +371,7 @@ $CONFIG = [
'language' => [
'en',
],
'apis' => [
'apis' => [
],
];

View File

@ -17,7 +17,6 @@ namespace Modules\BusinessExpenses\tests\Controller\Api;
use phpOMS\Message\Http\HttpRequest;
use phpOMS\Message\Http\HttpResponse;
use phpOMS\System\File\Local\Directory;
use phpOMS\Uri\HttpUri;
use phpOMS\Utils\TestUtils;
trait ApiExpenseControllerTrait
@ -25,7 +24,7 @@ trait ApiExpenseControllerTrait
public function testExpenseCreate() : void
{
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('type', 1);
@ -43,7 +42,7 @@ trait ApiExpenseControllerTrait
}
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;

View File

@ -53,14 +53,14 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase
protected string $appName = 'Api';
};
$this->app->dbPool = $GLOBALS['dbpool'];
$this->app->unitId = 1;
$this->app->accountManager = new AccountManager($GLOBALS['session']);
$this->app->appSettings = new CoreSettings();
$this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules/');
$this->app->dispatcher = new Dispatcher($this->app);
$this->app->eventManager = new EventManager($this->app->dispatcher);
$this->app->l11nManager = new L11nManager();
$this->app->dbPool = $GLOBALS['dbpool'];
$this->app->unitId = 1;
$this->app->accountManager = new AccountManager($GLOBALS['session']);
$this->app->appSettings = new CoreSettings();
$this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules/');
$this->app->dispatcher = new Dispatcher($this->app);
$this->app->eventManager = new EventManager($this->app->dispatcher);
$this->app->l11nManager = new L11nManager();
$this->app->eventManager->importFromFile(__DIR__ . '/../../../../Web/Api/Hooks.php');
$account = new Account();