summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorDamien Bouvy <dbo@odoo.com>2015-07-13 16:51:26 +0200
committerDamien Bouvy <dbo@odoo.com>2015-07-23 11:40:30 +0200
commitd8f0231afc5ce94e2feb91b11fbfb45c52ae849e (patch)
tree02eeb63c3668dd27258ad195a47bfcf8a8d03ae1 /addons
parent20dbd2675a7e80b65febf1c6d21eb81f2bbd5bcd (diff)
[RENAME] account_analytic_analysis -> sale_contract
Diffstat (limited to 'addons')
-rw-r--r--addons/analytic_contract_hr_expense/__openerp__.py2
-rw-r--r--addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml2
-rw-r--r--addons/crm/web_planner_data.xml2
-rw-r--r--addons/hr/res_config.py4
-rw-r--r--addons/project_timesheet/__openerp__.py2
-rw-r--r--addons/project_timesheet/project_timesheet_view.xml5
-rw-r--r--addons/sale/res_config.py8
-rw-r--r--addons/sale/res_config_view.xml6
-rw-r--r--addons/sale_contract/__init__.py (renamed from addons/account_analytic_analysis/__init__.py)5
-rw-r--r--addons/sale_contract/__openerp__.py (renamed from addons/account_analytic_analysis/__openerp__.py)11
-rw-r--r--addons/sale_contract/data/sale_contract_cron.xml (renamed from addons/account_analytic_analysis/account_analytic_analysis_cron.xml)0
-rw-r--r--addons/sale_contract/demo/sale_contract_demo.xml (renamed from addons/account_analytic_analysis/analytic_account_demo.xml)0
-rw-r--r--addons/sale_contract/i18n/account_analytic_analysis.pot (renamed from addons/account_analytic_analysis/i18n/account_analytic_analysis.pot)0
-rw-r--r--addons/sale_contract/i18n/ar.po (renamed from addons/account_analytic_analysis/i18n/ar.po)0
-rw-r--r--addons/sale_contract/i18n/bg.po (renamed from addons/account_analytic_analysis/i18n/bg.po)0
-rw-r--r--addons/sale_contract/i18n/bs.po (renamed from addons/account_analytic_analysis/i18n/bs.po)0
-rw-r--r--addons/sale_contract/i18n/ca.po (renamed from addons/account_analytic_analysis/i18n/ca.po)0
-rw-r--r--addons/sale_contract/i18n/cs.po (renamed from addons/account_analytic_analysis/i18n/cs.po)0
-rw-r--r--addons/sale_contract/i18n/da.po (renamed from addons/account_analytic_analysis/i18n/da.po)0
-rw-r--r--addons/sale_contract/i18n/de.po (renamed from addons/account_analytic_analysis/i18n/de.po)0
-rw-r--r--addons/sale_contract/i18n/el.po (renamed from addons/account_analytic_analysis/i18n/el.po)0
-rw-r--r--addons/sale_contract/i18n/en_GB.po (renamed from addons/account_analytic_analysis/i18n/en_GB.po)0
-rw-r--r--addons/sale_contract/i18n/es.po (renamed from addons/account_analytic_analysis/i18n/es.po)0
-rw-r--r--addons/sale_contract/i18n/es_AR.po (renamed from addons/account_analytic_analysis/i18n/es_AR.po)0
-rw-r--r--addons/sale_contract/i18n/es_CR.po (renamed from addons/account_analytic_analysis/i18n/es_CR.po)0
-rw-r--r--addons/sale_contract/i18n/es_EC.po (renamed from addons/account_analytic_analysis/i18n/es_EC.po)0
-rw-r--r--addons/sale_contract/i18n/es_MX.po (renamed from addons/account_analytic_analysis/i18n/es_MX.po)0
-rw-r--r--addons/sale_contract/i18n/es_PY.po (renamed from addons/account_analytic_analysis/i18n/es_PY.po)0
-rw-r--r--addons/sale_contract/i18n/es_VE.po (renamed from addons/account_analytic_analysis/i18n/es_VE.po)0
-rw-r--r--addons/sale_contract/i18n/et.po (renamed from addons/account_analytic_analysis/i18n/et.po)0
-rw-r--r--addons/sale_contract/i18n/fa.po (renamed from addons/account_analytic_analysis/i18n/fa.po)0
-rw-r--r--addons/sale_contract/i18n/fi.po (renamed from addons/account_analytic_analysis/i18n/fi.po)0
-rw-r--r--addons/sale_contract/i18n/fr.po (renamed from addons/account_analytic_analysis/i18n/fr.po)0
-rw-r--r--addons/sale_contract/i18n/gl.po (renamed from addons/account_analytic_analysis/i18n/gl.po)0
-rw-r--r--addons/sale_contract/i18n/gu.po (renamed from addons/account_analytic_analysis/i18n/gu.po)0
-rw-r--r--addons/sale_contract/i18n/hr.po (renamed from addons/account_analytic_analysis/i18n/hr.po)0
-rw-r--r--addons/sale_contract/i18n/hu.po (renamed from addons/account_analytic_analysis/i18n/hu.po)0
-rw-r--r--addons/sale_contract/i18n/id.po (renamed from addons/account_analytic_analysis/i18n/id.po)0
-rw-r--r--addons/sale_contract/i18n/it.po (renamed from addons/account_analytic_analysis/i18n/it.po)0
-rw-r--r--addons/sale_contract/i18n/ja.po (renamed from addons/account_analytic_analysis/i18n/ja.po)0
-rw-r--r--addons/sale_contract/i18n/ko.po (renamed from addons/account_analytic_analysis/i18n/ko.po)0
-rw-r--r--addons/sale_contract/i18n/lt.po (renamed from addons/account_analytic_analysis/i18n/lt.po)0
-rw-r--r--addons/sale_contract/i18n/lv.po (renamed from addons/account_analytic_analysis/i18n/lv.po)0
-rw-r--r--addons/sale_contract/i18n/mk.po (renamed from addons/account_analytic_analysis/i18n/mk.po)0
-rw-r--r--addons/sale_contract/i18n/mn.po (renamed from addons/account_analytic_analysis/i18n/mn.po)0
-rw-r--r--addons/sale_contract/i18n/nb.po (renamed from addons/account_analytic_analysis/i18n/nb.po)0
-rw-r--r--addons/sale_contract/i18n/nl.po (renamed from addons/account_analytic_analysis/i18n/nl.po)0
-rw-r--r--addons/sale_contract/i18n/nl_BE.po (renamed from addons/account_analytic_analysis/i18n/nl_BE.po)0
-rw-r--r--addons/sale_contract/i18n/oc.po (renamed from addons/account_analytic_analysis/i18n/oc.po)0
-rw-r--r--addons/sale_contract/i18n/pl.po (renamed from addons/account_analytic_analysis/i18n/pl.po)0
-rw-r--r--addons/sale_contract/i18n/pt.po (renamed from addons/account_analytic_analysis/i18n/pt.po)0
-rw-r--r--addons/sale_contract/i18n/pt_BR.po (renamed from addons/account_analytic_analysis/i18n/pt_BR.po)0
-rw-r--r--addons/sale_contract/i18n/ro.po (renamed from addons/account_analytic_analysis/i18n/ro.po)0
-rw-r--r--addons/sale_contract/i18n/ru.po (renamed from addons/account_analytic_analysis/i18n/ru.po)0
-rw-r--r--addons/sale_contract/i18n/sk.po (renamed from addons/account_analytic_analysis/i18n/sk.po)0
-rw-r--r--addons/sale_contract/i18n/sl.po (renamed from addons/account_analytic_analysis/i18n/sl.po)0
-rw-r--r--addons/sale_contract/i18n/sq.po (renamed from addons/account_analytic_analysis/i18n/sq.po)0
-rw-r--r--addons/sale_contract/i18n/sr.po (renamed from addons/account_analytic_analysis/i18n/sr.po)0
-rw-r--r--addons/sale_contract/i18n/sr@latin.po (renamed from addons/account_analytic_analysis/i18n/sr@latin.po)0
-rw-r--r--addons/sale_contract/i18n/sv.po (renamed from addons/account_analytic_analysis/i18n/sv.po)0
-rw-r--r--addons/sale_contract/i18n/tlh.po (renamed from addons/account_analytic_analysis/i18n/tlh.po)0
-rw-r--r--addons/sale_contract/i18n/tr.po (renamed from addons/account_analytic_analysis/i18n/tr.po)0
-rw-r--r--addons/sale_contract/i18n/uk.po (renamed from addons/account_analytic_analysis/i18n/uk.po)0
-rw-r--r--addons/sale_contract/i18n/vi.po (renamed from addons/account_analytic_analysis/i18n/vi.po)0
-rw-r--r--addons/sale_contract/i18n/zh_CN.po (renamed from addons/account_analytic_analysis/i18n/zh_CN.po)0
-rw-r--r--addons/sale_contract/i18n/zh_TW.po (renamed from addons/account_analytic_analysis/i18n/zh_TW.po)0
-rw-r--r--addons/sale_contract/models/__init__.py4
-rw-r--r--addons/sale_contract/models/res_config.py (renamed from addons/account_analytic_analysis/res_config.py)4
-rw-r--r--addons/sale_contract/models/sale.py37
-rw-r--r--addons/sale_contract/models/sale_contract.py (renamed from addons/account_analytic_analysis/account_analytic_analysis.py)127
-rw-r--r--addons/sale_contract/report/__init__.py2
-rw-r--r--addons/sale_contract/report/account_analytic_analysis_summary.py137
-rw-r--r--addons/sale_contract/security/account_analytic_analysis_security.xml (renamed from addons/account_analytic_analysis/security/account_analytic_analysis_security.xml)0
-rw-r--r--addons/sale_contract/security/ir.model.access.csv (renamed from addons/account_analytic_analysis/security/ir.model.access.csv)0
-rw-r--r--addons/sale_contract/static/src/css/analytic.css (renamed from addons/account_analytic_analysis/static/src/css/analytic.css)0
-rw-r--r--addons/sale_contract/static/src/css/analytic.sass (renamed from addons/account_analytic_analysis/static/src/css/analytic.sass)0
-rw-r--r--addons/sale_contract/test/account_analytic_analysis.yml (renamed from addons/account_analytic_analysis/test/account_analytic_analysis.yml)10
-rw-r--r--addons/sale_contract/views/account_analytic_analysis.xml (renamed from addons/account_analytic_analysis/views/account_analytic_analysis.xml)2
-rw-r--r--addons/sale_contract/views/product_template_view.xml19
-rw-r--r--addons/sale_contract/views/res_config_view.xml (renamed from addons/account_analytic_analysis/res_config_view.xml)2
-rw-r--r--addons/sale_contract/views/sale_contract_view.xml (renamed from addons/account_analytic_analysis/account_analytic_analysis_view.xml)2
81 files changed, 237 insertions, 156 deletions
diff --git a/addons/analytic_contract_hr_expense/__openerp__.py b/addons/analytic_contract_hr_expense/__openerp__.py
index 9f7bac302af..69a2c54e0ae 100644
--- a/addons/analytic_contract_hr_expense/__openerp__.py
+++ b/addons/analytic_contract_hr_expense/__openerp__.py
@@ -12,7 +12,7 @@ This module is for modifying account analytic view to show some data related to
""",
'author': 'OpenERP S.A.',
'website': 'https://www.odoo.com/',
- 'depends': ['hr_expense','account_analytic_analysis'],
+ 'depends': ['hr_expense','sale_contract'],
'data': ['analytic_contract_hr_expense_view.xml'],
'demo': [],
'installable': True,
diff --git a/addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml b/addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml
index a5bd40e9471..07bc01e92dc 100644
--- a/addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml
+++ b/addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml
@@ -5,7 +5,7 @@
<field name="name">account.analytic.account.form.expense.inherit</field>
<field name="model">account.analytic.account</field>
<field eval="60" name="priority"/>
- <field name="inherit_id" ref="account_analytic_analysis.account_analytic_account_form_form"/>
+ <field name="inherit_id" ref="sale_contract.account_analytic_account_form_form"/>
<field name="arch" type="xml">
<xpath expr='//tr[@name="total"]' position='before'>
<tr>
diff --git a/addons/crm/web_planner_data.xml b/addons/crm/web_planner_data.xml
index a7e723f0be7..0bd407245ae 100644
--- a/addons/crm/web_planner_data.xml
+++ b/addons/crm/web_planner_data.xml
@@ -554,7 +554,7 @@
<br/>
<h4><b>Time &amp; material</b> <span class="small">(ex: consulting mission)</span></h4>
<span>
- <li><a t-att-href="prepare_backend_url('account_analytic_analysis.action_account_analytic_overdue_all', 'list', 'sale')">Create your contracts</a> and configure your prices</li>
+ <li><a t-att-href="prepare_backend_url('sale_contract.action_account_analytic_overdue_all', 'list', 'sale')">Create your contracts</a> and configure your prices</li>
</span>
</div>
</div>
diff --git a/addons/hr/res_config.py b/addons/hr/res_config.py
index ff505ee1114..0230a9285a5 100644
--- a/addons/hr/res_config.py
+++ b/addons/hr/res_config.py
@@ -26,8 +26,8 @@ class hr_config_settings(osv.osv_memory):
help ="""This installs the module hr_evaluation."""),
'module_hr_gamification': fields.boolean('Drive engagement with challenges and badges',
help ="""This installs the module hr_gamification."""),
- 'module_account_analytic_analysis': fields.boolean('Allow invoicing based on timesheets (the sale application will be installed)',
- help ="""This installs the module account_analytic_analysis, which will install sales management too."""),
+ 'module_sale_contract': fields.boolean('Allow invoicing based on timesheets (the sale application will be installed)',
+ help ="""This installs the module sale_contract, which will install sales management too."""),
'module_hr_payroll': fields.boolean('Manage payroll',
help ="""This installs the module hr_payroll."""),
'module_website_hr_recruitment': fields.boolean('Publish jobs on your website',
diff --git a/addons/project_timesheet/__openerp__.py b/addons/project_timesheet/__openerp__.py
index c6e2695571b..e6b4c6961ec 100644
--- a/addons/project_timesheet/__openerp__.py
+++ b/addons/project_timesheet/__openerp__.py
@@ -16,7 +16,7 @@ with the effect of creating, editing and deleting either ways.
'author': 'OpenERP SA',
'website': 'https://www.odoo.com/page/project-management',
'images': ['images/invoice_task_work.jpeg', 'images/my_timesheet.jpeg', 'images/working_hour.jpeg'],
- 'depends': ['resource', 'project', 'account_analytic_analysis', 'procurement'],
+ 'depends': ['resource', 'project', 'sale_contract', 'procurement'],
'data': [
'security/ir.model.access.csv',
'security/project_timesheet_security.xml',
diff --git a/addons/project_timesheet/project_timesheet_view.xml b/addons/project_timesheet/project_timesheet_view.xml
index ef068f084d9..1ce6617152b 100644
--- a/addons/project_timesheet/project_timesheet_view.xml
+++ b/addons/project_timesheet/project_timesheet_view.xml
@@ -126,7 +126,7 @@
<field name="view_mode">tree,form,graph</field>
<field name="context">{}</field>
<field name="domain">[('type','=','normal')]</field>
- <field name="search_view_id" ref="account_analytic_analysis.view_account_analytic_account_overdue_search"/>
+ <field name="search_view_id" ref="sale_contract.view_account_analytic_account_overdue_search"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a customer contract.
@@ -136,6 +136,9 @@
</p>
</field>
</record>
+
+ <menuitem id="menu_invoicing_contracts" parent="menu_project_billing" sequence="4"
+ action="sale_contract.action_account_analytic_overdue"/>
<record model="ir.ui.view" id="view_task_form2_inherited">
<field name="name">project.task.form.inherited</field>
diff --git a/addons/sale/res_config.py b/addons/sale/res_config.py
index f4560f43f3c..8caa269b7fe 100644
--- a/addons/sale/res_config.py
+++ b/addons/sale/res_config.py
@@ -16,13 +16,13 @@ class sale_configuration(osv.TransientModel):
'timesheet': fields.boolean('Prepare invoices based on timesheets',
help='For modifying account analytic view to show important data to project manager of services companies.'
'You can also view the report of account analytic summary user-wise as well as month wise.\n'
- '-This installs the module account_analytic_analysis.'),
- 'module_account_analytic_analysis': fields.boolean('Use contracts management',
+ '-This installs the module sale_contract.'),
+ 'module_sale_contract': fields.boolean('Use contracts management',
help='Allows to define your customer contracts conditions: invoicing '
'method (fixed price, on timesheet, advance invoice), the exact pricing '
'(650€/day for a developer), the duration (one year support contract).\n'
'You will be able to follow the progress of the contract and invoice automatically.\n'
- '-It installs the account_analytic_analysis module.'),
+ '-It installs the sale_contract module.'),
'group_sale_pricelist':fields.boolean("Use pricelists to adapt your price per customers",
implied_group='product.group_sale_pricelist',
help="""Allows to manage different prices based on rules per category of customers.
@@ -79,7 +79,7 @@ Example: 10% for retailers, promotion of 5 EUR on this product, etc."""),
def onchange_timesheet(self, cr, uid, ids, timesheet, context=None):
return {'value': {
'timesheet': timesheet,
- 'module_account_analytic_analysis': timesheet,
+ 'module_sale_contract': timesheet,
}}
class account_config_settings(osv.osv_memory):
diff --git a/addons/sale/res_config_view.xml b/addons/sale/res_config_view.xml
index 536459d7107..2cf95f12ec0 100644
--- a/addons/sale/res_config_view.xml
+++ b/addons/sale/res_config_view.xml
@@ -95,10 +95,10 @@
<label for="id" string="Contract Features"/>
<div>
<div>
- <field name="module_account_analytic_analysis" on_change="onchange_timesheet(module_account_analytic_analysis)" class="oe_inline"/>
- <label for="module_account_analytic_analysis"/>
+ <field name="module_sale_contract" on_change="onchange_timesheet(module_sale_contract)" class="oe_inline"/>
+ <label for="module_sale_contract"/>
</div>
- <div name="module_analytic_user_function" attrs="{'invisible':[('module_account_analytic_analysis','=',False)]}">
+ <div name="module_analytic_user_function" attrs="{'invisible':[('module_sale_contract','=',False)]}">
<field name="module_analytic_user_function" class="oe_inline"/>
<label for="module_analytic_user_function"/>
</div>
diff --git a/addons/account_analytic_analysis/__init__.py b/addons/sale_contract/__init__.py
index b27cee9bfb4..6e1a92f403e 100644
--- a/addons/account_analytic_analysis/__init__.py
+++ b/addons/sale_contract/__init__.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import account_analytic_analysis
-import res_config
+import models
+import report
+import test
diff --git a/addons/account_analytic_analysis/__openerp__.py b/addons/sale_contract/__openerp__.py
index 07102ba3de4..e52743e660d 100644
--- a/addons/account_analytic_analysis/__openerp__.py
+++ b/addons/sale_contract/__openerp__.py
@@ -18,13 +18,14 @@ Adds menu to show relevant information to each manager.You can also view the rep
'data': [
'security/ir.model.access.csv',
'security/account_analytic_analysis_security.xml',
- 'account_analytic_analysis_view.xml',
- 'account_analytic_analysis_cron.xml',
- 'res_config_view.xml',
+ 'views/sale_contract_view.xml',
+ 'data/sale_contract_cron.xml',
+ 'views/res_config_view.xml',
'views/account_analytic_analysis.xml',
+ 'views/product_template_view.xml',
],
- 'demo': ['analytic_account_demo.xml', 'analytic_account_demo.yml'],
- 'test': ['../account/test/account_minimal_test.xml', 'test/account_analytic_analysis.yml'],
+ 'demo': ['demo/sale_contract_demo.xml'],
+ 'test': ['test/account_analytic_analysis.yml'],
'installable': True,
'auto_install': False,
}
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_cron.xml b/addons/sale_contract/data/sale_contract_cron.xml
index 376a2029e5e..376a2029e5e 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_cron.xml
+++ b/addons/sale_contract/data/sale_contract_cron.xml
diff --git a/addons/account_analytic_analysis/analytic_account_demo.xml b/addons/sale_contract/demo/sale_contract_demo.xml
index 1f9ce31fe61..1f9ce31fe61 100644
--- a/addons/account_analytic_analysis/analytic_account_demo.xml
+++ b/addons/sale_contract/demo/sale_contract_demo.xml
diff --git a/addons/account_analytic_analysis/i18n/account_analytic_analysis.pot b/addons/sale_contract/i18n/account_analytic_analysis.pot
index ccc5c1983c3..ccc5c1983c3 100644
--- a/addons/account_analytic_analysis/i18n/account_analytic_analysis.pot
+++ b/addons/sale_contract/i18n/account_analytic_analysis.pot
diff --git a/addons/account_analytic_analysis/i18n/ar.po b/addons/sale_contract/i18n/ar.po
index fbc3422714b..fbc3422714b 100644
--- a/addons/account_analytic_analysis/i18n/ar.po
+++ b/addons/sale_contract/i18n/ar.po
diff --git a/addons/account_analytic_analysis/i18n/bg.po b/addons/sale_contract/i18n/bg.po
index e7d6c0cc5e4..e7d6c0cc5e4 100644
--- a/addons/account_analytic_analysis/i18n/bg.po
+++ b/addons/sale_contract/i18n/bg.po
diff --git a/addons/account_analytic_analysis/i18n/bs.po b/addons/sale_contract/i18n/bs.po
index 890ab1df19c..890ab1df19c 100644
--- a/addons/account_analytic_analysis/i18n/bs.po
+++ b/addons/sale_contract/i18n/bs.po
diff --git a/addons/account_analytic_analysis/i18n/ca.po b/addons/sale_contract/i18n/ca.po
index b7c50a510a0..b7c50a510a0 100644
--- a/addons/account_analytic_analysis/i18n/ca.po
+++ b/addons/sale_contract/i18n/ca.po
diff --git a/addons/account_analytic_analysis/i18n/cs.po b/addons/sale_contract/i18n/cs.po
index deac61e5361..deac61e5361 100644
--- a/addons/account_analytic_analysis/i18n/cs.po
+++ b/addons/sale_contract/i18n/cs.po
diff --git a/addons/account_analytic_analysis/i18n/da.po b/addons/sale_contract/i18n/da.po
index 64e77a3fcf9..64e77a3fcf9 100644
--- a/addons/account_analytic_analysis/i18n/da.po
+++ b/addons/sale_contract/i18n/da.po
diff --git a/addons/account_analytic_analysis/i18n/de.po b/addons/sale_contract/i18n/de.po
index 8c348e3d5da..8c348e3d5da 100644
--- a/addons/account_analytic_analysis/i18n/de.po
+++ b/addons/sale_contract/i18n/de.po
diff --git a/addons/account_analytic_analysis/i18n/el.po b/addons/sale_contract/i18n/el.po
index 7143bc67d4d..7143bc67d4d 100644
--- a/addons/account_analytic_analysis/i18n/el.po
+++ b/addons/sale_contract/i18n/el.po
diff --git a/addons/account_analytic_analysis/i18n/en_GB.po b/addons/sale_contract/i18n/en_GB.po
index 9bc56890a52..9bc56890a52 100644
--- a/addons/account_analytic_analysis/i18n/en_GB.po
+++ b/addons/sale_contract/i18n/en_GB.po
diff --git a/addons/account_analytic_analysis/i18n/es.po b/addons/sale_contract/i18n/es.po
index 8b9bbecddfc..8b9bbecddfc 100644
--- a/addons/account_analytic_analysis/i18n/es.po
+++ b/addons/sale_contract/i18n/es.po
diff --git a/addons/account_analytic_analysis/i18n/es_AR.po b/addons/sale_contract/i18n/es_AR.po
index 837f963b6b1..837f963b6b1 100644
--- a/addons/account_analytic_analysis/i18n/es_AR.po
+++ b/addons/sale_contract/i18n/es_AR.po
diff --git a/addons/account_analytic_analysis/i18n/es_CR.po b/addons/sale_contract/i18n/es_CR.po
index cb94224b4f8..cb94224b4f8 100644
--- a/addons/account_analytic_analysis/i18n/es_CR.po
+++ b/addons/sale_contract/i18n/es_CR.po
diff --git a/addons/account_analytic_analysis/i18n/es_EC.po b/addons/sale_contract/i18n/es_EC.po
index f506ccd3216..f506ccd3216 100644
--- a/addons/account_analytic_analysis/i18n/es_EC.po
+++ b/addons/sale_contract/i18n/es_EC.po
diff --git a/addons/account_analytic_analysis/i18n/es_MX.po b/addons/sale_contract/i18n/es_MX.po
index 2469ca4f607..2469ca4f607 100644
--- a/addons/account_analytic_analysis/i18n/es_MX.po
+++ b/addons/sale_contract/i18n/es_MX.po
diff --git a/addons/account_analytic_analysis/i18n/es_PY.po b/addons/sale_contract/i18n/es_PY.po
index b872514a2a8..b872514a2a8 100644
--- a/addons/account_analytic_analysis/i18n/es_PY.po
+++ b/addons/sale_contract/i18n/es_PY.po
diff --git a/addons/account_analytic_analysis/i18n/es_VE.po b/addons/sale_contract/i18n/es_VE.po
index ba7a0cc051d..ba7a0cc051d 100644
--- a/addons/account_analytic_analysis/i18n/es_VE.po
+++ b/addons/sale_contract/i18n/es_VE.po
diff --git a/addons/account_analytic_analysis/i18n/et.po b/addons/sale_contract/i18n/et.po
index 72f95d9f10c..72f95d9f10c 100644
--- a/addons/account_analytic_analysis/i18n/et.po
+++ b/addons/sale_contract/i18n/et.po
diff --git a/addons/account_analytic_analysis/i18n/fa.po b/addons/sale_contract/i18n/fa.po
index 57d6c8236b6..57d6c8236b6 100644
--- a/addons/account_analytic_analysis/i18n/fa.po
+++ b/addons/sale_contract/i18n/fa.po
diff --git a/addons/account_analytic_analysis/i18n/fi.po b/addons/sale_contract/i18n/fi.po
index e02e5568cd5..e02e5568cd5 100644
--- a/addons/account_analytic_analysis/i18n/fi.po
+++ b/addons/sale_contract/i18n/fi.po
diff --git a/addons/account_analytic_analysis/i18n/fr.po b/addons/sale_contract/i18n/fr.po
index df1ab08997c..df1ab08997c 100644
--- a/addons/account_analytic_analysis/i18n/fr.po
+++ b/addons/sale_contract/i18n/fr.po
diff --git a/addons/account_analytic_analysis/i18n/gl.po b/addons/sale_contract/i18n/gl.po
index b51eb662f4c..b51eb662f4c 100644
--- a/addons/account_analytic_analysis/i18n/gl.po
+++ b/addons/sale_contract/i18n/gl.po
diff --git a/addons/account_analytic_analysis/i18n/gu.po b/addons/sale_contract/i18n/gu.po
index ac05c5a3f01..ac05c5a3f01 100644
--- a/addons/account_analytic_analysis/i18n/gu.po
+++ b/addons/sale_contract/i18n/gu.po
diff --git a/addons/account_analytic_analysis/i18n/hr.po b/addons/sale_contract/i18n/hr.po
index 9161a2be55b..9161a2be55b 100644
--- a/addons/account_analytic_analysis/i18n/hr.po
+++ b/addons/sale_contract/i18n/hr.po
diff --git a/addons/account_analytic_analysis/i18n/hu.po b/addons/sale_contract/i18n/hu.po
index 636b976d583..636b976d583 100644
--- a/addons/account_analytic_analysis/i18n/hu.po
+++ b/addons/sale_contract/i18n/hu.po
diff --git a/addons/account_analytic_analysis/i18n/id.po b/addons/sale_contract/i18n/id.po
index 83f3a72c9e3..83f3a72c9e3 100644
--- a/addons/account_analytic_analysis/i18n/id.po
+++ b/addons/sale_contract/i18n/id.po
diff --git a/addons/account_analytic_analysis/i18n/it.po b/addons/sale_contract/i18n/it.po
index 83338aa932a..83338aa932a 100644
--- a/addons/account_analytic_analysis/i18n/it.po
+++ b/addons/sale_contract/i18n/it.po
diff --git a/addons/account_analytic_analysis/i18n/ja.po b/addons/sale_contract/i18n/ja.po
index 561a8707c2d..561a8707c2d 100644
--- a/addons/account_analytic_analysis/i18n/ja.po
+++ b/addons/sale_contract/i18n/ja.po
diff --git a/addons/account_analytic_analysis/i18n/ko.po b/addons/sale_contract/i18n/ko.po
index 2b98dacee73..2b98dacee73 100644
--- a/addons/account_analytic_analysis/i18n/ko.po
+++ b/addons/sale_contract/i18n/ko.po
diff --git a/addons/account_analytic_analysis/i18n/lt.po b/addons/sale_contract/i18n/lt.po
index 860e9790ee6..860e9790ee6 100644
--- a/addons/account_analytic_analysis/i18n/lt.po
+++ b/addons/sale_contract/i18n/lt.po
diff --git a/addons/account_analytic_analysis/i18n/lv.po b/addons/sale_contract/i18n/lv.po
index 3f9e74081db..3f9e74081db 100644
--- a/addons/account_analytic_analysis/i18n/lv.po
+++ b/addons/sale_contract/i18n/lv.po
diff --git a/addons/account_analytic_analysis/i18n/mk.po b/addons/sale_contract/i18n/mk.po
index 16a01dbc80b..16a01dbc80b 100644
--- a/addons/account_analytic_analysis/i18n/mk.po
+++ b/addons/sale_contract/i18n/mk.po
diff --git a/addons/account_analytic_analysis/i18n/mn.po b/addons/sale_contract/i18n/mn.po
index 55ddbf61d33..55ddbf61d33 100644
--- a/addons/account_analytic_analysis/i18n/mn.po
+++ b/addons/sale_contract/i18n/mn.po
diff --git a/addons/account_analytic_analysis/i18n/nb.po b/addons/sale_contract/i18n/nb.po
index dbf14e2ef37..dbf14e2ef37 100644
--- a/addons/account_analytic_analysis/i18n/nb.po
+++ b/addons/sale_contract/i18n/nb.po
diff --git a/addons/account_analytic_analysis/i18n/nl.po b/addons/sale_contract/i18n/nl.po
index 49c973c36f9..49c973c36f9 100644
--- a/addons/account_analytic_analysis/i18n/nl.po
+++ b/addons/sale_contract/i18n/nl.po
diff --git a/addons/account_analytic_analysis/i18n/nl_BE.po b/addons/sale_contract/i18n/nl_BE.po
index 0a78f5f6e77..0a78f5f6e77 100644
--- a/addons/account_analytic_analysis/i18n/nl_BE.po
+++ b/addons/sale_contract/i18n/nl_BE.po
diff --git a/addons/account_analytic_analysis/i18n/oc.po b/addons/sale_contract/i18n/oc.po
index a6e5658a458..a6e5658a458 100644
--- a/addons/account_analytic_analysis/i18n/oc.po
+++ b/addons/sale_contract/i18n/oc.po
diff --git a/addons/account_analytic_analysis/i18n/pl.po b/addons/sale_contract/i18n/pl.po
index 9b13f98d00b..9b13f98d00b 100644
--- a/addons/account_analytic_analysis/i18n/pl.po
+++ b/addons/sale_contract/i18n/pl.po
diff --git a/addons/account_analytic_analysis/i18n/pt.po b/addons/sale_contract/i18n/pt.po
index c53d7e8d564..c53d7e8d564 100644
--- a/addons/account_analytic_analysis/i18n/pt.po
+++ b/addons/sale_contract/i18n/pt.po
diff --git a/addons/account_analytic_analysis/i18n/pt_BR.po b/addons/sale_contract/i18n/pt_BR.po
index 7487f06b506..7487f06b506 100644
--- a/addons/account_analytic_analysis/i18n/pt_BR.po
+++ b/addons/sale_contract/i18n/pt_BR.po
diff --git a/addons/account_analytic_analysis/i18n/ro.po b/addons/sale_contract/i18n/ro.po
index 9f37c5fc50b..9f37c5fc50b 100644
--- a/addons/account_analytic_analysis/i18n/ro.po
+++ b/addons/sale_contract/i18n/ro.po
diff --git a/addons/account_analytic_analysis/i18n/ru.po b/addons/sale_contract/i18n/ru.po
index 17a8e320942..17a8e320942 100644
--- a/addons/account_analytic_analysis/i18n/ru.po
+++ b/addons/sale_contract/i18n/ru.po
diff --git a/addons/account_analytic_analysis/i18n/sk.po b/addons/sale_contract/i18n/sk.po
index 47e62cc440a..47e62cc440a 100644
--- a/addons/account_analytic_analysis/i18n/sk.po
+++ b/addons/sale_contract/i18n/sk.po
diff --git a/addons/account_analytic_analysis/i18n/sl.po b/addons/sale_contract/i18n/sl.po
index 75b61d0e940..75b61d0e940 100644
--- a/addons/account_analytic_analysis/i18n/sl.po
+++ b/addons/sale_contract/i18n/sl.po
diff --git a/addons/account_analytic_analysis/i18n/sq.po b/addons/sale_contract/i18n/sq.po
index d80485371ec..d80485371ec 100644
--- a/addons/account_analytic_analysis/i18n/sq.po
+++ b/addons/sale_contract/i18n/sq.po
diff --git a/addons/account_analytic_analysis/i18n/sr.po b/addons/sale_contract/i18n/sr.po
index 450fac1c833..450fac1c833 100644
--- a/addons/account_analytic_analysis/i18n/sr.po
+++ b/addons/sale_contract/i18n/sr.po
diff --git a/addons/account_analytic_analysis/i18n/sr@latin.po b/addons/sale_contract/i18n/sr@latin.po
index 487ab4185e1..487ab4185e1 100644
--- a/addons/account_analytic_analysis/i18n/sr@latin.po
+++ b/addons/sale_contract/i18n/sr@latin.po
diff --git a/addons/account_analytic_analysis/i18n/sv.po b/addons/sale_contract/i18n/sv.po
index ab0e1dffcdd..ab0e1dffcdd 100644
--- a/addons/account_analytic_analysis/i18n/sv.po
+++ b/addons/sale_contract/i18n/sv.po
diff --git a/addons/account_analytic_analysis/i18n/tlh.po b/addons/sale_contract/i18n/tlh.po
index cb6d172f8b5..cb6d172f8b5 100644
--- a/addons/account_analytic_analysis/i18n/tlh.po
+++ b/addons/sale_contract/i18n/tlh.po
diff --git a/addons/account_analytic_analysis/i18n/tr.po b/addons/sale_contract/i18n/tr.po
index cc6646767e9..cc6646767e9 100644
--- a/addons/account_analytic_analysis/i18n/tr.po
+++ b/addons/sale_contract/i18n/tr.po
diff --git a/addons/account_analytic_analysis/i18n/uk.po b/addons/sale_contract/i18n/uk.po
index 0a7908f780f..0a7908f780f 100644
--- a/addons/account_analytic_analysis/i18n/uk.po
+++ b/addons/sale_contract/i18n/uk.po
diff --git a/addons/account_analytic_analysis/i18n/vi.po b/addons/sale_contract/i18n/vi.po
index 9e88eb28815..9e88eb28815 100644
--- a/addons/account_analytic_analysis/i18n/vi.po
+++ b/addons/sale_contract/i18n/vi.po
diff --git a/addons/account_analytic_analysis/i18n/zh_CN.po b/addons/sale_contract/i18n/zh_CN.po
index 58182342097..58182342097 100644
--- a/addons/account_analytic_analysis/i18n/zh_CN.po
+++ b/addons/sale_contract/i18n/zh_CN.po
diff --git a/addons/account_analytic_analysis/i18n/zh_TW.po b/addons/sale_contract/i18n/zh_TW.po
index cc672f4bd9f..cc672f4bd9f 100644
--- a/addons/account_analytic_analysis/i18n/zh_TW.po
+++ b/addons/sale_contract/i18n/zh_TW.po
diff --git a/addons/sale_contract/models/__init__.py b/addons/sale_contract/models/__init__.py
new file mode 100644
index 00000000000..616ffabaed9
--- /dev/null
+++ b/addons/sale_contract/models/__init__.py
@@ -0,0 +1,4 @@
+import sale_contract
+import sale
+import res_config
+
diff --git a/addons/account_analytic_analysis/res_config.py b/addons/sale_contract/models/res_config.py
index bc158117863..30f75853a74 100644
--- a/addons/account_analytic_analysis/res_config.py
+++ b/addons/sale_contract/models/res_config.py
@@ -10,7 +10,7 @@ class sale_configuration(osv.osv_memory):
_columns = {
'group_template_required': fields.boolean("Mandatory use of templates.",
- implied_group='account_analytic_analysis.group_template_required',
+ implied_group='sale_contract.group_template_required',
help="Allows you to set the template field as required when creating an analytic account or a contract."),
'time_unit': fields.many2one('product.uom', 'The default working time unit.'),
}
@@ -25,7 +25,7 @@ class sale_configuration(osv.osv_memory):
product = ir_model_data.xmlid_to_object(cr, uid, 'product.product_product_consultant')
if product and product.exists():
res['time_unit'] = product.uom_id.id
- res['timesheet'] = res.get('module_account_analytic_analysis')
+ res['timesheet'] = res.get('module_sale_contract')
return res
def set_sale_defaults(self, cr, uid, ids, context=None):
diff --git a/addons/sale_contract/models/sale.py b/addons/sale_contract/models/sale.py
new file mode 100644
index 00000000000..0174749b875
--- /dev/null
+++ b/addons/sale_contract/models/sale.py
@@ -0,0 +1,37 @@
+from openerp import models, fields, api
+
+
+class product_template(models.Model):
+ """ Add recurrent_invoice field to product template if it is true,
+ it will add to related contract.
+ """
+ _inherit = "product.template"
+
+ recurring_invoice = fields.Boolean(
+ string='Recurrent Invoice Product', default=False,
+ help="If selected, this product will be added to the "
+ "related contract (which must be associated with the SO). \n"
+ "It will be used as product for invoice lines and generate "
+ "the recurring invoices automatically")
+
+
+class sale_order_line(models.Model):
+ _inherit = "sale.order.line"
+
+ @api.one
+ def button_confirm(self):
+ if self.product_id.recurring_invoice and self.order_id.project_id:
+ invoice_line_ids = [((0, 0, {
+ 'product_id': self.product_id.id,
+ 'analytic_account_id': self.order_id.project_id.id,
+ 'name': self.name,
+ 'quantity': self.product_uom_qty,
+ 'uom_id': self.product_uom.id,
+ 'price_unit': self.price_unit,
+ 'price_subtotal': self.price_subtotal
+ }))]
+ analytic_values = {'recurring_invoices': True, 'recurring_invoice_line_ids': invoice_line_ids}
+ if not self.order_id.project_id.partner_id:
+ analytic_values['partner_id'] = self.order_id.partner_id.id
+ self.order_id.project_id.write(analytic_values)
+ return super(sale_order_line, self).button_confirm() \ No newline at end of file
diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/sale_contract/models/sale_contract.py
index 367d5ae28af..cd0a6a77e32 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis.py
+++ b/addons/sale_contract/models/sale_contract.py
@@ -623,8 +623,8 @@ class account_analytic_account(osv.osv):
fill_remind("future", [('state', 'in', ['draft', 'open']), ('date', '!=', False), ('date', '<', (datetime.datetime.now() + datetime.timedelta(30)).strftime("%Y-%m-%d"))])
context['base_url'] = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
- context['action_id'] = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_analytic_analysis', 'action_account_analytic_overdue_all')[1]
- template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_analytic_analysis', 'account_analytic_cron_email_template')[1]
+ context['action_id'] = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale_contract', 'action_account_analytic_overdue_all')[1]
+ template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale_contract', 'account_analytic_cron_email_template')[1]
for user_id, data in remind.items():
context["data"] = data
_logger.debug("Sending reminder to uid %s", user_id)
@@ -763,126 +763,3 @@ class account_analytic_account(osv.osv):
else:
raise
return invoice_ids
-
-class account_analytic_account_summary_user(osv.osv):
- _name = "account_analytic_analysis.summary.user"
- _description = "Hours Summary by User"
- _order='user'
- _auto = False
- _rec_name = 'user'
-
- def _unit_amount(self, cr, uid, ids, name, arg, context=None):
- res = {}
- account_obj = self.pool.get('account.analytic.account')
- cr.execute('SELECT MAX(id) FROM res_users')
- max_user = cr.fetchone()[0]
- account_ids = [int(str(x/max_user - (x%max_user == 0 and 1 or 0))) for x in ids]
- user_ids = [int(str(x-((x/max_user - (x%max_user == 0 and 1 or 0)) *max_user))) for x in ids]
- parent_ids = tuple(account_ids) #We don't want consolidation for each of these fields because those complex computation is resource-greedy.
- if parent_ids:
- cr.execute('SELECT id, unit_amount ' \
- 'FROM account_analytic_analysis_summary_user ' \
- 'WHERE account_id IN %s ' \
- 'AND "user" IN %s',(parent_ids, tuple(user_ids),))
- for sum_id, unit_amount in cr.fetchall():
- res[sum_id] = unit_amount
- for id in ids:
- res[id] = round(res.get(id, 0.0), 2)
- return res
-
- _columns = {
- 'account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
- 'unit_amount': fields.float('Total Time'),
- 'user': fields.many2one('res.users', 'User'),
- }
-
- _depends = {
- 'res.users': ['id'],
- 'account.analytic.line': ['account_id', 'journal_id', 'unit_amount', 'user_id'],
- 'account.analytic.journal': ['type'],
- }
-
- def init(self, cr):
- openerp.tools.sql.drop_view_if_exists(cr, 'account_analytic_analysis_summary_user')
- cr.execute('''CREATE OR REPLACE VIEW account_analytic_analysis_summary_user AS (
- with mu as
- (select max(id) as max_user from res_users)
- , lu AS
- (SELECT
- l.account_id AS account_id,
- coalesce(l.user_id, 0) AS user_id,
- SUM(l.unit_amount) AS unit_amount
- FROM account_analytic_line AS l,
- account_analytic_journal AS j
- WHERE (j.type = 'general' ) and (j.id=l.journal_id)
- GROUP BY l.account_id, l.user_id
- )
- select (lu.account_id * mu.max_user) + lu.user_id as id,
- lu.account_id as account_id,
- lu.user_id as "user",
- unit_amount
- from lu, mu)''')
-
-class account_analytic_account_summary_month(osv.osv):
- _name = "account_analytic_analysis.summary.month"
- _description = "Hours summary by month"
- _auto = False
- _rec_name = 'month'
-
- _columns = {
- 'account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
- 'unit_amount': fields.float('Total Time'),
- 'month': fields.char('Month', size=32, readonly=True),
- }
-
- _depends = {
- 'account.analytic.line': ['account_id', 'date', 'journal_id', 'unit_amount'],
- 'account.analytic.journal': ['type'],
- }
-
- def init(self, cr):
- openerp.tools.sql.drop_view_if_exists(cr, 'account_analytic_analysis_summary_month')
- cr.execute('CREATE VIEW account_analytic_analysis_summary_month AS (' \
- 'SELECT ' \
- '(TO_NUMBER(TO_CHAR(d.month, \'YYYYMM\'), \'999999\') + (d.account_id * 1000000::bigint))::bigint AS id, ' \
- 'd.account_id AS account_id, ' \
- 'TO_CHAR(d.month, \'Mon YYYY\') AS month, ' \
- 'TO_NUMBER(TO_CHAR(d.month, \'YYYYMM\'), \'999999\') AS month_id, ' \
- 'COALESCE(SUM(l.unit_amount), 0.0) AS unit_amount ' \
- 'FROM ' \
- '(SELECT ' \
- 'd2.account_id, ' \
- 'd2.month ' \
- 'FROM ' \
- '(SELECT ' \
- 'a.id AS account_id, ' \
- 'l.month AS month ' \
- 'FROM ' \
- '(SELECT ' \
- 'DATE_TRUNC(\'month\', l.date) AS month ' \
- 'FROM account_analytic_line AS l, ' \
- 'account_analytic_journal AS j ' \
- 'WHERE j.type = \'general\' ' \
- 'GROUP BY DATE_TRUNC(\'month\', l.date) ' \
- ') AS l, ' \
- 'account_analytic_account AS a ' \
- 'GROUP BY l.month, a.id ' \
- ') AS d2 ' \
- 'GROUP BY d2.account_id, d2.month ' \
- ') AS d ' \
- 'LEFT JOIN ' \
- '(SELECT ' \
- 'l.account_id AS account_id, ' \
- 'DATE_TRUNC(\'month\', l.date) AS month, ' \
- 'SUM(l.unit_amount) AS unit_amount ' \
- 'FROM account_analytic_line AS l, ' \
- 'account_analytic_journal AS j ' \
- 'WHERE (j.type = \'general\') and (j.id=l.journal_id) ' \
- 'GROUP BY l.account_id, DATE_TRUNC(\'month\', l.date) ' \
- ') AS l '
- 'ON (' \
- 'd.account_id = l.account_id ' \
- 'AND d.month = l.month' \
- ') ' \
- 'GROUP BY d.month, d.account_id ' \
- ')')
diff --git a/addons/sale_contract/report/__init__.py b/addons/sale_contract/report/__init__.py
new file mode 100644
index 00000000000..6f892af3ae4
--- /dev/null
+++ b/addons/sale_contract/report/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import account_analytic_analysis_summary \ No newline at end of file
diff --git a/addons/sale_contract/report/account_analytic_analysis_summary.py b/addons/sale_contract/report/account_analytic_analysis_summary.py
new file mode 100644
index 00000000000..24eef913827
--- /dev/null
+++ b/addons/sale_contract/report/account_analytic_analysis_summary.py
@@ -0,0 +1,137 @@
+# -*- coding: utf-8 -*-
+from dateutil.relativedelta import relativedelta
+import datetime
+import logging
+import time
+
+from openerp.osv import osv, fields
+import openerp.tools
+from openerp.tools.translate import _
+from openerp.exceptions import UserError
+
+from openerp.addons.decimal_precision import decimal_precision as dp
+
+_logger = logging.getLogger(__name__)
+
+class account_analytic_account_summary_user(osv.osv):
+ _name = "account_analytic_analysis.summary.user"
+ _description = "Hours Summary by User"
+ _order='user'
+ _auto = False
+ _rec_name = 'user'
+
+ def _unit_amount(self, cr, uid, ids, name, arg, context=None):
+ res = {}
+ account_obj = self.pool.get('account.analytic.account')
+ cr.execute('SELECT MAX(id) FROM res_users')
+ max_user = cr.fetchone()[0]
+ account_ids = [int(str(x/max_user - (x%max_user == 0 and 1 or 0))) for x in ids]
+ user_ids = [int(str(x-((x/max_user - (x%max_user == 0 and 1 or 0)) *max_user))) for x in ids]
+ parent_ids = tuple(account_ids) #We don't want consolidation for each of these fields because those complex computation is resource-greedy.
+ if parent_ids:
+ cr.execute('SELECT id, unit_amount ' \
+ 'FROM account_analytic_analysis_summary_user ' \
+ 'WHERE account_id IN %s ' \
+ 'AND "user" IN %s',(parent_ids, tuple(user_ids),))
+ for sum_id, unit_amount in cr.fetchall():
+ res[sum_id] = unit_amount
+ for id in ids:
+ res[id] = round(res.get(id, 0.0), 2)
+ return res
+
+ _columns = {
+ 'account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
+ 'unit_amount': fields.float('Total Time'),
+ 'user': fields.many2one('res.users', 'User'),
+ }
+
+ _depends = {
+ 'res.users': ['id'],
+ 'account.analytic.line': ['account_id', 'journal_id', 'unit_amount', 'user_id'],
+ 'account.analytic.journal': ['type'],
+ }
+
+ def init(self, cr):
+ openerp.tools.sql.drop_view_if_exists(cr, 'account_analytic_analysis_summary_user')
+ cr.execute('''CREATE OR REPLACE VIEW account_analytic_analysis_summary_user AS (
+ with mu as
+ (select max(id) as max_user from res_users)
+ , lu AS
+ (SELECT
+ l.account_id AS account_id,
+ coalesce(l.user_id, 0) AS user_id,
+ SUM(l.unit_amount) AS unit_amount
+ FROM account_analytic_line AS l,
+ account_analytic_journal AS j
+ WHERE (j.type = 'general' ) and (j.id=l.journal_id)
+ GROUP BY l.account_id, l.user_id
+ )
+ select (lu.account_id * mu.max_user) + lu.user_id as id,
+ lu.account_id as account_id,
+ lu.user_id as "user",
+ unit_amount
+ from lu, mu)''')
+
+class account_analytic_account_summary_month(osv.osv):
+ _name = "account_analytic_analysis.summary.month"
+ _description = "Hours summary by month"
+ _auto = False
+ _rec_name = 'month'
+
+ _columns = {
+ 'account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
+ 'unit_amount': fields.float('Total Time'),
+ 'month': fields.char('Month', size=32, readonly=True),
+ }
+
+ _depends = {
+ 'account.analytic.line': ['account_id', 'date', 'journal_id', 'unit_amount'],
+ 'account.analytic.journal': ['type'],
+ }
+
+ def init(self, cr):
+ openerp.tools.sql.drop_view_if_exists(cr, 'account_analytic_analysis_summary_month')
+ cr.execute('CREATE VIEW account_analytic_analysis_summary_month AS (' \
+ 'SELECT ' \
+ '(TO_NUMBER(TO_CHAR(d.month, \'YYYYMM\'), \'999999\') + (d.account_id * 1000000::bigint))::bigint AS id, ' \
+ 'd.account_id AS account_id, ' \
+ 'TO_CHAR(d.month, \'Mon YYYY\') AS month, ' \
+ 'TO_NUMBER(TO_CHAR(d.month, \'YYYYMM\'), \'999999\') AS month_id, ' \
+ 'COALESCE(SUM(l.unit_amount), 0.0) AS unit_amount ' \
+ 'FROM ' \
+ '(SELECT ' \
+ 'd2.account_id, ' \
+ 'd2.month ' \
+ 'FROM ' \
+ '(SELECT ' \
+ 'a.id AS account_id, ' \
+ 'l.month AS month ' \
+ 'FROM ' \
+ '(SELECT ' \
+ 'DATE_TRUNC(\'month\', l.date) AS month ' \
+ 'FROM account_analytic_line AS l, ' \
+ 'account_analytic_journal AS j ' \
+ 'WHERE j.type = \'general\' ' \
+ 'GROUP BY DATE_TRUNC(\'month\', l.date) ' \
+ ') AS l, ' \
+ 'account_analytic_account AS a ' \
+ 'GROUP BY l.month, a.id ' \
+ ') AS d2 ' \
+ 'GROUP BY d2.account_id, d2.month ' \
+ ') AS d ' \
+ 'LEFT JOIN ' \
+ '(SELECT ' \
+ 'l.account_id AS account_id, ' \
+ 'DATE_TRUNC(\'month\', l.date) AS month, ' \
+ 'SUM(l.unit_amount) AS unit_amount ' \
+ 'FROM account_analytic_line AS l, ' \
+ 'account_analytic_journal AS j ' \
+ 'WHERE (j.type = \'general\') and (j.id=l.journal_id) ' \
+ 'GROUP BY l.account_id, DATE_TRUNC(\'month\', l.date) ' \
+ ') AS l '
+ 'ON (' \
+ 'd.account_id = l.account_id ' \
+ 'AND d.month = l.month' \
+ ') ' \
+ 'GROUP BY d.month, d.account_id ' \
+ ')')
diff --git a/addons/account_analytic_analysis/security/account_analytic_analysis_security.xml b/addons/sale_contract/security/account_analytic_analysis_security.xml
index 1dc3c3d4973..1dc3c3d4973 100644
--- a/addons/account_analytic_analysis/security/account_analytic_analysis_security.xml
+++ b/addons/sale_contract/security/account_analytic_analysis_security.xml
diff --git a/addons/account_analytic_analysis/security/ir.model.access.csv b/addons/sale_contract/security/ir.model.access.csv
index 8147affa379..8147affa379 100644
--- a/addons/account_analytic_analysis/security/ir.model.access.csv
+++ b/addons/sale_contract/security/ir.model.access.csv
diff --git a/addons/account_analytic_analysis/static/src/css/analytic.css b/addons/sale_contract/static/src/css/analytic.css
index ccf14aa202c..ccf14aa202c 100644
--- a/addons/account_analytic_analysis/static/src/css/analytic.css
+++ b/addons/sale_contract/static/src/css/analytic.css
diff --git a/addons/account_analytic_analysis/static/src/css/analytic.sass b/addons/sale_contract/static/src/css/analytic.sass
index 061d56d8324..061d56d8324 100644
--- a/addons/account_analytic_analysis/static/src/css/analytic.sass
+++ b/addons/sale_contract/static/src/css/analytic.sass
diff --git a/addons/account_analytic_analysis/test/account_analytic_analysis.yml b/addons/sale_contract/test/account_analytic_analysis.yml
index 947667b0fe7..00476a6f003 100644
--- a/addons/account_analytic_analysis/test/account_analytic_analysis.yml
+++ b/addons/sale_contract/test/account_analytic_analysis.yml
@@ -19,14 +19,14 @@
-
!record {model: account.analytic.account, id: contract_main}:
partner_id: base.main_partner
- template_id: account_analytic_analysis.contract_template
+ template_id: sale_contract.contract_template
type: contract
-
I check that the contract inherited from data of the template
-
!python {model: account.analytic.account}: |
- contract = self.browse(cr, uid, ref('account_analytic_analysis.contract_main'))
- template = self.browse(cr, uid, ref('account_analytic_analysis.contract_template'))
+ contract = self.browse(cr, uid, ref('sale_contract.contract_main'))
+ template = self.browse(cr, uid, ref('sale_contract.contract_template'))
assert template.recurring_interval == contract.recurring_interval, "The recurring interval of the contract does not match with the contract template"
assert template.recurring_invoices == contract.recurring_invoices, "Invoice method of contract does not match with the contract template"
-
@@ -39,8 +39,8 @@
-
!python {model: account.invoice}: |
from openerp.tools import float_compare
- aid = ref('account_analytic_analysis.contract_main')
- ids = self.search(cr, uid, [('invoice_line_ids.account_analytic_id','=',aid)], context=context)
+ aid = ref('sale_contract.contract_main')
+ ids = self.search(cr, uid, [('invoice_line.analytic_account_id','=',aid)], context=context)
assert len(ids)>=1, 'No invoice created for the contract'
for invoice in self.browse(cr, uid, ids,context=context):
assert float_compare(invoice.amount_untaxed, 150.0, precision_digits=2) == 0, "The invoice total is different than 150!"
diff --git a/addons/account_analytic_analysis/views/account_analytic_analysis.xml b/addons/sale_contract/views/account_analytic_analysis.xml
index d54b80ece15..4b0c339bc20 100644
--- a/addons/account_analytic_analysis/views/account_analytic_analysis.xml
+++ b/addons/sale_contract/views/account_analytic_analysis.xml
@@ -3,7 +3,7 @@
<data>
<template id="assets_backend" name="account_analytic_analysis assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
- <link rel="stylesheet" href="/account_analytic_analysis/static/src/css/analytic.css"/>
+ <link rel="stylesheet" href="/sale_contract/static/src/css/analytic.css"/>
</xpath>
</template>
</data>
diff --git a/addons/sale_contract/views/product_template_view.xml b/addons/sale_contract/views/product_template_view.xml
new file mode 100644
index 00000000000..3a24fb3d458
--- /dev/null
+++ b/addons/sale_contract/views/product_template_view.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <record id="view_product_template_recurrent_form_inherit" model="ir.ui.view">
+ <field name="name">product_template_form_view.inherit</field>
+ <field name="model">product.template</field>
+ <field name="inherit_id" ref="product.product_template_form_view"/>
+ <field name="arch" type="xml">
+ <xpath expr="//group[@name='sale_condition']" position="after">
+ <group name="contract" string="Contract" colspan="3">
+ <field name="recurring_invoice" class="oe_inline"/>
+ </group>
+ </xpath>
+ </field>
+ </record>
+
+ </data>
+</openerp>
diff --git a/addons/account_analytic_analysis/res_config_view.xml b/addons/sale_contract/views/res_config_view.xml
index e9f2ddad7e8..9f9b778d308 100644
--- a/addons/account_analytic_analysis/res_config_view.xml
+++ b/addons/sale_contract/views/res_config_view.xml
@@ -17,7 +17,7 @@
<attribute name="invisible">0</attribute>
</group>
<xpath expr="//div[@name='div_default_options']" position="inside">
- <div name='time_unit' attrs="{'required':[('module_account_analytic_analysis','=',True)]}">
+ <div name='time_unit' attrs="{'required':[('module_sale_contract','=',True)]}">
<label for="time_unit"/>
<field name="time_unit" domain="[('category_id.name','=','Working Time')]" class="oe_inline"/>
</div>
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/sale_contract/views/sale_contract_view.xml
index 73360859062..cfd002256e7 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml
+++ b/addons/sale_contract/views/sale_contract_view.xml
@@ -368,7 +368,7 @@
<menuitem action="template_of_contract_action" id="menu_template_of_contract_action" parent="base.menu_sales_config" sequence="3"/>
- <record id="account_analytic_analysis_form_form" model="ir.ui.view">
+ <record id="sale_contract_form_form" model="ir.ui.view">
<field name="name">account.analytic.account.invoice.form.inherit</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>