diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index f6b74edeccd..b8dcefdd3a4 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -922,7 +922,7 @@ - + @@ -932,7 +932,7 @@ - + @@ -1039,7 +1039,7 @@ - + @@ -1084,7 +1084,7 @@ - + @@ -1338,7 +1338,7 @@ - + @@ -1357,7 +1357,7 @@ - + diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml index 4acbb47f6c4..aa567d2fc79 100644 --- a/addons/account/project/project_view.xml +++ b/addons/account/project/project_view.xml @@ -11,8 +11,8 @@ - + diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 708c4b56629..64912213520 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -215,6 +215,8 @@ class account_analytic_account(osv.osv): GROUP BY account_analytic_line.account_id", (child_ids,)) for account_id, sum in cr.fetchall(): res[account_id] = round(sum,2) + 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 @@ -295,7 +297,7 @@ class account_analytic_account(osv.osv): res = {} for account in self.browse(cr, uid, ids, context=context): res[account.id] = 0.0 - sale_ids = sale_obj.search(cr, uid, [('project_id','=', account.id), ('partner_id', '=', account.partner_id.id)], context=context) + sale_ids = sale_obj.search(cr, uid, [('project_id','=', account.id), ('state', '=', 'manual')], context=context) for sale in sale_obj.browse(cr, uid, sale_ids, context=context): if not sale.invoiced: res[account.id] += sale.amount_untaxed @@ -527,10 +529,21 @@ class account_analytic_account(osv.osv): for user_id, data in remind.items(): context["data"] = data _logger.debug("Sending reminder to uid %s", user_id) - self.pool.get('email.template').send_mail(cr, uid, template_id, user_id, context=context) + self.pool.get('email.template').send_mail(cr, uid, template_id, user_id, force_send=True, context=context) return True + def onchange_invoice_on_timesheets(self, cr, uid, ids, invoice_on_timesheets, context=None): + if not invoice_on_timesheets: + return {} + result = {'value': {'use_timesheets': True}} + try: + to_invoice = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'hr_timesheet_invoice', 'timesheet_invoice_factor1') + result['value']['to_invoice'] = to_invoice[1] + except ValueError: + pass + return result + 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 ccd6d6b86b0..2e5565a263b 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml @@ -5,6 +5,15 @@ Sales Orders sale.order account.analytic.account + +

+ Click to create a quotation that can be converted into a sales + order. +

+ Use sale orders to track everything that should be invoiced + at a fix price on a contract. +

+
@@ -26,6 +35,9 @@ + + {'required': [('type','=','contract'),'|',('fix_price_invoices','=',True), ('invoice_on_timesheets', '=', True)]} + @@ -62,20 +74,20 @@ or view - + No order to invoice, create -