mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
89 lines
3.1 KiB
Python
89 lines
3.1 KiB
Python
# © 2019-2021 Hibou Corp.
|
|
|
|
from odoo import api, models, fields, _
|
|
from odoo.addons.component.core import Component
|
|
from odoo.addons.queue_job.exception import RetryableJobError
|
|
|
|
|
|
class OpencartStockPicking(models.Model):
|
|
_name = 'opencart.stock.picking'
|
|
_inherit = 'opencart.binding'
|
|
_inherits = {'stock.picking': 'odoo_id'}
|
|
_description = 'Opencart Delivery Order'
|
|
|
|
odoo_id = fields.Many2one(comodel_name='stock.picking',
|
|
string='Stock Picking',
|
|
required=True,
|
|
ondelete='cascade')
|
|
opencart_order_id = fields.Many2one(comodel_name='opencart.sale.order',
|
|
string='Opencart Sale Order',
|
|
ondelete='set null')
|
|
|
|
def export_picking_done(self):
|
|
""" Export a complete or partial delivery order. """
|
|
self.ensure_one()
|
|
with self.backend_id.work_on(self._name) as work:
|
|
exporter = work.component(usage='record.exporter')
|
|
return exporter.run(self)
|
|
|
|
|
|
class StockPicking(models.Model):
|
|
_inherit = 'stock.picking'
|
|
|
|
opencart_bind_ids = fields.One2many(
|
|
comodel_name='opencart.stock.picking',
|
|
inverse_name='odoo_id',
|
|
string="Opencart Bindings",
|
|
)
|
|
|
|
|
|
class StockPickingAdapter(Component):
|
|
_name = 'opencart.stock.picking.adapter'
|
|
_inherit = 'opencart.adapter'
|
|
_apply_on = 'opencart.stock.picking'
|
|
|
|
def create(self, id, tracking):
|
|
api_instance = self.api_instance
|
|
tracking_comment = _('Order shipped with tracking number: %s') % (tracking, )
|
|
result = api_instance.orders.ship(id, tracking, tracking_comment)
|
|
if 'success' in result:
|
|
return result['success']
|
|
raise RetryableJobError('Shipping Order %s did not return an order response. (tracking: %s) %s' % (
|
|
str(id), str(tracking), str(result)))
|
|
|
|
|
|
class OpencartBindingStockPickingListener(Component):
|
|
_name = 'opencart.binding.stock.picking.listener'
|
|
_inherit = 'base.event.listener'
|
|
_apply_on = ['opencart.stock.picking']
|
|
|
|
def on_record_create(self, record, fields=None):
|
|
record.with_delay().export_picking_done()
|
|
|
|
|
|
class OpencartStockPickingListener(Component):
|
|
_name = 'opencart.stock.picking.listener'
|
|
_inherit = 'base.event.listener'
|
|
_apply_on = ['stock.picking']
|
|
|
|
def on_picking_dropship_done(self, record, picking_method):
|
|
return self.on_picking_out_done(record, picking_method)
|
|
|
|
def on_picking_out_done(self, record, picking_method):
|
|
"""
|
|
Create a ``opencart.stock.picking`` record. This record will then
|
|
be exported to Opencart.
|
|
|
|
:param picking_method: picking_method, can be 'complete' or 'partial'
|
|
:type picking_method: str
|
|
"""
|
|
sale = record.sale_id
|
|
if not sale:
|
|
return
|
|
for opencart_sale in sale.opencart_bind_ids:
|
|
self.env['opencart.stock.picking'].create({
|
|
'backend_id': opencart_sale.backend_id.id,
|
|
'odoo_id': record.id,
|
|
'opencart_order_id': opencart_sale.id,
|
|
})
|