diff --git a/models/acc_account.py b/models/acc_account.py index 8e6f3bab117094ea8cf1d814786b866ad3bafbaf..fcc1454355c18909eb5a15b5480f8014b19e375d 100644 --- a/models/acc_account.py +++ b/models/acc_account.py @@ -1,7 +1,10 @@ # Copyright 2021 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 dateutil.relativedelta import relativedelta + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError class AccAccount(models.Model): @@ -91,18 +94,12 @@ class AccAccount(models.Model): amount_tax = fields.Monetary( string="Taxe", store=True, readonly=True, compute="_compute_amount" ) - amount_tax_tcfe = fields.Monetary( - string="Taxes CPSE/TCF", store=True, readonly=True, compute="_compute_amount" - ) amount_total = fields.Monetary( string="Total", store=True, readonly=True, compute="_compute_amount" ) # inverse='_inverse_amount_total') power_cons = fields.Float("Consommation locale (index Enedis)") url = fields.Char("URL", compute="_compute_url", store=True) - tax_tcfe = fields.Float( - "Taxes CPSE/TCF (en €/kWh)", digits="Sale Price", default=0.105 - ) @api.model_create_multi def create(self, vals_list): @@ -141,13 +138,11 @@ class AccAccount(models.Model): "line_ids.price_total", "line_ids.price_unit", "line_ids.quantity", - "tax_tcfe", ) def _compute_amount(self): for move in self: total_tax = 0.0 total = 0.0 - amount_tax_tcfe = 0.0 tot_qty = 0.0 for line in move.line_ids: @@ -157,13 +152,9 @@ class AccAccount(models.Model): if move.is_tva and move.tax_id: total_tax = (total * move.tax_id.amount) / 100 - if move.tax_tcfe > 0: - amount_tax_tcfe = (tot_qty * move.tax_tcfe) / 100 - move.amount_untaxed = total move.amount_tax = total_tax - move.amount_tax_tcfe = amount_tax_tcfe - move.amount_total = total + total_tax + amount_tax_tcfe + move.amount_total = total + total_tax def _compute_url(self): for account in self: @@ -243,3 +234,44 @@ class AccAccountTaxTcfe(models.Model): "res.currency", "Devise", default=_get_default_currency_id ) price = fields.Float("Tarif", digits="Sale Price") + + @api.model_create_multi + def create(self, vals_list): + new_vals = [] + for vals in vals_list: + if "start_date" in vals: + start_date = fields.Date.to_date(vals["start_date"]) + + # If date start period doesn't exist + price_ids = self.env["acc.account.tax.tcfe"].search([]) + + # Creation d'une nouvelle période date anniversaire à date renseignée - 1 jour + if not price_ids: + val_new = { + "price": vals["price"], + "start_date": "01/01/2000", + "end_date": start_date - relativedelta(days=1), + } + new_vals.append(val_new) + + # Si une période existe après la date renseignée + price_ids = self.env["acc.account.tax.tcfe"].search( + [ + ("start_date", "<=", start_date), + ("end_date", ">", start_date), + ] + ) + if price_ids: + raise ValidationError( + _("Un prix de vente existe déjà pour cette date là") + ) + + price_id = self.env["acc.account.tax.tcfe"].search([], + limit=1, + order="create_date desc", + ) + if price_id: + price_id.end_date = start_date - relativedelta(days=1) + vals_list += new_vals + res = super(AccAccountTaxTcfe, self).create(vals_list) + return res diff --git a/models/acc_operation.py b/models/acc_operation.py index 200184972e3e430da3be380c1813df881c9bad80..d9e6d9a0506cac06bae647a6270b177a57ab4f77 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -43,9 +43,6 @@ class AccOperation(models.Model): string="Nombre de factures Surplus", compute="_compute_acc_account_surplus_count", ) - tax_tcfe = fields.Float( - "Taxes CPSE/TCF (en €/kWh)", digits="Sale Price", default=0.105 - ) # ------------------------------------------------------ # SQL Constraints @@ -211,7 +208,6 @@ class AccOperation(models.Model): "power_cons": power_total, "start_date": date_start, "end_date": date_end, - "tax_tcfe": self.tax_tcfe, } ) @@ -243,6 +239,8 @@ class AccOperation(models.Model): ) interval_ids = price_ids & price2_ids + # Création des lignes de facturation + # pour chaque période de tarifs trouvée for interval in interval_ids: if date_start > interval.start_date: date_interval_start = date_start @@ -283,6 +281,67 @@ class AccOperation(models.Model): ) account_list.append(acc_account) + tax_interval_ids = self.env["acc.account.tax.tcfe"].search( + [ + ("start_date", "<=", date_start), + ("end_date", "=", False), + ] + ) + if not tax_interval_ids: + tax_ids = self.env["acc.account.tax.tcfe"].search( + [ + ("end_date", ">=", date_start), + ] + ) + tax2_ids = self.env["acc.account.tax.tcfe"].search( + [ + ("start_date", "<=", date_end), + ] + ) + tax_interval_ids = tax_ids & tax2_ids + + # Création des lignes de facturation + # pour chaque période de taxes trouvée + for interval in tax_interval_ids: + if date_start > interval.start_date: + date_interval_start = date_start + else: + date_interval_start = interval.start_date + + if interval.end_date: + if date_end < interval.end_date: + date_interval_end = date_end + else: + date_interval_end = interval.end_date + else: + date_interval_end = date_end + + power_total = self.calc_power_by_cons_by_prod( + acc_injection_id, + acc_delivery_id, + date_interval_start, + date_interval_end, + ) + + AccountLine = self.env["acc.account.line"] + + # Création de la ligne de facture + # par intervalle de période de prix + AccountLine.create( + { + "quantity": power_total, + "price_unit": interval.price, + "acc_account_id": acc_account.id, + "start_date": date_interval_start, + "end_date": date_interval_end, + "description": "TCFE - Période du " + + str(date_interval_start) + + " au " + + str(date_interval_end), + } + ) + account_list.append(acc_account) + action = self.env["ir.actions.actions"]._for_xml_id( "acc_account.action_acc_account" ) diff --git a/report/account_template.xml b/report/account_template.xml index 62006b96b0647ed3ba409b4b0d647b8d89a8b673..3309a93715a239a3e023d82424ffb53529be22eb 100644 --- a/report/account_template.xml +++ b/report/account_template.xml @@ -152,21 +152,6 @@ </t> </tr> </t> - <tr style=""> - <t> - <td><span - class="text-nowrap" - />Taxes CPSE/TCF</td> - <td - class="text-right o_price_total" - > - <span - class="text-nowrap" - t-field="o.amount_tax_tcfe" - /> - </td> - </t> - </tr> <tr class="border-black o_total"> <td><strong>Total</strong></td> <td class="text-right"> @@ -456,21 +441,6 @@ </t> </tr> </t> - <tr style=""> - <t> - <td><span - class="text-nowrap" - />Taxes CPSE/TCF</td> - <td - class="text-right o_price_total" - > - <span - class="text-nowrap" - t-field="o.amount_tax_tcfe" - /> - </td> - </t> - </tr> <tr class="border-black o_total"> <td><strong>Total</strong></td> <td class="text-right"> diff --git a/views/acc_account_views.xml b/views/acc_account_views.xml index 565f85a3b1365c837daaac18cb26d9e611740919..750cf8ecfcff205a33100abaceb7de373f9f4e23 100644 --- a/views/acc_account_views.xml +++ b/views/acc_account_views.xml @@ -241,10 +241,6 @@ <field name="start_date" /> <field name="end_date" /> <field name="power_cons" /> - <field - name="tax_tcfe" - options="{'field_digits': True}" - /> </group> </group> <group> @@ -296,7 +292,6 @@ name="amount_tax" attrs="{'invisible': [('is_tva', '=', False)]}" /> - <field name="amount_tax_tcfe" readonly="1" /> <field name="amount_total" class="oe_subtotal_footer_separator" @@ -383,8 +378,21 @@ </field> </record> + <record id="acc_view_tax_tcfe_tree" model="ir.ui.view"> + <field name="name">acc.account.tax.tcfe.tree</field> + <field name="model">acc.account.tax.tcfe</field> + <field name="arch" type="xml"> + <tree string="Taxes TCFE"> + <field name="start_date" /> + <field name="end_date" /> + <field name="currency_id" /> + <field name="price" /> + </tree> + </field> + </record> + <record id="acc_action_tcfe_form" model="ir.actions.act_window"> - <field name="name">Taxes</field> + <field name="name">Taxes </field> <field name="res_model">acc.account.tax.tcfe</field> <field name="view_mode">tree,form</field> </record> diff --git a/views/acc_operation_views.xml b/views/acc_operation_views.xml index b095380632992589ba8d1d2a6087f9a559628942..5e68cd60a21bc42b4a5af8b5b795168586c9068b 100644 --- a/views/acc_operation_views.xml +++ b/views/acc_operation_views.xml @@ -123,9 +123,6 @@ name="account" attrs="{'invisible': [('is_account_active', '=', False)]}" > - <group> - <field name="tax_tcfe" options="{'field_digits': True}" /> - </group> <field name="acc_account_ids" widget="one2many"