mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
121 lines
4.4 KiB
Python
121 lines
4.4 KiB
Python
# © 2019 Hibou Corp.
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
import odoo.addons.decimal_precision as dp
|
|
|
|
from odoo import models, fields, api
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.addons.queue_job.job import job
|
|
from odoo.addons.component.core import Component
|
|
from odoo.addons.queue_job.exception import RetryableJobError
|
|
|
|
|
|
class OpencartSaleOrder(models.Model):
|
|
_name = 'opencart.sale.order'
|
|
_inherit = 'opencart.binding'
|
|
_description = 'Opencart Sale Order'
|
|
_inherits = {'sale.order': 'odoo_id'}
|
|
|
|
odoo_id = fields.Many2one(comodel_name='sale.order',
|
|
string='Sale Order',
|
|
required=True,
|
|
ondelete='cascade')
|
|
opencart_order_line_ids = fields.One2many(
|
|
comodel_name='opencart.sale.order.line',
|
|
inverse_name='opencart_order_id',
|
|
string='Walmart Order Lines'
|
|
)
|
|
store_id = fields.Many2one('opencart.store', string='Store')
|
|
|
|
total_amount = fields.Float(
|
|
string='Total amount',
|
|
digits=dp.get_precision('Account')
|
|
)
|
|
|
|
@job(default_channel='root.opencart')
|
|
@api.model
|
|
def import_batch(self, backend, filters=None):
|
|
""" Prepare the import of Sales Orders from Opencart """
|
|
return super(OpencartSaleOrder, self).import_batch(backend, filters=filters)
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
opencart_bind_ids = fields.One2many(
|
|
comodel_name='opencart.sale.order',
|
|
inverse_name='odoo_id',
|
|
string="Opencart Bindings",
|
|
)
|
|
|
|
|
|
class OpencartSaleOrderLine(models.Model):
|
|
_name = 'opencart.sale.order.line'
|
|
_inherit = 'opencart.binding'
|
|
_description = 'Opencart Sale Order Line'
|
|
_inherits = {'sale.order.line': 'odoo_id'}
|
|
|
|
opencart_order_id = fields.Many2one(comodel_name='opencart.sale.order',
|
|
string='Opencart Sale Order',
|
|
required=True,
|
|
ondelete='cascade',
|
|
index=True)
|
|
odoo_id = fields.Many2one(comodel_name='sale.order.line',
|
|
string='Sale Order Line',
|
|
required=True,
|
|
ondelete='cascade')
|
|
backend_id = fields.Many2one(related='opencart_order_id.backend_id',
|
|
string='Opencart Backend',
|
|
readonly=True,
|
|
store=True,
|
|
required=False)
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
opencart_order_id = vals['opencart_order_id']
|
|
binding = self.env['opencart.sale.order'].browse(opencart_order_id)
|
|
vals['order_id'] = binding.odoo_id.id
|
|
binding = super(OpencartSaleOrderLine, self).create(vals)
|
|
return binding
|
|
|
|
|
|
class SaleOrderLine(models.Model):
|
|
_inherit = 'sale.order.line'
|
|
|
|
opencart_bind_ids = fields.One2many(
|
|
comodel_name='opencart.sale.order.line',
|
|
inverse_name='odoo_id',
|
|
string="Opencart Bindings",
|
|
)
|
|
|
|
|
|
class SaleOrderAdapter(Component):
|
|
_name = 'opencart.sale.order.adapter'
|
|
_inherit = 'opencart.adapter'
|
|
_apply_on = 'opencart.sale.order'
|
|
|
|
def search(self, filters=None):
|
|
api_instance = self.api_instance
|
|
api_filters = {}
|
|
if 'after_id' in filters:
|
|
api_filters['id_larger_than'] = filters['after_id']
|
|
if 'modified_from' in filters:
|
|
api_filters['modified_from'] = filters['modified_from']
|
|
orders_response = api_instance.orders.all(**api_filters)
|
|
if 'error' in orders_response and orders_response['error']:
|
|
raise ValidationError(str(orders_response))
|
|
|
|
if 'data' not in orders_response or not isinstance(orders_response['data'], list):
|
|
return []
|
|
|
|
orders = orders_response['data']
|
|
# Note that `store_id is None` is checked as it may not be in the output.
|
|
return map(lambda o: (o['order_id'], o.get('store_id', None), o.get('date_modified') or o.get('date_added')), orders)
|
|
|
|
def read(self, id):
|
|
api_instance = self.api_instance
|
|
record = api_instance.orders.get(id)
|
|
if 'data' in record and record['data']:
|
|
return record['data']
|
|
raise RetryableJobError('Order "' + str(id) + '" did not return an order response. ' + str(record))
|