diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py
index c950b020e80..192fca044e6 100644
--- a/addons/hr_expense/models/hr_expense.py
+++ b/addons/hr_expense/models/hr_expense.py
@@ -170,77 +170,71 @@ class HrExpense(models.Model):
'''
main function that is called when trying to create the accounting entries related to an expense
'''
- journal_dict = {}
for expense in self:
- jrn = expense.sheet_id.bank_journal_id if expense.payment_mode == 'company_account' else expense.sheet_id.journal_id
- journal_dict.setdefault(jrn, [])
- journal_dict[jrn].append(expense)
+ journal = expense.sheet_id.bank_journal_id if expense.payment_mode == 'company_account' else expense.sheet_id.journal_id
+ #create the move that will contain the accounting entries
+ acc_date = expense.sheet_id.accounting_date or expense.date
+ move = self.env['account.move'].create({
+ 'journal_id': journal.id,
+ 'company_id': self.env.user.company_id.id,
+ 'date': acc_date,
+ 'ref': expense.sheet_id.name,
+ # force the name to the default value, to avoid an eventual 'default_name' in the context
+ # to set it to '' which cause no number to be given to the account.move when posted.
+ 'name': '/',
+ })
+ company_currency = expense.company_id.currency_id
+ diff_currency_p = expense.currency_id != company_currency
+ #one account.move.line per expense (+taxes..)
+ move_lines = expense._move_line_get()
- for journal, expense_list in journal_dict.items():
- for expense in expense_list:
- #create the move that will contain the accounting entries
- acc_date = expense.sheet_id.accounting_date or expense.date
- move = self.env['account.move'].create({
+ #create one more move line, a counterline for the total on payable account
+ payment_id = False
+ total, total_currency, move_lines = expense._compute_expense_totals(company_currency, move_lines, acc_date)
+ if expense.payment_mode == 'company_account':
+ if not expense.sheet_id.bank_journal_id.default_credit_account_id:
+ raise UserError(_("No credit account found for the %s journal, please configure one.") % (expense.sheet_id.bank_journal_id.name))
+ emp_account = expense.sheet_id.bank_journal_id.default_credit_account_id.id
+ journal = expense.sheet_id.bank_journal_id
+ #create payment
+ payment_methods = (total < 0) and journal.outbound_payment_method_ids or journal.inbound_payment_method_ids
+ journal_currency = journal.currency_id or journal.company_id.currency_id
+ payment = self.env['account.payment'].create({
+ 'payment_method_id': payment_methods and payment_methods[0].id or False,
+ 'payment_type': total < 0 and 'outbound' or 'inbound',
+ 'partner_id': expense.employee_id.address_home_id.commercial_partner_id.id,
+ 'partner_type': 'supplier',
'journal_id': journal.id,
- 'company_id': self.env.user.company_id.id,
- 'date': acc_date,
- 'ref': expense.sheet_id.name,
- # force the name to the default value, to avoid an eventual 'default_name' in the context
- # to set it to '' which cause no number to be given to the account.move when posted.
- 'name': '/',
+ 'payment_date': expense.date,
+ 'state': 'reconciled',
+ 'currency_id': diff_currency_p and expense.currency_id.id or journal_currency.id,
+ 'amount': diff_currency_p and abs(total_currency) or abs(total),
+ 'name': expense.name,
})
- company_currency = expense.company_id.currency_id
- diff_currency_p = expense.currency_id != company_currency
- #one account.move.line per expense (+taxes..)
- move_lines = expense._move_line_get()
+ payment_id = payment.id
+ else:
+ if not expense.employee_id.address_home_id:
+ raise UserError(_("No Home Address found for the employee %s, please configure one.") % (expense.employee_id.name))
+ emp_account = expense.employee_id.address_home_id.property_account_payable_id.id
- #create one more move line, a counterline for the total on payable account
- payment_id = False
- total, total_currency, move_lines = expense._compute_expense_totals(company_currency, move_lines, acc_date)
- if expense.payment_mode == 'company_account':
- if not expense.sheet_id.bank_journal_id.default_credit_account_id:
- raise UserError(_("No credit account found for the %s journal, please configure one.") % (expense.sheet_id.bank_journal_id.name))
- emp_account = expense.sheet_id.bank_journal_id.default_credit_account_id.id
- journal = expense.sheet_id.bank_journal_id
- #create payment
- payment_methods = (total < 0) and journal.outbound_payment_method_ids or journal.inbound_payment_method_ids
- journal_currency = journal.currency_id or journal.company_id.currency_id
- payment = self.env['account.payment'].create({
- 'payment_method_id': payment_methods and payment_methods[0].id or False,
- 'payment_type': total < 0 and 'outbound' or 'inbound',
- 'partner_id': expense.employee_id.address_home_id.commercial_partner_id.id,
- 'partner_type': 'supplier',
- 'journal_id': journal.id,
- 'payment_date': expense.date,
- 'state': 'reconciled',
- 'currency_id': diff_currency_p and expense.currency_id.id or journal_currency.id,
- 'amount': diff_currency_p and abs(total_currency) or abs(total),
- 'name': expense.name,
+ move_lines.append({
+ 'type': 'dest',
+ 'name': expense.employee_id.name,
+ 'price': total,
+ 'account_id': emp_account,
+ 'date_maturity': acc_date,
+ 'amount_currency': diff_currency_p and total_currency or False,
+ 'currency_id': diff_currency_p and expense.currency_id.id or False,
+ 'payment_id': payment_id,
})
- payment_id = payment.id
- else:
- if not expense.employee_id.address_home_id:
- raise UserError(_("No Home Address found for the employee %s, please configure one.") % (expense.employee_id.name))
- emp_account = expense.employee_id.address_home_id.property_account_payable_id.id
- move_lines.append({
- 'type': 'dest',
- 'name': expense.employee_id.name,
- 'price': total,
- 'account_id': emp_account,
- 'date_maturity': acc_date,
- 'amount_currency': diff_currency_p and total_currency or False,
- 'currency_id': diff_currency_p and expense.currency_id.id or False,
- 'payment_id': payment_id,
- })
-
- #convert eml into an osv-valid format
- lines = map(lambda x: (0, 0, expense._prepare_move_line(x)), move_lines)
- move.write({'line_ids': lines})
- expense.sheet_id.write({'account_move_id': move.id})
- move.post()
- if expense.payment_mode == 'company_account':
- expense.sheet_id.paid_expense_sheets()
+ #convert eml into an osv-valid format
+ lines = map(lambda x: (0, 0, expense._prepare_move_line(x)), move_lines)
+ move.write({'line_ids': lines})
+ expense.sheet_id.write({'account_move_id': move.id})
+ move.post()
+ if expense.payment_mode == 'company_account':
+ expense.sheet_id.paid_expense_sheets()
return True
@api.multi
@@ -523,3 +517,11 @@ class HrExpenseSheet(models.Model):
res['domain'] = [('res_model', '=', 'hr.expense'), ('res_id', 'in', self.expense_line_ids.ids)]
res['context'] = {'default_res_model': 'hr.expense.sheet', 'default_res_id': self.id}
return res
+
+ @api.multi
+ def action_open_journal_entries(self):
+ res = self.env['ir.actions.act_window'].for_xml_id('account', 'action_move_journal_line')
+ refs = [x.name for x in self]
+ res['domain'] = [('ref', 'in', refs)]
+ res['context'] = {}
+ return res
diff --git a/addons/hr_expense/views/hr_expense_views.xml b/addons/hr_expense/views/hr_expense_views.xml
index 619ce5b0368..63028e5eba9 100644
--- a/addons/hr_expense/views/hr_expense_views.xml
+++ b/addons/hr_expense/views/hr_expense_views.xml
@@ -423,6 +423,13 @@
type="object">