mirror of
https://github.com/Karaka-Management/oms-Shop.git
synced 2026-01-11 18:48:41 +00:00
fix registration, login and billing
This commit is contained in:
parent
2cba0d945e
commit
0afe8d0a00
|
|
@ -14,22 +14,35 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Modules\Shop\Controller;
|
namespace Modules\Shop\Controller;
|
||||||
|
|
||||||
|
use Modules\Admin\Models\NullAccount;
|
||||||
use Modules\Billing\Models\Attribute\BillAttributeTypeMapper;
|
use Modules\Billing\Models\Attribute\BillAttributeTypeMapper;
|
||||||
use Modules\Billing\Models\Bill;
|
use Modules\Billing\Models\Bill;
|
||||||
|
use Modules\Billing\Models\BillElement;
|
||||||
|
use Modules\Billing\Models\BillMapper;
|
||||||
|
use Modules\Billing\Models\BillStatus;
|
||||||
|
use Modules\Billing\Models\BillType;
|
||||||
|
use Modules\Billing\Models\BillTypeMapper;
|
||||||
|
use Modules\Billing\Models\NullBillType;
|
||||||
|
use Modules\Billing\Models\Tax\TaxCombinationMapper;
|
||||||
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\Autoloader;
|
||||||
|
use phpOMS\Localization\ISO3166TwoEnum;
|
||||||
use phpOMS\Localization\ISO4217CharEnum;
|
use phpOMS\Localization\ISO4217CharEnum;
|
||||||
use phpOMS\Localization\ISO4217SymbolEnum;
|
use phpOMS\Localization\ISO4217SymbolEnum;
|
||||||
|
use phpOMS\Localization\ISO639x1Enum;
|
||||||
use phpOMS\Message\Http\HttpRequest;
|
use phpOMS\Message\Http\HttpRequest;
|
||||||
use phpOMS\Message\Http\HttpResponse;
|
use phpOMS\Message\Http\HttpResponse;
|
||||||
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;
|
use phpOMS\Uri\HttpUri;
|
||||||
|
|
||||||
|
|
@ -107,18 +120,12 @@ final class ApiController extends Controller
|
||||||
*/
|
*/
|
||||||
public function apiOneClickBuy(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
|
public function apiOneClickBuy(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
|
||||||
{
|
{
|
||||||
$item = $request->hasData('item')
|
// one-click-shoping-cart = invoice
|
||||||
? 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
|
|
||||||
|
|
||||||
|
/** @var \Modules\ClientManagement\Models\Client */
|
||||||
$client = ClientMapper::get()
|
$client = ClientMapper::get()
|
||||||
|
->with('mainAddress')
|
||||||
|
->with('account')
|
||||||
->where('account', $request->header->account)
|
->where('account', $request->header->account)
|
||||||
->execute();
|
->execute();
|
||||||
|
|
||||||
|
|
@ -134,14 +141,42 @@ final class ApiController extends Controller
|
||||||
$paymentInfo = $paymentInfoMapper->execute();
|
$paymentInfo = $paymentInfoMapper->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
$bill = new Bill();
|
$bill = $this->app->moduleManager->get('Billing', 'ApiBill')->createBaseBill($client, $request);
|
||||||
|
|
||||||
// add item to bill
|
$bill->type = BillTypeMapper::get()
|
||||||
// set quantity
|
->with('l11n')
|
||||||
// set price
|
->where('name', 'sales_invoice')
|
||||||
// attach payment to bill
|
->where('l11n/language', $bill->getLanguage())
|
||||||
// set external payment id to bill
|
->execute();
|
||||||
// execute bill payment
|
|
||||||
|
$itemMapper = ItemMapper::get()
|
||||||
|
->with('l11n')
|
||||||
|
->with('l11n/type')
|
||||||
|
->where('status', ItemStatus::ACTIVE)
|
||||||
|
->where('l11n/language', $bill->getLanguage());
|
||||||
|
|
||||||
|
/** @var \Modules\ItemManagement\Models\Item */
|
||||||
|
$item = $request->hasData('item')
|
||||||
|
? $itemMapper->where('id', $request->getDataInt('item'))->execute()
|
||||||
|
: $itemMapper->where('number', $request->getDataString('number'))->execute();
|
||||||
|
|
||||||
|
/** @var \Modules\Billing\Models\Tax\TaxCombination $taxCombination */
|
||||||
|
$taxCombination = TaxCombinationMapper::get()
|
||||||
|
->where('itemCode', $item->getAttribute('sales_tax_code')?->value->getValue())
|
||||||
|
->where('clientCode', $client->getAttribute('sales_tax_code')?->value->getValue())
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
/** @var \Modules\Finance\Models\TaxCode $taxCode */
|
||||||
|
$taxCode = TaxCodeMapper::get()
|
||||||
|
->where('abbr', $taxCombination->taxCode)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
$billElement = BillElement::fromItem($item, $taxCode);
|
||||||
|
$billElement->quantity = 1;
|
||||||
|
|
||||||
|
$bill->addElement($billElement);
|
||||||
|
|
||||||
|
$this->app->moduleManager->get('Billing', 'ApiBill')->createBillDatabaseEntry($bill, $request);
|
||||||
|
|
||||||
$this->setupStripe($request, $response, $bill, $data);
|
$this->setupStripe($request, $response, $bill, $data);
|
||||||
}
|
}
|
||||||
|
|
@ -156,7 +191,9 @@ final class ApiController extends Controller
|
||||||
|
|
||||||
// Assign payment id to bill
|
// Assign payment id to bill
|
||||||
/** \Modules\Billing\Models\Attribute\BillAttributeType $type */
|
/** \Modules\Billing\Models\Attribute\BillAttributeType $type */
|
||||||
$type = BillAttributeTypeMapper::get()->where('name', 'external_payment_id')->execute();
|
$type = BillAttributeTypeMapper::get()
|
||||||
|
->where('name', 'external_payment_id')
|
||||||
|
->execute();
|
||||||
|
|
||||||
$internalRequest = new HttpRequest(new HttpUri(''));
|
$internalRequest = new HttpRequest(new HttpUri(''));
|
||||||
$internalResponse = new HttpResponse();
|
$internalResponse = new HttpResponse();
|
||||||
|
|
@ -200,29 +237,15 @@ final class ApiController extends Controller
|
||||||
\Stripe\Stripe::setApiKey($api_key);
|
\Stripe\Stripe::setApiKey($api_key);
|
||||||
|
|
||||||
$session = \Stripe\Checkout\Session::create([
|
$session = \Stripe\Checkout\Session::create([
|
||||||
'line_items' => [[
|
'amount_subtotal' => $bill->netSales->getInt(),
|
||||||
'amount_subtotal' => '...',
|
'amount_total' => $bill->grossSales->getInt(),
|
||||||
'amount_tax' => '...',
|
|
||||||
'amount_total' => '...',
|
|
||||||
'quantity' => 1,
|
|
||||||
'price_data' => [
|
|
||||||
'name' => '',
|
|
||||||
'metadata' => [
|
|
||||||
'pro_id' => 0,
|
|
||||||
]
|
|
||||||
],
|
|
||||||
'unit_amount' => 0,
|
|
||||||
'currency' => 0,
|
|
||||||
]],
|
|
||||||
'amount_subtotal' => '...',
|
|
||||||
'amount_total' => '...',
|
|
||||||
'mode' => 'payment',
|
'mode' => 'payment',
|
||||||
'currency' => '...',
|
'currency' => $bill->getCurrency(),
|
||||||
'success_url' => $success,
|
'success_url' => $success,
|
||||||
'cancel_url' => $cancel,
|
'cancel_url' => $cancel,
|
||||||
'client_reference_id' => '...',
|
'client_reference_id' => $bill->number,
|
||||||
'customer' => 'stripe_customer_id...',
|
//'customer' => '...', @todo: use existing customer external_id
|
||||||
'customer_email' => 'customer_email...',
|
'customer_email' => $bill->client->account->getEmail(), // @todo: consider to use contacts
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return $session;
|
return $session;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user