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][14.0] l10n_it_ricevute_bancarie: small QoL improvements #4306

Merged
merged 3 commits into from
Aug 5, 2024
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
34 changes: 31 additions & 3 deletions l10n_it_ricevute_bancarie/models/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,17 +97,20 @@ def create(self, vals):

@api.onchange("partner_id", "invoice_payment_term_id", "move_type")
def _onchange_riba_partner_bank_id(self):
allowed_banks = (
self.partner_id.bank_ids or self.partner_id.commercial_partner_id.bank_ids
)
if (
not self.riba_partner_bank_id
or self.riba_partner_bank_id not in self.partner_id.bank_ids
or self.riba_partner_bank_id not in allowed_banks
):
bank_ids = self.env["res.partner.bank"]
if (
self.partner_id
and self.invoice_payment_term_id.riba
and self.is_riba_payment
SirAionTech marked this conversation as resolved.
Show resolved Hide resolved
and self.move_type in ["out_invoice", "out_refund"]
):
bank_ids = self.partner_id.bank_ids
bank_ids = allowed_banks
self.riba_partner_bank_id = bank_ids[0] if bank_ids else None

def month_check(self, invoice_date_due, all_date_due):
Expand All @@ -121,6 +124,31 @@ def month_check(self, invoice_date_due, all_date_due):
return True
return False

def _post(self, soft=True):
inv_riba_no_bank = self.filtered(
lambda x: x.is_riba_payment
and x.move_type == "out_invoice"
and not x.riba_partner_bank_id
)
if inv_riba_no_bank:
inv_details = (
_(
'Invoice %(name)s for customer "%(customer_name)s", total %(amount)s',
name=inv.display_name,
customer_name=inv.partner_id.display_name,
amount=inv.amount_total,
)
for inv in inv_riba_no_bank
)
raise UserError(
_(
"Cannot post invoices with C/O payments without bank. "
"Please check the following invoices:\n\n- "
+ "\n- ".join(inv_details)
)
)
return super()._post(soft=soft)

def action_post(self):
for invoice in self:
# ---- Add a line with collection fees for each due date only for first due
Expand Down
14 changes: 14 additions & 0 deletions l10n_it_ricevute_bancarie/tests/test_riba.py
Original file line number Diff line number Diff line change
Expand Up @@ -550,3 +550,17 @@ def test_riba_bank_multicompany(self):
exc_message = ue.exception.args[0]
self.assertIn(self.env.company.name, exc_message)
self.assertIn(self.company2_bank.acc_number, exc_message)

def test_riba_inv_no_bank(self):
"""
Test that a riba invoice without a bank defined
cannot be confirmed (e.g. via the list view)
"""
self.invoice.company_id.due_cost_service_id = self.service_due_cost.id
self.invoice.riba_partner_bank_id = False
with self.assertRaises(UserError) as err:
self.invoice.action_post()
err_msg = err.exception.args[0]
self.assertIn("Cannot post invoices", err_msg)
self.assertIn(self.invoice.partner_id.display_name, err_msg)
self.assertIn(str(self.invoice.amount_total), err_msg)
15 changes: 10 additions & 5 deletions l10n_it_ricevute_bancarie/views/account_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -140,11 +140,16 @@
<xpath expr="//field[@name='invoice_payment_term_id']" position="after">
<field name="is_riba_payment" invisible="1" />
<field name="commercial_partner_id" invisible="1" />
<field
name="riba_partner_bank_id"
attrs="{'invisible': ['|',('is_riba_payment','=', False),('move_type','!=','out_invoice')], 'required': ['&amp;',('is_riba_payment','=', True),('move_type','=', 'out_invoice')]}"
domain="[('partner_id','=', commercial_partner_id)]"
/>
<div
attrs="{'invisible': ['|',('is_riba_payment','=', False),('move_type','!=','out_invoice')]}"
>
<span class="oe_read_only">&amp;nbsp;- </span>
<field
name="riba_partner_bank_id"
attrs="{'required': ['&amp;',('is_riba_payment','=', True),('move_type','=', 'out_invoice')]}"
domain="[('partner_id','=', commercial_partner_id)]"
/>
</div>
<field
name="is_unsolved"
string="Past Due"
Expand Down
Loading