Newer
Older
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# TODO: Supprimer le fichier
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class ScopPeriodWizard(models.TransientModel):

Benjamin - Le Filament
a validé
_name = "scop.address.wizard"
_description = "Wizard changement d'adresse"
# Default functions
@api.model
def _default_partner_id(self):

Benjamin - Le Filament
a validé
return self.env.context.get("active_id")
@api.model
def _default_previous_period_id(self):

Benjamin - Le Filament
a validé
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):

Benjamin - Le Filament
a validé
return (
self.env["res.partner"]
.browse(self.env.context.get("active_id"))
.cooperative_form_id
)
@api.model
def _default_partner_company_type_id(self):

Benjamin - Le Filament
a validé
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):

Benjamin - Le Filament
a validé
return (
self.env["res.partner"].browse(self.env.context.get("active_id")).state_id

Benjamin - Le Filament
a validé
)
@api.model
def _default_country_id(self):

Benjamin - Le Filament
a validé
return (
self.env["res.partner"].browse(self.env.context.get("active_id")).country_id

Benjamin - Le Filament
a validé
)
@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
@api.model
def _default_ur_id(self):
return self.env["res.partner"].browse(self.env.context.get("active_id")).ur_id
# Fields common

Benjamin - Le Filament
a validé
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(

Benjamin - Le Filament
a validé
[
("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=lambda self: fields.Date.today())

Benjamin - Le Filament
a validé
name = fields.Char("Raison Sociale", required=True, default=_default_name)
cooperative_form_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner.cooperative.form",
string="Cooperative form",

Benjamin - Le Filament
a validé
ondelete="restrict",
required=True,
default=_default_cooperative_form_id,
)
partner_company_type_id = fields.Many2one(

Benjamin - Le Filament
a validé
comodel_name="res.partner.company.type",
string="Legal Form",
ondelete="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",

Benjamin - Le Filament
a validé
string="State",
ondelete="restrict",
domain="[('country_id', '=?', country_id)]",

Benjamin - Le Filament
a validé
default=_default_state_id,
)
country_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.country",
string="Country",
ondelete="restrict",
default=_default_country_id,
)
naf_id = fields.Many2one(

Benjamin - Le Filament
a validé
"res.partner.naf",
string="Code NAF",
ondelete="restrict",
default=_default_naf_id,
)
cae = fields.Boolean("CAE", default=_default_cae)

Benjamin - Le Filament
a validé
comodel_name="union.regionale",
string="Union Régionale",
default=_default_ur_id,
)

Benjamin - Le Filament
a validé
@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
def create_period(self):
for period in self:
partner_values = {}

Benjamin - Le Filament
a validé
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)

Benjamin - Le Filament
a validé
)
# Close previous period
previous_period = self.env["scop.period"].browse(period.previous_period_id)
if previous_period:
if previous_period.end:
if period.start >= previous_period.end:
partner_values = {

Benjamin - Le Filament
a validé
"dissolution_date": False,
}
else:
raise ValidationError(
_(
"La nouvelle période ne peut commencer avant la "
"fin de la période précédente : "
)

Benjamin - Le Filament
a validé
+ str(previous_period.end)
)
if period.start >= previous_period.start:
if not previous_period.end:

Benjamin - Le Filament
a validé
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 : "
)

Benjamin - Le Filament
a validé
+ str(previous_period.start)
)
# Create new period
period_values = {

Benjamin - Le Filament
a validé
"start": period.start,
"partner_id": period.partner_id,
}
values = {

Benjamin - Le Filament
a validé
"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,
"ur_id": period.ur_id.id,
}
period_values.update(values)

Benjamin - Le Filament
a validé
self.env["scop.period"].sudo().create(period_values)
# Update partner

Benjamin - Le Filament
a validé
partner_values.update(
{
"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,
"ur_id": period.ur_id.id,
}
)
partner.sudo().write(partner_values)