Source code for connector.backend_model
# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Guewen Baconnier
# Copyright 2013 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import models, fields, api
from . import backend
[docs]class ConnectorBackend(models.AbstractModel):
""" An instance of an external backend to synchronize with.
The backends have to ``_inherit`` this model in the connectors
modules.
"""
_name = 'connector.backend'
_description = 'Connector Backend'
_backend_type = None
name = fields.Char(required=True)
# replace by a selection in concrete models
version = fields.Selection(selection=[], required=True)
[docs] @api.multi
def get_backend(self):
""" For a record of backend, returns the appropriate instance
of :py:class:`~connector.backend.Backend`.
"""
self.ensure_one()
if self._backend_type is None:
raise ValueError('The backend %s has no _backend_type' % self)
return backend.get_backend(self._backend_type, self.version)
[docs]class ExternalBinding(models.AbstractModel):
""" An abstract model for bindings to external records.
An external binding is a binding between a backend and OpenERP. 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 OpenERP 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:
openerp_id
The many2one to the record it links (used by ``_inherits``).
backend_id
The many2one to the backend (for instance ``magento.backend``).
magento_id or prestashop_id or ...
The ID on the backend.
sync_date
Last date of synchronization
The definition of the relations in ``_columns`` 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': 'openerp_id'}
openerp_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')
magento_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