mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Sometimes orders don't get imported, but after setting the import time back, they will be imported. Ultimately, we don't know why this is the case, but increasing this should help at the cost of having potentially more "previously imported" queue jobs. This should be a good trade off.
129 lines
4.3 KiB
Python
129 lines
4.3 KiB
Python
# © 2017,2018 Hibou Corp.
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
|
|
from datetime import datetime, timedelta
|
|
from logging import getLogger
|
|
from contextlib import contextmanager
|
|
|
|
from odoo import api, fields, models, _
|
|
from ...components.api.walmart import Walmart
|
|
|
|
_logger = getLogger(__name__)
|
|
|
|
IMPORT_DELTA_BUFFER = 600 # seconds
|
|
|
|
|
|
class WalmartBackend(models.Model):
|
|
_name = 'walmart.backend'
|
|
_description = 'Walmart Backend'
|
|
_inherit = 'connector.backend'
|
|
|
|
name = fields.Char(string='Name')
|
|
consumer_id = fields.Char(
|
|
string='Consumer ID',
|
|
required=True,
|
|
help='Walmart Consumer ID',
|
|
)
|
|
channel_type = fields.Char(
|
|
string='Channel Type',
|
|
required=True,
|
|
help='Walmart Channel Type',
|
|
)
|
|
private_key = fields.Char(
|
|
string='Private Key',
|
|
required=True,
|
|
help='Walmart Private Key'
|
|
)
|
|
warehouse_id = fields.Many2one(
|
|
comodel_name='stock.warehouse',
|
|
string='Warehouse',
|
|
required=True,
|
|
help='Warehouse to use for stock.',
|
|
)
|
|
company_id = fields.Many2one(
|
|
comodel_name='res.company',
|
|
related='warehouse_id.company_id',
|
|
string='Company',
|
|
readonly=True,
|
|
)
|
|
fiscal_position_id = fields.Many2one(
|
|
comodel_name='account.fiscal.position',
|
|
string='Fiscal Position',
|
|
help='Fiscal position to use on orders.',
|
|
)
|
|
analytic_account_id = fields.Many2one(
|
|
comodel_name='account.analytic.account',
|
|
string='Analytic account',
|
|
help='If specified, this analytic account will be used to fill the '
|
|
'field on the sale order created by the connector.'
|
|
)
|
|
team_id = fields.Many2one(comodel_name='crm.team', string='Sales Team')
|
|
sale_prefix = fields.Char(
|
|
string='Sale Prefix',
|
|
help="A prefix put before the name of imported sales orders.\n"
|
|
"For instance, if the prefix is 'WMT-', the sales "
|
|
"order 5571768504079 in Walmart, will be named 'WMT-5571768504079' "
|
|
"in Odoo.",
|
|
)
|
|
payment_mode_id = fields.Many2one(comodel_name='account.payment.mode', string="Payment Mode")
|
|
|
|
# New Product fields.
|
|
product_categ_id = fields.Many2one(comodel_name='product.category', string='Product Category',
|
|
help='Default product category for newly created products.')
|
|
|
|
acknowledge_order = fields.Selection([
|
|
('never', 'Never'),
|
|
('order_create', 'On Order Import'),
|
|
('order_confirm', 'On Order Confirmation'),
|
|
], string='Acknowledge Order')
|
|
|
|
|
|
import_orders_from_date = fields.Datetime(
|
|
string='Import sale orders from date',
|
|
)
|
|
|
|
@contextmanager
|
|
@api.multi
|
|
def work_on(self, model_name, **kwargs):
|
|
self.ensure_one()
|
|
walmart_api = Walmart(self.consumer_id, self.channel_type, self.private_key)
|
|
_super = super(WalmartBackend, self)
|
|
with _super.work_on(model_name, walmart_api=walmart_api, **kwargs) as work:
|
|
yield work
|
|
|
|
@api.model
|
|
def _scheduler_import_sale_orders(self):
|
|
# potential hook for customization (e.g. pad from date or provide its own)
|
|
backends = self.search([
|
|
('consumer_id', '!=', False),
|
|
('channel_type', '!=', False),
|
|
('private_key', '!=', False),
|
|
('import_orders_from_date', '!=', False),
|
|
])
|
|
return backends.import_sale_orders()
|
|
|
|
@api.multi
|
|
def import_sale_orders(self):
|
|
self._import_from_date('walmart.sale.order', 'import_orders_from_date')
|
|
return True
|
|
|
|
@api.multi
|
|
def _import_from_date(self, model_name, from_date_field):
|
|
import_start_time = datetime.now()
|
|
for backend in self:
|
|
from_date = backend[from_date_field]
|
|
if from_date:
|
|
from_date = fields.Datetime.from_string(from_date)
|
|
else:
|
|
from_date = None
|
|
|
|
self.env[model_name].with_delay().import_batch(
|
|
backend,
|
|
filters={'from_date': from_date, 'to_date': import_start_time}
|
|
)
|
|
# We add a buffer, but won't import them twice.
|
|
next_time = import_start_time - timedelta(seconds=IMPORT_DELTA_BUFFER)
|
|
next_time = fields.Datetime.to_string(next_time)
|
|
self.write({from_date_field: next_time})
|