diff --git a/models/scop_bordereau_cg.py b/models/scop_bordereau_cg.py index 39cfc31e58f8e21ac57b8ecd037b3db94d25b788..69db36252d610517d7bdc2c0dea7458781295542 100644 --- a/models/scop_bordereau_cg.py +++ b/models/scop_bordereau_cg.py @@ -440,25 +440,13 @@ class Bordereau(models.Model): 'context': ctx, } - @api.multi - def update_cotiz_and_lines(self): - for bordereau in self: - if bordereau.state == 'new': - bordereau.create_cotiz_and_lines() - def update_bordereau_with_liasse(self): """ Supprime ou ajoute les appels de cotisations en fonction du nombre de trimestres choisi et de la liasse :return: """ - self.update_cotiz_and_lines() - for i in range(0, 4 - self.nb_quarter): - invoices_quarter_i = self.invoice_ids.filtered( - lambda inv: inv.cotiz_quarter == i + 1 - ) - if invoices_quarter_i: - invoices_quarter_i.unlink() + self.create_cotiz_and_lines() @api.multi def open_payment(self): @@ -551,6 +539,7 @@ class Bordereau(models.Model): 'version': self.version + 1, 'date_regul': ongoing_version.date, 'comment_regul': ongoing_version.comment, + 'is_regul': True, }) ongoing_version.write({ 'state': 'validated', @@ -593,7 +582,14 @@ class Bordereau(models.Model): # ------------------------------------------------------ # Global Functions # ------------------------------------------------------ - def create_cotiz_and_lines(self, is_regul=False): + def create_cotiz_and_lines(self): + """ + - Supprime les factures existantes si besoin + - Crée les appels de cotisation par trimestre + """ + + if self.invoice_ids: + self.invoice_ids.unlink() partner = self.partner_id liasse = self.liasse_fiscale_id @@ -611,7 +607,8 @@ class Bordereau(models.Model): amount_cg = self.env['scop.liasse.fiscale']. \ get_values_for_cotiz_cg(partner)['plancher1'] self.create_contribution( - product_cg_id, type_cotisation_cg, amount_cg, is_regul=is_regul) + product_cg_id, type_cotisation_cg, amount_cg + ) self.env.cr.commit() # Invoice UR et Fédé @@ -634,7 +631,8 @@ class Bordereau(models.Model): get_plancher_cotiz()['fede_com'] self.create_contribution( product_fede_com_id, type_cotisation_fede_com, amount_fede_com, - journal_ur_or_fede, account_id, is_regul=is_regul) + journal_ur_or_fede, account_id + ) self.env.cr.commit() # Invoice cotiz Fede CAE @@ -653,7 +651,7 @@ class Bordereau(models.Model): get_plancher_cotiz()['fede_cae'] self.create_contribution( product_fede_cae_id, type_cotisation_fede_cae, amount_fede_cae, - journal_ur_or_fede, account_id, is_regul=is_regul + journal_ur_or_fede, account_id ) self.env.cr.commit() @@ -672,7 +670,7 @@ class Bordereau(models.Model): get_plancher_cotiz()['ur_hdf'] self.create_contribution( product_hdf_id, type_cotisation_ur, amount_hdf, - journal_ur_or_fede, account_id, is_regul=is_regul + journal_ur_or_fede, account_id ) self.env.cr.commit() @@ -691,24 +689,21 @@ class Bordereau(models.Model): get_plancher_cotiz()['ur_med'] self.create_contribution( product_med_id, type_cotisation_ur, amount_med, - journal_ur_or_fede, account_id, is_regul=is_regul) + journal_ur_or_fede, account_id + ) self.env.cr.commit() def create_contribution( self, product, type_contribution, amount=0, - journal_id=False, account_id=False, type_invoice='out_invoice', - is_regul=False): + journal_id=False, account_id=False, type_invoice='out_invoice'): """ Create invoice from Contribution Base :param product: product_id - :param partner: partner_id :param type_contribution: type_contribution (CG, UR, Fédé) - :param liasse: liasse_fiscale_id (reference) :param amount: contribution amount (float) :param journal_id: journal :param account_id: customer_account_id :param type_invoice: invoice or refund - :param is_regul: used for CG Scop regul :return: invoice """ Invoice = self.env['account.invoice'] @@ -728,49 +723,30 @@ class Bordereau(models.Model): for i in range(1, self.nb_quarter + 1): cotiz_quarter = (4 - self.nb_quarter) + i - domain = [('partner_id', '=', partner.id), - ('year', '=', self.year), - ('type_contribution_id', '=', type_contribution), - ('bordereau_id', '=', self.id), - ('cotiz_quarter', '=', cotiz_quarter)] - - existing_invoice = Invoice.search(domain) - - if not existing_invoice or is_regul: - journal_id = self.company_id.contribution_journal_id \ - if not journal_id else journal_id - account_id = partner.property_account_receivable_id \ - if not account_id else account_id - member_invoice = Invoice.create({ - 'partner_id': partner.id, - 'liasse_fiscale_id': liasse.id, - 'type': type_invoice, - 'year': self.year, - 'is_contribution': True, - 'type_contribution_id': type_contribution, - 'journal_id': journal_id.id, - 'state': 'draft', - 'account_id': account_id.id, - 'payment_mode_id': partner.customer_payment_mode_id.id, - 'date_invoice': self.date_cotisation, - 'date_due': quarters[cotiz_quarter - 1], - 'bordereau_id': self.id, - 'amount_cg_calculated': amount, - 'cotiz_quarter': cotiz_quarter, - }) - else: - member_invoice = existing_invoice - member_invoice.write({ - 'liasse_fiscale_id': liasse.id, - 'amount_cg_calculated': amount, - 'cotiz_quarter': cotiz_quarter, - }) - # Création de la ligne CG Scop - exisiting_invoice_line_ids = InvoiceLine.search([ - ('invoice_id', '=', member_invoice.id), - ('product_id', '=', product.id) - ]) + journal_id = self.company_id.contribution_journal_id \ + if not journal_id else journal_id + account_id = partner.property_account_receivable_id \ + if not account_id else account_id + member_invoice = Invoice.create({ + 'partner_id': partner.id, + 'liasse_fiscale_id': liasse.id, + 'type': type_invoice, + 'year': self.year, + 'is_contribution': True, + 'type_contribution_id': type_contribution, + 'journal_id': journal_id.id, + 'state': 'draft', + 'account_id': account_id.id, + 'payment_mode_id': partner.customer_payment_mode_id.id, + 'date_invoice': self.date_cotisation, + 'date_due': quarters[cotiz_quarter - 1], + 'bordereau_id': self.id, + 'amount_cg_calculated': amount, + 'cotiz_quarter': cotiz_quarter, + }) + + # Création de la ligne de cotisation price_unit = amount / 4 # TODO: Specific CAE calculation : to be deleted when 2022 is generated @@ -781,19 +757,14 @@ class Bordereau(models.Model): price_unit = (amount - 25) / 3 # ... End specific CAE 2022 - if not exisiting_invoice_line_ids or is_regul: - InvoiceLine.create({ - 'invoice_id': member_invoice.id, - 'product_id': product.id, - 'account_id': product.property_account_income_id.id, - 'invoice_line_tax_ids': [(6, 0, product.taxes_id.ids)], - 'name': product.name + " T" + str(cotiz_quarter), - 'price_unit': price_unit - }) - else: - exisiting_invoice_line_ids[0].write({ - 'price_unit': price_unit - }) + InvoiceLine.create({ + 'invoice_id': member_invoice.id, + 'product_id': product.id, + 'account_id': product.property_account_income_id.id, + 'invoice_line_tax_ids': [(6, 0, product.taxes_id.ids)], + 'name': product.name + " T" + str(cotiz_quarter), + 'price_unit': price_unit + }) def check_ongoing_version(self): """ diff --git a/models/scop_cotisation_cg.py b/models/scop_cotisation_cg.py index 266efce44c689af983d42d4d1eb72bc865f234b6..15fe11b0dfa4c8b6d2c2d75eea7f700ffac235c4 100644 --- a/models/scop_cotisation_cg.py +++ b/models/scop_cotisation_cg.py @@ -320,8 +320,7 @@ class ScopCotisation(models.Model): 'target': 'current', } - def create_bordereau( - self, member, nb_quarter, liasse=None, date=False, is_regul=False): + def create_bordereau(self, member, nb_quarter, liasse=None, date=False): """ Création du bordereau de cotisations :param member: @@ -330,35 +329,30 @@ class ScopCotisation(models.Model): :param date: :return bordereau_id: """ - bordereau = self.env['scop.bordereau'].search([ - ('partner_id', '=', member.id), - ('year', '=', self.year), - ]) - if not bordereau or is_regul: - # Variables to calculate cotiz - staff_id = self.get_last_staff_id(member) - if staff_id: - staff_shareholder_count = staff_id.staff_shareholder_count - staff_count = staff_id.staff_count - staff_average = staff_id.staff_average - else: - staff_shareholder_count = 0 - staff_count = 0 - staff_average = 0 - date_invoice = date if date else self.date_cotisation - - bordereau = self.env['scop.bordereau'].create({ - 'partner_id': member.id, - 'payment_mode_id': member.customer_payment_mode_id.id, - 'base_cotisation_cg': self.id, - 'liasse_fiscale_id': liasse.id if liasse else None, - 'year_liasse': liasse.year if liasse else 0, - 'date_cotisation': date_invoice, - 'nb_quarter': nb_quarter, - 'staff_count': staff_count, - 'staff_shareholder_count': staff_shareholder_count, - 'staff_average': staff_average, - }) + # Variables to calculate cotiz + staff_id = self.get_last_staff_id(member) + if staff_id: + staff_shareholder_count = staff_id.staff_shareholder_count + staff_count = staff_id.staff_count + staff_average = staff_id.staff_average + else: + staff_shareholder_count = 0 + staff_count = 0 + staff_average = 0 + date_invoice = date if date else self.date_cotisation + + bordereau = self.env['scop.bordereau'].create({ + 'partner_id': member.id, + 'payment_mode_id': member.customer_payment_mode_id.id, + 'base_cotisation_cg': self.id, + 'liasse_fiscale_id': liasse.id if liasse else None, + 'year_liasse': liasse.year if liasse else 0, + 'date_cotisation': date_invoice, + 'nb_quarter': nb_quarter, + 'staff_count': staff_count, + 'staff_shareholder_count': staff_shareholder_count, + 'staff_average': staff_average, + }) bordereau.create_cotiz_and_lines() return bordereau.id diff --git a/wizard/scop_bordereau_update_confirm.py b/wizard/scop_bordereau_update_confirm.py index 0779da108029618241dd39281f1fbc23f5dd1dce..d14e35b55aae3103f33a53f7e3c5e89f5e607790 100644 --- a/wizard/scop_bordereau_update_confirm.py +++ b/wizard/scop_bordereau_update_confirm.py @@ -22,5 +22,5 @@ class ScopBordereauUpdate(models.TransientModel): if record.state != 'new': raise UserError(_("Impossible de mettre à jour un bordereau " "qui n'est pas à l'état de brouillon")) - record.update_cotiz_and_lines() + record.create_cotiz_and_lines() return {'type': 'ir.actions.act_window_close'} diff --git a/wizard/scop_bordereau_update_liasse_wizard.py b/wizard/scop_bordereau_update_liasse_wizard.py index ec2fce167e6f625a38734108ab15796531e9ece2..be934a378dc0c2eadf192f0467f3753f85b38b39 100644 --- a/wizard/scop_bordereau_update_liasse_wizard.py +++ b/wizard/scop_bordereau_update_liasse_wizard.py @@ -2,6 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import fields, models, api +from odoo.exceptions import UserError class ScopBordereauChangeLiasse(models.TransientModel): @@ -145,9 +146,11 @@ class ScopBordereauChangeLiasse(models.TransientModel): # ------------------------------------------------------ def update_liasse_fiscale(self): bordereau_id = self.bordereau_id + if not self.liasse_fiscale_new_id: + raise UserError('Merci de choisir une nouvelle liasse fiscale.') # Link new liasse fiscale to bordereau bordereau_id.update({ 'liasse_fiscale_id': self.liasse_fiscale_new_id, }) - bordereau_id.update_cotiz_and_lines() + bordereau_id.create_cotiz_and_lines() return {'type': 'ir.actions.act_window_close'}