@ -2,28 +2,55 @@
from openerp import models , fields , api , _
from openerp.exceptions import ValidationError
class Partner ( models . Model ) :
_inherit = ' res.partner '
class Partner ( models . Model ) :
eater = fields . Selection ( [ ( ' eater ' , ' Eater ' ) , ( ' worker_eater ' , ' Worker and Eater ' ) ] , string = " Eater/Worker " )
child_eater_ids = fields . One2many ( " res.partner " , " parent_eater_id " , domain = [ ( ' customer ' , ' = ' , True ) ,
( ' eater ' , ' = ' , ' eater ' ) ] )
parent_eater_id = fields . Many2one ( " res.partner " , string = " Parent Worker " , readonly = True )
barcode = fields . Char ( compute = " _get_bar_code " , string = ' Barcode ' , store = True )
parent_barcode = fields . Char ( compute = " _get_bar_code " , string = ' Parent Barcode ' , store = True )
member_card_ids = fields . One2many ( ' member.card ' , ' partner_id ' )
country_id = fields . Many2one ( required = True , default = lambda self : self . env . ref ( ' base.be ' ) )
_inherit = " res.partner "
member_card_to_be_printed = fields . Boolean ( ' Print BEES card? ' )
last_printed = fields . Datetime ( ' Last printed on ' )
cooperator_type = fields . Selection ( [ ( ' share_a ' , ' Share A ' ) , ( ' share_b ' , ' Share B ' ) , ( ' share_c ' , ' Share C ' ) ] , store = True , compute = None )
eater = fields . Selection (
[ ( " eater " , " Eater " ) , ( " worker_eater " , " Worker and Eater " ) ] ,
string = " Eater/Worker " ,
)
child_eater_ids = fields . One2many (
" res.partner " ,
" parent_eater_id " ,
domain = [ ( " customer " , " = " , True ) , ( " eater " , " = " , " eater " ) ] ,
)
parent_eater_id = fields . Many2one (
" res.partner " , string = " Parent Worker " , readonly = True
)
barcode = fields . Char (
compute = " _get_bar_code " , string = " Barcode " , store = True
)
parent_barcode = fields . Char (
compute = " _get_bar_code " , string = " Parent Barcode " , store = True
)
member_card_ids = fields . One2many ( " member.card " , " partner_id " )
country_id = fields . Many2one (
required = True , default = lambda self : self . env . ref ( " base.be " )
)
member_card_to_be_printed = fields . Boolean ( " Print BEES card? " )
last_printed = fields . Datetime ( " Last printed on " )
cooperator_type = fields . Selection (
[
( " share_a " , " Share A " ) ,
( " share_b " , " Share B " ) ,
( " share_c " , " Share C " ) ,
] ,
store = True ,
compute = None ,
)
@api.one
@api.depends ( ' parent_eater_id ' , ' parent_eater_id.barcode ' , ' eater ' , ' member_card_ids ' )
@api.depends (
" parent_eater_id " ,
" parent_eater_id.barcode " ,
" eater " ,
" member_card_ids " ,
)
def _get_bar_code ( self ) :
if self . eater == ' eater ' :
if self . eater == " eater " :
self . parent_barcode = self . parent_eater_id . barcode
elif self . member_card_ids :
for c in self . member_card_ids :
@ -31,7 +58,7 @@ class Partner(models.Model):
self . barcode = c . barcode
@api.one
@api.constrains ( ' child_eater_ids ' , ' parent_eater_id ' )
@api.constrains ( " child_eater_ids " , " parent_eater_id " )
def _check_number_of_eaters ( self ) :
""" The owner of an A share can have a maximum of two eaters but
the owner of a B share can have a maximum of three eaters .
@ -40,52 +67,65 @@ class Partner(models.Model):
share_type_code = self . cooperator_type
parent_share_type_code = self . parent_eater_id . cooperator_type
# Raise exception
if share_type_code == ' share_b ' or parent_share_type_code == ' share_b ' :
if len ( self . child_eater_ids ) > 3 or len ( self . parent_eater_id . child_eater_ids ) > 3 :
raise ValidationError ( _ ( ' You can only set three additional eaters per worker ' ) )
if share_type_code == " share_b " or parent_share_type_code == " share_b " :
if (
len ( self . child_eater_ids ) > 3
or len ( self . parent_eater_id . child_eater_ids ) > 3
) :
raise ValidationError (
_ ( " You can only set three additional eaters per worker " )
)
else :
if len ( self . child_eater_ids ) > 2 or len ( self . parent_eater_id . child_eater_ids ) > 2 :
raise ValidationError ( _ ( ' You can only set two additional eaters per worker ' ) )
if (
len ( self . child_eater_ids ) > 2
or len ( self . parent_eater_id . child_eater_ids ) > 2
) :
raise ValidationError (
_ ( " You can only set two additional eaters per worker " )
)
@api.multi
def write ( self , values ) :
if values . get ( ' parent_eater_id ' ) and self . parent_eater_id :
raise ValidationError ( _ ( ' You try to assign a eater to a worker but this easer is alread assign to %s please remove it before ' ) % self . parent_eater_id . name )
if values . get ( " parent_eater_id " ) and self . parent_eater_id :
raise ValidationError (
_ (
" You try to assign a eater to a worker but this easer is alread assign to %s please remove it before "
)
% self . parent_eater_id . name
)
# replace many2many command when writing on child_eater_ids to just remove the link
if ' child_eater_ids ' in values :
for command in values [ ' child_eater_ids ' ] :
if " child_eater_ids " in values :
for command in values [ " child_eater_ids " ] :
if command [ 0 ] == 2 :
command [ 0 ] = 3
return super ( Partner , self ) . write ( values )
@api.one
def _deactivate_active_cards ( self ) :
for card in self . member_card_ids . filtered ( ' valid ' ) :
for card in self . member_card_ids . filtered ( " valid " ) :
card . valid = False
card . end_date = fields . Date . today ( )
@api.multi
def _new_card ( self , reason , user_id , barcode = False ) :
card_data = {
' partner_id ' : self . id ,
' responsible_id ' : user_id ,
' comment ' : reason ,
" partner_id " : self . id ,
" responsible_id " : user_id ,
" comment " : reason ,
}
if barcode :
card_data [ ' barcode ' ] = barcode
self . env [ ' member.card ' ] . create ( card_data )
card_data [ " barcode " ] = barcode
self . env [ " member.card " ] . create ( card_data )
@api.multi
def _new_eater ( self , surname , name , email ) :
partner_data = {
' lastname ' : name ,
' firstname ' : surname ,
' is_customer ' : True ,
' eater ' : ' eater ' ,
' parent_eater_id ' : self . id ,
' email ' : email ,
' country_id ' : self . country_id . id
}
return self . env [ ' res.partner ' ] . create ( partner_data )
" lastname " : name ,
" firstname " : surname ,
" is_customer " : True ,
" eater " : " eater " ,
" parent_eater_id " : self . id ,
" email " : email ,
" country_id " : self . country_id . id ,
}
return self . env [ " res.partner " ] . create ( partner_data )