|
|
# Copyright 2019-2020 Coop IT Easy SCRLfs # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields, api, _ from odoo.exceptions import ValidationError
class Partner(models.Model): _inherit = 'res.partner'
info_session_confirmed = fields.Boolean( string="Confirmed presence to info session", default=False, ) is_worker = fields.Boolean( compute="_is_worker", search="_search_worker", readonly=True, related="" )
def _cooperator_share_type(self): """
Return the share.type that correspond to the cooperator_type. """
self.ensure_one() share_type = None if self.cooperator_type: share_type = ( self.env['product.template'] .search([('default_code', '=', self.cooperator_type)]) )[0] return share_type
@api.depends( 'share_ids', 'share_ids.share_product_id', 'share_ids.share_product_id.default_code', 'share_ids.share_number', ) def _is_worker(self): """
Return True if the partner can participate tho the shift system. This is defined on the share type. """
for rec in self: share_type = rec._cooperator_share_type() if share_type: rec.is_worker = share_type.allow_working rec.worker_store = share_type.allow_working else: rec.is_worker = False rec.worker_store = False
def _search_worker(self, operator, value): return [('worker_store', operator, value)]
@api.depends( "cooperative_status_ids", "cooperative_status_ids.status", "cooperative_status_ids.can_shop", "share_ids", "share_ids.share_product_id", "share_ids.share_product_id.default_code", "share_ids.share_number", ) def _compute_can_shop(self): """
Overwrite default behavior to take the owned share into account. """
for rec in self: share_type = rec._cooperator_share_type() if share_type: rec.can_shop = ( rec.cooperative_status_ids.can_shop if rec.is_worker and rec.cooperative_status_ids else share_type.allow_shopping ) else: rec.can_shop = ( rec.cooperative_status_ids.can_shop if rec.is_worker and rec.cooperative_status_ids else False )
@api.constrains('parent_eater_id') def _check_max_parent_eaters(self): """
Check that the parent_eater_id in parnter in self doesn't exceed the maximum eater limit. See also: _check_max_child_eaters() """
for rec in self: if rec.parent_eater_id: share_type = rec.parent_eater_id._cooperator_share_type() if ( share_type and share_type.max_nb_eater_allowed >= 0 and len( rec.parent_eater_id.child_eater_ids ) > share_type.max_nb_eater_allowed ): raise ValidationError( _('You can only set %d additional eaters per worker') % share_type.max_nb_eater_allowed )
@api.constrains('child_eater_ids') def _check_max_child_eaters(self): """
Check the maximum number of eaters that can be assigned to a share owner. See also: _check_max_parent_eaters() """
for rec in self: share_type = rec._cooperator_share_type() if ( share_type and share_type.max_nb_eater_allowed >= 0 and len(rec.child_eater_ids) > share_type.max_nb_eater_allowed ): raise ValidationError( _('You can only set %d additional eaters per worker') % share_type.max_nb_eater_allowed )
|