56 lines
2.8 KiB
Python
56 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import http, fields
|
|
from odoo.http import request
|
|
from odoo.tools import float_is_zero
|
|
from odoo.addons.pos_self_order.controllers.orders import PosSelfOrderController
|
|
from werkzeug.exceptions import Unauthorized
|
|
|
|
class PosSelfOrderControllerStripe(PosSelfOrderController):
|
|
@http.route("/pos-self-order/stripe-connection-token/", auth="public", type="json", website=True)
|
|
def get_stripe_creditentials(self, access_token, payment_method_id):
|
|
# stripe_connection_token
|
|
pos_config, _ = self._verify_authorization(access_token, "", False)
|
|
payment_method = pos_config.payment_method_ids.filtered(lambda p: p.id == payment_method_id)
|
|
return payment_method.stripe_connection_token()
|
|
|
|
@http.route("/pos-self-order/stripe-capture-payment/", auth="public", type="json", website=True)
|
|
def stripe_capture_payment(self, access_token, order_access_token, payment_intent_id, payment_method_id):
|
|
pos_config, _ = self._verify_authorization(access_token, "", False)
|
|
stripe_confirmation = pos_config.env['pos.payment.method'].stripe_capture_payment(payment_intent_id)
|
|
order = pos_config.env['pos.order'].search([('access_token', '=', order_access_token), ('config_id', '=', pos_config.id)])
|
|
|
|
if not order:
|
|
raise Unauthorized()
|
|
|
|
payment_method = pos_config.payment_method_ids.filtered(lambda p: p.id == payment_method_id)
|
|
stripe_order_amount = payment_method._stripe_calculate_amount(order.amount_total)
|
|
|
|
if float_is_zero(stripe_order_amount - stripe_confirmation['amount'], precision_rounding=pos_config.currency_id.rounding) and stripe_confirmation['status'] == 'succeeded':
|
|
transaction_id = stripe_confirmation['id']
|
|
payment_result = stripe_confirmation['status']
|
|
|
|
order.add_payment({
|
|
'amount': order.amount_total,
|
|
'payment_date': fields.Datetime.now(),
|
|
'payment_method_id': payment_method.id,
|
|
'card_type': False,
|
|
'cardholder_name': '',
|
|
'transaction_id': transaction_id,
|
|
'payment_status': payment_result,
|
|
'ticket': '',
|
|
'pos_order_id': order.id
|
|
})
|
|
|
|
order.action_pos_order_paid()
|
|
|
|
if order.config_id.self_ordering_mode == 'kiosk':
|
|
request.env['bus.bus']._sendone(f'pos_config-{order.config_id.access_token}', 'PAYMENT_STATUS', {
|
|
'payment_result': 'Success',
|
|
'order': order._export_for_self_order(),
|
|
})
|
|
else:
|
|
request.env['bus.bus']._sendone(f'pos_config-{order.config_id.access_token}', 'PAYMENT_STATUS', {
|
|
'payment_result': 'fail',
|
|
'order': order._export_for_self_order(),
|
|
})
|