diff --git a/Admin/Installer.php b/Admin/Installer.php index 57d982d..19a64ba 100644 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -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); diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 67ad156..97f9a1d 100644 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -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, diff --git a/Controller/ApiController.php b/Controller/ApiController.php index b1f8f59..fa0bfb5 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -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; diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 066c5ab..14cdebf 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -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() diff --git a/Models/ExpenseElement.php b/Models/ExpenseElement.php index 76fcea0..fb146f2 100644 --- a/Models/ExpenseElement.php +++ b/Models/ExpenseElement.php @@ -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; } diff --git a/Models/ExpenseElementMapper.php b/Models/ExpenseElementMapper.php index f40d292..f3e626e 100644 --- a/Models/ExpenseElementMapper.php +++ b/Models/ExpenseElementMapper.php @@ -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', ], ]; diff --git a/Models/ExpenseElementTypeL11nMapper.php b/Models/ExpenseElementTypeL11nMapper.php index 7e86445..33f567b 100644 --- a/Models/ExpenseElementTypeL11nMapper.php +++ b/Models/ExpenseElementTypeL11nMapper.php @@ -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 diff --git a/Models/ExpenseElementTypeMapper.php b/Models/ExpenseElementTypeMapper.php index 5f108b1..fbe203a 100644 --- a/Models/ExpenseElementTypeMapper.php +++ b/Models/ExpenseElementTypeMapper.php @@ -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], ]; /** diff --git a/Models/ExpenseMapper.php b/Models/ExpenseMapper.php index 4fbfc87..50716b8 100644 --- a/Models/ExpenseMapper.php +++ b/Models/ExpenseMapper.php @@ -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', ], ]; diff --git a/Models/ExpenseTypeL11nMapper.php b/Models/ExpenseTypeL11nMapper.php index a24526e..75a6a9e 100644 --- a/Models/ExpenseTypeL11nMapper.php +++ b/Models/ExpenseTypeL11nMapper.php @@ -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 diff --git a/Models/ExpenseTypeMapper.php b/Models/ExpenseTypeMapper.php index 7cd82d6..ec19d47 100644 --- a/Models/ExpenseTypeMapper.php +++ b/Models/ExpenseTypeMapper.php @@ -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], ]; /** diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php index 287f2fb..401b45d 100644 --- a/Theme/Backend/Lang/de.lang.php +++ b/Theme/Backend/Lang/de.lang.php @@ -30,7 +30,7 @@ return ['BusinessExpenses' => [ 'Report' => 'Bericht', 'Start' => 'Start', 'Status' => 'Status', - 'Overview' => 'Übersicht', - 'Clocking' => 'Zeiterfassung', - 'Type' => 'Typ', + 'Overview' => 'Übersicht', + 'Clocking' => 'Zeiterfassung', + 'Type' => 'Typ', ]]; diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index edeec2d..245ec46 100644 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -30,7 +30,7 @@ return ['BusinessExpenses' => [ 'Report' => 'Report', 'Start' => 'Start', 'Status' => 'Status', - 'Overview' => 'Overview', - 'Clocking' => 'Clocking', - 'Type' => 'Type', + 'Overview' => 'Overview', + 'Clocking' => 'Clocking', + 'Type' => 'Type', ]]; diff --git a/Theme/Backend/expense-list.tpl.php b/Theme/Backend/expense-list.tpl.php index b22d864..4e18c34 100644 --- a/Theme/Backend/expense-list.tpl.php +++ b/Theme/Backend/expense-list.tpl.php @@ -26,29 +26,29 @@ echo $this->data['nav']->render(); ?>
getHtml('Expenses'); ?>download
- +
- $value) : ++$count; - $url = UriFactory::build('{/base}/businessexpenses/expense?{?}&id=' . $value->id); + $value) : ++$count; + $url = UriFactory::build('{/base}/businessexpenses/expense?{?}&id=' . $value->id); ?>
getHtml('ID', '0', '0'); ?> - getHtml('Status'); ?> - getHtml('From'); ?> - getHtml('Amount'); ?> - getHtml('Start'); ?> - getHtml('End'); ?> -
@@ -121,7 +122,7 @@ echo $this->data['nav']->render(); ?> paid ? 'check' : 'close'; ?> approved ? 'check' : 'close'; ?> printHtml($this->renderUserName('%3$s %2$s %1$s', [$value->from->name1, $value->from->name2, $value->from->name3])); ?> - getCurrency($value->gross); ?> + getCurrency($value->gross, symbol: ''); ?> printHtml($value->start->format('Y-m-d')); ?> printHtml($value->end->format('Y-m-d')); ?> diff --git a/Theme/Backend/expense-single.tpl.php b/Theme/Backend/expense-view.tpl.php similarity index 93% rename from Theme/Backend/expense-single.tpl.php rename to Theme/Backend/expense-view.tpl.php index 060e4ab..7f77b62 100644 --- a/Theme/Backend/expense-single.tpl.php +++ b/Theme/Backend/expense-view.tpl.php @@ -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(); ?>
getHtml('Expenses'); ?>download
- +
@@ -273,7 +272,7 @@ echo $this->data['nav']->render(); ?> ?> getBusy(); - if ($session->getStart()->getTimestamp() < $startMonth->getTimestamp() + if ($session->start->getTimestamp() < $startMonth->getTimestamp() || $count === $sessionCount ) : ?> diff --git a/tests/Autoloader.php b/tests/Autoloader.php index 81da6bc..3133cab 100644 --- a/tests/Autoloader.php +++ b/tests/Autoloader.php @@ -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); diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index ddc049d..1645b5d 100644 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -1,4 +1,15 @@ [ + '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' => [ ], ]; diff --git a/tests/Controller/Api/ApiExpenseControllerTrait.php b/tests/Controller/Api/ApiExpenseControllerTrait.php index f4904e5..88a1660 100644 --- a/tests/Controller/Api/ApiExpenseControllerTrait.php +++ b/tests/Controller/Api/ApiExpenseControllerTrait.php @@ -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; diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php index d9e6027..0d090ff 100644 --- a/tests/Controller/ApiControllerTest.php +++ b/tests/Controller/ApiControllerTest.php @@ -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();
getHtml('ID', '0', '0'); ?> - getStart()->format('Y-m-d') === $lastOpenSession->getStart()->format('Y-m-d') + && $session->start->format('Y-m-d') === $lastOpenSession->start->format('Y-m-d') ) : ?> Today - getStart()->format('Y-m-d'); ?> - getHtml('D' . $session->getStart()->format('w')); ?> + start->format('Y-m-d'); ?> - getHtml('D' . $session->start->format('w')); ?> - getHtml('CT' . $session->getType()); ?> - getHtml('CS' . $session->getStatus()); ?> - getStart()->format('H:i'); ?> + getHtml('CT' . $session->type); ?> + getHtml('CS' . $session->status); ?> + start->format('H:i'); ?> getBreak() / 3600); ?>h getBreak() / 60) % 60); ?>m getEnd() !== null ? $session->getEnd()->format('H:i') : ''; ?> getBusy() / 3600); ?>h getBusy() / 60) % 60); ?>m getBusy(); - if ($session->getStart()->getTimestamp() < $startWeek->getTimestamp() + if ($session->start->getTimestamp() < $startWeek->getTimestamp() || $count === $sessionCount ) : ?>