def run(self, binding_id): """ Export the picking to Magento """ picking = self.session.browse(self.model._name, binding_id) picking_method = picking.picking_method if picking_method == 'complete': args = self._get_args(picking) elif picking_method == 'partial': lines_info = self._get_lines_info(picking) if not lines_info: raise NothingToDoJob(_('Canceled: the delivery order does not ' 'contain lines from the original ' 'sale order.')) args = self._get_args(picking, lines_info) else: raise ValueError("Wrong value for picking_method, authorized " "values are 'partial' or 'complete', " "found: %s" % picking_method) try: magento_id = self.backend_adapter.create(*args) except xmlrpclib.Fault as err: # When the shipping is already created on Magento, it returns: # <Fault 102: u"Impossible de faire # l\'exp\xe9dition de la commande."> if err.faultCode == 102: raise NothingToDoJob('Canceled: the delivery order already ' 'exists on Magento (fault 102).') else: raise else: self.binder.bind(magento_id, binding_id)
def _rule_global(self, record, method): """ Rule always executed, whichever is the selected rule """ # the order has been canceled since the job has been created order_id = record['increment_id'] if record['state'] == 'canceled': raise NothingToDoJob('Order %s canceled' % order_id) max_days = method.days_before_cancel if max_days: fmt = '%Y-%m-%d %H:%M:%S' order_date = datetime.strptime(record['created_at'], fmt) if order_date + timedelta(days=max_days) < datetime.now(): raise NothingToDoJob('Import of the order %s canceled ' 'because it has not been paid since %d ' 'days' % (order_id, max_days))
def _import_dependencies(self): record = self.prestashop_record try: self._check_dependency(record['id_supplier'], 'prestashop.supplier') self._check_dependency(record['id_product'], 'prestashop.product.product') if record['id_product_attribute'] != '0': self._check_dependency(record['id_product_attribute'], 'prestashop.product.combination') except PrestaShopWebServiceError: raise NothingToDoJob('Error fetching a dependency')
def _import_dependencies(self): record = self.tienda_nube_record try: self._import_dependency(record['id_supplier'], 'tienda_nube.supplier') self._import_dependency(record['id_product'], 'tienda_nube.product.template') if record['id_product_attribute'] != '0': self._import_dependency(record['id_product_attribute'], 'tienda_nube.product.combination') except TiendaNubeWebServiceError: raise NothingToDoJob('Error fetching a dependency')
def _rule_global(self, record, method): """ Rule always executed, whichever is the selected rule """ order_id = record['id'] max_days = method.days_before_cancel if not max_days: return if self._get_paid_amount(record) != 0.0: return fmt = '%Y-%m-%d %H:%M:%S' order_date = datetime.strptime(record['date_add'], fmt) if order_date + timedelta(days=max_days) < datetime.now(): raise NothingToDoJob('Import of the order %s canceled ' 'because it has not been paid since %d ' 'days' % (order_id, max_days))
def _rule_state(self, record, mode): """Check if order is importable by its state. If `backend_record.importable_order_state_ids` is valued we check if current order is in the list. If not, the job fails gracefully. """ if self.backend_record.importable_order_state_ids: ps_state_id = record['current_state'] state = self.binder_for('prestashop.sale.order.state').to_odoo( ps_state_id, unwrap=1) if not state: raise FailedJobError( _("The configuration is missing " "for sale order state with PS ID=%s.\n\n" "Resolution:\n" " - Use the automatic import in 'Connectors > PrestaShop " "Backends', button 'Synchronize base data'.") % (ps_state_id, )) if state not in self.backend_record.importable_order_state_ids: raise NothingToDoJob( _('Import of the order with PS ID=%s canceled ' 'because its state is not importable') % record['id'])
def _rule_never(self, record, method): """ Never import the order """ raise NothingToDoJob('Orders with payment method %s ' 'are never imported.' % record['payment']['method'])