diff --git a/Controller/ApiController.php b/Controller/ApiController.php index e8c62a4..43261e0 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -453,6 +453,19 @@ final class ApiController extends Controller $this->createStandardCreateResponse($request, $response, $element); } + /** + * Api method to create expense element from an upload + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ public function apiExpenseElementFromUploadCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void { if (!empty($val = $this->validateExpenseElementCreate($request))) { @@ -466,7 +479,7 @@ final class ApiController extends Controller foreach ($request->files as $file) { $internalResponse = new HttpResponse(); - $internalRequest = new HttpRequest(); + $internalRequest = new HttpRequest(); $internalRequest->header->account = $request->header->account; $internalRequest->header->l11n = $request->header->l11n; @@ -503,9 +516,9 @@ final class ApiController extends Controller // @todo handle different value set (net, gross, taxr, ...). // Depending on the value set the other values should be calculated - $element->net = new FloatInt($request->getDataInt('net') ?? 0); - $element->taxP = new FloatInt($request->getDataInt('taxp') ?? 0); - $element->gross = new FloatInt($request->getDataInt('gross') ?? 0); + $element->net = new FloatInt($request->getDataInt('net') ?? 0); + $element->taxP = new FloatInt($request->getDataInt('taxp') ?? 0); + $element->gross = new FloatInt($request->getDataInt('gross') ?? 0); if ($request->hasData('supplier')) { $element->supplier = new NullSupplier((int) $request->getData('supplier')); @@ -761,13 +774,13 @@ final class ApiController extends Controller } // Is invoice - if ($request->getDataString('file_type') === MediaType::BILL + if ($request->getDataInt('file_type') === MediaType::BILL && \count($uploaded) + \count($mediaFiles) === 1 && $this->app->moduleManager->isActive('Billing') && $expense->net->value !== 0 ) { $internalResponse = new HttpResponse(); - $internalRequest = new HttpRequest(); + $internalRequest = new HttpRequest(); $internalRequest->header->account = $request->header->account; $internalRequest->header->l11n = $request->header->l11n; @@ -783,7 +796,7 @@ final class ApiController extends Controller ->where('id', $element) ->execute(); - $oldElement = clone $elementObj; + $oldElement = clone $elementObj; $elementObj->bill = \reset($bills); $bill = \Modules\Billing\Models\BillMapper::get() @@ -793,7 +806,7 @@ final class ApiController extends Controller $elementObj->net = $bill->netSales; $elementObj->taxP = $bill->taxP; $elementObj->gross = $bill->grossSales; - $elementObj->supplier = $bill->supplier->id === 0 ? $bill->billTo : null; + $elementObj->supplier = $bill->supplier; $elementObj->country = $bill->billCountry; $this->updateModel($request->header->account, $oldElement, $elementObj, ExpenseElementMapper::class, 'expense_element', $request->getOrigin()); diff --git a/Models/ExpenseElement.php b/Models/ExpenseElement.php index b0190e3..dee248e 100644 --- a/Models/ExpenseElement.php +++ b/Models/ExpenseElement.php @@ -69,12 +69,12 @@ class ExpenseElement */ public function __construct() { - $this->type = new BaseStringL11nType(); - $this->net = new FloatInt(); - $this->taxP = new FloatInt(); - $this->gross = new FloatInt(); - $this->start = new \DateTime('now'); - $this->end = new \DateTime('now'); + $this->type = new BaseStringL11nType(); + $this->net = new FloatInt(); + $this->taxP = new FloatInt(); + $this->gross = new FloatInt(); + $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 9abab2d..959121f 100644 --- a/Models/ExpenseElementMapper.php +++ b/Models/ExpenseElementMapper.php @@ -54,7 +54,7 @@ final class ExpenseElementMapper extends DataMapperFactory '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_bill' => ['name' => 'bizexpenses_expense_element_bill', 'type' => 'int', 'internal' => 'bill'], + 'bizexpenses_expense_element_bill' => ['name' => 'bizexpenses_expense_element_bill', 'type' => 'int', 'internal' => 'bill'], ]; /**