diff --git a/models/res_partner.py b/models/res_partner.py index 860086581bd6843cf0b942b376c5e20825623eee..d5b4d31631515ef85f205b22052bfd4f27e2d21e 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -82,6 +82,11 @@ class ScopPartner(models.Model): "Num Département", compute='_compute_num_departement', store=True) + region = fields.Many2one( + comodel_name='res.country.state', + string='Région', + compute='_compute_region', + store=True) city = fields.Char("Ville", track_visibility='onchange') cedex = fields.Char("Cedex", track_visibility='onchange') country_id = fields.Many2one('res.country', string='Country', @@ -337,10 +342,35 @@ class ScopPartner(models.Model): on_delete='restrict', track_visibility='onchange') + # ------------------------------------------------------ + # Constrains + # ------------------------------------------------------ @api.constrains('zip_id', 'country_id', 'city_id', 'state_id') def _check_zip(self): return + @api.constrains('siret') + def _check_siret(self): + if self.siret and not self.env.context.get('import_file'): + siren = (self.siret[:3] + " " + + self.siret[3:6] + " " + + self.siret[6:9]) + if not self.siret.isdigit(): + raise ValidationError( + "Ce SIRET n'est pas valide") + if len(self.siret) != 14: + raise ValidationError( + "La longueur du SIRET doit être égale à 14") + if (self.search_count([('siret', '=like', siren+"%"), + ('is_cooperative', "=", True)]) > 1): + raise ValidationError( + "Ce SIREN existe déjà parmi les coopératives") + elif self.search_count([('siret', '=', self.siret)]) > 1: + raise ValidationError("Ce SIRET existe déjà") + + # ------------------------------------------------------ + # Actions + # ------------------------------------------------------ @api.multi def open_facebook(self): self.ensure_one() @@ -365,6 +395,9 @@ class ScopPartner(models.Model): "url": self.twitter, } + # ------------------------------------------------------ + # Onchange + # ------------------------------------------------------ @api.onchange('creation_origin_id') def onchange_creation_origin_id(self): for coop in self: @@ -412,25 +445,6 @@ class ScopPartner(models.Model): raise ValidationError( "Le numéro de téléphone doit contenir au moins 10 caractères") - @api.constrains('siret') - def _check_siret(self): - if self.siret and not self.env.context.get('import_file'): - siren = (self.siret[:3] + " " + - self.siret[3:6] + " " + - self.siret[6:9]) - if not self.siret.isdigit(): - raise ValidationError( - "Ce SIRET n'est pas valide") - if len(self.siret) != 14: - raise ValidationError( - "La longueur du SIRET doit être égale à 14") - if (self.search_count([('siret', '=like', siren+"%"), - ('is_cooperative', "=", True)]) > 1): - raise ValidationError( - "Ce SIREN existe déjà parmi les coopératives") - elif self.search_count([('siret', '=', self.siret)]) > 1: - raise ValidationError("Ce SIRET existe déjà") - @api.onchange('siret') def onchange_siret(self): if self.siret: @@ -452,6 +466,9 @@ class ScopPartner(models.Model): + "que vous n'êtes pas en train de créer un" + " doublon"}} + # ------------------------------------------------------ + # Common functions + # ------------------------------------------------------ def _create_period(self, partner): new_period = self.env['scop.period'].create({ 'partner_id': partner.id, @@ -474,6 +491,9 @@ class ScopPartner(models.Model): }) partner.scop_period_ids = new_period + # ------------------------------------------------------ + # Override ORM + # ------------------------------------------------------ # Creation d'une periode lorsque le statut passe en Phase de Suivi @api.multi def write(self, vals): @@ -533,6 +553,9 @@ class ScopPartner(models.Model): partner.message_subscribe(partner_ids=partners_to_subscribe) return partners + # ------------------------------------------------------ + # Computed Fields + # ------------------------------------------------------ @api.depends('siret') def _compute_from_siret(self): for company in self: @@ -551,6 +574,15 @@ class ScopPartner(models.Model): if company.zip: company.zip_departement = company.zip[:2] + @api.depends('zip') + def _compute_region(self): + for partner in self: + if partner.zip: + zip_id = self.env['res.city.zip'].search([ + ('name', '=', partner.zip)]) + if zip_id: + partner.region = zip_id[0].city_id[0].state_id + @api.model def _compute_current_user_ur_id(self): for partner in self: @@ -559,33 +591,6 @@ class ScopPartner(models.Model): def _search_current_user_ur_id(self, operator, value): return [('ur_id', '=', self.env.user.company_id.ur_id.id)] - @api.multi - def scop_send_to_cg(self): - self.write({ - 'project_status': '5_cg', - }) - - return True - - @api.multi - def partner_archive(self): - self.active = False - - # TODO - remove temporary function once RIGA API in place - @api.multi - def scop_valid_cg(self): - self.write({ - 'project_status': '6_suivi', - }) - return True - - @api.multi - def scop_abandonne(self): - self.write({ - 'project_status': '7_abandonne', - }) - return True - @api.depends('contact_origin_id', 'parent_id.cooperative_form_id', 'parent_id.membership_status') @@ -667,6 +672,36 @@ class ScopPartner(models.Model): partner.staff_last = lm[0].staff_count partner.staff_last_date = lm[0].effective_date + # ------------------------------------------------------ + # Button Action + # ------------------------------------------------------ + @api.multi + def scop_send_to_cg(self): + self.write({ + 'project_status': '5_cg', + }) + + return True + + @api.multi + def partner_archive(self): + self.active = False + + # TODO - remove temporary function once RIGA API in place + @api.multi + def scop_valid_cg(self): + self.write({ + 'project_status': '6_suivi', + }) + return True + + @api.multi + def scop_abandonne(self): + self.write({ + 'project_status': '7_abandonne', + }) + return True + class ResPartneCertification(models.Model): _name = "res.partner.certification" diff --git a/views/res_partner.xml b/views/res_partner.xml index 33d28b9fc9ef20ea1c1f0d0e84e9c6be89aa739d..e58555f0c808676c3be7c0993ff2f0aa850a9fa7 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -18,6 +18,7 @@ <!-- Ajout recherche Segmentation --> <field name="phone" position="after"> <field name="segment_1_id" string="Segmentation" filter_domain="['|', '|', '|', ('segment_1_id','ilike', self), ('segment_2_id','ilike', self), ('segment_3_id','ilike', self), ('segment_4_id','ilike', self)]"/> + <field name="zip_departement" string="N° de département" /> </field> <!-- Affiche du filtre Mon UR --> <filter name="customer" position="before"> @@ -117,6 +118,7 @@ </field> <field name="state_id" position="attributes"> <attribute name="placeholder">Région</attribute> + <attribute name="invisible">1</attribute> </field> <xpath expr='//form/sheet/group/group[2]' position="replace"> <group name="Infos activités" attrs="{'invisible': [('is_company','=', False)]}"> @@ -210,6 +212,8 @@ <field name="phone" widget="phone"/> <field name="mobile" widget="phone" attrs="{'invisible': [('is_company','=', True)]}"/> <field name="email" widget="email" on_change="1"/> + <field name="zip_departement" string="N° de département" /> + <field name="region" /> <field name="ur_id" options="{'no_create': True}" on_change="1" can_create="false" can_write="false"/> <field name="category_id" options="{'no_create': True}" widget="many2many_tags" attrs="{'invisible': [('is_company','=', True)]}"/> <field name="website" invisible="1"/> @@ -318,6 +322,8 @@ <field name="phone" widget="phone" string="Téléphone 1" attrs="{'required':['|', ('project_status','in',('4_adhesion', '5_cg')), '&', ('write_date', '=', False), ('project_status', '=', '6_suivi')]}"/> <field name="mobile" widget="phone" string="Téléphone 2" attrs="{'invisible': [('project_status', 'in', ('1_information', '2_pre-diagnostic', '3_accompagnement'))]}"/> <field name="email" widget="email" string="E-mail"/> + <field name="zip_departement" string="N° de département" /> + <field name="region" /> <field name="website" widget="url" attrs="{'invisible': [('project_status', 'in', ('1_information', '2_pre-diagnostic', '3_accompagnement'))]}"/> <label for='facebook' class="oe_read_only" string="Réseaux sociaux" attrs="{'invisible':[('facebook','=',False),('linkedin','=',False),('twitter','=',False)]}"/> <div > @@ -778,6 +784,7 @@ <field name="parent_id" domain="[('is_company','=',True)]" operator="child_of"/> <field name="phone" filter_domain="['|',('phone','ilike',self),('mobile','ilike',self)]"/> <field name="segment_1_id" string="Segmentation" filter_domain="['|', '|', '|', ('segment_1_id','ilike', self), ('segment_2_id','ilike', self), ('segment_3_id','ilike', self), ('segment_4_id','ilike', self)]"/> + <field name="zip_departement" string="N° de département" /> <filter string="Mon UR" name="my_ur" domain="[('current_user_ur_id', '=', 'ur_id')]"/> <separator/> <filter string="Archivés" name="inactive" domain="[('active','=',False)]"/>