diff options
| author | Damien Bouvy <dbo@odoo.com> | 2015-07-13 16:51:26 +0200 |
|---|---|---|
| committer | Damien Bouvy <dbo@odoo.com> | 2015-07-23 11:40:30 +0200 |
| commit | d8f0231afc5ce94e2feb91b11fbfb45c52ae849e (patch) | |
| tree | 02eeb63c3668dd27258ad195a47bfcf8a8d03ae1 /addons | |
| parent | 20dbd2675a7e80b65febf1c6d21eb81f2bbd5bcd (diff) | |
[RENAME] account_analytic_analysis -> sale_contract
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/analytic_contract_hr_expense/__openerp__.py | 2 | ||||
| -rw-r--r-- | addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml | 2 | ||||
| -rw-r--r-- | addons/crm/web_planner_data.xml | 2 | ||||
| -rw-r--r-- | addons/hr/res_config.py | 4 | ||||
| -rw-r--r-- | addons/project_timesheet/__openerp__.py | 2 | ||||
| -rw-r--r-- | addons/project_timesheet/project_timesheet_view.xml | 5 | ||||
| -rw-r--r-- | addons/sale/res_config.py | 8 | ||||
| -rw-r--r-- | addons/sale/res_config_view.xml | 6 | ||||
| -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__.py | 4 | ||||
| -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.py | 37 | ||||
| -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__.py | 2 | ||||
| -rw-r--r-- | addons/sale_contract/report/account_analytic_analysis_summary.py | 137 | ||||
| -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.xml | 19 | ||||
| -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 & 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"/> |
