Add notes and approved by

This commit is contained in:
Dennis Eichhorn 2023-06-05 03:37:27 +02:00
parent a2782df026
commit 21c0fe1d55
6 changed files with 123 additions and 0 deletions

View File

@ -120,6 +120,14 @@
"type": "TINYINT(1)",
"null": false
},
"bizexpenses_expense_approvedby": {
"name": "bizexpenses_expense_approvedby",
"type": "INT",
"null": true,
"default": null,
"foreignTable": "account",
"foreignKey": "account_id"
},
"bizexpenses_expense_paid": {
"name": "bizexpenses_expense_paid",
"type": "TINYINT(1)",
@ -199,6 +207,14 @@
"type": "TINYINT(1)",
"null": false
},
"bizexpenses_expense_element_approvedby": {
"name": "bizexpenses_expense_element_approvedby",
"type": "INT",
"null": true,
"default": null,
"foreignTable": "account",
"foreignKey": "account_id"
},
"bizexpenses_expense_element_net": {
"name": "bizexpenses_expense_element_net",
"type": "BIGINT",
@ -329,5 +345,31 @@
"foreignKey": "media_id"
}
}
},
"bizexpenses_expense_note": {
"name": "bizexpenses_expense_note",
"fields": {
"bizexpenses_expense_note_id": {
"name": "bizexpenses_expense_note_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"bizexpenses_expense_note_expense": {
"name": "bizexpenses_expense_note_expense",
"type": "INT",
"null": false,
"foreignTable": "bizexpenses_expense",
"foreignKey": "bizexpenses_expense_id"
},
"bizexpenses_expense_note_doc": {
"name": "bizexpenses_expense_note_doc",
"type": "INT",
"null": false,
"foreignTable": "editor_doc",
"foreignKey": "editor_doc_id"
}
}
}
}

View File

@ -684,4 +684,62 @@ final class ApiController extends Controller
public function apiExpenseFromUpload(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
}
/**
* Api method to create item files
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateNoteCreate($request))) {
$response->data['expense_note_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
return;
}
$request->setData('virtualpath', '/Modules/BusinessExpenses/Items/' . $request->getData('id'), true);
$this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data);
if ($response->header->status !== RequestStatusCode::R_200) {
return;
}
$responseData = $response->get($request->uri->__toString());
if (!\is_array($responseData)) {
return;
}
$model = $responseData['response'];
$this->createModelRelation($request->header->account, (int) $request->getData('id'), $model->id, ExpenseMapper::class, 'notes', '', $request->getOrigin());
}
/**
* Validate item note create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateNoteCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['id'] = !$request->hasData('id'))
) {
return $val;
}
return [];
}
}

View File

@ -33,6 +33,8 @@ class Expense
public Account $from;
public ?Account $approvedBy = null;
public int $status = ExpenseStatus::DRAFT;
public BaseStringL11nType $type;
@ -67,6 +69,8 @@ class Expense
public string $country = ISO3166TwoEnum::_USA;
public array $notes = [];
public function __construct()
{
$this->type = new BaseStringL11nType();

View File

@ -36,6 +36,8 @@ class ExpenseElement
public bool $approved = false;
public ?Account $approvedBy = null;
public string $description = '';
public FloatInt $net;

View File

@ -42,6 +42,7 @@ final class ExpenseElementMapper extends DataMapperFactory
'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' => 'bool', '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'],
@ -87,6 +88,10 @@ final class ExpenseElementMapper extends DataMapperFactory
'mapper' => SupplierMapper::class,
'external' => 'bizexpenses_expense_element_supplier',
],
'approvedBy' => [
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_element_approvedby',
],
];
/**

View File

@ -17,6 +17,7 @@ namespace Modules\BusinessExpenses\Models;
use Modules\Admin\Models\AccountMapper;
use Modules\Media\Models\MediaMapper;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use Modules\Editor\Models\EditorDocMapper;
/**
* mapper class.
@ -42,6 +43,7 @@ final class ExpenseMapper extends DataMapperFactory
'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' => 'bool', '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'],
@ -73,6 +75,12 @@ final class ExpenseMapper extends DataMapperFactory
'external' => 'bizexpenses_expense_media_dst',
'self' => 'bizexpenses_expense_media_src',
],
'notes' => [
'mapper' => EditorDocMapper::class, /* mapper of the related object */
'table' => 'bizexpenses_expense_note', /* table of the related object, null if no relation table is used (many->1) */
'external' => 'bizexpenses_expense_note_doc',
'self' => 'bizexpenses_expense_note_expense',
],
];
/**
@ -86,6 +94,10 @@ final class ExpenseMapper extends DataMapperFactory
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_from',
],
'approvedBy' => [
'mapper' => AccountMapper::class,
'external' => 'bizexpenses_expense_approvedby',
],
];
/**