mirror of
https://github.com/Karaka-Management/oms-Shop.git
synced 2026-02-17 18:28:39 +00:00
too many changes
This commit is contained in:
parent
f56e6ddcac
commit
68932c7a60
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Web\{APPNAME}
|
* @package Web\{APPNAME}
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
"phpOMS-db": "1.0.0"
|
"phpOMS-db": "1.0.0"
|
||||||
},
|
},
|
||||||
"creator": {
|
"creator": {
|
||||||
"name": "Karaka",
|
"name": "Jingga",
|
||||||
"website": "jingga.app"
|
"website": "jingga.app"
|
||||||
},
|
},
|
||||||
"description": "The shop application.",
|
"description": "The shop application.",
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
"dir": "ltr",
|
"dir": "ltr",
|
||||||
"start_url": "../../{APPNAME}",
|
"start_url": "../../{APPNAME}",
|
||||||
"type": "privileged",
|
"type": "privileged",
|
||||||
"name": "Karaka Shop",
|
"name": "Jingga Shop",
|
||||||
"description": "OMS shop application.",
|
"description": "OMS shop application.",
|
||||||
"short_name": "OMS Shop",
|
"short_name": "OMS Shop",
|
||||||
"icons": [
|
"icons": [
|
||||||
|
|
|
||||||
44
Admin/Install/Media.install.json
Executable file
44
Admin/Install/Media.install.json
Executable file
|
|
@ -0,0 +1,44 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "type",
|
||||||
|
"name": "shop_list_image",
|
||||||
|
"l11n": [
|
||||||
|
{
|
||||||
|
"title": "Shop list image",
|
||||||
|
"lang": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Shop Listenbild",
|
||||||
|
"lang": "de"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "type",
|
||||||
|
"name": "shop_featured_image",
|
||||||
|
"l11n": [
|
||||||
|
{
|
||||||
|
"title": "Shop featured image",
|
||||||
|
"lang": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Shop Featured Bild",
|
||||||
|
"lang": "de"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "type",
|
||||||
|
"name": "shop_primary_image",
|
||||||
|
"l11n": [
|
||||||
|
{
|
||||||
|
"title": "Shop primary image",
|
||||||
|
"lang": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Shop Hauptbild",
|
||||||
|
"lang": "de"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
43
Admin/Install/Media.php
Executable file
43
Admin/Install/Media.php
Executable file
|
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* PHP Version 8.1
|
||||||
|
*
|
||||||
|
* @package Modules\Shop\Admin\Install
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://jingga.app
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Modules\Shop\Admin\Install;
|
||||||
|
|
||||||
|
use phpOMS\Application\ApplicationAbstract;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Media class.
|
||||||
|
*
|
||||||
|
* @package Modules\Shop\Admin\Install
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @link https://jingga.app
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
class Media
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Install media providing
|
||||||
|
*
|
||||||
|
* @param ApplicationAbstract $app Application
|
||||||
|
* @param string $path Module path
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public static function install(ApplicationAbstract $app, string $path) : void
|
||||||
|
{
|
||||||
|
\Modules\Media\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Media.install.json']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop\Admin\Install
|
* @package Modules\Shop\Admin\Install
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop\Admin
|
* @package Modules\Shop\Admin
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -12,5 +12,21 @@
|
||||||
*/
|
*/
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use Modules\Shop\Controller\ApiController;
|
||||||
|
use Modules\Shop\Models\PermissionCategory;
|
||||||
|
use phpOMS\Account\PermissionType;
|
||||||
|
use phpOMS\Router\RouteVerb;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
'^.*/shop/oneclick/buy.*$' => [
|
||||||
|
[
|
||||||
|
'dest' => '\Modules\Shop\Controller\ApiController:apiOneClickBuy',
|
||||||
|
'verb' => RouteVerb::GET,
|
||||||
|
'permission' => [
|
||||||
|
'module' => ApiController::NAME,
|
||||||
|
'type' => PermissionType::CREATE,
|
||||||
|
'state' => PermissionCategory::BUY,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop\Admin
|
* @package Modules\Shop\Admin
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop\Admin
|
* @package Modules\Shop\Admin
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop\Admin
|
* @package Modules\Shop\Admin
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop
|
* @package Modules\Shop
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
@ -14,6 +14,21 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Modules\Shop\Controller;
|
namespace Modules\Shop\Controller;
|
||||||
|
|
||||||
|
use Modules\Billing\Models\Attribute\BillAttributeTypeMapper;
|
||||||
|
use Modules\Billing\Models\Bill;
|
||||||
|
use Modules\ClientManagement\Models\ClientMapper;
|
||||||
|
use Modules\ClientManagement\Models\NullClient;
|
||||||
|
use Modules\ItemManagement\Models\ItemMapper;
|
||||||
|
use Modules\Payment\Models\PaymentMapper;
|
||||||
|
use Modules\Payment\Models\PaymentStatus;
|
||||||
|
use phpOMS\Autoloader;
|
||||||
|
use phpOMS\Message\Http\HttpRequest;
|
||||||
|
use phpOMS\Message\Http\HttpResponse;
|
||||||
|
use phpOMS\Message\RequestAbstract;
|
||||||
|
use phpOMS\Message\ResponseAbstract;
|
||||||
|
use phpOMS\System\MimeType;
|
||||||
|
use phpOMS\Uri\HttpUri;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Api controller
|
* Api controller
|
||||||
*
|
*
|
||||||
|
|
@ -24,4 +39,176 @@ namespace Modules\Shop\Controller;
|
||||||
*/
|
*/
|
||||||
final class ApiController extends Controller
|
final class ApiController extends Controller
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Api method to create news article
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
* @param mixed $data Generic data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function apiSchemaCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
|
||||||
|
{
|
||||||
|
// @todo: implement https://schema.org/Product
|
||||||
|
$schema = [
|
||||||
|
'@context' => 'https://schema.org/',
|
||||||
|
'@type' => 'Product',
|
||||||
|
'name' => '...',
|
||||||
|
'image' => [
|
||||||
|
|
||||||
|
],
|
||||||
|
'description' => '...',
|
||||||
|
'offers' => [
|
||||||
|
'@type' => 'Offer',
|
||||||
|
'priceCurrency' => '...',
|
||||||
|
'price' => '...',
|
||||||
|
'availability' => '...',
|
||||||
|
],
|
||||||
|
'isVariantOf' => '...',
|
||||||
|
];
|
||||||
|
|
||||||
|
$response->header->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true);
|
||||||
|
$response->set($request->uri->__toString(), $schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Api method to create news article
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
* @param mixed $data Generic data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function apiOneClickBuy(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
|
||||||
|
{
|
||||||
|
$item = $request->hasData('item')
|
||||||
|
? ItemMapper::get()->where('id', (int) $request->getData('item'))->execute()
|
||||||
|
: ItemMapper::get()->where('number', (string) $request->getData('number'))->execute();
|
||||||
|
|
||||||
|
// get item
|
||||||
|
// get client
|
||||||
|
// get client data
|
||||||
|
// get payment data
|
||||||
|
// create one-click-shoping-cart = invoice
|
||||||
|
// create payment based on client data
|
||||||
|
|
||||||
|
$client = ClientMapper::get()
|
||||||
|
->where('account', $request->header->account)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
if (!($client instanceof NullClient)) {
|
||||||
|
$paymentInfoMapper = PaymentMapper::getAll()
|
||||||
|
->where('account', $request->header->account)
|
||||||
|
->where('status', PaymentStatus::ACTIVATE);
|
||||||
|
|
||||||
|
if ($request->hasData('payment_types')) {
|
||||||
|
$paymentInfoMapper->where('type', $request->getDataList('payment_types'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$paymentInfo = $paymentInfoMapper->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
$bill = new Bill();
|
||||||
|
|
||||||
|
// add item to bill
|
||||||
|
// set quantity
|
||||||
|
// set price
|
||||||
|
// attach payment to bill
|
||||||
|
// set external payment id to bill
|
||||||
|
// execute bill payment
|
||||||
|
|
||||||
|
$this->setupStripe($request, $response, $bill, $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setupStripe(
|
||||||
|
RequestAbstract $request,
|
||||||
|
ResponseAbstract $response,
|
||||||
|
Bill $bill,
|
||||||
|
mixed $data = null
|
||||||
|
) : void {
|
||||||
|
$session = $this->createStripeSession($bill, $data['success'], $data['cancel']);
|
||||||
|
|
||||||
|
// Assign payment id to bill
|
||||||
|
/** \Modules\Billing\Models\Attribute\BillAttributeType $type */
|
||||||
|
$type = BillAttributeTypeMapper::get()->where('name', 'external_payment_id')->execute();
|
||||||
|
|
||||||
|
$internalRequest = new HttpRequest(new HttpUri(''));
|
||||||
|
$internalResponse = new HttpResponse();
|
||||||
|
|
||||||
|
$internalRequest->header->account = $request->header->account;
|
||||||
|
$internalRequest->setData('type', $type->getId());
|
||||||
|
$internalRequest->setData('custom', (string) $session->id);
|
||||||
|
$internalRequest->setData('bill', $bill->getId());
|
||||||
|
$this->app->moduleManager->get('Billing', 'ApiAttribute')->apiBillAttributeCreate($internalRequest, $internalResponse, $data);
|
||||||
|
|
||||||
|
// Redirect to stripe checkout page
|
||||||
|
$response->header->set('Content-Type', MimeType::M_JSON, true);
|
||||||
|
$response->header->set('', 'HTTP/1.1 303 See Other', true);
|
||||||
|
$response->header->set('Location', $session->url, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createStripeSession(
|
||||||
|
Bill $bill,
|
||||||
|
string $success,
|
||||||
|
string $cancel
|
||||||
|
) {
|
||||||
|
// $this->app->appSettings->getEncrypted()
|
||||||
|
|
||||||
|
// $stripeSecretKeyTemp = $this->app->appSettings->get();
|
||||||
|
// $stripeSecretKey = $this->app->appSettings->decrypt($stripeSecretKeyTemp);
|
||||||
|
|
||||||
|
// \Stripe\Stripe::setApiKey($stripeSecretKey);
|
||||||
|
|
||||||
|
$api_key = $_SERVER['OMS_STRIPE_SECRET'] ?? '';
|
||||||
|
$endpoint_secret = $_SERVER['OMS_STRIPE_PUBLIC'] ?? '';
|
||||||
|
|
||||||
|
$include = \realpath(__DIR__ . '/../../../Resources/');
|
||||||
|
|
||||||
|
if (empty($api_key) || empty($endpoint_secret) || $include === false) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Autoloader::addPath($include);
|
||||||
|
|
||||||
|
//$stripe = new \Stripe\StripeClient($api_key);
|
||||||
|
\Stripe\Stripe::setApiKey($api_key);
|
||||||
|
|
||||||
|
$session = \Stripe\Checkout\Session::create([
|
||||||
|
'line_items' => [[
|
||||||
|
'amount_subtotal' => '...',
|
||||||
|
'amount_tax' => '...',
|
||||||
|
'amount_total' => '...',
|
||||||
|
'quantity' => 1,
|
||||||
|
'price_data' => [
|
||||||
|
'name' => '',
|
||||||
|
'metadata' => [
|
||||||
|
'pro_id' => 0,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'unit_amount' => 0,
|
||||||
|
'currency' => 0,
|
||||||
|
]],
|
||||||
|
'amount_subtotal' => '...',
|
||||||
|
'amount_total' => '...',
|
||||||
|
'mode' => 'payment',
|
||||||
|
'currency' => '...',
|
||||||
|
'success_url' => $success,
|
||||||
|
'cancel_url' => $cancel,
|
||||||
|
'client_reference_id' => '...',
|
||||||
|
'customer' => 'stripe_customer_id...',
|
||||||
|
'customer_email' => 'customer_email...',
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $session;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop
|
* @package Modules\Shop
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop
|
* @package Modules\Shop
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop
|
* @package Modules\Shop
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/**
|
/**
|
||||||
* Karaka
|
* Karaka
|
||||||
*
|
*
|
||||||
* PHP Version 7.4
|
* PHP Version 8.1
|
||||||
*
|
*
|
||||||
* @package Modules\Shop\Models
|
* @package Modules\Shop\Models
|
||||||
* @copyright Dennis Eichhorn
|
* @copyright Dennis Eichhorn
|
||||||
|
|
@ -33,4 +33,6 @@ abstract class PermissionCategory extends Enum
|
||||||
public const SELLER = 3;
|
public const SELLER = 3;
|
||||||
|
|
||||||
public const SHOP = 4;
|
public const SHOP = 4;
|
||||||
|
|
||||||
|
public const BUY = 5;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
21
Theme/Backend/Lang/en.lang.php
Normal file
21
Theme/Backend/Lang/en.lang.php
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* PHP Version 8.1
|
||||||
|
*
|
||||||
|
* @package Modules\Localization
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://jingga.app
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
return ['Shop' => [
|
||||||
|
'Price' => 'Price',
|
||||||
|
'Buy' => 'Buy',
|
||||||
|
'Website' => 'Website',
|
||||||
|
'Demo' => 'Demo',
|
||||||
|
'Download' => 'Download',
|
||||||
|
]];
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
"phpOMS-db": "1.0.0"
|
"phpOMS-db": "1.0.0"
|
||||||
},
|
},
|
||||||
"creator": {
|
"creator": {
|
||||||
"name": "Karaka",
|
"name": "Jingga",
|
||||||
"website": "jingga.app"
|
"website": "jingga.app"
|
||||||
},
|
},
|
||||||
"description": "The search module.",
|
"description": "The search module.",
|
||||||
|
|
@ -21,7 +21,8 @@
|
||||||
"CMS": "1.0.0"
|
"CMS": "1.0.0"
|
||||||
},
|
},
|
||||||
"providing": {
|
"providing": {
|
||||||
"CMS": "*"
|
"CMS": "*",
|
||||||
|
"Media": "*"
|
||||||
},
|
},
|
||||||
"load": [
|
"load": [
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user