2 from openerp.osv import fields, osv
3 import openerp.addons.decimal_precision as dp
4 from openerp.tools.translate import _
6 class CashBox(osv.osv_memory):
9 'name' : fields.char('Reason', size=64, required=True),
10 # Attention, we don't set a domain, because there is a journal_type key
11 # in the context of the action
12 'amount' : fields.float('Amount',
13 digits_compute = dp.get_precision('Account'),
17 def run(self, cr, uid, ids, context=None):
21 active_model = context.get('active_model', False) or False
22 active_ids = context.get('active_ids', []) or []
24 records = self.pool.get(active_model).browse(cr, uid, active_ids, context=context)
26 return self._run(cr, uid, ids, records, context=None)
28 def _run(self, cr, uid, ids, records, context=None):
29 for box in self.browse(cr, uid, ids, context=context):
30 for record in records:
31 if not record.journal_id:
32 raise osv.except_osv(_('Error!'),
33 _("Please check that the field 'Journal' is set on the Bank Statement"))
35 if not record.journal_id.internal_account_id:
36 raise osv.except_osv(_('Error!'),
37 _("Please check that the field 'Internal Transfers Account' is set on the payment method '%s'.") % (record.journal_id.name,))
39 self._create_bank_statement_line(cr, uid, box, record, context=context)
43 def _create_bank_statement_line(self, cr, uid, box, record, context=None):
44 values = self._compute_values_for_statement_line(cr, uid, box, record, context=context)
45 return self.pool.get('account.bank.statement.line').create(cr, uid, values, context=context)
48 class CashBoxIn(CashBox):
51 _columns = CashBox._columns.copy()
53 'ref' : fields.char('Reference', size=32),
56 def _compute_values_for_statement_line(self, cr, uid, box, record, context=None):
58 'statement_id' : record.id,
59 'journal_id' : record.journal_id.id,
60 'account_id' : record.journal_id.internal_account_id.id,
61 'amount' : box.amount or 0.0,
62 'ref' : '%s' % (box.ref or ''),
68 class CashBoxOut(CashBox):
69 _name = 'cash.box.out'
71 def _compute_values_for_statement_line(self, cr, uid, box, record, context=None):
72 amount = box.amount or 0.0
74 'statement_id' : record.id,
75 'journal_id' : record.journal_id.id,
76 'account_id' : record.journal_id.internal_account_id.id,
77 'amount' : -amount if amount > 0.0 else amount,