parent
c7f3b94037
commit
adb662d4ef
|
@ -123,7 +123,7 @@ Screenshot:
|
||||||
|
|
||||||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
||||||
:alt: Try me on Runbot
|
:alt: Try me on Runbot
|
||||||
:target: https://runbot.odoo-community.org/runbot/134/9.0
|
:target: https://runbot.odoo-community.org/runbot/134/10.0
|
||||||
|
|
||||||
Known issues / Roadmap
|
Known issues / Roadmap
|
||||||
======================
|
======================
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<record model="changeset.field.rule" id="changeset_field_rule_street">
|
<record model="changeset.field.rule" id="changeset_field_rule_street">
|
||||||
<field name="field_id" ref="base.field_res_partner_street"/>
|
<field name="field_id" ref="base.field_res_partner_street"/>
|
||||||
<field name="action">validate</field>
|
<field name="action">auto</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="changeset.field.rule" id="changeset_field_rule_street2">
|
<record model="changeset.field.rule" id="changeset_field_rule_street2">
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
<record model="changeset.field.rule" id="changeset_field_rule_country_id">
|
<record model="changeset.field.rule" id="changeset_field_rule_country_id">
|
||||||
<field name="field_id" ref="base.field_res_partner_country_id"/>
|
<field name="field_id" ref="base.field_res_partner_country_id"/>
|
||||||
<field name="action">validate</field>
|
<field name="action">auto</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="changeset.field.rule" id="changeset_field_rule_credit_limit">
|
<record model="changeset.field.rule" id="changeset_field_rule_credit_limit">
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# Copyright 2015-2017 Camptocamp SA
|
# Copyright 2015-2017 Camptocamp SA
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import models, fields, api
|
from odoo import api, fields, models
|
||||||
from odoo.tools.cache import ormcache
|
from odoo.tools.cache import ormcache
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# Copyright 2015-2017 Camptocamp SA
|
# Copyright 2015-2017 Camptocamp SA
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import models, fields, api
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
class ResPartner(models.Model):
|
class ResPartner(models.Model):
|
||||||
|
@ -17,13 +17,13 @@ class ResPartner(models.Model):
|
||||||
compute='_count_pending_changesets',
|
compute='_count_pending_changesets',
|
||||||
search='_search_count_pending_changesets')
|
search='_search_count_pending_changesets')
|
||||||
|
|
||||||
@api.one
|
|
||||||
@api.depends('changeset_ids', 'changeset_ids.state')
|
@api.depends('changeset_ids', 'changeset_ids.state')
|
||||||
def _count_pending_changesets(self):
|
def _count_pending_changesets(self):
|
||||||
changesets = self.changeset_ids.filtered(
|
for rec in self:
|
||||||
lambda rev: rev.state == 'draft' and rev.partner_id == self
|
changesets = rec.changeset_ids.filtered(
|
||||||
)
|
lambda rev: rev.state == 'draft' and rev.partner_id == rec
|
||||||
self.count_pending_changesets = len(changesets)
|
)
|
||||||
|
rec.count_pending_changesets = len(changesets)
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def write(self, values):
|
def write(self, values):
|
||||||
|
|
|
@ -6,7 +6,8 @@ from itertools import groupby
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
|
|
||||||
from odoo import models, fields, api, exceptions, _
|
from odoo import api, fields, models
|
||||||
|
from odoo import exceptions, _
|
||||||
from odoo.osv.orm import setup_modifiers
|
from odoo.osv.orm import setup_modifiers
|
||||||
|
|
||||||
# sentinel object to be sure that no empty value was passed to
|
# sentinel object to be sure that no empty value was passed to
|
||||||
|
@ -52,14 +53,14 @@ class ResPartnerChangeset(models.Model):
|
||||||
models = self.env['ir.model'].search([])
|
models = self.env['ir.model'].search([])
|
||||||
return [(model.model, model.name) for model in models]
|
return [(model.model, model.name) for model in models]
|
||||||
|
|
||||||
@api.one
|
|
||||||
@api.depends('change_ids', 'change_ids.state')
|
@api.depends('change_ids', 'change_ids.state')
|
||||||
def _compute_state(self):
|
def _compute_state(self):
|
||||||
if all(change.state in ('done', 'cancel') for change
|
for rec in self:
|
||||||
in self.mapped('change_ids')):
|
if all(change.state in ('done', 'cancel') for change
|
||||||
self.state = 'done'
|
in rec.mapped('change_ids')):
|
||||||
else:
|
rec.state = 'done'
|
||||||
self.state = 'draft'
|
else:
|
||||||
|
rec.state = 'draft'
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def apply(self):
|
def apply(self):
|
||||||
|
@ -69,7 +70,7 @@ class ResPartnerChangeset(models.Model):
|
||||||
def cancel(self):
|
def cancel(self):
|
||||||
self.mapped('change_ids').cancel()
|
self.mapped('change_ids').cancel()
|
||||||
|
|
||||||
@api.multi
|
@api.model
|
||||||
def add_changeset(self, record, values):
|
def add_changeset(self, record, values):
|
||||||
""" Add a changeset on a partner
|
""" Add a changeset on a partner
|
||||||
|
|
||||||
|
@ -306,25 +307,25 @@ class ResPartnerChangesetChange(models.Model):
|
||||||
_old_value_fields +
|
_old_value_fields +
|
||||||
_new_value_fields)
|
_new_value_fields)
|
||||||
|
|
||||||
@api.one
|
|
||||||
@api.depends('changeset_id.partner_id')
|
@api.depends('changeset_id.partner_id')
|
||||||
def _compute_origin_values(self):
|
def _compute_origin_values(self):
|
||||||
field_name = self.get_field_for_type(self.field_id, 'origin')
|
for rec in self:
|
||||||
if self.state == 'draft':
|
field_name = rec.get_field_for_type(rec.field_id, 'origin')
|
||||||
value = self.changeset_id.partner_id[self.field_id.name]
|
if rec.state == 'draft':
|
||||||
else:
|
value = rec.changeset_id.partner_id[rec.field_id.name]
|
||||||
old_field = self.get_field_for_type(self.field_id, 'old')
|
else:
|
||||||
value = self[old_field]
|
old_field = rec.get_field_for_type(rec.field_id, 'old')
|
||||||
setattr(self, field_name, value)
|
value = rec[old_field]
|
||||||
|
setattr(rec, field_name, value)
|
||||||
|
|
||||||
@api.one
|
|
||||||
@api.depends(lambda self: self._value_fields)
|
@api.depends(lambda self: self._value_fields)
|
||||||
def _compute_value_display(self):
|
def _compute_value_display(self):
|
||||||
for prefix in ('origin', 'new'):
|
for rec in self:
|
||||||
value = getattr(self, 'get_%s_value' % prefix)()
|
for prefix in ('origin', 'new'):
|
||||||
if self.field_id.ttype == 'many2one' and value:
|
value = getattr(rec, 'get_%s_value' % prefix)()
|
||||||
value = value.display_name
|
if rec.field_id.ttype == 'many2one' and value:
|
||||||
setattr(self, '%s_value_display' % prefix, value)
|
value = value.display_name
|
||||||
|
setattr(rec, '%s_value_display' % prefix, value)
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def get_field_for_type(self, field, prefix):
|
def get_field_for_type(self, field, prefix):
|
||||||
|
@ -369,7 +370,8 @@ class ResPartnerChangesetChange(models.Model):
|
||||||
"""
|
"""
|
||||||
changes_ok = self.browse()
|
changes_ok = self.browse()
|
||||||
key = attrgetter('changeset_id')
|
key = attrgetter('changeset_id')
|
||||||
for changeset, changes in groupby(self.sorted(key=key), key=key):
|
for changeset, changes in groupby(self.with_context(
|
||||||
|
__no_changeset=True).sorted(key=key), key=key):
|
||||||
values = {}
|
values = {}
|
||||||
partner = changeset.partner_id
|
partner = changeset.partner_id
|
||||||
for change in changes:
|
for change in changes:
|
||||||
|
@ -405,7 +407,7 @@ class ResPartnerChangesetChange(models.Model):
|
||||||
'this one.')
|
'this one.')
|
||||||
)
|
)
|
||||||
|
|
||||||
partner.with_context(__no_changeset=True).write(values)
|
partner.write(values)
|
||||||
|
|
||||||
changes_ok.write({'state': 'done'})
|
changes_ok.write({'state': 'done'})
|
||||||
|
|
||||||
|
@ -455,7 +457,7 @@ class ResPartnerChangesetChange(models.Model):
|
||||||
else:
|
else:
|
||||||
return value
|
return value
|
||||||
|
|
||||||
@api.multi
|
@api.model
|
||||||
def _prepare_changeset_change(self, record, rule, field_name, value):
|
def _prepare_changeset_change(self, record, rule, field_name, value):
|
||||||
""" Prepare data for a changeset change
|
""" Prepare data for a changeset change
|
||||||
|
|
||||||
|
@ -494,6 +496,7 @@ class ResPartnerChangesetChange(models.Model):
|
||||||
|
|
||||||
return change, pop_value
|
return change, pop_value
|
||||||
|
|
||||||
|
@api.model
|
||||||
def fields_view_get(self, *args, **kwargs):
|
def fields_view_get(self, *args, **kwargs):
|
||||||
_super = super(ResPartnerChangesetChange, self)
|
_super = super(ResPartnerChangesetChange, self)
|
||||||
result = _super.fields_view_get(*args, **kwargs)
|
result = _super.fields_view_get(*args, **kwargs)
|
||||||
|
|
Loading…
Reference in New Issue