mirror of
https://github.com/Karaka-Management/oms-Shop.git
synced 2026-01-11 02:28:40 +00:00
bug fixes and subscription improvements
This commit is contained in:
parent
f8036e569d
commit
8331ca7b81
|
|
@ -29,4 +29,12 @@ return [
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
'^.*/shop/media/download.*$' => [
|
||||||
|
[
|
||||||
|
'dest' => '\Modules\Shop\Controller\ApiController:apiItemFileDownload',
|
||||||
|
'verb' => RouteVerb::GET,
|
||||||
|
'permission' => [
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -14,26 +14,19 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Modules\Shop\Controller;
|
namespace Modules\Shop\Controller;
|
||||||
|
|
||||||
|
use Modules\Billing\Models\BillMapper;
|
||||||
|
use Modules\Billing\Models\BillStatus;
|
||||||
use Modules\ClientManagement\Models\ClientMapper;
|
use Modules\ClientManagement\Models\ClientMapper;
|
||||||
use Modules\ClientManagement\Models\NullClient;
|
use Modules\ClientManagement\Models\NullClient;
|
||||||
use Modules\Finance\Models\TaxCodeMapper;
|
|
||||||
use Modules\ItemManagement\Models\Item;
|
use Modules\ItemManagement\Models\Item;
|
||||||
use Modules\ItemManagement\Models\ItemMapper;
|
use Modules\ItemManagement\Models\ItemMapper;
|
||||||
use Modules\ItemManagement\Models\ItemStatus;
|
|
||||||
use Modules\ItemManagement\Models\NullItem;
|
use Modules\ItemManagement\Models\NullItem;
|
||||||
use Modules\Payment\Models\PaymentMapper;
|
use Modules\Payment\Models\PaymentMapper;
|
||||||
use Modules\Payment\Models\PaymentStatus;
|
use Modules\Payment\Models\PaymentStatus;
|
||||||
use phpOMS\Autoloader;
|
|
||||||
use phpOMS\Localization\ISO3166TwoEnum;
|
|
||||||
use phpOMS\Localization\ISO4217CharEnum;
|
use phpOMS\Localization\ISO4217CharEnum;
|
||||||
use phpOMS\Message\Http\HttpRequest;
|
|
||||||
use phpOMS\Message\Http\HttpResponse;
|
|
||||||
use phpOMS\Message\Http\RequestStatusCode;
|
|
||||||
use phpOMS\Message\RequestAbstract;
|
use phpOMS\Message\RequestAbstract;
|
||||||
use phpOMS\Message\ResponseAbstract;
|
use phpOMS\Message\ResponseAbstract;
|
||||||
use phpOMS\Stdlib\Base\FloatInt;
|
|
||||||
use phpOMS\System\MimeType;
|
use phpOMS\System\MimeType;
|
||||||
use phpOMS\Uri\HttpUri;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Api controller
|
* Api controller
|
||||||
|
|
@ -45,6 +38,88 @@ use phpOMS\Uri\HttpUri;
|
||||||
*/
|
*/
|
||||||
final class ApiController extends Controller
|
final class ApiController extends Controller
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Api method to download item files
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
* @param mixed $data Generic data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function apiItemFileDownload(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
|
||||||
|
{
|
||||||
|
// Handle public files
|
||||||
|
$item = ItemMapper::get()
|
||||||
|
->with('files')
|
||||||
|
->with('files/type')
|
||||||
|
->where('id', $request->getDataInt('item'))
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
$itemFiles = $item->getFiles();
|
||||||
|
foreach ($itemFiles as $file) {
|
||||||
|
if ($file->getId() === $request->getDataInt('id')
|
||||||
|
&& ($file->hasMediaTypeName('item_demo_download')
|
||||||
|
|| $file->hasMediaTypeName('item_public_download'))
|
||||||
|
) {
|
||||||
|
$this->app->moduleManager->get('Media', 'Api')
|
||||||
|
->apiMediaExport($request, $response);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle private files
|
||||||
|
// @todo: this is another example where it would be useful to have clients and items as models in the bill and bill element
|
||||||
|
$client = ClientMapper::get()
|
||||||
|
->where('account', $request->header->account)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
// @todo: only for sales invoice, currently also for offers
|
||||||
|
$bills = BillMapper::getAll()
|
||||||
|
->with('elements')
|
||||||
|
->where('client', $client->getId())
|
||||||
|
->where('status', BillStatus::ARCHIVED)
|
||||||
|
->where('elements/item', $request->getDataInt('item'))
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
$items = [];
|
||||||
|
foreach ($bills as $bill) {
|
||||||
|
$elements = $bill->getElements();
|
||||||
|
|
||||||
|
foreach ($elements as $element) {
|
||||||
|
$item = ItemMapper::get()
|
||||||
|
->with('files')
|
||||||
|
->with('files/type')
|
||||||
|
->where('id', $element->item)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
$items[$item->getId()] = $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($items as $item) {
|
||||||
|
$files = $item->getFiles();
|
||||||
|
|
||||||
|
foreach ($files as $file) {
|
||||||
|
if ($file->getId() === $request->getDataInt('id')
|
||||||
|
&& $file->hasMediaTypeName('item_purchase_download')
|
||||||
|
) {
|
||||||
|
$this->app->moduleManager->get('Media', 'Api')
|
||||||
|
->apiMediaExport($request, $response);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @todo: return insufficient permissions or 404
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Api method to create news article
|
* Api method to create news article
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,10 @@
|
||||||
"directory": "Shop",
|
"directory": "Shop",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Admin": "1.0.0",
|
"Admin": "1.0.0",
|
||||||
"CMS": "1.0.0"
|
"CMS": "1.0.0",
|
||||||
|
"Media": "1.0.0",
|
||||||
|
"Billing": "1.0.0",
|
||||||
|
"ItemManagement": "1.0.0"
|
||||||
},
|
},
|
||||||
"providing": {
|
"providing": {
|
||||||
"CMS": "*",
|
"CMS": "*",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user