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

[#164] ajout d'un bouton pour changement d'adresse

parent 356c9aee
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -22,6 +22,7 @@
"security/security_rules.xml",
"security/ir.model.access.csv",
"views/assets.xml",
"wizard/scop_address_wizard.xml",
"wizard/scop_period_wizard.xml",
"wizard/scop_deces_wizard.xml",
"wizard/scop_membership_out_wizard.xml",
......
......@@ -238,6 +238,7 @@
<xpath expr='//form/sheet' position="before">
<header attrs="{'invisible': [('is_cooperative', '=', False)]}">
<button string="Nouvelle période" type="action" name="%(cgscop_partner.scop_period_wizard_create_action)d" class="oe_highlight" attrs="{'invisible': ['|', ('write_date', '=', False), ('project_status', '!=', '6_suivi')]}" groups="cgscop_partner.group_add_period"/>
<button string="Changement d'adresse" type="action" name="%(cgscop_partner.scop_address_wizard_action)d" class="oe_highlight" attrs="{'invisible': ['|', ('write_date', '=', False), ('project_status', '!=', '6_suivi')]}" />
<button string="Nouvelle période d'adhésion" type="action" name="%(cgscop_partner.scop_membership_period_wizard_create_action)d" class="oe_highlight" attrs="{'invisible': ['|', ('write_date', '=', False), ('project_status', '!=', '6_suivi')]}" groups="cgscop_partner.group_add_period"/>
<button string="Décès/Mise en sommeil" type="action" name="%(cgscop_partner.scop_deces_wizard_create_action)d" attrs="{'invisible': ['|', ('dissolution_reason_id', '!=', False), '|', ('write_date', '=', False), ('project_status', '!=', '6_suivi')]}" groups="cgscop_partner.group_add_period"/>
<button string="Radiation" type="action" name="%(cgscop_partner.scop_membership_out_wizard_create_action)d" attrs="{'invisible': ['|', ('write_date', '=', False), ('project_status', '!=', '6_suivi')]}" groups="cgscop_partner.group_add_period"/>
......
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import scop_address_wizard
from . import scop_period_wizard
from . import scop_deces_wizard
from . import scop_membership_period_wizard
......
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
from odoo.exceptions import ValidationError
class ScopPeriodWizard(models.TransientModel):
_name = 'scop.address.wizard'
_description = "Wizard changement d'adresse"
# Default functions
@api.model
def _default_partner_id(self):
return self.env.context.get('active_id')
@api.model
def _default_previous_period_id(self):
return self.env['scop.period'].search(
[('partner_id', '=', self.env.context.get('active_id')),
('end', '=', False)],
limit=1).id
@api.model
def _default_name(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).name
@api.model
def _default_cooperative_form_id(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).cooperative_form_id
@api.model
def _default_partner_company_type_id(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).partner_company_type_id
@api.model
def _default_siret(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).siret
@api.model
def _default_street(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).street
@api.model
def _default_street2(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).street2
@api.model
def _default_street3(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).street3
@api.model
def _default_zip(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).zip
@api.model
def _default_zip_id(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).zip_id
@api.model
def _default_city(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).city
@api.model
def _default_cedex(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).cedex
@api.model
def _default_state_id(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).state_id
@api.model
def _default_country_id(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).country_id
@api.model
def _default_naf_id(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).naf_id
@api.model
def _default_cae(self):
return self.env['res.partner'].browse(
self.env.context.get('active_id')).cae
# Fields common
partner_id = fields.Integer('Partner', default=_default_partner_id)
# Fields previous period
previous_period_id = fields.Integer(default=_default_previous_period_id)
end_reason = fields.Selection(
[('juri', "Modification de la forme juridique"),
('form', "Changement de forme coopérative"),
('acti', "Changement d'activité (NAF)"),
('adr', "Changement d'adresse"),
('nom', "Changement de dénomination sociale"),
('autr', "Autres")],
string='Motif',
default='adr')
comments = fields.Text('Commentaires')
# Fields new period
start = fields.Date('Début de validité', required=True,
default=fields.Date.today())
name = fields.Char('Raison Sociale', required=True, default=_default_name)
cooperative_form_id = fields.Many2one(
'res.partner.cooperative.form',
string="Cooperative form",
on_delete='restrict', required=True,
default=_default_cooperative_form_id)
partner_company_type_id = fields.Many2one(
comodel_name='res.partner.company.type',
string='Legal Form',
track_visibility='onchange',
on_delete='restrict', required=True,
default=_default_partner_company_type_id)
siret = fields.Char(string='SIRET', size=14, required=True,
default=_default_siret)
street = fields.Char(default=_default_street)
street2 = fields.Char(default=_default_street2)
street3 = fields.Char(default=_default_street3)
zip = fields.Char(default=_default_zip)
zip_id = fields.Many2one('res.city.zip', 'ZIP Location',
default=_default_zip_id)
city = fields.Char(default=_default_city)
cedex = fields.Char(default=_default_cedex)
state_id = fields.Many2one(
"res.country.state",
string='State',
ondelete='restrict',
domain="[('country_id', '=?', country_id)]",
default=_default_state_id)
country_id = fields.Many2one(
'res.country', string='Country', ondelete='restrict',
default=_default_country_id)
naf_id = fields.Many2one(
'res.partner.naf',
string='Code NAF',
on_delete='restrict', default=_default_naf_id)
cae = fields.Boolean("CAE", default=_default_cae)
# Action
@api.onchange('zip_id')
def _onchange_zip_id(self):
if self.zip_id:
self.zip = self.zip_id.name
self.city = self.zip_id.city_id.name
self.country_id = self.zip_id.city_id.country_id
self.state_id = self.zip_id.city_id.state_id
@api.multi
def create_period(self):
for period in self:
partner_values = {}
partner = self.env['res.partner'].browse(period.partner_id)
# Check changement de région
zip_id = self.env['res.city.zip'].search([
('name', '=', period.zip)])
region = zip_id[0].city_id[0].state_id
if partner.region and region != partner.region:
raise ValidationError(
"Vous ne pouvez pas modifier l'adresse "
"dans une autre région.\n"
" - ancienne région : %s\n"
" - nouvelle région : %s" % (partner.region.name, region.name))
# Close previous period
previous_period = self.env['scop.period'].browse(
period.previous_period_id)
print(previous_period)
if previous_period:
if previous_period.end:
if period.start >= previous_period.end:
partner_values = {
'dissolution_date': False,
}
else:
raise ValidationError(
"La nouvelle période ne peut commencer avant la "
+ "fin de la période précédente : "
+ str(previous_period.end))
if period.start >= previous_period.start:
if not previous_period.end:
previous_period.sudo().write({
'end': period.start,
'end_reason': period.end_reason,
'comments': period.comments,
})
else:
raise ValidationError(
"La nouvelle période ne peut commencer avant la "
+ "période précédente : "
+ str(previous_period.start))
# Create new period
period_values = {
'start': period.start,
'partner_id': period.partner_id
}
values = {
'name': period.name,
'dissolution_reason_id': False,
'cooperative_form_id': period.cooperative_form_id.id,
'partner_company_type_id': period.partner_company_type_id.id,
'siret': period.siret,
'street': period.street,
'street2': period.street2,
'street3': period.street3,
'zip': period.zip,
'zip_id': period.zip_id.id,
'city': period.city,
'cedex': period.cedex,
'state_id': period.state_id.id,
'country_id': period.country_id.id,
'naf_id': period.naf_id.id,
'cae': period.cae
}
period_values.update(values)
self.env['scop.period'].sudo().create(period_values)
# Update partner
partner_values.update(values)
partner.write(partner_values)
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- WIZARD FORM -->
<record id="scop_address_wizard_view_form" model="ir.ui.view">
<field name="name">scop.address.wizard.form</field>
<field name="model">scop.address.wizard</field>
<field name="arch" type="xml">
<form string="Nouvelle Période">
<group name="period" string="Période" col="2">
<field name="start" required="1"/>
<field name="previous_period_id" invisible="1"/>
<field name="end_reason" attrs="{'required': [('previous_period_id', '!=', 0)], 'invisible': [('previous_period_id', '=', 0)]}" readonly="1"/>
<field name="comments" attrs="{'invisible': [('previous_period_id', '=', 0)]}"/>
</group>
<group col="2">
<group>
<field name="name" readonly="1"/>
<field name="siret" required="1"/>
</group>
<group>
<label for='street' string="Adresse du siège social"/>
<div class="o_address_format" modifiers="{}">
<field name="street" placeholder="Rue..." class="o_address_street" required="1"/>
<field name="street2" placeholder="Rue 2..." class="o_address_street"/>
<field name="street3" placeholder="Rue 3..." class="o_address_street"/>
<field name="zip_id" options="{'create_name_field': 'city', 'no_open': True, 'no_create': True}" placeholder="Location completion"
on_change="1" can_create="true" can_write="true"/>
<field name="zip" placeholder="Code postal" class="o_address_city" on_change="1" required="1"/>
<field name="city" placeholder="Ville" class="o_address_city" required="1"/>
<field name="cedex" placeholder="Cedex" class="o_address_city"/>
<field name="state_id" placeholder="État" invisible="1"/>
<field name="country_id" placeholder="Pays" invisible="1"/>
</div>
</group>
</group>
<footer>
<button class="btn btn-sm btn-primary" name="create_period" string="Créer" type="object" confirm="Êtes-vous sûr de vouloir créer une nouvelle période ?"/>
<button class="btn btn-sm btn-default" special="cancel" string="Close"/>
</footer>
</form>
</field>
</record>
<record id="scop_address_wizard_action" model="ir.actions.act_window">
<field name="name">Changement d'adresse</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scop.address.wizard</field>
<field name="view_mode">form</field>
<field name="view_id" ref="scop_address_wizard_view_form"/>
<field name="target">new</field>
</record>
</odoo>
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