From f439b816fba579338a8fe231f11cfd3d558d2df7 Mon Sep 17 00:00:00 2001 From: Cedric Collins Date: Wed, 25 Jan 2023 13:06:24 -0600 Subject: [PATCH] [REM] website_sale_signifyd: move to professional --- website_sale_signifyd/__init__.py | 4 - website_sale_signifyd/__manifest__.py | 30 -- website_sale_signifyd/controllers/__init__.py | 3 - website_sale_signifyd/controllers/signifyd.py | 28 -- website_sale_signifyd/i18n/es.po | 404 ------------------ .../migrations/15.0.1.1.0/post-migration.py | 9 - website_sale_signifyd/models/__init__.py | 9 - website_sale_signifyd/models/partner.py | 22 - website_sale_signifyd/models/payment.py | 14 - website_sale_signifyd/models/sale_order.py | 174 -------- website_sale_signifyd/models/signifyd.py | 165 ------- .../models/signifyd_connector.py | 168 -------- website_sale_signifyd/models/stock.py | 26 -- website_sale_signifyd/models/website.py | 9 - .../security/ir.model.access.csv | 9 - website_sale_signifyd/tests/__init__.py | 1 - .../tests/test_order_flow.py | 0 website_sale_signifyd/views/partner_views.xml | 43 -- website_sale_signifyd/views/payment_views.xml | 15 - website_sale_signifyd/views/sale_views.xml | 56 --- .../views/signifyd_views.xml | 147 ------- website_sale_signifyd/views/stock_views.xml | 22 - website_sale_signifyd/views/web_assets.xml | 11 - website_sale_signifyd/views/website_views.xml | 15 - 24 files changed, 1384 deletions(-) delete mode 100644 website_sale_signifyd/__init__.py delete mode 100644 website_sale_signifyd/__manifest__.py delete mode 100644 website_sale_signifyd/controllers/__init__.py delete mode 100644 website_sale_signifyd/controllers/signifyd.py delete mode 100644 website_sale_signifyd/i18n/es.po delete mode 100644 website_sale_signifyd/migrations/15.0.1.1.0/post-migration.py delete mode 100644 website_sale_signifyd/models/__init__.py delete mode 100644 website_sale_signifyd/models/partner.py delete mode 100644 website_sale_signifyd/models/payment.py delete mode 100644 website_sale_signifyd/models/sale_order.py delete mode 100644 website_sale_signifyd/models/signifyd.py delete mode 100644 website_sale_signifyd/models/signifyd_connector.py delete mode 100644 website_sale_signifyd/models/stock.py delete mode 100644 website_sale_signifyd/models/website.py delete mode 100644 website_sale_signifyd/security/ir.model.access.csv delete mode 100644 website_sale_signifyd/tests/__init__.py delete mode 100644 website_sale_signifyd/tests/test_order_flow.py delete mode 100644 website_sale_signifyd/views/partner_views.xml delete mode 100644 website_sale_signifyd/views/payment_views.xml delete mode 100644 website_sale_signifyd/views/sale_views.xml delete mode 100644 website_sale_signifyd/views/signifyd_views.xml delete mode 100644 website_sale_signifyd/views/stock_views.xml delete mode 100644 website_sale_signifyd/views/web_assets.xml delete mode 100644 website_sale_signifyd/views/website_views.xml diff --git a/website_sale_signifyd/__init__.py b/website_sale_signifyd/__init__.py deleted file mode 100644 index e2de6faa..00000000 --- a/website_sale_signifyd/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from . import controllers -from . import models diff --git a/website_sale_signifyd/__manifest__.py b/website_sale_signifyd/__manifest__.py deleted file mode 100644 index 4ed0e4fe..00000000 --- a/website_sale_signifyd/__manifest__.py +++ /dev/null @@ -1,30 +0,0 @@ -{ - 'name': 'Signifyd Connector', - 'author': 'Hibou Corp. ', - 'version': '16.0.1.1.0', - 'category': 'Sale', - 'description': """ -Automate Order Fraud Detection with the Signifyd API. - """, - 'website': 'https://hibou.io/', - 'depends': [ - 'delivery', - 'hibou_professional', - 'stock', - 'website_sale', - 'website_payment', - ], - 'data': [ - 'security/ir.model.access.csv', - 'views/partner_views.xml', - 'views/payment_views.xml', - 'views/sale_views.xml', - 'views/signifyd_views.xml', - 'views/stock_views.xml', - 'views/web_assets.xml', - 'views/website_views.xml', - ], - 'installable': True, - 'application': False, - 'license': 'OPL-1', -} diff --git a/website_sale_signifyd/controllers/__init__.py b/website_sale_signifyd/controllers/__init__.py deleted file mode 100644 index 4aee65d9..00000000 --- a/website_sale_signifyd/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from . import signifyd diff --git a/website_sale_signifyd/controllers/signifyd.py b/website_sale_signifyd/controllers/signifyd.py deleted file mode 100644 index 4fa14ac1..00000000 --- a/website_sale_signifyd/controllers/signifyd.py +++ /dev/null @@ -1,28 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -import json -from odoo.http import Controller, request, route -from werkzeug.exceptions import NotFound - - -class SignifydWebhooks(Controller): - - @route(['/signifyd/cases/update'], type='json', auth='public', methods=['POST'], csrf=False, website=True) - def case_update(self, *args, **post): - return self._case_update() - - def _case_update(self): - data = json.loads(request.httprequest.data) - vals = request.env['signifyd.connector'].process_post_values(data) - case_id = vals.get('case_id') - case = self._get_case(case_id) - if case: - case.update_case_info(vals) - return {'response': 'success'} - if case_id == 1: - # Special case when verifying webhook. - return {'response': 'success'} - raise NotFound('CaseId: %s Cannot be found.' % (case_id,)) - - def _get_case(self, case_id): - return request.env['signifyd.case'].sudo().search([('case_id', '=', case_id)], limit=1) diff --git a/website_sale_signifyd/i18n/es.po b/website_sale_signifyd/i18n/es.po deleted file mode 100644 index 45bdb1e6..00000000 --- a/website_sale_signifyd/i18n/es.po +++ /dev/null @@ -1,404 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * website_sale_signifyd -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 15.0+e\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-01 20:59+0000\n" -"PO-Revision-Date: 2021-11-01 20:59+0000\n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_connector_form_view -msgid "" -"\n" -" \n" -" Webhooks Active\n" -" " -msgstr "" -"\n" -" \n" -" Webhooks Activos\n" -" " - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_connector_form_view -msgid "" -"\n" -" \n" -" Webhooks Inactive\n" -" " -msgstr "" -"\n" -" \n" -" Webhooks Inactivos\n" -" " - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__secret_key -msgid "API Key" -msgstr "Clave de API" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__adjusted_score -msgid "Adjusted Score" -msgstr "Puntuación Ajustada" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__guarantee_disposition__approved -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.stock_picking_form_inherit -msgid "Approved" -msgstr "Aprobada" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__guarantee_disposition__canceled -msgid "Canceled" -msgstr "Cancelada" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__case_id -msgid "Case ID" -msgstr "ID del Case" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__status -msgid "Case Status" -msgstr "Estado del Caso" - -#. module: website_sale_signifyd -#: code:addons/website_sale_signifyd/models/signifyd.py:0 -#: code:addons/website_sale_signifyd/models/signifyd.py:0 -#, python-format -msgid "Case not represented in Signifyd." -msgstr "El caso no esta representado en Signifyd" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__name -msgid "Connector Name" -msgstr "Nombre del conector" - -#. module: website_sale_signifyd -#: model:ir.model,name:website_sale_signifyd.model_res_partner -msgid "Contact" -msgstr "Contacto" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__create_uid -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__create_uid -msgid "Created by" -msgstr "Creado por" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__create_date -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__create_date -msgid "Created on" -msgstr "Creado en" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__guarantee_disposition__declined -msgid "Declined" -msgstr "Rechazado" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__status__dismissed -msgid "Dismissed" -msgstr "Desestimado" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__display_name -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__display_name -msgid "Display Name" -msgstr "Nombre para mostrar" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__disposition_reason -msgid "Disposition Reason" -msgstr "Motivo de Disposición" - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_case_form_view -msgid "Force Update" -msgstr "Forzar Actualización" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__review_disposition__fraud -msgid "Fraudulent" -msgstr "Fraudulento" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__review_disposition__good -msgid "Good" -msgstr "Bueno" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_sale_order__signifyd_disposition_status -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__guarantee_disposition -#: model:ir.model.fields,field_description:website_sale_signifyd.field_stock_picking__signifyd_hold -msgid "Guarantee Status" -msgstr "Estado de Garantía" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__name -msgid "Headline" -msgstr "Titular" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__id -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__id -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.partner_view_form_view_inherit -msgid "ID" -msgstr "ID" - -#. module: website_sale_signifyd -#: model:ir.model,name:website_sale_signifyd.model_signifyd_connector -msgid "Interact with Signifyd API" -msgstr "Interactuar con API de Signifyd" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case____last_update -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector____last_update -msgid "Last Modified on" -msgstr "Última Modificación el" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__last_update -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.partner_view_form_view_inherit -msgid "Last Update" -msgstr "Última Actualización" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__write_uid -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__write_uid -msgid "Last Updated by" -msgstr "Última Actualización por" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__write_date -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__write_date -msgid "Last Updated on" -msgstr "Última Actualización el" - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.stock_picking_form_inherit -msgid "On Hold" -msgstr "Suspendido" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__status__open -msgid "Open" -msgstr "Abierto" - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_connector_form_view -msgid "" -"Optional: Add users to be notified if a sale order is declined by Signifyd." -msgstr "" -"Opcional: Agregar usuarios que serán notificados si un pedido de venta es " -"rechazada por Signifyd." - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__order_id -msgid "Order" -msgstr "Pedido" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__order_outcome -msgid "Order Outcome" -msgstr "Resultado del Pedido" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__partner_id -msgid "Partner" -msgstr "Socio" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__guarantee_disposition__pending -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__review_disposition__unset -msgid "Pending" -msgstr "Pendiente" - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_connector_form_view -msgid "Re-register Webhooks" -msgstr "Volver a registrar Webhooks" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__notify_user_ids -msgid "Receive decline notifications" -msgstr "Recibir notificación de rechazos" - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_connector_form_view -msgid "Register Webhooks" -msgstr "Registrar Webhooks" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__review_disposition -msgid "Review Status" -msgstr "Estado de Revisión" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__guarantee_disposition__in_review -msgid "Reviewing" -msgstr "En Evaluación" - -#. module: website_sale_signifyd -#: model:ir.model,name:website_sale_signifyd.model_sale_order -msgid "Sales Order" -msgstr "Pedido de venta" - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_case_form_view -msgid "Score" -msgstr "Puntuación" - -#. module: website_sale_signifyd -#: model:ir.ui.menu,name:website_sale_signifyd.menu_action_signifyd_connector -msgid "Signifyd" -msgstr "Signifyd" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_sale_order__signifyd_case_id -#: model:ir.model.fields,field_description:website_sale_signifyd.field_stock_picking__singifyd_case_id -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_case_form_view -msgid "Signifyd Case" -msgstr "Caso de Signifyd" - -#. module: website_sale_signifyd -#: model:ir.actions.act_window,name:website_sale_signifyd.action_signifyd_case_form -msgid "Signifyd Case Information" -msgstr "Información del Caso de Signifyd" - -#. module: website_sale_signifyd -#: code:addons/website_sale_signifyd/models/signifyd.py:0 -#, python-format -msgid "Signifyd Case has no ID?" -msgstr "¿El caso de Signifyd no tiene ID?" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_res_partner__signifyd_case_count -#: model:ir.model.fields,field_description:website_sale_signifyd.field_res_partner__signifyd_case_ids -#: model:ir.model.fields,field_description:website_sale_signifyd.field_res_users__signifyd_case_count -#: model:ir.model.fields,field_description:website_sale_signifyd.field_res_users__signifyd_case_ids -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.partner_view_form_view_inherit -msgid "Signifyd Cases" -msgstr "Casos de Signifyd" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_website__signifyd_connector_id -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_connector_form_view -msgid "Signifyd Connector" -msgstr "Conector de Signifyd" - -#. module: website_sale_signifyd -#: model:ir.actions.act_window,name:website_sale_signifyd.action_signifyd_connector -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.signifyd_connector_tree_view -msgid "Signifyd Connectors" -msgstr "Conectores de Signifyd" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_res_partner__signifyd_average_score -#: model:ir.model.fields,field_description:website_sale_signifyd.field_res_users__signifyd_average_score -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.partner_view_form_view_inherit -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.sale_order_form_view_inherit -msgid "Signifyd Score" -msgstr "Puntuación de Signifyd" - -#. module: website_sale_signifyd -#: model_terms:ir.ui.view,arch_db:website_sale_signifyd.sale_order_form_view_inherit -msgid "Signifyd Status" -msgstr "Estado de Signifyd" - -#. module: website_sale_signifyd -#: model:mail.message.subtype,description:website_sale_signifyd.disposition_change -msgid "Signifyd Status Updated" -msgstr "Estado de Signifyd Actualizado" - -#. module: website_sale_signifyd -#: model:mail.message.subtype,name:website_sale_signifyd.disposition_change -msgid "Signifyd Updated" -msgstr "Signifyd Actualizado" - -#. module: website_sale_signifyd -#: code:addons/website_sale_signifyd/models/signifyd.py:0 -#, python-format -msgid "Signifyd Updated Record to %s" -msgstr "Signifyd ha Actualizado Registro a %s " - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__signifyd_url -msgid "Signifyd.com" -msgstr "Signifyd.com" - -#. module: website_sale_signifyd -#: model:ir.model,name:website_sale_signifyd.model_signifyd_case -msgid "Stores Signifyd case information on orders." -msgstr "Almacena Informacion del Caso de Signifyd en los pedidos" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__order_outcome__successful -msgid "Successful" -msgstr "Exitoso" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__webhooks_registered -msgid "Successfully Registered Webhooks" -msgstr "Los Webhooks se Registraron Exitosamente" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__secret_key_test -msgid "TEST API Key" -msgstr "Clave de API de Prueba" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__team_id -msgid "Team ID" -msgstr "ID del Equipo" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__team_name -msgid "Team Name" -msgstr "Nombre el Equipo" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__test_mode -msgid "Test Mode" -msgstr "Modo de Prueba" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_sale_order__singifyd_score -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__score -msgid "Transaction Score" -msgstr "Puntuación de la Transacción" - -#. module: website_sale_signifyd -#: model:ir.model,name:website_sale_signifyd.model_stock_picking -msgid "Transfer" -msgstr "Transferir" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_case__uuid -msgid "Unique ID" -msgstr "ID Único" - -#. module: website_sale_signifyd -#: model:ir.model.fields,field_description:website_sale_signifyd.field_signifyd_connector__website_ids -msgid "Used on Websites" -msgstr "Utilizado en Sitos Web" - -#. module: website_sale_signifyd -#: model:ir.model,name:website_sale_signifyd.model_website -msgid "Website" -msgstr "Sitio Web" - -#. module: website_sale_signifyd -#: model:ir.model.fields.selection,name:website_sale_signifyd.selection__signifyd_case__order_outcome__pending -msgid "pending" -msgstr "Pendiente" diff --git a/website_sale_signifyd/migrations/15.0.1.1.0/post-migration.py b/website_sale_signifyd/migrations/15.0.1.1.0/post-migration.py deleted file mode 100644 index c9404a5a..00000000 --- a/website_sale_signifyd/migrations/15.0.1.1.0/post-migration.py +++ /dev/null @@ -1,9 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - - -def migrate(cr, version): - cr.execute(''' - UPDATE signifyd_case - SET checkpoint_action = 'ACCEPT' - WHERE guarantee_disposition = 'APPROVED' - ''') diff --git a/website_sale_signifyd/models/__init__.py b/website_sale_signifyd/models/__init__.py deleted file mode 100644 index fe7d814f..00000000 --- a/website_sale_signifyd/models/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from . import partner -from . import payment -from . import sale_order -from . import signifyd -from . import signifyd_connector -from . import stock -from . import website diff --git a/website_sale_signifyd/models/partner.py b/website_sale_signifyd/models/partner.py deleted file mode 100644 index 847a813a..00000000 --- a/website_sale_signifyd/models/partner.py +++ /dev/null @@ -1,22 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from odoo import api, fields, models - - -class ResPartner(models.Model): - _inherit = 'res.partner' - - signifyd_case_ids = fields.One2many('signifyd.case', 'partner_id', string='Signifyd Cases') - signifyd_case_count = fields.Integer(compute='_compute_signifyd_stats', string='Signifyd Cases') - signifyd_average_score = fields.Float(compute='_compute_signifyd_stats', string='Signifyd Score') - - @api.depends('signifyd_case_ids') - def _compute_signifyd_stats(self): - for record in self: - cases = record.signifyd_case_ids - if cases: - record.signifyd_case_count = len(cases) - record.signifyd_average_score = sum(cases.mapped('score')) / record.signifyd_case_count - else: - record.signifyd_case_count = 0 - record.signifyd_average_score = 0 diff --git a/website_sale_signifyd/models/payment.py b/website_sale_signifyd/models/payment.py deleted file mode 100644 index 947756e9..00000000 --- a/website_sale_signifyd/models/payment.py +++ /dev/null @@ -1,14 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from odoo import api, fields, models - - -class PaymentProvider(models.Model): - _inherit = 'payment.provider' - - signifyd_case_type = fields.Selection([ - ('', 'No Case'), - ('SCORE', 'Score'), - ('DECISION', 'Decision'), - ('GUARANTEE', 'Guarantee'), - ], string='Signifyd Case Creation', default='') diff --git a/website_sale_signifyd/models/sale_order.py b/website_sale_signifyd/models/sale_order.py deleted file mode 100644 index 890c94e1..00000000 --- a/website_sale_signifyd/models/sale_order.py +++ /dev/null @@ -1,174 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from odoo import api, fields, models -from odoo.exceptions import UserError -from odoo.http import request - - -class SaleOrder(models.Model): - _inherit = 'sale.order' - - signifyd_case_id = fields.Many2one('signifyd.case', readonly=1, copy=False) - singifyd_score = fields.Float(related='signifyd_case_id.score') - signifyd_checkpoint_action = fields.Selection(string='Signifyd Action', related='signifyd_case_id.checkpoint_action') - - def action_view_signifyd_case(self): - self.ensure_one() - if not self.signifyd_case_id: - raise UserError('This order has no Signifyd Case') - form_id = self.env.ref('website_sale_signifyd.signifyd_case_form_view').id - context = {'create': False, 'delete': False} - return { - 'type': 'ir.actions.act_window', - 'name': 'Signifyd Case', - 'view_mode': 'form', - 'views': [(form_id, 'form')], - 'res_model': 'signifyd.case', - 'res_id': self.signifyd_case_id.id, - 'context': context, - } - - def action_confirm(self): - res = super().action_confirm() - for sale in self.filtered(lambda so: so._should_post_signifyd()): - _case = sale.post_signifyd_case() - return res - - def _should_post_signifyd(self): - # If we have no transaction/acquirer we will still send! - # this case is useful for admin or free orders but could be customized here. - case_required = bool(self.website_id.signifyd_connector_id.signifyd_case_type) - a_case_types = self.transaction_ids.mapped('acquirer_id.signifyd_case_type') - if a_case_types: - case_required = any(a_case_types) - return self.state in ('sale', 'done') and not self.signifyd_case_id and case_required - - def post_signifyd_case(self): - if not self.website_id.signifyd_connector_id: - return - browser_ip_address = request.httprequest.environ['REMOTE_ADDR'] - if request.session: - checkout_token = request.session.session_token - order_session_id = checkout_token - else: - checkout_token = '' - # Session values for Signifyd post - sig_vals = self._prepare_signifyd_case_values(order_session_id, checkout_token, browser_ip_address) - - case = self.env['signifyd.case'].post_case(self.website_id.signifyd_connector_id, sig_vals) - - success_response = case.get('investigationId') - if success_response: - new_case = self.env['signifyd.case'].create({ - 'order_id': self.id, - 'case_id': success_response, - 'name': success_response, - 'partner_id': self.partner_id.id, - }) - self.write({'signifyd_case_id': new_case.id}) - return new_case - # TODO do we need to raise an exception? - return None - - @api.model - def _prepare_signifyd_case_values(self, order_session_id, checkout_token, browser_ip_address): - decision_request = self.website_id.signifyd_connector_id.signifyd_case_type or 'DECISION' - - # find the highest 'acquirer override' - # note that we shouldn't be here if the override would prevent sending - a_case_types = self.transaction_ids.mapped('acquirer_id.signifyd_case_type') - if a_case_types and 'GUARANTEE' in a_case_types: - decision_request = 'GUARANTEE' - elif a_case_types and 'SCORE' in a_case_types: - decision_request = 'SCORE' - elif a_case_types and 'DECISION' in a_case_types: - decision_request = 'DECISION' - - tx_status_type = { - 'draft': 'FAILURE', - 'pending': 'PENDING', - 'authorized': 'SUCCESS', - 'done': 'SUCCESS', - 'cancel': 'FAILURE', - 'error': 'ERROR', - } - recipients = self.partner_invoice_id + self.partner_shipping_id - new_case_vals = { - 'decisionRequest': { - 'paymentFraud': decision_request, - }, - 'purchase': { - "orderSessionId": order_session_id, - "orderId": self.id, - "checkoutToken": checkout_token, - "browserIpAddress": browser_ip_address, - "currency": self.partner_id.currency_id.name, - "orderChannel": "WEB", - "totalPrice": self.amount_total, - 'products': [ - { - "itemId": line.product_id.id, - "itemName": line.product_id.name, - "itemIsDigital": False, - "itemCategory": line.product_id.categ_id.name, - "itemUrl": line.product_id.website_url or '', - "itemQuantity": line.product_uom_qty, - "itemPrice": line.price_unit, - "itemWeight": line.product_id.weight or 0.1, - } - for line in self.order_line if line.product_id - ], - 'shipments': [{ - "shipper": carrier.name, - "shippingMethod": "ground", - "shippingPrice": self.amount_delivery, - } - for carrier in self.carrier_id - ], - }, - 'recipients': [ - { - "fullName": partner.name, - "confirmationEmail": partner.email, - "confirmationPhone": partner.phone, - "organization": partner.company_id.name, - "deliveryAddress": { - "streetAddress": partner.street, - "unit": partner.street2, - "city": partner.city, - "provinceCode": partner.state_id.code, - "postalCode": partner.zip, - "countryCode": partner.country_id.code, - } - } - for partner in recipients - ], - 'transactions': [ - { - "parentTransactionId": None, - "transactionId": tx.id, - "gateway": tx.acquirer_id.name, - "paymentMethod": "CREDIT_CARD", - "gatewayStatusCode": tx_status_type.get(tx.state, 'PENDING'), - "type": "AUTHORIZATION", - "currency": self.partner_id.currency_id.name, - "amount": tx.amount, - # "avsResponseCode": "Y", - # "cvvResponseCode": "N", - "checkoutPaymentDetails": { - "holderName": tx.partner_id.name, - "billingAddress": { - "streetAddress": tx.partner_id.street, - "unit": tx.partner_id.street2, - "city": tx.partner_id.city, - "provinceCode": tx.partner_id.state_id.code, - "postalCode": tx.partner_id.zip, - "countryCode": tx.partner_id.country_id.code, - } - } - } - for tx in self.transaction_ids - ], - } - - return new_case_vals diff --git a/website_sale_signifyd/models/signifyd.py b/website_sale_signifyd/models/signifyd.py deleted file mode 100644 index 0bce4b96..00000000 --- a/website_sale_signifyd/models/signifyd.py +++ /dev/null @@ -1,165 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -import requests -import json -from datetime import datetime as dt -from odoo import api, fields, models, _ -from odoo.exceptions import UserError - - -class SignifydCase(models.Model): - _name = 'signifyd.case' - _description = 'Stores Signifyd case information on orders.' - - order_id = fields.Many2one('sale.order', required=True) - partner_id = fields.Many2one('res.partner') - case_id = fields.Char(string='Case ID') - uuid = fields.Char(string='Unique ID') - status = fields.Selection([ - ('OPEN', 'Open'), - ('DISMISSED', 'Dismissed'), - ], string='Case Status') - - name = fields.Char(string='Headline') - team_name = fields.Char(string='Team Name') - team_id = fields.Char(string='Team ID') - last_update = fields.Date('Last Update') - - review_disposition = fields.Selection([ - ('UNSET', 'Pending'), - ('FRAUD', 'Fraudulent'), - ('GOOD', 'Good'), - ], string='Review Status') - - order_outcome = fields.Selection([ - ('PENDING', 'pending'), - ('SUCCESSFUL', 'Successful'), - ]) - - guarantee_disposition = fields.Selection([ - ('IN_REVIEW', 'Reviewing'), - ('PENDING', 'Pending'), - ('APPROVED', 'Approved'), - ('DECLINED', 'Declined'), - ('CANCELED', 'Canceled'), - ], string='Guarantee Status') - disposition_reason = fields.Char('Disposition Reason') - score = fields.Float(string='Transaction Score') - adjusted_score = fields.Float(string='Adjusted Score') - signifyd_url = fields.Char('Signifyd.com', compute='_compute_signifyd_url') - checkpoint_action = fields.Selection([ - ('ACCEPT', 'Accept'), - ('HOLD', 'Hold'), - ('REJECT', 'Reject'), - ], string='Checkpoint Action') - - def _get_connector(self): - return self.order_id.website_id.signifyd_connector_id - - @api.model - def _compute_signifyd_url(self): - for record in self: - if record.case_id: - self.signifyd_url = 'https://app.signifyd.com/cases/%s' % (record.case_id, ) - else: - self.signifyd_url = '' - - def write(self, vals): - original_disposition = {c: c.guarantee_disposition for c in self} - res = super(SignifydCase, self).write(vals) - disposition = vals.get('guarantee_disposition', False) - for case in self.filtered(lambda c: c.order_id and original_disposition[c] != disposition): - case.order_id.message_post(body=_('Signifyd Updated Record to %s' % disposition), - subtype_xmlid='website_sale_signifyd.disposition_change') - return res - - @api.model - def post_case(self, connector, values): - headers = connector.get_headers() - data = json.dumps(values, indent=4, sort_keys=True, default=str) - - # TODO this should be in `signifyd.connector` - r = requests.post( - connector.API_URL + '/cases', - headers=headers, - data=data, - ) - return r.json() - - def get_case(self): - self.ensure_one() - if not self.case_id: - raise UserError(_('Case not represented in Signifyd.')) - connector = self._get_connector() - headers = connector.get_headers() - r = requests.get( - connector.API_URL + '/cases/' + str(self.case_id), - headers=headers - ) - return r.json() - - def action_force_update_case(self): - for record in self: - record.update_case_info() - - def update_case_info(self, vals=None): - self.ensure_one() - if not self.case_id: - raise UserError(_('Case not represented in Signifyd.')) - if not vals: - case = self.get_case() - case_id = case.get('caseId') - if not case_id: - raise ValueError(_('Signifyd Case has no ID?')) - team_id = case.get('teamId', self.team_id) - team_name = case.get('teamName', self.team_name) - uuid = case.get('uuid', self.uuid) - status = case.get('status', self.status) - review_disposition = case.get('reviewDisposition', self.review_disposition) - order_outcome = case.get('orderOutcome', self.order_outcome) - guarantee_disposition = case.get('guaranteeDisposition', self.guarantee_disposition) - adjusted_score = case.get('adjustedScore', self.adjusted_score) - score = case.get('score', self.score) - checkpoint_action = case.get('checkpointAction', self.checkpoint_action) - if not checkpoint_action and guarantee_disposition: - if guarantee_disposition == 'APPROVED': - checkpoint_action = 'ACCEPT' - elif guarantee_disposition == 'DECLINED': - checkpoint_action = 'REJECT' - else: - checkpoint_action = 'HOLD' - - vals = { - 'case_id': case_id, - 'team_id': team_id, - 'team_name': team_name, - 'uuid': uuid, - 'status': status, - 'review_disposition': review_disposition, - 'order_outcome': order_outcome, - 'adjusted_score': adjusted_score, - 'guarantee_disposition': guarantee_disposition, - 'score': score, - 'last_update': dt.now(), # why not just use - 'checkpoint_action': checkpoint_action, - } - - outcome = vals.get('guarantee_disposition') - checkpoint_action = vals.get('checkpoint_action') - if outcome == 'DECLINED' or checkpoint_action == 'REJECT': - connector = self._get_connector() - for user in connector.notify_user_ids: - self.create_notification(user, outcome or checkpoint_action) - - self.write(vals) - - def create_notification(self, user, outcome): - self.ensure_one() - vals = { - 'summary': 'Signifyd Case %s %s' % (self.case_id, outcome), - 'activity_type_id': self.env.ref('mail.mail_activity_data_todo').id, - 'user_id': user.id, - 'res_id': self.order_id.id, - 'res_model_id': self.env['ir.model']._get(self.order_id._name).id, - } - self.env['mail.activity'].create(vals) diff --git a/website_sale_signifyd/models/signifyd_connector.py b/website_sale_signifyd/models/signifyd_connector.py deleted file mode 100644 index 6065d8dc..00000000 --- a/website_sale_signifyd/models/signifyd_connector.py +++ /dev/null @@ -1,168 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -import requests -from datetime import datetime as dt -from base64 import b64encode -import json - -from odoo import api, fields, models - - -class SignifydConnector(models.Model): - _name = 'signifyd.connector' - _description = 'Interact with Signifyd API' - - name = fields.Char(string='Connector Name', required=True) - test_mode = fields.Boolean(string='Test Mode') - secret_key = fields.Char(string='API Key', required=True) - secret_key_test = fields.Char(string='TEST API Key') - webhooks_registered = fields.Boolean(string='Successfully Registered Webhooks') - notify_user_ids = fields.Many2many('res.users', string='Receive decline notifications') - website_ids = fields.One2many('website', 'signifyd_connector_id', string='Used on Websites') - signifyd_case_type = fields.Selection([ - ('', 'No Case'), - ('SCORE', 'Score'), - ('DECISION', 'Decision'), - ('GUARANTEE', 'Guarantee'), - ], string='Default Case Creation', help='Used for internal/admin orders, overridden by payment acquirer.', - required=True, default='') - - # TODO ideally this would be a regular constant - # however other entities currently use this by reference - API_URL = 'https://api.signifyd.com/v2' - - def get_headers(self): - self.ensure_one() - # Check for prod or test mode - if self.test_mode: - api_key = self.secret_key_test - else: - api_key = self.secret_key - - b64_auth_key = b64encode(api_key.encode()).decode().replace('=', '') - - headers = { - 'Authorization': 'Basic ' + b64_auth_key, - 'Content-Type': 'application/json', - } - - return headers - - def register_webhooks(self): - self.ensure_one() - headers = self.get_headers() - # This should come from the website... - # we may need a better way to link the connector to the website. - base_url = None - website = self.env['website'].search([('signifyd_connector_id', '=', self.id)], limit=1) - if website and website.domain: - base_url = website.domain - if base_url.find('://') <= 0: # documentation says if no protocol use http - base_url = 'http://' + base_url - if not base_url: - base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') - values = { - "webhooks": [ - # Given we are creating the cases, we do not need to know about it - # { - # "event": "CASE_CREATION", - # "url": base_url + "/signifyd/cases/update" - # }, - { - "event": "CASE_RESCORE", - "url": base_url + "/signifyd/cases/update" - }, - { - "event": "CASE_REVIEW", - "url": base_url + "/signifyd/cases/update" - }, - { - "event": "GUARANTEE_COMPLETION", - "url": base_url + "/signifyd/cases/update" - }, - { - "event": "DECISION_MADE", - "url": base_url + "/signifyd/cases/update" - }, - ] - } - data = json.dumps(values, indent=4) - r = requests.post( - self.API_URL + '/teams/webhooks', - headers=headers, - data=data, - ) - # r.raise_for_status() - return r - - def action_register_webhooks(self): - notification = { - 'type': 'ir.actions.client', - 'tag': 'display_notification', - 'params': { - 'title': ('Signifyd Connector'), - 'sticky': True, - }, - } - - res = self.register_webhooks() - - if 200 <= res.status_code < 300: - notification['params']['type'] = 'success' - notification['params']['message'] = 'Successfully registered webhooks with Signifyd.' - self.webhooks_registered = True - return notification - - else: - notification['params']['type'] = 'danger' - notification['params']['message'] = res.content.decode('utf-8') - try: - # trying to make a better error, not be exhaustive with error handling. - object = json.loads(notification['params']['message']) - notification['params']['message'] = '\n'.join([e[0] for e in (object.get('errors') or {}).values()]) - except: - pass - self.webhooks_registered = False - return notification - - def process_post_values(self, post): - # Construct dict from request data for endpoints - uuid = post.get('uuid') - case_id = post.get('caseId') - team_name = post.get('teamName') - team_id = post.get('teamId') - review_disposition = post.get('reviewDisposition') - guarantee_disposition = post.get('guaranteeDisposition') - order_outcome = post.get('orderOutcome') - status = post.get('status') - score = post.get('score') - disposition_reason = post.get('dispositionReason') - disposition = post.get('disposition') - checkpoint_action = post.get('checkpointAction', '') - if not checkpoint_action and guarantee_disposition: - if guarantee_disposition == 'APPROVED': - checkpoint_action = 'ACCEPT' - elif guarantee_disposition == 'DECLINED': - checkpoint_action = 'REJECT' - else: - checkpoint_action = 'HOLD' - last_update = str(dt.now()) - - values = {} - - # Validate that the order and case match the request - values.update({'uuid': uuid}) if uuid else '' - values.update({'team_name': team_name}) if team_name else '' - values.update({'team_id': team_id}) if team_id else '' - values.update({'review_disposition': review_disposition}) if review_disposition else '' - values.update({'guarantee_disposition': guarantee_disposition}) if guarantee_disposition else '' - values.update({'order_outcome': order_outcome}) if order_outcome else '' - values.update({'status': status}) if status else '' - values.update({'score': score}) if score else '' - values.update({'case_id': case_id}) if case_id else '' - values.update({'disposition_reason': disposition_reason}) if disposition_reason else '' - values.update({'disposition': disposition}) if disposition else '' - values.update({'last_update': last_update}) - values.update({'checkpoint_action': checkpoint_action}) - - return values diff --git a/website_sale_signifyd/models/stock.py b/website_sale_signifyd/models/stock.py deleted file mode 100644 index 41479df4..00000000 --- a/website_sale_signifyd/models/stock.py +++ /dev/null @@ -1,26 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from odoo import fields, models -from odoo.exceptions import UserError - -class StockPicking(models.Model): - _inherit = 'stock.picking' - - singifyd_case_id = fields.Many2one(related='sale_id.signifyd_case_id') - signifyd_hold = fields.Selection(related='sale_id.signifyd_checkpoint_action') - - def action_view_signifyd_case(self): - self.ensure_one() - if not self.singifyd_case_id: - raise UserError('No Signifyd Case') - 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} - return { - 'type': 'ir.actions.act_window', - 'name': 'Signifyd Case', - 'view_mode': 'form', - 'views': [(form_id, 'form')], - 'res_model': 'signifyd.case', - 'res_id': self.singifyd_case_id.id, - 'context': context, - } diff --git a/website_sale_signifyd/models/website.py b/website_sale_signifyd/models/website.py deleted file mode 100644 index 926f753f..00000000 --- a/website_sale_signifyd/models/website.py +++ /dev/null @@ -1,9 +0,0 @@ -# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. - -from odoo import api, fields, models - - -class Website(models.Model): - _inherit = 'website' - - signifyd_connector_id = fields.Many2one('signifyd.connector', ondelete='set null') diff --git a/website_sale_signifyd/security/ir.model.access.csv b/website_sale_signifyd/security/ir.model.access.csv deleted file mode 100644 index dbebf821..00000000 --- a/website_sale_signifyd/security/ir.model.access.csv +++ /dev/null @@ -1,9 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -manage_signifyd_connector,manage_signifyd_connector,model_signifyd_connector,base.group_erp_manager,1,1,1,1 -access_signifyd_connector,access_signifyd_connector,model_signifyd_connector,base.group_user,1,0,0,0 -public_signifyd_connector,public_signifyd_connector,model_signifyd_connector,base.group_public,1,0,0,0 -portal_signifyd_connector,portal_signifyd_connector,model_signifyd_connector,base.group_portal,1,0,0,0 -manage_signifyd_case,manage_signifyd_case,model_signifyd_case,base.group_erp_manager,1,1,1,1 -access_signifyd_case,access_signifyd_case,model_signifyd_case,base.group_user,1,0,0,0 -public_signifyd_case,public_signifyd_case,model_signifyd_case,base.group_public,1,0,0,0 -portal_signifyd_case,portal_signifyd_case,model_signifyd_case,base.group_portal,1,0,0,0 \ No newline at end of file diff --git a/website_sale_signifyd/tests/__init__.py b/website_sale_signifyd/tests/__init__.py deleted file mode 100644 index 177d87f1..00000000 --- a/website_sale_signifyd/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import test_order_flow diff --git a/website_sale_signifyd/tests/test_order_flow.py b/website_sale_signifyd/tests/test_order_flow.py deleted file mode 100644 index e69de29b..00000000 diff --git a/website_sale_signifyd/views/partner_views.xml b/website_sale_signifyd/views/partner_views.xml deleted file mode 100644 index 3f76b8b3..00000000 --- a/website_sale_signifyd/views/partner_views.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - res.partner.form.inherit - res.partner - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/website_sale_signifyd/views/payment_views.xml b/website_sale_signifyd/views/payment_views.xml deleted file mode 100644 index d994f9dc..00000000 --- a/website_sale_signifyd/views/payment_views.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - provider.form.inherit.website.inherit - payment.provider - - - - - - - - - \ No newline at end of file diff --git a/website_sale_signifyd/views/sale_views.xml b/website_sale_signifyd/views/sale_views.xml deleted file mode 100644 index 368195c0..00000000 --- a/website_sale_signifyd/views/sale_views.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - sale.order.form.inherit - sale.order - - - - - - - - - - - - - - - - - - - - sale.order.tree.inherit - sale.order - - - - - - - - - - Signifyd Updated - sale.order - - Signifyd Status Updated - signifyd_case_id.checkpoint_action - - - \ No newline at end of file diff --git a/website_sale_signifyd/views/signifyd_views.xml b/website_sale_signifyd/views/signifyd_views.xml deleted file mode 100644 index 34d05dc0..00000000 --- a/website_sale_signifyd/views/signifyd_views.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - signifyd.form.view - signifyd.case - -
-
-
- - -
- - - - - -
-
-

- -

- -
- - - - - - - - - - - - - - - -
-
-
-
- - - - Signifyd Case Information - signifyd.case - form - - - - - signifyd.form.view - signifyd.connector - -
-
-
- - -
- -
- - - Webhooks Active - -
-
- - - Webhooks Inactive - -
-
-
-
- - - - - - -

- Optional: Add users to be notified if a sale order is declined by Signifyd. -

- - -
-
-
- -
-
- - - signifyd.tree.view - signifyd.connector - - - - - - - - - - - Signifyd Connectors - signifyd.connector - tree,form - - - - -
\ No newline at end of file diff --git a/website_sale_signifyd/views/stock_views.xml b/website_sale_signifyd/views/stock_views.xml deleted file mode 100644 index 4134fe2d..00000000 --- a/website_sale_signifyd/views/stock_views.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - stock.picking.form.view.inherit - stock.picking - - - - - -