if context.get('company_id', False):
company_clause = " AND " +obj+".company_id = %s" % context.get('company_id', False)
if not context.get('fiscalyear', False):
- fiscalyear_ids = fiscalyear_obj.search(cr, uid, [('state', '=', 'draft')])
+ if context.get('all_fiscalyear', False):
+ #this option is needed by the aged balance report because otherwise, if we search only the draft ones, an open invoice of a closed fiscalyear won't be displayed
+ fiscalyear_ids = fiscalyear_obj.search(cr, uid, [])
+ else:
+ fiscalyear_ids = fiscalyear_obj.search(cr, uid, [('state', '=', 'draft')])
else:
#for initial balance as well as for normal query, we check only the selected FY because the best practice is to generate the FY opening entries
fiscalyear_ids = [context['fiscalyear']]
if context.get('date_from', False) and context.get('date_to', False):
if initial_bal:
- where_move_lines_by_date = " OR " +obj+".move_id IN (SELECT id FROM account_move WHERE date < '" +context['date_from']+"')"
+ where_move_lines_by_date = " AND " +obj+".move_id IN (SELECT id FROM account_move WHERE date < '" +context['date_from']+"')"
else:
where_move_lines_by_date = " AND " +obj+".move_id IN (SELECT id FROM account_move WHERE date >= '" +context['date_from']+"' AND date <= '"+context['date_to']+"')"
context['periods'] = fiscalperiod_obj.build_ctx_periods(cr, uid, context['period_from'], context['period_to'])
if context.get('periods', False):
if initial_bal:
- query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s) %s %s)" % (fiscalyear_clause, where_move_state, where_move_lines_by_date)
+ query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s)) %s %s" % (fiscalyear_clause, where_move_state, where_move_lines_by_date)
period_ids = fiscalperiod_obj.search(cr, uid, [('id', 'in', context['periods'])], order='date_start', limit=1)
if period_ids and period_ids[0]:
first_period = fiscalperiod_obj.browse(cr, uid, period_ids[0], context=context)
ids = ','.join([str(x) for x in context['periods']])
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s) AND id IN (%s)) %s %s" % (fiscalyear_clause, ids, where_move_state, where_move_lines_by_date)
else:
- query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s) %s %s)" % (fiscalyear_clause, where_move_state, where_move_lines_by_date)
+ query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s)) %s %s" % (fiscalyear_clause, where_move_state, where_move_lines_by_date)
if context.get('journal_ids', False):
query += ' AND '+obj+'.journal_id IN (%s)' % ','.join(map(str, context['journal_ids']))
query += ' AND '+obj+'.account_id IN (%s)' % ','.join(map(str, child_ids))
query += company_clause
-
return query
+ def _amount_residual(self, cr, uid, ids, field_names, args, context=None):
+ """
+ This function returns the residual amount on a receivable or payable account.move.line.
+ By default, it returns an amount in the currency of this journal entry (maybe different
+ of the company currency), but if you pass 'residual_in_company_currency' = True in the
+ context then the returned amount will be in company currency.
+ """
+ res = {}
+ if context is None:
+ context = {}
+ cur_obj = self.pool.get('res.currency')
+ for move_line in self.browse(cr, uid, ids, context=context):
+ res[move_line.id] = {
+ 'amount_residual': 0.0,
+ 'amount_residual_currency': 0.0,
+ }
+
+ if move_line.reconcile_id:
+ continue
+ if not move_line.account_id.type in ('payable', 'receivable'):
+ #this function does not suport to be used on move lines not related to payable or receivable accounts
+ continue
+
+ if move_line.currency_id:
+ move_line_total = move_line.amount_currency
+ sign = move_line.amount_currency < 0 and -1 or 1
+ else:
+ move_line_total = move_line.debit - move_line.credit
+ sign = (move_line.debit - move_line.credit) < 0 and -1 or 1
+ line_total_in_company_currency = move_line.debit - move_line.credit
+ context_unreconciled = context.copy()
+ if move_line.reconcile_partial_id:
+ for payment_line in move_line.reconcile_partial_id.line_partial_ids:
+ if payment_line.id == move_line.id:
+ continue
+ if payment_line.currency_id and move_line.currency_id and payment_line.currency_id.id == move_line.currency_id.id:
+ move_line_total += payment_line.amount_currency
+ else:
+ if move_line.currency_id:
+ context_unreconciled.update({'date': payment_line.date})
+ amount_in_foreign_currency = cur_obj.compute(cr, uid, move_line.company_id.currency_id.id, move_line.currency_id.id, (payment_line.debit - payment_line.credit), round=False, context=context_unreconciled)
+ move_line_total += amount_in_foreign_currency
+ else:
+ move_line_total += (payment_line.debit - payment_line.credit)
+ line_total_in_company_currency += (payment_line.debit - payment_line.credit)
+
+ result = move_line_total
+ res[move_line.id]['amount_residual_currency'] = sign * (move_line.currency_id and self.pool.get('res.currency').round(cr, uid, move_line.currency_id, result) or result)
+ res[move_line.id]['amount_residual'] = sign * line_total_in_company_currency
+ return res
+
def default_get(self, cr, uid, fields, context=None):
data = self._default_get(cr, uid, fields, context=context)
for f in data.keys():
del data[f]
return data
- def create_analytic_lines(self, cr, uid, ids, context={}):
+ def create_analytic_lines(self, cr, uid, ids, context=None):
acc_ana_line_obj = self.pool.get('account.analytic.line')
- for obj_line in self.browse(cr, uid, ids, context):
+ for obj_line in self.browse(cr, uid, ids, context=context):
if obj_line.analytic_account_id:
if not obj_line.journal_id.analytic_journal_id:
raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, ))
del(data['account_tax_id'])
return data
- def convert_to_period(self, cr, uid, context={}):
+ def convert_to_period(self, cr, uid, context=None):
+ if context is None:
+ context = {}
period_obj = self.pool.get('account.period')
#check if the period_id changed in the context from client side
if context.get('period_id', False):
})
return context
- def _default_get(self, cr, uid, fields, context={}):
+ def _default_get(self, cr, uid, fields, context=None):
+ if context is None:
+ context = {}
if not context.get('journal_id', False) and context.get('search_default_journal_id', False):
context['journal_id'] = context.get('search_default_journal_id')
account_obj = self.pool.get('account.account')
currency_obj = self.pool.get('res.currency')
context = self.convert_to_period(cr, uid, context)
# Compute simple values
- data = super(account_move_line, self).default_get(cr, uid, fields, context)
+ data = super(account_move_line, self).default_get(cr, uid, fields, context=context)
# Starts: Manual entry from account.move form
if context.get('lines',[]):
total_new = 0.00
- for i in context['lines']:
- if i[2]:
- total_new += (i[2]['debit'] or 0.00)- (i[2]['credit'] or 0.00)
- for item in i[2]:
- data[item] = i[2][item]
+ for line_record in context['lines']:
+ if not isinstance(line_record, (tuple, list)):
+ line_record_detail = self.read(cr, uid, line_record, ['analytic_account_id','debit','credit','name','reconcile_id','tax_code_id','tax_amount','account_id','ref','currency_id','date_maturity','amount_currency','partner_id', 'reconcile_partial_id'])
+ else:
+ line_record_detail = line_record[2]
+ total_new += (line_record_detail['debit'] or 0.00)- (line_record_detail['credit'] or 0.00)
+ for item in line_record_detail.keys():
+ data[item] = line_record_detail[item]
if context['journal']:
- journal_data = journal_obj.browse(cr, uid, context['journal'])
+ journal_data = journal_obj.browse(cr, uid, context['journal'], context=context)
if journal_data.type == 'purchase':
if total_new > 0:
account = journal_data.default_credit_account_id
else:
account = journal_data.default_debit_account_id
if account and ((not fields) or ('debit' in fields) or ('credit' in fields)) and 'partner_id' in data and (data['partner_id']):
- part = partner_obj.browse(cr, uid, data['partner_id'])
+ part = partner_obj.browse(cr, uid, data['partner_id'], context=context)
account = fiscal_pos_obj.map_account(cr, uid, part and part.property_account_position or False, account.id)
- account = account_obj.browse(cr, uid, account)
+ account = account_obj.browse(cr, uid, account, context=context)
data['account_id'] = account.id
s = -total_new
return data
total = 0
ref_id = False
- move = move_obj.browse(cr, uid, move_id, context)
+ move = move_obj.browse(cr, uid, move_id, context=context)
if 'name' in fields:
data.setdefault('name', move.line_id[-1].name)
acc1 = False
# part = False is acceptable for fiscal position.
account = fiscal_pos_obj.map_account(cr, uid, part and part.property_account_position or False, account.id)
if account:
- account = account_obj.browse(cr, uid, account)
+ account = account_obj.browse(cr, uid, account, context=context)
if account and ((not fields) or ('debit' in fields) or ('credit' in fields)):
data['account_id'] = account.id
acc = account
if s>0:
acc = acc1
- v = currency_obj.compute(cr, uid, account.company_id.currency_id.id, data['currency_id'], s, account=acc, account_invert=True)
+ compute_ctx = context.copy()
+ compute_ctx.update({
+ 'res.currency.compute.account': acc,
+ 'res.currency.compute.account_invert': True,
+ })
+ v = currency_obj.compute(cr, uid, account.company_id.currency_id.id, data['currency_id'], s, context=compute_ctx)
data['amount_currency'] = v
return data
- def on_create_write(self, cr, uid, id, context={}):
+ def on_create_write(self, cr, uid, id, context=None):
if not id:
return []
- ml = self.browse(cr, uid, id, context)
+ ml = self.browse(cr, uid, id, context=context)
return map(lambda x: x.id, ml.move_id.line_id)
def _balance(self, cr, uid, ids, name, arg, context=None):
context = {}
c = context.copy()
c['initital_bal'] = True
- sql = """SELECT l2.id, SUM(l1.debit-l1.credit)
+ sql = """SELECT l2.id, SUM(l1.debit-l1.credit)
FROM account_move_line l1, account_move_line l2
WHERE l2.account_id = l1.account_id
AND l1.id <= l2.id
- AND l2.id IN %%s AND """ + \
+ AND l2.id IN %s AND """ + \
self._query_get(cr, uid, obj='l1', context=c) + \
" GROUP BY l2.id"
cr.execute(sql, [tuple(ids)])
- res = dict(cr.fetchall())
- return res
+ return dict(cr.fetchall())
def _invoice(self, cursor, user, ids, name, arg, context=None):
invoice_obj = self.pool.get('account.invoice')
res[line_id] = (invoice_id, invoice_names[invoice_id])
return res
- def name_get(self, cr, uid, ids, context={}):
+ def name_get(self, cr, uid, ids, context=None):
if not ids:
return []
result = []
- for line in self.browse(cr, uid, ids, context):
+ for line in self.browse(cr, uid, ids, context=context):
if line.ref:
result.append((line.id, (line.move_id.name or '')+' ('+line.ref+')'))
else:
'reconcile_id': fields.many2one('account.move.reconcile', 'Reconcile', readonly=True, ondelete='set null', select=2),
'reconcile_partial_id': fields.many2one('account.move.reconcile', 'Partial Reconcile', readonly=True, ondelete='set null', select=2),
'amount_currency': fields.float('Amount Currency', help="The amount expressed in an optional other currency if it is a multi-currency entry.", digits_compute=dp.get_precision('Account')),
+ 'amount_residual_currency': fields.function(_amount_residual, method=True, string='Residual Amount', multi="residual", help="The residual amount on a receivable or payable of a journal entry expressed in its currency (maybe different of the company currency)."),
+ 'amount_residual': fields.function(_amount_residual, method=True, string='Residual Amount', multi="residual", help="The residual amount on a receivable or payable of a journal entry expressed in the company currency."),
'currency_id': fields.many2one('res.currency', 'Currency', help="The optional other currency if it is a multi-currency entry."),
'period_id': fields.many2one('account.period', 'Period', required=True, select=2),
'journal_id': fields.many2one('account.journal', 'Journal', required=True, select=1),
'blocked': fields.boolean('Litigation', help="You can check this box to mark this journal item as a litigation with the associated partner"),
'partner_id': fields.many2one('res.partner', 'Partner', select=1, ondelete='restrict'),
- 'date_maturity': fields.date('Due date', help="This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line."),
- 'date': fields.related('move_id','date', string='Effective date', type='date', required=True,
+ 'date_maturity': fields.date('Due date', select=True ,help="This field is used for payable and receivable journal entries. You can put the limit date for the payment of this line."),
+ 'date': fields.related('move_id','date', string='Effective date', type='date', required=True, select=True,
store = {
'account.move': (_get_move_lines, ['date'], 20)
}),
- 'date_created': fields.date('Creation date'),
+ 'date_created': fields.date('Creation date', select=True),
'analytic_lines': fields.one2many('account.analytic.line', 'move_id', 'Analytic lines'),
- 'centralisation': fields.selection([('normal','Normal'),('credit','Credit Centralisation'),('debit','Debit Centralisation')], 'Centralisation', size=6),
+ 'centralisation': fields.selection([('normal','Normal'),('credit','Credit Centralisation'),('debit','Debit Centralisation'),('currency','Currency Adjustment')], 'Centralisation', size=8),
'balance': fields.function(_balance, fnct_search=_balance_search, method=True, string='Balance'),
'state': fields.selection([('draft','Unbalanced'), ('valid','Valid')], 'State', readonly=True,
help='When new move line is created the state will be \'Draft\'.\n* When all the payments are done it will be in \'Valid\' state.'),
}
def _get_date(self, cr, uid, context=None):
+ if context is None:
+ context or {}
period_obj = self.pool.get('account.period')
dt = time.strftime('%Y-%m-%d')
if ('journal_id' in context) and ('period_id' in context):
'date_created': lambda *a: time.strftime('%Y-%m-%d'),
'state': 'draft',
'currency_id': _get_currency,
- 'journal_id': lambda self, cr, uid, c: c.get('journal_id', False),
+ 'journal_id': lambda self, cr, uid, c: c.get('journal_id', c.get('journal',False)),
'account_id': lambda self, cr, uid, c: c.get('account_id', False),
'period_id': lambda self, cr, uid, c: c.get('period_id', False),
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.move.line', context=c)
('credit_debit2', 'CHECK (credit+debit>=0)', 'Wrong credit or debit value in accounting entry !'),
]
- def _auto_init(self, cr, context={}):
- super(account_move_line, self)._auto_init(cr, context)
+ def _auto_init(self, cr, context=None):
+ super(account_move_line, self)._auto_init(cr, context=context)
cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'account_move_line_journal_id_period_id_index\'')
if not cr.fetchone():
cr.execute('CREATE INDEX account_move_line_journal_id_period_id_index ON account_move_line (journal_id, period_id)')
- def _check_no_view(self, cr, uid, ids):
- lines = self.browse(cr, uid, ids)
+ def _check_no_view(self, cr, uid, ids, context=None):
+ lines = self.browse(cr, uid, ids, context=context)
for l in lines:
if l.account_id.type == 'view':
return False
return True
- def _check_no_closed(self, cr, uid, ids):
- lines = self.browse(cr, uid, ids)
+ def _check_no_closed(self, cr, uid, ids, context=None):
+ lines = self.browse(cr, uid, ids, context=context)
for l in lines:
if l.account_id.type == 'closed':
return False
return True
- def _check_company_id(self, cr, uid, ids):
- lines = self.browse(cr, uid, ids)
+ def _check_company_id(self, cr, uid, ids, context=None):
+ lines = self.browse(cr, uid, ids, context=context)
for l in lines:
if l.company_id != l.account_id.company_id or l.company_id != l.period_id.company_id:
return False
return True
- def _check_partner_id(self, cr, uid, ids):
- lines = self.browse(cr, uid, ids)
- for l in lines:
- if l.account_id.type in ('receivable', 'payable') and not l.partner_id:
- return False
- return True
-
_constraints = [
(_check_no_view, 'You can not create move line on view account.', ['account_id']),
(_check_no_closed, 'You can not create move line on closed account.', ['account_id']),
(_check_company_id, 'Company must be same for its related account and period.',['company_id'] ),
- (_check_partner_id, 'You can not create move line on receivable/payable account without partner', ['account_id'] )
]
#TODO: ONCHANGE_ACCOUNT_ID: set account_tax_id
if (not currency_id) or (not account_id):
return {}
result = {}
- acc = account_obj.browse(cr, uid, account_id)
+ acc = account_obj.browse(cr, uid, account_id, context=context)
if (amount>0) and journal:
x = journal_obj.browse(cr, uid, journal).default_credit_account_id
if x: acc = x
- context.update({'date': date})
- v = currency_obj.compute(cr, uid, currency_id, acc.company_id.currency_id.id, amount, account=acc, context=context)
+ context.update({
+ 'date': date,
+ 'res.currency.compute.account': acc,
+ })
+ v = currency_obj.compute(cr, uid, currency_id, acc.company_id.currency_id.id, amount, context=context)
result['value'] = {
'debit': v > 0 and v or 0.0,
'credit': v < 0 and -v or 0.0
raise osv.except_osv(_('Warning !'), _('To reconcile the entries company should be the same for all entries'))
company_list.append(line.company_id.id)
- for line in self.browse(cr, uid, ids, context):
+ for line in self.browse(cr, uid, ids, context=context):
+ company_currency_id = line.company_id.currency_id
if line.reconcile_id:
raise osv.except_osv(_('Warning'), _('Already Reconciled!'))
if line.reconcile_partial_id:
else:
unmerge.append(line.id)
total += (line.debit or 0.0) - (line.credit or 0.0)
-
- if not total:
+ if self.pool.get('res.currency').is_zero(cr, uid, company_currency_id, total):
res = self.reconcile(cr, uid, merges+unmerge, context=context)
return res
r_id = move_rec_obj.create(cr, uid, {
libelle = context['comment']
else:
libelle = _('Write-Off')
+
+ cur_obj = self.pool.get('res.currency')
+ cur_id = False
+ amount_currency_writeoff = 0.0
+ if context.get('company_currency_id',False) != context.get('currency_id',False):
+ cur_id = context.get('currency_id',False)
+ for line in unrec_lines:
+ if line.currency_id and line.currency_id.id == context.get('currency_id',False):
+ amount_currency_writeoff += line.amount_currency
+ else:
+ tmp_amount = cur_obj.compute(cr, uid, line.account_id.company_id.currency_id.id, context.get('currency_id',False), abs(line.debit-line.credit), context={'date': line.date})
+ amount_currency_writeoff += (line.debit > 0) and tmp_amount or -tmp_amount
+
writeoff_lines = [
(0, 0, {
'name': libelle,
'account_id': account_id,
'date': date,
'partner_id': partner_id,
- 'currency_id': account.currency_id.id or False,
- 'amount_currency': account.currency_id.id and -currency or 0.0
+ 'currency_id': cur_id or (account.currency_id.id or False),
+ 'amount_currency': amount_currency_writeoff and -1 * amount_currency_writeoff or (account.currency_id.id and -1 * currency or 0.0)
}),
(0, 0, {
'name': libelle,
'account_id': writeoff_acc_id,
'analytic_account_id': context.get('analytic_id', False),
'date': date,
- 'partner_id': partner_id
+ 'partner_id': partner_id,
+ 'currency_id': cur_id or (account.currency_id.id or False),
+ 'amount_currency': amount_currency_writeoff and amount_currency_writeoff or (account.currency_id.id and currency or 0.0)
})
]
})
writeoff_line_ids = self.search(cr, uid, [('move_id', '=', writeoff_move_id), ('account_id', '=', account_id)])
+ if account_id == writeoff_acc_id:
+ writeoff_line_ids = [writeoff_line_ids[1]]
ids += writeoff_line_ids
r_id = move_rec_obj.create(cr, uid, {
partner_obj.write(cr, uid, [partner_id], {'last_reconciliation_date': time.strftime('%Y-%m-%d %H:%M:%S')})
return r_id
- def view_header_get(self, cr, user, view_id, view_type, context):
- context = self.convert_to_period(cr, user, context)
+ def view_header_get(self, cr, user, view_id, view_type, context=None):
+ if context is None:
+ context = {}
+ context = self.convert_to_period(cr, user, context=context)
if context.get('account_id', False):
cr.execute('SELECT code FROM account_account WHERE id = %s', (context['account_id'], ))
res = cr.fetchone()
- res = _('Entries: ')+ (res[0] or '')
+ if res:
+ res = _('Entries: ')+ (res[0] or '')
return res
if (not context.get('journal_id', False)) or (not context.get('period_id', False)):
return False
cr.execute('SELECT code FROM account_period WHERE id = %s', (context['period_id'], ))
p = cr.fetchone()[0] or ''
if j or p:
- return j+(p and (':'+p) or '')
+ return j + (p and (':' + p) or '')
return False
- def onchange_date(self, cr, user, ids, date, context={}):
+ def onchange_date(self, cr, user, ids, date, context=None):
"""
Returns a dict that contains new values and context
@param cr: A database cursor
@return: Returns a dict which contains new values, and context
"""
res = {}
+ if context is None:
+ context = {}
period_pool = self.pool.get('account.period')
pids = period_pool.search(cr, user, [('date_start','<=',date), ('date_stop','>=',date)])
if pids:
'context':context,
}
- def fields_view_get(self, cr, uid, view_id=None, view_type='form', context={}, toolbar=False, submenu=False):
+ def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
journal_pool = self.pool.get('account.journal')
- result = super(osv.osv, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
+ if context is None:
+ context = {}
+ result = super(account_move_line, self).fields_view_get(cr, uid, view_id, view_type, context=context, toolbar=toolbar, submenu=submenu)
if view_type != 'tree':
#Remove the toolbar from the form view
if view_type == 'form':
#Restrict the list of journal view in search view
if view_type == 'search' and result['fields'].get('journal_id', False):
result['fields']['journal_id']['selection'] = journal_pool.name_search(cr, uid, '', [], context=context)
+ ctx = context.copy()
+ #we add the refunds journal in the selection field of journal
+ if context.get('journal_type', False) == 'sale':
+ ctx.update({'journal_type': 'sale_refund'})
+ result['fields']['journal_id']['selection'] += journal_pool.name_search(cr, uid, '', [], context=ctx)
+ elif context.get('journal_type', False) == 'purchase':
+ ctx.update({'journal_type': 'purchase_refund'})
+ result['fields']['journal_id']['selection'] += journal_pool.name_search(cr, uid, '', [], context=ctx)
return result
if context.get('view_mode', False):
return result
fld = []
fields = {}
flds = []
- title = "Accounting Entries" #self.view_header_get(cr, uid, view_id, view_type, context)
+ title = _("Accounting Entries") #self.view_header_get(cr, uid, view_id, view_type, context)
xml = '''<?xml version="1.0"?>\n<tree string="%s" editable="top" refresh="5" on_write="on_create_write" colors="red:state==\'draft\';black:state==\'valid\'">\n\t''' % (title)
ids = journal_pool.search(cr, uid, [])
- journals = journal_pool.browse(cr, uid, ids)
+ journals = journal_pool.browse(cr, uid, ids, context=context)
all_journal = [None]
common_fields = {}
total = len(journals)
else:
fields.get(field.field).append(journal.id)
common_fields[field.field] = common_fields[field.field] + 1
- fld.append(('period_id', 3, 'Period'))
- fld.append(('journal_id', 10, 'Journal'))
+ fld.append(('period_id', 3, _('Period')))
+ fld.append(('journal_id', 10, _('Journal')))
flds.append('period_id')
flds.append('journal_id')
fields['period_id'] = all_journal
# state = 'colors="red:state==\'draft\'"'
attrs = []
if field == 'debit':
- attrs.append('sum = "Total debit"')
+ attrs.append('sum = "%s"' % _("Total debit"))
elif field == 'credit':
- attrs.append('sum = "Total credit"')
+ attrs.append('sum = "%s"' % _("Total credit"))
elif field == 'move_id':
attrs.append('required = "False"')
if field in widths:
attrs.append('width="'+str(widths[field])+'"')
- attrs.append('string="'+field_it[2]+'"')
- attrs.append("invisible=\"context.get('visible_id') not in %s\"" % (fields.get(field)))
+
+ if field in ('journal_id',):
+ attrs.append("invisible=\"context.get('journal_id', False)\"")
+ elif field in ('period_id',):
+ attrs.append("invisible=\"context.get('period_id', False)\"")
+ else:
+ attrs.append("invisible=\"context.get('visible_id') not in %s\"" % (fields.get(field)))
xml += '''<field name="%s" %s/>\n''' % (field,' '.join(attrs))
xml += '''</tree>'''
result['fields'] = self.fields_get(cr, uid, flds, context)
return result
- def _check_moves(self, cr, uid, context):
+ def _check_moves(self, cr, uid, context=None):
# use the first move ever created for this journal and period
+ if context is None:
+ context = {}
cr.execute('SELECT id, state, name FROM account_move WHERE journal_id = %s AND period_id = %s ORDER BY id limit 1', (context['journal_id'],context['period_id']))
res = cr.fetchone()
if res:
obj_move_rec.unlink(cr, uid, unlink_ids)
return True
- def unlink(self, cr, uid, ids, context={}, check=True):
+ def unlink(self, cr, uid, ids, context=None, check=True):
+ if context is None:
+ context = {}
move_obj = self.pool.get('account.move')
self._update_check(cr, uid, ids, context)
result = False
- for line in self.browse(cr, uid, ids, context):
+ for line in self.browse(cr, uid, ids, context=context):
context['journal_id'] = line.journal_id.id
context['period_id'] = line.period_id.id
result = super(account_move_line, self).unlink(cr, uid, [line.id], context=context)
if check:
+ context.update({'lines_cancel': 'cancel'})
move_obj.validate(cr, uid, [line.move_id.id], context=context)
return result
journal_id = context.get('journal_id', False)
period_id = context.get('period_id', False)
if journal_id:
- journal = journal_obj.browse(cr, uid, [journal_id])[0]
+ journal = journal_obj.browse(cr, uid, journal_id, context=context)
if journal.allow_date and period_id:
- period = period_obj.browse(cr, uid, [period_id])[0]
+ period = period_obj.browse(cr, uid, period_id, context=context)
if not time.strptime(vals['date'][:10],'%Y-%m-%d') >= time.strptime(period.date_start, '%Y-%m-%d') or not time.strptime(vals['date'][:10], '%Y-%m-%d') <= time.strptime(period.date_stop, '%Y-%m-%d'):
raise osv.except_osv(_('Error'),_('The date of your Journal Entry is not in the defined period!'))
else:
move_obj.write(cr, uid, [line.move_id.id], {'date': todo_date}, context=context)
return result
- def _update_journal_check(self, cr, uid, journal_id, period_id, context={}):
+ def _update_journal_check(self, cr, uid, journal_id, period_id, context=None):
journal_obj = self.pool.get('account.journal')
period_obj = self.pool.get('account.period')
jour_period_obj = self.pool.get('account.journal.period')
if state == 'done':
raise osv.except_osv(_('Error !'), _('You can not add/modify entries in a closed journal.'))
if not result:
- journal = journal_obj.browse(cr, uid, journal_id, context)
- period = period_obj.browse(cr, uid, period_id, context)
+ journal = journal_obj.browse(cr, uid, journal_id, context=context)
+ period = period_obj.browse(cr, uid, period_id, context=context)
jour_period_obj.create(cr, uid, {
'name': (journal.code or journal.name)+':'+(period.name or ''),
'journal_id': journal.id,
})
return True
- def _update_check(self, cr, uid, ids, context={}):
+ def _update_check(self, cr, uid, ids, context=None):
done = {}
- for line in self.browse(cr, uid, ids, context):
+ for line in self.browse(cr, uid, ids, context=context):
if line.move_id.state <> 'draft' and (not line.journal_id.entry_posted):
raise osv.except_osv(_('Error !'), _('You can not do this modification on a confirmed entry ! Please note that you can just change some non important fields !'))
if line.reconcile_id:
self._update_journal_check(cr, uid, context['journal_id'], context['period_id'], context)
move_id = vals.get('move_id', False)
- journal = journal_obj.browse(cr, uid, context['journal_id'])
+ journal = journal_obj.browse(cr, uid, context['journal_id'], context=context)
if not move_id:
if journal.centralisation:
#Check for centralisation
raise osv.except_osv(_('No piece number !'), _('Can not create an automatic sequence for this piece !\n\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.'))
ok = not (journal.type_control_ids or journal.account_control_ids)
if ('account_id' in vals):
- account = account_obj.browse(cr, uid, vals['account_id'])
+ account = account_obj.browse(cr, uid, vals['account_id'], context=context)
if journal.type_control_ids:
type = account.user_type
for t in journal.type_control_ids: