121 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
# -*- coding: utf-8 -*-
 | 
						|
# Copyright 2013-2017 Camptocamp SA
 | 
						|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
 | 
						|
 | 
						|
 | 
						|
from odoo import models, fields
 | 
						|
 | 
						|
 | 
						|
class ConnectorBackend(models.AbstractModel):
 | 
						|
    """ An instance of an external backend to synchronize with.
 | 
						|
 | 
						|
    The backends have to ``_inherit`` this model in the connectors
 | 
						|
    modules.
 | 
						|
 | 
						|
    The components articulates around a collection, which in the context of the
 | 
						|
    connectors is called a Backend.
 | 
						|
 | 
						|
    It must be defined as a Model that inherits from ``'connector.backend'``.
 | 
						|
 | 
						|
    Example with the Magento Connector::
 | 
						|
 | 
						|
        # in connector_magento/models/magento_backend.py
 | 
						|
 | 
						|
        class MagentoBackend(models.Model):
 | 
						|
            _name = 'magento.backend'
 | 
						|
            _inherit = 'connector.backend'
 | 
						|
            _description = 'Magento Backend'
 | 
						|
 | 
						|
            # the version in not mandatory
 | 
						|
            @api.model
 | 
						|
            def _select_versions(self):
 | 
						|
                \"\"\" Available versions
 | 
						|
 | 
						|
                Can be inherited to add custom versions.
 | 
						|
                \"\"\"
 | 
						|
                return [('1.7', 'Magento 1.7')]
 | 
						|
 | 
						|
            location = fields.Char(string='Location', required=True)
 | 
						|
            username = fields.Char(string='Username')
 | 
						|
            password = fields.Char(string='Password')
 | 
						|
            versions = fields.Selection(
 | 
						|
                selection='_select_versions', required=True
 | 
						|
            )
 | 
						|
 | 
						|
 | 
						|
    """
 | 
						|
    _name = 'connector.backend'
 | 
						|
    _inherit = ['collection.base']
 | 
						|
    _description = 'Connector Backend'
 | 
						|
 | 
						|
 | 
						|
class ExternalBinding(models.AbstractModel):
 | 
						|
    """ An abstract model for bindings to external records.
 | 
						|
 | 
						|
    An external binding is a binding between a backend and Odoo.  For
 | 
						|
    example, for a partner, it could be ``magento.res.partner`` or for a
 | 
						|
    product, ``magento.product``.
 | 
						|
 | 
						|
    The final model, will be an ``_inherits`` of the Odoo model and
 | 
						|
    will ``_inherit`` this model.
 | 
						|
 | 
						|
    It will have a relation to the record (via ``_inherits``) and to the
 | 
						|
    concrete backend model (``magento.backend`` for instance).
 | 
						|
 | 
						|
    It will also contains all the data relative to the backend for the
 | 
						|
    record.
 | 
						|
 | 
						|
    It needs to implements at least these fields:
 | 
						|
 | 
						|
    odoo_id
 | 
						|
        The many2one to the record it links (used by ``_inherits``).
 | 
						|
 | 
						|
    backend_id
 | 
						|
        The many2one to the backend (for instance ``magento.backend``).
 | 
						|
 | 
						|
    external_id
 | 
						|
        The ID on the backend.
 | 
						|
 | 
						|
    sync_date
 | 
						|
        Last date of synchronization
 | 
						|
 | 
						|
 | 
						|
    The definition of the field relations is to be done in the
 | 
						|
    concrete classes because the relations themselves do not exist in
 | 
						|
    this addon.
 | 
						|
 | 
						|
    For example, for a ``res.partner.category`` from Magento, I would have
 | 
						|
    (this is a consolidation of all the columns from the abstract models,
 | 
						|
    in ``magentoerpconnect`` you would not find that)::
 | 
						|
 | 
						|
        class MagentoResPartnerCategory(models.Model):
 | 
						|
            _name = 'magento.res.partner.category'
 | 
						|
 | 
						|
            _inherits = {'res.partner.category': 'odoo_id'}
 | 
						|
 | 
						|
            odoo_id = fields.Many2one(comodel_name='res.partner.category',
 | 
						|
                                      string='Partner Category',
 | 
						|
                                      required=True,
 | 
						|
                                      ondelete='cascade')
 | 
						|
            backend_id = fields.Many2one(
 | 
						|
                comodel_name='magento.backend',
 | 
						|
                string='Magento Backend',
 | 
						|
                required=True,
 | 
						|
                ondelete='restrict')
 | 
						|
            external_id = fields.Char(string='ID on Magento')
 | 
						|
            tax_class_id = fields.Integer(string='Tax Class ID')
 | 
						|
 | 
						|
            _sql_constraints = [
 | 
						|
                ('magento_uniq', 'unique(backend_id, magento_id)',
 | 
						|
                 'Partner Tag with same ID on Magento already exists.'),
 | 
						|
            ]
 | 
						|
 | 
						|
 | 
						|
    """
 | 
						|
    _name = 'external.binding'
 | 
						|
    _description = 'External Binding (abstract)'
 | 
						|
 | 
						|
    sync_date = fields.Datetime(string='Last synchronization date')
 | 
						|
    # add other fields in concrete models
 | 
						|
    # XXX we could add a default 'external_id'
 |