diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index 39399e8..bf20d51 100644 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -5,7 +5,7 @@ "type": 2, "subtype": 1, "name": "BusinessExpenses", - "uri": "{/base}/businessexpenses/list", + "uri": "{/base}/businessexpenses/expense/list", "target": "self", "icon": null, "order": 40, @@ -16,10 +16,26 @@ { "id": 1001002001, "pid": "/", - "type": 2, + "type": 3, "subtype": 1, "name": "List", - "uri": "{/base}/businessexpenses/list", + "uri": "{/base}/businessexpenses/expense/list", + "target": "self", + "icon": null, + "order": 40, + "from": 1001000000, + "permission": { "permission": 2, "type": null, "element": null }, + "parent": 1001001001, + "children": [ + ] + }, + { + "id": 1001002002, + "pid": "/", + "type": 3, + "subtype": 1, + "name": "Create", + "uri": "{/base}/businessexpenses/expense/create", "target": "self", "icon": null, "order": 40, diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index f0b60b4..25b9156 100644 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -1,3 +1,87 @@ - [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + '^.*/businessexpenses/expense/create.*$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesExpenseCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + '^.*/businessexpenses/expense(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesExpense', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + '^.*/businessexpenses/type/list\?.*$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesTypeList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + '^.*/businessexpenses/type(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesType', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + '^.*/businessexpenses/type/create.*$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\BackendController:viewBusinessExpensesTypeCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], +]; diff --git a/Controller/BackendController.php b/Controller/BackendController.php index febf43c..4345915 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -14,6 +14,7 @@ declare(strict_types=1); namespace Modules\BusinessExpenses\Controller; +use Modules\BusinessExpenses\Models\ExpenseMapper; use phpOMS\Contract\RenderableInterface; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; @@ -49,6 +50,12 @@ final class BackendController extends Controller $view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-list'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001001001, $request, $response)); + $list = ExpenseMapper::getAll() + ->with('from') + ->execute(); + + $view->addData('expenses', $list); + return $view; } @@ -68,9 +75,16 @@ final class BackendController extends Controller { $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expenses-profile'); + $view->setTemplate('/Modules/BusinessExpenses/Theme/Backend/expense-single'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001001001, $request, $response)); + $expense = ExpenseMapper::get() + ->with('from') + ->where('id', (int) $request->getData('id')) + ->execute(); + + $view->addData('expense', $expense); + return $view; } } diff --git a/Models/ExpenseStatus.php b/Models/ExpenseStatus.php index 8c198e5..61a7f52 100644 --- a/Models/ExpenseStatus.php +++ b/Models/ExpenseStatus.php @@ -28,7 +28,9 @@ abstract class ExpenseStatus extends Enum { public const DRAFT = 1; - public const FINALIZED = 2; + public const OPEN = 2; - public const INACTIVE = 3; + public const APPROVED = 3; + + public const DENIED = 3; } diff --git a/Models/NullExpense.php b/Models/NullExpense.php index 2d128a8..5d70316 100644 --- a/Models/NullExpense.php +++ b/Models/NullExpense.php @@ -34,6 +34,7 @@ final class NullExpense extends Expense public function __construct(int $id = 0) { $this->id = $id; + parent::__construct(); } /** diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php new file mode 100755 index 0000000..434b13b --- /dev/null +++ b/Models/PermissionCategory.php @@ -0,0 +1,30 @@ + [ + 'Expenses' => 'Expenses', + 'Status' => 'Status', + 'Title' => 'Title', + 'Paid' => 'Paid', + 'Approved' => 'Approved', + 'From' => 'From', + 'Amount' => 'Amount', + 'Start' => 'Start', + 'End' => 'End', + 'Description' => 'Description', + 'Report' => 'Report', + 'Net' => 'Net', + 'Gross' => 'Gross', + 'Notes' => 'Notes', + 'CreatedAt' => 'Created At', + ':status1' => 'Draft', + ':status2' => 'Finalized', + ':status3' => 'Inactive', +]]; diff --git a/Theme/Backend/expense-list.tpl.php b/Theme/Backend/expense-list.tpl.php new file mode 100644 index 0000000..a9514ed --- /dev/null +++ b/Theme/Backend/expense-list.tpl.php @@ -0,0 +1,145 @@ +getData('expenses') ?? []; +$expenseStatus = ExpenseStatus::getConstants(); + +echo $this->getData('nav')->render(); ?> +
+
+
+
getHtml('Expenses'); ?>
+
+ + + + + $value) : ++$count; + $url = UriFactory::build('{/base}/businessexpenses/expense?{?}&id=' . $value->id); + ?> + +
+ getHtml('ID', '0', '0'); ?> + + + + getHtml('Status'); ?> + + + + getHtml('Paid'); ?> + + + getHtml('Approved'); ?> + + + getHtml('From'); ?> + + + + getHtml('Amount'); ?> + + + + getHtml('Start'); ?> + + + + getHtml('End'); ?> + + + +
+ id; ?> + getHtml(':status' . $value->status); ?> + + + printHtml($this->renderUserName('%3$s %2$s %1$s', [$value->from->name1, $value->from->name2, $value->from->name3])); ?> + getCurrency($value->gross); ?> + printHtml($value->start->format('Y-m-d')); ?> + printHtml($value->end->format('Y-m-d')); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/Theme/Backend/expense-single.tpl.php b/Theme/Backend/expense-single.tpl.php index e69de29..8cdf2c7 100644 --- a/Theme/Backend/expense-single.tpl.php +++ b/Theme/Backend/expense-single.tpl.php @@ -0,0 +1,137 @@ +getData('expense') ?? new NullExpense(); + +echo $this->getData('nav')->render(); ?> + +
+
+
+
+ +
getHtml('Net'); ?>: + +
getHtml('Gross'); ?>: + +
+
+
+
+ +
+
+
+ +
getHtml('Approved'); ?>: + +
getHtml('Paid'); ?>: + +
+
+
+
+
+ +
+
+
+
getHtml('Report'); ?>
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+
+ +
+
+
getHtml('Notes'); ?>
+
+ + + + +
+ getHtml('Title'); ?> + + + +
+
+
+
+ +
+
+
+
getHtml('Expenses'); ?>
+
+ + + + +
+ getHtml('ID', '0', '0'); ?> + + + +
+
+
+
\ No newline at end of file diff --git a/Theme/Backend/expenses-list.tpl.php b/Theme/Backend/expenses-list.tpl.php deleted file mode 100644 index e69de29..0000000