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

[add] change deadline wizard

parent cef4c62f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -42,6 +42,7 @@
"wizard/export_journal_wizard_view.xml",
"wizard/mandate_change_bordereau_wizard.xml",
"wizard/scop_cotisation_cg_regul_wizard.xml",
"wizard/scop_bordereau_deadline_wizard.xml",
"wizard/scop_bordereau_update_liasse_wizard.xml",
"wizard/scop_bordereau_payment_mode_wizard.xml",
"wizard/scop_bordereau_refund_wizard.xml",
......
......@@ -89,7 +89,9 @@ class ScopContributionReport(models.Model):
return base64.b64encode(bordereau_pdf)
else:
raise UserError(
_("Impossible de télécharger le bordereau associé à cette cotisation.")
_(
"Impossible de télécharger le bordereau associé à cette cotisation."
)
)
else:
raise UserError(_("Pas de bordereau rattaché à cette cotisation."))
......
......@@ -5,6 +5,8 @@ access_scop_cotisation_cg,access_scop_cotisation_cg,model_scop_cotisation_cg,cgs
admin_access_scop_cotisation_cg,admin_access_scop_cotisation_cg,model_scop_cotisation_cg,cgscop_partner.group_cg_administrator,1,1,1,1
access_scop_bordereau,access_scop_bordereau,model_scop_bordereau,cgscop_cotisation_cg.group_cotisation_cg_administrative,1,1,1,1
admin_access_scop_bordereau,admin_access_scop_bordereau,model_scop_bordereau,cgscop_partner.group_cg_administrator,1,1,1,1
access_scop_bordereau_deadline_wizard,access_scop_bordereau_deadline_wizard,model_scop_bordereau_deadline_wizard,cgscop_cotisation_cg.group_cotisation_cg_administrative,1,1,1,1
access_scop_bordereau_deadline_invoice_wizard,access_scop_bordereau_deadline_invoice_wizard,model_scop_bordereau_deadline_invoice_wizard,cgscop_cotisation_cg.group_cotisation_cg_administrative,1,1,1,1
access_scop_bordereau_version,access_scop_bordereau_version,model_scop_bordereau_version,cgscop_cotisation_cg.group_cotisation_cg_administrative,1,1,1,1
admin_access_scop_bordereau_version,admin_access_scop_bordereau_version,model_scop_bordereau_version,cgscop_partner.group_cg_administrator,1,1,1,1
access_scop_bordereau_refund_wizard_quarter,access_scop_bordereau_refund_wizard_quarter,model_scop_bordereau_refund_wizard_quarter,cgscop_cotisation_cg.group_cotisation_cg_administrative,1,1,1,1
......
......@@ -71,6 +71,12 @@
type="action"
states="ongoing,validated,paid"
/>
<button
name="%(cgscop_cotisation_cg.scop_bordereau_deadline_wizard_act_window)d"
string="Modifier les échéances"
type="action"
states="new,validated"
/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
......
......@@ -4,6 +4,7 @@
from . import account_move_reversal
from . import export_journal_wizard
from . import mandate_change_bordereau_wizard
from . import scop_bordereau_deadline_wizard
from . import scop_bordereau_update_liasse_wizard
from . import scop_bordereau_payment_mode_wizard
from . import scop_bordereau_refund_wizard
......
# Copyright 2021 Le Filament
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ScopBordereauDeadlineWizard(models.TransientModel):
_name = "scop.bordereau.deadline.wizard"
_description = "Modification des dates d'échéance"
# ------------------------------------------------------
# Default functions
# ------------------------------------------------------
def _default_bordereau_id(self):
bordereau_id = self.env["scop.bordereau"].browse(
self.env.context.get("active_id")
)
return bordereau_id.id
def _default_invoice_ids(self):
bordereau_id = self.env["scop.bordereau"].browse(
self.env.context.get("active_id")
)
invoice_ids = bordereau_id.invoice_ids.filtered(
lambda i: i.payment_state in ["not_paid", "partial"]
)
default_invoices = invoice_ids.mapped(lambda i: (0, 0, {"invoice_id": i.id}))
return default_invoices
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
bordereau_id = fields.Many2one(
comodel_name="scop.bordereau",
string="Bordereau",
readonly=True,
default=_default_bordereau_id,
)
partner_id = fields.Many2one(
comodel_name="res.partner",
string="Adhérent",
related="bordereau_id.partner_id",
)
invoice_ids = fields.One2many(
comodel_name="scop.bordereau.deadline.invoice.wizard",
inverse_name="wizard_id",
string="Appels de cotisation",
default=_default_invoice_ids,
)
# ------------------------------------------------------
# Constrains
# ------------------------------------------------------
# ------------------------------------------------------
# Override ORM
# ------------------------------------------------------
# ------------------------------------------------------
# Action
# ------------------------------------------------------
def change_deadline(self):
self.ensure_one()
self.invoice_ids.change_deadline()
return {"type": "ir.actions.act_window_close"}
class ScopBordereauDeadlineInvoiceWizard(models.TransientModel):
_name = "scop.bordereau.deadline.invoice.wizard"
_description = "Appels de cotisation"
wizard_id = fields.Many2one(
comodel_name="scop.bordereau.deadline.wizard",
string="Wizard",
required=True,
ondelete="cascade",
)
invoice_id = fields.Many2one(
comodel_name="account.move",
string="Appel de cotisation",
required=True,
readonly=True,
ondelete="cascade",
)
old_deadline = fields.Date("Date d'échéance", related="invoice_id.invoice_date_due")
quarter = fields.Selection(related="invoice_id.cotiz_quarter")
type_contribution_id = fields.Many2one(
comodel_name="scop.contribution.type",
string="Type de cotisation",
related="invoice_id.type_contribution_id",
)
new_deadline = fields.Date(
"Nouvelle date d'échéance",
)
# ------------------------------------------------------
# Action
# ------------------------------------------------------
def change_deadline(self):
for line in self:
if line.new_deadline:
line.invoice_id.invoice_date_due = line.new_deadline
aml_ids = line.invoice_id.line_ids.filtered(
lambda l: l.date_maturity == line.old_deadline
)
aml_ids.update({"date_maturity": line.new_deadline})
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Copyright 2021 Le Filament
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<record id="scop_bordereau_deadline_wizard_form_view" model="ir.ui.view">
<field name="name">scop.bordereau.deadline.wizard.form</field>
<field name="model">scop.bordereau.deadline.wizard</field>
<field name="arch" type="xml">
<form string="Modification des echeances">
<sheet>
<group>
<field name="bordereau_id" />
<field name="partner_id" />
</group>
<separator string="Appels de cotisation" />
<field name="invoice_ids">
<tree create="0" delete="0" editable="top">
<field name="invoice_id" readonly="1" force_save="1" />
<field name="type_contribution_id" />
<field name="quarter" />
<field name="old_deadline" />
<field name="new_deadline" />
</tree>
</field>
</sheet>
<footer>
<button
name="change_deadline"
type="object"
string="Modifier les dates d'échéance"
class="oe_highlight"
/>
<button string="Annuler" special="cancel" class="oe_link" />
</footer>
</form>
</field>
</record>
<record
id="scop_bordereau_deadline_wizard_act_window"
model="ir.actions.act_window"
>
<field name="name">Modifier les dates d'échéance</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scop.bordereau.deadline.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</odoo>
......@@ -44,22 +44,28 @@ class ScopBordereauChangePaymentMode(models.TransientModel):
}
)
# Recherche les bordereaux non payés
bordereau_ids = self.env["scop.bordereau"].search([
bordereau_ids = self.env["scop.bordereau"].search(
[
("partner_id", "=", bordereau_id.partner_id.id),
("state", "not in", ["paid", "cancel"]),
])
]
)
# Recherche les factures liées aux bordereaux non payées
invoice_ids = bordereau_ids.mapped("invoice_ids").filtered(
lambda i: i.payment_state not in ["paid", "reversed"])
lambda i: i.payment_state not in ["paid", "reversed"]
)
else:
bordereau_ids = bordereau_id
invoice_ids = bordereau_id.invoice_ids.filtered(
lambda i: i.payment_state not in ["paid", "reversed"])
lambda i: i.payment_state not in ["paid", "reversed"]
)
if not invoice_ids:
raise UserError(_(
raise UserError(
_(
"Tous les appels liés à ce bordereau sont payés, il n'est pas possible "
"de modifier le mode de paiement"
))
)
)
# Met à jour le mode de paiement sur les bordereaux
bordereau_ids.update({"payment_mode_id": self.payment_mode_id.id})
......
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