From bdbe9e093ac1f1dc68991ac2b3fc12499db6f37a Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Thu, 12 Oct 2023 22:49:20 +0000 Subject: [PATCH] todos fixed --- Controller/ApiController.php | 133 +++++++++++++++++++++- Theme/Backend/Lang/Navigation.de.lang.php | 2 +- Theme/Backend/Lang/de.lang.php | 36 +++--- 3 files changed, 149 insertions(+), 22 deletions(-) diff --git a/Controller/ApiController.php b/Controller/ApiController.php index e0e6675..75e8a49 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -47,9 +47,6 @@ use phpOMS\Stdlib\Base\FloatInt; * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 - * - * @todo: create Media add and remove functions for the expense report itself (not just the elements). - * Also adjust the db schema for that. */ final class ApiController extends Controller { @@ -495,6 +492,136 @@ final class ApiController extends Controller return $element; } + /** + * Api method to create a bill + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiMediaAddToExpense(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateMediaAddToExpense($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidAddResponse($request, $response, $val); + + return; + } + + /** @var \Modules\BusinessExpenses\Models\Expense $expense */ + $expense = ExpenseMapper::get()->where('id', (int) $request->getData('expense'))->execute(); + $path = $this->createExpenseDir($expense); + + $uploaded = []; + if (!empty($uploadedFiles = $request->files)) { + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + names: [], + fileNames: [], + files: $uploadedFiles, + account: $request->header->account, + basePath: __DIR__ . '/../../../Modules/Media/Files' . $path, + virtualPath: $path, + pathSettings: PathSettings::FILE_PATH, + hasAccountRelation: false, + readContent: $request->getDataBool('parse_content') ?? false + ); + + $collection = null; + foreach ($uploaded as $media) { + $this->createModelRelation( + $request->header->account, + $expense->id, + $media->id, + ExpenseMapper::class, + 'files', + '', + $request->getOrigin() + ); + + if ($request->hasData('type')) { + $this->createModelRelation( + $request->header->account, + $media->id, + $request->getDataInt('type'), + MediaMapper::class, + 'types', + '', + $request->getOrigin() + ); + } + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path, + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $media->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + + if (!empty($mediaFiles = $request->getDataJson('media'))) { + foreach ($mediaFiles as $media) { + $this->createModelRelation( + $request->header->account, + $expense->id, + (int) $media, + ExpenseElementMapper::class, + 'files', + '', + $request->getOrigin() + ); + } + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Media', 'Media added to bill.', [ + 'upload' => $uploaded, + 'media' => $mediaFiles, + ]); + } + + /** + * Method to validate bill creation from request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateMediaAddToExpense(RequestAbstract $request) : array + { + $val = []; + if (($val['media'] = (!$request->hasData('media') && empty($request->files))) + || ($val['expense'] = !$request->hasData('expense')) + ) { + return $val; + } + + return []; + } + /** * Api method to create a bill * diff --git a/Theme/Backend/Lang/Navigation.de.lang.php b/Theme/Backend/Lang/Navigation.de.lang.php index 463a73d..2d5e8cc 100644 --- a/Theme/Backend/Lang/Navigation.de.lang.php +++ b/Theme/Backend/Lang/Navigation.de.lang.php @@ -13,5 +13,5 @@ declare(strict_types=1); return ['Navigation' => [ - 'BusinessExpenses' => '', + 'BusinessExpenses' => 'Spesen', ]]; diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php index e66b539..ad56852 100644 --- a/Theme/Backend/Lang/de.lang.php +++ b/Theme/Backend/Lang/de.lang.php @@ -13,22 +13,22 @@ declare(strict_types=1); return ['BusinessExpenses' => [ - ':status1' => '', - ':status2' => '', - ':status3' => '', - 'Amount' => '', - 'Approved' => '', - 'CreatedAt' => '', - 'Description' => '', - 'End' => '', - 'Expenses' => '', - 'From' => '', - 'Gross' => '', - 'Net' => '', - 'Notes' => '', - 'Paid' => '', - 'Report' => '', - 'Start' => '', - 'Status' => '', - 'Title' => '', + ':status1' => 'Entwurf', + ':status2' => 'Fertiggestellt', + ':status3' => 'Inaktiv', + 'Amount' => 'Betrag', + 'Approved' => 'Genehmigt', + 'CreatedAt' => 'Erstellt', + 'Description' => 'Beschreibung', + 'End' => 'Ende', + 'Expenses' => 'Kosten', + 'From' => 'Von', + 'Gross' => 'Brutto', + 'Net' => 'Netto', + 'Notes' => 'Notizen', + 'Paid' => 'Bezahlt', + 'Report' => 'Bericht', + 'Start' => 'Start', + 'Status' => 'Status', + 'Title' => 'Titel', ]];