If money is withdrawn, we can't tell if it's a transfert to the bank account or if some money has been withdrawn to pay an invoice or some expense. We then assign the suspense account in order for the accountant to go through the reconciliation widget process in order to dispatch/assign the amount to the right account(s). This allows all the accounting process to go smoothly without any needs for the accountant to manually create a miscellaneous entry. Introduced by: closes odoo/odoo#82616 Pr: https://github.com/odoo/odoo/pull/82123 Commit: https://github.com/odoo/odoo/commit/336656e0e9677ccb2f43935b6f267fa83ed153df X-original-commit: 04396e0627fd36d28b047e0e122ffb55a3a12ebc Signed-off-by: Florian Gilbert <flg@odoo.com>
54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
from odoo import models, fields, api, _
|
|
from odoo.exceptions import UserError
|
|
|
|
class CashBox(models.TransientModel):
|
|
_register = False
|
|
|
|
name = fields.Char(string='Reason', required=True)
|
|
# Attention, we don't set a domain, because there is a journal_type key
|
|
# in the context of the action
|
|
amount = fields.Float(string='Amount', digits=0, required=True)
|
|
|
|
def run(self):
|
|
context = dict(self._context or {})
|
|
active_model = context.get('active_model', False)
|
|
active_ids = context.get('active_ids', [])
|
|
|
|
records = self.env[active_model].browse(active_ids)
|
|
|
|
return self._run(records)
|
|
|
|
def _run(self, records):
|
|
for box in self:
|
|
for record in records:
|
|
if not record.journal_id:
|
|
raise UserError(_("Please check that the field 'Journal' is set on the Bank Statement"))
|
|
if not record.journal_id.company_id.transfer_account_id:
|
|
raise UserError(_("Please check that the field 'Transfer Account' is set on the company."))
|
|
box._create_bank_statement_line(record)
|
|
return {}
|
|
|
|
def _create_bank_statement_line(self, record):
|
|
for box in self:
|
|
if record.state == 'confirm':
|
|
raise UserError(_("You cannot put/take money in/out for a bank statement which is closed."))
|
|
values = box._calculate_values_for_statement_line(record)
|
|
self.env['account.bank.statement.line'].sudo().create(values)
|
|
|
|
|
|
class CashBoxOut(CashBox):
|
|
_name = 'cash.box.out'
|
|
_description = 'Cash Box Out'
|
|
|
|
def _calculate_values_for_statement_line(self, record):
|
|
if not record.journal_id.company_id.transfer_account_id:
|
|
raise UserError(_("You have to define an 'Internal Transfer Account' in your cash register's journal."))
|
|
amount = self.amount or 0.0
|
|
return {
|
|
'date': record.date,
|
|
'statement_id': record.id,
|
|
'journal_id': record.journal_id.id,
|
|
'amount': amount,
|
|
'payment_ref': self.name,
|
|
}
|