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
1 requête de fusion!412.0 rv ajout champ et reorg contact
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
"security/security_rules.xml", "security/security_rules.xml",
"security/ir.model.access.csv", "security/ir.model.access.csv",
"views/assets.xml", "views/assets.xml",
"wizard/scop_address_wizard.xml",
"wizard/scop_period_wizard.xml", "wizard/scop_period_wizard.xml",
"wizard/scop_deces_wizard.xml", "wizard/scop_deces_wizard.xml",
"wizard/scop_membership_out_wizard.xml", "wizard/scop_membership_out_wizard.xml",
......
...@@ -238,6 +238,7 @@ ...@@ -238,6 +238,7 @@
<xpath expr='//form/sheet' position="before"> <xpath expr='//form/sheet' position="before">
<header attrs="{'invisible': [('is_cooperative', '=', False)]}"> <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="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="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="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"/> <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>) # © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # 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_period_wizard
from . import scop_deces_wizard from . import scop_deces_wizard
from . import scop_membership_period_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)
  • Owner

    @benjamin-filament il reste un print ici C'est Ju qui a fait ce code ? :smile: C'est quasi un copier-coller de l'autre wizard, c'était pas possible d'appeler l'autre en rajoutant un check sur la région ? c'est à cause des sudo() ? Si on a des modifs sur les périodes, il faudra modifier à plein d'endroits (scop_period et 2 voire 3 wizards), ce sera un peu pénible, mais bon c'est pas moi qui le ferai :grin:

  • Auteur Owner

    Ahaha ! On peut supprimer le print.

    On pourrait éventuellement créer une fonction sur scop.period et l'appeler. Je me suis aussi posé la question de laisser le if sur la dissolution_date, qui a priori n'a pas lieu d'être dans ce cas (c'est pas un délégué qui va réactiver une structure)

    A réfléchir, à comment utiliser le même wizard et passer une variable dans le contexte (adresse/admin) permettrait de traiter les 2 cas dans le même wizard (modifier les fonctions et l'affichage).

  • Owner

    effectivement un délégué devrait pas pouvoir réactiver une structure, mais du coup il faudrait ptet vérifier si elle est active (ou afficher le bouton que pour une structure sans dissolution_date ?)

  • Please inscrire or se connecter to reply
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