28
28
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
29
29
from openerp.addons.connector.queue.job import job
30
30
from openerp.addons.connector.unit.synchronizer import ImportSynchronizer
31
from openerp.addons.connector.connector import ConnectorUnit
31
32
from ..backend import prestashop
32
33
from ..connector import get_environment
34
from .adapter import GenericAdapter
36
from openerp.addons.connector.exception import FailedJobError
34
38
_logger = logging.getLogger(__name__)
274
class SaleImportRule(ConnectorUnit):
275
_model_name = ['prestashop.sale.order']
277
def _rule_always(self, record, method):
278
""" Always import the order """
281
def _rule_never(self, record, method):
282
""" Never import the order """
285
def _rule_paid(self, record, method):
286
""" Import the order only if it has received a payment """
287
return self._get_paid_amount(record) == record['total_paid']
289
def _get_paid_amount(self, record):
290
payment_adapter = self.get_connector_unit_for_model(
292
'__not_exist_prestashop.payment'
294
payment_ids = payment_adapter.search({
295
'filter[order_reference]': record['reference']
298
for payment_id in payment_ids:
299
payment = payment_adapter.read(payment_id['attrs']['id'])
300
paid_amount += float(payment['amount'])
303
_rules = {'always': _rule_always,
305
'authorized': _rule_paid,
306
'never': _rule_never,
309
def check(self, record):
310
""" Check whether the current sale order should be imported
311
or not. It will actually use the payment method configuration
312
and see if the chosen rule is fullfilled.
314
:returns: True if the sale order should be imported
317
session = self.session
318
payment_method = record['payment']
319
method_ids = session.search('payment.method',
320
[('name', '=', payment_method)])
322
raise FailedJobError(
323
"The configuration is missing for the Payment Method '%s'.\n\n"
325
"- Go to 'Sales > Configuration > Sales > Customer Payment "
327
"- Create a new Payment Method with name '%s'\n"
328
"-Eventually link the Payment Method to an existing Workflow "
329
"Process or create a new one." % (payment_method,
331
method = session.browse('payment.method', method_ids[0])
333
self._rules[method.import_rule](self, record, method)
270
337
class SaleOrderImport(PrestashopImportSynchronizer):
271
338
_model_name = ['prestashop.sale.order']
288
355
self._check_dependency(order['product_id'],
289
356
'prestashop.product.product')
358
def _has_to_skip(self):
359
""" Return True if the import can be skipped """
360
rules = self.get_connector_unit_for_model(SaleImportRule)
361
return rules.check(self.prestashop_record)
293
365
class TranslatableRecordImport(PrestashopImportSynchronizer):