diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..75bb2042901930f807a588241612a29dd75e34d5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.* +*.pyc +!.gitignore diff --git a/__manifest__.py b/__manifest__.py index 7fcc52ee63a6be8d80473efa1279ca24192455ac..4eb8bf1c88887951a87fd75e3fdd5e28403189ad 100755 --- a/__manifest__.py +++ b/__manifest__.py @@ -17,6 +17,8 @@ # Security "security/security_rules.xml", "security/ir.model.access.csv", + # Datas + "datas/bordereau_refund_wizard_quarter_data.xml", "datas/mail_data.xml", "datas/queue_job_data.xml", "datas/ir_sequence_data.xml", diff --git a/datas/bordereau_refund_wizard_quarter_data.xml b/datas/bordereau_refund_wizard_quarter_data.xml new file mode 100644 index 0000000000000000000000000000000000000000..213e9e1c3c7d87a3994aa33dae104d47dce78123 --- /dev/null +++ b/datas/bordereau_refund_wizard_quarter_data.xml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<!-- Copyright 2021 Le Filament (<https://www.le-filament.com>) + License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). --> +<odoo> + <data noupdate="1"> + + <record id="bordereau_wizard_quarter1" model="scop.bordereau.refund.wizard.quarter"> + <field name="quarter">1</field> + </record> + + <record id="bordereau_wizard_quarter2" model="scop.bordereau.refund.wizard.quarter"> + <field name="quarter">2</field> + </record> + + <record id="bordereau_wizard_quarter3" model="scop.bordereau.refund.wizard.quarter"> + <field name="quarter">3</field> + </record> + + <record id="bordereau_wizard_quarter4" model="scop.bordereau.refund.wizard.quarter"> + <field name="quarter">4</field> + </record> + + </data> +</odoo> \ No newline at end of file diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 1f7f053e9fad6a1ce6120f4fd73a3503d117e271..c818bf483c207071f88543f2bbaaaaa8363dda9a 100755 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -7,3 +7,5 @@ access_scop_bordereau,access_scop_bordereau,model_scop_bordereau,account.group_a admin_access_scop_bordereau,admin_access_scop_bordereau,model_scop_bordereau,cgscop_partner.group_cg_administrator,1,1,1,1 access_scop_bordereau_version,access_scop_bordereau_version,model_scop_bordereau_version,account.group_account_manager,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,account.group_account_manager,1,1,1,1 +admin_access_scop_bordereau_refund_wizard_quarter,admin_access_scop_bordereau_refund_wizard_quarter,model_scop_bordereau_refund_wizard_quarter,cgscop_partner.group_cg_administrator,1,1,1,1 diff --git a/wizard/scop_bordereau_refund_wizard.py b/wizard/scop_bordereau_refund_wizard.py index 02786d52404f1f83736e67a47c0a9833384c2db9..e8c8fe0dee944028bbbbde594f25a694f2c841fb 100644 --- a/wizard/scop_bordereau_refund_wizard.py +++ b/wizard/scop_bordereau_refund_wizard.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import fields, models, api -from odoo.exceptions import ValidationError +from odoo.exceptions import ValidationError, UserError class ScopBordereauRefundWizard(models.TransientModel): @@ -23,10 +23,10 @@ class ScopBordereauRefundWizard(models.TransientModel): string='Type de cotisation', selection=lambda self: self._selection_type_cotiz(), required=1) - cotiz_quarter = fields.Selection( - string='Trimestre', - selection=[(1, 1), (2, 2), (3, 3), (4, 4)], - required=1, ) + quarter_ids = fields.Many2many( + relation='scop_bordereau_refund_wizard_quarter_rel', + comodel_name='scop.bordereau.refund.wizard.quarter', + string='Trimestres') # ------------------------------------------------------ # Constrains @@ -100,6 +100,12 @@ class ScopBordereauRefundWizard(models.TransientModel): """ Create refund """ + if len(self.quarter_ids) == 0: + raise UserError('Vous devez sélectionner au moins un trimestre.') + if self.amount_refund <= 0: + raise UserError('Le montant de l\'avoir doit être supérieur à 0.') + if not self.type_cotiz: + raise UserError('Vous devez sélectionner un type de cotisation.') bordereau_id = self.bordereau_id partner_id = bordereau_id.partner_id ur_hdf = self.env.ref('cgscop_partner.riga_14232').id @@ -148,30 +154,45 @@ class ScopBordereauRefundWizard(models.TransientModel): account_ur], } product = cotiz_type.get(int(self.type_cotiz))[0] - refund = self.env['account.invoice'].create({ - 'partner_id': partner_id.id, - 'journal_id': cotiz_type.get(int(self.type_cotiz))[1].id, - 'account_id': cotiz_type.get(int(self.type_cotiz))[2].id, - 'type': 'out_refund', - 'date_invoice': self.date_refund, - 'date': self.date_refund, - 'state': 'draft', - 'number': False, - 'origin': bordereau_id.name, - 'reference': False, - 'bordereau_id': bordereau_id.id, - 'is_contribution': True, - 'year': bordereau_id.year, - 'cotiz_quarter': self.cotiz_quarter, - 'liasse_fiscale_id': bordereau_id.liasse_fiscale_id.id, - 'type_contribution_id': self.type_cotiz, - 'payment_mode_id': bordereau_id.payment_mode_id.id, - 'date_due': self.date_refund, - }) - self.env['account.invoice.line'].create({ - 'name': self.comment, - 'invoice_id': refund.id, - 'product_id': product.id, - 'account_id': product.property_account_income_id.id, - 'price_unit': self.amount_refund - }) + + for quarter_id in self.quarter_ids: + refund = self.env['account.invoice'].create({ + 'partner_id': partner_id.id, + 'journal_id': cotiz_type.get(int(self.type_cotiz))[1].id, + 'account_id': cotiz_type.get(int(self.type_cotiz))[2].id, + 'type': 'out_refund', + 'date_invoice': self.date_refund, + 'date': self.date_refund, + 'state': 'draft', + 'number': False, + 'origin': bordereau_id.name, + 'reference': False, + 'bordereau_id': bordereau_id.id, + 'is_contribution': True, + 'year': bordereau_id.year, + 'cotiz_quarter': quarter_id.quarter, + 'liasse_fiscale_id': bordereau_id.liasse_fiscale_id.id, + 'type_contribution_id': self.type_cotiz, + 'payment_mode_id': bordereau_id.payment_mode_id.id, + 'date_due': self.date_refund, + }) + self.env['account.invoice.line'].create({ + 'name': self.comment, + 'invoice_id': refund.id, + 'product_id': product.id, + 'account_id': product.property_account_income_id.id, + 'price_unit': self.amount_refund + }) + + +class ScopBordereauRefundWizardQuarer(models.Model): + _name = 'scop.bordereau.refund.wizard.quarter' + _description = 'Trimestres pour échéance de cotisation' + + name = fields.Char('Nom', compute='_compute_name') + quarter = fields.Integer('Trismestre', required=1) + + @api.multi + def _compute_name(self): + for r in self: + r.name = str(r.quarter) diff --git a/wizard/scop_bordereau_refund_wizard.xml b/wizard/scop_bordereau_refund_wizard.xml index a75e53d5150479e45b0d282f1b6c24c45d127c28..faac159b56a86c4e6a0b10094b66ccf3cf9c7d87 100644 --- a/wizard/scop_bordereau_refund_wizard.xml +++ b/wizard/scop_bordereau_refund_wizard.xml @@ -15,7 +15,7 @@ <field name="date_refund"/> <separator/> <field name="amount_refund"/> - <field name="cotiz_quarter"/> + <field name="quarter_ids" widget="many2many_checkboxes"/> <field name="comment"/> </group> </sheet>