diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py
index a187f9452f5..89e39c71660 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis.py
+++ b/addons/account_analytic_analysis/account_analytic_analysis.py
@@ -206,17 +206,14 @@ class account_analytic_account(osv.osv):
return res
if child_ids:
- cr.execute("SELECT account_analytic_line.account_id, COALESCE(SUM(amount), 0.0) \
- FROM account_analytic_line \
- JOIN account_analytic_journal \
- ON account_analytic_line.journal_id = account_analytic_journal.id \
- WHERE account_analytic_line.account_id IN %s \
- AND account_analytic_journal.type = 'sale' \
- GROUP BY account_analytic_line.account_id", (child_ids,))
- for account_id, sum in cr.fetchall():
- res[account_id] = round(sum,2)
+ #Search all invoice lines not in cancelled state that refer to this analytic account
+ inv_line_obj = self.pool.get("account.invoice.line")
+ inv_lines = inv_line_obj.search(cr, uid, ['&', ('account_analytic_id', 'in', child_ids), ('invoice_id.state', '!=', 'cancel')], context=context)
+ for line in inv_line_obj.browse(cr, uid, inv_lines, context=context):
+ res[line.account_analytic_id.id] += line.price_subtotal
for acc in self.browse(cr, uid, res.keys(), context=context):
res[acc.id] = res[acc.id] - (acc.timesheet_ca_invoiced or 0.0)
+
res_final = res
return res_final
@@ -543,6 +540,23 @@ class account_analytic_account(osv.osv):
pass
return result
+
+ def hr_to_invoice_timesheets(self, cr, uid, ids, context=None):
+ domain = [('invoice_id','=',False),('to_invoice','!=',False), ('journal_id.type', '=', 'general'), ('account_id', 'in', ids)]
+ names = [record.name for record in self.browse(cr, uid, ids, context=context)]
+ name = _('Timesheets to Invoice of %s') % ','.join(names)
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': name,
+ 'view_type': 'form',
+ 'view_mode': 'tree,form',
+ 'domain' : domain,
+ 'res_model': 'account.analytic.line',
+ 'nodestroy': True,
+ }
+
+
+
class account_analytic_account_summary_user(osv.osv):
_name = "account_analytic_analysis.summary.user"
_description = "Hours Summary by User"
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
index 8d7a89e4622..c70a2493be9 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
@@ -98,8 +98,8 @@
-
or view
diff --git a/addons/hr_timesheet_invoice/__openerp__.py b/addons/hr_timesheet_invoice/__openerp__.py
index d15dd3b0e3b..888902e1484 100644
--- a/addons/hr_timesheet_invoice/__openerp__.py
+++ b/addons/hr_timesheet_invoice/__openerp__.py
@@ -46,7 +46,6 @@ reports.""",
'report/hr_timesheet_invoice_report_view.xml',
'wizard/hr_timesheet_analytic_profit_view.xml',
'wizard/hr_timesheet_invoice_create_view.xml',
- 'wizard/hr_timesheet_invoice_create_final_view.xml',
],
'demo': ['hr_timesheet_invoice_demo.xml'],
'test': ['test/test_hr_timesheet_invoice.yml',
diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
index de19ea8fb3a..05326bb19c1 100644
--- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
+++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
@@ -102,19 +102,4 @@
assert aline.invoice_id, "Invoice created, but analytic line wasn't updated."
assert aline.invoice_id == invoice_id, "Invoice doesn't match the one at analytic line"
assert invoice_id.amount_untaxed == 187.5, "Invoice amount mismatch: %s" % invoice_id.amount_untaxed
- assert invoice_id.amount_tax == 50, "Invoice tax mismatch: %s" % invoice_id.amount_tax
--
- I create final invoice for this analytic account.
--
- !record {model: hr.timesheet.invoice.create.final, id: hr_timesheet_invoice_create_final_0}:
- date: 1
- name: 1
- price: 1
- time: 1
--
- I click on "Create Invoice" button to create Invoice and validate the invoice.
--
- !python {model: hr.timesheet.invoice.create.final}: |
- import netsvc
- wkf_service = netsvc.LocalService("workflow")
- res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]})
+ assert invoice_id.amount_tax == 50, "Invoice tax mismatch: %s" % invoice_id.amount_tax
\ No newline at end of file
diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml
index 68e827e79f1..88675f3042f 100644
--- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml
+++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml
@@ -101,19 +101,4 @@
assert aline.invoice_id, "Invoice created, but analytic line wasn't updated."
assert aline.invoice_id == invoice_id, "Invoice doesn't match the one at analytic line"
assert invoice_id.amount_untaxed == 187.5, "Invoice amount mismatch: %s" % invoice_id.amount_untaxed
- assert invoice_id.amount_tax == 40, "Invoice tax mismatch: %s" % invoice_id.amount_tax
--
- I create final invoice for this analytic account.
--
- !record {model: hr.timesheet.invoice.create.final, id: hr_timesheet_invoice_create_final_0}:
- date: 1
- name: 1
- price: 1
- time: 1
--
- I click on "Create Invoice" button to create Invoice and validate the invoice.
--
- !python {model: hr.timesheet.invoice.create.final}: |
- import netsvc
- wkf_service = netsvc.LocalService("workflow")
- res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]})
+ assert invoice_id.amount_tax == 40, "Invoice tax mismatch: %s" % invoice_id.amount_tax
\ No newline at end of file
diff --git a/addons/hr_timesheet_invoice/wizard/__init__.py b/addons/hr_timesheet_invoice/wizard/__init__.py
index b718be1acbb..092ea8bbd7b 100644
--- a/addons/hr_timesheet_invoice/wizard/__init__.py
+++ b/addons/hr_timesheet_invoice/wizard/__init__.py
@@ -21,7 +21,6 @@
import hr_timesheet_invoice_create
import hr_timesheet_analytic_profit
-import hr_timesheet_final_invoice_create
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py
deleted file mode 100644
index 1977d6cccc5..00000000000
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import time
-
-from openerp.osv import fields, osv
-from openerp.tools.translate import _
-
-#
-# Create an final invoice based on selected timesheet lines
-#
-
-#
-# TODO: check unit of measure !!!
-#
-class final_invoice_create(osv.osv_memory):
- _name = 'hr.timesheet.invoice.create.final'
- _description = 'Create invoice from timesheet final'
- _columns = {
- 'date': fields.boolean('Date', help='Display date in the history of works'),
- 'time': fields.boolean('Time Spent', help='Display time in the history of works'),
- 'name': fields.boolean('Log of Activity', help='Display detail of work in the invoice line.'),
- 'price': fields.boolean('Cost', help='Display cost of the item you reinvoice'),
- 'product': fields.many2one('product.product', 'Product', help='The product that will be used to invoice the remaining amount'),
- }
-
- def do_create(self, cr, uid, ids, context=None):
- data = self.read(cr, uid, ids, [], context=context)[0]
- # hack for fixing small issue (context should not propagate implicitly between actions)
- if 'default_type' in context:
- del context['default_type']
- ids = self.pool.get('account.analytic.line').search(cr, uid, [('invoice_id','=',False),('to_invoice','<>', False), ('account_id', 'in', context['active_ids'])], context=context)
- invs = self.pool.get('account.analytic.line').invoice_cost_create(cr, uid, ids, data, context=context)
- mod_obj = self.pool.get('ir.model.data')
- act_obj = self.pool.get('ir.actions.act_window')
- mod_ids = mod_obj.search(cr, uid, [('name', '=', 'action_invoice_tree1')], context=context)[0]
- res_id = mod_obj.read(cr, uid, mod_ids, ['res_id'], context=context)['res_id']
- act_win = act_obj.read(cr, uid, res_id, [], context=context)
- act_win['domain'] = [('id','in',invs),('type','=','out_invoice')]
- act_win['name'] = _('Invoices')
- return act_win
-
-final_invoice_create()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml
deleted file mode 100644
index d1c95212139..00000000000
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_final_view.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
- Create Invoice
- ir.actions.act_window
- hr.timesheet.invoice.create.final
- form
- form
- new
-
-
-
-
-
- Invoice
- client_action_multi
-
- action
- account.analytic.account
-
-
-
-
- hr.timesheet.invoice.create.final.form
- hr.timesheet.invoice.create.final
-
-
-
-
-
-
-