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'
|