mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[IMP] website_sale_signifyd: add tests and streamline setup (WIP)
This commit is contained in:
@@ -1,14 +1,19 @@
|
|||||||
from odoo.http import request, route
|
from odoo.http import request, route
|
||||||
from odoo.addons.website_sale.controllers.main import WebsiteSale
|
from odoo.addons.website_sale.controllers.main import WebsiteSale
|
||||||
|
|
||||||
|
import logging
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class WebsiteSale(WebsiteSale):
|
class WebsiteSale(WebsiteSale):
|
||||||
|
|
||||||
@route(['/shop/confirmation'], type='http', auth="public", website=True, sitemap=False)
|
@route(['/shop/confirmation'], type='http', auth="public", website=True, sitemap=False)
|
||||||
def payment_confirmation(self, **post):
|
def payment_confirmation(self, **post):
|
||||||
res = super(WebsiteSale, self).payment_confirmation()
|
res = super(WebsiteSale, self).payment_confirmation()
|
||||||
order_session_id = request.session.session_token
|
# order_session_id = request.session.session_token
|
||||||
checkout_token = request.session.session_token
|
checkout_token = request.session.session_token
|
||||||
|
order_session_id = checkout_token # TODO what is the appropriate variable?
|
||||||
|
_logger.warn(str(request.session))
|
||||||
browser_ip_address = request.httprequest.environ['REMOTE_ADDR']
|
browser_ip_address = request.httprequest.environ['REMOTE_ADDR']
|
||||||
sale_order_id = request.session.get('sale_last_order_id')
|
sale_order_id = request.session.get('sale_last_order_id')
|
||||||
if sale_order_id:
|
if sale_order_id:
|
||||||
@@ -16,6 +21,7 @@ class WebsiteSale(WebsiteSale):
|
|||||||
# Post completed order to Signifyd
|
# Post completed order to Signifyd
|
||||||
signifyd = request.env.company.signifyd_connector_id
|
signifyd = request.env.company.signifyd_connector_id
|
||||||
if signifyd:
|
if signifyd:
|
||||||
order.sudo().post_signifyd_case(order_session_id, checkout_token, browser_ip_address)
|
# TODO should the signifyd variable be used?
|
||||||
|
order.post_signifyd_case(order_session_id, checkout_token, browser_ip_address)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|||||||
@@ -18,9 +18,11 @@ class SignifydWebhooks(Controller):
|
|||||||
if case.guarantee_requested and not case.guarantee_eligible:
|
if case.guarantee_requested and not case.guarantee_eligible:
|
||||||
# Only alert Signifyd to stop trying if we have at least tried once already
|
# Only alert Signifyd to stop trying if we have at least tried once already
|
||||||
return Response({'response': 'success'}, status=200, mimetype='application/json')
|
return Response({'response': 'success'}, status=200, mimetype='application/json')
|
||||||
|
# TODO what would the return case be here?
|
||||||
except:
|
except:
|
||||||
# Signifyd API will try again up to 15 times if a non-2** code is returned
|
# Signifyd API will try again up to 15 times if a non-2** code is returned
|
||||||
return Response({'response': 'failed'}, status=500, mimetype='application/json')
|
return Response({'response': 'failed'}, status=500, mimetype='application/json')
|
||||||
|
# TODO what would the return case be here?
|
||||||
|
|
||||||
@route(['/cases/update'], type='json', auth='public', methods=['POST'], csrf=False)
|
@route(['/cases/update'], type='json', auth='public', methods=['POST'], csrf=False)
|
||||||
def case_update(self, *args, **post):
|
def case_update(self, *args, **post):
|
||||||
@@ -34,3 +36,4 @@ class SignifydWebhooks(Controller):
|
|||||||
if case and outcome == 'DECLINED':
|
if case and outcome == 'DECLINED':
|
||||||
for user in request.env.company.signifyd_connector_id.notify_user_ids:
|
for user in request.env.company.signifyd_connector_id.notify_user_ids:
|
||||||
case.sudo().create_notification(user, outcome)
|
case.sudo().create_notification(user, outcome)
|
||||||
|
# TODO any return result?
|
||||||
|
|||||||
@@ -4,4 +4,5 @@ from odoo import fields, models
|
|||||||
class ResCompany(models.Model):
|
class ResCompany(models.Model):
|
||||||
_inherit = 'res.company'
|
_inherit = 'res.company'
|
||||||
|
|
||||||
|
# TODO move to website
|
||||||
signifyd_connector_id = fields.Many2one('signifyd.connector')
|
signifyd_connector_id = fields.Many2one('signifyd.connector')
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ class SaleOrder(models.Model):
|
|||||||
_inherit = 'sale.order'
|
_inherit = 'sale.order'
|
||||||
|
|
||||||
signifyd_case_id = fields.Many2one('signifyd.case', readonly=1)
|
signifyd_case_id = fields.Many2one('signifyd.case', readonly=1)
|
||||||
singifyd_score = fields.Float(related='signifyd_case_id.score', readonly=1)
|
singifyd_score = fields.Float(related='signifyd_case_id.score')
|
||||||
signifyd_disposition_status = fields.Selection(related='signifyd_case_id.guarantee_disposition', tracking=True)
|
signifyd_disposition_status = fields.Selection(related='signifyd_case_id.guarantee_disposition')
|
||||||
|
|
||||||
def action_view_signifyd_case(self):
|
def action_view_signifyd_case(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
form_id = self.env.ref('gcl_signifyd_connector.signifyd_case_form_view').id
|
form_id = self.env.ref('website_sale_signifyd.signifyd_case_form_view').id
|
||||||
context = {'create': False, 'delete': False, 'id': self.signifyd_case_id.id}
|
context = {'create': False, 'delete': False}
|
||||||
return {
|
return {
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
'name': 'Signifyd Case',
|
'name': 'Signifyd Case',
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class SignifydCase(models.Model):
|
|||||||
_name = 'signifyd.case'
|
_name = 'signifyd.case'
|
||||||
_description = 'Stores Signifyd case information on orders.'
|
_description = 'Stores Signifyd case information on orders.'
|
||||||
|
|
||||||
order_id = fields.Many2one('sale.order')
|
order_id = fields.Many2one('sale.order', required=True)
|
||||||
partner_id = fields.Many2one('res.partner')
|
partner_id = fields.Many2one('res.partner')
|
||||||
case_id = fields.Char(string='Case ID')
|
case_id = fields.Char(string='Case ID')
|
||||||
uuid = fields.Char(string='Unique ID')
|
uuid = fields.Char(string='Unique ID')
|
||||||
@@ -57,19 +57,22 @@ class SignifydCase(models.Model):
|
|||||||
self.signifyd_url = ''
|
self.signifyd_url = ''
|
||||||
|
|
||||||
def write(self, vals):
|
def write(self, vals):
|
||||||
|
original_disposition = {c: c.guarantee_disposition for c in self}
|
||||||
res = super(SignifydCase, self).write(vals)
|
res = super(SignifydCase, self).write(vals)
|
||||||
disposition = vals.get('guarantee_disposition')
|
disposition = vals.get('guarantee_disposition')
|
||||||
if disposition:
|
for case in self:
|
||||||
|
if case.order_id and original_disposition[case] != disposition:
|
||||||
self.order_id.message_post(body=_('Signifyd Updated Record to %s' % vals['guarantee_disposition']),
|
self.order_id.message_post(body=_('Signifyd Updated Record to %s' % vals['guarantee_disposition']),
|
||||||
subtype='gcl_signifyd_connector.disposition_change')
|
subtype='website_sale_signifyd.disposition_change')
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def post_case(self, values):
|
def post_case(self, values):
|
||||||
signifyd = self.env['signifyd.connector']
|
signifyd = self.env['signifyd.connector'] # TODO HOW, this shouldn't be a singleton
|
||||||
headers = signifyd.get_headers()
|
headers = signifyd.get_headers()
|
||||||
data = json.dumps(values, indent=4, sort_keys=True, default=str)
|
data = json.dumps(values, indent=4, sort_keys=True, default=str)
|
||||||
|
|
||||||
|
# TODO this should be in `signifyd.connector`
|
||||||
r = requests.post(
|
r = requests.post(
|
||||||
signifyd.API_URL + '/cases',
|
signifyd.API_URL + '/cases',
|
||||||
headers=headers,
|
headers=headers,
|
||||||
@@ -79,6 +82,7 @@ class SignifydCase(models.Model):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def get_case(self):
|
def get_case(self):
|
||||||
|
# TODO See above....
|
||||||
signifyd = self.env['signifyd.connector']
|
signifyd = self.env['signifyd.connector']
|
||||||
headers = signifyd.get_headers()
|
headers = signifyd.get_headers()
|
||||||
r = requests.get(
|
r = requests.get(
|
||||||
@@ -89,6 +93,7 @@ class SignifydCase(models.Model):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def request_guarantee(self, *args):
|
def request_guarantee(self, *args):
|
||||||
|
# TODO See above....
|
||||||
signifyd = self.env['signifyd.connector']
|
signifyd = self.env['signifyd.connector']
|
||||||
headers = signifyd.get_headers()
|
headers = signifyd.get_headers()
|
||||||
values = json.dumps({"caseId": self.case_id})
|
values = json.dumps({"caseId": self.case_id})
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class StockPicking(models.Model):
|
|||||||
|
|
||||||
def action_view_signifyd_case(self):
|
def action_view_signifyd_case(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
form_id = self.env.ref('gcl_signifyd_connector.signifyd_case_form_view').id
|
form_id = self.env.ref('website_sale_signifyd.signifyd_case_form_view').id
|
||||||
context = {'create': False, 'delete': False, 'id': self.sale_id.signifyd_case_id.id}
|
context = {'create': False, 'delete': False, 'id': self.sale_id.signifyd_case_id.id}
|
||||||
return {
|
return {
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
|
|||||||
1
website_sale_signifyd/tests/__init__.py
Normal file
1
website_sale_signifyd/tests/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import test_order_flow
|
||||||
0
website_sale_signifyd/tests/test_order_flow.py
Normal file
0
website_sale_signifyd/tests/test_order_flow.py
Normal file
@@ -67,7 +67,7 @@
|
|||||||
<field name="name">Signifyd Case Information</field>
|
<field name="name">Signifyd Case Information</field>
|
||||||
<field name="res_model">signifyd.case</field>
|
<field name="res_model">signifyd.case</field>
|
||||||
<field name="view_mode">form</field>
|
<field name="view_mode">form</field>
|
||||||
<field name="view_id" ref="gcl_signifyd_connector.signifyd_case_form_view"/>
|
<field name="view_id" ref="website_sale_signifyd.signifyd_case_form_view"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="signifyd_connector_form_view" model="ir.ui.view">
|
<record id="signifyd_connector_form_view" model="ir.ui.view">
|
||||||
|
|||||||
Reference in New Issue
Block a user