Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IMP] Ricevute bancarie "Al dopo incasso" #3813

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions l10n_it_riba/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,10 @@ Nella configurazione delle RiBa è possibile specificare se si tratti di
'Salvo buon fine' o 'Al dopo incasso', che hanno un flusso completamente
diverso.

- Al dopo incasso: nessuna registrazione verrà effettuata
automaticamente e le fatture risulteranno pagate solo al momento
dell'effettivo incasso.
- Al dopo incasso: le fatture risulteranno pagate all'accettazione;
l'incasso potrà essere registrato con una normale riconciliazione
bancaria, che andrà a chiudere gli "effetti attivi" aperti
all'accettazione.
- Salvo buon fine: le registrazioni generate seguiranno la struttura
descritta nel documento http://goo.gl/jpRhJp

Expand Down Expand Up @@ -137,6 +138,10 @@ Contributors

- Simone Rubino <[email protected]>

- `TAKOBI <https://takobi.online>`__:

- Simone Rubino <[email protected]>

Maintainers
-----------

Expand Down
20 changes: 7 additions & 13 deletions l10n_it_riba/models/riba.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,21 +229,15 @@
line.invoice_number = ""
for move_line in line.move_line_ids:
line.amount += move_line.amount
if not line.invoice_date:
line.invoice_date = str(
fields.Date.from_string(
move_line.move_line_id.move_id.invoice_date
).strftime("%d/%m/%Y")
move_date = move_line.move_line_id.move_id.invoice_date
if move_date:
move_date = str(
fields.Date.from_string(move_date).strftime("%d/%m/%Y")
)
if not line.invoice_date:
line.invoice_date = move_date
else:
line.invoice_date = "{}, {}".format(
line.invoice_date,
str(
fields.Date.from_string(
move_line.move_line_id.move_id.invoice_date
).strftime("%d/%m/%Y")
),
)
line.invoice_date = f"{line.invoice_date}, {move_date}"

Check warning on line 240 in l10n_it_riba/models/riba.py

View check run for this annotation

Codecov / codecov/patch

l10n_it_riba/models/riba.py#L240

Added line #L240 was not covered by tests
if not line.invoice_number:
line.invoice_number = str(
move_line.move_line_id.move_id.name
Expand Down
6 changes: 3 additions & 3 deletions l10n_it_riba/readme/CONFIGURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ Nella configurazione delle RiBa è possibile specificare se si tratti di
'Salvo buon fine' o 'Al dopo incasso', che hanno un flusso completamente
diverso.

- Al dopo incasso: nessuna registrazione verrà effettuata
automaticamente e le fatture risulteranno pagate solo al momento
dell'effettivo incasso.
- Al dopo incasso: le fatture risulteranno pagate all'accettazione;
l'incasso potrà essere registrato con una normale riconciliazione bancaria,
che andrà a chiudere gli "effetti attivi" aperti all'accettazione.
- Salvo buon fine: le registrazioni generate seguiranno la struttura
descritta nel documento <http://goo.gl/jpRhJp>

Expand Down
2 changes: 2 additions & 0 deletions l10n_it_riba/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@
- Giovanni Serra \<<[email protected]>\>
- [Aion Tech](https://aiontech.company/):
- Simone Rubino \<<[email protected]>\>
- [TAKOBI](https://takobi.online):
- Simone Rubino \<<[email protected]>\>
11 changes: 8 additions & 3 deletions l10n_it_riba/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -392,9 +392,10 @@ <h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
‘Salvo buon fine’ o ‘Al dopo incasso’, che hanno un flusso completamente
diverso.</p>
<ul class="simple">
<li>Al dopo incasso: nessuna registrazione verrà effettuata
automaticamente e le fatture risulteranno pagate solo al momento
dell’effettivo incasso.</li>
<li>Al dopo incasso: le fatture risulteranno pagate all’accettazione;
l’incasso potrà essere registrato con una normale riconciliazione
bancaria, che andrà a chiudere gli “effetti attivi” aperti
all’accettazione.</li>
<li>Salvo buon fine: le registrazioni generate seguiranno la struttura
descritta nel documento <a class="reference external" href="http://goo.gl/jpRhJp">http://goo.gl/jpRhJp</a></li>
</ul>
Expand Down Expand Up @@ -470,6 +471,10 @@ <h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<li>Simone Rubino &lt;<a class="reference external" href="mailto:simone.rubino&#64;aion-tech.it">simone.rubino&#64;aion-tech.it</a>&gt;</li>
</ul>
</li>
<li><a class="reference external" href="https://takobi.online">TAKOBI</a>:<ul>
<li>Simone Rubino &lt;<a class="reference external" href="mailto:sir&#64;takobi.online">sir&#64;takobi.online</a>&gt;</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
Expand Down
12 changes: 12 additions & 0 deletions l10n_it_riba/tests/riba_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ def setUp(self):
}
)
self.riba_config = self.create_config()
self.riba_config_incasso = self.create_config_incasso()
self.account_payment_term_riba = self.env.ref(
"l10n_it_riba.account_payment_term_riba"
)
Expand Down Expand Up @@ -282,3 +283,14 @@ def create_config(self):
"protest_charge_account_id": self.expenses_account.id,
}
)

def create_config_incasso(self):
return self.env["riba.configuration"].create(
{
"name": "After Collection",
"type": "incasso",
"bank_id": self.company_bank.id,
"acceptance_journal_id": self.bank_journal.id,
"acceptance_account_id": self.sbf_effects.id,
}
)
77 changes: 76 additions & 1 deletion l10n_it_riba/tests/test_riba.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
import os

from odoo.exceptions import UserError
from odoo.tools import config
from odoo.tests import Form
from odoo.tools import config, safe_eval

from . import riba_common

Expand Down Expand Up @@ -238,6 +239,40 @@ def test_riba_flow(self):
self.assertEqual(riba_list.state, "credited")
self.assertEqual(riba_list.line_ids[0].state, "credited")

def test_riba_incasso_flow(self):
"""
RiBa of type 'After Collection' pays invoice when accepted.
"""
self.invoice.company_id.due_cost_service_id = self.service_due_cost
self.invoice.action_post()
self.assertEqual(self.invoice.state, "posted")

to_issue_action = self.env.ref("l10n_it_riba.action_riba_to_issue")
to_issue_model = self.env[to_issue_action.res_model]
to_issue_domain = safe_eval.safe_eval(to_issue_action.domain)
to_issue_records = (
to_issue_model.search(to_issue_domain) & self.invoice.line_ids
)
self.assertTrue(to_issue_records)

issue_wizard_context = {
"active_model": to_issue_records._name,
"active_ids": to_issue_records.ids,
}
issue_wizard_model = self.env["riba.issue"].with_context(**issue_wizard_context)
issue_wizard_form = Form(issue_wizard_model)
issue_wizard_form.configuration_id = self.riba_config_incasso
issue_wizard = issue_wizard_form.save()
issue_result = issue_wizard.create_list()

riba_list_id = issue_result["res_id"]
riba_list_model = issue_result["res_model"]
riba_list = self.env[riba_list_model].browse(riba_list_id)
riba_list.confirm()

self.assertEqual(riba_list.state, "accepted")
self.assertEqual(self.invoice.payment_state, "paid")

def test_past_due_riba(self):
# create another invoice to test past due RiBa
self.partner.property_account_receivable_id = self.account_rec1_id.id
Expand Down Expand Up @@ -580,3 +615,43 @@ def test_riba_bank_multicompany(self):
exc_message = ue.exception.args[0]
self.assertIn(current_company.name, exc_message)
self.assertIn(partner_bank.display_name, exc_message)

def test_riba_line_date_no_move(self):
"""
The RiBa line can compute the date when the linked move has been deleted.
"""
# Arrange: Create RiBa for an invoice
self.invoice.company_id.due_cost_service_id = self.service_due_cost
self.invoice.action_post()
self.assertEqual(self.invoice.state, "posted")

to_issue_action = self.env.ref("l10n_it_riba.action_riba_to_issue")
to_issue_model = self.env[to_issue_action.res_model]
to_issue_domain = safe_eval.safe_eval(to_issue_action.domain)
to_issue_records = (
to_issue_model.search(to_issue_domain) & self.invoice.line_ids
)
self.assertTrue(to_issue_records)

issue_wizard_context = {
"active_model": to_issue_records._name,
"active_ids": to_issue_records.ids,
}
issue_wizard_model = self.env["riba.issue"].with_context(**issue_wizard_context)
issue_wizard_form = Form(issue_wizard_model)
issue_wizard_form.configuration_id = self.riba_config_incasso
issue_wizard = issue_wizard_form.save()
issue_result = issue_wizard.create_list()

# Act: Delete the invoice
self.invoice.button_draft()
self.invoice.unlink()

# Assert: The dates on RiBa lines are empty
riba_list_id = issue_result["res_id"]
riba_list_model = issue_result["res_model"]
riba_list = self.env[riba_list_model].browse(riba_list_id)
self.assertEqual(
riba_list.line_ids.mapped("invoice_date"),
[False] * 2,
)
8 changes: 7 additions & 1 deletion l10n_it_riba/views/configuration_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,13 @@
<field name="past_due_journal_id" />
<field name="settlement_journal_id" />
</group>

<group
string="Acceptance"
attrs="{'required':[('type','=','incasso')]}"
>
<field name="acceptance_journal_id" />
<field name="acceptance_account_id" />
</group>
</form>
</field>
</record>
Expand Down
38 changes: 29 additions & 9 deletions l10n_it_riba/views/riba_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@
type='object'
string="Mark as Accepted"
class="oe_highlight"
attrs="{'invisible':['|',('state','!=','draft'),('type','=','incasso')]}"
attrs="{'invisible':['|',('state','!=','draft'),('type','not in',('incasso', 'sbf'))]}"
/>
<button
name="%(riba_credit_action)d"
Expand Down Expand Up @@ -223,12 +223,23 @@
</group>
</page>
<page string="Accounting">
<separator colspan="4" string="Acceptance Entries" />
<field name='acceptance_move_ids' colspan="4" nolabel="1" />
<separator colspan="4" string="Credit Entry" />
<field name='credit_move_id' colspan="4" nolabel="1" />
<separator colspan="4" string="Payments" />
<field name='payment_ids' colspan="4" nolabel="1">
<group
string="Acceptance Entries"
attrs="{'invisible':[('type', 'not in', ('incasso', 'sbf'))]}"
>
<field name='acceptance_move_ids' nolabel="1" />
</group>
<group
string="Credit Entry"
attrs="{'invisible':[('type', '!=', 'sbf')]}"
>
<field name='credit_move_id' nolabel="1" />
</group>
<group
string="Payments"
attrs="{'invisible':[('type', '!=', 'sbf')]}"
>
<field name='payment_ids' nolabel="1">
<tree>
<field name="date" />
<field name="move_id" />
Expand All @@ -241,8 +252,17 @@
<field name="currency_id" />
</tree>
</field>
<separator colspan="4" string="Past Dues" />
<field name='past_due_move_ids' colspan="4" nolabel="1" />
</group>
<group
colspan="4"
string="Past Dues"
attrs="{'invisible':[('type', '!=', 'sbf')]}"
>
<field
name='past_due_move_ids'
colspan="4"
nolabel="1"
/></group>
</page>
</notebook>
</form>
Expand Down
Loading