Skip to content
Extraits de code Groupes Projets
Valider 3cbf213b rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[cgscop #27] Automatisation calcul région et département en fonction code postaux

parent e9cff1e8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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"
......
......@@ -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')), '&amp;', ('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)]"/>
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter