From ba1c048162978dabd26dcf2b0d22d0aa787190aa Mon Sep 17 00:00:00 2001 From: Sandy Carter Date: Thu, 26 Mar 2015 14:30:02 -0400 Subject: [PATCH] Convert constraints to v8 --- .../model/res_partner_relation.py | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/partner_relations/model/res_partner_relation.py b/partner_relations/model/res_partner_relation.py index c3159d438..38fdaf1a2 100644 --- a/partner_relations/model/res_partner_relation.py +++ b/partner_relations/model/res_partner_relation.py @@ -221,92 +221,92 @@ class ResPartnerRelation(models.Model): 'active': True, } - def _check_dates(self, cr, uid, ids, context=None): - '''End date should not be before start date, if noth filled''' - for line in self.browse(cr, uid, ids, context=context): - if line.date_start and line.date_end: - if line.date_start > line.date_end: - return False - return True - - def _check_partner_type_left(self, cr, uid, ids, context=None): - '''Check left partner for required company or person''' - for this in self.browse(cr, uid, ids, context=context): - ptype = this.type_id.contact_type_left - company = this.left_partner_id.is_company - if (ptype == 'c' and not company) or (ptype == 'p' and company): - return False - return True - - def _check_partner_type_right(self, cr, uid, ids, context=None): - '''Check right partner for required company or person''' - for this in self.browse(cr, uid, ids, context=context): - ptype = this.type_id.contact_type_right - company = this.right_partner_id.is_company - if (ptype == 'c' and not company) or (ptype == 'p' and company): - return False - return True - - def _check_not_with_self(self, cr, uid, ids, context=None): - '''Not allowed to link partner to same partner''' - for this in self.browse(cr, uid, ids, context=context): - if this.left_partner_id == this.right_partner_id: - return False - return True - - def _check_relation_uniqueness(self, cr, uid, ids, context=None): - '''Forbid multiple active relations of the same type between the same - partners''' - for this in self.browse(cr, uid, ids, context=context): - if not this.active: - continue - domain = [ - ('type_id', '=', this.type_id.id), - ('active', '=', True), - ('id', '!=', this.id), - ('left_partner_id', '=', this.left_partner_id.id), - ('right_partner_id', '=', this.right_partner_id.id), - ] - if this.date_start: - domain += ['|', ('date_end', '=', False), - ('date_end', '>=', this.date_start)] - if this.date_end: - domain += ['|', ('date_start', '=', False), - ('date_start', '<=', this.date_end)] - if self.search(cr, uid, domain, context=context): - raise exceptions.Warning( - _('There is already a similar relation ' - 'with overlapping dates')) - - return True - - _constraints = [ - ( - _check_dates, - 'The starting date cannot be after the ending date.', - ['date_start', 'date_end'] - ), - ( - _check_partner_type_left, - 'The left partner is not applicable for this relation type.', - ['left_partner_id', 'type_id'] - ), - ( - _check_partner_type_right, - 'The right partner is not applicable for this relation type.', - ['right_partner_id', 'type_id'] - ), - ( - _check_not_with_self, - 'Partners cannot have a relation with themselves.', - ['left_partner_id', 'right_partner_id'] - ), - ( - _check_relation_uniqueness, - "The same relation can't be created twice.", - ['left_partner_id', 'right_partner_id', 'active'] - ) - ] + @api.one + @api.constrains('date_start', 'date_end') + def _check_dates(self): + """End date should not be before start date, if not filled + + :raises exceptions.Warning: When constraint is violated + """ + if (self.date_start and self.date_end and + self.date_start > self.date_end): + raise exceptions.Warning( + _('The starting date cannot be after the ending date.') + ) + + @api.one + @api.constrains('left_partner_id', 'type_id') + def _check_partner_type_left(self): + """Check left partner for required company or person + + :raises exceptions.Warning: When constraint is violated + """ + self._check_partner_type("left") + + @api.one + @api.constrains('right_partner_id', 'type_id') + def _check_partner_type_right(self): + """Check right partner for required company or person + + :raises exceptions.Warning: When constraint is violated + """ + self._check_partner_type("right") + + @api.one + def _check_partner_type(self, side): + """Check partner to left or right for required company or person + + :param str side: left or right + :raises exceptions.Warning: When constraint is violated + """ + assert side in ['left', 'right'] + ptype = getattr(self.type_id, "contact_type_%s" % side) + company = getattr(self, '%s_partner_id' % side).is_company + if (ptype == 'c' and not company) or (ptype == 'p' and company): + raise exceptions.Warning( + _('The %s partner is not applicable for this relation type.') % + side + ) + + @api.one + @api.constrains('left_partner_id', 'right_partner_id') + def _check_not_with_self(self): + """Not allowed to link partner to same partner + + :raises exceptions.Warning: When constraint is violated + """ + if self.left_partner_id == self.right_partner_id: + raise exceptions.Warning( + _('Partners cannot have a relation with themselves.') + ) + + @api.one + @api.constrains('left_partner_id', 'right_partner_id', 'active') + def _check_relation_uniqueness(self): + """Forbid multiple active relations of the same type between the same + partners + + :raises exceptions.Warning: When constraint is violated + """ + if not self.active: + return + domain = [ + ('type_id', '=', self.type_id.id), + ('active', '=', True), + ('id', '!=', self.id), + ('left_partner_id', '=', self.left_partner_id.id), + ('right_partner_id', '=', self.right_partner_id.id), + ] + if self.date_start: + domain += ['|', ('date_end', '=', False), + ('date_end', '>=', self.date_start)] + if self.date_end: + domain += ['|', ('date_start', '=', False), + ('date_start', '<=', self.date_end)] + if self.search(domain): + raise exceptions.Warning( + _('There is already a similar relation with overlapping dates') + ) def get_action_related_partners(self, cr, uid, ids, context=None): '''return a window action showing a list of partners taking part in the