From 9b39fd9f7f173d0c8be98dfada723e40dc0a7531 Mon Sep 17 00:00:00 2001 From: Darshan Kalola Date: Tue, 30 Jul 2013 12:56:23 +0530 Subject: [PATCH 001/143] [Process]remove process module and all process views bzr revid: darshankalola@gmail.com-20130730072623-bf1u8y1z0lo4cwrw --- addons/account/__openerp__.py | 5 +- .../process/customer_invoice_process.xml | 199 -------- addons/account/process/statement_process.xml | 93 ---- .../process/supplier_invoice_process.xml | 168 ------- addons/crm/__openerp__.py | 3 - .../crm/process/crm_configuration_process.xml | 84 ---- addons/hr/__openerp__.py | 1 - addons/hr/process/hr_process.xml | 70 --- addons/hr_expense/__openerp__.py | 1 - .../hr_expense/process/hr_expense_process.xml | 181 -------- addons/hr_holidays/__openerp__.py | 2 +- .../process/hr_holidays_process.xml | 173 ------- addons/hr_timesheet/__openerp__.py | 3 +- .../process/hr_timesheet_process.xml | 6 - addons/hr_timesheet_sheet/__openerp__.py | 3 +- .../process/hr_timesheet_sheet_process.xml | 174 ------- addons/membership/__openerp__.py | 3 +- .../membership/process/membership_process.xml | 134 ------ addons/mrp/__openerp__.py | 5 +- addons/mrp/process/procurement_process.xml | 227 --------- .../mrp/process/service_product_process.xml | 47 -- .../mrp/process/stockable_product_process.xml | 85 ---- addons/mrp_operations/__openerp__.py | 1 - .../process/mrp_operation_process.xml | 107 ----- addons/process/__init__.py | 25 - addons/process/__openerp__.py | 58 --- addons/process/i18n/ar.po | 381 --------------- addons/process/i18n/bg.po | 393 ---------------- addons/process/i18n/bs.po | 398 ---------------- addons/process/i18n/ca.po | 433 ----------------- addons/process/i18n/cs.po | 405 ---------------- addons/process/i18n/da.po | 379 --------------- addons/process/i18n/de.po | 435 ----------------- addons/process/i18n/el.po | 414 ----------------- addons/process/i18n/es.po | 434 ----------------- addons/process/i18n/es_AR.po | 408 ---------------- addons/process/i18n/es_CL.po | 434 ----------------- addons/process/i18n/es_CR.po | 436 ------------------ addons/process/i18n/es_MX.po | 368 --------------- addons/process/i18n/es_VE.po | 368 --------------- addons/process/i18n/et.po | 410 ---------------- addons/process/i18n/fi.po | 412 ----------------- addons/process/i18n/fr.po | 416 ----------------- addons/process/i18n/gl.po | 431 ----------------- addons/process/i18n/hi.po | 385 ---------------- addons/process/i18n/hi_HI.po | 304 ------------ addons/process/i18n/hr.po | 411 ----------------- addons/process/i18n/hu.po | 405 ---------------- addons/process/i18n/id.po | 378 --------------- addons/process/i18n/it.po | 434 ----------------- addons/process/i18n/ja.po | 382 --------------- addons/process/i18n/ko.po | 407 ---------------- addons/process/i18n/lt.po | 381 --------------- addons/process/i18n/mk.po | 381 --------------- addons/process/i18n/mn.po | 420 ----------------- addons/process/i18n/nl.po | 430 ----------------- addons/process/i18n/nl_BE.po | 383 --------------- addons/process/i18n/pl.po | 408 ---------------- addons/process/i18n/process.pot | 376 --------------- addons/process/i18n/pt.po | 434 ----------------- addons/process/i18n/pt_BR.po | 414 ----------------- addons/process/i18n/ro.po | 434 ----------------- addons/process/i18n/ru.po | 404 ---------------- addons/process/i18n/sk.po | 384 --------------- addons/process/i18n/sl.po | 410 ---------------- addons/process/i18n/sq.po | 379 --------------- addons/process/i18n/sr.po | 411 ----------------- addons/process/i18n/sr@latin.po | 411 ----------------- addons/process/i18n/sv.po | 412 ----------------- addons/process/i18n/tlh.po | 378 --------------- addons/process/i18n/tr.po | 413 ----------------- addons/process/i18n/uk.po | 386 ---------------- addons/process/i18n/vi.po | 379 --------------- addons/process/i18n/zh_CN.po | 428 ----------------- addons/process/i18n/zh_TW.po | 378 --------------- addons/process/process.py | 381 --------------- addons/process/process_demo.xml | 156 ------- addons/process/process_view.xml | 323 ------------- addons/process/security/ir.model.access.csv | 6 - addons/process/static/src/css/process.css | 70 --- addons/process/static/src/img/button-a-a.png | Bin 6595 -> 0 bytes addons/process/static/src/img/cta-a.gif | Bin 108 -> 0 bytes .../process/static/src/img/iconset-a-help.gif | Bin 379 -> 0 bytes .../process/static/src/img/node-current.png | Bin 3143 -> 0 bytes addons/process/static/src/img/node-gray.png | Bin 3128 -> 0 bytes .../static/src/img/node-subflow-gray.png | Bin 6837 -> 0 bytes .../process/static/src/img/node-subflow.png | Bin 6851 -> 0 bytes addons/process/static/src/img/node.png | Bin 3205 -> 0 bytes addons/process/static/src/js/process.js | 250 ---------- addons/process/static/src/xml/process.xml | 93 ---- addons/procurement/__openerp__.py | 3 +- .../process/procurement_process.xml | 42 -- addons/product/__openerp__.py | 3 +- addons/product/process/product_process.xml | 51 -- addons/project/__openerp__.py | 1 - addons/project/process/task_process.xml | 132 ------ addons/project_mrp/__openerp__.py | 2 +- .../process/project_mrp_process.xml | 74 --- addons/project_timesheet/__openerp__.py | 1 - .../process/project_timesheet_process.xml | 70 --- addons/purchase/__openerp__.py | 3 +- addons/purchase/process/purchase_process.xml | 267 ----------- addons/resource/__openerp__.py | 2 +- addons/sale/__openerp__.py | 1 - addons/sale/process/sale_process.xml | 130 ------ addons/sale_crm/__openerp__.py | 1 - addons/sale_crm/process/sale_crm_process.xml | 77 ---- addons/sale_stock/__openerp__.py | 1 - .../sale_stock/process/sale_stock_process.xml | 159 ------- 109 files changed, 11 insertions(+), 23841 deletions(-) delete mode 100644 addons/account/process/customer_invoice_process.xml delete mode 100644 addons/account/process/statement_process.xml delete mode 100644 addons/account/process/supplier_invoice_process.xml delete mode 100644 addons/crm/process/crm_configuration_process.xml delete mode 100644 addons/hr/process/hr_process.xml delete mode 100644 addons/hr_expense/process/hr_expense_process.xml delete mode 100644 addons/hr_holidays/process/hr_holidays_process.xml delete mode 100644 addons/hr_timesheet/process/hr_timesheet_process.xml delete mode 100644 addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml delete mode 100644 addons/membership/process/membership_process.xml delete mode 100644 addons/mrp/process/procurement_process.xml delete mode 100644 addons/mrp/process/service_product_process.xml delete mode 100644 addons/mrp/process/stockable_product_process.xml delete mode 100644 addons/mrp_operations/process/mrp_operation_process.xml delete mode 100644 addons/process/__init__.py delete mode 100644 addons/process/__openerp__.py delete mode 100644 addons/process/i18n/ar.po delete mode 100644 addons/process/i18n/bg.po delete mode 100644 addons/process/i18n/bs.po delete mode 100644 addons/process/i18n/ca.po delete mode 100644 addons/process/i18n/cs.po delete mode 100644 addons/process/i18n/da.po delete mode 100644 addons/process/i18n/de.po delete mode 100644 addons/process/i18n/el.po delete mode 100644 addons/process/i18n/es.po delete mode 100644 addons/process/i18n/es_AR.po delete mode 100644 addons/process/i18n/es_CL.po delete mode 100644 addons/process/i18n/es_CR.po delete mode 100644 addons/process/i18n/es_MX.po delete mode 100644 addons/process/i18n/es_VE.po delete mode 100644 addons/process/i18n/et.po delete mode 100644 addons/process/i18n/fi.po delete mode 100644 addons/process/i18n/fr.po delete mode 100644 addons/process/i18n/gl.po delete mode 100644 addons/process/i18n/hi.po delete mode 100644 addons/process/i18n/hi_HI.po delete mode 100644 addons/process/i18n/hr.po delete mode 100644 addons/process/i18n/hu.po delete mode 100644 addons/process/i18n/id.po delete mode 100644 addons/process/i18n/it.po delete mode 100644 addons/process/i18n/ja.po delete mode 100644 addons/process/i18n/ko.po delete mode 100644 addons/process/i18n/lt.po delete mode 100644 addons/process/i18n/mk.po delete mode 100644 addons/process/i18n/mn.po delete mode 100644 addons/process/i18n/nl.po delete mode 100644 addons/process/i18n/nl_BE.po delete mode 100644 addons/process/i18n/pl.po delete mode 100644 addons/process/i18n/process.pot delete mode 100644 addons/process/i18n/pt.po delete mode 100644 addons/process/i18n/pt_BR.po delete mode 100644 addons/process/i18n/ro.po delete mode 100644 addons/process/i18n/ru.po delete mode 100644 addons/process/i18n/sk.po delete mode 100644 addons/process/i18n/sl.po delete mode 100644 addons/process/i18n/sq.po delete mode 100644 addons/process/i18n/sr.po delete mode 100644 addons/process/i18n/sr@latin.po delete mode 100644 addons/process/i18n/sv.po delete mode 100644 addons/process/i18n/tlh.po delete mode 100644 addons/process/i18n/tr.po delete mode 100644 addons/process/i18n/uk.po delete mode 100644 addons/process/i18n/vi.po delete mode 100644 addons/process/i18n/zh_CN.po delete mode 100644 addons/process/i18n/zh_TW.po delete mode 100644 addons/process/process.py delete mode 100644 addons/process/process_demo.xml delete mode 100644 addons/process/process_view.xml delete mode 100644 addons/process/security/ir.model.access.csv delete mode 100644 addons/process/static/src/css/process.css delete mode 100644 addons/process/static/src/img/button-a-a.png delete mode 100644 addons/process/static/src/img/cta-a.gif delete mode 100644 addons/process/static/src/img/iconset-a-help.gif delete mode 100644 addons/process/static/src/img/node-current.png delete mode 100644 addons/process/static/src/img/node-gray.png delete mode 100644 addons/process/static/src/img/node-subflow-gray.png delete mode 100644 addons/process/static/src/img/node-subflow.png delete mode 100644 addons/process/static/src/img/node.png delete mode 100644 addons/process/static/src/js/process.js delete mode 100644 addons/process/static/src/xml/process.xml delete mode 100644 addons/procurement/process/procurement_process.xml delete mode 100644 addons/product/process/product_process.xml delete mode 100644 addons/project/process/task_process.xml delete mode 100644 addons/project_mrp/process/project_mrp_process.xml delete mode 100644 addons/project_timesheet/process/project_timesheet_process.xml delete mode 100644 addons/purchase/process/purchase_process.xml delete mode 100644 addons/sale/process/sale_process.xml delete mode 100644 addons/sale_crm/process/sale_crm_process.xml delete mode 100644 addons/sale_stock/process/sale_stock_process.xml diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py index a380a69dc03..4a7cbaf5df2 100644 --- a/addons/account/__openerp__.py +++ b/addons/account/__openerp__.py @@ -49,7 +49,7 @@ for a particular financial year and for preparation of vouchers there is a modul """, 'website': 'http://www.openerp.com', 'images' : ['images/accounts.jpeg','images/bank_statement.jpeg','images/cash_register.jpeg','images/chart_of_accounts.jpeg','images/customer_invoice.jpeg','images/journal_entries.jpeg'], - 'depends' : ['base_setup', 'product', 'analytic', 'process', 'board', 'edi'], + 'depends' : ['base_setup', 'product', 'analytic', 'board', 'edi'], 'data': [ 'security/account_security.xml', 'security/ir.model.access.csv', @@ -114,9 +114,6 @@ for a particular financial year and for preparation of vouchers there is a modul 'partner_view.xml', 'product_view.xml', 'account_assert_test.xml', - 'process/statement_process.xml', - 'process/customer_invoice_process.xml', - 'process/supplier_invoice_process.xml', 'ir_sequence_view.xml', 'company_view.xml', 'board_account_view.xml', diff --git a/addons/account/process/customer_invoice_process.xml b/addons/account/process/customer_invoice_process.xml deleted file mode 100644 index e45f8080518..00000000000 --- a/addons/account/process/customer_invoice_process.xml +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/account/process/statement_process.xml b/addons/account/process/statement_process.xml deleted file mode 100644 index 81b1748a6d4..00000000000 --- a/addons/account/process/statement_process.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/account/process/supplier_invoice_process.xml b/addons/account/process/supplier_invoice_process.xml deleted file mode 100644 index b1d9de904aa..00000000000 --- a/addons/account/process/supplier_invoice_process.xml +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index e7ab7df27ea..aaeb24aeced 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -52,7 +52,6 @@ Dashboard for CRM will include: 'base_action_rule', 'base_setup', 'base_status', - 'process', 'mail', 'email_template', 'base_calendar', @@ -89,8 +88,6 @@ Dashboard for CRM will include: 'report/crm_lead_report_view.xml', 'report/crm_phonecall_report_view.xml', - 'process/crm_configuration_process.xml', - 'res_partner_view.xml', 'board_crm_view.xml', diff --git a/addons/crm/process/crm_configuration_process.xml b/addons/crm/process/crm_configuration_process.xml deleted file mode 100644 index 882c9680268..00000000000 --- a/addons/crm/process/crm_configuration_process.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr/__openerp__.py b/addons/hr/__openerp__.py index b074a80aa88..c792d4bcbc4 100644 --- a/addons/hr/__openerp__.py +++ b/addons/hr/__openerp__.py @@ -55,7 +55,6 @@ You can manage: 'board_hr_view.xml', 'hr_view.xml', 'hr_department_view.xml', - 'process/hr_process.xml', 'hr_installer.xml', 'hr_data.xml', 'res_config_view.xml', diff --git a/addons/hr/process/hr_process.xml b/addons/hr/process/hr_process.xml deleted file mode 100644 index 548df39905c..00000000000 --- a/addons/hr/process/hr_process.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr_expense/__openerp__.py b/addons/hr_expense/__openerp__.py index f149bc0c7c6..cdb10783075 100644 --- a/addons/hr_expense/__openerp__.py +++ b/addons/hr_expense/__openerp__.py @@ -54,7 +54,6 @@ This module also uses analytic accounting and is compatible with the invoice on 'hr_expense_workflow.xml', 'hr_expense_view.xml', 'hr_expense_report.xml', - 'process/hr_expense_process.xml', 'security/ir_rule.xml', 'report/hr_expense_report_view.xml', 'board_hr_expense_view.xml', diff --git a/addons/hr_expense/process/hr_expense_process.xml b/addons/hr_expense/process/hr_expense_process.xml deleted file mode 100644 index 3ade1f1daca..00000000000 --- a/addons/hr_expense/process/hr_expense_process.xml +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr_holidays/__openerp__.py b/addons/hr_holidays/__openerp__.py index 417748d874b..3b60874c584 100644 --- a/addons/hr_holidays/__openerp__.py +++ b/addons/hr_holidays/__openerp__.py @@ -45,7 +45,7 @@ You can keep track of leaves in different ways by following reports: A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a holiday request is accepted by setting up a type of meeting in Leave Type. """, 'images': ['images/hr_allocation_requests.jpeg', 'images/hr_leave_requests.jpeg', 'images/leaves_analysis.jpeg'], - 'depends': ['hr', 'base_calendar', 'process', 'resource'], + 'depends': ['hr', 'base_calendar', 'resource'], 'data': [ 'security/ir.model.access.csv', 'security/ir_rule.xml', diff --git a/addons/hr_holidays/process/hr_holidays_process.xml b/addons/hr_holidays/process/hr_holidays_process.xml deleted file mode 100644 index 79029e45e09..00000000000 --- a/addons/hr_holidays/process/hr_holidays_process.xml +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr_timesheet/__openerp__.py b/addons/hr_timesheet/__openerp__.py index fa14c45f84a..746044e1598 100644 --- a/addons/hr_timesheet/__openerp__.py +++ b/addons/hr_timesheet/__openerp__.py @@ -41,14 +41,13 @@ up a management by affair. 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/hr_timesheet_lines.jpeg'], - 'depends': ['account', 'hr', 'base', 'hr_attendance', 'process'], + 'depends': ['account', 'hr', 'base', 'hr_attendance'], 'data': [ 'security/ir.model.access.csv', 'security/hr_timesheet_security.xml', 'hr_timesheet_view.xml', 'hr_timesheet_report.xml', 'hr_timesheet_wizard.xml', - 'process/hr_timesheet_process.xml', 'wizard/hr_timesheet_print_employee_view.xml', 'wizard/hr_timesheet_print_users_view.xml', 'wizard/hr_timesheet_sign_in_out_view.xml', diff --git a/addons/hr_timesheet/process/hr_timesheet_process.xml b/addons/hr_timesheet/process/hr_timesheet_process.xml deleted file mode 100644 index 9b9efa3d19e..00000000000 --- a/addons/hr_timesheet/process/hr_timesheet_process.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/addons/hr_timesheet_sheet/__openerp__.py b/addons/hr_timesheet_sheet/__openerp__.py index e92ab4400bd..fedec20239a 100644 --- a/addons/hr_timesheet_sheet/__openerp__.py +++ b/addons/hr_timesheet_sheet/__openerp__.py @@ -46,13 +46,12 @@ The validation can be configured in the company: 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/hr_my_current_timesheet.jpeg','images/hr_timesheet_analysis.jpeg','images/hr_timesheet_sheet_analysis.jpeg','images/hr_timesheet_activity.jpeg'], - 'depends': ['hr_timesheet', 'hr_timesheet_invoice', 'process'], + 'depends': ['hr_timesheet', 'hr_timesheet_invoice'], 'data': [ 'security/ir.model.access.csv', 'security/hr_timesheet_sheet_security.xml', 'hr_timesheet_sheet_view.xml', 'hr_timesheet_workflow.xml', - 'process/hr_timesheet_sheet_process.xml', 'board_hr_timesheet_view.xml', 'report/hr_timesheet_report_view.xml', 'report/timesheet_report_view.xml', diff --git a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml deleted file mode 100644 index 7ebec9ab228..00000000000 --- a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/membership/__openerp__.py b/addons/membership/__openerp__.py index 4a0a80694b3..46e4e1f8aea 100644 --- a/addons/membership/__openerp__.py +++ b/addons/membership/__openerp__.py @@ -39,13 +39,12 @@ It is integrated with sales and accounting to allow you to automatically invoice and send propositions for membership renewal. """, 'author': 'OpenERP SA', - 'depends': ['base', 'product', 'account', 'process'], + 'depends': ['base', 'product', 'account'], 'data': [ 'security/ir.model.access.csv', 'wizard/membership_invoice_view.xml', 'membership_view.xml', 'report/report_membership_view.xml', - 'process/membership_process.xml', ], 'demo': ['membership_demo.xml'], 'test': ['test/test_membership.yml'], diff --git a/addons/membership/process/membership_process.xml b/addons/membership/process/membership_process.xml deleted file mode 100644 index b3ba426ff4a..00000000000 --- a/addons/membership/process/membership_process.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py index 6e025ae2d90..93db5d296ed 100644 --- a/addons/mrp/__openerp__.py +++ b/addons/mrp/__openerp__.py @@ -29,7 +29,7 @@ 'sequence': 18, 'summary': 'Manufacturing Orders, Bill of Materials, Routing', 'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/manufacturing_analysis.jpeg', 'images/production_dashboard.jpeg','images/routings.jpeg','images/work_centers.jpeg'], - 'depends': ['product','procurement', 'stock', 'resource', 'purchase','process'], + 'depends': ['product','procurement', 'stock', 'resource', 'purchase'], 'description': """ Manage the Manufacturing process in OpenERP =========================================== @@ -65,9 +65,6 @@ Dashboard / Reports for MRP will include: 'mrp_view.xml', 'mrp_report.xml', 'company_view.xml', - 'process/stockable_product_process.xml', - 'process/service_product_process.xml', - 'process/procurement_process.xml', 'report/mrp_report_view.xml', 'report/mrp_production_order_view.xml', 'board_manufacturing_view.xml', diff --git a/addons/mrp/process/procurement_process.xml b/addons/mrp/process/procurement_process.xml deleted file mode 100644 index dd52268e2d1..00000000000 --- a/addons/mrp/process/procurement_process.xml +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/mrp/process/service_product_process.xml b/addons/mrp/process/service_product_process.xml deleted file mode 100644 index 0005be6f48c..00000000000 --- a/addons/mrp/process/service_product_process.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/mrp/process/stockable_product_process.xml b/addons/mrp/process/stockable_product_process.xml deleted file mode 100644 index a43a09313b8..00000000000 --- a/addons/mrp/process/stockable_product_process.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/mrp_operations/__openerp__.py b/addons/mrp_operations/__openerp__.py index 7fedb426edd..6157c301682 100644 --- a/addons/mrp_operations/__openerp__.py +++ b/addons/mrp_operations/__openerp__.py @@ -63,7 +63,6 @@ So, that we can compare the theoretic delay and real delay. 'mrp_operations_view.xml', 'mrp_operations_report.xml', 'report/mrp_workorder_analysis_view.xml', - 'process/mrp_operation_process.xml', 'mrp_operations_workflow_instance.xml' ], 'demo': [ diff --git a/addons/mrp_operations/process/mrp_operation_process.xml b/addons/mrp_operations/process/mrp_operation_process.xml deleted file mode 100644 index d448b6a299a..00000000000 --- a/addons/mrp_operations/process/mrp_operation_process.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/process/__init__.py b/addons/process/__init__.py deleted file mode 100644 index 30a81513bf7..00000000000 --- a/addons/process/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import process - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/process/__openerp__.py b/addons/process/__openerp__.py deleted file mode 100644 index c998288a614..00000000000 --- a/addons/process/__openerp__.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - - -{ - 'name': 'Enterprise Process', - 'version': '1.0', - 'category': 'Hidden/Dependency', - 'description': """ -This module shows the basic processes involved in the selected modules and in the sequence they occur. -====================================================================================================== - -**Note:** This applies to the modules containing modulename_process.xml. - -**e.g.** product/process/product_process.xml. - - """, - 'author': 'OpenERP SA', - 'website': 'http://www.openerp.com', - 'depends': ['web'], - 'data': [ - 'security/ir.model.access.csv', - 'process_view.xml' - ], - 'demo': [], - 'installable': True, - 'auto_install': False, - 'images': ['images/process_nodes.jpeg','images/process_transitions.jpeg', 'images/processes.jpeg'], - 'js': [ - 'static/src/js/process.js' - ], - 'css': [ - 'static/src/css/process.css' - ], - 'qweb': [ - 'static/src/xml/*.xml' - ], - 'auto_install': True -} -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/process/i18n/ar.po b/addons/process/i18n/ar.po deleted file mode 100644 index 1f7692dc7e6..00000000000 --- a/addons/process/i18n/ar.po +++ /dev/null @@ -1,381 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-01-13 21:36+0000\n" -"Last-Translator: kifcaliph \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "سلسة الإجراءات" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "أزرار" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "تجميع حسب..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "عنوان URL للمساعدة" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "العقد" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "الشروط" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "وصف" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "كائن" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "شرط" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "وهمي" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "العمليّات" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "انتقال" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "الاسم" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "ملاحظات" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "نشط" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "إجراء" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "صيغة" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "نوع" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "عمليّة" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "إجراءات" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "خصائص" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "الانتقالات" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "State" -#~ msgstr "الحالة" diff --git a/addons/process/i18n/bg.po b/addons/process/i18n/bg.po deleted file mode 100644 index 65a027b7f40..00000000000 --- a/addons/process/i18n/bg.po +++ /dev/null @@ -1,393 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2011-03-01 20:31+0000\n" -"Last-Translator: Dimitar Markov \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Свързано меню" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Бутони" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Групирай по" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Интернет адрес за помощ" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Стартиращ поток" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Възли" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Условия" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Задействане на работен поток" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Описание" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Обект" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Преходи в работен поток" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Действие ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Преходни процеси" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Условие" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Фиктивен" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Процеси" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Преход" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Име" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Бележки" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Процес на търсене" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Активен" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Свързани групи" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Действие" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Израз" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Препоръчителни групи" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Входящи преходи" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Вид" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Завършващи преходи" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Обработка" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Други условия" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Действия" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Свойства" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Преходни процеси" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Изходящи преходи" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Подпоследователност" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Преходи" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Името на обекта трябва да започва с \"x_\" и да не съдържа никакви специални " -#~ "символи!" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Невалиден XML за преглед на архитектурата" - -#~ msgid "Extra Information" -#~ msgstr "Допълнителна информация" - -#~ msgid "State" -#~ msgstr "Състояние" diff --git a/addons/process/i18n/bs.po b/addons/process/i18n/bs.po deleted file mode 100644 index 8ce33ba8af6..00000000000 --- a/addons/process/i18n/bs.po +++ /dev/null @@ -1,398 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-11-17 06:56+0000\n" -"Last-Translator: Fabien (Open ERP) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Dugmad" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL za pomoć" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Uslovi" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Opis" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objekat" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Uslov" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Prijelaz" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Ime" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Bilješke" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktivan" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Akcija" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Izraz" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Vrsta" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proces" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Akcije" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Prijelazi" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Neodgovarajući XML za arhitekturu prikaza!" - -#~ msgid "State" -#~ msgstr "Stanje" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Naziv Objekta mora počinjati sa x_ i ne smije sadržavati specijalne znakove!" - -#~ msgid "Details" -#~ msgstr "Detalji" - -#~ msgid "Roles" -#~ msgstr "Uloge" - -#~ msgid "Extra Information" -#~ msgstr "Dodatna Informacija" diff --git a/addons/process/i18n/ca.po b/addons/process/i18n/ca.po deleted file mode 100644 index bd2b6aa975f..00000000000 --- a/addons/process/i18n/ca.po +++ /dev/null @@ -1,433 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-08-13 10:58+0000\n" -"Last-Translator: Fabien (Open ERP) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Node procés" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Si el camp actiu es desmarca, permet ocultar el procés sense eliminar-ho." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menú relacionat" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botons" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupa per..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipus de node" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL d'ajuda" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Inici fluxe de treball" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nodes procés" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodes" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condicions" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Cerca transició procés" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Node" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Disparador del flux de treball" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descripció" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Accions transicions procés" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objecte" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Node origen" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transicions flux de treball" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID de l'acció" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transició procés" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condició" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Fictici" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Processos" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transició" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nom" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transicions inicials" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notes" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Cerca procés" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Actiu" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grups associats" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expressió dels estats" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Acció" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expressió" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grups requerits" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transicions entrants" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipus" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transicions finals" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Procés" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Cerca node procés" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Altres condicions" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Procés empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Accions" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propietats" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transicions procés" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Node destí" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Classe de node" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transicions sortints" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subfluxe" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transicions" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Mètode objecte" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "El nom de l'objecte ha de començar amb x_ i no contenir cap caràcter " -#~ "especial!" - -#~ msgid "Roles from Workflow" -#~ msgstr "Rols des de flux" - -#~ msgid "State" -#~ msgstr "Estat" - -#~ msgid "Details" -#~ msgstr "Detalls" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML invàlid per a la definició de la vista!" - -#~ msgid "Roles" -#~ msgstr "Rols" - -#~ msgid "Roles Required" -#~ msgstr "Rols necessaris" - -#~ msgid "Extra Information" -#~ msgstr "Informació extra" - -#~ msgid "Enterprise Processes" -#~ msgstr "Processos d'empresa" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nom de model no vàlid en la definició de l'acció." - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Aquest mòdul mostra els processos bàsics en\n" -#~ " els quals intervenen els mòduls seleccionats, i\n" -#~ " la seqüència en la qual succeeix.\n" -#~ "\n" -#~ " Nota: Això és aplicable als mòduls que contenen nomdelmòdul_procés_xml\n" -#~ " per exemple product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/cs.po b/addons/process/i18n/cs.po deleted file mode 100644 index ee025600690..00000000000 --- a/addons/process/i18n/cs.po +++ /dev/null @@ -1,405 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2011-05-09 08:59+0000\n" -"Last-Translator: Jan B. Krejčí \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" -"X-Poedit-Language: Czech\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Uzel procesu" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Pokud je pole aktivní nastaveno na Nepravda, umožní vám to skrýt procesy bez " -"jejich odebrání." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Nabídka Příbuzné" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Stav" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Tlačítka" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Seskupit podle..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Druh uzlu" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Adresa URL nápovědy" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Začátek toku" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Uzly procesu" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Uzly" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Podmínky" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Hledání procesních přechodů" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Uzel" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Spouštěč pracovního toku" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Popis" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Akce procesních přechodů" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objekt" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Zdrojový uzel" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Přechody pracovního toku" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Naposledy změněno:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID akce" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Pohled procesu" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Přechod procesu" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Podmínka" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Prázdný" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesy" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Přechod" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Název" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Vstupní přechody" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Související:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Poznámky" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Upravit proces" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "Neznáme" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Hledání procesu" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktivní" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Přiřazené skupiny" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Stavový výraz" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Akce" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Vybrat proces" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Výraz" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Požadované skupiny" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Příchozí přechody" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Typ" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Odchozí přechody" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proces" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Hledání procesního uzlu" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Jiné podmínky" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Firemní proces" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Akce" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Vlastnosti" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Procesní přechody" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Cílový uzel" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Druh uzlu" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Podtoky:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Odchozí přechody" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Poznámky:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflow" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Přechody" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Metoda objektu" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Vybrat" - -#~ msgid "State" -#~ msgstr "Stav" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Tento modul ukazuje základní procesy zapojené\n" -#~ " ve vybraných modulech a posloupnosti, ve kterých\n" -#~ " nastávají\n" -#~ "\n" -#~ " Poznámka: Toto platí pro moduly obsahující modulename_process_xml\n" -#~ " např.pro product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/da.po b/addons/process/i18n/da.po deleted file mode 100644 index 83111729ee8..00000000000 --- a/addons/process/i18n/da.po +++ /dev/null @@ -1,379 +0,0 @@ -# Danish translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-01-27 06:22+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Danish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" diff --git a/addons/process/i18n/de.po b/addons/process/i18n/de.po deleted file mode 100644 index 5b5bf3c954b..00000000000 --- a/addons/process/i18n/de.po +++ /dev/null @@ -1,435 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-12-11 17:09+0000\n" -"Last-Translator: Thorsten Vocks (OpenBig.org) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Prozessknoten" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "Bei Deaktivierung können Sie die Anzeige dieses Prozess verbergen." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Bezug zu Menü" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Status" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Buttons" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Gruppierung..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Typ Knoten" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Dokumentation URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Startvorgang" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Prozessknoten" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Knoten" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Bedingungen" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Suche Prozessverkettung" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Knoten" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Vorgangsauslöser" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Beschreibung" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Prozessverbindung Aktionen" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objekt" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Quellknoten" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Vorgangsverkettungen" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Zuletzt bearbeitet von:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Verkettungsaktion ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Prozess Ansicht" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Vorgangsverkettung" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Bedingung" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Dummy" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Betriebliche Geschäftsprozesse" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Übersetzung" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Bezeichnung" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Anfang Kette" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Zugehörig:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Bemerkungen" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Prozess bearbeiten" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Suche Prozess" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktiv" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Zugelassene Gruppen" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Status Merkmale" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Aktion" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Prozess auswählen" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Trigger Ausdrücke" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Erforderliche Gruppen" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Eingehende Verbindung" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Typ" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Ende Kette" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Prozesse" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Suche Prozessknoten" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Weitere Bedingungen" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Unternehmens Prozess" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Aktionen" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Eigenschaften" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Prozessverkettungen" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Ziel Knoten" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Typ Knoten" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Unterprozesse:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Ausgehende Verbindung" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Sub Workflow" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Verbindungen" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Objekt Methode" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Auswählen" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Der Objekt Name muss mit einem x_ starten und darf keine Sonderzeichen " -#~ "beinhalten" - -#~ msgid "Roles from Workflow" -#~ msgstr "Regeln aus Workflow" - -#~ msgid "State" -#~ msgstr "Status" - -#~ msgid "Details" -#~ msgstr "Details" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Fehlerhafter xml Code für diese Ansicht!" - -#~ msgid "Roles" -#~ msgstr "Rollen" - -#~ msgid "Roles Required" -#~ msgstr "zu beachtende Regel" - -#~ msgid "Extra Information" -#~ msgstr "Extra Information" - -#~ msgid "Enterprise Processes" -#~ msgstr "Betriebliche Geschäftsprozesse" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Ungültiger Modulname in der Aktionsdefinition." - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Dieses Anwendung zeigt die grundlegenden Prozesse in den ausgewählten " -#~ "Modulen \n" -#~ " sowie die Reihenfolge in der die Prozesse auftreten.\n" -#~ "\n" -#~ " Hinweis: Die Anwendung erfolgt bei Modulen die xml Dateien nach dem " -#~ "Muster \n" -#~ " modulename_process_name beinhalten, z.B. " -#~ "product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/el.po b/addons/process/i18n/el.po deleted file mode 100644 index 543a7f65bc7..00000000000 --- a/addons/process/i18n/el.po +++ /dev/null @@ -1,414 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-12-09 11:29+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: nls@hellug.gr \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" -"X-Poedit-Country: GREECE\n" -"X-Poedit-Language: Greek\n" -"X-Poedit-SourceCharset: utf-8\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Κόμβος Διεργασίας" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Σχετικό Μενού" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Κουμπιά" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Ομαδοποίηση ανά..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL Βοήθειας" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Εκκίνηση Ροών" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Κόμβοι Διεργασιών" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Κόμβοι" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Συνθήκες" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Κόμβος" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Έναυσμα Ροής Εργασίας" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Περιγραφή" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Ενέργειες Μετάβασης Διεργασιών" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Αντικείμενο" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Κόμβος Προέλευσης" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Μεταβάσεις Ροών Εργασίας" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID Ενέργειας" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Μετάβαση Διεργασίας" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Συνθήκη" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Εικονικό" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Μετάβαση" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Όνομα" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Εκκίνηση Μεταβάσεων" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Σημειώσεις" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Ενεργά" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Έκφραση Καταστάσεων" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Ενέργεια" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Έκφραση" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Τύπος" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Διακοπή Μεταβάσεων" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Διεργασία" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Επιχειρηματική Διεργασία" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Ενέργειες" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Μεταβάσεις Διεργασιών" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Επιλεγμένος Κόμβος" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Είδος Κόμβου" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Εξερχόμενες Μεταβάσεις" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Υποροή" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Διεργασίες" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Μέθοδος Αντικειμένων" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Το όνομα του αντικειμένου πρέπει να ξεκινάει από x_ και να μην περιέχει " -#~ "ειδικούς χαρακτήρες!" - -#~ msgid "Roles from Workflow" -#~ msgstr "Ρόλοι από Ροή Εργασίας" - -#~ msgid "State" -#~ msgstr "Κατάσταση" - -#~ msgid "Details" -#~ msgstr "Λεπτομέρειες" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Άκυρο XML για Αρχιτεκτονική Όψης!" - -#~ msgid "Roles" -#~ msgstr "Ρόλοι" - -#~ msgid "Roles Required" -#~ msgstr "Απιατούμενοι Ρόλοι" - -#~ msgid "Extra Information" -#~ msgstr "Επιπλέον Πληροφορίες" - -#~ msgid "Enterprise Processes" -#~ msgstr "Επιχειρηματικές Διεργασίες" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Λανθασμένο όνομα μοντέλου στην δήλωση ενέργειας" diff --git a/addons/process/i18n/es.po b/addons/process/i18n/es.po deleted file mode 100644 index 6b8cc832741..00000000000 --- a/addons/process/i18n/es.po +++ /dev/null @@ -1,434 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-12-12 15:36+0000\n" -"Last-Translator: Pedro Manuel Baeza \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nodo proceso" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Si el campo activo se desmarca, permite ocultar el proceso sin eliminarlo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menú relacionado" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Estado" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo de nodo" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de ayuda" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Inicio flujo de trabajo" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nodos proceso" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodos" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condiciones" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Buscar transición proceso" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nodo" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Disparador del flujo de trabajo" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Acciones transiciones proceso" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objeto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nodo origen" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transiciones flujo de trabajo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Última modificación por:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID de la acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Vista del proceso" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transición proceso" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condición" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "De relleno" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesos" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transición" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transiciones iniciales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Relacionado:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notas" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Editar proceso" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "N/A" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Buscar proceso" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Activo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupos asociados" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expresión de los estados" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Seleccionar proceso" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expresión" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupos requeridos" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transiciones entrantes" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transiciones finales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proceso" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Buscar nodo proceso" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Otras condiciones" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proceso empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Acciones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transiciones proceso" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nodo destino" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Clase de nodo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Subflujos:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transiciones salientes" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Notas:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflujo" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transiciones" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método objeto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Seleccionar" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Roles from Workflow" -#~ msgstr "Roles desde flujo" - -#~ msgid "State" -#~ msgstr "Estado" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "Roles" -#~ msgstr "Roles" - -#~ msgid "Roles Required" -#~ msgstr "Roles necesarios" - -#~ msgid "Extra Information" -#~ msgstr "Información extra" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesos de empresa" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nombre de modelo no válido en la definición de acción." - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Este módulo muestra los procesos básicos en los\n" -#~ " que intervienen los módulos seleccionados, y\n" -#~ " la secuencia en la que ocurren.\n" -#~ "\n" -#~ " Note: Esto es aplicable a los módulos conteniendo " -#~ "nombredelmodulo_process_xml\n" -#~ " por ejemplo product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/es_AR.po b/addons/process/i18n/es_AR.po deleted file mode 100644 index 37ab2b413c5..00000000000 --- a/addons/process/i18n/es_AR.po +++ /dev/null @@ -1,408 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.0\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-09-15 20:23+0000\n" -"Last-Translator: Silvana Herrera \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nodo del proceso" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menú relacionado" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de ayuda" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Flujo inicial" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nodos del proceso" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodos" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condiciones" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nodo" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Disparador del Workflow" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Acciones de transiciones de proceso" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objeto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nodo de origen" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transiciones de workflow" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID de la acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transición del proceso" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condición" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Ficticio" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transición" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transiciones iniciales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notas" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Activo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expresión de estados" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expresión" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transiciones finales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Procesar" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proceso de empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Acciones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transiciones de proceso" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nodo objetivo" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Clase de nodo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transiciones salientes" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflow" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transiciones" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método objeto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "Roles from Workflow" -#~ msgstr "Roles desde Workflow" - -#~ msgid "State" -#~ msgstr "Provincia" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún caracter " -#~ "especial!" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Roles Required" -#~ msgstr "Roles necesarios" - -#~ msgid "Roles" -#~ msgstr "Roles" - -#~ msgid "Extra Information" -#~ msgstr "Información extra" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML inválido para la definición de la vista !" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesos de empresa" diff --git a/addons/process/i18n/es_CL.po b/addons/process/i18n/es_CL.po deleted file mode 100644 index 76da9c23682..00000000000 --- a/addons/process/i18n/es_CL.po +++ /dev/null @@ -1,434 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2011-01-14 04:37+0000\n" -"Last-Translator: Borja López Soilán (NeoPolus) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nodo proceso" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Si el campo activo se desmarca, permite ocultar el proceso sin eliminarlo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menú relacionado" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo de nodo" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de ayuda" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Inicio flujo de trabajo" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nodos proceso" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodos" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condiciones" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Buscar transición proceso" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nodo" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Disparador del flujo de trabajo" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Acciones transiciones proceso" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objeto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nodo origen" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transiciones flujo de trabajo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID de la acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transición proceso" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condición" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "De relleno" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesos" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transición" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transiciones iniciales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notas" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Buscar proceso" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Activo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupos asociados" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expresión de los estados" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expresión" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupos requeridos" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transiciones entrantes" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transiciones finales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proceso" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Buscar nodo proceso" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Otras condiciones" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proceso empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Acciones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transiciones proceso" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nodo destino" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Clase de nodo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transiciones salientes" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflujo" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transiciones" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método objeto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "State" -#~ msgstr "Estado" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Este módulo muestra los procesos básicos en los\n" -#~ " que intervienen los módulos seleccionados, y\n" -#~ " la secuencia en la que ocurren.\n" -#~ "\n" -#~ " Note: Esto es aplicable a los módulos conteniendo " -#~ "nombredelmodulo_process_xml\n" -#~ " por ejemplo product/process/product_process_xml\n" -#~ "\n" -#~ " " - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Roles from Workflow" -#~ msgstr "Roles desde flujo" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "Roles" -#~ msgstr "Roles" - -#~ msgid "Roles Required" -#~ msgstr "Roles necesarios" - -#~ msgid "Extra Information" -#~ msgstr "Información extra" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesos de empresa" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nombre de modelo no válido en la definición de acción." diff --git a/addons/process/i18n/es_CR.po b/addons/process/i18n/es_CR.po deleted file mode 100644 index 8e7fc1d9eec..00000000000 --- a/addons/process/i18n/es_CR.po +++ /dev/null @@ -1,436 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-02-17 00:24+0000\n" -"Last-Translator: Carlos Vásquez (CLEARCORP) " -"\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" -"Language: \n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nodo proceso" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Si el campo activo se desmarca, permite ocultar el proceso sin eliminarlo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menú relacionado" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo de nodo" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de ayuda" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Inicio flujo de trabajo" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nodos proceso" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodos" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condiciones" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Buscar transición proceso" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nodo" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Disparador del flujo de trabajo" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Acciones transiciones proceso" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objeto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nodo origen" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transiciones flujo de trabajo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID de la acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transición proceso" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condición" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "De relleno" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesos" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transición" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transiciones iniciales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notas" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Buscar proceso" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Activo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupos asociados" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expresión de los estados" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expresión" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupos requeridos" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transiciones entrantes" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transiciones finales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proceso" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Buscar nodo proceso" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Otras condiciones" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proceso empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Acciones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transiciones proceso" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nodo destino" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Clase de nodo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transiciones salientes" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflujo" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transiciones" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método objeto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "State" -#~ msgstr "Estado" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Roles from Workflow" -#~ msgstr "Roles desde flujo" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "Roles" -#~ msgstr "Roles" - -#~ msgid "Roles Required" -#~ msgstr "Roles necesarios" - -#~ msgid "Extra Information" -#~ msgstr "Información extra" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesos de empresa" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nombre de modelo no válido en la definición de acción." - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Este módulo muestra los procesos básicos en los\n" -#~ " que intervienen los módulos seleccionados, y\n" -#~ " la secuencia en la que ocurren.\n" -#~ "\n" -#~ " Note: Esto es aplicable a los módulos conteniendo " -#~ "nombredelmodulo_process_xml\n" -#~ " por ejemplo product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/es_MX.po b/addons/process/i18n/es_MX.po deleted file mode 100644 index 9a99ea402ee..00000000000 --- a/addons/process/i18n/es_MX.po +++ /dev/null @@ -1,368 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2010-12-28 08:42+0000\n" -"Last-Translator: Borja López Soilán (NeoPolus) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:10+0000\n" -"X-Generator: Launchpad (build 13830)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nodo proceso" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Si el campo activo se desmarca, permite ocultar el proceso sin eliminarlo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menú relacionado" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: process -#: selection:process.node,kind:0 -msgid "State" -msgstr "Estado" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo de nodo" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de ayuda" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nodos proceso" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodos" - -#. module: process -#: view:process.node:0 -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condiciones" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Buscar transición proceso" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nodo" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Disparador del flujo de trabajo" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Acciones transiciones proceso" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objeto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nodo origen" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transiciones flujo de trabajo" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID de la acción" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transición proceso" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condición" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "De relleno" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesos" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transiciones iniciales" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notas" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transición" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Buscar proceso" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflujo" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Activo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupos asociados" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expresión de los estados" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Acción" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Inicio flujo de trabajo" - -#. module: process -#: model:ir.module.module,description:process.module_meta_information -msgid "" -"\n" -" This module shows the basic processes involved\n" -" in the selected modules and in the sequence they\n" -" occur\n" -"\n" -" Note: This applies to the modules containing modulename_process_xml\n" -" for e.g product/process/product_process_xml\n" -"\n" -" " -msgstr "" -"\n" -" Este módulo muestra los procesos básicos en los\n" -" que intervienen los módulos seleccionados, y\n" -" la secuencia en la que ocurren.\n" -"\n" -" Note: Esto es aplicable a los módulos conteniendo " -"nombredelmodulo_process_xml\n" -" por ejemplo product/process/product_process_xml\n" -"\n" -" " - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expresión" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupos requeridos" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transiciones entrantes" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transiciones finales" - -#. module: process -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -msgid "Process" -msgstr "Proceso" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Buscar nodo proceso" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Otras condiciones" - -#. module: process -#: model:ir.module.module,shortdesc:process.module_meta_information -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proceso empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Acciones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transiciones proceso" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nodo destino" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Clase de nodo" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transiciones salientes" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transiciones" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método objeto" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Roles from Workflow" -#~ msgstr "Roles desde flujo" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "Roles" -#~ msgstr "Roles" - -#~ msgid "Roles Required" -#~ msgstr "Roles necesarios" - -#~ msgid "Extra Information" -#~ msgstr "Información extra" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesos de empresa" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nombre de modelo no válido en la definición de acción." diff --git a/addons/process/i18n/es_VE.po b/addons/process/i18n/es_VE.po deleted file mode 100644 index 9a99ea402ee..00000000000 --- a/addons/process/i18n/es_VE.po +++ /dev/null @@ -1,368 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2010-12-28 08:42+0000\n" -"Last-Translator: Borja López Soilán (NeoPolus) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:10+0000\n" -"X-Generator: Launchpad (build 13830)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nodo proceso" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Si el campo activo se desmarca, permite ocultar el proceso sin eliminarlo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menú relacionado" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: process -#: selection:process.node,kind:0 -msgid "State" -msgstr "Estado" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo de nodo" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de ayuda" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nodos proceso" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodos" - -#. module: process -#: view:process.node:0 -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condiciones" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Buscar transición proceso" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nodo" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Disparador del flujo de trabajo" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descripción" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Acciones transiciones proceso" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objeto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nodo origen" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transiciones flujo de trabajo" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID de la acción" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transición proceso" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condición" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "De relleno" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesos" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transiciones iniciales" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notas" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transición" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Buscar proceso" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflujo" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Activo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupos asociados" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expresión de los estados" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Acción" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Inicio flujo de trabajo" - -#. module: process -#: model:ir.module.module,description:process.module_meta_information -msgid "" -"\n" -" This module shows the basic processes involved\n" -" in the selected modules and in the sequence they\n" -" occur\n" -"\n" -" Note: This applies to the modules containing modulename_process_xml\n" -" for e.g product/process/product_process_xml\n" -"\n" -" " -msgstr "" -"\n" -" Este módulo muestra los procesos básicos en los\n" -" que intervienen los módulos seleccionados, y\n" -" la secuencia en la que ocurren.\n" -"\n" -" Note: Esto es aplicable a los módulos conteniendo " -"nombredelmodulo_process_xml\n" -" por ejemplo product/process/product_process_xml\n" -"\n" -" " - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expresión" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupos requeridos" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transiciones entrantes" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transiciones finales" - -#. module: process -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -msgid "Process" -msgstr "Proceso" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Buscar nodo proceso" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Otras condiciones" - -#. module: process -#: model:ir.module.module,shortdesc:process.module_meta_information -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proceso empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Acciones" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transiciones proceso" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nodo destino" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Clase de nodo" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transiciones salientes" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transiciones" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método objeto" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Roles from Workflow" -#~ msgstr "Roles desde flujo" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "Roles" -#~ msgstr "Roles" - -#~ msgid "Roles Required" -#~ msgstr "Roles necesarios" - -#~ msgid "Extra Information" -#~ msgstr "Información extra" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesos de empresa" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nombre de modelo no válido en la definición de acción." diff --git a/addons/process/i18n/et.po b/addons/process/i18n/et.po deleted file mode 100644 index f05621db1bf..00000000000 --- a/addons/process/i18n/et.po +++ /dev/null @@ -1,410 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-11-09 19:01+0000\n" -"Last-Translator: Fabien (Open ERP) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Protsessi sõlm" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Seotud menüü" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Nupud" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Abi URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Alustav voog" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Protsessi sõlmed" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Sõlmed" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Tingimused" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Sõlm" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Töövoo päästik" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Kirjeldus" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Protsessisiirde toimingud" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objekt" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Lähtesõlm" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Töövoo siirded" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Toimingu ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Protsessi siire" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Tingimus" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Liba" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Siire" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nimi" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Alustavad siirded" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Märkmed" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktiivne" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Olekute väljendus" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Toiming" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Avaldis" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tüüp" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Lõppevad siirded" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Protsess" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Ettevõtluse protsess" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Toimingud" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Protsessi siirded" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Sihtsõlm" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Sõlme liik" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Väljuvad siirded" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Alamvoog" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Siirded" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Objekti meetod" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Objekti nimi peab algama x_'ga ja ei tohi sisaldada ühtegi erisümbolit !" - -#~ msgid "Roles from Workflow" -#~ msgstr "Rollid töövoogudest" - -#~ msgid "State" -#~ msgstr "Olek" - -#~ msgid "Details" -#~ msgstr "Üksikasjad" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Vigane XML vaate arhitektuurile!" - -#~ msgid "Roles" -#~ msgstr "Rollid" - -#~ msgid "Roles Required" -#~ msgstr "Nõutud rollid" - -#~ msgid "Extra Information" -#~ msgstr "Lisainfo" - -#~ msgid "Enterprise Processes" -#~ msgstr "Ettevõtte protsessid" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Vigane mudeli nimi toimingu definitsioonis." diff --git a/addons/process/i18n/fi.po b/addons/process/i18n/fi.po deleted file mode 100644 index 05fa6292479..00000000000 --- a/addons/process/i18n/fi.po +++ /dev/null @@ -1,412 +0,0 @@ -# Finnish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-08-02 17:09+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) \n" -"Language-Team: Finnish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Prosessisolmu" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Jos aktiivisen kentän arvo on epätosi (false), voit piilottaa prosessin " -"poistamatta sitä." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Liittyvä valikko" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Painikkeet" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Ryhmittely.." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Noodin tyyppi" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Ohjeen URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Aloittava kulku" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Prosessisolmut" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Solmut" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Ehdot" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Hae prosessisiirtymiä" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Solmu" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Työnkulun liipaisin" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Kuvaus" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Prosessin siirtymien toiminnot" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objekti" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Lähdesolmu" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Työnkulun siirtymät" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Toiminnon tunnus" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Prosessin siirtymä" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Ehto" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Tyhjä" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Prosessit" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Siirtymä" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nimi" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Aloittavat siirtymät" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Huomautukset" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Hae prosessia" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktiivinen" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Liittyvät ryhmät" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Tilojen lauseke" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Toiminto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Lauseke" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Vaaditut ryhmät" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Saapuvat siirtymät" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tyyppi" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Lopettavat siirtymät" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Prosessi" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Hae prosessinoodia" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Muut ehdot" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Yrityksen prosessi" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Toiminnot" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Ominaisuudet" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Prosessin siirtymät" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Kohdesolmu" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Solmun tyyppi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Lähtevät siirtymät" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Alikulku" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Siirtymät" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Objektimenetelmä" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "Roles from Workflow" -#~ msgstr "Roolit työnkulusta" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Virheellinen mallin nimi toiminnon määrittelyssä." - -#~ msgid "State" -#~ msgstr "Tila" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "Objektin nimen tulee alkaa x_ ja se ei saa sisältää erikoismerkkejä!" - -#~ msgid "Details" -#~ msgstr "Tiedot" - -#~ msgid "Roles Required" -#~ msgstr "Vaaditut työtehtävät" - -#~ msgid "Roles" -#~ msgstr "Työtehtävät" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Virheellinen XML näkymä-arkkitehtuurille!" - -#~ msgid "Extra Information" -#~ msgstr "Lisätiedot" - -#~ msgid "Enterprise Processes" -#~ msgstr "Yrityksen prosessit" diff --git a/addons/process/i18n/fr.po b/addons/process/i18n/fr.po deleted file mode 100644 index 1accb844a56..00000000000 --- a/addons/process/i18n/fr.po +++ /dev/null @@ -1,416 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2011-01-13 19:47+0000\n" -"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " -"\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Noeud de processus" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "Décocher le champ \"actif\" masque le processus sans le supprimer." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menu associé" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Boutons" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Regrouper par..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Genre de noeud" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de l'aide" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Flux de Départ" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Noeuds de processus" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nœuds" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Conditions" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Rechercher dans les transitions de processus" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nœud" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Déclenchement du Flux d'Entreprise" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Description" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Actions des transitions de processus" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objet" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Noeud source" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transitions du Flux de Travail" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID de l'Action" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transition du processus" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condition" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Factice" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Processus" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transition" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nom" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transitions de Départ" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notes" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Rechercher dans les processus" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Actif" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Groupes associés" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expression d'états" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Action" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expression" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Groupes nécessaires" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transitions entrantes" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Type" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transitions finales" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Processus" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Rechercher dans les noeuds de processus" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Autres conditions" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Processus de la société" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Actions" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propriétés" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transitions de processus" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Noeud cible" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Type de Noeud" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transitions sortantes" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Sous-flux" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transitions" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Méthode de l'objet" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Le nom de l'objet doit commencer avec x_ et ne pas contenir de charactères " -#~ "spéciaux !" - -#~ msgid "State" -#~ msgstr "État" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML non valide pour l'architecture de la vue" - -#~ msgid "Extra Information" -#~ msgstr "Information supplémentaire" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Ce module montre les processus de base impliqués\n" -#~ " dans les modules sélectionnés et l'ordre dans lequel\n" -#~ " ils apparaissent\n" -#~ "\n" -#~ " Remarque : Ceci s'applique aux modules contenant " -#~ "nomdumodule_process_xml\n" -#~ " par exemple product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/gl.po b/addons/process/i18n/gl.po deleted file mode 100644 index 67eb9392055..00000000000 --- a/addons/process/i18n/gl.po +++ /dev/null @@ -1,431 +0,0 @@ -# Galician translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-12-15 06:01+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Galician \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nó do Proceso" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Se se desmarca o campo activo, permite ocultar o proceso sen eliminalo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menú relacionado" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botóns" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo de nodo" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de Axuda" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Fluxo de inicio" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nós do Proceso" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nós" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condicións" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Buscar transición do proceso" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nó" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Disparador de fluxo de traballo" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descrición" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Accións de Transición no Proceso" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Obxecto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nó de orixe" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transicións do fluxo de traballo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID da Acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transición do Proceso" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condición" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Dummy" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesos" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transición" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nome" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transicións de inicio" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notas" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Buscar proceso" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Activo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupos asociados" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expresión dos estados" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Acción" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expresión" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupos requiridos" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transicións entrantes" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transitions de remate" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proceso" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Buscar nodo proceso" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Outras condicións" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proceso de Empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Accións" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transicións do Proceso" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nó de destino" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Tipo de nó" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "As transicións de saída" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subfluxo" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transicións" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método do Obxecto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nome do modelo inválido na definición da acción." - -#~ msgid "Roles from Workflow" -#~ msgstr "Roles dende fluxo de traballo" - -#~ msgid "State" -#~ msgstr "Estado" - -#~ msgid "Details" -#~ msgstr "Detalles" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML inválido para a Arquitectura de Vistas!" - -#~ msgid "Roles" -#~ msgstr "Funcións" - -#~ msgid "Roles Required" -#~ msgstr "Roles esixidos" - -#~ msgid "Extra Information" -#~ msgstr "Información adicional" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesos de Empresa" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡O nome do obxeto debe comenzar por x_ e non conter ningún carater especial!" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Este módulo amosa os procesos básicos nos que participan os módulos " -#~ "seleccionados, e a secuencia na que ocorren. Nota: Isto é aplicable ós " -#~ "módulos que conteñen o nomedomódulo_process_xml por exemplo " -#~ "product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/hi.po b/addons/process/i18n/hi.po deleted file mode 100644 index 172bd32c148..00000000000 --- a/addons/process/i18n/hi.po +++ /dev/null @@ -1,385 +0,0 @@ -# Hindi translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-09-08 13:01+0000\n" -"Last-Translator: vir (Open ERP) \n" -"Language-Team: Hindi \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "शर्तें" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "State" -#~ msgstr "स्थिति" - -#~ msgid "Details" -#~ msgstr "विस्तार" diff --git a/addons/process/i18n/hi_HI.po b/addons/process/i18n/hi_HI.po deleted file mode 100644 index fdaec205754..00000000000 --- a/addons/process/i18n/hi_HI.po +++ /dev/null @@ -1,304 +0,0 @@ -# Hindi translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-19 14:36+0000\n" -"PO-Revision-Date: 2009-07-03 06:20+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Hindi \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-08-28 11:02+0000\n" -"X-Generator: Launchpad (build Unknown)\n" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: constraint:ir.model:0 -msgid "" -"The Object name must start with x_ and not contain any special character !" -msgstr "" - -#. module: process -#: constraint:ir.actions.act_window:0 -msgid "Invalid model name in the action definition." -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -#: view:process.transition:0 -msgid "Roles from Workflow" -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "State" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -#: view:process.transition:0 -msgid "Details" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.model,name:process.model_process_node -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: field:process.node,model_id:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -#: view:process.node:0 -#: view:process.process:0 -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: constraint:ir.ui.view:0 -msgid "Invalid XML for View Architecture!" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.transition,role_ids:0 -msgid "Roles" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#: field:process.node,note:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -#: view:process.transition:0 -msgid "Roles Required" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Extra Information" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.model,name:process.model_process_process -#: model:ir.ui.menu,name:process.menu_process_form -#: field:process.node,process_id:0 -#: view:process.process:0 -msgid "Process" -msgstr "" - -#. module: process -#: model:ir.module.module,shortdesc:process.module_meta_information -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.model,name:process.model_process_transition -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Processes" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" diff --git a/addons/process/i18n/hr.po b/addons/process/i18n/hr.po deleted file mode 100644 index 2e7847b76a9..00000000000 --- a/addons/process/i18n/hr.po +++ /dev/null @@ -1,411 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# Drazen Bosak , 2010. -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-12-10 08:27+0000\n" -"Last-Translator: Goran Kliska \n" -"Language-Team: Vinteh\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" -"Language: hr\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Procesni čvor" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Povezani izbornik" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Status" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Tipke" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Grupiraj po..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Help URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Početni tok" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Procesna čvorišta" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Čvorišta" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Uvjeti" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Čvorište" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Okidač Hodograma" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Opis" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Radnje Procesnih Prijelaza" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objekt" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Čvorište izvor" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Prijelazi Hodograma" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Promijenio:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID Radnje" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Proces" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Promjena Procesa" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Uvjet" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Prazan" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesi" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Prijelaz" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Ime" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Početni prijelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Povezani:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Bilješke" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Uredi proces" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktivan" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Izraz Stanja" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Radnja" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Odaberi proces" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Izraz" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tip" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Završni prijelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proces" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Ostali uvjeti" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proces poduzeća" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Radnje" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Prijelazi Procesa" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Ciljno čvorište" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Čvorište neke vrste" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Podtokovi:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Izlazni prijelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Podtok" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Prijelazi" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Object Method" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "State" -#~ msgstr "Stanje" - -#~ msgid "Details" -#~ msgstr "Detalji" - -#~ msgid "Roles" -#~ msgstr "Uloge" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Naziv Objekta mora početi s x_ i ne smije sadržavati bilo koji posebni znak !" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nepravilno ime modela u definiciji radnje." - -#~ msgid "Roles from Workflow" -#~ msgstr "Uloge iz Hodograma" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Nepravilan XML format za View Architecture!" - -#~ msgid "Roles Required" -#~ msgstr "Potrebne Uloge" - -#~ msgid "Extra Information" -#~ msgstr "Dodatne Informacije" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesi poduzeća" diff --git a/addons/process/i18n/hu.po b/addons/process/i18n/hu.po deleted file mode 100644 index f7834e90619..00000000000 --- a/addons/process/i18n/hu.po +++ /dev/null @@ -1,405 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2013-02-01 10:21+0000\n" -"Last-Translator: krnkris \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Folyamat csomópont" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Ha az aktív mező \"Hamis\"-ra van állítva, ez lehetővé teszi Önnek, hogy " -"elrejtse a folyamatot, anélkül, hogy eltávolítaná." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Kapcsolódó menü" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Állapot" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Gombok" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Csoportosítás..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Csomópont típusa" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Segéd URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Folyamat indítása" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Folyamat csomópontok" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Csomópontok" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Feltételek" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Folyamat átmenetek keresése" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Csomópont" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Munkafolyamat indítása" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Leírás" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Folyamat átmenet műveletek" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Tárgy" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Forrás csomópont" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Munkafolyamat átmenetek" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Utoljára módosította:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Művelet ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Folyamat nézet" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Folyamat átmenet" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Feltétel" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Utánzat" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Folyamatok" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Átmenet" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Név" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Átmenetek indítása" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Kapcsolódó:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Megjegyzések" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Folymat szerkesztés" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "Nem elérhető" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Folyamat keresése" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktív" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Kapcsolódó csoportok" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Állapot kifejezés" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Művelet" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Folyamat kiválasztása" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Kifejezés" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Kötelező csoportok" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Bejövő átmenetek" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Típus" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Átmenetek befejezése" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Folyamat" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Folyamat csomópont keresése" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Egyéb feltételek" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Vállalati folyamat" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Műveletek" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Tulajdonságok" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Folyamat átmenetek" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Cél csomópont" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Csomópont típusa" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Alfolyamatok:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Kimenő átmenetek" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Mejegyzés" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Alfolyamat" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Átmenetek" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Tárgy módszer" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Kiválasztás" - -#~ msgid "State" -#~ msgstr "Állapot" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Ez a modul megmutatja a kiválasztott modulokban \n" -#~ " és az általuk létrehozott sorrendben futó alapvető \n" -#~ " folyamatokat. \n" -#~ "\n" -#~ " Megjegyzés: Ez azokra a modulokra vonatozik, amelyek tartalmazzák az " -#~ "következőt: modulename_process_xml, \n" -#~ " mint például: product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/id.po b/addons/process/i18n/id.po deleted file mode 100644 index b3bd544a86c..00000000000 --- a/addons/process/i18n/id.po +++ /dev/null @@ -1,378 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-11-09 13:53+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" diff --git a/addons/process/i18n/it.po b/addons/process/i18n/it.po deleted file mode 100644 index 6bca4123264..00000000000 --- a/addons/process/i18n/it.po +++ /dev/null @@ -1,434 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-12-15 16:11+0000\n" -"Last-Translator: Davide Corio - agilebg.com \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nodo Processo" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Se il campo 'attivo' viene deselezionato, sarà possibile nascondere il " -"processo senza rimuoverlo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menu correlato" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Stato" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Pulsanti" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Raggruppato per..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo Di Nodo" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL della Guida" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Inizio Flusso" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nodi del Processo" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodi" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condizioni" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Ricerca transizioni" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nodo" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Avvio del flusso" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descrizione" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Azioni transitorie del Processo" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Oggetto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nodo Sorgente" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transizioni flusso" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Ultima modifica di:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID Azione:" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Vista Processo" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transizione di Processo" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condizione" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Fittizio" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Processi" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transizione" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nome" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transizioni Iniziali" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Correlato:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Note" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Modifica Processo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "N/D" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Ricerca processi" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Attivo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Gruppi associati" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Espressione Stati" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Azione" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Seleziona Processo" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Espressione" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Gruppi necessari" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transizioni in Ingresso" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Transizioni Finali" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Processo" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Ricerca Nodi" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Altre Condizioni" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Processo Aziendale" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Azioni" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Proprietà" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transizioni di Processo" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nodo Obiettivo" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Tipo Nodo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Sottoflussi:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transizioni in Uscita" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Note:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Sottoflusso" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transizioni" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Metodo Oggetto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Seleziona" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Il nome dell'oggetto deve iniziare per x_ e non deve contenere caratteri " -#~ "speciali!" - -#~ msgid "State" -#~ msgstr "Stato" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML non valido per Visualizzazione Architettura!" - -#~ msgid "Extra Information" -#~ msgstr "Informazioni Aggiuntive" - -#~ msgid "Roles from Workflow" -#~ msgstr "Regole dal Flusso di Lavoro" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nome del modulo non valido nella definizione dell'azione." - -#~ msgid "Details" -#~ msgstr "Dettagli" - -#~ msgid "Roles Required" -#~ msgstr "Ruoli Richiesti" - -#~ msgid "Roles" -#~ msgstr "Ruoli" - -#~ msgid "Enterprise Processes" -#~ msgstr "Processi Aziendali" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Questo modulo illustra i processi fondamentali coinvolti \n" -#~ " nei moduli selezionati e nella sequenza \n" -#~ " in cui si verificano\n" -#~ "\n" -#~ " Nota: Questo vale per i moduli contenenti modulename_process_xml \n" -#~ " ad esempio per prodotti / processi / product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/ja.po b/addons/process/i18n/ja.po deleted file mode 100644 index 7b6e633fa71..00000000000 --- a/addons/process/i18n/ja.po +++ /dev/null @@ -1,382 +0,0 @@ -# Japanese translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-06-01 23:37+0000\n" -"Last-Translator: Akira Hiyama \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "処理ノード" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "アクティブ項目にFalseを設定すると、処理を削除することなく非表示にできます。" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "関連メニュー" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "ボタン" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "グループ化…" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "ノードの種類" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "ヘルプURL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "開始フロー" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "処理ノード" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "ノード" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "条件" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "処理遷移の検索" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "ノード" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "ワークフロートリガー" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "説明" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "処理遷移アクション" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "オブジェクト" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "元ノード" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "ワークフロー遷移" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "アクションID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "処理遷移" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "条件" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "ダミー" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "処理" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "遷移" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "名前" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "遷移の始点" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "注記" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "処理検索" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "アクティブ" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "関連グループ" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "状態式" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "アクション" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "式" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "グループは必須" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "内向き遷移" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "タイプ" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "遷移の終点" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "処理" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "処理ノード検索" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "他の条件" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "企業の処理" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "アクション" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "属性" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "処理遷移" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "対象ノード" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "ノードの種類" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "外向き遷移" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "サブフロー" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "遷移" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "オブジェクトメソッド" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "State" -#~ msgstr "状態" diff --git a/addons/process/i18n/ko.po b/addons/process/i18n/ko.po deleted file mode 100644 index a77ff4fe649..00000000000 --- a/addons/process/i18n/ko.po +++ /dev/null @@ -1,407 +0,0 @@ -# Korean translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-09-08 13:34+0000\n" -"Last-Translator: ekodaq \n" -"Language-Team: Korean \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "프로세스 노드" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "관련된 메뉴" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "버튼" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "도움 URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "시작 플로우" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "프로세스 노드" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "노드" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "조건" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "노드" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "워크플로우 트리거" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "설명" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "프로세스 트랜지션 액션" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "오브젝트" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "소스 노드" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "워크플로우 트랜지션" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "액션 ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "프로세스 트랜지션" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "조건" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "더미" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "트랜지션" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "이름" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "트랜지션 시작" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "노드" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "활성" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "상태 표현" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "액션" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "표현" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "유형" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "마감 트랜지션" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "프로세스" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "엔터프라이즈 프로세스" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "액션" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "프로세스 트랜지션" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "타깃 노드" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "노드 종류" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "내보내기 트랜지션" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "서브플로우" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "트랜지션" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "오브젝트 메소드" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "Roles from Workflow" -#~ msgstr "워크플로우로부터의 역할" - -#~ msgid "State" -#~ msgstr "상태" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "오브젝트 이름은 x_로 시작해야 하며, 특수 문자를 포함해서는 안 됩니다 !" - -#~ msgid "Details" -#~ msgstr "상세" - -#~ msgid "Roles Required" -#~ msgstr "요구되는 역할" - -#~ msgid "Roles" -#~ msgstr "역할" - -#~ msgid "Extra Information" -#~ msgstr "기타 정보" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "유효하지 않은 뷰 아키테처를 위한 XML" - -#~ msgid "Enterprise Processes" -#~ msgstr "엔터프라이즈 프로세스" diff --git a/addons/process/i18n/lt.po b/addons/process/i18n/lt.po deleted file mode 100644 index b244de9ec95..00000000000 --- a/addons/process/i18n/lt.po +++ /dev/null @@ -1,381 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2011-01-13 17:06+0000\n" -"Last-Translator: Paulius Sladkevičius \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Mygtukai" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Grupuoti pagal..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Sąlygos" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Aprašymas" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objektas" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Sąlyga" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesai" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Pavadinimas" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Pastabos" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktyvus" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Veiksmas" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipas" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Veiksmai" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Savybės" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "State" -#~ msgstr "Būsena" diff --git a/addons/process/i18n/mk.po b/addons/process/i18n/mk.po deleted file mode 100644 index 536d81640e5..00000000000 --- a/addons/process/i18n/mk.po +++ /dev/null @@ -1,381 +0,0 @@ -# Macedonian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2013-02-21 13:44+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Macedonian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Јазол на процесот" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Доколку активното поле е подесено на Грешка, ќе ви дозволи да го сокриете " -"процесот без да го отстраните." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Поврзано мени" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Статус" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Копчиња" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Групирај по..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Вид на јазол" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL за помош" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Почнување на тек" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Јазли на процесот" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Јазли" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Услови" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Премин во процес на пребарување" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Јазол" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Активирање на текот на работа" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Опис" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Активности за премини на процес" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Предмет" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Изворен јазол" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "премин на текот на работа" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Последна промена од:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID на дејство" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Преглед на процес" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Премин на процес" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Услов" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Макета" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Процеси" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Премин" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Име" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Почеток на премини" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Поврзани:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Белешки" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Процес на измени" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "N/A" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Барај процес" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Активен" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Поврзани групи" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Изразување на состојби" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Акција" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Избери процес" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Израз" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Потребни групи" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Дојдовни премини" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Тип" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Завршни премини" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Процес" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Пребарувај јазол на процес" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Други услови" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Процес во претпријатие" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Дејства" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Својства" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Премини на процес" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Цел на јазол" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Вид на јазол" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Излезни премини" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Забелешки:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Премини" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Метод на објект" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Избери" diff --git a/addons/process/i18n/mn.po b/addons/process/i18n/mn.po deleted file mode 100644 index d94fbd65da2..00000000000 --- a/addons/process/i18n/mn.po +++ /dev/null @@ -1,420 +0,0 @@ -# #-#-#-#-# mn.po (OpenERP Server 6.0.0-rc1) #-#-#-#-# -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -# #-#-#-#-# mn1.po (openobject-addons) #-#-#-#-# -# Mongolian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2011-01-13 02:36+0000\n" -"Last-Translator: badralb \n" -"Language-Team: Mongolian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Процессын зангилаа" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Хэрэв идэвхитэй талбарын утга Худал бол, энэ нь процессыг устгахгүйгээр нуух " -"боломж олгоно." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Харгалзах цэс" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Төлөв" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Товчнууд" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Бүлэглэх..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Зангилааны төрөл" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Тусламжын вэб сайт" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Эхлэх урсгал" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Процессын зангилаа" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Зангилаа" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Нөхцөл" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Хайх" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Зангилаа" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Ажлын урсгалын триггер" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Тайлбар" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Процесс шилжилтийн үйлдлүүд" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Объект" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Гарсан зангилаа" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Ажлын урсгалын шилжилтүүд" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Хамгийн сүүлд зассан:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Үйлдлийн ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Процесс Харагдац" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Процессын шилжилт" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Нөхцөл" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Хиймэл" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Процесс" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Шилжилт" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Нэр" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Эхлэлийн шилжилт" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Холбоотой:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Тэмдэглэл" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Процесс Засварлах" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Хайх" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Идэвхитэй" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Холбогдох бүлэг" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Төлвийн илэрхийлэл" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Үйлдэл" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Процесс Сонгох" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Илэрхийлэл" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Шаардлагатай бүлэг" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Ирж буй өөрчлөлт" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Төрөл" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Төгсгөлийн шилжилт" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Процесс" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Хайлт" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Бусад нөхцөл" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Байгууллагын процесс" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Үйлдлүүд" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Шинж чанар" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Процессын шилжилт" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Хүрэх зангилаа" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Зангилааны төрөл" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Дэд урсгал:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Гарах шилжилтүүд" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Тэмдэглэлүүд:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Дэд урсгал" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Шилжилтүүд" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Объектын метод" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Сонгох" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Үйлдлийн тодорхойлолтод буруу моделийн нэр байна." - -#~ msgid "State" -#~ msgstr "Төлөв" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Объектын нэрний эхлэл x_ байх ёстой бөгөөд бусад тусгай тэмдэгтийг агуулж " -#~ "болохгүй!" - -#~ msgid "Details" -#~ msgstr "Дэлгэрэнгүй" - -#~ msgid "Roles Required" -#~ msgstr "Шаардагдах дүрүүд" - -#~ msgid "Roles" -#~ msgstr "Дүрүүд" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Дэлгэцийн XML алдаатай!" - -#~ msgid "Enterprise Processes" -#~ msgstr "Байгууллагын процессууд" - -#~ msgid "Roles from Workflow" -#~ msgstr "Ажлын урсгалын дүрүүд" - -#~ msgid "Extra Information" -#~ msgstr "Нэмэлт Мэдээлэл" diff --git a/addons/process/i18n/nl.po b/addons/process/i18n/nl.po deleted file mode 100644 index 4a1d7248e46..00000000000 --- a/addons/process/i18n/nl.po +++ /dev/null @@ -1,430 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-11-24 22:07+0000\n" -"Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Proces knooppunt" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Als het actief veld uitstaat, kunt u het proces verbergen zonder het te " -"verwijderen." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Gerelateerd menu" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Status" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Knoppen" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Groepeer op..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Soort knooppunt" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Help URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Starten van schema" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Proces knooppunten" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Knooppunten" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Voorwaarden" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Proces overgang zoeken" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Knooppunt" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Workschema Trigger" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Omschrijving" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Proces transitie acties" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Object" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Bron knooppunt" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Workflow transities" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Laatst gewijzigd door:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Actie ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Laat proces zien" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Proces overgang" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Voorwaarde" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Dummie" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Processen" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Overgang" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Naam" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Starten van overgangen" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Gerelateerd:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notities" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Proces bewerken" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "N.v.t." - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Proces zoeken" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Actief" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Verbonden groepen" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Status uitdrukking" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Actie" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Proces selecteren" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Uitdrukking" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Verplichte groepen" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Inkomende overgangen" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Soort" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Eindigende overgangen" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Processen" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Procesknooppunt zoeken" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Andere voorwaarden" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Bedrijfsprocessen" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Acties" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Eigenschappen" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Proces overgangen" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Bestemming knooppunt" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Soort knooppunt" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Subschemas:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Uitgaande overgangen" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Notities:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subschema" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Overgangen" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Object Methode" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Selecteren" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !" - -#~ msgid "Roles from Workflow" -#~ msgstr "Regels uit werkschema" - -#~ msgid "State" -#~ msgstr "Status" - -#~ msgid "Details" -#~ msgstr "Details" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Ongeldige XML voor overzicht" - -#~ msgid "Roles" -#~ msgstr "Rollen" - -#~ msgid "Roles Required" -#~ msgstr "Noodzakelijke rollen" - -#~ msgid "Extra Information" -#~ msgstr "Extra Informatie" - -#~ msgid "Enterprise Processes" -#~ msgstr "Bedrijfsprocessen" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Deze module toont de betrokken basis processen\n" -#~ " in de geselecteerde modules en in de volgorde waarin\n" -#~ " ze voorkomen.\n" -#~ "\n" -#~ " Merk op: Dit geldt voor de modules die modulename_process_xml\n" -#~ " bevatten, bijv. product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/nl_BE.po b/addons/process/i18n/nl_BE.po deleted file mode 100644 index 5a2fcb5242e..00000000000 --- a/addons/process/i18n/nl_BE.po +++ /dev/null @@ -1,383 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.0\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-04-10 10:19+0000\n" -"Last-Translator: Fabien (Open ERP) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !" diff --git a/addons/process/i18n/pl.po b/addons/process/i18n/pl.po deleted file mode 100644 index 54ece5bd4bd..00000000000 --- a/addons/process/i18n/pl.po +++ /dev/null @@ -1,408 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-11-17 06:55+0000\n" -"Last-Translator: Fabien (Open ERP) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Węzeł procesu" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Powiązane menu" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Przyciski" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL pomocy" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Przepływ początkowy" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Węzły procesu" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Węzły" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Warunki" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Węzeł" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Wyzwalacz obiegu" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Opis" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Akcje przejścia procesu" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Obiekt" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Węzeł źródłowy" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Przejścia obiegu" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID akcji" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Przejście procesu" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Warunek" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Bezczynny" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Przejście" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nazwa" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Przejścia początkowe" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Uwagi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktywny" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Wyrażenie stanów" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Akcja" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Wyrażenie" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Typ" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Przejścia końcowe" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proces" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proces przedsiębiorstwa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Akcje" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Przejścia procesu" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Węzeł docelowy" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Rodzaj węzła" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Przejścia wyjściowe" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Podobieg" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Przejścia" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Metoda obiektu" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Nazwa obiektu musi zaczynać się od x_ oraz nie może zawierać znaków " -#~ "specjalnych !" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML niewłaściwy dla tej architektury wyświetlania!" - -#~ msgid "State" -#~ msgstr "Stan" - -#~ msgid "Details" -#~ msgstr "Szczegóły" - -#~ msgid "Roles Required" -#~ msgstr "Wymagane role" - -#~ msgid "Roles" -#~ msgstr "Role" - -#~ msgid "Extra Information" -#~ msgstr "Dodatkowe informacje" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesy przedsiębiorstwa" - -#~ msgid "Roles from Workflow" -#~ msgstr "Role z obiegu" diff --git a/addons/process/i18n/process.pot b/addons/process/i18n/process.pot deleted file mode 100644 index 3bf64e30458..00000000000 --- a/addons/process/i18n/process.pot +++ /dev/null @@ -1,376 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0alpha\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-12-21 17:06+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "If the active field is set to False, it will allow you to hide the process without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - diff --git a/addons/process/i18n/pt.po b/addons/process/i18n/pt.po deleted file mode 100644 index b2250ec03ef..00000000000 --- a/addons/process/i18n/pt.po +++ /dev/null @@ -1,434 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-12-17 12:24+0000\n" -"Last-Translator: Rui Franco (multibase.pt) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nó do Processo" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Se o campo ativo é definido como Falso, ele permitirá que se oculte o " -"processo sem removê-lo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menu Relacionado" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Estado" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botões" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo de nó" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Ajuda URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Iniciar Flow" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Processo de nós" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nós" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condições" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Transição processo de pesquisa" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nó" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Acionador de Fluxo de Trabalho" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descrição" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Ações do Processo de Transições" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objeto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nó de Origem" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transições do Fluxo de Trabalho" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Última alteração por:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID da Ação" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Processo de Transição" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condição" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Dummy" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Processos" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transição" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nome" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Transações Iniciais" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notas" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Editar processo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "N/D" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Procurar processo" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Ativo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupos associados" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expressão dos Estados" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Ação" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expressão" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupos necessários" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transições de entrada" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Terminar Transições" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Processar" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Nó de processo de pesquisa" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Outras Condições" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Processo de Empresa" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Ações" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propriedades" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Processo de Transições" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nó de Destino" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Tipo de Nó" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transições em Saída" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Notas:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflow" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transições" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método do Objeto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Selecionar" - -#~ msgid "State" -#~ msgstr "Estado" - -#~ msgid "Details" -#~ msgstr "Detalhes" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nome de modelo inválido na definição da acção" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "O nome do Objecto deve começar com x_ e não pode conter nenhum carácter " -#~ "especial !" - -#~ msgid "Roles from Workflow" -#~ msgstr "Funções para Fluxo de Trabalho" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML Inválido para a Arquitectura de Vista!" - -#~ msgid "Roles" -#~ msgstr "Funções" - -#~ msgid "Roles Required" -#~ msgstr "Funções Exigidas" - -#~ msgid "Extra Information" -#~ msgstr "Informação Extra" - -#~ msgid "Enterprise Processes" -#~ msgstr "Processos da Empresa" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Este módulo mostra os processos básicos envolvidos \n" -#~ " nos módulos seleccionados e na sequência em que \n" -#~ " ocorrem \n" -#~ "\n" -#~ " Nota: Isto aplica-se aos módulos contendo modulename_process_xml \n" -#~ " para e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/pt_BR.po b/addons/process/i18n/pt_BR.po deleted file mode 100644 index 6d54923c11a..00000000000 --- a/addons/process/i18n/pt_BR.po +++ /dev/null @@ -1,414 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-12-22 01:28+0000\n" -"Last-Translator: Fábio Martinelli - http://zupy.com.br " -"\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nó do processo" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Se o campo ativo for definido como Falso, permite que você esconda o " -"processo sem removê-lo." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Menu relacionado" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Situação" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Botões" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Agrupar Por..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipo de Nó" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL de ajuda" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Inciando fluxo" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Nós do processo" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nós" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Condições" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Procurar Transição de Processo" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nó" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Workflow Trigger" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descrição" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Processar ações de transições" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objeto" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nó de origem" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Transições de Workflow" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Última atualização por:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Ação ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Visão de Processo" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Transição de processo" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condição" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Imitação" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Processos" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transição" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nome" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Iniciando transações" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Relacionado:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Observações" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Editar Processo" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "Nenhum" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Procurar Processo" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Ativo" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupos Associados" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expressão de estado" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Ação" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Selecionar processo" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expressão" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupos Necessários" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Transições de Entrada" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tipo" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Terminando transição" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Processo" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Procurar Processo/Nó" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Outras Condições" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Processos de negócios" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Ações" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Propriedades" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Transições de Processos" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nó de origem" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Tipo de nó" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Sub fluxos:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Transições de saida" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Notas:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subfluxo" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transições" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Método objeto" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Selecionar" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "O nome do objeto precisa iniciar com x_ e não conter nenhum caracter " -#~ "especial!" - -#~ msgid "Roles from Workflow" -#~ msgstr "Papéis de Workflow" - -#~ msgid "State" -#~ msgstr "Estado" - -#~ msgid "Details" -#~ msgstr "Detalhes" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Invalido XML para Arquitetura da View" - -#~ msgid "Roles" -#~ msgstr "Papéis" - -#~ msgid "Roles Required" -#~ msgstr "Papeis Requeridos" - -#~ msgid "Extra Information" -#~ msgstr "Informação Extra" - -#~ msgid "Enterprise Processes" -#~ msgstr "Processos empresariais" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nome de modelo inválido na definição da ação." diff --git a/addons/process/i18n/ro.po b/addons/process/i18n/ro.po deleted file mode 100644 index ec3b2b2194f..00000000000 --- a/addons/process/i18n/ro.po +++ /dev/null @@ -1,434 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2011-03-24 12:02+0000\n" -"Last-Translator: Dorin \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Nod Proces" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Daca campul activ este setat pe Fals, va va permite sa ascundeti procesul " -"fara a-l sterge." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Meniu Asociat" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Status" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Butoane" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Grupati dupa..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Tipul de nod" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL asistenta" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Incepere flux" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Noduri Proces" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Noduri" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Conditii" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Cautati Tranzitia procesului" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Nod" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Declansator Flux de lucru" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Descriere" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Actiuni Tranzitii Proces" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Obiect" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Nod sursa" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Tranzitii Flux de lucru" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Modificat ultima data de :" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID actiune" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Vizualizare Proces" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Tranzitie proces" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Conditie" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Provizoriu" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procese" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Tranzitie" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Nume" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Incepere Tranzitii" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "Referitor la:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Note" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Editati Procesul" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "N/A" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Cautati Procesul" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Activ(a)" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Grupuri asociate" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Expresie stari" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Actiune" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Selectati Procesul" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expresie" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Grupuri obligatorii" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Tranzitii de intrare" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tip" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Finalizare Tranzitii" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proces" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Cautati Nod Proces" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Alte conditii" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Intreprinde proces" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Actiuni" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Proprietati" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Tranzitii proces" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Nod tinta" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Tip de nod" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Subfluxuri:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Tranzitii de iesire" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Note:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflux" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Tranzitii" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Metoda obiectului" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Selecteaza" - -#~ msgid "Roles from Workflow" -#~ msgstr "Roluri din flux" - -#~ msgid "Details" -#~ msgstr "Detalii" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Nume invalid de model în definirea acțiunii" - -#~ msgid "State" -#~ msgstr "Stare" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Numele obiectului trebuie să înceapă cu x_ și să nu conțină nici un caracter " -#~ "special !" - -#~ msgid "Roles Required" -#~ msgstr "Roluri necesare" - -#~ msgid "Roles" -#~ msgstr "Roluri" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML invalid pentru arhitectura machetei de afișare !" - -#~ msgid "Extra Information" -#~ msgstr "Informaţii suplimentare" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procese de întreprindere" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Acest modul arată procesele de bază implicate\n" -#~ " in modulele selectate si in ordinea in care ele au\n" -#~ " loc\n" -#~ "\n" -#~ " Notă: Aceasta se aplică modulelor care contin modulename_process_xml\n" -#~ " de exemplu produs/prces/produs_proces_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/ru.po b/addons/process/i18n/ru.po deleted file mode 100644 index e31bdbbd34e..00000000000 --- a/addons/process/i18n/ru.po +++ /dev/null @@ -1,404 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2011-04-06 06:17+0000\n" -"Last-Translator: Stanislav Hanzhin \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Узел процесса" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Если поле \"Активно\" имеет значение \"Ложь\", это позволит скрыть процесс " -"не удаляя его." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Родственное меню" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Кнопки" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Группировать по ..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Тип узла" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Адрес справки" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Запуск потока" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Узлы процесса" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Узлы" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Условия" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Найти переход процесса" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Узел" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Триггер рабочего процесса" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Описание" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Процесс перехода действия" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Объект" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Исходный узел" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Переходы рабочего процесса" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Идентификатор действия" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Переход процесса" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Условие" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Заглушка" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Процессы" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Переход" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Название" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Начало переходов" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Примечания" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Искать процесс" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Активен" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Связанные группы" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Выражение состояний" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Действие" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Выражение" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Требуемые группы" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Входящие переходы" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Тип" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Завершаются переходы" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Процесс" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Другие условия" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Процесс предприятия" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Действия" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Свойства" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Выполнить переходы" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Целевой узел" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Вид узла" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Исходящее перемещение" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Подпроцесс" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Перемещении" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Метод объекта" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Название объекта должно начинаться с x_ и не должно содержать специальных " -#~ "символов !" - -#~ msgid "State" -#~ msgstr "Состояние" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Неправильный XML для просмотра архитектуры!" - -#~ msgid "Extra Information" -#~ msgstr "Доп. информация" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Недопустимое имя модели в определении действия." - -#~ msgid "Details" -#~ msgstr "Детали" - -#~ msgid "Roles" -#~ msgstr "Роли" diff --git a/addons/process/i18n/sk.po b/addons/process/i18n/sk.po deleted file mode 100644 index fb680315292..00000000000 --- a/addons/process/i18n/sk.po +++ /dev/null @@ -1,384 +0,0 @@ -# Slovak translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-12-21 14:21+0000\n" -"Last-Translator: Peter Kohaut \n" -"Language-Team: Slovak \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Uzol procesu" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Ak je aktívne pole nastavené na False, umožní Vám schovať proces bez jeho " -"odtránenia." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Súvisiace menu" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Tlačidlá" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Zoskupiť podľa..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Druh uzla" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL pomocníka" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Začínajúci tok" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Uzly procesu" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Uzly" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Podmienky" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Hľadať prechod procesu" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Uzol" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Spúšťač pracovného toku" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Popis" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Akcie prechodov procesu" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Objekt" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Zdrojový uzol" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Prechody pracovného toku" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "ID akcie" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Prechod procesu" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Podmienka" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Prázdny" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesy" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Prechod" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Meno" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Začínajúce prechody" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Poznámky" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Hľadať proces" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktívny" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Priradené skupiny" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Vyjadruje výraz" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Akcia" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Výraz" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Vyžadované skupiny" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Prichádzajúce prechody" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Typ" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Ukončujúce prechody" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proces" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Hľadať uzol procesu" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Iné podmienky" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Podnikový proces" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Akcie" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Vlastnosti" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Prechody procesu" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Cieľový uzol" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Druh uzla" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Odchádzajúce prechody" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Vnorený tok" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Prechody" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Metóda objektu" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "State" -#~ msgstr "Stav" diff --git a/addons/process/i18n/sl.po b/addons/process/i18n/sl.po deleted file mode 100644 index 0307771e53b..00000000000 --- a/addons/process/i18n/sl.po +++ /dev/null @@ -1,410 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-08-03 08:49+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Vozlišče procesa" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "Tu lahko skrijete proces." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Povezani meni" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Status" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Gumbi" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Združi po ..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Vrsta vozlišča" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL pomoči" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Začetni tok" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Vozlišča procesa" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Vozlišča" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Pogoji" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Iskanje prehodov procesa." - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Vozlišče" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Prožilec delovnega toka" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Opis" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Dejanja prehodov procesa" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Predmet" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Izvorno vozlišče" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Prehodi delovnega toka" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Zadnja sprememba:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Oznaka dejanja" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "Pogled procesa" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Prehod procesa" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Pogoj" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Začasno" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Procesi" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Prehod" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Ime" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Začetna stanja" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "V zvezi:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Opombe" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "Urejanje procesa" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "N/A" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Iskanje procesa" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktivno" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Povezane skupine" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Izraz stanj" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Dejanje" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "Izberi postopek" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Izraz" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Obvezne skupine" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Prihajajočite transakcije" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tip" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Končna stanja" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Procesiraj" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Iskanje vozlišča procesa" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Drugi pogoji" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proces podjetja" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Dejanja" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Lastnosti" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Prehodi procesov" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Ciljno vozlišče" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Vrsta vozlišča" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Pod-procesi" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Izhodni prehodi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Zapiski:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Delni tok" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Prehodi" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Metode predmeta" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Izberi" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Naziv objekta se mora začeti z 'x_' in ne sme vsebovati posebnih znakov." - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Neveljaven XML za arhitekturo pogleda." - -#~ msgid "Roles from Workflow" -#~ msgstr "Vloge iz delovnega toka" - -#~ msgid "State" -#~ msgstr "Stanje" - -#~ msgid "Details" -#~ msgstr "Podrobnosti" - -#~ msgid "Roles" -#~ msgstr "Vloge" - -#~ msgid "Extra Information" -#~ msgstr "Dodatne informacije" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Napačno ime modela v definiciji dejanja." - -#~ msgid "Roles Required" -#~ msgstr "Zahtevane vloge" - -#~ msgid "Enterprise Processes" -#~ msgstr "Procesi podjetja" diff --git a/addons/process/i18n/sq.po b/addons/process/i18n/sq.po deleted file mode 100644 index 495889b2439..00000000000 --- a/addons/process/i18n/sq.po +++ /dev/null @@ -1,379 +0,0 @@ -# Albanian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-08-02 15:04+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Albanian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" diff --git a/addons/process/i18n/sr.po b/addons/process/i18n/sr.po deleted file mode 100644 index c122d698c87..00000000000 --- a/addons/process/i18n/sr.po +++ /dev/null @@ -1,411 +0,0 @@ -# Serbian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-11-04 08:42+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Serbian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Procesni čvor" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Referentni Meni" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Dugmad" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Grupisano po..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Vrsta Cvora" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL za Pomoc" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Startni tok" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Procesna čvorišta" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Čvorišta" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Uslovi" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Pretrazi Proces Tranzicije" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Čvorište" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Okidač TokaPosla" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Opis" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Akcije Procesa Tranzicije" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "objekat" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "pocetno Čvorište" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "TRanzicije TokaPosla" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Sifra Akcije" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Prelazni Proces" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "uslov" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Lažni" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Proces" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Prelaz" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Ime" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Startni Prelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Napomene" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Pretrazi proces" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktivan" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Asocirane Grupe" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Izraz Stanja" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Радња" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Izraz" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Potrebne Grupe" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Dolazece Tranzicije" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tip" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Zavrsni Prelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proces" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Pretrazi Procesni Cvor" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Ostali Uslovi" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proces preduzeca" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Radnje" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Osobine" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Prelazni Proces" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Ciljno čvorište" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Vrsta čvorišta" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Odlazni prelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Podtok" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Prelazi" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Metoda Objekta" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "Roles from Workflow" -#~ msgstr "Uloge iz TokaPosla" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Pogrešno ime modela u definiciji akcije." - -#~ msgid "State" -#~ msgstr "Stanje" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !" - -#~ msgid "Details" -#~ msgstr "Detalji" - -#~ msgid "Roles Required" -#~ msgstr "Neophodne Uloge" - -#~ msgid "Roles" -#~ msgstr "Uloge" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Nevažeći XML za pregled arhitekture" - -#~ msgid "Extra Information" -#~ msgstr "Dodatne INformacije" - -#~ msgid "Enterprise Processes" -#~ msgstr "Preocesi Preduzeca" diff --git a/addons/process/i18n/sr@latin.po b/addons/process/i18n/sr@latin.po deleted file mode 100644 index 35c7424ed56..00000000000 --- a/addons/process/i18n/sr@latin.po +++ /dev/null @@ -1,411 +0,0 @@ -# Serbian latin translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-12-23 15:38+0000\n" -"Last-Translator: Olivier Dony (OpenERP) \n" -"Language-Team: Serbian latin \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Procesni čvor" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Referentni Meni" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Dugmad" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Grupisano po..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Vrsta Cvora" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "URL za Pomoc" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Startni tok" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Procesna čvorišta" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Čvorišta" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Uslovi" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Pretrazi Proces Tranzicije" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Čvorište" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Okidač TokaPosla" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Opis" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Akcije Procesa Tranzicije" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "objekat" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "pocetno Čvorište" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "TRanzicije TokaPosla" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Sifra Akcije" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Prelazni Proces" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "uslov" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Lažni" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Proces" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Prelaz" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Ime" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Startni Prelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Napomene" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Pretrazi proces" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Aktivan" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Asocirane Grupe" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Izraz Stanja" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Радња" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Izraz" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Potrebne Grupe" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Dolazece Tranzicije" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tip" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Zavrsni Prelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Proces" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Pretrazi Procesni Cvor" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Ostali Uslovi" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Proces preduzeca" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Radnje" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Osobine" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Prelazni Proces" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Ciljno čvorište" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Vrsta čvorišta" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Odlazni prelazi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Podtok" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Prelazi" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Metoda Objekta" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Pogrešno ime modela u definiciji akcije." - -#~ msgid "State" -#~ msgstr "Stanje" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Nevažeći XML za pregled arhitekture" - -#~ msgid "Roles from Workflow" -#~ msgstr "Uloge iz TokaPosla" - -#~ msgid "Details" -#~ msgstr "Detalji" - -#~ msgid "Roles Required" -#~ msgstr "Neophodne Uloge" - -#~ msgid "Roles" -#~ msgstr "Uloge" - -#~ msgid "Extra Information" -#~ msgstr "Dodatne INformacije" - -#~ msgid "Enterprise Processes" -#~ msgstr "Preocesi Preduzeca" diff --git a/addons/process/i18n/sv.po b/addons/process/i18n/sv.po deleted file mode 100644 index bba8ff562aa..00000000000 --- a/addons/process/i18n/sv.po +++ /dev/null @@ -1,412 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.14\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-11-22 20:09+0000\n" -"Last-Translator: Olivier Dony (OpenERP) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "Process Node" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Om det aktiva fältet är satt till falskt, kommer det att du kan dölja " -"processen utan att ta bort den." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "Related Menu" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Buttons" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Gruppera på..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "En slags nod" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Help URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Starting Flow" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "Process Nodes" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Nodes" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Conditions" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "Sök processövergångar" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Node" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "Workflow Trigger" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Description" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "Process Transitions Actions" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Object" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Source Node" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "Workflow Transitions" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Action ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "Process Transition" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Condition" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Dummy" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "Processer" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Transition" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Name" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Starting Transitions" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notes" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "Sök process" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Active" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "Tillhörande grupper" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "States Expression" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Action" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Expression" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Obligatoriska grupper" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Inkommande övergångar" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Type" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Ending Transitions" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "Process" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "Sök processnod" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Andra villkor" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Enterprise Process" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Actions" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Attribut" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "Process Transitions" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Target Node" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Kind of Node" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Outgoing Transitions" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Subflow" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Transitions" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "Object Method" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Objektnamnet måste börja med x_ och får inte innehålla några specialtecken!" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Invalid model name in the action definition." - -#~ msgid "Roles from Workflow" -#~ msgstr "Roles from Workflow" - -#~ msgid "State" -#~ msgstr "State" - -#~ msgid "Details" -#~ msgstr "Details" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Invalid XML for View Architecture!" - -#~ msgid "Roles" -#~ msgstr "Roles" - -#~ msgid "Roles Required" -#~ msgstr "Roles Required" - -#~ msgid "Extra Information" -#~ msgstr "Extra Information" - -#~ msgid "Enterprise Processes" -#~ msgstr "Enterprise Processes" diff --git a/addons/process/i18n/tlh.po b/addons/process/i18n/tlh.po deleted file mode 100644 index dcd3f3909d7..00000000000 --- a/addons/process/i18n/tlh.po +++ /dev/null @@ -1,378 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-02-04 11:56+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" diff --git a/addons/process/i18n/tr.po b/addons/process/i18n/tr.po deleted file mode 100644 index 2cc2de5b4ce..00000000000 --- a/addons/process/i18n/tr.po +++ /dev/null @@ -1,413 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-09-09 07:21+0000\n" -"Last-Translator: Fabien (Open ERP) \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "İşlem Düğümü" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" -"Aktif alan Yanlış olarak ayarlanırsa, bu özellik işlemi kaldırmadan " -"gizlemenize olanak sağlayacaktır." - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "İlgili Menü" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "Durum" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "Düğmeler" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Gruplandır..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "Düğüm Türü" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "Yardım URL si" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "Akış Başlatma" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "İşlem Düğümleri" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "Düğümler" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "Koşullar" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "İşlem Geçişi Arama" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "Düğüm" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "İş Akışı Tetikleyici" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "Açıklama" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "İşlem Geçişi Eylemleri" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Nesne" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "Kaynak Düğüm" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "İş Akışı Geçişleri" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "Son değiştiren:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "Eylem ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "İşlem Görünümü" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "İşlem Geçişi" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "Koşul" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "Sahte" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "İşlemler" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "Geçiş" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "Adı" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "Geçişlerin Başlatılması" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "İlgili:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "Notlar" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "İşlemi Düzenle" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "Yok" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "İşlem Ara" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "Etkin" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "İlişkili Gruplar" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "Durum Terimleri" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "Eylem" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "İşlem Seç" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "Terim" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "Gerekli Gruplar" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "Gelen Geçişler" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "Tür" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "Sonlanan Geçişler" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "İşlem" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "İşlem Düğümü Ara" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "Diğer Koşullar" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "Kurumsal İşlem" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "Eylemler" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "Özellikler" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "İşlem Geçişleri" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "Hedef Düğüm" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "Düğüm Türü" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "Alt akışlar" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "Giden Geçişler" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "Notlar:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "Alt akış" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "Geçişler" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "İtiraz Yöntemi" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "Seç" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Görüntüleme mimarisi için Geçersiz XML" - -#~ msgid "State" -#~ msgstr "Durum" - -#~ msgid "Roles" -#~ msgstr "Roller" - -#~ msgid "Extra Information" -#~ msgstr "Extra Bilgi" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Bu modül seçilen modüllerde ve meydana\n" -#~ " geldiği dizide kapsanan temel işlemleri\n" -#~ " gösterir\n" -#~ "\n" -#~ " Not: Bu, modulename_process_xml içeren modüller için geçerlidir\n" -#~ " örn. product/process/product_process_xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/uk.po b/addons/process/i18n/uk.po deleted file mode 100644 index f6a31895e3f..00000000000 --- a/addons/process/i18n/uk.po +++ /dev/null @@ -1,386 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-09-08 16:49+0000\n" -"Last-Translator: Eugene Babiy \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Назва об'єкту має починатися з x_ і не містити ніяких спеціальних символів!" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Неправильний XML для Архітектури Вигляду!" diff --git a/addons/process/i18n/vi.po b/addons/process/i18n/vi.po deleted file mode 100644 index 43de5607dc2..00000000000 --- a/addons/process/i18n/vi.po +++ /dev/null @@ -1,379 +0,0 @@ -# Vietnamese translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# Phong Nguyen , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2010-12-16 17:37+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Vietnamese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "Nhóm theo..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "Đối tượng" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" diff --git a/addons/process/i18n/zh_CN.po b/addons/process/i18n/zh_CN.po deleted file mode 100644 index 059a9e67640..00000000000 --- a/addons/process/i18n/zh_CN.po +++ /dev/null @@ -1,428 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-11-28 09:53+0000\n" -"Last-Translator: 盈通 ccdos \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "流程节点" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "如果活动字段设为 False 将隐藏流程而无需删除。" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "相关菜单" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "状态" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "按钮" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "分组..." - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "节点类型" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "帮助URL" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "启动流程" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "流程节点" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "节点" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "条件" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "搜索节点迁移" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "节点" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "触发工作流" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "说明" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "节点迁移操作" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "对象" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "源节点" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "工作流迁移" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "最后修改者:" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "动作ID" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "业务流程视图" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "节点迁移" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "条件" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "哑元" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "节点" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "迁移" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "名称" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "启动迁移" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "相关的:" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "备注" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "编辑业务流程" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "无" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "搜索节点" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "生效" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "关联的用户组" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "状态表达式" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "动作" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "选择业务流程" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "表达" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "请求的用户组" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "迁移入口" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "类型" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "结束迁移" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "节点" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "搜索流程节点" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "其他条件" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "企业流程" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "动作" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "属性" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "处理迁移" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "目标节点" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "节点类型" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "子工作流:" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "迁移出口" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "备注:" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "子工作流" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "迁移" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "对象方法" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "选择" - -#~ msgid "State" -#~ msgstr "状态" - -#~ msgid "Details" -#~ msgstr "详情" - -#~ msgid "Extra Information" -#~ msgstr "额外信息" - -#~ msgid "Enterprise Processes" -#~ msgstr "企业流程" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "对象名必须要以X_开头并且不能含有特殊字符!" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "在这动作定义中有无效的模块名" - -#~ msgid "Roles from Workflow" -#~ msgstr "工作流角色" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "无效XML视图结构!" - -#~ msgid "Roles" -#~ msgstr "角色" - -#~ msgid "Roles Required" -#~ msgstr "角色要求" - -#~ msgid "" -#~ "\n" -#~ " This module shows the basic processes involved\n" -#~ " in the selected modules and in the sequence they\n" -#~ " occur\n" -#~ "\n" -#~ " Note: This applies to the modules containing modulename_process_xml\n" -#~ " for e.g product/process/product_process_xml\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " 此模块显示指定模块的基本流程和工作顺序。\n" -#~ "\n" -#~ "注意:这些信息来自对应模块的 modulename_process.xml文件\n" -#~ "例如 product/process/product_process.xml\n" -#~ "\n" -#~ " " diff --git a/addons/process/i18n/zh_TW.po b/addons/process/i18n/zh_TW.po deleted file mode 100644 index 41a3938ac0d..00000000000 --- a/addons/process/i18n/zh_TW.po +++ /dev/null @@ -1,378 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * process -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2009-02-04 11:55+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: process -#: model:ir.model,name:process.model_process_node -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Node" -msgstr "" - -#. module: process -#: help:process.process,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the process " -"without removing it." -msgstr "" - -#. module: process -#: field:process.node,menu_id:0 -msgid "Related Menu" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -msgid "Status" -msgstr "" - -#. module: process -#: field:process.transition,action_ids:0 -msgid "Buttons" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Group By..." -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Kind Of Node" -msgstr "" - -#. module: process -#: field:process.node,help_url:0 -msgid "Help URL" -msgstr "" - -#. module: process -#: field:process.node,flow_start:0 -msgid "Starting Flow" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_node_form -#: model:ir.ui.menu,name:process.menu_process_node_form -#: view:process.node:0 -#: view:process.process:0 -msgid "Process Nodes" -msgstr "" - -#. module: process -#: view:process.process:0 -#: field:process.process,node_ids:0 -msgid "Nodes" -msgstr "" - -#. module: process -#: field:process.node,condition_ids:0 -#: view:process.process:0 -msgid "Conditions" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Search Process Transition" -msgstr "" - -#. module: process -#: field:process.condition,node_id:0 -msgid "Node" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Workflow Trigger" -msgstr "" - -#. module: process -#: field:process.transition,note:0 -msgid "Description" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition_action -msgid "Process Transitions Actions" -msgstr "" - -#. module: process -#: field:process.condition,model_id:0 -#: view:process.node:0 -#: field:process.node,model_id:0 -#: view:process.process:0 -#: field:process.process,model_id:0 -msgid "Object" -msgstr "" - -#. module: process -#: field:process.transition,source_node_id:0 -msgid "Source Node" -msgstr "" - -#. module: process -#: view:process.transition:0 -#: field:process.transition,transition_ids:0 -msgid "Workflow Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "Last modified by:" -msgstr "" - -#. module: process -#: field:process.transition.action,action:0 -msgid "Action ID" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:7 -#, python-format -msgid "Process View" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_transition -#: view:process.transition:0 -msgid "Process Transition" -msgstr "" - -#. module: process -#: model:ir.model,name:process.model_process_condition -msgid "Condition" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Dummy" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_form -#: model:ir.ui.menu,name:process.menu_process_form -msgid "Processes" -msgstr "" - -#. module: process -#: field:process.transition.action,transition_id:0 -msgid "Transition" -msgstr "" - -#. module: process -#: field:process.condition,name:0 -#: field:process.node,name:0 -#: field:process.process,name:0 -#: field:process.transition,name:0 -#: field:process.transition.action,name:0 -msgid "Name" -msgstr "" - -#. module: process -#: field:process.node,transition_in:0 -msgid "Starting Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:54 -#, python-format -msgid "Related:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: field:process.node,note:0 -#: view:process.process:0 -#: field:process.process,note:0 -#: view:process.transition:0 -msgid "Notes" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:88 -#, python-format -msgid "Edit Process" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:39 -#, python-format -msgid "N/A" -msgstr "" - -#. module: process -#: view:process.process:0 -msgid "Search Process" -msgstr "" - -#. module: process -#: field:process.process,active:0 -msgid "Active" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Associated Groups" -msgstr "" - -#. module: process -#: field:process.node,model_states:0 -msgid "States Expression" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Action" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:67 -#, python-format -msgid "Select Process" -msgstr "" - -#. module: process -#: field:process.condition,model_states:0 -msgid "Expression" -msgstr "" - -#. module: process -#: field:process.transition,group_ids:0 -msgid "Required Groups" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Incoming Transitions" -msgstr "" - -#. module: process -#: field:process.transition.action,state:0 -msgid "Type" -msgstr "" - -#. module: process -#: field:process.node,transition_out:0 -msgid "Ending Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/js/process.js:243 -#: code:addons/process/static/src/xml/process.xml:33 -#: model:ir.model,name:process.model_process_process -#: field:process.node,process_id:0 -#: view:process.process:0 -#, python-format -msgid "Process" -msgstr "" - -#. module: process -#: view:process.node:0 -msgid "Search ProcessNode" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Other Conditions" -msgstr "" - -#. module: process -#: model:ir.ui.menu,name:process.menu_process -msgid "Enterprise Process" -msgstr "" - -#. module: process -#: view:process.transition:0 -msgid "Actions" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Properties" -msgstr "" - -#. module: process -#: model:ir.actions.act_window,name:process.action_process_transition_form -#: model:ir.ui.menu,name:process.menu_process_transition_form -msgid "Process Transitions" -msgstr "" - -#. module: process -#: field:process.transition,target_node_id:0 -msgid "Target Node" -msgstr "" - -#. module: process -#: field:process.node,kind:0 -msgid "Kind of Node" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:42 -#, python-format -msgid "Subflows:" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Outgoing Transitions" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:36 -#, python-format -msgid "Notes:" -msgstr "" - -#. module: process -#: selection:process.node,kind:0 -#: field:process.node,subflow_id:0 -msgid "Subflow" -msgstr "" - -#. module: process -#: view:process.node:0 -#: view:process.process:0 -msgid "Transitions" -msgstr "" - -#. module: process -#: selection:process.transition.action,state:0 -msgid "Object Method" -msgstr "" - -#. module: process -#. openerp-web -#: code:addons/process/static/src/xml/process.xml:77 -#, python-format -msgid "Select" -msgstr "" diff --git a/addons/process/process.py b/addons/process/process.py deleted file mode 100644 index d6a72148fa6..00000000000 --- a/addons/process/process.py +++ /dev/null @@ -1,381 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp import tools -from openerp.osv import fields, osv - -class Env(dict): - - def __init__(self, obj, user): - self.__obj = obj - self.__usr = user - - def __getitem__(self, name): - if name in ('__obj', '__user'): - return super(Env, self).__getitem__(name) - if name == 'user': - return self.__user - if name == 'object': - return self.__obj - return self.__obj[name] - -class process_process(osv.osv): - _name = "process.process" - _description = "Process" - _columns = { - 'name': fields.char('Name', size=30,required=True, translate=True), - 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the process without removing it."), - 'model_id': fields.many2one('ir.model', 'Object', ondelete='set null'), - 'note': fields.text('Notes', translate=True), - 'node_ids': fields.one2many('process.node', 'process_id', 'Nodes') - } - _defaults = { - 'active' : lambda *a: True, - } - - def search_by_model(self, cr, uid, res_model, context=None): - model_ids = (res_model or None) and self.pool['ir.model'].search(cr, uid, [('model', '=', res_model)]) - - domain = (model_ids or []) and [('model_id', 'in', model_ids)] - result = [] - - # search all processes - res = self.pool['process.process'].search(cr, uid, domain) - if res: - res = self.pool['process.process'].browse(cr, uid, res, context=context) - for process in res: - result.append((process.id, process.name)) - return result - - # else search process nodes - res = self.pool['process.node'].search(cr, uid, domain) - if res: - res = self.pool['process.node'].browse(cr, uid, res, context=context) - for node in res: - if (node.process_id.id, node.process_id.name) not in result: - result.append((node.process_id.id, node.process_id.name)) - - return result - - def graph_get(self, cr, uid, id, res_model, res_id, scale, context=None): - - - process = self.pool['process.process'].browse(cr, uid, id, context=context) - - name = process.name - resource = False - state = 'N/A' - - expr_context = {} - states = {} - perm = False - - if res_model: - states = dict(self.pool[res_model].fields_get(cr, uid, context=context).get('state', {}).get('selection', {})) - - if res_id: - current_object = self.pool[res_model].browse(cr, uid, res_id, context=context) - current_user = self.pool['res.users'].browse(cr, uid, uid, context=context) - expr_context = Env(current_object, current_user) - resource = current_object.name - if 'state' in current_object: - state = states.get(current_object.state, 'N/A') - perm = self.pool[res_model].perm_read(cr, uid, [res_id], context=context)[0] - - notes = process.note or "N/A" - nodes = {} - start = [] - transitions = {} - - for node in process.node_ids: - data = {} - data['name'] = node.name - data['model'] = (node.model_id or None) and node.model_id.model - data['kind'] = node.kind - data['subflow'] = (node.subflow_id or False) and [node.subflow_id.id, node.subflow_id.name] - data['notes'] = node.note - data['active'] = False - data['gray'] = False - data['url'] = node.help_url - data['model_states'] = node.model_states - - # get assosiated workflow - if data['model']: - wkf_ids = self.pool['workflow'].search(cr, uid, [('osv', '=', data['model'])]) - data['workflow'] = (wkf_ids or False) and wkf_ids[0] - - if 'directory_id' in node and node.directory_id: - data['directory_id'] = node.directory_id.id - data['directory'] = self.pool['document.directory'].get_resource_path(cr, uid, data['directory_id'], data['model'], False) - - if node.menu_id: - data['menu'] = {'name': node.menu_id.complete_name, 'id': node.menu_id.id} - - try: - gray = True - for cond in node.condition_ids: - if cond.model_id and cond.model_id.model == res_model: - gray = gray and eval(cond.model_states, expr_context) - data['gray'] = not gray - except: - pass - - if not data['gray']: - if node.model_id and node.model_id.model == res_model: - try: - data['active'] = eval(node.model_states, expr_context) - except Exception: - pass - - nodes[node.id] = data - if node.flow_start: - start.append(node.id) - - for tr in node.transition_out: - data = {} - data['name'] = tr.name - data['source'] = tr.source_node_id.id - data['target'] = tr.target_node_id.id - data['notes'] = tr.note - data['buttons'] = buttons = [] - for b in tr.action_ids: - button = {} - button['name'] = b.name - button['state'] = b.state - button['action'] = b.action - buttons.append(button) - data['groups'] = groups = [] - for r in tr.transition_ids: - if r.group_id: - groups.append({'name': r.group_id.name}) - for r in tr.group_ids: - groups.append({'name': r.name}) - transitions[tr.id] = data - - # now populate resource information - def update_relatives(nid, ref_id, ref_model): - relatives = [] - - for dummy, tr in transitions.items(): - if tr['source'] == nid: - relatives.append(tr['target']) - if tr['target'] == nid: - relatives.append(tr['source']) - - if not ref_id: - nodes[nid]['res'] = False - return - - nodes[nid]['res'] = resource = {'id': ref_id, 'model': ref_model} - - refobj = self.pool[ref_model].browse(cr, uid, ref_id, context=context) - fields = self.pool[ref_model].fields_get(cr, uid, context=context) - - # check for directory_id from inherited from document module - if nodes[nid].get('directory_id', False): - resource['directory'] = self.pool['document.directory'].get_resource_path(cr, uid, nodes[nid]['directory_id'], ref_model, ref_id) - - resource['name'] = self.pool[ref_model].name_get(cr, uid, [ref_id], context=context)[0][1] - resource['perm'] = self.pool[ref_model].perm_read(cr, uid, [ref_id], context=context)[0] - - ref_expr_context = Env(refobj, current_user) - try: - if not nodes[nid]['gray']: - nodes[nid]['active'] = eval(nodes[nid]['model_states'], ref_expr_context) - except: - pass - for r in relatives: - node = nodes[r] - if 'res' not in node: - for n, f in fields.items(): - if node['model'] == ref_model: - update_relatives(r, ref_id, ref_model) - - elif f.get('relation') == node['model']: - rel = refobj[n] - if rel and isinstance(rel, list) : - rel = rel[0] - try: # XXX: rel has been reported as string (check it) - _id = (rel or False) and rel.id - _model = node['model'] - update_relatives(r, _id, _model) - except: - pass - - if res_id: - for nid, node in nodes.items(): - if not node['gray'] and (node['active'] or node['model'] == res_model): - update_relatives(nid, res_id, res_model) - break - - # calculate graph layout - g = tools.graph(nodes.keys(), map(lambda x: (x['source'], x['target']), transitions.values())) - g.process(start) - g.scale(*scale) #g.scale(100, 100, 180, 120) - graph = g.result_get() - - # fix the height problem - miny = -1 - for k,v in nodes.items(): - x = graph[k]['x'] - y = graph[k]['y'] - if miny == -1: - miny = y - miny = min(y, miny) - v['x'] = x - v['y'] = y - - for k, v in nodes.items(): - y = v['y'] - v['y'] = min(y - miny + 10, y) - - nodes = dict([str(n_key), n_val] for n_key, n_val in nodes.iteritems()) - transitions = dict([str(t_key), t_val] for t_key, t_val in transitions.iteritems()) - return dict(name=name, resource=resource, state=state, perm=perm, notes=notes, nodes=nodes, transitions=transitions) - - def copy(self, cr, uid, id, default=None, context=None): - """ Deep copy the entire process. - """ - - if not default: - default = {} - - process = self.pool['process.process'].browse(cr, uid, id, context=context) - - nodes = {} - transitions = {} - - # first copy all nodes and and map the new nodes with original for later use in transitions - for node in process.node_ids: - for t in node.transition_in: - tr = transitions.setdefault(t.id, {}) - tr['target'] = node.id - for t in node.transition_out: - tr = transitions.setdefault(t.id, {}) - tr['source'] = node.id - nodes[node.id] = self.pool['process.node'].copy(cr, uid, node.id, context=context) - - # then copy transitions with new nodes - for tid, tr in transitions.items(): - vals = { - 'source_node_id': nodes[tr['source']], - 'target_node_id': nodes[tr['target']] - } - tr = self.pool['process.transition'].copy(cr, uid, tid, default=vals, context=context) - - # and finally copy the process itself with new nodes - default.update({ - 'active': True, - 'node_ids': [(6, 0, nodes.values())] - }) - return super(process_process, self).copy(cr, uid, id, default, context) - - -class process_node(osv.osv): - _name = 'process.node' - _description ='Process Node' - _columns = { - 'name': fields.char('Name', size=30,required=True, translate=True), - 'process_id': fields.many2one('process.process', 'Process', required=True, ondelete='cascade'), - 'kind': fields.selection([('state','Status'), ('subflow','Subflow')], 'Kind of Node', required=True), - 'menu_id': fields.many2one('ir.ui.menu', 'Related Menu'), - 'note': fields.text('Notes', translate=True), - 'model_id': fields.many2one('ir.model', 'Object', ondelete='set null'), - 'model_states': fields.char('States Expression', size=128), - 'subflow_id': fields.many2one('process.process', 'Subflow', ondelete='set null'), - 'flow_start': fields.boolean('Starting Flow'), - 'transition_in': fields.one2many('process.transition', 'target_node_id', 'Starting Transitions'), - 'transition_out': fields.one2many('process.transition', 'source_node_id', 'Ending Transitions'), - 'condition_ids': fields.one2many('process.condition', 'node_id', 'Conditions'), - 'help_url': fields.char('Help URL', size=255) - } - _defaults = { - 'kind': lambda *args: 'state', - 'model_states': lambda *args: False, - 'flow_start': lambda *args: False, - } - - def copy_data(self, cr, uid, id, default=None, context=None): - if not default: - default = {} - default.update({ - 'transition_in': [], - 'transition_out': [] - }) - return super(process_node, self).copy_data(cr, uid, id, default, context=context) - - -class process_node_condition(osv.osv): - _name = 'process.condition' - _description = 'Condition' - _columns = { - 'name': fields.char('Name', size=30, required=True), - 'node_id': fields.many2one('process.node', 'Node', required=True, ondelete='cascade'), - 'model_id': fields.many2one('ir.model', 'Object', ondelete='set null'), - 'model_states': fields.char('Expression', required=True, size=128) - } - -class process_transition(osv.osv): - _name = 'process.transition' - _description ='Process Transition' - _columns = { - 'name': fields.char('Name', size=32, required=True, translate=True), - 'source_node_id': fields.many2one('process.node', 'Source Node', required=True, ondelete='cascade'), - 'target_node_id': fields.many2one('process.node', 'Target Node', required=True, ondelete='cascade'), - 'action_ids': fields.one2many('process.transition.action', 'transition_id', 'Buttons'), - 'transition_ids': fields.many2many('workflow.transition', 'process_transition_ids', 'ptr_id', 'wtr_id', 'Workflow Transitions'), - 'group_ids': fields.many2many('res.groups', 'process_transition_group_rel', 'tid', 'rid', string='Required Groups'), - 'note': fields.text('Description', translate=True), - } - -class process_transition_action(osv.osv): - _name = 'process.transition.action' - _description ='Process Transitions Actions' - _columns = { - 'name': fields.char('Name', size=32, required=True, translate=True), - 'state': fields.selection([('dummy','Dummy'), - ('object','Object Method'), - ('workflow','Workflow Trigger'), - ('action','Action')], 'Type', required=True), - 'action': fields.char('Action ID', size=64, states={ - 'dummy':[('readonly',1)], - 'object':[('required',1)], - 'workflow':[('required',1)], - 'action':[('required',1)], - },), - 'transition_id': fields.many2one('process.transition', 'Transition', required=True, ondelete='cascade') - } - _defaults = { - 'state': lambda *args: 'dummy', - } - - def copy_data(self, cr, uid, id, default=None, context=None): - if not default: - default = {} - - state = self.pool['process.transition.action'].browse(cr, uid, id, context=context).state - if state: - default['state'] = state - - return super(process_transition_action, self).copy_data(cr, uid, id, default, context) - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/process/process_demo.xml b/addons/process/process_demo.xml deleted file mode 100644 index c1c4b5536c1..00000000000 --- a/addons/process/process_demo.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - Sales Workflow - Sales flow for services companies. - - - - - - Quotation - Quotations are sales orders in draft mode - - - state - object.state == 'draft' - - - - - Sales Order - Manages the delivery in invoicing process - - - state - object.state == 'manual' - - - - - Invoice - In case you invoiced on Sales Order - - - state - - - - - - Tasks - In case you sale services on order - - - subflow - - - - - - Picking List - The workers pack the requested items - - - state - - - - - - Delivery Order - The transporter take the box and deliver it - - - state - - - - - - Invoice - In case you invoice based on deliveries - - - subflow - - - - - - - - Invoice on order - - object.order_policy != 'picking' - - - - - Invoice on delivery - - object.order_policy == 'picking' - - - - - - - Confirm Quotation - - - - - - Picking - - - - - - Invoice on order - - - - - - Create Tasks - - - - - - Deliver Goods - - - - - - Invoice or delivery - - - - - - - - Confirm - workflow - order_confirm - - - - - Cancel - workflow - cancel - - - - - - diff --git a/addons/process/process_view.xml b/addons/process/process_view.xml deleted file mode 100644 index 7e0f9c25f47..00000000000 --- a/addons/process/process_view.xml +++ /dev/null @@ -1,323 +0,0 @@ - - - - - - - - - process.process.form - process.process - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - - process.process.tree - process.process - - - - - - - - - - - process.process.filter - process.process - - - - - - - - - - - - - Processes - process.process - form - tree,form - - - - - - - process.node.tree - process.node - - - - - - - - - - - - - process.node.form - process.node - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - process.node.filter - process.node - - - - - - - - - - - - - - - Process Nodes - process.node - form - tree,form - - - - - - - - - process.transition.tree - process.transition - - - - - - - - - - - process.transition.form - process.transition - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - - process.transition.filter - process.transition - - - - - - - - - - - - Process Transitions - process.transition - form - tree,form - - - - -
-
diff --git a/addons/process/security/ir.model.access.csv b/addons/process/security/ir.model.access.csv deleted file mode 100644 index 84e3b5ea0e7..00000000000 --- a/addons/process/security/ir.model.access.csv +++ /dev/null @@ -1,6 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_process_process,process.process,model_process_process,base.group_user,1,0,0,0 -access_process_node,process.node,model_process_node,base.group_user,1,0,0,0 -access_process_transition,process.transition,model_process_transition,base.group_user,1,0,0,0 -access_process_transition_action,process.transition.action,model_process_transition_action,base.group_user,1,0,0,0 -access_process_condition,process.condition,model_process_condition,base.group_user,1,0,0,0 diff --git a/addons/process/static/src/css/process.css b/addons/process/static/src/css/process.css deleted file mode 100644 index 5f438622653..00000000000 --- a/addons/process/static/src/css/process.css +++ /dev/null @@ -1,70 +0,0 @@ - -a.cta-a { - float: left; - padding: 5px 10px; - border: 1px solid #ccc; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - background: #eeeded url(/process/static/src/img/cta-a.gif) repeat-x; - box-shadow: 0 1px 0 #fff; - -moz-box-shadow: 0 1px 0 #fff; - -webkit-box-shadow: 0 1px 0 #fff; - color: #8c8c8c; - font-size: 0.9em; - text-transform: uppercase; - font-weight: bold; - text-shadow: #fff 0 1px 0; - margin: 2px; -} - -a.cta-a span { - float: left; - padding: 7px 0 5px 5px; - background-position: 0 50%; - background-repeat: no-repeat; - cursor: pointer; -} - -a.cta-a strong { - display: block; - color: #393939; -} -.process-links { - padding: 5px 10px; - text-align: center; - display: table; - margin: auto; -} -.process-links a.cta-a { - display: table-cell; -} -.process_canvas{ - border: 1px solid #aaa; - background-color:#FFF; -} -.process_canvas svg{ - height:500px; - padding:15px; -} -.oe_process { - height: 20px; - margin-top:3px; - padding: 0; - width: 24px; - cursor: pointer; - display: block; - background: url(/web/static/src/img/iconset-a-help.png) no-repeat center center; - float: left; -} - -.process-help-text { - float: left; - padding:5px 10px; - min-height:56px; - font-size: 120%; -} - -td.process_fields,button.toggle_fields span:last-child { - display: none; -} diff --git a/addons/process/static/src/img/button-a-a.png b/addons/process/static/src/img/button-a-a.png deleted file mode 100644 index bd046bbbef7da60895536a7a18323abbbe21e7fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6595 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 AIsgCw diff --git a/addons/process/static/src/img/cta-a.gif b/addons/process/static/src/img/cta-a.gif deleted file mode 100644 index daa561e29f58d52f0806ada27a6ad25c1e30f24a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmZ?wbhEHbWMt4`*v!E2_3PJ0dKfZtW z?lTa4`t;??mk;mXzkB;u@h1xd28j~(|&5Rgd;v{>OR;HAys JFXPT&4FG9+IZXfn diff --git a/addons/process/static/src/img/iconset-a-help.gif b/addons/process/static/src/img/iconset-a-help.gif deleted file mode 100644 index 5400acec57bd30ea50c05765808d2d20684a6f90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 379 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 diff --git a/addons/process/static/src/img/node-gray.png b/addons/process/static/src/img/node-gray.png deleted file mode 100644 index 972013540cf00d5e379f9c9136b11499ab2e93f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3128 zcmX|D2|SeB`+pI}7P*o=WM3NlzGpC&$j>s#-WXv_vZZP4+r=m$x|YV4E!+GQ&DgRu zWUM7Z2xUU5B}T4>5@+w~OI^n86<|&m<+vOa5N^OB|^cn@Xz17kRerH4)e}VFM)jk$p%TsVl z7^{v$M5Guqy%$8qk+$gbVY}UG%z{}A={iS7_Cp*|$lBiiAtc$X z$*tZSZwg_c2&_P2zdW);vH)jOuWaw`mX($=*xA`Vf!5X3!0`_r_>Mj`{9MEYTrJXh z4l^@`s4a1SQqbFQ?Yk5BMCe2Tkr>{BM+K;eBRSKpS<|2q-8h0N(TGJG#0S4C^tGckjx2 zWK{;p$;%TJGo0Uwp6y?{ev>}m;Z$7RWPbF63eB32Jw28LZecK<4n7Z!Pkt5)8ER-u zOuc)TZG6Xfs=b~Blv&sN#@8m5VLRJkylpcn%#(`_R&U- z4mqc%r)`8j4GchXt)v{a_CJ#&)|GN*XRoB5RSs}4B5*H&b1msbstybex*fHkrzh{Q z;~C3e^IvL8PfwQ@9lqUlyxYmTGpxOU&S3qz870IN|2i$rg%EZYp1tw`{*=3DYcW$; zdxa5Tirb=%a&#?l1CTR}I#K_K_bmRCa32DH*dv(u7CCeIWov6c6JuO&DtE66C%ANP zl~)y}Y!W<~7EpL}baalixe|XyY(s6WTc|yoLFE>O;NXpHg@}Xg)vr^YA0{U+k6Pp=l$FTIv8VqQfhi?27D|A(+FyB=4w%;2 zCpd8)$e)LTS^dlL6Jui~?j2aon5K@7;+?&{h5R@cR@Q5dj%pFPt6Te5qYR!>Iy;SS z6{NgPOg9ma`~Drh`6+Cam?LX1DJ#p$anIm|yAR$pTk0dah0Vr4KR^F)De(&-_GJH3 zK6R(cL|kRVw^yYp@Pk6<{XNWEm6)*47rbx`8E@2JV@_{WI4341R3ca3Ju^PUb;c(3 zE+%=2h>F4@A|lMLHMo-)AND6ce*OA2@bT_KbQLQjgYNhRU!s75q9QX5M}e1u3!0pC z`9|*i97qyz57a9B!$@67R5V#KDT{vYsIJ*xP*Ct=>uoP<@@kH~QGA&kqASJ__;jBa zCA~GM*a!fhFxqZ6ZsgOEyP-Xp*5x$Wr{ctw!I_sq@H*C*k}JNC5K{c6|6&>p6lXwG zu1Am?+Wg%_WvOZj-QKxKvN|_3A~F&~IEwolL+m^`2zu|Rr0M?mix)2hIDyEG8NXmO zdIB}e>)_&&0xHkTI_ii}^1WiFU0hvTqYM1N?VN6XD}U&6{=$Xcz?WBb^B+HEZk|RX z{r#yV63M1h5Lr_@J2u9HS?J^%*^Xt3DY`TyI!2R*a z>I@LFG9-vZp(=6r{j>^wK(6<2K;<@L@+t$OJv=if zappC2fkL5{Wyw-Cf4=eUp1s`_?N|^@OIe^3B941nf@fX&6oe=OM=_@i(&MNHY&x{& z^lJ_dad~SU%ZIh9m8HRN zZf-(pkDa&)QsP7_CEkoaNl;|R{VRUA82?ZCOR)Wa7v2mhgcOmtzTQ0zB2ltVzEKd& zfWcx9(h->k7bq0UWvlY?athiPRz7~dF>irxDaE^=F)=^i8QlWa($uW~S^QUheZ56= zbjJ@k8KDWG6gxzv-tZ?PDm5{W ztjxtkMDTtn)F4&*Hl1###D66$Og$wfCEXLZ34?}AtqgVi;`-p=+Nbt=>Y<^bD);Cw zYHJ6mR3@4T3>#{MjzrA7k#czMSS`4rQ&<#h*OFx%k{i&0dRbo zoPdwML=E)Ji`4~n&#=9C@G;AI8;-@{j%q+7JRUDDlsVtrCY=;FwGO*|8|sN&efBYh zOW4U{O15Raw7#B;iHT_JKmujE#@S*VQQ<&?~auCh>s#C}>z`wtOJ6 zuPk`YN@+lh10z&MzpuL*WP;k);7J{+d)iN*oG|LI-BWFh|c4XK&Z`@EA!hJq*AO0 z%88Cyeu6=hb@6YJ2aSAZQ}2SIykfzibX_mp!x9cpGa|IQs8Af7ota_Rc-WIoYKFvc zNjwgG%$|)?4Iv{NdxN2m{$x|1Mz=5zqc^6TS;3%vNl#z@9D8y|qtQ&FWJv9HAs-AJ zK4BV7S^MzZr+Hc&?$~ppdXp2cdaFQ2Im6#wKl1zQ2cr7bgV3Actd^FndU|?eb90&P z?FM{&d_y{r^3T)J=-; zZST{Q<5zc>xQ)XtS6_^`w_Y5HV$~K48N5!?ZFStB^jE5;*F4PJx zlXB==xBVX67fvV|J|=Aj8iasY8gFhl(2x!;IXN&xF1;$b}hVipks)&_U7FI)6L6H`B@OA?>yhffDD^V%JQ$gt z8Okgr_4077=ZPsd{B+es$Za*Yx7 zlND|kujifPWRY&1qN=N@eYCzu7ugi<_T~u=4h|u?Ulaq+L@s1%wkt3wXiFRYam>-( zy@-&LlZdpHq^c$H3=9q7&-3wBgQ?y&JBiO9^w}UCLfYnzi3l`}3hnxIk**+3E@^3* ztPPl1__4JmY-4SmRanSTILzYgENhXVKCk8MT>J{gUN}to9;yHC{d*rGqD0R62)mYJ zs8imaw#R2tehr_Q*}WRxvk`e^YKMCmwY7Q4@&+);I+~vy_Sgal&Y~0CN6P|6ZyOOV46ef@Y`U72tSAsVm+|pR9Zfv}} cus(CjM5x(}F*mD^0CRc(4!dgJVCJ3hKQU3-`v3p{ diff --git a/addons/process/static/src/img/node-subflow-gray.png b/addons/process/static/src/img/node-subflow-gray.png deleted file mode 100644 index ffafe1bd681f01d622bcb371dea2488a7d724868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6837 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 vf#lFJ4h(k_sVGbwBS{SWRRD=n3q?3 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 1) { - self.process_selection = process; - } else { - self.process_id = process[0][0], - self.process_title = process[0][1]; - } - } - return $.Deferred().resolve(); - }).then(function() { - var def = $.Deferred(); - if(self.process_id) { - $.when(self.process_graph_get()).done(function(res) { - self.process_notes = res.notes; - self.process_title = res.name; - self.process_subflows = _(res.nodes).chain() - .filter(function (node) { return node['subflow'] !== false; }) - .uniq(false, function (node) { return node['subflow'][0]; }).value(); - self.process_related = res.related; - def.resolve(res); - }); - } else def.resolve(); - return def.promise(); - }).done(function(res) { - $.when(self.process_render_view()).done(function() { - if(res) { - self.process_draw_graph(res); - } - }); - }); - }, - process_graph_get: function() { - var self = this; - var def = $.Deferred(); - this.process_id = parseInt(this.process_id, 10); - this.process_dataset - .call("graph_get",[self.process_id, self.model || self.dataset.model, self.record_id, [80,80,150,100], self.session.user_context]) - .done(function(res) { - self.process_dataset - .call("search_by_model",[self.model || self.dataset.model, self.session.user_context]) - .done( - function(r) { - res['related'] = r; - def.resolve(res); - }); - }); - return def.promise(); - }, - process_get_object : function() { - var self = this, - def = $.Deferred(); - if(this.process_id) - return def.resolve().promise(); - this.process_dataset = new instance.web.DataSet(self, "process.process", self.session.user_context); - this.process_dataset - .call("search_by_model", [self.process_model,self.session.user_context]) - .done(function(res) { - if (!res.length) { - self.process_model = false; - self.process_get_object().done(def.resolve); - } - else { - def.resolve(res); - } - }) - .fail(def.reject); - return def.promise(); - }, - process_render_view : function() { - var self = this; - this.$el.html(QWeb.render("process.ProcessView", this)); - this.$el.addClass('oe_view_process').css({'background-color':'#F0EEEE'}); - this.$el.find('#edit_process').click(function() { - self.process_edit_view(); - }); - var $parent = this.getParent().$el; - $parent.find('#change_process').click(function() { - self.process_selection = false, - self.process_id = $parent.find('#select_process').val(), - self.process_title = $.trim($parent.find('#select_process option:selected').text()); - self.initialize_process_view(); - }); - this.$el.find(".process_subflow").click(function() { - self.process_id = this.id; - self.initialize_process_view(); - }); - }, - process_draw_graph : function(result) { - var self = this; - var res_nodes = result['nodes']; - var res_edges = result['transitions']; - var id_to_node = {}; - var canvas = $('div.process_canvas').empty().get(0); - var style = { - edge_color: "#A0A0A0", - edge_label_font_size: 10, - edge_width: 2, - edge_spacing: 40, - edge_loop_radius: 200, - - node_label_color: "#333", - node_label_font_size: 12, - node_outline_color: "#333", - node_outline_width: 1, - node_outline_color: "#F5F5F5", - node_outline_width: 0, - node_selected_width: 0, - node_size_x: 150, - node_size_y: 100, - - gray: "#DCDCDC", - white: "#FFF", - viewport_margin: 50 - }; - var r = new Raphael(canvas,'100%','100%'); - var graph = new CuteGraph(r,style,canvas.parentNode); - var render_process = function(r,nodes){ - //For Image - var image_node = nodes.kind == "subflow" ? "node-subflow" : "node"; - image_node = nodes.gray ? image_node + "-gray" : image_node; - image_node = nodes.active ? 'node-current': image_node; - var img_src = '/process/static/src/img/'+ image_node + '.png'; - var image = r['image'](img_src, nodes.x-25, nodes.y,150, 100).attr({"cursor": "default"}) .mousedown(function() { return false; }); - //For Node - var process_node = r['rect'](nodes.x, nodes.y, 150, 150).attr({stroke: "none"}); - // Node text - if(nodes.name.length > 18){ - var text = nodes.name.substr(0,16) + '...' - } - var node_text = r.text(nodes.x+60, nodes.y+10,(text || nodes.name.substr(0,18))).attr({"fill": "#fff","font-weight": "bold", "cursor": "default","title":nodes.name}); - //Node Description - var new_notes = nodes.notes; - if(nodes.notes.length > 25) { - var to; - var temp_str = new_notes = ''; - var from = to = 0; - while (1) { - from = 25; - temp_str = nodes.notes.substr(to, 25); - if (temp_str.lastIndexOf(" ") < 25 && temp_str.length >= 25) { - from = temp_str.lastIndexOf(" "); - } - new_notes += "\n" + nodes.notes.substr(to, from); - if (new_notes.length > 80){ - break; - } - to += from; - } - } - if(nodes.res) - new_notes = nodes.res.name + '\n' + new_notes; - if(nodes.notes.length > 60){ - var notes = new_notes.substring(0,60) +'..'; - } - r.text(nodes.x+60, nodes.y+30, (notes || new_notes)).attr({"title":nodes.notes,"cursor": "default"}); - r['image']('/web/static/src/img/icons/gtk-info.png', nodes.x, nodes.y+75, 16, 16) - .attr({"cursor": "pointer", "title": "Help"}) - .click(function() { - window.open(nodes.url || "http://doc.openerp.com/v6.1/index.php?model=" + nodes.model); - }); - if(nodes.menu) { - r['image']('/web/static/src/img/icons/gtk-jump-to.png', nodes.x+100, nodes.y+75, 16, 16) - .attr({"cursor": "pointer", "title": nodes.menu.name}) - .click(function() { - self.process_jump_to_view(nodes.res_model, nodes.menu.id); - }); - } - var process_set =r.set().push(process_node); - process_set.mousedown(function() { - return false; - }); - return process_set; - } - _.each(res_nodes, function(node,id) { - node['res_model'] = self.model, - node['res_id'] = false, - node['color'] = 'gray' - var n = new CuteNode( - graph, - node.x + 50, //FIXME the +50 should be in the layout algorithm - node.y + 50, - CuteGraph.wordwrap("", 14)); - n.id = id; - id_to_node[id] = n; - return render_process(r,node); - }); - _.each(res_edges, function(edge) { - var e = new CuteEdge( - graph, - CuteGraph.wordwrap(" ",0), - id_to_node[edge.source], - id_to_node[edge.target] || id_to_node[edge.source]); - e.id = edge.id; - }); - }, - process_jump_to_view: function(model,id) { - var self = this; - var dataset = new instance.web.DataSet(this, 'ir.values', this.session.user_context); - var action_manager = new instance.web.ActionManager(self); - dataset.call('get', - ['action', 'tree_but_open',[['ir.ui.menu', id]], dataset.context]).done(function(res) { - var action = res[0][res[0].length - 1]; - self.rpc("/web/action/load", { - action_id: action.id, - context: dataset.context - }).done(function(result) { - action_manager.replace(self.$el); - action_manager.do_action(result); - }) - }); - }, - process_edit_view: function() { - var self = this; - var pop = new instance.web.form.FormOpenPopup(self); - pop.show_element( - self.process_dataset.model, - self.process_id, - self.context || self.dataset.context, - { - title: _t('Process') - }); - var form_controller = pop.view_form; - pop.on('write_completed', self, self.initialize_process_view); - } -}); -}; -// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: diff --git a/addons/process/static/src/xml/process.xml b/addons/process/static/src/xml/process.xml deleted file mode 100644 index d6229b686f3..00000000000 --- a/addons/process/static/src/xml/process.xml +++ /dev/null @@ -1,93 +0,0 @@ - diff --git a/addons/procurement/__openerp__.py b/addons/procurement/__openerp__.py index 48569fa76c4..857f0252212 100644 --- a/addons/procurement/__openerp__.py +++ b/addons/procurement/__openerp__.py @@ -26,7 +26,7 @@ 'author' : 'OpenERP SA', 'website' : 'http://www.openerp.com', 'category' : 'Hidden/Dependency', - 'depends' : ['base','process', 'product', 'stock'], + 'depends' : ['base', 'product', 'stock'], 'description': """ This is the module for computing Procurements. ============================================== @@ -53,7 +53,6 @@ depending on the product's configuration. 'wizard/schedulers_all_view.xml', 'procurement_view.xml', 'procurement_workflow.xml', - 'process/procurement_process.xml', 'company_view.xml', 'board_mrp_procurement_view.xml', ], diff --git a/addons/procurement/process/procurement_process.xml b/addons/procurement/process/procurement_process.xml deleted file mode 100644 index b2a33cf80e6..00000000000 --- a/addons/procurement/process/procurement_process.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/product/__openerp__.py b/addons/product/__openerp__.py index fdadda2e4d4..c7790e01513 100644 --- a/addons/product/__openerp__.py +++ b/addons/product/__openerp__.py @@ -25,7 +25,7 @@ 'version': '1.1', 'author': 'OpenERP SA', 'category': 'Sales Management', - 'depends': ['base', 'process', 'decimal_precision', 'mail'], + 'depends': ['base', 'decimal_precision', 'mail'], 'demo': ['product_demo.xml', 'product_image_demo.xml'], 'description': """ This is the base module for managing products and pricelists in OpenERP. @@ -57,7 +57,6 @@ Print product labels with barcode. 'product_shortcut_data.xml', 'pricelist_view.xml', 'partner_view.xml', - 'process/product_process.xml' ], 'test': [ 'product_pricelist_demo.yml', diff --git a/addons/product/process/product_process.xml b/addons/product/process/product_process.xml deleted file mode 100644 index 652710fac94..00000000000 --- a/addons/product/process/product_process.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py index f5ba24c41cb..9a86af9f62a 100644 --- a/addons/project/__openerp__.py +++ b/addons/project/__openerp__.py @@ -68,7 +68,6 @@ Dashboard / Reports for Project Management will include: 'security/ir.model.access.csv', 'project_data.xml', 'project_view.xml', - 'process/task_process.xml', 'res_partner_view.xml', 'report/project_report_view.xml', 'report/project_cumulative.xml', diff --git a/addons/project/process/task_process.xml b/addons/project/process/task_process.xml deleted file mode 100644 index 9955fe1ffe1..00000000000 --- a/addons/project/process/task_process.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/project_mrp/__openerp__.py b/addons/project_mrp/__openerp__.py index 91212b92c1d..9496d3021e2 100644 --- a/addons/project_mrp/__openerp__.py +++ b/addons/project_mrp/__openerp__.py @@ -50,7 +50,7 @@ task is completed. 'website': 'http://www.openerp.com', 'images': ['images/product.jpeg', 'images/task_from_SO.jpeg'], 'depends': ['project', 'procurement', 'sale', 'mrp_jit'], - 'data': ['project_mrp_workflow.xml', 'process/project_mrp_process.xml', 'project_mrp_view.xml'], + 'data': ['project_mrp_workflow.xml', 'project_mrp_view.xml'], 'demo': ['project_mrp_demo.xml'], 'test': ['test/project_task_procurement.yml'], 'installable': True, diff --git a/addons/project_mrp/process/project_mrp_process.xml b/addons/project_mrp/process/project_mrp_process.xml deleted file mode 100644 index c25cd264538..00000000000 --- a/addons/project_mrp/process/project_mrp_process.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/project_timesheet/__openerp__.py b/addons/project_timesheet/__openerp__.py index 4dff3695c5c..9fb4af74597 100644 --- a/addons/project_timesheet/__openerp__.py +++ b/addons/project_timesheet/__openerp__.py @@ -38,7 +38,6 @@ with the effect of creating, editing and deleting either ways. 'data': [ 'security/ir.model.access.csv', 'security/project_timesheet_security.xml', - 'process/project_timesheet_process.xml', 'report/task_report_view.xml', 'project_timesheet_view.xml', ], diff --git a/addons/project_timesheet/process/project_timesheet_process.xml b/addons/project_timesheet/process/project_timesheet_process.xml deleted file mode 100644 index 17dd35dcad2..00000000000 --- a/addons/project_timesheet/process/project_timesheet_process.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py index a7c66344f4a..5cb5e93baaf 100644 --- a/addons/purchase/__openerp__.py +++ b/addons/purchase/__openerp__.py @@ -46,7 +46,7 @@ Dashboard / Reports for Purchase Management will include: 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images' : ['images/purchase_order.jpeg', 'images/purchase_analysis.jpeg', 'images/request_for_quotation.jpeg'], - 'depends': ['stock', 'process', 'procurement'], + 'depends': ['stock', 'procurement'], 'data': [ 'security/purchase_security.xml', 'security/ir.model.access.csv', @@ -60,7 +60,6 @@ Dashboard / Reports for Purchase Management will include: 'purchase_view.xml', 'stock_view.xml', 'partner_view.xml', - 'process/purchase_process.xml', 'report/purchase_report_view.xml', 'board_purchase_view.xml', 'edi/purchase_order_action_data.xml', diff --git a/addons/purchase/process/purchase_process.xml b/addons/purchase/process/purchase_process.xml deleted file mode 100644 index 7feb47690e0..00000000000 --- a/addons/purchase/process/purchase_process.xml +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - diff --git a/addons/resource/__openerp__.py b/addons/resource/__openerp__.py index b8a9f57c910..00930eabca0 100644 --- a/addons/resource/__openerp__.py +++ b/addons/resource/__openerp__.py @@ -35,7 +35,7 @@ associated to every resource. It also manages the leaves of every resource. """, 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', - 'depends': ['process'], + 'depends': ['base'], 'data': [ 'security/ir.model.access.csv', 'resource_view.xml', diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index 8cc4919e3a1..b9b2a298adf 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -73,7 +73,6 @@ The Dashboard for the Sales Manager will include 'sale_view.xml', 'res_partner_view.xml', 'report/sale_report_view.xml', - 'process/sale_process.xml', 'board_sale_view.xml', 'edi/sale_order_action_data.xml', 'res_config_view.xml', diff --git a/addons/sale/process/sale_process.xml b/addons/sale/process/sale_process.xml deleted file mode 100644 index b3034cafa28..00000000000 --- a/addons/sale/process/sale_process.xml +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/sale_crm/__openerp__.py b/addons/sale_crm/__openerp__.py index 7db1aa1eff0..92403adc415 100644 --- a/addons/sale_crm/__openerp__.py +++ b/addons/sale_crm/__openerp__.py @@ -42,7 +42,6 @@ modules. 'wizard/crm_make_sale_view.xml', 'sale_crm_view.xml', 'sale_crm_data.xml', - 'process/sale_crm_process.xml', 'security/sale_crm_security.xml', 'security/ir.model.access.csv', 'report/sale_crm_account_invoice_report_view.xml', diff --git a/addons/sale_crm/process/sale_crm_process.xml b/addons/sale_crm/process/sale_crm_process.xml deleted file mode 100644 index 21297e12dbd..00000000000 --- a/addons/sale_crm/process/sale_crm_process.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - diff --git a/addons/sale_stock/__openerp__.py b/addons/sale_stock/__openerp__.py index fd20748aa75..5ea9191ff5f 100644 --- a/addons/sale_stock/__openerp__.py +++ b/addons/sale_stock/__openerp__.py @@ -55,7 +55,6 @@ You can choose flexible invoicing methods: 'stock_view.xml', 'res_config_view.xml', 'report/sale_report_view.xml', - 'process/sale_stock_process.xml', ], 'demo_xml': ['sale_stock_demo.xml'], 'test': ['test/cancel_order_sale_stock.yml', diff --git a/addons/sale_stock/process/sale_stock_process.xml b/addons/sale_stock/process/sale_stock_process.xml deleted file mode 100644 index 1ebebec7809..00000000000 --- a/addons/sale_stock/process/sale_stock_process.xml +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From f6aa7c8c996315d3a19450f322b699d8d6170ae3 Mon Sep 17 00:00:00 2001 From: Darshan Kalola Date: Thu, 29 Aug 2013 17:30:09 +0530 Subject: [PATCH 002/143] [IMP]remove base_status from dependancy in crm/__openerp__.py bzr revid: dka@tinyerp.com-20130829120009-u73x96rckfltfxvh --- addons/crm/__openerp__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index d8922311e2d..14cf122c0bd 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -51,7 +51,6 @@ Dashboard for CRM will include: 'depends': [ 'base_action_rule', 'base_setup', - 'base_status', 'mail', 'email_template', 'base_calendar', From 348d05be82f59d8aac0c1dd1f9d713d7e39569e2 Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (Open ERP)" Date: Thu, 3 Oct 2013 11:00:02 +0530 Subject: [PATCH 003/143] [IMP]improved position of m2o autocomplete. bzr revid: kch@tinyerp.com-20131003053002-v4bzzklwzbinxw2a --- addons/web/static/src/js/view_form.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a00b66cbeda..79fdb3e4f4e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3390,6 +3390,8 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc minLength: 0, delay: 0 }); + //set position for list of suggetions box + this.$input.autocomplete( "option", "position", { my : "left top", at: "left bottom" } ); this.$input.autocomplete("widget").openerpClass(); // used to correct a bug when selecting an element by pushing 'enter' in an editable list this.$input.keyup(function(e) { From 2185a2600f23104cb8d750a6b9b504e76e3d0bfc Mon Sep 17 00:00:00 2001 From: "Chirag Dodiya (OpenERP)" Date: Wed, 11 Dec 2013 11:19:55 +0530 Subject: [PATCH 004/143] [IMP] Improved Quick add wizard bzr revid: cod@tinyerp.com-20131211054955-vnfmj46y761whvvb --- addons/web/static/src/xml/base.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index ae7a4f279b0..c6ad1754e64 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1925,13 +1925,14 @@
+

You are creating a new record, are you sure it does not exist yet?

Name:
- - - + + or + From 01aa3406507b9a39f1af9f164b39c29649f0b99f Mon Sep 17 00:00:00 2001 From: "Chirag Dodiya (OpenERP)" Date: Wed, 11 Dec 2013 14:12:19 +0530 Subject: [PATCH 005/143] [IMP] Improved code for apply oe_link class on cancel button bzr revid: cod@tinyerp.com-20131211084219-5gz7jeu1nb0szhji --- addons/web/static/src/xml/base.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index c6ad1754e64..7fed402aac0 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1932,7 +1932,7 @@ or - + From 9ca1c1394c49e3ae505f9daa2bd61f1fad453599 Mon Sep 17 00:00:00 2001 From: "Chirag Dodiya (OpenERP)" Date: Wed, 18 Dec 2013 10:37:16 +0530 Subject: [PATCH 006/143] [IMP] Improved the name of wizard Instead of Add XXX set Create a XXX bzr revid: cod@tinyerp.com-20131218050716-8zsx7a2k3fme9w0f --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index f20e9053867..89ec4cbeee4 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3166,7 +3166,7 @@ instance.web.form.M2ODialog = instance.web.Dialog.extend({ template: "M2ODialog", init: function(parent) { this._super(parent, { - title: _.str.sprintf(_t("Add %s"), parent.string), + title: _.str.sprintf(_t("Create a %s"), parent.string), width: 312, }); }, From 0abd187bec3126e917959b1c7b67082f98757ce4 Mon Sep 17 00:00:00 2001 From: "Chirag Dodiya (OpenERP)" Date: Thu, 23 Jan 2014 18:52:41 +0530 Subject: [PATCH 007/143] [IMP]Improved code to set message of quick add wizard bzr revid: cod@tinyerp.com-20140123132241-zfd0e3la6ebrvtd5 --- addons/web/static/src/js/view_form.js | 3 +++ addons/web/static/src/xml/base.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 89ec4cbeee4..87cf8c4c886 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3165,6 +3165,7 @@ instance.web.form.CompletionFieldMixin = { instance.web.form.M2ODialog = instance.web.Dialog.extend({ template: "M2ODialog", init: function(parent) { + this.name = parent.string; this._super(parent, { title: _.str.sprintf(_t("Create a %s"), parent.string), width: 312, @@ -3172,6 +3173,8 @@ instance.web.form.M2ODialog = instance.web.Dialog.extend({ }, start: function() { var self = this; + var text = _.str.sprintf(_t("You are creating a new %s, are you sure it does not exist yet?"), self.name); + $( "p" ).text( text ); this.$buttons.html(QWeb.render("M2ODialog.buttons")); this.$("input").val(this.getParent().last_query); this.$buttons.find(".oe_form_m2o_qc_button").click(function(){ diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 7fed402aac0..55a9865fef9 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1925,7 +1925,7 @@
-

You are creating a new record, are you sure it does not exist yet?

+

Name:

From 4c0f46178ee335f94b8e5299b98a4be5eb82ceb8 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 17:00:04 +0530 Subject: [PATCH 008/143] [remove]sale:remove sale dashboard bzr revid: sunilsharma.sharma07@gmail.com-20140129113004-y2gndgsqkif3g43k --- addons/sale/__openerp__.py | 2 +- addons/sale/board_sale_view.xml | 79 --------------------------------- 2 files changed, 1 insertion(+), 80 deletions(-) delete mode 100644 addons/sale/board_sale_view.xml diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index 2bea86b41af..82f858e9012 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -74,7 +74,7 @@ The Dashboard for the Sales Manager will include 'res_partner_view.xml', 'report/sale_report_view.xml', 'process/sale_process.xml', - 'board_sale_view.xml', + #'board_sale_view.xml', 'edi/sale_order_action_data.xml', 'res_config_view.xml', ], diff --git a/addons/sale/board_sale_view.xml b/addons/sale/board_sale_view.xml deleted file mode 100644 index 021e0c140af..00000000000 --- a/addons/sale/board_sale_view.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - My Quotations - sale.order - form - tree,form - [('state','=','draft'),('user_id','=',uid)] - - - - - turnover.by.month.tree - account.invoice.report - - - - - - - - - - turnover.by.month.graph - account.invoice.report - - - - - - - - - - - Monthly Turnover - account.invoice.report - form - graph,tree - - [('year','ilike',time.strftime('%Y')),('user_id','=',uid)] - {'group_by_no_leaf':1,'group_by':['month']} - - - - board.sales.form - board.board - -
- - - - - - - - -
-
-
- - - Sales - board.board - form - form - - - - - -
-
From 80be3a2c532ed13096aef301183e86569585122d Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 17:02:52 +0530 Subject: [PATCH 009/143] [imp]sale:remove comment line bzr revid: sunilsharma.sharma07@gmail.com-20140129113252-i71mk96ohkpp3zg8 --- addons/sale/__openerp__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index 82f858e9012..8c5e506047e 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -74,7 +74,6 @@ The Dashboard for the Sales Manager will include 'res_partner_view.xml', 'report/sale_report_view.xml', 'process/sale_process.xml', - #'board_sale_view.xml', 'edi/sale_order_action_data.xml', 'res_config_view.xml', ], From f7431f7a9d1ab9367ef51f86cd73cfe6699524e8 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 17:34:25 +0530 Subject: [PATCH 010/143] [remove]sale:remove sale dashboard description and image bzr revid: sunilsharma.sharma07@gmail.com-20140129120425-kk2g4hg3yxb4fwki --- addons/sale/static/description/index.html | 19 ------------------ addons/sale/static/description/sale_sc_10.png | Bin 85061 -> 0 bytes 2 files changed, 19 deletions(-) delete mode 100644 addons/sale/static/description/sale_sc_10.png diff --git a/addons/sale/static/description/index.html b/addons/sale/static/description/index.html index 52c84b82f12..7b6885a09d0 100644 --- a/addons/sale/static/description/index.html +++ b/addons/sale/static/description/index.html @@ -239,25 +239,6 @@ applied automatically for all your sales teams. -
-
-

Reporting and Dashboards

-

Get access to the right information to make smart decisions

-
-

-Get the insights you need to make smarter decisions. Design custom dashboards -to get a picture of your business at a glance. Dig deeper with real-time -reports that anyone can create and share. -

-
-
-
- -
-
-
-
-
diff --git a/addons/sale/static/description/sale_sc_10.png b/addons/sale/static/description/sale_sc_10.png deleted file mode 100644 index b71ce805250c9e3d2a08d85dc08b4d2bdb0f385c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85061 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 From 936bd709672dcbdb247f1e81f0222b2dfac7b003 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 17:39:47 +0530 Subject: [PATCH 011/143] [remove]crm:remove crm dashboard bzr revid: sunilsharma.sharma07@gmail.com-20140129120947-f4bwceiddihtmmim --- addons/crm/__openerp__.py | 1 - addons/crm/board_crm_view.xml | 85 ----------------------------------- 2 files changed, 86 deletions(-) delete mode 100644 addons/crm/board_crm_view.xml diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index 1b0cbed7937..ba05cc1fb16 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -92,7 +92,6 @@ Dashboard for CRM will include: 'process/crm_configuration_process.xml', 'res_partner_view.xml', - 'board_crm_view.xml', 'res_config_view.xml', 'base_partner_merge_view.xml', diff --git a/addons/crm/board_crm_view.xml b/addons/crm/board_crm_view.xml deleted file mode 100644 index 27e835f1594..00000000000 --- a/addons/crm/board_crm_view.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - Opportunities By Stage - Graph - crm.lead.report - - - - - - - - - Opportunities By Stage - crm.lead.report - form - graph,tree,form - - - ['&', ('stage_id.fold', '=', False), ('type', '=', 'opportunity')] - {'search_default_Stage':1} - - - - - Opportunities By Stage Per User - Graph - crm.lead.report - - - - - - - - - - - - Planned Revenue By User and Stage - crm.lead.report - form - graph,tree,form - - - ['|', ('stage_id.fold', '=', False), ('stage_id.probability', '=', 100)] - {'search_default_user': 1, 'search_default_Stage': 1} - - - - CRM - Statistical Dashboard Form - board.board - -
- - - - - - - - -
-
-
- - - CRM - board.board - form - form - menu - - - - - -
-
From c8bed7ccc74de9048b73f1b5d52b50b1bb425ed4 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 17:43:48 +0530 Subject: [PATCH 012/143] [remove]crm:remove crm dashboard description and image bzr revid: sunilsharma.sharma07@gmail.com-20140129121348-hznhhnzzv504n3yi --- addons/crm/static/description/crm_sc_05.png | Bin 85061 -> 0 bytes addons/crm/static/description/index.html | 17 ----------------- 2 files changed, 17 deletions(-) delete mode 100644 addons/crm/static/description/crm_sc_05.png diff --git a/addons/crm/static/description/crm_sc_05.png b/addons/crm/static/description/crm_sc_05.png deleted file mode 100644 index b71ce805250c9e3d2a08d85dc08b4d2bdb0f385c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85061 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 diff --git a/addons/crm/static/description/index.html b/addons/crm/static/description/index.html index 70f52d0ca87..a211951e35a 100644 --- a/addons/crm/static/description/index.html +++ b/addons/crm/static/description/index.html @@ -163,23 +163,6 @@ Customize your sales cycle by configuring sales stages that perfectly fit your s
-
-
-

Reporting and Dashboards

-

Get access to the right information to take smart decisions

-
-
- -
-
-
-

-Get the insights you need to make smarter decisions. Design custom dashboards to get a picture of your business at a glance. Dig deeper with real-time reports that anyone can create and share. -

-
-
-
-

Drive Engagement with Gamification

From 31769e2d408bc03bb8652d550f3cb7883c958ab7 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 17:59:14 +0530 Subject: [PATCH 013/143] [remove]purchase and purchase_double_validation:remove purchase and purchase_double_validation dashboard bzr revid: sunilsharma.sharma07@gmail.com-20140129122914-kpwweespepyww735 --- addons/purchase/__openerp__.py | 1 - addons/purchase/board_purchase_view.xml | 92 ------------------- .../purchase_double_validation/__openerp__.py | 1 - .../board_purchase_view.xml | 26 ------ 4 files changed, 120 deletions(-) delete mode 100644 addons/purchase/board_purchase_view.xml delete mode 100644 addons/purchase_double_validation/board_purchase_view.xml diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py index 9d72579cc77..d17a2de3e7d 100644 --- a/addons/purchase/__openerp__.py +++ b/addons/purchase/__openerp__.py @@ -62,7 +62,6 @@ Dashboard / Reports for Purchase Management will include: 'partner_view.xml', 'process/purchase_process.xml', 'report/purchase_report_view.xml', - 'board_purchase_view.xml', 'edi/purchase_order_action_data.xml', 'res_config_view.xml', ], diff --git a/addons/purchase/board_purchase_view.xml b/addons/purchase/board_purchase_view.xml deleted file mode 100644 index d491985cf52..00000000000 --- a/addons/purchase/board_purchase_view.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - Request for Quotations - ir.actions.act_window - purchase.order - form - tree,form - [('state','=','draft')] - {'quotation_only': True} - - - - purchase.order.monthly.categ.tree - purchase.report - - - - - - - - - - - - - - - - - - - - - purchase.order.monthly.categ.graph - purchase.report - - - - - - - - - - Monthly Purchase by Category - purchase.report - form - graph,tree - {'group_by':['month','category_id'],'group_by_no_leaf':1} - [('state','in',('approved','except_picking','except_invoice','done'))] - - - - - board.purchase.form - board.board - -
- - - - - - - - -
-
-
- - - Purchases - board.board - form - form - menu - - - - - -
-
diff --git a/addons/purchase_double_validation/__openerp__.py b/addons/purchase_double_validation/__openerp__.py index 8c56f2af9ed..66ac66b9de6 100644 --- a/addons/purchase_double_validation/__openerp__.py +++ b/addons/purchase_double_validation/__openerp__.py @@ -38,7 +38,6 @@ exceeds minimum amount set by configuration wizard. 'purchase_double_validation_workflow.xml', 'purchase_double_validation_installer.xml', 'purchase_double_validation_view.xml', - 'board_purchase_view.xml' ], 'test': [ 'test/purchase_double_validation_demo.yml', diff --git a/addons/purchase_double_validation/board_purchase_view.xml b/addons/purchase_double_validation/board_purchase_view.xml deleted file mode 100644 index c2cc4df88b8..00000000000 --- a/addons/purchase_double_validation/board_purchase_view.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - Purchase Orders Waiting Approval - ir.actions.act_window - purchase.order - form - tree,form - [('date_order','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',time.strftime('%Y-12-31 23:59:59')), ('state','in',('wait','confirmed'))] - - - - board.purchase.form - board.board - - - - - - - - - - From a1067e8a49410c8cebd4370d8a422b41b6e5e47b Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 18:07:37 +0530 Subject: [PATCH 014/143] [remove]purchase:remove purchase dashboard description and image bzr revid: sunilsharma.sharma07@gmail.com-20140129123737-li2o5gbwy71spgz5 --- addons/purchase/static/description/index.html | 14 -------------- .../static/description/purchase_dashboard.png | Bin 77350 -> 0 bytes 2 files changed, 14 deletions(-) delete mode 100644 addons/purchase/static/description/purchase_dashboard.png diff --git a/addons/purchase/static/description/index.html b/addons/purchase/static/description/index.html index ecf9028ce33..37101b93554 100644 --- a/addons/purchase/static/description/index.html +++ b/addons/purchase/static/description/index.html @@ -125,17 +125,3 @@ Control supplier invoices with no effort. Choose the right method according to y
- -
-
-

Get Statistics On Your Purchases

-
-

-Get accurate statistics on the performance of your suppliers through flexible reporting: delivery delays, negotiated discount on prices, quantities purchased, etc. Integrate purchases with the analytic accounting to analyse your contracts profitability. -

-
-
- -
-
-
diff --git a/addons/purchase/static/description/purchase_dashboard.png b/addons/purchase/static/description/purchase_dashboard.png deleted file mode 100644 index 0939edea591abb5f5eead391e30c49418cb125b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77350 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 z 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 Ef)NYmW&i*H From 64a187d894c5492399878e3ac4ac9761a651900d Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 18:26:15 +0530 Subject: [PATCH 015/143] [remove]procurement and stock:remove procurement and stock dashboard bzr revid: sunilsharma.sharma07@gmail.com-20140129125615-96m0pzvmdfi0m0yz --- addons/procurement/__openerp__.py | 1 - .../board_mrp_procurement_view.xml | 24 ------- addons/stock/__openerp__.py | 5 +- addons/stock/board_warehouse_view.xml | 67 ------------------- 4 files changed, 2 insertions(+), 95 deletions(-) delete mode 100644 addons/procurement/board_mrp_procurement_view.xml delete mode 100644 addons/stock/board_warehouse_view.xml diff --git a/addons/procurement/__openerp__.py b/addons/procurement/__openerp__.py index 48569fa76c4..d18d2b862df 100644 --- a/addons/procurement/__openerp__.py +++ b/addons/procurement/__openerp__.py @@ -55,7 +55,6 @@ depending on the product's configuration. 'procurement_workflow.xml', 'process/procurement_process.xml', 'company_view.xml', - 'board_mrp_procurement_view.xml', ], 'demo': ['stock_orderpoint.xml','procurement_demo.xml'], 'test': ['test/procurement.yml'], diff --git a/addons/procurement/board_mrp_procurement_view.xml b/addons/procurement/board_mrp_procurement_view.xml deleted file mode 100644 index bb1b5e62d82..00000000000 --- a/addons/procurement/board_mrp_procurement_view.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - Procurement Exceptions - ir.actions.act_window - procurement.order - form - tree,form - [('state','=','exception')] - - - - board.mrp.procurement.form - board.board - - - - - - - - - diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py index dd2a996f6dd..1d3aa096b73 100644 --- a/addons/stock/__openerp__.py +++ b/addons/stock/__openerp__.py @@ -28,8 +28,8 @@ Manage multi-warehouses, multi- and structured stock locations ============================================================== -The warehouse and inventory management is based on a hierarchical location structure, from warehouses to storage bins. -The double entry inventory system allows you to manage customers, suppliers as well as manufacturing inventories. +The warehouse and inventory management is based on a hierarchical location structure, from warehouses to storage bins. +The double entry inventory system allows you to manage customers, suppliers as well as manufacturing inventories. OpenERP has the capacity to manage lots and serial numbers ensuring compliance with the traceability requirements imposed by the majority of industries. @@ -86,7 +86,6 @@ Dashboard / Reports for Warehouse Management will include: 'partner_view.xml', 'report/report_stock_move_view.xml', 'report/report_stock_view.xml', - 'board_warehouse_view.xml', 'res_config_view.xml', ], 'test': [ diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml deleted file mode 100644 index a1f327eab5d..00000000000 --- a/addons/stock/board_warehouse_view.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - report.stock.move.graph - report.stock.move - - - - - - - - - - - Incoming Products - report.stock.move - form - graph,tree - [('type','=','in'),('day','<=', time.strftime('%Y-%m-%d')),('day','>',(context_today()-datetime.timedelta(days=15)).strftime('%Y-%m-%d'))] - - {'search_default_in':1} - - - Outgoing Products - report.stock.move - form - graph,tree - [('type','=','out'),('day','<=', time.strftime('%Y-%m-%d')),('day','>',(context_today()-datetime.timedelta(days=15)).strftime('%Y-%m-%d'))] - - {'search_default_out':1} - - - board.warehouse.form - board.board - -
- - - - - - - - -
-
-
- - - Warehouse - board.board - form - form - - - - - -
-
From 9328ac99082109ef98628ecfff31f00be6db6ac7 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 18:43:53 +0530 Subject: [PATCH 016/143] [imp]:remove sapece bzr revid: sunilsharma.sharma07@gmail.com-20140129131353-26259ntx22t8wd4z --- addons/stock/__openerp__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py index 1d3aa096b73..343de1bb4ec 100644 --- a/addons/stock/__openerp__.py +++ b/addons/stock/__openerp__.py @@ -28,8 +28,8 @@ Manage multi-warehouses, multi- and structured stock locations ============================================================== -The warehouse and inventory management is based on a hierarchical location structure, from warehouses to storage bins. -The double entry inventory system allows you to manage customers, suppliers as well as manufacturing inventories. +The warehouse and inventory management is based on a hierarchical location structure, from warehouses to storage bins. +The double entry inventory system allows you to manage customers, suppliers as well as manufacturing inventories. OpenERP has the capacity to manage lots and serial numbers ensuring compliance with the traceability requirements imposed by the majority of industries. From 9a30e69787486c74a4aef8144f278808a20eb799 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 18:54:37 +0530 Subject: [PATCH 017/143] [remove]:stock:remove stock dashboard description and image bzr revid: sunilsharma.sharma07@gmail.com-20140129132437-7r4id6sohcab0z9v --- addons/stock/__openerp__.py | 2 +- addons/stock/static/description/index.html | 17 ----------------- .../static/description/stock_reporting.png | Bin 25497 -> 0 bytes 3 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 addons/stock/static/description/stock_reporting.png diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py index 343de1bb4ec..d2a1a77886a 100644 --- a/addons/stock/__openerp__.py +++ b/addons/stock/__openerp__.py @@ -53,7 +53,7 @@ Dashboard / Reports for Warehouse Management will include: * Moves Analysis """, 'website': 'http://www.openerp.com', - 'images': ['images/stock_forecast_report.png', 'images/delivery_orders.jpeg', 'images/inventory_analysis.jpeg','images/location.jpeg','images/moves_analysis.jpeg','images/physical_inventories.jpeg','images/warehouse_dashboard.jpeg'], + 'images': ['images/stock_forecast_report.png', 'images/delivery_orders.jpeg', 'images/inventory_analysis.jpeg','images/location.jpeg','images/moves_analysis.jpeg','images/physical_inventories.jpeg'], 'depends': ['product', 'account'], 'category': 'Warehouse Management', 'sequence': 16, diff --git a/addons/stock/static/description/index.html b/addons/stock/static/description/index.html index dd7fbe568f7..8b5b3245653 100644 --- a/addons/stock/static/description/index.html +++ b/addons/stock/static/description/index.html @@ -185,23 +185,6 @@ based on a hierarchical location structure. -
-
-

Reporting and Dashboards

-

Analyse your warehouse efficiency to improve performance

-
-

-Get the insights you need to make smarter decisions. Design custom dashboards -to get a picture of your warehouse efficiency at a glance. Dig deeper with -real-time reports that anyone can create and share. -

-
-
- -
-
-
-
diff --git a/addons/stock/static/description/stock_reporting.png b/addons/stock/static/description/stock_reporting.png deleted file mode 100644 index 1ec54d18813e6d04ff6b7b46363e46f9caf627ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25497 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 From 685121bea3758ebd4c2d5ef413f7877f4a07bd49 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Wed, 29 Jan 2014 19:01:15 +0530 Subject: [PATCH 018/143] [rem]:sale and crm :remove image bzr revid: sunilsharma.sharma07@gmail.com-20140129133115-mqozdx23ctzbmct5 --- addons/crm/__openerp__.py | 1 - addons/sale/__openerp__.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index ba05cc1fb16..3c87e36e389 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -128,7 +128,6 @@ Dashboard for CRM will include: 'application': True, 'auto_install': False, 'images': [ - 'images/crm_dashboard.png', 'images/customers.png', 'images/leads.png', 'images/opportunities_kanban.png', diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index 8c5e506047e..1d698c17163 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -58,7 +58,7 @@ The Dashboard for the Sales Manager will include """, 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', - 'images': ['images/sale_dashboard.jpeg','images/Sale_order_line_to_invoice.jpeg','images/sale_order.jpeg','images/sales_analysis.jpeg'], + 'images': ['images/Sale_order_line_to_invoice.jpeg','images/sale_order.jpeg','images/sales_analysis.jpeg'], 'depends': ['account_voucher'], 'data': [ 'wizard/sale_make_invoice_advance.xml', From 30170062ddcb294b38cbe2dcdd0eb69f768b43d1 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Thu, 30 Jan 2014 10:16:32 +0530 Subject: [PATCH 019/143] [rem]:mrp:remove mrp dashboard bzr revid: sunilsharma.sharma07@gmail.com-20140130044632-m0kw1a8ya466tlg3 --- addons/mrp/__openerp__.py | 3 +- addons/mrp/board_manufacturing_view.xml | 37 ------------------------- 2 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 addons/mrp/board_manufacturing_view.xml diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py index 99afd01707a..765eae6da61 100644 --- a/addons/mrp/__openerp__.py +++ b/addons/mrp/__openerp__.py @@ -28,7 +28,7 @@ 'category': 'Manufacturing', 'sequence': 18, 'summary': 'Manufacturing Orders, Bill of Materials, Routing', - 'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/manufacturing_analysis.jpeg', 'images/production_dashboard.jpeg','images/routings.jpeg','images/work_centers.jpeg'], + 'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/manufacturing_analysis.jpeg','images/routings.jpeg','images/work_centers.jpeg'], 'depends': ['product','procurement', 'stock', 'resource', 'purchase','process'], 'description': """ Manage the Manufacturing process in OpenERP @@ -70,7 +70,6 @@ Dashboard / Reports for MRP will include: 'process/procurement_process.xml', 'report/mrp_report_view.xml', 'report/mrp_production_order_view.xml', - 'board_manufacturing_view.xml', 'res_config_view.xml', ], 'demo': ['mrp_demo.xml'], diff --git a/addons/mrp/board_manufacturing_view.xml b/addons/mrp/board_manufacturing_view.xml deleted file mode 100644 index 6bd07c2648b..00000000000 --- a/addons/mrp/board_manufacturing_view.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - board.mrp.manager.form - board.board - -
- - - - - - - - -
-
-
- - - Manufacturing - board.board - form - form - - - - - -
-
From 742c1b22d1459db2691e0471e11c366aa2916788 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Thu, 30 Jan 2014 10:46:11 +0530 Subject: [PATCH 021/143] [rem]:project and project_issue:remove project and project_issue dashboard and images bzr revid: sunilsharma.sharma07@gmail.com-20140130051611-b0m9zioykhlbi8jh --- addons/project/__openerp__.py | 2 - addons/project/board_project_view.xml | 64 ------------------- addons/project_issue/__openerp__.py | 1 - .../board_project_issue_view.xml | 45 ------------- 4 files changed, 112 deletions(-) delete mode 100644 addons/project/board_project_view.xml delete mode 100644 addons/project_issue/board_project_issue_view.xml diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py index f5ba24c41cb..4247aa6ea2c 100644 --- a/addons/project/__openerp__.py +++ b/addons/project/__openerp__.py @@ -29,7 +29,6 @@ 'summary': 'Projects, Tasks', 'images': [ 'images/gantt.png', - 'images/project_dashboard.jpeg', 'images/project_task_tree.jpeg', 'images/project_task.jpeg', 'images/project.jpeg', @@ -72,7 +71,6 @@ Dashboard / Reports for Project Management will include: 'res_partner_view.xml', 'report/project_report_view.xml', 'report/project_cumulative.xml', - 'board_project_view.xml', 'res_config_view.xml', ], 'demo': ['project_demo.xml'], diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml deleted file mode 100644 index 3a14f7b6274..00000000000 --- a/addons/project/board_project_view.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - project.task.tree - project.task - - - - - - - - - - - - - - - - - My Tasks - project.task - form - tree,form - [('user_id', '=', uid), ('stage_id.fold', '!=', True)] - - - - - board.project.form - board.board - -
- - - - - - - - -
-
-
- - - Project - board.board - form - form - menu - - - - - -
-
diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py index 146cff0a407..97b6f736f54 100644 --- a/addons/project_issue/__openerp__.py +++ b/addons/project_issue/__openerp__.py @@ -46,7 +46,6 @@ It allows the manager to quickly check the issues, assign them and decide on the 'report/project_issue_report_view.xml', 'security/project_issue_security.xml', 'security/ir.model.access.csv', - 'board_project_issue_view.xml', 'res_config_view.xml', 'project_issue_data.xml' ], diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml deleted file mode 100644 index 6eb48f5572d..00000000000 --- a/addons/project_issue/board_project_issue_view.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - Project Issue Board Tree - project.issue - - - - - - - - - - - - - - - - - - - My Project Issues - project.issue - form - tree,form - [('user_id', '=', uid)] - - - - - board.my.project.issue.form.inherit - board.board - - - - - - - - - From 18e1f423ae65f77073afd78393684f149b508982 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Thu, 30 Jan 2014 10:53:23 +0530 Subject: [PATCH 022/143] [rem]:event:remove event dashboard bzr revid: sunilsharma.sharma07@gmail.com-20140130052323-702ji8w2lowhyzer --- addons/event/__openerp__.py | 1 - addons/event/board_association_view.xml | 74 ------------------------- 2 files changed, 75 deletions(-) delete mode 100644 addons/event/board_association_view.xml diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py index e8ecb09bf03..15cd863dc55 100644 --- a/addons/event/__openerp__.py +++ b/addons/event/__openerp__.py @@ -47,7 +47,6 @@ Key Features 'event_view.xml', 'event_data.xml', 'report/report_event_registration_view.xml', - 'board_association_view.xml', 'res_partner_view.xml', 'email_template.xml', ], diff --git a/addons/event/board_association_view.xml b/addons/event/board_association_view.xml deleted file mode 100644 index f48722bfea6..00000000000 --- a/addons/event/board_association_view.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - Registration Event report - report.event.registration - - - - - - - - - - Events Filling Status - report.event.registration - form - [('event_state','not in',('cancel','done'))] - graph,tree - - - - - Next Events - ir.actions.act_window - event.event - form - tree,form - [('state','not in',('cancel','done'))] - - - - New Registration - ir.actions.act_window - event.registration - form - tree,form - [('state','=','draft')] - - - - board.associations.manager.form - board.board - -
- - - - - - - - -
-
-
- - - Events - board.board - form - form - - - - -
-
From 8ae9f5fa1d787a9e497f219066fa96dcd1b18bdc Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Thu, 30 Jan 2014 11:09:17 +0530 Subject: [PATCH 023/143] [rem]:account:remove account dashboard bzr revid: sunilsharma.sharma07@gmail.com-20140130053917-8n5b9vh7rf2k5cv4 --- addons/account/__openerp__.py | 1 - addons/account/board_account_view.xml | 46 --------------------------- 2 files changed, 47 deletions(-) delete mode 100644 addons/account/board_account_view.xml diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py index 343512dc271..e372c58c759 100644 --- a/addons/account/__openerp__.py +++ b/addons/account/__openerp__.py @@ -119,7 +119,6 @@ for a particular financial year and for preparation of vouchers there is a modul 'process/supplier_invoice_process.xml', 'ir_sequence_view.xml', 'company_view.xml', - 'board_account_view.xml', 'edi/invoice_action_data.xml', 'account_bank_view.xml', 'res_config_view.xml', diff --git a/addons/account/board_account_view.xml b/addons/account/board_account_view.xml deleted file mode 100644 index abbc81ade2b..00000000000 --- a/addons/account/board_account_view.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - Company Analysis - account.entries.report - form - tree,graph - {'group_by':['user_type'], 'group_by_no_leaf':1} - - [('year','=',time.strftime('%Y'))] - - - - board.account.form - board.board - -
- - - - - -
-
-
- - - Accounting - board.board - form - form - menu - - - - - -
-
From efe7f2ba00b9a845b83d34117fb8d023c2af9d3a Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Thu, 30 Jan 2014 11:20:32 +0530 Subject: [PATCH 024/143] [rem]:fleet:remove fleet dashboard bzr revid: sunilsharma.sharma07@gmail.com-20140130055032-79lxdzeqfrzda3l4 --- addons/fleet/__openerp__.py | 1 - addons/fleet/fleet_board_view.xml | 154 ------------------------------ 2 files changed, 155 deletions(-) delete mode 100644 addons/fleet/fleet_board_view.xml diff --git a/addons/fleet/__openerp__.py b/addons/fleet/__openerp__.py index 29c0e9d3ceb..3edf8ea8e0d 100644 --- a/addons/fleet/__openerp__.py +++ b/addons/fleet/__openerp__.py @@ -54,7 +54,6 @@ Main Features 'fleet_view.xml', 'fleet_cars.xml', 'fleet_data.xml', - 'fleet_board_view.xml', ], 'images': ['images/costs_analysis.jpeg','images/indicative_costs_analysis.jpeg','images/vehicles.jpeg','images/vehicles_contracts.jpeg','images/vehicles_fuel.jpeg','images/vehicles_odometer.jpeg','images/vehicles_services.jpeg'], diff --git a/addons/fleet/fleet_board_view.xml b/addons/fleet/fleet_board_view.xml deleted file mode 100644 index 41093d2c283..00000000000 --- a/addons/fleet/fleet_board_view.xml +++ /dev/null @@ -1,154 +0,0 @@ - - - - - Fuel Costs by Month - fleet.vehicle.cost - - form - tree - ['&',('parent_id','=',False),('cost_type','=','fuel')] - - - - Services Costs by Month - fleet.vehicle.cost - - form - tree - ['&',('parent_id','=',False),('cost_type','=','services')] - - - - Contracts Costs by Month - fleet.vehicle.cost - - form - tree - ['&',('parent_id','=',False),('cost_type','=','contract')] - - - - Costs by Month - fleet.vehicle.cost - - form - tree - [('parent_id','=',False)] - - - - Vehicles with alerts - fleet.vehicle - - form - tree - ['|',('contract_renewal_due_soon','=',True),('contract_renewal_overdue','=',True)] - -

- Here are displayed vehicles for which one or more contracts need to be renewed. If you see this message, then there is no contracts to renew. -

-
-
- - - Costs Analysis - fleet.vehicle.cost - - form - tree - {"search_default_parent_false" : True,"search_default_groupby_year" : True,"search_default_groupby_cost_type" : True,"search_default_groupby_cost_subtype" : True, "search_default_groupby_vehicle_id" : True,} - -

- OpenERP helps you managing the costs for your different vehicles - Costs are generally created from services and contract and appears here. -

-

- Thanks to the different filters, OpenERP can only print the effective - costs, sort them by type and by vehicle. -

-
-
- - - Indicative Costs Analysis - fleet.vehicle.cost - - form - tree - {"search_default_parent_true" : True,"search_default_groupby_cost_subtype" : True,"search_default_groupby_cost_type" : True,"search_default_groupby_parent_id" : True,} - -

- OpenERP helps you managing the costs for your different vehicles - Costs are generally created from services and contract and appears here. -

-

- Thanks to the different filters, OpenERP can only print the effective - costs, sort them by type and by vehicle. -

-
-
- - - board.fleet.form - board.board - -
- - - - - - - - - - - -
-
-
- - - Fleet - board.board - form - form - menu - - -
-

- Fleet dashboard is empty. -

- To add your first report into this dashboard, go to any - menu, switch to list or graph view, and click 'Add to - Dashboard' in the extended search options. -

- You can filter and group data before inserting into the - dashboard using the search options. -

-
-
-
- - - - - - - -
-
From a267d86b294315ef528e1a46465e5406827e8d62 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Thu, 30 Jan 2014 12:19:23 +0530 Subject: [PATCH 025/143] [rem,imp]:hr:remove hr dashboard and improve hr view bzr revid: sunilsharma.sharma07@gmail.com-20140130064923-35tvo8q3sy4n09vx --- addons/hr/__openerp__.py | 1 - addons/hr/board_hr_view.xml | 49 ------------------- addons/hr/hr_view.xml | 1 + addons/hr_evaluation/__openerp__.py | 1 - .../board_hr_evaluation_view.xml | 26 ---------- addons/hr_expense/__openerp__.py | 1 - addons/hr_expense/board_hr_expense_view.xml | 26 ---------- addons/hr_holidays/__openerp__.py | 1 - addons/hr_holidays/board_hr_holidays_view.xml | 27 ---------- addons/hr_recruitment/__openerp__.py | 1 - .../board_hr_recruitment_statistical_view.xml | 41 ---------------- addons/hr_timesheet_sheet/__openerp__.py | 1 - .../board_hr_timesheet_view.xml | 37 -------------- 13 files changed, 1 insertion(+), 212 deletions(-) delete mode 100644 addons/hr/board_hr_view.xml delete mode 100644 addons/hr_evaluation/board_hr_evaluation_view.xml delete mode 100644 addons/hr_expense/board_hr_expense_view.xml delete mode 100644 addons/hr_holidays/board_hr_holidays_view.xml delete mode 100644 addons/hr_recruitment/board_hr_recruitment_statistical_view.xml delete mode 100644 addons/hr_timesheet_sheet/board_hr_timesheet_view.xml diff --git a/addons/hr/__openerp__.py b/addons/hr/__openerp__.py index ef7225788f6..b06497874d0 100644 --- a/addons/hr/__openerp__.py +++ b/addons/hr/__openerp__.py @@ -52,7 +52,6 @@ You can manage: 'data': [ 'security/hr_security.xml', 'security/ir.model.access.csv', - 'board_hr_view.xml', 'hr_view.xml', 'process/hr_process.xml', 'hr_installer.xml', diff --git a/addons/hr/board_hr_view.xml b/addons/hr/board_hr_view.xml deleted file mode 100644 index 84db6128f41..00000000000 --- a/addons/hr/board_hr_view.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - board.hr.form - board.board - -
- - - - -
-
-
- - - Human Resources - board.board - form - form - menu - - -
-

- Human Resources dashboard is empty. -

- To add your first report into this dashboard, go to any - menu, switch to list or graph view, and click 'Add to - Dashboard' in the extended search options. -

- You can filter and group data before inserting into the - dashboard using the search options. -

-
-
-
- - -
-
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index eea2eb2ce41..620593d20a9 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -7,6 +7,7 @@ id="menu_hr_root" groups="base.group_hr_manager,base.group_hr_user,base.group_user" sequence="90"/> + - - - - - Interview Requests - hr.evaluation.interview - form - - [('is_evaluation' ,'=', True), ('user_id', '=', uid),('state','=','waiting_answer')] - - - - - board.hr.evaluation.form - board.board - - - - - - - - - - diff --git a/addons/hr_expense/__openerp__.py b/addons/hr_expense/__openerp__.py index f149bc0c7c6..928d1827d95 100644 --- a/addons/hr_expense/__openerp__.py +++ b/addons/hr_expense/__openerp__.py @@ -57,7 +57,6 @@ This module also uses analytic accounting and is compatible with the invoice on 'process/hr_expense_process.xml', 'security/ir_rule.xml', 'report/hr_expense_report_view.xml', - 'board_hr_expense_view.xml', 'hr_expense_installer_view.xml', ], 'demo': ['hr_expense_demo.xml'], diff --git a/addons/hr_expense/board_hr_expense_view.xml b/addons/hr_expense/board_hr_expense_view.xml deleted file mode 100644 index 3f896a76fae..00000000000 --- a/addons/hr_expense/board_hr_expense_view.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - My Expenses - hr.expense.expense - form - [('state','in',('confirm', 'accepted')),('user_id','=',uid)] - {'default_user_id': uid} - - - - - board.hr.expense.form - board.board - - - - - - - - - - diff --git a/addons/hr_holidays/__openerp__.py b/addons/hr_holidays/__openerp__.py index 5d57dbab87e..eec73fe07e5 100644 --- a/addons/hr_holidays/__openerp__.py +++ b/addons/hr_holidays/__openerp__.py @@ -57,7 +57,6 @@ A synchronization with an internal agenda (Meetings of the CRM module) is also p 'report/available_holidays_view.xml', 'wizard/hr_holidays_summary_department_view.xml', 'wizard/hr_holidays_summary_employees_view.xml', - 'board_hr_holidays_view.xml', ], 'demo': ['hr_holidays_demo.xml',], 'js': ['static/src/js/*.js'], diff --git a/addons/hr_holidays/board_hr_holidays_view.xml b/addons/hr_holidays/board_hr_holidays_view.xml deleted file mode 100644 index c90ee32c396..00000000000 --- a/addons/hr_holidays/board_hr_holidays_view.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - My Leaves - hr.holidays.status - form - tree,form - - {} - [] - - - - board.hr.holidays.leave.month.form - board.board - - - - - - - - - - diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py index cb1dd54e902..4697a9e6aac 100644 --- a/addons/hr_recruitment/__openerp__.py +++ b/addons/hr_recruitment/__openerp__.py @@ -52,7 +52,6 @@ You can define the different phases of interviews and easily rate the applicant 'security/hr_recruitment_security.xml', 'security/ir.model.access.csv', 'report/hr_recruitment_report_view.xml', - 'board_hr_recruitment_statistical_view.xml', 'hr_recruitment_installer_view.xml', 'res_config_view.xml', 'hr_recruitment_data.xml', diff --git a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml deleted file mode 100644 index 2bec80858a5..00000000000 --- a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - applicants.status.tree - hr.applicant - - - - - - - - - - - - - Applicants Status - ir.actions.act_window - hr.applicant - form - tree,form - [('stage_id.fold', '!=', True)] - - - - - board.hr.applicants.status.form - board.board - - - - - - - - - - diff --git a/addons/hr_timesheet_sheet/__openerp__.py b/addons/hr_timesheet_sheet/__openerp__.py index e92ab4400bd..0853e81690d 100644 --- a/addons/hr_timesheet_sheet/__openerp__.py +++ b/addons/hr_timesheet_sheet/__openerp__.py @@ -53,7 +53,6 @@ The validation can be configured in the company: 'hr_timesheet_sheet_view.xml', 'hr_timesheet_workflow.xml', 'process/hr_timesheet_sheet_process.xml', - 'board_hr_timesheet_view.xml', 'report/hr_timesheet_report_view.xml', 'report/timesheet_report_view.xml', 'wizard/hr_timesheet_current_view.xml', diff --git a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml deleted file mode 100644 index 145d118ceb7..00000000000 --- a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - hr.timesheet.sheet.sheet.graph - hr_timesheet_sheet.sheet - - - - - - - - - - My Total Attendances By Week - hr_timesheet_sheet.sheet - form - graph - [('user_id','=',uid)] - - - - - board.hr.timesheet.sheet.form - board.board - - - - - - - - - - From bd31663a172d97c06f79a679d9fc814ec212f002 Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Thu, 30 Jan 2014 15:37:35 +0530 Subject: [PATCH 026/143] [imp]:fleet:improve fleet view bzr revid: sunilsharma.sharma07@gmail.com-20140130100735-pjs8eo6hhgp3i7zg --- addons/fleet/__openerp__.py | 1 + addons/fleet/fleet_board_view.xml | 57 +++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 addons/fleet/fleet_board_view.xml diff --git a/addons/fleet/__openerp__.py b/addons/fleet/__openerp__.py index 3edf8ea8e0d..29c0e9d3ceb 100644 --- a/addons/fleet/__openerp__.py +++ b/addons/fleet/__openerp__.py @@ -54,6 +54,7 @@ Main Features 'fleet_view.xml', 'fleet_cars.xml', 'fleet_data.xml', + 'fleet_board_view.xml', ], 'images': ['images/costs_analysis.jpeg','images/indicative_costs_analysis.jpeg','images/vehicles.jpeg','images/vehicles_contracts.jpeg','images/vehicles_fuel.jpeg','images/vehicles_odometer.jpeg','images/vehicles_services.jpeg'], diff --git a/addons/fleet/fleet_board_view.xml b/addons/fleet/fleet_board_view.xml new file mode 100644 index 00000000000..e657d904d64 --- /dev/null +++ b/addons/fleet/fleet_board_view.xml @@ -0,0 +1,57 @@ + + + + + + Costs Analysis + fleet.vehicle.cost + + form + tree + {"search_default_parent_false" : True,"search_default_groupby_year" : True,"search_default_groupby_cost_type" : True,"search_default_groupby_cost_subtype" : True, "search_default_groupby_vehicle_id" : True,} + +

+ OpenERP helps you managing the costs for your different vehicles + Costs are generally created from services and contract and appears here. +

+

+ Thanks to the different filters, OpenERP can only print the effective + costs, sort them by type and by vehicle. +

+
+
+ + + Indicative Costs Analysis + fleet.vehicle.cost + + form + tree + {"search_default_parent_true" : True,"search_default_groupby_cost_subtype" : True,"search_default_groupby_cost_type" : True,"search_default_groupby_parent_id" : True,} + +

+ OpenERP helps you managing the costs for your different vehicles + Costs are generally created from services and contract and appears here. +

+

+ Thanks to the different filters, OpenERP can only print the effective + costs, sort them by type and by vehicle. +

+
+
+ + + + + + +
+
From 16c05082c8c062b02b566acc4d1bc9ec85476e3e Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Tue, 4 Mar 2014 12:38:10 +0530 Subject: [PATCH 027/143] [remove]:mrp dashboard file bzr revid: sunilsharma.sharma07@gmail.com-20140304070810-282vhtpg3mduym0j --- addons/mrp/__openerp__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py index 5b625486e9c..73985b7a4d8 100644 --- a/addons/mrp/__openerp__.py +++ b/addons/mrp/__openerp__.py @@ -69,7 +69,6 @@ Dashboard / Reports for MRP will include: 'process/service_product_process.xml', 'process/procurement_process.xml', 'report/mrp_report_view.xml', - 'board_manufacturing_view.xml', 'res_config_view.xml', 'views/report_mrporder.xml', From c2a92a5be2478960e18217dd8bbe951b0b74a2c8 Mon Sep 17 00:00:00 2001 From: "Randhir Mayatra (OpenERP)" Date: Tue, 4 Mar 2014 14:24:47 +0530 Subject: [PATCH 028/143] [IMP] remove menu_id from user model bzr revid: rajmyt@gmail.com-20140304085447-zknvpkfe4i3d8uku --- openerp/addons/base/base_data.xml | 1 - openerp/addons/base/res/res_users.py | 15 +-------------- openerp/addons/base/res/res_users_view.xml | 4 ---- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml index b6c12e111ff..96e13773cae 100644 --- a/openerp/addons/base/base_data.xml +++ b/openerp/addons/base/base_data.xml @@ -75,7 +75,6 @@ - -- Administrator diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index b2aba694078..fad3691a831 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -154,8 +154,6 @@ class res_users(osv.osv): "a change of password, the user has to login again."), 'signature': fields.text('Signature'), 'active': fields.boolean('Active'), - 'action_id': fields.many2one('ir.actions.actions', 'Home Action', help="If specified, this action will be opened at logon for this user, in addition to the standard menu."), - 'menu_id': fields.many2one('ir.actions.actions', 'Menu Action', help="If specified, the action will replace the standard menu for this user."), 'groups_id': fields.many2many('res.groups', 'res_groups_users_rel', 'uid', 'gid', 'Groups'), # Special behavior for this field: res.company.search() will only return the companies # available to the current user (should be the user's companies?), when the user_preference @@ -216,16 +214,6 @@ class res_users(osv.osv): return [c] return False - def _get_menu(self,cr, uid, context=None): - dataobj = self.pool.get('ir.model.data') - try: - model, res_id = dataobj.get_object_reference(cr, uid, 'base', 'action_menu_admin') - if model != 'ir.actions.act_window': - return False - return res_id - except ValueError: - return False - def _get_group(self,cr, uid, context=None): dataobj = self.pool.get('ir.model.data') result = [] @@ -243,7 +231,6 @@ class res_users(osv.osv): 'password': '', 'active': True, 'customer': False, - 'menu_id': _get_menu, 'company_id': _get_company, 'company_ids': _get_companies, 'groups_id': _get_group, @@ -251,7 +238,7 @@ class res_users(osv.osv): } # User can write on a few of his own fields (but not his groups for example) - SELF_WRITEABLE_FIELDS = ['password', 'signature', 'action_id', 'company_id', 'email', 'name', 'image', 'image_medium', 'image_small', 'lang', 'tz'] + SELF_WRITEABLE_FIELDS = ['password', 'signature', 'company_id', 'email', 'name', 'image', 'image_medium', 'image_small', 'lang', 'tz'] # User can read a few of his own fields SELF_READABLE_FIELDS = ['signature', 'company_id', 'login', 'email', 'name', 'image', 'image_medium', 'image_small', 'lang', 'tz', 'tz_offset', 'groups_id', 'partner_id', '__last_update'] diff --git a/openerp/addons/base/res/res_users_view.xml b/openerp/addons/base/res/res_users_view.xml index ba603c7a0f0..bb47f022a08 100644 --- a/openerp/addons/base/res/res_users_view.xml +++ b/openerp/addons/base/res/res_users_view.xml @@ -199,10 +199,6 @@ - - - - From 8c666af35c9c7b79373b999d1df2d4ba350e8f5d Mon Sep 17 00:00:00 2001 From: "Randhir Mayatra (OpenERP)" Date: Tue, 4 Mar 2014 14:26:59 +0530 Subject: [PATCH 029/143] [IMP] remove menu_id from user model bzr revid: rajmyt@gmail.com-20140304085659-lufot16ae59y1jca --- addons/web/controllers/main.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index a9f56a2099c..d1e450cc34f 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -1054,16 +1054,7 @@ class Menu(http.Controller): """ s = request.session Menus = s.model('ir.ui.menu') - # If a menu action is defined use its domain to get the root menu items - user_menu_id = s.model('res.users').read([s.uid], ['menu_id'], - request.context)[0]['menu_id'] - menu_domain = [('parent_id', '=', False)] - if user_menu_id: - domain_string = s.model('ir.actions.act_window').read( - [user_menu_id[0]], ['domain'],request.context)[0]['domain'] - if domain_string: - menu_domain = ast.literal_eval(domain_string) return Menus.search(menu_domain, 0, False, False, request.context) From 9b74e8054eaafa2ec1a21d9e9291b24bdb81b2d2 Mon Sep 17 00:00:00 2001 From: "Randhir Mayatra (OpenERP)" Date: Tue, 4 Mar 2014 15:20:57 +0530 Subject: [PATCH 030/143] [IMP] remove fleet dashboard bzr revid: rajmyt@gmail.com-20140304095057-3i12fqxqz673z6i8 --- addons/fleet/fleet_board_view.xml | 99 ------------------------------- 1 file changed, 99 deletions(-) diff --git a/addons/fleet/fleet_board_view.xml b/addons/fleet/fleet_board_view.xml index c4732d9a0f4..9530ee0dd38 100644 --- a/addons/fleet/fleet_board_view.xml +++ b/addons/fleet/fleet_board_view.xml @@ -1,56 +1,6 @@ - - Fuel Costs by Month - fleet.vehicle.cost - - form - tree - ['&',('parent_id','=',False),('cost_type','=','fuel')] - - - - Services Costs by Month - fleet.vehicle.cost - - form - tree - ['&',('parent_id','=',False),('cost_type','=','services')] - - - - Contracts Costs by Month - fleet.vehicle.cost - - form - tree - ['&',('parent_id','=',False),('cost_type','=','contract')] - - - - Costs by Month - fleet.vehicle.cost - - form - tree - [('parent_id','=',False)] - - - - Vehicles with alerts - fleet.vehicle - - form - tree - ['|',('contract_renewal_due_soon','=',True),('contract_renewal_overdue','=',True)] - -

- Here are displayed vehicles for which one or more contracts need to be renewed. If you see this message, then there is no contracts to renew. -

-
-
- Costs Analysis fleet.vehicle.cost @@ -88,55 +38,6 @@

- - - board.fleet.form - board.board - -
- - - - - - - - - - - -
-
-
- - - Fleet - board.board - form - form - menu - - -
-

- Fleet dashboard is empty. -

- To add your first report into this dashboard, go to any - menu, switch to list or graph view, and click 'Add to - Dashboard' in the extended search options. -

- You can filter and group data before inserting into the - dashboard using the search options. -

-
-
-
- - From 84ed653322aa379ace94081dfde12ecc96bc485e Mon Sep 17 00:00:00 2001 From: "Randhir Mayatra (OpenERP)" Date: Tue, 4 Mar 2014 17:59:31 +0530 Subject: [PATCH 031/143] [IMP] remove tree view from task_hours_per_month report bzr revid: rajmyt@gmail.com-20140304122931-ektojfe9yvlxeiba --- .../report/task_report_view.xml | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/addons/project_timesheet/report/task_report_view.xml b/addons/project_timesheet/report/task_report_view.xml index 2c8a34c656e..37d7b1486f9 100644 --- a/addons/project_timesheet/report/task_report_view.xml +++ b/addons/project_timesheet/report/task_report_view.xml @@ -9,20 +9,6 @@ - - report.timesheet.task.user.tree - report.timesheet.task.user - - - - - - - - - - - report.timesheet.task.user.search report.timesheet.task.user @@ -55,7 +41,7 @@ Task Hours Per Month report.timesheet.task.user form - tree,graph + graph {'search_default_year':1,'search_default_month':1, 'search_default_group_user_id':1} Date: Tue, 4 Mar 2014 18:37:27 +0530 Subject: [PATCH 032/143] [IMP] remove list view from member analysis report bzr revid: rajmyt@gmail.com-20140304130727-heez8ub1x4jq4dxw --- addons/membership/report/report_membership_view.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml index 50b579d9ec2..100ec32043f 100644 --- a/addons/membership/report/report_membership_view.xml +++ b/addons/membership/report/report_membership_view.xml @@ -49,6 +49,7 @@ Members Analysis report.membership form + graph {"search_default_year":1,"search_default_member":1, 'search_default_Revenue':1, 'search_default_this_month':1, 'search_default_salesman':1,'group_by_no_leaf':1} From 60bdd78706336fa0221264f1675a8645bc2a99e9 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Thu, 20 Mar 2014 09:30:55 +0100 Subject: [PATCH 033/143] [IMP] website tour: refactoring and change api for create tour and test bzr revid: chm@openerp.com-20140320083055-z5ys4oey5brd439v --- .../static/src/js/website.tour.banner.js | 207 +++--- addons/website/static/src/js/website.tour.js | 689 +++++++----------- .../static/src/js/website.tour.blog.js | 210 +++--- .../static/src/js/website.tour.event.js | 206 +++--- .../static/src/js/website.tour.event_sale.js | 129 ++-- .../static/src/js/website.tour.sale.js | 159 ++-- .../static/src/js/website.tour.shop.js | 254 +++---- 7 files changed, 836 insertions(+), 1018 deletions(-) diff --git a/addons/website/static/src/js/website.tour.banner.js b/addons/website/static/src/js/website.tour.banner.js index 9c8afcd61e5..65099d03986 100644 --- a/addons/website/static/src/js/website.tour.banner.js +++ b/addons/website/static/src/js/website.tour.banner.js @@ -4,117 +4,106 @@ var website = openerp.website; var _t = openerp._t; - website.EditorBar.include({ - start: function () { - this.registerTour(new website.Tour.Banner(this)); - return this._super(); - }, - }); - - website.Tour.Banner = website.Tour.extend({ + website.Tour.register({ id: 'banner', - name: "Build a page", + name: _t("Build a page"), path: '/page/website.homepage', - init: function () { - var self = this; - self.steps = [ - { - title: _t("Welcome to your website!"), - content: _t("This tutorial will guide you to build your home page. We will start by adding a banner."), - popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, - }, - { - waitNot: '.popover.tour', - element: 'button[data-action=edit]', - placement: 'bottom', - title: _t("Edit this page"), - content: _t("Every page of your website can be modified through the Edit button."), - popover: { fixed: true }, - }, - { - element: 'button[data-action=snippet]', - placement: 'bottom', - title: _t("Insert building blocks"), - content: _t("Click here to insert blocks of centent in the page."), - popover: { fixed: true }, - }, - { - snippet: '#snippet_structure .oe_snippet:first', - placement: 'bottom', - title: _t("Drag & Drop a Banner"), - content: _t("Drag the Banner block and drop it in your page."), - popover: { fixed: true }, - }, - { - waitFor: '.oe_overlay_options .oe_options:visible', - element: '#wrap .carousel:first .carousel-caption > div', - placement: 'top', - title: _t("Customize banner's text"), - content: _t("Click in the text and start editing it."), - popover: { next: _t("Continue") }, - }, - { - element: '.oe_overlay_options .oe_options:visible', - placement: 'left', - title: _t("Customize the banner"), - content: _t("Customize any block through this menu. Try to change the background of the banner."), - popover: { next: _t("Continue") }, - }, - { - waitNot: '.popover.tour', - element: 'button[data-action=snippet]', - placement: 'bottom', - title: _t("Add Another Block"), - content: _t("Let's add another building block to your page."), - popover: { fixed: true }, - }, - { - snippet: '#snippet_structure .oe_snippet:eq(6)', - placement: 'bottom', - title: _t("Drag & Drop This Block"), - content: _t("Drag the 'Features' block and drop it below the banner."), - popover: { fixed: true }, - }, - { - waitFor: '.oe_overlay_options .oe_options:visible', - element: 'button[data-action=save]', - placement: 'right', - title: _t("Save your modifications"), - content: _t("Publish your page by clicking on the 'Save' button."), - popover: { fixed: true }, - }, - { - waitFor: 'button[data-action=edit]:visible', - title: _t("Good Job!"), - content: _t("Well done, you created your homepage."), - popover: { next: _t("Continue") }, - }, - { - waitNot: '.popover.tour', - element: 'a[data-action=show-mobile-preview]', - placement: 'bottom', - title: _t("Test Your Mobile Version"), - content: _t("Let's check how your homepage looks like on mobile devices."), - popover: { fixed: true }, - }, - { - element: '.modal:has(#mobile-viewport) button[data-dismiss=modal]', - placement: 'right', - title: _t("Check Mobile Preview"), - content: _t("Scroll to check rendering and then close the mobile preview."), - popover: { next: _t("Continue") }, - }, - { - waitNot: '.modal', - element: '#content-menu-button', - placement: 'left', - title: _t("Add new pages and menus"), - content: _t("The 'Content' menu allows you to add pages or add the top menu."), - popover: { next: _t("Close Tutorial") }, - }, - ]; - return this._super(); - }, + steps: [ + { + title: _t("Welcome to your website!"), + content: _t("This tutorial will guide you to build your home page. We will start by adding a banner."), + popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, + }, + { + waitNot: '.popover.tour', + element: 'button[data-action=edit]', + placement: 'bottom', + title: _t("Edit this page"), + content: _t("Every page of your website can be modified through the Edit button."), + popover: { fixed: true }, + }, + { + element: 'button[data-action=snippet]', + placement: 'bottom', + title: _t("Insert building blocks"), + content: _t("Click here to insert blocks of centent in the page."), + popover: { fixed: true }, + }, + { + snippet: '#snippet_structure .oe_snippet:first', + placement: 'bottom', + title: _t("Drag & Drop a Banner"), + content: _t("Drag the Banner block and drop it in your page."), + popover: { fixed: true }, + }, + { + waitFor: '.oe_overlay_options .oe_options:visible', + element: '#wrap .carousel:first .carousel-caption > div', + placement: 'top', + title: _t("Customize banner's text"), + content: _t("Click in the text and start editing it."), + popover: { next: _t("Continue") }, + }, + { + element: '.oe_overlay_options .oe_options:visible', + placement: 'left', + title: _t("Customize the banner"), + content: _t("Customize any block through this menu. Try to change the background of the banner."), + popover: { next: _t("Continue") }, + }, + { + waitNot: '.popover.tour', + element: 'button[data-action=snippet]', + placement: 'bottom', + title: _t("Add Another Block"), + content: _t("Let's add another building block to your page."), + popover: { fixed: true }, + }, + { + snippet: '#snippet_structure .oe_snippet:eq(6)', + placement: 'bottom', + title: _t("Drag & Drop This Block"), + content: _t("Drag the 'Features' block and drop it below the banner."), + popover: { fixed: true }, + }, + { + waitFor: '.oe_overlay_options .oe_options:visible', + element: 'button[data-action=save]', + placement: 'right', + title: _t("Save your modifications"), + content: _t("Publish your page by clicking on the 'Save' button."), + popover: { fixed: true }, + }, + { + waitFor: 'button[data-action=edit]:visible', + title: _t("Good Job!"), + content: _t("Well done, you created your homepage."), + popover: { next: _t("Continue") }, + }, + { + waitNot: '.popover.tour', + element: 'a[data-action=show-mobile-preview]', + placement: 'bottom', + title: _t("Test Your Mobile Version"), + content: _t("Let's check how your homepage looks like on mobile devices."), + popover: { fixed: true }, + }, + { + element: '.modal:has(#mobile-viewport) button[data-dismiss=modal]', + placement: 'right', + title: _t("Check Mobile Preview"), + content: _t("Scroll to check rendering and then close the mobile preview."), + popover: { next: _t("Continue") }, + }, + { + waitNot: '.modal', + element: '#content-menu-button', + placement: 'left', + title: _t("Add new pages and menus"), + content: _t("The 'Content' menu allows you to add pages or add the top menu."), + popover: { next: _t("Close Tutorial") }, + }, + ] }); }()); diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index b7e55fe166b..c5ccd1f42c9 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -6,7 +6,7 @@ if (typeof openerp === "undefined") { var error = "openerp is undefined" + "\nhref: " + window.location.href + "\nreferrer: " + document.referrer - + "\nlocalStorage: " + JSON.stringify(window.localStorage); + + "\nlocalStorage: " + window.localStorage.getItem("tour"); if (typeof $ !== "undefined") { error += '\n\n' + $("body").html(); } @@ -36,27 +36,24 @@ function bootstrap_tour_stub () { } } - - if (website.EditorBar) { website.EditorBar.include({ tours: [], start: function () { var self = this; var menu = $('#help-menu'); - _.each(this.tours, function (tour) { + _.each(website.Tour.tours, function (tour) { + if (tour.mode != "tutorial") { + return; + } var $menuItem = $($.parseHTML('
  • '+tour.name+'
  • ')); $menuItem.click(function () { - tour.reset(); - tour.run(); + website.Tour.reset(); + website.Tour.run(tour.id); }); menu.append($menuItem); }); return this._super(); - }, - registerTour: function (tour) { - website.Tour.add(tour); - this.tours.push(tour); } }); } @@ -94,434 +91,312 @@ $.ajaxSetup({ } }); -website.Tour = openerp.Class.extend({ - steps: [], - defaultDelay: 50, //ms - defaultOverLaps: 5000, //ms - localStorage: window.localStorage, - init: function () {}, - run: function (automatic) { - this.reset(); +///////////////////////////////////////////////// - for (var k in this.localStorage) { - if (!k.indexOf("tour-") && k.indexOf("-test") > -1) return; + +var localStorage = window.localStorage; + +website.Tour = {}; +website.Tour.tours = {}; +website.Tour.state = null; +website.Tour.register = function (tour) { + website.Tour.tours[tour.id] = tour; +}; +website.Tour.run = function (tour_id, mode) { + if (localStorage.getItem("tour")) { // only one test running + return; + } + var tour = website.Tour.tours[tour_id]; + website.Tour.save_state(tour.id, mode || tour.mode, 0); + if (tour.path) { + window.location.href = "/"+website.Tour.getLang()+tour.path; + } +}; +website.Tour.registerSteps = function (tour) { + if (tour.register) { + return; + } + tour.register = true; + + for (var index=0, len=tour.steps.length; index 0 && tour.steps[index-1] && + tour.steps[index-1].popover && tour.steps[index-1].popover.next) { + step.waitNot = '.popover.tour:visible'; + } + if (!step.waitFor && index > 0 && tour.steps[index-1].snippet) { + step.waitFor = '.oe_overlay_options .oe_options:visible'; } - website.Tour.busy = true; + if (!step.element) step.orphan = true; - if (automatic) { - this.localStorage.setItem("tour-"+this.id+"-test-automatic", true); - } else { - this.localStorage.removeItem("tour-"+this.id+"-test-automatic"); + var snippet = step.element.match(/#oe_snippets (.*) \.oe_snippet_thumbnail/); + if (snippet) { + step.snippet = snippet[1]; + } else if (step.snippet) { + step.element = '#oe_snippets '+step.snippet+' .oe_snippet_thumbnail'; } - this.automatic = automatic; + } + if (tour.steps[index-1] && + tour.steps[index-1].popover && tour.steps[index-1].popover.next) { + var step = { + step_id: index, + waitNot: '.popover.tour:visible' + }; + tour.steps.push(step); + } - if (this.path) { - // redirect to begin of the tour in function of the language - if (!this.testUrl(this.path+"(#.*)?$")) { - var path = this.path.split('#'); - window.location.href = "/"+this.getLang()+path[0] + "#tutorial."+this.id+"=true&" + path.slice(1, path.length).join("#"); - return; - } - } - - var self = this; - this.localStorage.setItem("tour-"+this.id+"-test", 0); - website.Tour.waitReady.call(this, function () {self._running();}); - }, - running: function () { - var self = this; - if (+this.localStorage.getItem("tour-"+this.id+"-test") >= this.steps.length-1) { - this.endTour(); - return; - } - - if (website.Tour.is_busy()) return; - - // launch tour with url - this.checkRunningUrl(); - - // mark tour as busy (only one test running) - if (this.localStorage.getItem("tour-"+this.id+"-test") != null) { - website.Tour.busy = true; - this.automatic = !!this.localStorage.getItem("tour-"+this.id+"-test-automatic"); - } - - if (!this.testPathUrl()) { - if (this.automatic) { - this.timer = setTimeout(function () { - self.reset(); - throw new Error("Wrong url for running " + self.id - + '\ntestPath: ' + self.testPath - + '\nhref: ' + window.location.href - + "\nreferrer: " + document.referrer - ); - },this.defaultOverLaps); - } - return; - } - - var self = this; - website.Tour.waitReady.call(this, function () {self._running();}); - }, - _running: function () { - var stepId = this.localStorage.getItem("tour-"+this.id+"-test"); - - if (stepId != null) { - this.registerTour(); - this.nextStep(stepId, this.automatic ? this.autoNextStep : null, this.automatic ? this.defaultOverLaps : null); - } - }, - - reset: function () { - website.Tour.busy = false; - for (var k in this.steps) { - this.steps[k].busy = false; - } - clearTimeout(self.timer); - clearTimeout(self.testtimer); - - for (var k in this.localStorage) { - if (!k.indexOf("tour-") || !k.indexOf(this.id)) { - this.localStorage.removeItem(k); - } - } - - $('.popover.tour').remove(); - }, - - getLang: function () { - return $("html").attr("lang").replace(/-/, '_'); - }, - testUrl: function (url) { - return new RegExp("(/"+this.getLang()+")?"+url, "i").test(window.location.href); - }, - testPathUrl: function () { - if (!this.testPath || this.testUrl(this.testPath)) return true; - }, - checkRunningUrl: function () { - if (window.location.hash.indexOf("tutorial."+this.id+"=true") > -1) { - this.localStorage.setItem("tour-"+this.id+"-test", 0); - window.location.hash = window.location.hash.replace(/tutorial.+=true&?/, ''); - } - }, - - registerTour: function () { - if (this.automatic) { - bootstrap_tour_stub(); - } - this.tour = new Tour({ + // rendering bootstrap tour and popover + if (tour.mode != "test") { + tour.tour = new Tour({ name: this.id, - storage: this.tourStorage, + storage: localStorage, keyboard: false, template: this.popover(), onHide: function () { window.scrollTo(0, 0); } }); - this.registerSteps(); - }, - registerSteps: function () { - for (var index=0, len=this.steps.length; index 0 && this.steps[index-1] && - this.steps[index-1].popover && this.steps[index-1].popover.next) { - step.waitNot = '.popover.tour:visible'; - } - if (!step.waitFor && index > 0 && this.steps[index-1].snippet) { - step.waitFor = '.oe_overlay_options .oe_options:visible'; - } - + for (var index=0, len=tour.steps.length; index -1) { + tour_id = window.location.href.match(/#tutorial\.(.*)=true/)[1]; + mode = "tutorial"; + step_id = 0; + } + if (!tour_id) { + return; + } + var tour = website.Tour.tours[tour_id]; + return {'tour': tour, 'tour_id': tour_id, 'mode': mode, 'step_id': step_id}; +}; +website.Tour.error = function (tour, step, message) { + website.Tour.reset(); + throw new Error(message + + + "\ntour:" + tour.id + + + "\nstep:" + step.id + ": '" + (step._title || step.title) + "'" + + '\nhref: ' + window.location.href + + '\nreferrer: ' + document.referrer + + '\nelement: ' + Boolean(!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) + + '\nwaitNot: ' + Boolean(!step.waitNot || !$(step.waitNot).size()) + + '\nwaitFor: ' + Boolean(!step.waitFor || $(step.waitFor).size()) + + '\n\n' + $("body").html() + ); +}; +website.Tour.lists = function () { + var tour_ids = []; + for (var k in website.Tour.tours) { + tour_ids.push(k); + } + return tour_ids; +}; +website.Tour.save_state = function (tour_id, mode, step_id) { + localStorage.setItem("tour", '{tour_id:'+tour_id+', mode:'+mode+', step_id:'+step_id+'}'); +}; +website.Tour.reset = function () { + var running = website.Tour.get_state(); + for (var k in running.tour.steps) { + running.tour.steps[k].busy = false; + } + localStorage.removeItem("tour"); + clearTimeout(website.Tour.timer); + clearTimeout(website.Tour.testtimer); - if (this.steps[index-1] && - this.steps[index-1].popover && this.steps[index-1].popover.next) { - var step = { - stepId: ""+index, - waitNot: '.popover.tour:visible' - }; - this.steps.push(step); - } + $('.popover.tour').remove(); +}; +website.Tour.running = function () { + var running = website.Tour.get_state(); + website.Tour.registerSteps(running.tour); + website.Tour.nextStep( running.tour, running.step_id ); +}; - this.tour.addSteps(this.steps); - }, +website.Tour.timer = null; +website.Tour.testtimer = null; +website.Tour.defaultDelay = 50; +website.Tour.check = function (step) { + return (step && + (!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) && + (!step.waitNot || !$(step.waitNot).size()) && + (!step.waitFor || $(step.waitFor).size())); +}; +website.Tour.waitNextStep = function (tour, step, overlaps) { + var time = new Date().getTime(); + var timer; - popoverTitle: function (options) { - try { - return openerp.qweb.render('website.tour_popover_title', options); - } catch (e) { - if (!this.automatic) throw e; - return options.title; - } - }, - popover: function (options) { - try { - return openerp.qweb.render('website.tour_popover', options); - } catch (e) { - if (!this.automatic) throw e; - return ""; - } - }, + window.onbeforeunload = function () { + clearTimeout(website.Tour.timer); + clearTimeout(website.Tour.testtimer); + }; - timer: null, - testtimer: null, - check: function (step) { - return (step && - (!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) && - (!step.waitNot || !$(step.waitNot).size()) && - (!step.waitFor || $(step.waitFor).size())); - }, - waitNextStep: function (step, callback, overlaps) { - var self = this; - var time = new Date().getTime(); - var timer; - - window.onbeforeunload = function () { - clearTimeout(self.timer); - clearTimeout(self.testtimer); - }; - - // check popover activity - $(".popover.tour button") - .off() - .on("click", function () { - $(".popover.tour").remove(); - if (step.busy) return; - if (!$(this).is("[data-role='next']")) { - clearTimeout(self.timer); - step.busy = true; - self.tour.end(); - self.endTour(callback); - } - }); - - function checkNext () { - clearTimeout(self.timer); + // check popover activity + $(".popover.tour button") + .off() + .on("click", function () { + $(".popover.tour").remove(); if (step.busy) return; - if (self.check(step)) { + if (!$(this).is("[data-role='next']")) { + clearTimeout(website.Tour.timer); step.busy = true; - // use an other timeout for cke dom loading - setTimeout(function () { - self.nextStep(step.stepId, callback, overlaps); - }, self.defaultDelay); - } else if (!overlaps || new Date().getTime() - time < overlaps) { - if (self.current.element) { - var $popover = $(".popover.tour"); - if(!$(self.current.element).is(":visible")) { - $popover.data("hide", true).fadeOut(300); - } else if($popover.data("hide")) { - $popover.data("hide", false).fadeIn(150); - } + if (tour.tour) { + tour.tour.end(); } - self.timer = setTimeout(checkNext, self.defaultDelay); - } else { - self.reset(); - throw new Error("Can't arrive to step " + step.stepId + ": '" + step._title + "'" - + '\nhref: ' + window.location.href - + '\nelement: ' + Boolean(!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) - + '\nwaitNot: ' + Boolean(!step.waitNot || !$(step.waitNot).size()) - + '\nwaitFor: ' + Boolean(!step.waitFor || $(step.waitFor).size()) - + '\n\n' + $("body").html() - ); + tour.endTour(tour); } - } - checkNext(); - }, - step: function (stepId) { - var steps = this.steps.slice(0,this.steps.length), - step; - while (step = steps.shift()) { - if (!stepId || step.stepId === stepId) - return step; - } - return null; - }, - next: function (stepId) { - var steps = this.steps.slice(0,this.steps.length), - step, next, index=0; - while (step = steps.shift()) { - if (!stepId || step.stepId === stepId) { - // clear popover (fix for boostrap tour if the element is removed before destroy popover) - $(".popover.tour").remove(); - // go to step in bootstrap tour - this.tour.goto(index); - if (step.onload) step.onload(); - next = steps.shift(); - break; - } - index++; - } - return next; - }, - nextStep: function (stepId, callback, overlaps) { - var self = this; - if (!this.localStorage.getItem("tour-"+this.id+"-test")) return; + }); - this.localStorage.setItem("tour-"+this.id+"-test", stepId || 0); - - this.current = this.step(stepId); - var next = this.next(stepId); - - if (next) { + function checkNext () { + clearTimeout(website.Tour.timer); + if (step.busy) return; + if (website.Tour.check(step)) { + step.busy = true; + // use an other timeout for cke dom loading setTimeout(function () { - self.waitNextStep(next, callback, overlaps); - if (callback) setTimeout(function(){callback.call(self, next);}, self.defaultDelay); - }, next && next.wait || 0); - } else { - this.endTour(); - } - }, - endTour: function () { - var test = parseInt(this.localStorage.getItem("tour-"+this.id+"-test"),10) >= this.steps.length-1; - this.reset(); - if (test) { - console.log('ok'); - } else { - console.log('error'); - } - }, - autoNextStep: function () { - var self = this; - clearTimeout(self.testtimer); - - function autoStep () { - var step = self.current; - if (!step) return; - - if (step.autoComplete) { - step.autoComplete(tour); - } - - var $popover = $(".popover.tour"); - if ($popover.find("button[data-role='next']:visible").size()) { - $popover.find("button[data-role='next']:visible").click(); - $popover.remove(); - } - - var $element = $(step.element); - if (!$element.size()) return; - - if (step.snippet) { - - var selector = '#oe_snippets '+step.snippet+' .oe_snippet_thumbnail'; - self.autoDragAndDropSnippet(selector); - - } else if (step.element.match(/#oe_snippets .* \.oe_snippet_thumbnail/)) { - - self.autoDragAndDropSnippet($element); - - } else if (step.sampleText) { - - $element.trigger($.Event("keydown", { srcElement: $element })); - if ($element.is("input") ) { - $element.val(step.sampleText); - } if ($element.is("select")) { - $element.find("[value='"+step.sampleText+"'], option:contains('"+step.sampleText+"')").attr("selected", true); - $element.val(step.sampleText); - } else { - $element.html(step.sampleText); + website.Tour.nextStep(tour, step, overlaps); + }, website.Tour.defaultDelay); + } else if (!overlaps || new Date().getTime() - time < overlaps) { + if (self.current.element) { + var $popover = $(".popover.tour"); + if(!$(self.current.element).is(":visible")) { + $popover.data("hide", true).fadeOut(300); + } else if($popover.data("hide")) { + $popover.data("hide", false).fadeIn(150); } - setTimeout(function () { - $element.trigger($.Event("keyup", { srcElement: $element })); - $element.trigger($.Event("change", { srcElement: $element })); - }, self.defaultDelay<<1); - - } else if ($element.is(":visible")) { - - $element.trigger($.Event("mouseenter", { srcElement: $element[0] })); - $element.trigger($.Event("mousedown", { srcElement: $element[0] })); - - var evt = document.createEvent("MouseEvents"); - evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - $element[0].dispatchEvent(evt); - - // trigger after for step like: mouseenter, next step click on button display with mouseenter - setTimeout(function () { - $element.trigger($.Event("mouseup", { srcElement: $element[0] })); - $element.trigger($.Event("mouseleave", { srcElement: $element[0] })); - }, 1000); } - } - self.testtimer = setTimeout(autoStep, 100); - }, - autoDragAndDropSnippet: function (selector) { - var $thumbnail = $(selector).first(); - var thumbnailPosition = $thumbnail.position(); - $thumbnail.trigger($.Event("mousedown", { which: 1, pageX: thumbnailPosition.left, pageY: thumbnailPosition.top })); - $thumbnail.trigger($.Event("mousemove", { which: 1, pageX: document.body.scrollWidth/2, pageY: document.body.scrollHeight/2 })); - var $dropZone = $(".oe_drop_zone").first(); - var dropPosition = $dropZone.position(); - $dropZone.trigger($.Event("mouseup", { which: 1, pageX: dropPosition.left, pageY: dropPosition.top })); - }, - -}); - - -website.Tour.tours = {}; -website.Tour.busy = false; -website.Tour.add = function (tour) { - website.Tour.waitReady(function () { - tour = tour.id ? tour : new tour(); - if (!website.Tour.tours[tour.id]) { - website.Tour.tours[tour.id] = tour; - tour.running(); - } - }); -}; -website.Tour.get = function (id) { - return website.Tour.tours[id]; -}; -website.Tour.each = function (callback) { - website.Tour.waitReady(function () { - for (var k in website.Tour.tours) { - callback.call(website.Tour.tours[k]); - } - }); -}; -website.Tour.waitReady = function (callback) { - var self = this; - $(document).ready(function () { - if ($.ajaxBusy) { - $(document).ajaxStop(function() { - setTimeout(function () { - callback.call(self); - },0); - }); - } - else { - setTimeout(function () { - callback.call(self); - },0); - } - }); -}; -website.Tour.run_test = function (id) { - website.Tour.waitReady(function () { - if (!website.Tour.is_busy()) { - website.Tour.tours[id].run(true); - } - }); -}; -website.Tour.is_busy = function () { - for (var k in this.localStorage) { - if (!k.indexOf("tour-")) { - return k; + website.Tour.timer = setTimeout(checkNext, website.Tour.defaultDelay); + } else { + website.Tour.error(tour, step, "Can't arrive to the next step"); } } - return website.Tour.busy; + checkNext(); }; +website.Tour.nextStep = function (tour, step, overlaps) { + var state = website.Tour.get_state(); + website.Tour.save_state(tour.id, state.mode, step.id); + + // clear popover (fix for boostrap tour if the element is removed before destroy popover) + $(".popover.tour").remove(); + // go to step in bootstrap tour + tour.tour.goto(step.id); + step.onload(); + var next = tour.steps[step.id+1]; + + if (next) { + setTimeout(function () { + website.Tour.waitNextStep(tour, next, overlaps); + if (state.mode === "test") { + setTimeout(function(){ + website.Tour.autoNextStep(tour, step); + }, website.Tour.defaultDelay); + } + }, next && next.wait || 0); + } else { + website.Tour.endTour(tour); + } +}; +website.Tour.endTour = function (tour) { + var state = website.Tour.get_state(); + var test = state.step_id >= tour.steps.length-1; + this.reset(); + if (test) { + console.log('ok'); + } else { + console.log('error'); + } +}; +website.Tour.autoNextStep = function (tour, step) { + clearTimeout(website.Tour.testtimer); + + function autoStep () { + if (!step) return; + + if (step.autoComplete) { + step.autoComplete(tour); + } + + var $popover = $(".popover.tour"); + if ($popover.find("button[data-role='next']:visible").size()) { + $popover.find("button[data-role='next']:visible").click(); + $popover.remove(); + } + + var $element = $(step.element); + if (!$element.size()) return; + + if (step.snippet) { + + website.Tour.autoDragAndDropSnippet($element); + + } else if (step.sampleText) { + + $element.trigger($.Event("keydown", { srcElement: $element })); + if ($element.is("input") ) { + $element.val(step.sampleText); + } if ($element.is("select")) { + $element.find("[value='"+step.sampleText+"'], option:contains('"+step.sampleText+"')").attr("selected", true); + $element.val(step.sampleText); + } else { + $element.html(step.sampleText); + } + setTimeout(function () { + $element.trigger($.Event("keyup", { srcElement: $element })); + $element.trigger($.Event("change", { srcElement: $element })); + }, website.Tour.defaultDelay<<1); + + } else if ($element.is(":visible")) { + + $element.trigger($.Event("mouseenter", { srcElement: $element[0] })); + $element.trigger($.Event("mousedown", { srcElement: $element[0] })); + + var evt = document.createEvent("MouseEvents"); + evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); + $element[0].dispatchEvent(evt); + + // trigger after for step like: mouseenter, next step click on button display with mouseenter + setTimeout(function () { + $element.trigger($.Event("mouseup", { srcElement: $element[0] })); + $element.trigger($.Event("mouseleave", { srcElement: $element[0] })); + }, 1000); + } + } + website.Tour.testtimer = setTimeout(autoStep, 100); +}; +website.Tour.autoDragAndDropSnippet = function (selector) { + var $thumbnail = $(selector).first(); + var thumbnailPosition = $thumbnail.position(); + $thumbnail.trigger($.Event("mousedown", { which: 1, pageX: thumbnailPosition.left, pageY: thumbnailPosition.top })); + $thumbnail.trigger($.Event("mousemove", { which: 1, pageX: document.body.scrollWidth/2, pageY: document.body.scrollHeight/2 })); + var $dropZone = $(".oe_drop_zone").first(); + var dropPosition = $dropZone.position(); + $dropZone.trigger($.Event("mouseup", { which: 1, pageX: dropPosition.left, pageY: dropPosition.top })); +}; + +website.ready(website.Tour.running); }()); diff --git a/addons/website_blog/static/src/js/website.tour.blog.js b/addons/website_blog/static/src/js/website.tour.blog.js index 3470e2e383b..050bf549225 100644 --- a/addons/website_blog/static/src/js/website.tour.blog.js +++ b/addons/website_blog/static/src/js/website.tour.blog.js @@ -4,117 +4,105 @@ var website = openerp.website; var _t = openerp._t; - website.EditorBar.include({ - start: function () { - this.registerTour(new website.Tour.Blog(this)); - return this._super(); - }, - }); - - website.Tour.Blog = website.Tour.extend({ - id: 'blog', - name: "Create a blog post", - testPath: '/(blog|blogpost)', - init: function () { - var self = this; - self.steps = [ - { - title: _t("New Blog Post"), - content: _t("Let's go through the first steps to write beautiful blog posts."), - popover: { next: _t("Start Tutorial"), end: _t("Skip") }, - }, - { - element: '#content-menu-button', - placement: 'left', - title: _t("Add Content"), - content: _t("Use this 'Content' menu to create a new blog post like any other document (page, menu, products, event, ...)."), - popover: { fixed: true }, - }, - { - element: 'a[data-action=new_blog_post]', - placement: 'left', - title: _t("New Blog Post"), - content: _t("Select this menu item to create a new blog post."), - popover: { fixed: true }, - }, - { - element: '.modal:has(#editor_new_blog) button.btn-primary', - placement: 'right', - title: _t("Create Blog Post"), - content: _t("Click Continue to create the blog post."), - }, - { - waitFor: 'body:has(button[data-action=save]:visible):has(.js_blog)', - title: _t("Blog Post Created"), - content: _t("This is your new blog post. Let's edit it."), - popover: { next: _t("Continue") }, - }, - { - element: 'h1[data-oe-expression="blog_post.name"]', - placement: 'bottom', - sampleText: 'New Blog', - title: _t("Set a Title"), - content: _t("Click on this area and set a catchy title for your blog post."), - }, - { - waitNot: '#wrap h1[data-oe-model="blog.post"]:contains("Blog Post Title")', - element: 'button[data-action=snippet]', - placement: 'left', - title: _t("Layout Your Blog Post"), - content: _t("Use well designed building blocks to structure the content of your blog. Click 'Insert Blocks' to add new content."), - popover: { fixed: true }, - }, - { - snippet: '#snippet_structure .oe_snippet:eq(2)', - placement: 'bottom', - title: _t("Drag & Drop a Block"), - content: _t("Drag this block and drop it in your page."), - popover: { fixed: true }, - }, - { - element: 'button[data-action=snippet]', - placement: 'bottom', - title: _t("Add Another Block"), - content: _t("Let's add another block to your post."), - popover: { fixed: true }, - }, - { - snippet: '#snippet_structure .oe_snippet:eq(4)', - placement: 'bottom', - title: _t("Drag & Drop a block"), - content: _t("Drag this block and drop it below the image block."), - popover: { fixed: true }, - }, - { - element: '.oe_active .oe_snippet_remove', - placement: 'top', - title: _t("Delete the block"), - content: _t("From this toolbar you can move, duplicate or delete the selected zone. Click on the garbage can image to delete the block. Or click on the Title and delete it."), - }, - { - waitNot: '.oe_active .oe_snippet_remove:visible', - element: 'button[data-action=save]', - placement: 'right', - title: _t("Save Your Blog"), - content: _t("Click the Save button to record changes on the page."), - popover: { fixed: true }, - }, - { - waitFor: 'button[data-action=edit]:visible', - element: 'button.btn-danger.js_publish_btn', - placement: 'top', - title: _t("Publish Your Post"), - content: _t("Your blog post is not yet published. You can update this draft version and publish it once you are ready."), - }, - { - waitFor: '.js_publish_management button.js_publish_btn.btn-success:visible', - title: "Thanks!", - content: _t("This tutorial is finished. To discover more features, improve the content of this page and try the Promote button in the top right menu."), - popover: { next: _t("Close Tutorial") }, - }, - ]; - return this._super(); - }, + website.Tour.register({ + id: 'blog', + name: _t("Create a blog post"), + steps: [ + { + title: _t("New Blog Post"), + content: _t("Let's go through the first steps to write beautiful blog posts."), + popover: { next: _t("Start Tutorial"), end: _t("Skip") }, + }, + { + element: '#content-menu-button', + placement: 'left', + title: _t("Add Content"), + content: _t("Use this 'Content' menu to create a new blog post like any other document (page, menu, products, event, ...)."), + popover: { fixed: true }, + }, + { + element: 'a[data-action=new_blog_post]', + placement: 'left', + title: _t("New Blog Post"), + content: _t("Select this menu item to create a new blog post."), + popover: { fixed: true }, + }, + { + element: '.modal:has(#editor_new_blog) button.btn-primary', + placement: 'right', + title: _t("Create Blog Post"), + content: _t("Click Continue to create the blog post."), + }, + { + waitFor: 'body:has(button[data-action=save]:visible):has(.js_blog)', + title: _t("Blog Post Created"), + content: _t("This is your new blog post. Let's edit it."), + popover: { next: _t("Continue") }, + }, + { + element: 'h1[data-oe-expression="blog_post.name"]', + placement: 'bottom', + sampleText: 'New Blog', + title: _t("Set a Title"), + content: _t("Click on this area and set a catchy title for your blog post."), + }, + { + waitNot: '#wrap h1[data-oe-model="blog.post"]:contains("Blog Post Title")', + element: 'button[data-action=snippet]', + placement: 'left', + title: _t("Layout Your Blog Post"), + content: _t("Use well designed building blocks to structure the content of your blog. Click 'Insert Blocks' to add new content."), + popover: { fixed: true }, + }, + { + snippet: '#snippet_structure .oe_snippet:eq(2)', + placement: 'bottom', + title: _t("Drag & Drop a Block"), + content: _t("Drag this block and drop it in your page."), + popover: { fixed: true }, + }, + { + element: 'button[data-action=snippet]', + placement: 'bottom', + title: _t("Add Another Block"), + content: _t("Let's add another block to your post."), + popover: { fixed: true }, + }, + { + snippet: '#snippet_structure .oe_snippet:eq(4)', + placement: 'bottom', + title: _t("Drag & Drop a block"), + content: _t("Drag this block and drop it below the image block."), + popover: { fixed: true }, + }, + { + element: '.oe_active .oe_snippet_remove', + placement: 'top', + title: _t("Delete the block"), + content: _t("From this toolbar you can move, duplicate or delete the selected zone. Click on the garbage can image to delete the block. Or click on the Title and delete it."), + }, + { + waitNot: '.oe_active .oe_snippet_remove:visible', + element: 'button[data-action=save]', + placement: 'right', + title: _t("Save Your Blog"), + content: _t("Click the Save button to record changes on the page."), + popover: { fixed: true }, + }, + { + waitFor: 'button[data-action=edit]:visible', + element: 'button.btn-danger.js_publish_btn', + placement: 'top', + title: _t("Publish Your Post"), + content: _t("Your blog post is not yet published. You can update this draft version and publish it once you are ready."), + }, + { + waitFor: '.js_publish_management button.js_publish_btn.btn-success:visible', + title: "Thanks!", + content: _t("This tutorial is finished. To discover more features, improve the content of this page and try the Promote button in the top right menu."), + popover: { next: _t("Close Tutorial") }, + }, + ] }); }()); diff --git a/addons/website_event/static/src/js/website.tour.event.js b/addons/website_event/static/src/js/website.tour.event.js index ef013398acb..07a12d81f34 100644 --- a/addons/website_event/static/src/js/website.tour.event.js +++ b/addons/website_event/static/src/js/website.tour.event.js @@ -4,115 +4,103 @@ var website = openerp.website; var _t = openerp._t; - website.EditorBar.include({ - start: function () { - this.registerTour(new website.EventTour(this)); - return this._super(); - }, - }); - - website.EventTour = website.Tour.extend({ - id: 'event', - name: "Create an event", - testPath: '/event(/[0-9]+/register)?', - init: function (editor) { - var self = this; - self.steps = [ - { - title: _t("Create an Event"), - content: _t("Let's go through the first steps to publish a new event."), - popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, - }, - { - element: '#content-menu-button', - placement: 'left', - title: _t("Add Content"), - content: _t("The Content menu allows you to create new pages, events, menus, etc."), - popover: { fixed: true }, - }, - { - element: 'a[data-action=new_event]', - placement: 'left', - title: _t("New Event"), - content: _t("Click here to create a new event."), - popover: { fixed: true }, - }, - { - element: '.modal #editor_new_event input[type=text]', - sampleText: 'Advanced Technical Training', - placement: 'right', - title: _t("Create an Event Name"), - content: _t("Create a name for your new event and click 'Continue'. e.g: Technical Training"), - }, - { - waitNot: '.modal input[type=text]:not([value!=""])', - element: '.modal button.btn-primary', - placement: 'right', - title: _t("Create Event"), - content: _t("Click Continue to create the event."), - }, - { - waitFor: 'body:has(button[data-action=save]:visible):has(.js_event)', - title: _t("New Event Created"), - content: _t("This is your new event page. We will edit the event presentation page."), - popover: { next: _t("Continue") }, - }, - { - element: 'button[data-action=snippet]', - placement: 'bottom', - title: _t("Layout your event"), - content: _t("Insert blocks to layout the body of your event."), - popover: { fixed: true }, - }, - { - snippet: '#snippet_structure .oe_snippet:eq(2)', - placement: 'bottom', - title: _t("Drag & Drop a block"), - content: _t("Drag the 'Image-Text' block and drop it in your page."), - popover: { fixed: true }, - }, - { - - element: 'button[data-action=snippet]', - placement: 'bottom', - title: _t("Layout your event"), - content: _t("Insert another block to your event."), - popover: { fixed: true }, - }, - { - snippet: '#snippet_structure .oe_snippet:eq(4)', - placement: 'bottom', - title: _t("Drag & Drop a block"), - content: _t("Drag the 'Text Block' in your event page."), - popover: { fixed: true }, - }, - { - element: 'button[data-action=save]', - placement: 'right', - title: _t("Save your modifications"), - content: _t("Once you click on save, your event is updated."), - popover: { fixed: true }, - }, - { - waitFor: 'button[data-action=edit]:visible', - element: 'button.btn-danger.js_publish_btn', - placement: 'top', - title: _t("Publish your event"), - content: _t("Click to publish your event."), - }, - { - waitFor: '.js_publish_management button.js_publish_btn.btn-success:visible', - element: '.js_publish_management button[data-toggle="dropdown"]', - placement: 'left', - title: _t("Customize your event"), - content: _t("Click here to customize your event further."), - }, - { - element: '.js_publish_management ul>li>a:last:visible', - }, - ]; - return this._super(); - } + website.Tour.register({ + id: 'event', + name: _t("Create an event"), + steps: [ + { + title: _t("Create an Event"), + content: _t("Let's go through the first steps to publish a new event."), + popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, + }, + { + element: '#content-menu-button', + placement: 'left', + title: _t("Add Content"), + content: _t("The Content menu allows you to create new pages, events, menus, etc."), + popover: { fixed: true }, + }, + { + element: 'a[data-action=new_event]', + placement: 'left', + title: _t("New Event"), + content: _t("Click here to create a new event."), + popover: { fixed: true }, + }, + { + element: '.modal #editor_new_event input[type=text]', + sampleText: 'Advanced Technical Training', + placement: 'right', + title: _t("Create an Event Name"), + content: _t("Create a name for your new event and click 'Continue'. e.g: Technical Training"), + }, + { + waitNot: '.modal input[type=text]:not([value!=""])', + element: '.modal button.btn-primary', + placement: 'right', + title: _t("Create Event"), + content: _t("Click Continue to create the event."), + }, + { + waitFor: 'body:has(button[data-action=save]:visible):has(.js_event)', + title: _t("New Event Created"), + content: _t("This is your new event page. We will edit the event presentation page."), + popover: { next: _t("Continue") }, + }, + { + element: 'button[data-action=snippet]', + placement: 'bottom', + title: _t("Layout your event"), + content: _t("Insert blocks to layout the body of your event."), + popover: { fixed: true }, + }, + { + snippet: '#snippet_structure .oe_snippet:eq(2)', + placement: 'bottom', + title: _t("Drag & Drop a block"), + content: _t("Drag the 'Image-Text' block and drop it in your page."), + popover: { fixed: true }, + }, + { + + element: 'button[data-action=snippet]', + placement: 'bottom', + title: _t("Layout your event"), + content: _t("Insert another block to your event."), + popover: { fixed: true }, + }, + { + snippet: '#snippet_structure .oe_snippet:eq(4)', + placement: 'bottom', + title: _t("Drag & Drop a block"), + content: _t("Drag the 'Text Block' in your event page."), + popover: { fixed: true }, + }, + { + element: 'button[data-action=save]', + placement: 'right', + title: _t("Save your modifications"), + content: _t("Once you click on save, your event is updated."), + popover: { fixed: true }, + }, + { + waitFor: 'button[data-action=edit]:visible', + element: 'button.btn-danger.js_publish_btn', + placement: 'top', + title: _t("Publish your event"), + content: _t("Click to publish your event."), + }, + { + waitFor: '.js_publish_management button.js_publish_btn.btn-success:visible', + element: '.js_publish_management button[data-toggle="dropdown"]', + placement: 'left', + title: _t("Customize your event"), + content: _t("Click here to customize your event further."), + }, + { + element: '.js_publish_management ul>li>a:last:visible', + }, + ] }); }()); diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js index 48b9b62b349..92e57638cc8 100644 --- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js +++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js @@ -3,77 +3,72 @@ var website = openerp.website; - website.Tour.EventSaleTest = website.Tour.extend({ - id: 'event_buy_tickets', + website.Tour.register({ + id: 'event_buy_tickets', name: "Try to buy tickets for event", path: '/event', - init: function () { - var self = this; - self.steps = [ - { - title: "select event", - element: 'a[href*="/event"]:contains("Open Days in Los Angeles")', + mode: 'test', + steps: [ + { + title: "select event", + element: 'a[href*="/event"]:contains("Open Days in Los Angeles")', + }, + { + title: "go to register page", + waitNot: 'a[href*="/event"]:contains("Functional Webinar")', + onload: function () { + // use onload if website_event_track is installed + if (!$('form:contains("Ticket Type")').size()) { + window.location.href = $('a[href*="/event"][href*="/register"]').attr("href"); + } }, - { - title: "go to register page", - waitNot: 'a[href*="/event"]:contains("Functional Webinar")', - onload: function () { - // use onload if website_event_track is installed - if (!$('form:contains("Ticket Type")').size()) { - window.location.href = $('a[href*="/event"][href*="/register"]').attr("href"); - } - }, + }, + { + title: "select 2 Standard tickets", + element: 'select[name="ticket-1"]', + sampleText: '2', + }, + { + title: "select 3 VIP tickets", + waitFor: 'select[name="ticket-1"] option:contains(2):selected', + element: 'select[name="ticket-2"]', + sampleText: '3', + }, + { + title: "Order Now", + waitFor: 'select[name="ticket-2"] option:contains(3):selected', + element: '.btn-primary:contains("Order Now")', + }, + { + title: "Complete checkout", + waitFor: '#top_menu .my_cart_quantity:contains(5)', + element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', + onload: function (tour) { + if ($("input[name='name']").val() === "") + $("input[name='name']").val("website_sale-test-shoptest"); + if ($("input[name='email']").val() === "") + $("input[name='email']").val("website_event_sale_test_shoptest@websiteeventsaletest.optenerp.com"); + $("input[name='phone']").val("123"); + $("input[name='street']").val("123"); + $("input[name='city']").val("123"); + $("input[name='zip']").val("123"); + $("select[name='country_id']").val("21"); }, - { - title: "select 2 Standard tickets", - element: 'select[name="ticket-1"]', - sampleText: '2', - }, - { - title: "select 3 VIP tickets", - waitFor: 'select[name="ticket-1"] option:contains(2):selected', - element: 'select[name="ticket-2"]', - sampleText: '3', - }, - { - title: "Order Now", - waitFor: 'select[name="ticket-2"] option:contains(3):selected', - element: '.btn-primary:contains("Order Now")', - }, - { - title: "Complete checkout", - waitFor: '#top_menu .my_cart_quantity:contains(5)', - element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', - onload: function (tour) { - if ($("input[name='name']").val() === "") - $("input[name='name']").val("website_sale-test-shoptest"); - if ($("input[name='email']").val() === "") - $("input[name='email']").val("website_event_sale_test_shoptest@websiteeventsaletest.optenerp.com"); - $("input[name='phone']").val("123"); - $("input[name='street']").val("123"); - $("input[name='city']").val("123"); - $("input[name='zip']").val("123"); - $("select[name='country_id']").val("21"); - }, - }, - { - title: "select payment", - element: '#payment_method label:has(img[title="transfer"]) input', - }, - { - title: "Pay Now", - waitFor: '#payment_method label:has(input:checked):has(img[title="transfer"])', - element: '.oe_sale_acquirer_button .btn[name="submit"]:visible', - }, - { - title: "finish", - waitFor: '.oe_website_sale:contains("Thank you for your order")', - } - ]; - return this._super(); - }, + }, + { + title: "select payment", + element: '#payment_method label:has(img[title="transfer"]) input', + }, + { + title: "Pay Now", + waitFor: '#payment_method label:has(input:checked):has(img[title="transfer"])', + element: '.oe_sale_acquirer_button .btn[name="submit"]:visible', + }, + { + title: "finish", + waitFor: '.oe_website_sale:contains("Thank you for your order")', + } + ] }); - // for test without editor bar - website.Tour.add(website.Tour.EventSaleTest); }()); diff --git a/addons/website_sale/static/src/js/website.tour.sale.js b/addons/website_sale/static/src/js/website.tour.sale.js index c9dd7e5e301..c7526b2468f 100644 --- a/addons/website_sale/static/src/js/website.tour.sale.js +++ b/addons/website_sale/static/src/js/website.tour.sale.js @@ -3,92 +3,87 @@ var website = openerp.website; - website.Tour.ShopTest = website.Tour.extend({ - id: 'shop_buy_product', + website.Tour.register({ + id: 'shop_buy_product', name: "Try to buy products", path: '/shop', - init: function () { - var self = this; - self.steps = [ - { - title: "select ipod", - element: '.oe_product_cart a:contains("iPod")', + mode: 'test', + steps: [ + { + title: "select ipod", + element: '.oe_product_cart a:contains("iPod")', + }, + { + title: "select ipod 32Go", + element: 'input[name="product_id"]:not([checked])', + }, + { + title: "click on add to cart", + waitFor: 'input[name="product_id"]:eq(1)[checked]', + element: 'form[action="/shop/add_cart"] .btn', + }, + { + title: "add suggested", + element: 'form[action="/shop/add_cart"] .btn-link:contains("Add to Cart")', + }, + { + title: "add one more iPod", + waitFor: '.my_cart_quantity:contains(2)', + element: '#mycart_products tr:contains("iPod: 32 Gb") a.js_add_cart_json:eq(1)', + }, + { + title: "remove Headphones", + waitFor: '#mycart_products tr:contains("iPod: 32 Gb") input.js_quantity[value=2]', + element: '#mycart_products tr:contains("Apple In-Ear Headphones") a.js_add_cart_json:first', + }, + { + title: "set one iPod", + waitNot: '#mycart_products tr:contains("Apple In-Ear Headphones")', + element: '#mycart_products input.js_quantity', + sampleText: '1', + }, + { + title: "go to checkout", + waitFor: '#mycart_products input.js_quantity[value=1]', + element: 'a[href="/shop/checkout"]', + }, + { + title: "test with input error", + element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', + onload: function (tour) { + $("input[name='phone']").val(""); }, - { - title: "select ipod 32Go", - element: 'input[name="product_id"]:not([checked])', + }, + { + title: "test without input error", + waitFor: 'form[action="/shop/confirm_order"] .has-error', + element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', + onload: function (tour) { + if ($("input[name='name']").val() === "") + $("input[name='name']").val("website_sale-test-shoptest"); + if ($("input[name='email']").val() === "") + $("input[name='email']").val("website_sale_test_shoptest@websitesaletest.optenerp.com"); + $("input[name='phone']").val("123"); + $("input[name='street']").val("123"); + $("input[name='city']").val("123"); + $("input[name='zip']").val("123"); + $("select[name='country_id']").val("21"); }, - { - title: "click on add to cart", - waitFor: 'input[name="product_id"]:eq(1)[checked]', - element: 'form[action="/shop/add_cart"] .btn', - }, - { - title: "add suggested", - element: 'form[action="/shop/add_cart"] .btn-link:contains("Add to Cart")', - }, - { - title: "add one more iPod", - waitFor: '.my_cart_quantity:contains(2)', - element: '#mycart_products tr:contains("iPod: 32 Gb") a.js_add_cart_json:eq(1)', - }, - { - title: "remove Headphones", - waitFor: '#mycart_products tr:contains("iPod: 32 Gb") input.js_quantity[value=2]', - element: '#mycart_products tr:contains("Apple In-Ear Headphones") a.js_add_cart_json:first', - }, - { - title: "set one iPod", - waitNot: '#mycart_products tr:contains("Apple In-Ear Headphones")', - element: '#mycart_products input.js_quantity', - sampleText: '1', - }, - { - title: "go to checkout", - waitFor: '#mycart_products input.js_quantity[value=1]', - element: 'a[href="/shop/checkout"]', - }, - { - title: "test with input error", - element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', - onload: function (tour) { - $("input[name='phone']").val(""); - }, - }, - { - title: "test without input error", - waitFor: 'form[action="/shop/confirm_order"] .has-error', - element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', - onload: function (tour) { - if ($("input[name='name']").val() === "") - $("input[name='name']").val("website_sale-test-shoptest"); - if ($("input[name='email']").val() === "") - $("input[name='email']").val("website_sale_test_shoptest@websitesaletest.optenerp.com"); - $("input[name='phone']").val("123"); - $("input[name='street']").val("123"); - $("input[name='city']").val("123"); - $("input[name='zip']").val("123"); - $("select[name='country_id']").val("21"); - }, - }, - { - title: "select payment", - element: '#payment_method label:has(img[title="transfer"]) input', - }, - { - title: "Pay Now", - waitFor: '#payment_method label:has(input:checked):has(img[title="transfer"])', - element: '.oe_sale_acquirer_button .btn[name="submit"]:visible', - }, - { - title: "finish", - waitFor: '.oe_website_sale:contains("Thank you for your order")', - } - ]; - return this._super(); - }, + }, + { + title: "select payment", + element: '#payment_method label:has(img[title="transfer"]) input', + }, + { + title: "Pay Now", + waitFor: '#payment_method label:has(input:checked):has(img[title="transfer"])', + element: '.oe_sale_acquirer_button .btn[name="submit"]:visible', + }, + { + title: "finish", + waitFor: '.oe_website_sale:contains("Thank you for your order")', + } + ] }); - // for test without editor bar - website.Tour.add(website.Tour.ShopTest); }()); diff --git a/addons/website_sale/static/src/js/website.tour.shop.js b/addons/website_sale/static/src/js/website.tour.shop.js index adb4a9e556c..bd03523e054 100644 --- a/addons/website_sale/static/src/js/website.tour.shop.js +++ b/addons/website_sale/static/src/js/website.tour.shop.js @@ -4,141 +4,129 @@ var website = openerp.website; var _t = openerp._t; - website.EditorBar.include({ - start: function () { - this.registerTour(new website.Tour.Shop(this)); - return this._super(); - }, - }); - - website.Tour.Shop = website.Tour.extend({ + website.Tour.register({ id: 'shop', - name: "Create a product", - testPath: '/shop', - init: function () { - var self = this; - self.steps = [ - { - title: _t("Welcome to your shop"), - content: _t("You successfully installed the e-commerce. This guide will help you to create your product and promote your sales."), - popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, - }, - { - element: '#content-menu-button', - placement: 'left', - title: _t("Create your first product"), - content: _t("Click here to add a new product."), - popover: { fixed: true }, - }, - { - element: 'a[data-action=new_product]', - placement: 'left', - title: _t("Create a new product"), - content: _t("Select 'New Product' to create it and manage its properties to boost your sales."), - popover: { fixed: true }, - }, - { - element: '.modal #editor_new_product input[type=text]', - sampleText: 'New Product', - placement: 'right', - title: _t("Choose name"), - content: _t("Enter a name for your new product then click 'Continue'."), - }, - { - waitNot: '.modal input[type=text]:not([value!=""])', - element: '.modal button.btn-primary', - placement: 'right', - title: _t("Create Product"), - content: _t("Click Continue to create the product."), - }, - { - waitFor: 'body:has(button[data-action=save]:visible):has(.js_sale)', - title: _t("New product created"), - content: _t("This page contains all the information related to the new product."), - popover: { next: _t("Continue") }, - }, - { - element: '.product_price .oe_currency_value', - sampleText: '20.50', - placement: 'left', - title: _t("Change the price"), - content: _t("Edit the price of this product by clicking on the amount."), - }, - { - waitNot: '.product_price .oe_currency_value:containsExact(1.00)', - element: '#wrap img.img:first', - placement: 'top', - title: _t("Update image"), - content: _t("Click here to set an image describing your product."), - }, - { - element: 'button.hover-edition-button:visible', - placement: 'top', - title: _t("Update image"), - content: _t("Click here to set an image describing your product."), - }, - { - wait: 500, - element: '.well a.pull-right', - placement: 'bottom', - title: _t("Select an Image"), - content: _t("Let's select an existing image."), - popover: { fixed: true }, - }, - { - element: 'img[alt=imac]', - placement: 'bottom', - title: _t("Select an Image"), - content: _t("Let's select an imac image."), - popover: { fixed: true }, - }, - { - waitNot: 'img[alt=imac]', - element: '.modal-content button.save', - placement: 'bottom', - title: _t("Select this Image"), - content: _t("Click to add the image to the product decsription."), - popover: { fixed: true }, - }, - { - waitNot: '.modal-content:visible', - element: 'button[data-action=snippet]', - placement: 'bottom', - title: _t("Describe the Product"), - content: _t("Insert blocks like text-image, or gallery to fully describe the product."), - popover: { fixed: true }, - }, - { - snippet: '#snippet_structure .oe_snippet:eq(7)', - placement: 'bottom', - title: _t("Drag & Drop a block"), - content: _t("Drag the 'Big Picture' block and drop it in your page."), - popover: { fixed: true }, - }, - { - element: 'button[data-action=save]', - placement: 'right', - title: _t("Save your modifications"), - content: _t("Once you click on save, your product is updated."), - popover: { fixed: true }, + name: _t("Create a product"), + steps: [ + { + title: _t("Welcome to your shop"), + content: _t("You successfully installed the e-commerce. This guide will help you to create your product and promote your sales."), + popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, + }, + { + element: '#content-menu-button', + placement: 'left', + title: _t("Create your first product"), + content: _t("Click here to add a new product."), + popover: { fixed: true }, + }, + { + element: 'a[data-action=new_product]', + placement: 'left', + title: _t("Create a new product"), + content: _t("Select 'New Product' to create it and manage its properties to boost your sales."), + popover: { fixed: true }, + }, + { + element: '.modal #editor_new_product input[type=text]', + sampleText: 'New Product', + placement: 'right', + title: _t("Choose name"), + content: _t("Enter a name for your new product then click 'Continue'."), + }, + { + waitNot: '.modal input[type=text]:not([value!=""])', + element: '.modal button.btn-primary', + placement: 'right', + title: _t("Create Product"), + content: _t("Click Continue to create the product."), + }, + { + waitFor: 'body:has(button[data-action=save]:visible):has(.js_sale)', + title: _t("New product created"), + content: _t("This page contains all the information related to the new product."), + popover: { next: _t("Continue") }, + }, + { + element: '.product_price .oe_currency_value', + sampleText: '20.50', + placement: 'left', + title: _t("Change the price"), + content: _t("Edit the price of this product by clicking on the amount."), + }, + { + waitNot: '.product_price .oe_currency_value:containsExact(1.00)', + element: '#wrap img.img:first', + placement: 'top', + title: _t("Update image"), + content: _t("Click here to set an image describing your product."), + }, + { + element: 'button.hover-edition-button:visible', + placement: 'top', + title: _t("Update image"), + content: _t("Click here to set an image describing your product."), + }, + { + wait: 500, + element: '.well a.pull-right', + placement: 'bottom', + title: _t("Select an Image"), + content: _t("Let's select an existing image."), + popover: { fixed: true }, + }, + { + element: 'img[alt=imac]', + placement: 'bottom', + title: _t("Select an Image"), + content: _t("Let's select an imac image."), + popover: { fixed: true }, + }, + { + waitNot: 'img[alt=imac]', + element: '.modal-content button.save', + placement: 'bottom', + title: _t("Select this Image"), + content: _t("Click to add the image to the product decsription."), + popover: { fixed: true }, + }, + { + waitNot: '.modal-content:visible', + element: 'button[data-action=snippet]', + placement: 'bottom', + title: _t("Describe the Product"), + content: _t("Insert blocks like text-image, or gallery to fully describe the product."), + popover: { fixed: true }, + }, + { + snippet: '#snippet_structure .oe_snippet:eq(7)', + placement: 'bottom', + title: _t("Drag & Drop a block"), + content: _t("Drag the 'Big Picture' block and drop it in your page."), + popover: { fixed: true }, + }, + { + element: 'button[data-action=save]', + placement: 'right', + title: _t("Save your modifications"), + content: _t("Once you click on save, your product is updated."), + popover: { fixed: true }, - }, - { - waitFor: '#website-top-navbar button[data-action="edit"]:visible', - element: '.js_publish_management button.js_publish_btn.btn-danger', - placement: 'top', - title: _t("Publish your product"), - content: _t("Click to publish your product so your customers can see it."), - }, - { - waitFor: '.js_publish_management button.js_publish_btn.btn-success:visible', - title: _t("Congratulations"), - content: _t("Congratulations! You just created and published your first product."), - popover: { next: _t("Close Tutorial") }, - }, - ]; - return this._super(); - } + }, + { + waitFor: '#website-top-navbar button[data-action="edit"]:visible', + element: '.js_publish_management button.js_publish_btn.btn-danger', + placement: 'top', + title: _t("Publish your product"), + content: _t("Click to publish your product so your customers can see it."), + }, + { + waitFor: '.js_publish_management button.js_publish_btn.btn-success:visible', + title: _t("Congratulations"), + content: _t("Congratulations! You just created and published your first product."), + popover: { next: _t("Close Tutorial") }, + }, + ] }); }()); From 0b75d4ea043e35c9c523b9ec24324eae8d149e8f Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Thu, 20 Mar 2014 09:56:06 +0100 Subject: [PATCH 034/143] [IMP] website: remove bootstrap_tour_stub bzr revid: chm@openerp.com-20140320085606-qrghlkev6i9pu9bw --- addons/website/static/src/js/website.tour.js | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index c5ccd1f42c9..fc0dd513cf2 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -23,17 +23,6 @@ if (typeof website.Tour !== "undefined") { // don't need template to use bootstrap Tour in automatic mode if (typeof QWeb2 !== "undefined") { website.add_template_file('/website/static/src/xml/website.tour.xml'); - -} - -// don't need to use bootstrap Tour to launch an automatic tour -function bootstrap_tour_stub () { - if (typeof Tour === "undefined") { - window.Tour = function Tour() {}; - Tour.prototype.addSteps = function () {}; - Tour.prototype.end = function () {}; - Tour.prototype.goto = function () {}; - } } if (website.EditorBar) { @@ -150,7 +139,7 @@ website.Tour.registerSteps = function (tour) { } // rendering bootstrap tour and popover - if (tour.mode != "test") { + if (tour.mode != "test" || typeof Tour !== "undefined") { tour.tour = new Tour({ name: this.id, storage: localStorage, @@ -206,6 +195,7 @@ website.Tour.error = function (tour, step, message) { + '\nelement: ' + Boolean(!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) + '\nwaitNot: ' + Boolean(!step.waitNot || !$(step.waitNot).size()) + '\nwaitFor: ' + Boolean(!step.waitFor || $(step.waitFor).size()) + + "\nlocalStorage: " + localStorage.getItem("tour") + '\n\n' + $("body").html() ); }; @@ -302,7 +292,9 @@ website.Tour.nextStep = function (tour, step, overlaps) { // clear popover (fix for boostrap tour if the element is removed before destroy popover) $(".popover.tour").remove(); // go to step in bootstrap tour - tour.tour.goto(step.id); + if (tour.tour) { + tour.tour.goto(step.id); + } step.onload(); var next = tour.steps[step.id+1]; @@ -349,7 +341,7 @@ website.Tour.autoNextStep = function (tour, step) { if (!$element.size()) return; if (step.snippet) { - + website.Tour.autoDragAndDropSnippet($element); } else if (step.sampleText) { From abfccd8936da4f228919dcd3f59462c38d9efe41 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Thu, 20 Mar 2014 16:15:42 +0100 Subject: [PATCH 035/143] [WIP] website tour: bootstrap-tour - v0.9.1 bzr revid: chm@openerp.com-20140320151542-blfr1rs1j24xanh8 --- .../lib/bootstrap-tour/bootstrap-tour.css | 44 +- .../lib/bootstrap-tour/bootstrap-tour.js | 1057 ++++++++++------- .../static/src/js/website.tour.banner.js | 3 - addons/website/static/src/js/website.tour.js | 199 ++-- 4 files changed, 755 insertions(+), 548 deletions(-) mode change 100755 => 100644 addons/website/static/lib/bootstrap-tour/bootstrap-tour.css mode change 100755 => 100644 addons/website/static/lib/bootstrap-tour/bootstrap-tour.js diff --git a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css old mode 100755 new mode 100644 index 72c6e8cbab7..5449158e7f4 --- a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css +++ b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css @@ -1,37 +1,59 @@ +/* =========================================================== +# bootstrap-tour - v0.9.1 +# http://bootstraptour.com +# ============================================================== +# Copyright 2012-2013 Ulrich Sossou +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +*/ .tour-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; - z-index: 1009; + z-index: 1100; background-color: #000; opacity: 0.8; } .tour-step-backdrop { position: relative; - z-index: 1011; + z-index: 1101; + background: inherit; } .tour-step-background { position: absolute; - z-index: 1010; - background: #fff; + z-index: 1100; + background: inherit; border-radius: 6px; } +.popover[class*="tour-"] { + z-index: 1100; +} .popover[class*="tour-"] .popover-navigation { padding: 9px 14px; } -.popover[class*="tour-"] .popover-navigation *[data-role=end] { +.popover[class*="tour-"] .popover-navigation *[data-role="end"] { float: right; } -.popover[class*="tour-"] .popover-navigation *[data-role=prev], -.popover[class*="tour-"] .popover-navigation *[data-role=next], -.popover[class*="tour-"] .popover-navigation *[data-role=end] { +.popover[class*="tour-"] .popover-navigation *[data-role="prev"], +.popover[class*="tour-"] .popover-navigation *[data-role="next"], +.popover[class*="tour-"] .popover-navigation *[data-role="end"] { cursor: pointer; } -.popover[class*="tour-"] .popover-navigation *[data-role=prev].disabled, -.popover[class*="tour-"] .popover-navigation *[data-role=next].disabled, -.popover[class*="tour-"] .popover-navigation *[data-role=end].disabled { +.popover[class*="tour-"] .popover-navigation *[data-role="prev"].disabled, +.popover[class*="tour-"] .popover-navigation *[data-role="next"].disabled, +.popover[class*="tour-"] .popover-navigation *[data-role="end"].disabled { cursor: default; } .popover[class*="tour-"].orphan { diff --git a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js old mode 100755 new mode 100644 index 8b45d6da9ee..a0172c718c0 --- a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js +++ b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js @@ -1,5 +1,5 @@ /* =========================================================== -# bootstrap-tour - v0.6.1 +# bootstrap-tour - v0.9.1 # http://bootstraptour.com # ============================================================== # Copyright 2012-2013 Ulrich Sossou @@ -16,220 +16,233 @@ # See the License for the specific language governing permissions and # limitations under the License. */ -(function() { - (function($, window) { - var Tour, document; - document = window.document; - Tour = (function() { - function Tour(options) { - this._options = $.extend({ - name: "tour", - container: "body", - keyboard: true, - storage: window.localStorage, - debug: false, - backdrop: false, - redirect: true, - orphan: false, - basePath: "", - template: "

    ", - afterSetState: function(key, value) {}, - afterGetState: function(key, value) {}, - afterRemoveState: function(key) {}, - onStart: function(tour) {}, - onEnd: function(tour) {}, - onShow: function(tour) {}, - onShown: function(tour) {}, - onHide: function(tour) {}, - onHidden: function(tour) {}, - onNext: function(tour) {}, - onPrev: function(tour) {} - }, options); - this._steps = []; - this.setCurrentStep(); - this.backdrop = { - overlay: null, - $element: null, - $background: null - }; +(function($, window) { + var Tour, document; + document = window.document; + Tour = (function() { + function Tour(options) { + this._options = $.extend({ + name: "tour", + steps: [], + container: "body", + keyboard: true, + storage: window.localStorage, + debug: false, + backdrop: false, + redirect: true, + orphan: false, + duration: false, + basePath: "", + template: "

    ", + afterSetState: function(key, value) {}, + afterGetState: function(key, value) {}, + afterRemoveState: function(key) {}, + onStart: function(tour) {}, + onEnd: function(tour) {}, + onShow: function(tour) {}, + onShown: function(tour) {}, + onHide: function(tour) {}, + onHidden: function(tour) {}, + onNext: function(tour) {}, + onPrev: function(tour) {}, + onPause: function(tour, duration) {}, + onResume: function(tour, duration) {} + }, options); + this._force = false; + this._inited = false; + this.backdrop = { + overlay: null, + $element: null, + $background: null, + backgroundShown: false, + overlayElementShown: false + }; + this; + } + + Tour.prototype.addSteps = function(steps) { + var step, _i, _len; + for (_i = 0, _len = steps.length; _i < _len; _i++) { + step = steps[_i]; + this.addStep(step); } + return this; + }; - Tour.prototype.setState = function(key, value) { - var keyName; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - this._options.storage.setItem(keyName, value); - return this._options.afterSetState(keyName, value); - } else { - if (this._state == null) { - this._state = {}; - } - return this._state[key] = value; - } - }; + Tour.prototype.addStep = function(step) { + this._options.steps.push(step); + return this; + }; - Tour.prototype.removeState = function(key) { - var keyName; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - this._options.storage.removeItem(keyName); - return this._options.afterRemoveState(keyName); - } else { - if (this._state != null) { - return delete this._state[key]; - } - } - }; + Tour.prototype.getStep = function(i) { + if (this._options.steps[i] != null) { + return $.extend({ + id: "step-" + i, + path: "", + placement: "right", + title: "", + content: "

    ", + next: i === this._options.steps.length - 1 ? -1 : i + 1, + prev: i - 1, + animation: true, + container: this._options.container, + backdrop: this._options.backdrop, + redirect: this._options.redirect, + orphan: this._options.orphan, + duration: this._options.duration, + template: this._options.template, + onShow: this._options.onShow, + onShown: this._options.onShown, + onHide: this._options.onHide, + onHidden: this._options.onHidden, + onNext: this._options.onNext, + onPrev: this._options.onPrev, + onPause: this._options.onPause, + onResume: this._options.onResume + }, this._options.steps[i]); + } + }; - Tour.prototype.getState = function(key) { - var keyName, value; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - value = this._options.storage.getItem(keyName); - } else { - if (this._state != null) { - value = this._state[key]; - } - } - if (value === void 0 || value === "null") { - value = null; - } - this._options.afterGetState(key, value); - return value; - }; - - Tour.prototype.addSteps = function(steps) { - var step, _i, _len, _results; - _results = []; - for (_i = 0, _len = steps.length; _i < _len; _i++) { - step = steps[_i]; - _results.push(this.addStep(step)); - } - return _results; - }; - - Tour.prototype.addStep = function(step) { - return this._steps.push(step); - }; - - Tour.prototype.getStep = function(i) { - if (this._steps[i] != null) { - return $.extend({ - id: "step-" + i, - path: "", - placement: "right", - title: "", - content: "

    ", - next: i === this._steps.length - 1 ? -1 : i + 1, - prev: i - 1, - animation: true, - container: this._options.container, - backdrop: this._options.backdrop, - redirect: this._options.redirect, - orphan: this._options.orphan, - template: this._options.template, - onShow: this._options.onShow, - onShown: this._options.onShown, - onHide: this._options.onHide, - onHidden: this._options.onHidden, - onNext: this._options.onNext, - onPrev: this._options.onPrev - }, this._steps[i]); - } - }; - - Tour.prototype.start = function(force) { - var promise, - _this = this; - if (force == null) { - force = false; - } - if (this.ended() && !force) { - return this._debug("Tour ended, start prevented."); - } - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=next]").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=next]:not(.disabled)", function(e) { - e.preventDefault(); - return _this.next(); - }); - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=prev]").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=prev]:not(.disabled)", function(e) { - e.preventDefault(); - return _this.prev(); - }); - $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=end]").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role=end]", function(e) { - e.preventDefault(); - return _this.end(); - }); - this._onResize(function() { + Tour.prototype.init = function(force) { + this._force = force; + if (this.ended()) { + this._debug("Tour ended, init prevented."); + return this; + } + this.setCurrentStep(); + this._initMouseNavigation(); + this._initKeyboardNavigation(); + this._onResize((function(_this) { + return function() { return _this.showStep(_this._current); - }); - this._setupKeyboardNavigation(); + }; + })(this)); + if (this._current !== null) { + this.showStep(this._current); + } + this._inited = true; + return this; + }; + + Tour.prototype.start = function(force) { + var promise; + if (force == null) { + force = false; + } + if (!this._inited) { + this.init(force); + } + if (this._current === null) { promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0); - return this._callOnPromiseDone(promise, this.showStep, this._current); - }; + this._callOnPromiseDone(promise, this.showStep, 0); + } + return this; + }; - Tour.prototype.next = function() { - var promise; - if (this.ended()) { - return this._debug("Tour ended, next prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this._showNextStep); - }; + Tour.prototype.next = function() { + var promise; + promise = this.hideStep(this._current); + return this._callOnPromiseDone(promise, this._showNextStep); + }; - Tour.prototype.prev = function() { - var promise; - if (this.ended()) { - return this._debug("Tour ended, prev prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this._showPrevStep); - }; + Tour.prototype.prev = function() { + var promise; + promise = this.hideStep(this._current); + return this._callOnPromiseDone(promise, this._showPrevStep); + }; - Tour.prototype.goto = function(i) { - var promise; - if (this.ended()) { - return this._debug("Tour ended, goto prevented."); - } - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this.showStep, i); - }; + Tour.prototype.goTo = function(i) { + var promise; + promise = this.hideStep(this._current); + return this._callOnPromiseDone(promise, this.showStep, i); + }; - Tour.prototype.end = function() { - var endHelper, hidePromise, - _this = this; - endHelper = function(e) { + Tour.prototype.end = function() { + var endHelper, promise; + endHelper = (function(_this) { + return function(e) { $(document).off("click.tour-" + _this._options.name); $(document).off("keyup.tour-" + _this._options.name); $(window).off("resize.tour-" + _this._options.name); - _this.setState("end", "yes"); + _this._setState("end", "yes"); + _this._inited = false; + _this._force = false; + _this._clearTimer(); if (_this._options.onEnd != null) { return _this._options.onEnd(_this); } }; - hidePromise = this.hideStep(this._current); - return this._callOnPromiseDone(hidePromise, endHelper); - }; + })(this); + promise = this.hideStep(this._current); + return this._callOnPromiseDone(promise, endHelper); + }; - Tour.prototype.ended = function() { - return !!this.getState("end"); - }; + Tour.prototype.ended = function() { + return !this._force && !!this._getState("end"); + }; - Tour.prototype.restart = function() { - this.removeState("current_step"); - this.removeState("end"); - this.setCurrentStep(0); - return this.start(); - }; + Tour.prototype.restart = function() { + this._removeState("current_step"); + this._removeState("end"); + this.setCurrentStep(0); + return this.start(); + }; - Tour.prototype.hideStep = function(i) { - var hideStepHelper, promise, step, - _this = this; - step = this.getStep(i); - promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0); - hideStepHelper = function(e) { + Tour.prototype.pause = function() { + var step; + step = this.getStep(this._current); + if (!(step && step.duration)) { + return this; + } + this._paused = true; + this._duration -= new Date().getTime() - this._start; + window.clearTimeout(this._timer); + this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining)."); + if (step.onPause != null) { + return step.onPause(this, this._duration); + } + }; + + Tour.prototype.resume = function() { + var step; + step = this.getStep(this._current); + if (!(step && step.duration)) { + return this; + } + this._paused = false; + this._start = new Date().getTime(); + this._duration = this._duration || step.duration; + this._timer = window.setTimeout((function(_this) { + return function() { + if (_this._isLast()) { + return _this.next(); + } else { + return _this.end(); + } + }; + })(this), this._duration); + this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration); + if ((step.onResume != null) && this._duration !== step.duration) { + return step.onResume(this, this._duration); + } + }; + + Tour.prototype.hideStep = function(i) { + var hideStepHelper, promise, step; + step = this.getStep(i); + if (!step) { + return; + } + this._clearTimer(); + promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0); + hideStepHelper = (function(_this) { + return function(e) { var $element; - $element = _this._isOrphan(step) ? $("body") : $(step.element); - $element.popover("destroy"); + $element = $(step.element); + if (!($element.data("bs.popover") || $element.data("popover"))) { + $element = $("body"); + } + $element.popover("destroy").removeClass("tour-" + _this._options.name + "-element tour-" + _this._options.name + "-" + i + "-element"); if (step.reflex) { $element.css("cursor", "").off("click.tour-" + _this._options.name); } @@ -240,23 +253,37 @@ return step.onHidden(_this); } }; - this._callOnPromiseDone(promise, hideStepHelper); - return promise; - }; + })(this); + this._callOnPromiseDone(promise, hideStepHelper); + return promise; + }; - Tour.prototype.showStep = function(i) { - var promise, showStepHelper, skipToPrevious, step, - _this = this; - step = this.getStep(i); - if (!step) { - return; - } - skipToPrevious = i < this._current; - promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0); - showStepHelper = function(e) { + Tour.prototype.showStep = function(i) { + var promise, showStepHelper, skipToPrevious, step; + if (this.ended()) { + this._debug("Tour ended, showStep prevented."); + return this; + } + step = this.getStep(i); + if (!step) { + return; + } + skipToPrevious = i < this._current; + promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0); + showStepHelper = (function(_this) { + return function(e) { var current_path, path; _this.setCurrentStep(i); - path = $.isFunction(step.path) ? step.path.call() : _this._options.basePath + step.path; + path = (function() { + switch ({}.toString.call(step.path)) { + case "[object Function]": + return step.path(); + case "[object String]": + return this._options.basePath + step.path; + default: + return step.path; + } + }).call(_this); current_path = [document.location.pathname, document.location.hash].join(""); if (_this._isRedirect(path, current_path)) { _this._redirect(step, path); @@ -277,283 +304,413 @@ if (step.backdrop) { _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0); } - _this._showPopover(step, i); - if (step.onShown != null) { - step.onShown(_this); + _this._scrollIntoView(step.element, function() { + if ((step.element != null) && step.backdrop) { + _this._showOverlayElement(step.element); + } + _this._showPopover(step, i); + if (step.onShown != null) { + step.onShown(_this); + } + return _this._debug("Step " + (_this._current + 1) + " of " + _this._options.steps.length); + }); + if (step.duration) { + return _this.resume(); } - return _this._debug("Step " + (_this._current + 1) + " of " + _this._steps.length); }; - return this._callOnPromiseDone(promise, showStepHelper); - }; + })(this); + this._callOnPromiseDone(promise, showStepHelper); + return promise; + }; - Tour.prototype.setCurrentStep = function(value) { - if (value != null) { - this._current = value; - return this.setState("current_step", value); - } else { - this._current = this.getState("current_step"); - return this._current = this._current === null ? 0 : parseInt(this._current, 10); + Tour.prototype.getCurrentStep = function() { + return this._current; + }; + + Tour.prototype.setCurrentStep = function(value) { + if (value != null) { + this._current = value; + this._setState("current_step", value); + } else { + this._current = this._getState("current_step"); + this._current = this._current === null ? null : parseInt(this._current, 10); + } + return this; + }; + + Tour.prototype._setState = function(key, value) { + var e, keyName; + if (this._options.storage) { + keyName = "" + this._options.name + "_" + key; + try { + this._options.storage.setItem(keyName, value); + } catch (_error) { + e = _error; + if (e.code === DOMException.QUOTA_EXCEEDED_ERR) { + this.debug("LocalStorage quota exceeded. State storage failed."); + } } - }; + return this._options.afterSetState(keyName, value); + } else { + if (this._state == null) { + this._state = {}; + } + return this._state[key] = value; + } + }; - Tour.prototype._showNextStep = function() { - var promise, showNextStepHelper, step, - _this = this; - step = this.getStep(this._current); - showNextStepHelper = function(e) { + Tour.prototype._removeState = function(key) { + var keyName; + if (this._options.storage) { + keyName = "" + this._options.name + "_" + key; + this._options.storage.removeItem(keyName); + return this._options.afterRemoveState(keyName); + } else { + if (this._state != null) { + return delete this._state[key]; + } + } + }; + + Tour.prototype._getState = function(key) { + var keyName, value; + if (this._options.storage) { + keyName = "" + this._options.name + "_" + key; + value = this._options.storage.getItem(keyName); + } else { + if (this._state != null) { + value = this._state[key]; + } + } + if (value === void 0 || value === "null") { + value = null; + } + this._options.afterGetState(key, value); + return value; + }; + + Tour.prototype._showNextStep = function() { + var promise, showNextStepHelper, step; + step = this.getStep(this._current); + showNextStepHelper = (function(_this) { + return function(e) { return _this.showStep(step.next); }; - promise = this._makePromise((step.onNext != null ? step.onNext(this) : void 0)); - return this._callOnPromiseDone(promise, showNextStepHelper); - }; + })(this); + promise = this._makePromise(step.onNext != null ? step.onNext(this) : void 0); + return this._callOnPromiseDone(promise, showNextStepHelper); + }; - Tour.prototype._showPrevStep = function() { - var promise, showPrevStepHelper, step, - _this = this; - step = this.getStep(this._current); - showPrevStepHelper = function(e) { + Tour.prototype._showPrevStep = function() { + var promise, showPrevStepHelper, step; + step = this.getStep(this._current); + showPrevStepHelper = (function(_this) { + return function(e) { return _this.showStep(step.prev); }; - promise = this._makePromise((step.onPrev != null ? step.onPrev(this) : void 0)); - return this._callOnPromiseDone(promise, showPrevStepHelper); - }; + })(this); + promise = this._makePromise(step.onPrev != null ? step.onPrev(this) : void 0); + return this._callOnPromiseDone(promise, showPrevStepHelper); + }; - Tour.prototype._debug = function(text) { - if (this._options.debug) { - return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text); - } - }; + Tour.prototype._debug = function(text) { + if (this._options.debug) { + return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text); + } + }; - Tour.prototype._isRedirect = function(path, currentPath) { - return (path != null) && path !== "" && path.replace(/\?.*$/, "").replace(/\/?$/, "") !== currentPath.replace(/\/?$/, ""); - }; + Tour.prototype._isRedirect = function(path, currentPath) { + return (path != null) && path !== "" && ((toString.call(path) === "[object RegExp]" && !path.test(currentPath)) || (toString.call(path) === "[object String]" && path.replace(/\?.*$/, "").replace(/\/?$/, "") !== currentPath.replace(/\/?$/, ""))); + }; - Tour.prototype._redirect = function(step, path) { - if ($.isFunction(step.redirect)) { - return step.redirect.call(this, path); - } else if (step.redirect === true) { - this._debug("Redirect to " + path); - return document.location.href = path; - } - }; + Tour.prototype._redirect = function(step, path) { + if ($.isFunction(step.redirect)) { + return step.redirect.call(this, path); + } else if (step.redirect === true) { + this._debug("Redirect to " + path); + return document.location.href = path; + } + }; - Tour.prototype._isOrphan = function(step) { - return (step.element == null) || !$(step.element).length || $(step.element).is(":hidden"); - }; + Tour.prototype._isOrphan = function(step) { + return (step.element == null) || !$(step.element).length || $(step.element).is(":hidden") && ($(step.element)[0].namespaceURI !== "http://www.w3.org/2000/svg"); + }; - Tour.prototype._showPopover = function(step, i) { - var $element, $navigation, $template, $tip, isOrphan, options, - _this = this; - options = $.extend({}, this._options); - $template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template); - $navigation = $template.find(".popover-navigation"); - isOrphan = this._isOrphan(step); - if (isOrphan) { - step.element = "body"; - step.placement = "top"; - $template = $template.addClass("orphan"); - } - $element = $(step.element); - $template.addClass("tour-" + this._options.name); - if (step.options) { - $.extend(options, step.options); - } - if (step.reflex) { - $element.css("cursor", "pointer").on("click.tour-" + this._options.name, function(e) { - if (_this._current < _this._steps.length - 1) { + Tour.prototype._isLast = function() { + return this._current < this._options.steps.length - 1; + }; + + Tour.prototype._showPopover = function(step, i) { + var $element, $navigation, $template, $tip, isOrphan, options; + options = $.extend({}, this._options); + $template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template); + $navigation = $template.find(".popover-navigation"); + isOrphan = this._isOrphan(step); + if (isOrphan) { + step.element = "body>*:last"; + step.placement = "top"; + $template = $template.addClass("orphan"); + } + $element = $(step.element); + $template.addClass("tour-" + this._options.name + " tour-" + this._options.name + "-" + i); + $element.addClass("tour-" + this._options.name + "-element tour-" + this._options.name + "-" + i + "-element"); + if (step.options) { + $.extend(options, step.options); + } + if (step.reflex) { + $element.css("cursor", "pointer").on("click.tour-" + this._options.name, (function(_this) { + return function() { + if (_this._isLast()) { return _this.next(); } else { return _this.end(); } - }); - } - if (step.prev < 0) { - $navigation.find("*[data-role=prev]").addClass("disabled"); - } - if (step.next < 0) { - $navigation.find("*[data-role=next]").addClass("disabled"); - } - step.template = $template.clone().wrap("
    ").parent().html(); - $element.popover({ - placement: step.placement, - trigger: "manual", - title: step.title, - content: step.content, - html: true, - animation: step.animation, - container: step.container, - template: step.template, - selector: step.element - }).popover("show"); - $tip = $element.data("bs.popover") ? $element.data("bs.popover").tip() : $element.data("popover").tip(); - $tip.attr("id", step.id); - this._scrollIntoView($tip); - this._reposition($tip, step); - if (isOrphan) { - return this._center($tip); - } - }; + }; + })(this)); + } + if (step.prev < 0) { + $navigation.find("[data-role='prev']").addClass("disabled"); + } + if (step.next < 0) { + $navigation.find("[data-role='next']").addClass("disabled"); + } + if (!step.duration) { + $navigation.find("[data-role='pause-resume']").remove(); + } + step.template = $template.clone().wrap("
    ").parent().html(); + $element.popover({ + placement: step.placement, + trigger: "manual", + title: step.title, + content: step.content, + html: true, + animation: step.animation, + container: step.container, + template: step.template, + selector: step.element + }).popover("show"); + $tip = $element.data("bs.popover") ? $element.data("bs.popover").tip() : $element.data("popover").tip(); + $tip.attr("id", step.id); + this._reposition($tip, step); + if (isOrphan) { + return this._center($tip); + } + }; - Tour.prototype._reposition = function($tip, step) { - var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; - offsetWidth = $tip[0].offsetWidth; - offsetHeight = $tip[0].offsetHeight; - tipOffset = $tip.offset(); - originalLeft = tipOffset.left; - originalTop = tipOffset.top; - offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); - if (offsetBottom < 0) { - tipOffset.top = tipOffset.top + offsetBottom; + Tour.prototype._reposition = function($tip, step) { + var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; + offsetWidth = $tip[0].offsetWidth; + offsetHeight = $tip[0].offsetHeight; + tipOffset = $tip.offset(); + originalLeft = tipOffset.left; + originalTop = tipOffset.top; + offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); + if (offsetBottom < 0) { + tipOffset.top = tipOffset.top + offsetBottom; + } + offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth(); + if (offsetRight < 0) { + tipOffset.left = tipOffset.left + offsetRight; + } + if (tipOffset.top < 0) { + tipOffset.top = 0; + } + if (tipOffset.left < 0) { + tipOffset.left = 0; + } + $tip.offset(tipOffset); + if (step.placement === "bottom" || step.placement === "top") { + if (originalLeft !== tipOffset.left) { + return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, "left"); } - offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth(); - if (offsetRight < 0) { - tipOffset.left = tipOffset.left + offsetRight; + } else { + if (originalTop !== tipOffset.top) { + return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, "top"); } - if (tipOffset.top < 0) { - tipOffset.top = 0; - } - if (tipOffset.left < 0) { - tipOffset.left = 0; - } - $tip.offset(tipOffset); - if (step.placement === "bottom" || step.placement === "top") { - if (originalLeft !== tipOffset.left) { - return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, "left"); + } + }; + + Tour.prototype._center = function($tip) { + return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2); + }; + + Tour.prototype._replaceArrow = function($tip, delta, dimension, position) { + return $tip.find(".arrow").css(position, delta ? 50 * (1 - delta / dimension) + "%" : ""); + }; + + Tour.prototype._scrollIntoView = function(element, callback) { + var $element, $window, counter, offsetTop, scrollTop, windowHeight; + $element = $(element); + if (!$element.length) { + return callback(); + } + $window = $(window); + offsetTop = $element.offset().top; + windowHeight = $window.height(); + scrollTop = Math.max(0, offsetTop - (windowHeight / 2)); + this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + "."); + counter = 0; + return $("body,html").stop(true, true).animate({ + scrollTop: Math.ceil(scrollTop) + }, (function(_this) { + return function() { + if (++counter === 2) { + callback(); + return _this._debug("Scroll into view. Animation end element offset: " + ($element.offset().top) + ". Window height: " + ($window.height()) + "."); } + }; + })(this)); + }; + + Tour.prototype._onResize = function(callback, timeout) { + return $(window).on("resize.tour-" + this._options.name, function() { + clearTimeout(timeout); + return timeout = setTimeout(callback, 100); + }); + }; + + Tour.prototype._initMouseNavigation = function() { + var _this; + _this = this; + return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']:not(.disabled)").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']:not(.disabled)").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']:not(.disabled)", (function(_this) { + return function(e) { + e.preventDefault(); + return _this.next(); + }; + })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']:not(.disabled)", (function(_this) { + return function(e) { + e.preventDefault(); + return _this.prev(); + }; + })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']", (function(_this) { + return function(e) { + e.preventDefault(); + return _this.end(); + }; + })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']", function(e) { + var $this; + e.preventDefault(); + $this = $(this); + $this.text(_this._paused ? $this.data("pause-text") : $this.data("resume-text")); + if (_this._paused) { + return _this.resume(); } else { - if (originalTop !== tipOffset.top) { - return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, "top"); - } + return _this.pause(); } - }; + }); + }; - Tour.prototype._center = function($tip) { - return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2); - }; - - Tour.prototype._replaceArrow = function($tip, delta, dimension, position) { - return $tip.find(".arrow").css(position, delta ? 50 * (1 - delta / dimension) + "%" : ""); - }; - - Tour.prototype._scrollIntoView = function(tip) { - return $("html, body").stop().animate({ - scrollTop: Math.ceil(tip.offset().top - ($(window).height() / 2)) - }); - }; - - Tour.prototype._onResize = function(callback, timeout) { - return $(window).on("resize.tour-" + this._options.name, function() { - clearTimeout(timeout); - return timeout = setTimeout(callback, 100); - }); - }; - - Tour.prototype._setupKeyboardNavigation = function() { - var _this = this; - if (this._options.keyboard) { - return $(document).on("keyup.tour-" + this._options.name, function(e) { - if (!e.which) { - return; - } - switch (e.which) { - case 39: - e.preventDefault(); - if (_this._current < _this._steps.length - 1) { - return _this.next(); - } else { - return _this.end(); - } - break; - case 37: - e.preventDefault(); - if (_this._current > 0) { - return _this.prev(); - } - break; - case 27: - e.preventDefault(); + Tour.prototype._initKeyboardNavigation = function() { + if (!this._options.keyboard) { + return; + } + return $(document).on("keyup.tour-" + this._options.name, (function(_this) { + return function(e) { + if (!e.which) { + return; + } + switch (e.which) { + case 39: + e.preventDefault(); + if (_this._isLast()) { + return _this.next(); + } else { return _this.end(); - } - }); - } - }; + } + break; + case 37: + e.preventDefault(); + if (_this._current > 0) { + return _this.prev(); + } + break; + case 27: + e.preventDefault(); + return _this.end(); + } + }; + })(this)); + }; - Tour.prototype._makePromise = function(result) { - if (result && $.isFunction(result.then)) { - return result; - } else { - return null; - } - }; + Tour.prototype._makePromise = function(result) { + if (result && $.isFunction(result.then)) { + return result; + } else { + return null; + } + }; - Tour.prototype._callOnPromiseDone = function(promise, cb, arg) { - var _this = this; - if (promise) { - return promise.then(function(e) { + Tour.prototype._callOnPromiseDone = function(promise, cb, arg) { + if (promise) { + return promise.then((function(_this) { + return function(e) { return cb.call(_this, arg); - }); - } else { - return cb.call(this, arg); - } - }; + }; + })(this)); + } else { + return cb.call(this, arg); + } + }; - Tour.prototype._showBackdrop = function(element) { - if (this.backdrop.overlay !== null) { - return; - } - this._showOverlay(); - if (element != null) { - return this._showOverlayElement(element); - } - }; + Tour.prototype._showBackdrop = function(element) { + if (this.backdrop.backgroundShown) { + return; + } + this.backdrop = $("
    ", { + "class": "tour-backdrop" + }); + this.backdrop.backgroundShown = true; + return $("body").append(this.backdrop); + }; - Tour.prototype._hideBackdrop = function() { - if (this.backdrop.overlay === null) { - return; - } - if (this.backdrop.$element) { - this._hideOverlayElement(); - } - return this._hideOverlay(); - }; + Tour.prototype._hideBackdrop = function() { + this._hideOverlayElement(); + return this._hideBackground(); + }; - Tour.prototype._showOverlay = function() { - this.backdrop = $("
    ", { - "class": "tour-backdrop" - }); - return $("body").append(this.backdrop); - }; + Tour.prototype._hideBackground = function() { + this.backdrop.remove(); + this.backdrop.overlay = null; + return this.backdrop.backgroundShown = false; + }; - Tour.prototype._hideOverlay = function() { - this.backdrop.remove(); - return this.backdrop.overlay = null; - }; + Tour.prototype._showOverlayElement = function(element) { + var $background, $element, offset; + $element = $(element); + if (!$element || $element.length === 0 || this.backdrop.overlayElementShown) { + return; + } + this.backdrop.overlayElementShown = true; + $background = $("
    "); + offset = $element.offset(); + offset.top = offset.top; + offset.left = offset.left; + $background.width($element.innerWidth()).height($element.innerHeight()).addClass("tour-step-background").offset(offset); + $element.addClass("tour-step-backdrop"); + $("body").append($background); + this.backdrop.$element = $element; + return this.backdrop.$background = $background; + }; - Tour.prototype._showOverlayElement = function(element) { - var $background, $element, offset; - $element = $(element); - $background = $("
    "); - offset = $element.offset(); - offset.top = offset.top; - offset.left = offset.left; - $background.width($element.innerWidth()).height($element.innerHeight()).addClass("tour-step-background").offset(offset); - $element.addClass("tour-step-backdrop"); - $("body").append($background); - this.backdrop.$element = $element; - return this.backdrop.$background = $background; - }; + Tour.prototype._hideOverlayElement = function() { + if (!this.backdrop.overlayElementShown) { + return; + } + this.backdrop.$element.removeClass("tour-step-backdrop"); + this.backdrop.$background.remove(); + this.backdrop.$element = null; + this.backdrop.$background = null; + return this.backdrop.overlayElementShown = false; + }; - Tour.prototype._hideOverlayElement = function() { - this.backdrop.$element.removeClass("tour-step-backdrop"); - this.backdrop.$background.remove(); - this.backdrop.$element = null; - return this.backdrop.$background = null; - }; + Tour.prototype._clearTimer = function() { + window.clearTimeout(this._timer); + this._timer = null; + return this._duration = null; + }; - return Tour; + return Tour; - })(); - return window.Tour = Tour; - })(jQuery, window); - -}).call(this); + })(); + return window.Tour = Tour; +})(jQuery, window); diff --git a/addons/website/static/src/js/website.tour.banner.js b/addons/website/static/src/js/website.tour.banner.js index 65099d03986..443405e2401 100644 --- a/addons/website/static/src/js/website.tour.banner.js +++ b/addons/website/static/src/js/website.tour.banner.js @@ -15,7 +15,6 @@ popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, }, { - waitNot: '.popover.tour', element: 'button[data-action=edit]', placement: 'bottom', title: _t("Edit this page"), @@ -52,7 +51,6 @@ popover: { next: _t("Continue") }, }, { - waitNot: '.popover.tour', element: 'button[data-action=snippet]', placement: 'bottom', title: _t("Add Another Block"), @@ -81,7 +79,6 @@ popover: { next: _t("Continue") }, }, { - waitNot: '.popover.tour', element: 'a[data-action=show-mobile-preview]', placement: 'bottom', title: _t("Test Your Mobile Version"), diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index fc0dd513cf2..df6108e0278 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -32,7 +32,7 @@ if (website.EditorBar) { var self = this; var menu = $('#help-menu'); _.each(website.Tour.tours, function (tour) { - if (tour.mode != "tutorial") { + if (tour.mode === "test") { return; } var $menuItem = $($.parseHTML('
  • '+tour.name+'
  • ')); @@ -90,16 +90,19 @@ website.Tour = {}; website.Tour.tours = {}; website.Tour.state = null; website.Tour.register = function (tour) { + if (tour.mode !== "test") tour.mode = "tutorial"; website.Tour.tours[tour.id] = tour; }; website.Tour.run = function (tour_id, mode) { - if (localStorage.getItem("tour")) { // only one test running + if (localStorage.getItem("tour") && mode === "test") { // only one test running return; } var tour = website.Tour.tours[tour_id]; - website.Tour.save_state(tour.id, mode || tour.mode, 0); - if (tour.path) { + website.Tour.saveState(tour.id, mode || tour.mode, 0); + if (tour.path && !window.location.href.match(new RegExp("("+website.Tour.getLang()+")?"+tour.path+"#?$", "i"))) { window.location.href = "/"+website.Tour.getLang()+tour.path; + } else { + website.Tour.running(); } }; website.Tour.registerSteps = function (tour) { @@ -114,48 +117,82 @@ website.Tour.registerSteps = function (tour) { if (!step.waitNot && index > 0 && tour.steps[index-1] && tour.steps[index-1].popover && tour.steps[index-1].popover.next) { - step.waitNot = '.popover.tour:visible'; + step.waitNot = '.popover.tour.fade.in:visible'; } if (!step.waitFor && index > 0 && tour.steps[index-1].snippet) { step.waitFor = '.oe_overlay_options .oe_options:visible'; } - if (!step.element) step.orphan = true; - - var snippet = step.element.match(/#oe_snippets (.*) \.oe_snippet_thumbnail/); + var snippet = step.element && step.element.match(/#oe_snippets (.*) \.oe_snippet_thumbnail/); if (snippet) { step.snippet = snippet[1]; } else if (step.snippet) { step.element = '#oe_snippets '+step.snippet+' .oe_snippet_thumbnail'; } + + if (!step.element) step.orphan = true; } if (tour.steps[index-1] && tour.steps[index-1].popover && tour.steps[index-1].popover.next) { var step = { - step_id: index, - waitNot: '.popover.tour:visible' + id: index, + waitNot: '.popover.tour.fade.in:visible' }; tour.steps.push(step); } // rendering bootstrap tour and popover - if (tour.mode != "test" || typeof Tour !== "undefined") { + if (tour.mode !== "test" || typeof Tour !== "undefined") { tour.tour = new Tour({ - name: this.id, + debug: true, + name: tour.id, storage: localStorage, keyboard: false, - template: this.popover(), + template: website.Tour.popover(), onHide: function () { window.scrollTo(0, 0); } }); + for (var index=0, len=tour.steps.length; index -1) { - tour_id = window.location.href.match(/#tutorial\.(.*)=true/)[1]; - mode = "tutorial"; - step_id = 0; +website.Tour.getState = function () { + var state = JSON.parse(localStorage.getItem("tour") || 'false') || {}; + var tour_id,mode,step_id; + if (!state.id && window.location.href.indexOf("#tutorial.") > -1) { + state = { + "id": window.location.href.match(/#tutorial\.(.*)=true/)[1], + "mode": "tutorial", + "step_id": 0 + }; } - if (!tour_id) { + if (!state.id) { return; } - var tour = website.Tour.tours[tour_id]; - return {'tour': tour, 'tour_id': tour_id, 'mode': mode, 'step_id': step_id}; + state.tour = website.Tour.tours[state.id]; + state.step = state.tour.steps[state.step_id]; + return state; }; website.Tour.error = function (tour, step, message) { website.Tour.reset(); throw new Error(message + - + "\ntour:" + tour.id + - + "\nstep:" + step.id + ": '" + (step._title || step.title) + "'" + + "\ntour: " + tour.id + + + "\nstep: " + step.id + ": '" + (step._title || step.title) + "'" + '\nhref: ' + window.location.href + '\nreferrer: ' + document.referrer + '\nelement: ' + Boolean(!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) + '\nwaitNot: ' + Boolean(!step.waitNot || !$(step.waitNot).size()) + '\nwaitFor: ' + Boolean(!step.waitFor || $(step.waitFor).size()) - + "\nlocalStorage: " + localStorage.getItem("tour") + + "\nlocalStorage: " + JSON.stringify(localStorage) + '\n\n' + $("body").html() ); }; @@ -206,24 +242,39 @@ website.Tour.lists = function () { } return tour_ids; }; -website.Tour.save_state = function (tour_id, mode, step_id) { - localStorage.setItem("tour", '{tour_id:'+tour_id+', mode:'+mode+', step_id:'+step_id+'}'); +website.Tour.saveState = function (tour_id, mode, step_id) { + localStorage.setItem("tour", JSON.stringify({"id":tour_id, "mode":mode, "step_id":step_id})); }; website.Tour.reset = function () { - var running = website.Tour.get_state(); - for (var k in running.tour.steps) { - running.tour.steps[k].busy = false; + var state = website.Tour.getState(); + if (state) { + for (var k in state.tour.steps) { + state.tour.steps[k].busy = false; + } + if (state.tour.tour) { + state.tour.tour.end(); + } } localStorage.removeItem("tour"); clearTimeout(website.Tour.timer); clearTimeout(website.Tour.testtimer); - $('.popover.tour').remove(); + $(".popover.tour").remove(); }; website.Tour.running = function () { - var running = website.Tour.get_state(); - website.Tour.registerSteps(running.tour); - website.Tour.nextStep( running.tour, running.step_id ); + var state = website.Tour.getState(); + if (state) { + website.Tour.registerSteps(state.tour); + if ($.ajaxBusy) { + $(document).ajaxStop(function() { + setTimeout(function () { + website.Tour.nextStep( state.tour, state.step, state.mode === "test" ? 5000 : 0 ); + },0); + }); + } else { + website.Tour.nextStep( state.tour, state.step, state.mode === "test" ? 5000 : 0 ); + } + } }; website.Tour.timer = null; @@ -238,83 +289,62 @@ website.Tour.check = function (step) { website.Tour.waitNextStep = function (tour, step, overlaps) { var time = new Date().getTime(); var timer; + var next = tour.steps[step.id+1]; window.onbeforeunload = function () { clearTimeout(website.Tour.timer); clearTimeout(website.Tour.testtimer); }; - // check popover activity - $(".popover.tour button") - .off() - .on("click", function () { - $(".popover.tour").remove(); - if (step.busy) return; - if (!$(this).is("[data-role='next']")) { - clearTimeout(website.Tour.timer); - step.busy = true; - if (tour.tour) { - tour.tour.end(); - } - tour.endTour(tour); - } - }); - function checkNext () { + website.Tour.autoToggleBootstrapTour(); + clearTimeout(website.Tour.timer); - if (step.busy) return; - if (website.Tour.check(step)) { - step.busy = true; + if (next.busy) return; + if (website.Tour.check(next)) { + next.busy = true; + clearTimeout(website.Tour.currentTimer); // use an other timeout for cke dom loading setTimeout(function () { - website.Tour.nextStep(tour, step, overlaps); + website.Tour.nextStep(tour, next, overlaps); }, website.Tour.defaultDelay); } else if (!overlaps || new Date().getTime() - time < overlaps) { - if (self.current.element) { - var $popover = $(".popover.tour"); - if(!$(self.current.element).is(":visible")) { - $popover.data("hide", true).fadeOut(300); - } else if($popover.data("hide")) { - $popover.data("hide", false).fadeIn(150); - } - } website.Tour.timer = setTimeout(checkNext, website.Tour.defaultDelay); } else { - website.Tour.error(tour, step, "Can't arrive to the next step"); + website.Tour.error(tour, next, "Can't arrive to the next step"); } } checkNext(); }; +website.Tour.currentTimer = null; website.Tour.nextStep = function (tour, step, overlaps) { - var state = website.Tour.get_state(); - website.Tour.save_state(tour.id, state.mode, step.id); + var state = website.Tour.getState(); + website.Tour.saveState(state.id, state.mode, step.id); - // clear popover (fix for boostrap tour if the element is removed before destroy popover) - $(".popover.tour").remove(); - // go to step in bootstrap tour - if (tour.tour) { - tour.tour.goto(step.id); + website.Tour.autoToggleBootstrapTour(); + + if (step.onload) { + step.onload(); } - step.onload(); var next = tour.steps[step.id+1]; if (next) { setTimeout(function () { - website.Tour.waitNextStep(tour, next, overlaps); + website.Tour.waitNextStep(tour, step, overlaps); if (state.mode === "test") { setTimeout(function(){ website.Tour.autoNextStep(tour, step); }, website.Tour.defaultDelay); } - }, next && next.wait || 0); + }, next.wait || 0); } else { website.Tour.endTour(tour); } }; website.Tour.endTour = function (tour) { - var state = website.Tour.get_state(); - var test = state.step_id >= tour.steps.length-1; - this.reset(); + var state = website.Tour.getState(); + var test = state.step.id >= state.tour.steps.length-1; + website.Tour.reset(); if (test) { console.log('ok'); } else { @@ -388,7 +418,8 @@ website.Tour.autoDragAndDropSnippet = function (selector) { $dropZone.trigger($.Event("mouseup", { which: 1, pageX: dropPosition.left, pageY: dropPosition.top })); }; -website.ready(website.Tour.running); +//$(document).ready(website.Tour.running); +website.ready().then(website.Tour.running); }()); From 58b6aeb01d489922f8311e6a390805d9cb1c877f Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 21 Mar 2014 12:07:50 +0100 Subject: [PATCH 036/143] [IMP] website tour: remove bootstrap Tour lib bzr revid: chm@openerp.com-20140321110750-ew8rj3nv2jcort1x --- .../lib/bootstrap-tour/bootstrap-tour.css | 65 -- .../lib/bootstrap-tour/bootstrap-tour.js | 716 ------------------ addons/website/static/src/css/editor.css | 24 +- addons/website/static/src/css/editor.sass | 19 +- .../static/src/js/website.tour.banner.js | 2 + addons/website/static/src/js/website.tour.js | 349 +++++---- 6 files changed, 258 insertions(+), 917 deletions(-) delete mode 100644 addons/website/static/lib/bootstrap-tour/bootstrap-tour.css delete mode 100644 addons/website/static/lib/bootstrap-tour/bootstrap-tour.js diff --git a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css deleted file mode 100644 index 5449158e7f4..00000000000 --- a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css +++ /dev/null @@ -1,65 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.9.1 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -.tour-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1100; - background-color: #000; - opacity: 0.8; -} -.tour-step-backdrop { - position: relative; - z-index: 1101; - background: inherit; -} -.tour-step-background { - position: absolute; - z-index: 1100; - background: inherit; - border-radius: 6px; -} -.popover[class*="tour-"] { - z-index: 1100; -} -.popover[class*="tour-"] .popover-navigation { - padding: 9px 14px; -} -.popover[class*="tour-"] .popover-navigation *[data-role="end"] { - float: right; -} -.popover[class*="tour-"] .popover-navigation *[data-role="prev"], -.popover[class*="tour-"] .popover-navigation *[data-role="next"], -.popover[class*="tour-"] .popover-navigation *[data-role="end"] { - cursor: pointer; -} -.popover[class*="tour-"] .popover-navigation *[data-role="prev"].disabled, -.popover[class*="tour-"] .popover-navigation *[data-role="next"].disabled, -.popover[class*="tour-"] .popover-navigation *[data-role="end"].disabled { - cursor: default; -} -.popover[class*="tour-"].orphan { - position: fixed; - margin-top: 0; -} -.popover[class*="tour-"].orphan .arrow { - display: none; -} diff --git a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js deleted file mode 100644 index a0172c718c0..00000000000 --- a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js +++ /dev/null @@ -1,716 +0,0 @@ -/* =========================================================== -# bootstrap-tour - v0.9.1 -# http://bootstraptour.com -# ============================================================== -# Copyright 2012-2013 Ulrich Sossou -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -*/ -(function($, window) { - var Tour, document; - document = window.document; - Tour = (function() { - function Tour(options) { - this._options = $.extend({ - name: "tour", - steps: [], - container: "body", - keyboard: true, - storage: window.localStorage, - debug: false, - backdrop: false, - redirect: true, - orphan: false, - duration: false, - basePath: "", - template: "

    ", - afterSetState: function(key, value) {}, - afterGetState: function(key, value) {}, - afterRemoveState: function(key) {}, - onStart: function(tour) {}, - onEnd: function(tour) {}, - onShow: function(tour) {}, - onShown: function(tour) {}, - onHide: function(tour) {}, - onHidden: function(tour) {}, - onNext: function(tour) {}, - onPrev: function(tour) {}, - onPause: function(tour, duration) {}, - onResume: function(tour, duration) {} - }, options); - this._force = false; - this._inited = false; - this.backdrop = { - overlay: null, - $element: null, - $background: null, - backgroundShown: false, - overlayElementShown: false - }; - this; - } - - Tour.prototype.addSteps = function(steps) { - var step, _i, _len; - for (_i = 0, _len = steps.length; _i < _len; _i++) { - step = steps[_i]; - this.addStep(step); - } - return this; - }; - - Tour.prototype.addStep = function(step) { - this._options.steps.push(step); - return this; - }; - - Tour.prototype.getStep = function(i) { - if (this._options.steps[i] != null) { - return $.extend({ - id: "step-" + i, - path: "", - placement: "right", - title: "", - content: "

    ", - next: i === this._options.steps.length - 1 ? -1 : i + 1, - prev: i - 1, - animation: true, - container: this._options.container, - backdrop: this._options.backdrop, - redirect: this._options.redirect, - orphan: this._options.orphan, - duration: this._options.duration, - template: this._options.template, - onShow: this._options.onShow, - onShown: this._options.onShown, - onHide: this._options.onHide, - onHidden: this._options.onHidden, - onNext: this._options.onNext, - onPrev: this._options.onPrev, - onPause: this._options.onPause, - onResume: this._options.onResume - }, this._options.steps[i]); - } - }; - - Tour.prototype.init = function(force) { - this._force = force; - if (this.ended()) { - this._debug("Tour ended, init prevented."); - return this; - } - this.setCurrentStep(); - this._initMouseNavigation(); - this._initKeyboardNavigation(); - this._onResize((function(_this) { - return function() { - return _this.showStep(_this._current); - }; - })(this)); - if (this._current !== null) { - this.showStep(this._current); - } - this._inited = true; - return this; - }; - - Tour.prototype.start = function(force) { - var promise; - if (force == null) { - force = false; - } - if (!this._inited) { - this.init(force); - } - if (this._current === null) { - promise = this._makePromise(this._options.onStart != null ? this._options.onStart(this) : void 0); - this._callOnPromiseDone(promise, this.showStep, 0); - } - return this; - }; - - Tour.prototype.next = function() { - var promise; - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this._showNextStep); - }; - - Tour.prototype.prev = function() { - var promise; - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this._showPrevStep); - }; - - Tour.prototype.goTo = function(i) { - var promise; - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, this.showStep, i); - }; - - Tour.prototype.end = function() { - var endHelper, promise; - endHelper = (function(_this) { - return function(e) { - $(document).off("click.tour-" + _this._options.name); - $(document).off("keyup.tour-" + _this._options.name); - $(window).off("resize.tour-" + _this._options.name); - _this._setState("end", "yes"); - _this._inited = false; - _this._force = false; - _this._clearTimer(); - if (_this._options.onEnd != null) { - return _this._options.onEnd(_this); - } - }; - })(this); - promise = this.hideStep(this._current); - return this._callOnPromiseDone(promise, endHelper); - }; - - Tour.prototype.ended = function() { - return !this._force && !!this._getState("end"); - }; - - Tour.prototype.restart = function() { - this._removeState("current_step"); - this._removeState("end"); - this.setCurrentStep(0); - return this.start(); - }; - - Tour.prototype.pause = function() { - var step; - step = this.getStep(this._current); - if (!(step && step.duration)) { - return this; - } - this._paused = true; - this._duration -= new Date().getTime() - this._start; - window.clearTimeout(this._timer); - this._debug("Paused/Stopped step " + (this._current + 1) + " timer (" + this._duration + " remaining)."); - if (step.onPause != null) { - return step.onPause(this, this._duration); - } - }; - - Tour.prototype.resume = function() { - var step; - step = this.getStep(this._current); - if (!(step && step.duration)) { - return this; - } - this._paused = false; - this._start = new Date().getTime(); - this._duration = this._duration || step.duration; - this._timer = window.setTimeout((function(_this) { - return function() { - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - }; - })(this), this._duration); - this._debug("Started step " + (this._current + 1) + " timer with duration " + this._duration); - if ((step.onResume != null) && this._duration !== step.duration) { - return step.onResume(this, this._duration); - } - }; - - Tour.prototype.hideStep = function(i) { - var hideStepHelper, promise, step; - step = this.getStep(i); - if (!step) { - return; - } - this._clearTimer(); - promise = this._makePromise(step.onHide != null ? step.onHide(this, i) : void 0); - hideStepHelper = (function(_this) { - return function(e) { - var $element; - $element = $(step.element); - if (!($element.data("bs.popover") || $element.data("popover"))) { - $element = $("body"); - } - $element.popover("destroy").removeClass("tour-" + _this._options.name + "-element tour-" + _this._options.name + "-" + i + "-element"); - if (step.reflex) { - $element.css("cursor", "").off("click.tour-" + _this._options.name); - } - if (step.backdrop) { - _this._hideBackdrop(); - } - if (step.onHidden != null) { - return step.onHidden(_this); - } - }; - })(this); - this._callOnPromiseDone(promise, hideStepHelper); - return promise; - }; - - Tour.prototype.showStep = function(i) { - var promise, showStepHelper, skipToPrevious, step; - if (this.ended()) { - this._debug("Tour ended, showStep prevented."); - return this; - } - step = this.getStep(i); - if (!step) { - return; - } - skipToPrevious = i < this._current; - promise = this._makePromise(step.onShow != null ? step.onShow(this, i) : void 0); - showStepHelper = (function(_this) { - return function(e) { - var current_path, path; - _this.setCurrentStep(i); - path = (function() { - switch ({}.toString.call(step.path)) { - case "[object Function]": - return step.path(); - case "[object String]": - return this._options.basePath + step.path; - default: - return step.path; - } - }).call(_this); - current_path = [document.location.pathname, document.location.hash].join(""); - if (_this._isRedirect(path, current_path)) { - _this._redirect(step, path); - return; - } - if (_this._isOrphan(step)) { - if (!step.orphan) { - _this._debug("Skip the orphan step " + (_this._current + 1) + ". Orphan option is false and the element doesn't exist or is hidden."); - if (skipToPrevious) { - _this._showPrevStep(); - } else { - _this._showNextStep(); - } - return; - } - _this._debug("Show the orphan step " + (_this._current + 1) + ". Orphans option is true."); - } - if (step.backdrop) { - _this._showBackdrop(!_this._isOrphan(step) ? step.element : void 0); - } - _this._scrollIntoView(step.element, function() { - if ((step.element != null) && step.backdrop) { - _this._showOverlayElement(step.element); - } - _this._showPopover(step, i); - if (step.onShown != null) { - step.onShown(_this); - } - return _this._debug("Step " + (_this._current + 1) + " of " + _this._options.steps.length); - }); - if (step.duration) { - return _this.resume(); - } - }; - })(this); - this._callOnPromiseDone(promise, showStepHelper); - return promise; - }; - - Tour.prototype.getCurrentStep = function() { - return this._current; - }; - - Tour.prototype.setCurrentStep = function(value) { - if (value != null) { - this._current = value; - this._setState("current_step", value); - } else { - this._current = this._getState("current_step"); - this._current = this._current === null ? null : parseInt(this._current, 10); - } - return this; - }; - - Tour.prototype._setState = function(key, value) { - var e, keyName; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - try { - this._options.storage.setItem(keyName, value); - } catch (_error) { - e = _error; - if (e.code === DOMException.QUOTA_EXCEEDED_ERR) { - this.debug("LocalStorage quota exceeded. State storage failed."); - } - } - return this._options.afterSetState(keyName, value); - } else { - if (this._state == null) { - this._state = {}; - } - return this._state[key] = value; - } - }; - - Tour.prototype._removeState = function(key) { - var keyName; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - this._options.storage.removeItem(keyName); - return this._options.afterRemoveState(keyName); - } else { - if (this._state != null) { - return delete this._state[key]; - } - } - }; - - Tour.prototype._getState = function(key) { - var keyName, value; - if (this._options.storage) { - keyName = "" + this._options.name + "_" + key; - value = this._options.storage.getItem(keyName); - } else { - if (this._state != null) { - value = this._state[key]; - } - } - if (value === void 0 || value === "null") { - value = null; - } - this._options.afterGetState(key, value); - return value; - }; - - Tour.prototype._showNextStep = function() { - var promise, showNextStepHelper, step; - step = this.getStep(this._current); - showNextStepHelper = (function(_this) { - return function(e) { - return _this.showStep(step.next); - }; - })(this); - promise = this._makePromise(step.onNext != null ? step.onNext(this) : void 0); - return this._callOnPromiseDone(promise, showNextStepHelper); - }; - - Tour.prototype._showPrevStep = function() { - var promise, showPrevStepHelper, step; - step = this.getStep(this._current); - showPrevStepHelper = (function(_this) { - return function(e) { - return _this.showStep(step.prev); - }; - })(this); - promise = this._makePromise(step.onPrev != null ? step.onPrev(this) : void 0); - return this._callOnPromiseDone(promise, showPrevStepHelper); - }; - - Tour.prototype._debug = function(text) { - if (this._options.debug) { - return window.console.log("Bootstrap Tour '" + this._options.name + "' | " + text); - } - }; - - Tour.prototype._isRedirect = function(path, currentPath) { - return (path != null) && path !== "" && ((toString.call(path) === "[object RegExp]" && !path.test(currentPath)) || (toString.call(path) === "[object String]" && path.replace(/\?.*$/, "").replace(/\/?$/, "") !== currentPath.replace(/\/?$/, ""))); - }; - - Tour.prototype._redirect = function(step, path) { - if ($.isFunction(step.redirect)) { - return step.redirect.call(this, path); - } else if (step.redirect === true) { - this._debug("Redirect to " + path); - return document.location.href = path; - } - }; - - Tour.prototype._isOrphan = function(step) { - return (step.element == null) || !$(step.element).length || $(step.element).is(":hidden") && ($(step.element)[0].namespaceURI !== "http://www.w3.org/2000/svg"); - }; - - Tour.prototype._isLast = function() { - return this._current < this._options.steps.length - 1; - }; - - Tour.prototype._showPopover = function(step, i) { - var $element, $navigation, $template, $tip, isOrphan, options; - options = $.extend({}, this._options); - $template = $.isFunction(step.template) ? $(step.template(i, step)) : $(step.template); - $navigation = $template.find(".popover-navigation"); - isOrphan = this._isOrphan(step); - if (isOrphan) { - step.element = "body>*:last"; - step.placement = "top"; - $template = $template.addClass("orphan"); - } - $element = $(step.element); - $template.addClass("tour-" + this._options.name + " tour-" + this._options.name + "-" + i); - $element.addClass("tour-" + this._options.name + "-element tour-" + this._options.name + "-" + i + "-element"); - if (step.options) { - $.extend(options, step.options); - } - if (step.reflex) { - $element.css("cursor", "pointer").on("click.tour-" + this._options.name, (function(_this) { - return function() { - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - }; - })(this)); - } - if (step.prev < 0) { - $navigation.find("[data-role='prev']").addClass("disabled"); - } - if (step.next < 0) { - $navigation.find("[data-role='next']").addClass("disabled"); - } - if (!step.duration) { - $navigation.find("[data-role='pause-resume']").remove(); - } - step.template = $template.clone().wrap("
    ").parent().html(); - $element.popover({ - placement: step.placement, - trigger: "manual", - title: step.title, - content: step.content, - html: true, - animation: step.animation, - container: step.container, - template: step.template, - selector: step.element - }).popover("show"); - $tip = $element.data("bs.popover") ? $element.data("bs.popover").tip() : $element.data("popover").tip(); - $tip.attr("id", step.id); - this._reposition($tip, step); - if (isOrphan) { - return this._center($tip); - } - }; - - Tour.prototype._reposition = function($tip, step) { - var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; - offsetWidth = $tip[0].offsetWidth; - offsetHeight = $tip[0].offsetHeight; - tipOffset = $tip.offset(); - originalLeft = tipOffset.left; - originalTop = tipOffset.top; - offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); - if (offsetBottom < 0) { - tipOffset.top = tipOffset.top + offsetBottom; - } - offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth(); - if (offsetRight < 0) { - tipOffset.left = tipOffset.left + offsetRight; - } - if (tipOffset.top < 0) { - tipOffset.top = 0; - } - if (tipOffset.left < 0) { - tipOffset.left = 0; - } - $tip.offset(tipOffset); - if (step.placement === "bottom" || step.placement === "top") { - if (originalLeft !== tipOffset.left) { - return this._replaceArrow($tip, (tipOffset.left - originalLeft) * 2, offsetWidth, "left"); - } - } else { - if (originalTop !== tipOffset.top) { - return this._replaceArrow($tip, (tipOffset.top - originalTop) * 2, offsetHeight, "top"); - } - } - }; - - Tour.prototype._center = function($tip) { - return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2); - }; - - Tour.prototype._replaceArrow = function($tip, delta, dimension, position) { - return $tip.find(".arrow").css(position, delta ? 50 * (1 - delta / dimension) + "%" : ""); - }; - - Tour.prototype._scrollIntoView = function(element, callback) { - var $element, $window, counter, offsetTop, scrollTop, windowHeight; - $element = $(element); - if (!$element.length) { - return callback(); - } - $window = $(window); - offsetTop = $element.offset().top; - windowHeight = $window.height(); - scrollTop = Math.max(0, offsetTop - (windowHeight / 2)); - this._debug("Scroll into view. ScrollTop: " + scrollTop + ". Element offset: " + offsetTop + ". Window height: " + windowHeight + "."); - counter = 0; - return $("body,html").stop(true, true).animate({ - scrollTop: Math.ceil(scrollTop) - }, (function(_this) { - return function() { - if (++counter === 2) { - callback(); - return _this._debug("Scroll into view. Animation end element offset: " + ($element.offset().top) + ". Window height: " + ($window.height()) + "."); - } - }; - })(this)); - }; - - Tour.prototype._onResize = function(callback, timeout) { - return $(window).on("resize.tour-" + this._options.name, function() { - clearTimeout(timeout); - return timeout = setTimeout(callback, 100); - }); - }; - - Tour.prototype._initMouseNavigation = function() { - var _this; - _this = this; - return $(document).off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']:not(.disabled)").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']:not(.disabled)").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']").off("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']").on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='next']:not(.disabled)", (function(_this) { - return function(e) { - e.preventDefault(); - return _this.next(); - }; - })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='prev']:not(.disabled)", (function(_this) { - return function(e) { - e.preventDefault(); - return _this.prev(); - }; - })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='end']", (function(_this) { - return function(e) { - e.preventDefault(); - return _this.end(); - }; - })(this)).on("click.tour-" + this._options.name, ".popover.tour-" + this._options.name + " *[data-role='pause-resume']", function(e) { - var $this; - e.preventDefault(); - $this = $(this); - $this.text(_this._paused ? $this.data("pause-text") : $this.data("resume-text")); - if (_this._paused) { - return _this.resume(); - } else { - return _this.pause(); - } - }); - }; - - Tour.prototype._initKeyboardNavigation = function() { - if (!this._options.keyboard) { - return; - } - return $(document).on("keyup.tour-" + this._options.name, (function(_this) { - return function(e) { - if (!e.which) { - return; - } - switch (e.which) { - case 39: - e.preventDefault(); - if (_this._isLast()) { - return _this.next(); - } else { - return _this.end(); - } - break; - case 37: - e.preventDefault(); - if (_this._current > 0) { - return _this.prev(); - } - break; - case 27: - e.preventDefault(); - return _this.end(); - } - }; - })(this)); - }; - - Tour.prototype._makePromise = function(result) { - if (result && $.isFunction(result.then)) { - return result; - } else { - return null; - } - }; - - Tour.prototype._callOnPromiseDone = function(promise, cb, arg) { - if (promise) { - return promise.then((function(_this) { - return function(e) { - return cb.call(_this, arg); - }; - })(this)); - } else { - return cb.call(this, arg); - } - }; - - Tour.prototype._showBackdrop = function(element) { - if (this.backdrop.backgroundShown) { - return; - } - this.backdrop = $("
    ", { - "class": "tour-backdrop" - }); - this.backdrop.backgroundShown = true; - return $("body").append(this.backdrop); - }; - - Tour.prototype._hideBackdrop = function() { - this._hideOverlayElement(); - return this._hideBackground(); - }; - - Tour.prototype._hideBackground = function() { - this.backdrop.remove(); - this.backdrop.overlay = null; - return this.backdrop.backgroundShown = false; - }; - - Tour.prototype._showOverlayElement = function(element) { - var $background, $element, offset; - $element = $(element); - if (!$element || $element.length === 0 || this.backdrop.overlayElementShown) { - return; - } - this.backdrop.overlayElementShown = true; - $background = $("
    "); - offset = $element.offset(); - offset.top = offset.top; - offset.left = offset.left; - $background.width($element.innerWidth()).height($element.innerHeight()).addClass("tour-step-background").offset(offset); - $element.addClass("tour-step-backdrop"); - $("body").append($background); - this.backdrop.$element = $element; - return this.backdrop.$background = $background; - }; - - Tour.prototype._hideOverlayElement = function() { - if (!this.backdrop.overlayElementShown) { - return; - } - this.backdrop.$element.removeClass("tour-step-backdrop"); - this.backdrop.$background.remove(); - this.backdrop.$element = null; - this.backdrop.$background = null; - return this.backdrop.overlayElementShown = false; - }; - - Tour.prototype._clearTimer = function() { - window.clearTimeout(this._timer); - this._timer = null; - return this._duration = null; - }; - - return Tour; - - })(); - return window.Tour = Tour; -})(jQuery, window); diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index da0fad43caf..0bd20bdcca9 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -484,10 +484,30 @@ div.tour-backdrop { z-index: 2009; } -.popover.tour { - z-index: 2010; +.popover.tour.orphan .arrow { + display: none; +} +.popover.tour .popover-navigation { + padding: 9px 14px; +} +.popover.tour .popover-navigation *[data-role="end"] { + float: right; +} +.popover.tour .popover-navigation *[data-role="next"], .popover.tour .popover-navigation *[data-role="end"] { + cursor: pointer; } .popover.fixed { position: fixed; } + +.tour-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1100; + background-color: black; + opacity: 0.8; +} diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index 4571dcd257e..bd0f4628009 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -424,9 +424,26 @@ $editorbar_height: 30px div.tour-backdrop z-index: 2009 .popover.tour - z-index: 2010 + &.orphan .arrow + display: none + .popover-navigation + padding: 9px 14px + *[data-role="end"] + float: right + *[data-role="next"],*[data-role="end"] + cursor: pointer .popover.fixed position: fixed +.tour-backdrop + position: fixed + top: 0 + right: 0 + bottom: 0 + left: 0 + z-index: 1100 + background-color: #000 + opacity: 0.8 + // }}} diff --git a/addons/website/static/src/js/website.tour.banner.js b/addons/website/static/src/js/website.tour.banner.js index 443405e2401..a8abbcf59e2 100644 --- a/addons/website/static/src/js/website.tour.banner.js +++ b/addons/website/static/src/js/website.tour.banner.js @@ -13,6 +13,7 @@ title: _t("Welcome to your website!"), content: _t("This tutorial will guide you to build your home page. We will start by adding a banner."), popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, + backdrop: true, }, { element: 'button[data-action=edit]', @@ -77,6 +78,7 @@ title: _t("Good Job!"), content: _t("Well done, you created your homepage."), popover: { next: _t("Continue") }, + backdrop: true, }, { element: 'a[data-action=show-mobile-preview]', diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index df6108e0278..3bfd4e06da0 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -15,8 +15,8 @@ if (typeof openerp === "undefined") { var website = window.openerp.website; -// don't rewrite website.Tour in test mode -if (typeof website.Tour !== "undefined") { +// don't rewrite T in test mode +if (typeof T !== "undefined") { return; } @@ -31,14 +31,14 @@ if (website.EditorBar) { start: function () { var self = this; var menu = $('#help-menu'); - _.each(website.Tour.tours, function (tour) { + _.each(T.tours, function (tour) { if (tour.mode === "test") { return; } var $menuItem = $($.parseHTML('
  • '+tour.name+'
  • ')); $menuItem.click(function () { - website.Tour.reset(); - website.Tour.run(tour.id); + T.reset(); + T.run(tour.id); }); menu.append($menuItem); }); @@ -80,32 +80,36 @@ $.ajaxSetup({ } }); - ///////////////////////////////////////////////// - var localStorage = window.localStorage; -website.Tour = {}; -website.Tour.tours = {}; -website.Tour.state = null; -website.Tour.register = function (tour) { +var T = website.Tour = {}; +T.tours = {}; +T.defaultDelay = 50; +T.errorDelay = 5000; +T.state = null; +T.$element = null; +T.timer = null; +T.testtimer = null; +T.currentTimer = null; +T.register = function (tour) { if (tour.mode !== "test") tour.mode = "tutorial"; - website.Tour.tours[tour.id] = tour; + T.tours[tour.id] = tour; }; -website.Tour.run = function (tour_id, mode) { +T.run = function (tour_id, mode) { if (localStorage.getItem("tour") && mode === "test") { // only one test running return; } - var tour = website.Tour.tours[tour_id]; - website.Tour.saveState(tour.id, mode || tour.mode, 0); - if (tour.path && !window.location.href.match(new RegExp("("+website.Tour.getLang()+")?"+tour.path+"#?$", "i"))) { - window.location.href = "/"+website.Tour.getLang()+tour.path; + var tour = T.tours[tour_id]; + T.saveState(tour.id, mode || tour.mode, 0); + if (tour.path && !window.location.href.match(new RegExp("("+T.getLang()+")?"+tour.path+"#?$", "i"))) { + window.location.href = "/"+T.getLang()+tour.path; } else { - website.Tour.running(); + T.running(); } }; -website.Tour.registerSteps = function (tour) { +T.registerSteps = function (tour) { if (tour.register) { return; } @@ -130,7 +134,10 @@ website.Tour.registerSteps = function (tour) { step.element = '#oe_snippets '+step.snippet+' .oe_snippet_thumbnail'; } - if (!step.element) step.orphan = true; + if (!step.element) { + step.element = "body"; + step.orphan = true; + } } if (tour.steps[index-1] && tour.steps[index-1].popover && tour.steps[index-1].popover.next) { @@ -142,69 +149,151 @@ website.Tour.registerSteps = function (tour) { } // rendering bootstrap tour and popover - if (tour.mode !== "test" || typeof Tour !== "undefined") { - tour.tour = new Tour({ - debug: true, - name: tour.id, - storage: localStorage, - keyboard: false, - template: website.Tour.popover(), - onHide: function () { - window.scrollTo(0, 0); - } - }); - + if (tour.mode !== "test") { for (var index=0, len=tour.steps.length; index
    '); + } + + if (step.backdrop || $element.parents("#website-top-navbar, .modal").size()) { + $tip.css("z-index", 2010); + } + + // button click event + $tip.find("button") + .one("click", function () { + step.busy = true; + if (!$(this).is("[data-role='next']")) { + clearTimeout(T.timer); + T.endTour(); + } + T.closePopover(); + }); + + T.repositionPopover(); +}; +T.repositionPopover = function() { + var popover = T.$element.data("bs.popover"); + var $tip = T.$element.data("bs.popover").tip(); + + if (popover.options.orphan) { + return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2); + } + + var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; + offsetWidth = $tip[0].offsetWidth; + offsetHeight = $tip[0].offsetHeight; + tipOffset = $tip.offset(); + originalLeft = tipOffset.left; + originalTop = tipOffset.top; + offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); + if (offsetBottom < 0) { + tipOffset.top = tipOffset.top + offsetBottom; + } + offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth(); + if (offsetRight < 0) { + tipOffset.left = tipOffset.left + offsetRight; + } + if (tipOffset.top < 0) { + tipOffset.top = 0; + } + if (tipOffset.left < 0) { + tipOffset.left = 0; + } + $tip.offset(tipOffset); + if (popover.options.placement === "bottom" || popover.options.placement === "top") { + var left = T.$element.offset().left + T.$element.outerWidth()/2 - tipOffset.left; + $tip.find(".arrow").css("left", left ? left + "px" : ""); } else { - tour.end(); + var top = T.$element.offset().top + T.$element.outerHeight()/2 - tipOffset.top; + $tip.find(".arrow").css("top", top ? top + "px" : ""); } }; -website.Tour.popoverTitle = function (tour, options) { +T.popoverTitle = function (tour, options) { return openerp.qweb.render('website.tour_popover_title', options); }; -website.Tour.popover = function (options) { +T.popover = function (options) { return openerp.qweb.render('website.tour_popover', options); }; -website.Tour.getLang = function () { +T.getLang = function () { return $("html").attr("lang").replace(/-/, '_'); }; -website.Tour.getState = function () { +T.getState = function () { var state = JSON.parse(localStorage.getItem("tour") || 'false') || {}; var tour_id,mode,step_id; if (!state.id && window.location.href.indexOf("#tutorial.") > -1) { @@ -217,15 +306,16 @@ website.Tour.getState = function () { if (!state.id) { return; } - state.tour = website.Tour.tours[state.id]; + state.tour = T.tours[state.id]; state.step = state.tour.steps[state.step_id]; return state; }; -website.Tour.error = function (tour, step, message) { - website.Tour.reset(); +T.error = function (message) { + var state = T.getState(); + T.reset(); throw new Error(message + - + "\ntour: " + tour.id + - + "\nstep: " + step.id + ": '" + (step._title || step.title) + "'" + + "\ntour: " + state.tour.id + + + "\nstep: " + state.step.id + ": '" + (state.step._title || state.step.title) + "'" + '\nhref: ' + window.location.href + '\nreferrer: ' + document.referrer + '\nelement: ' + Boolean(!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) @@ -235,124 +325,121 @@ website.Tour.error = function (tour, step, message) { + '\n\n' + $("body").html() ); }; -website.Tour.lists = function () { +T.lists = function () { var tour_ids = []; - for (var k in website.Tour.tours) { + for (var k in T.tours) { tour_ids.push(k); } return tour_ids; }; -website.Tour.saveState = function (tour_id, mode, step_id) { - localStorage.setItem("tour", JSON.stringify({"id":tour_id, "mode":mode, "step_id":step_id})); +T.saveState = function (tour_id, mode, step_id) { + localStorage.setItem("tour", JSON.stringify({"id":tour_id, "mode":mode, "step_id":step_id || 0})); }; -website.Tour.reset = function () { - var state = website.Tour.getState(); +T.reset = function () { + var state = T.getState(); if (state) { for (var k in state.tour.steps) { state.tour.steps[k].busy = false; } - if (state.tour.tour) { - state.tour.tour.end(); - } } localStorage.removeItem("tour"); - clearTimeout(website.Tour.timer); - clearTimeout(website.Tour.testtimer); - - $(".popover.tour").remove(); + clearTimeout(T.timer); + clearTimeout(T.testtimer); + T.closePopover(); }; -website.Tour.running = function () { - var state = website.Tour.getState(); +T.running = function () { + var state = T.getState(); if (state) { - website.Tour.registerSteps(state.tour); + T.registerSteps(state.tour); if ($.ajaxBusy) { $(document).ajaxStop(function() { setTimeout(function () { - website.Tour.nextStep( state.tour, state.step, state.mode === "test" ? 5000 : 0 ); + T.nextStep(); },0); }); } else { - website.Tour.nextStep( state.tour, state.step, state.mode === "test" ? 5000 : 0 ); + T.nextStep(); } } }; - -website.Tour.timer = null; -website.Tour.testtimer = null; -website.Tour.defaultDelay = 50; -website.Tour.check = function (step) { +T.check = function (step) { return (step && (!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) && (!step.waitNot || !$(step.waitNot).size()) && (!step.waitFor || $(step.waitFor).size())); }; -website.Tour.waitNextStep = function (tour, step, overlaps) { +T.waitNextStep = function () { + var state = T.getState(); var time = new Date().getTime(); var timer; - var next = tour.steps[step.id+1]; + var next = state.tour.steps[state.step.id+1]; + var overlaps = state.mode === "test" ? T.errorDelay : 0; window.onbeforeunload = function () { - clearTimeout(website.Tour.timer); - clearTimeout(website.Tour.testtimer); + clearTimeout(T.timer); + clearTimeout(T.testtimer); }; function checkNext () { - website.Tour.autoToggleBootstrapTour(); + T.autoTogglePopover(); - clearTimeout(website.Tour.timer); - if (next.busy) return; - if (website.Tour.check(next)) { - next.busy = true; - clearTimeout(website.Tour.currentTimer); + clearTimeout(T.timer); + if (T.check(next)) { + clearTimeout(T.currentTimer); // use an other timeout for cke dom loading setTimeout(function () { - website.Tour.nextStep(tour, next, overlaps); - }, website.Tour.defaultDelay); + T.nextStep(next); + }, T.defaultDelay); } else if (!overlaps || new Date().getTime() - time < overlaps) { - website.Tour.timer = setTimeout(checkNext, website.Tour.defaultDelay); + T.timer = setTimeout(checkNext, T.defaultDelay); } else { - website.Tour.error(tour, next, "Can't arrive to the next step"); + T.error("Can't arrive to the next step"); } } checkNext(); }; -website.Tour.currentTimer = null; -website.Tour.nextStep = function (tour, step, overlaps) { - var state = website.Tour.getState(); - website.Tour.saveState(state.id, state.mode, step.id); +T.nextStep = function (step) { + var state = T.getState(); - website.Tour.autoToggleBootstrapTour(); + if (!state) { + return; + } + + step = step || state.step; + T.saveState(state.id, state.mode, step.id); + + T.autoTogglePopover(true); if (step.onload) { step.onload(); } - var next = tour.steps[step.id+1]; + var next = state.tour.steps[step.id+1]; if (next) { setTimeout(function () { - website.Tour.waitNextStep(tour, step, overlaps); + T.waitNextStep(); if (state.mode === "test") { setTimeout(function(){ - website.Tour.autoNextStep(tour, step); - }, website.Tour.defaultDelay); + T.autoNextStep(); + }, T.defaultDelay); } }, next.wait || 0); } else { - website.Tour.endTour(tour); + T.endTour(); } }; -website.Tour.endTour = function (tour) { - var state = website.Tour.getState(); +T.endTour = function () { + var state = T.getState(); var test = state.step.id >= state.tour.steps.length-1; - website.Tour.reset(); + T.reset(); if (test) { console.log('ok'); } else { console.log('error'); } }; -website.Tour.autoNextStep = function (tour, step) { - clearTimeout(website.Tour.testtimer); +T.autoNextStep = function (tour, step) { + clearTimeout(T.testtimer); function autoStep () { if (!step) return; @@ -361,18 +448,14 @@ website.Tour.autoNextStep = function (tour, step) { step.autoComplete(tour); } - var $popover = $(".popover.tour"); - if ($popover.find("button[data-role='next']:visible").size()) { - $popover.find("button[data-role='next']:visible").click(); - $popover.remove(); - } + T.closePopover(); var $element = $(step.element); if (!$element.size()) return; if (step.snippet) { - website.Tour.autoDragAndDropSnippet($element); + T.autoDragAndDropSnippet($element); } else if (step.sampleText) { @@ -388,7 +471,7 @@ website.Tour.autoNextStep = function (tour, step) { setTimeout(function () { $element.trigger($.Event("keyup", { srcElement: $element })); $element.trigger($.Event("change", { srcElement: $element })); - }, website.Tour.defaultDelay<<1); + }, T.defaultDelay<<1); } else if ($element.is(":visible")) { @@ -406,9 +489,9 @@ website.Tour.autoNextStep = function (tour, step) { }, 1000); } } - website.Tour.testtimer = setTimeout(autoStep, 100); + T.testtimer = setTimeout(autoStep, 100); }; -website.Tour.autoDragAndDropSnippet = function (selector) { +T.autoDragAndDropSnippet = function (selector) { var $thumbnail = $(selector).first(); var thumbnailPosition = $thumbnail.position(); $thumbnail.trigger($.Event("mousedown", { which: 1, pageX: thumbnailPosition.left, pageY: thumbnailPosition.top })); @@ -418,8 +501,8 @@ website.Tour.autoDragAndDropSnippet = function (selector) { $dropZone.trigger($.Event("mouseup", { which: 1, pageX: dropPosition.left, pageY: dropPosition.top })); }; -//$(document).ready(website.Tour.running); -website.ready().then(website.Tour.running); +//$(document).ready(T.running); +website.ready().then(T.running); }()); From 254b3a29fa80ffcaeec2da60a2a2b0abac8da925 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 21 Mar 2014 12:18:15 +0100 Subject: [PATCH 037/143] [IMP] website tour: auto set backdrop if no selector element bzr revid: chm@openerp.com-20140321111815-t0312xxl7l83w9rx --- addons/website/static/src/js/website.tour.banner.js | 2 -- addons/website/static/src/js/website.tour.js | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/website/static/src/js/website.tour.banner.js b/addons/website/static/src/js/website.tour.banner.js index a8abbcf59e2..443405e2401 100644 --- a/addons/website/static/src/js/website.tour.banner.js +++ b/addons/website/static/src/js/website.tour.banner.js @@ -13,7 +13,6 @@ title: _t("Welcome to your website!"), content: _t("This tutorial will guide you to build your home page. We will start by adding a banner."), popover: { next: _t("Start Tutorial"), end: _t("Skip It") }, - backdrop: true, }, { element: 'button[data-action=edit]', @@ -78,7 +77,6 @@ title: _t("Good Job!"), content: _t("Well done, you created your homepage."), popover: { next: _t("Continue") }, - backdrop: true, }, { element: 'a[data-action=show-mobile-preview]', diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 3bfd4e06da0..ce20bf69718 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -137,6 +137,7 @@ T.registerSteps = function (tour) { if (!step.element) { step.element = "body"; step.orphan = true; + step.backdrop = true; } } if (tour.steps[index-1] && From 429324999c9fe7149e34ec5f501c14aa7a8a7fdc Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 21 Mar 2014 12:23:44 +0100 Subject: [PATCH 038/143] [IMP] website tour: remove tag script and css to lib bootstrap bzr revid: chm@openerp.com-20140321112344-mwh2p8pp02j9sdq0 --- addons/website/views/website_templates.xml | 2 -- addons/website_report/views/layouts.xml | 2 -- 2 files changed, 4 deletions(-) diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 66a38f09651..7849c701bd4 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -253,7 +253,6 @@ - @@ -265,7 +264,6 @@ - diff --git a/addons/website_report/views/layouts.xml b/addons/website_report/views/layouts.xml index 091bb8dd3db..219780317c3 100644 --- a/addons/website_report/views/layouts.xml +++ b/addons/website_report/views/layouts.xml @@ -33,7 +33,6 @@ - @@ -42,7 +41,6 @@ - From d8f27686e5e70a626d12d4fcfdc6af5e5e642468 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 21 Mar 2014 12:57:24 +0100 Subject: [PATCH 039/143] [IMP] website tour: fix test tour bzr revid: chm@openerp.com-20140321115724-iwu17fkzdzaksmrs --- addons/website/static/src/js/website.tour.js | 25 ++++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index ce20bf69718..26fa5af0b9f 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -313,18 +313,17 @@ T.getState = function () { }; T.error = function (message) { var state = T.getState(); + message += '\n tour: ' + state.id + + '\n step: ' + state.step_id + ": '" + (state.step._title || state.step.title) + "'" + + '\n href: ' + window.location.href + + '\n referrer: ' + document.referrer + + '\n element: ' + Boolean(!state.step.element || ($(state.step.element).size() && $(state.step.element).is(":visible") && !$(state.step.element).is(":hidden"))) + + '\n waitNot: ' + Boolean(!state.step.waitNot || !$(state.step.waitNot).size()) + + '\n waitFor: ' + Boolean(!state.step.waitFor || $(state.step.waitFor).size()) + + "\n localStorage: " + JSON.stringify(localStorage) + + '\n\n' + $("body").html(); T.reset(); - throw new Error(message + - + "\ntour: " + state.tour.id + - + "\nstep: " + state.step.id + ": '" + (state.step._title || state.step.title) + "'" - + '\nhref: ' + window.location.href - + '\nreferrer: ' + document.referrer - + '\nelement: ' + Boolean(!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) - + '\nwaitNot: ' + Boolean(!step.waitNot || !$(step.waitNot).size()) - + '\nwaitFor: ' + Boolean(!step.waitFor || $(step.waitFor).size()) - + "\nlocalStorage: " + JSON.stringify(localStorage) - + '\n\n' + $("body").html() - ); + throw new Error(message); }; T.lists = function () { var tour_ids = []; @@ -421,7 +420,7 @@ T.nextStep = function (step) { T.waitNextStep(); if (state.mode === "test") { setTimeout(function(){ - T.autoNextStep(); + T.autoNextStep(state.tour, step); }, T.defaultDelay); } }, next.wait || 0); @@ -449,7 +448,7 @@ T.autoNextStep = function (tour, step) { step.autoComplete(tour); } - T.closePopover(); + $(".popover.tour [data-role='next']").click(); var $element = $(step.element); if (!$element.size()) return; From 89a6bd06495c4fe599756866828298331f375747 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 21 Mar 2014 13:37:22 +0100 Subject: [PATCH 040/143] [IMP] website tour: fix auto test bzr revid: chm@openerp.com-20140321123722-dmfdckh59cvot00i --- addons/website/static/src/js/website.tour.js | 4 ++-- .../static/src/js/website.tour.event_sale.js | 4 ++-- addons/website_sale/static/src/js/website.tour.sale.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 26fa5af0b9f..a033e6f1ecd 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -16,7 +16,7 @@ if (typeof openerp === "undefined") { var website = window.openerp.website; // don't rewrite T in test mode -if (typeof T !== "undefined") { +if (typeof website.Tour !== "undefined") { return; } @@ -393,7 +393,7 @@ T.waitNextStep = function () { } else if (!overlaps || new Date().getTime() - time < overlaps) { T.timer = setTimeout(checkNext, T.defaultDelay); } else { - T.error("Can't arrive to the next step"); + T.error("Can't reach the next step"); } } checkNext(); diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js index 92e57638cc8..668a05001af 100644 --- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js +++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js @@ -16,7 +16,7 @@ { title: "go to register page", waitNot: 'a[href*="/event"]:contains("Functional Webinar")', - onload: function () { + autoComplete: function () { // use onload if website_event_track is installed if (!$('form:contains("Ticket Type")').size()) { window.location.href = $('a[href*="/event"][href*="/register"]').attr("href"); @@ -43,7 +43,7 @@ title: "Complete checkout", waitFor: '#top_menu .my_cart_quantity:contains(5)', element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', - onload: function (tour) { + autoComplete: function (tour) { if ($("input[name='name']").val() === "") $("input[name='name']").val("website_sale-test-shoptest"); if ($("input[name='email']").val() === "") diff --git a/addons/website_sale/static/src/js/website.tour.sale.js b/addons/website_sale/static/src/js/website.tour.sale.js index c7526b2468f..62455e0b811 100644 --- a/addons/website_sale/static/src/js/website.tour.sale.js +++ b/addons/website_sale/static/src/js/website.tour.sale.js @@ -50,7 +50,7 @@ { title: "test with input error", element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', - onload: function (tour) { + autoComplete: function (tour) { $("input[name='phone']").val(""); }, }, @@ -58,7 +58,7 @@ title: "test without input error", waitFor: 'form[action="/shop/confirm_order"] .has-error', element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', - onload: function (tour) { + autoComplete: function (tour) { if ($("input[name='name']").val() === "") $("input[name='name']").val("website_sale-test-shoptest"); if ($("input[name='email']").val() === "") From f9b0c7469a7762bbba6d142e7799fc854aa01d24 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 21 Mar 2014 14:42:07 +0100 Subject: [PATCH 041/143] [IMP] website tour: change syntax bzr revid: chm@openerp.com-20140321134207-y54uj2fynl5p0e8a --- addons/website/static/src/js/website.tour.js | 795 ++++++++++--------- 1 file changed, 399 insertions(+), 396 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index a033e6f1ecd..6a5f8faab76 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -84,421 +84,424 @@ $.ajaxSetup({ var localStorage = window.localStorage; -var T = website.Tour = {}; -T.tours = {}; -T.defaultDelay = 50; -T.errorDelay = 5000; -T.state = null; -T.$element = null; -T.timer = null; -T.testtimer = null; -T.currentTimer = null; -T.register = function (tour) { - if (tour.mode !== "test") tour.mode = "tutorial"; - T.tours[tour.id] = tour; -}; -T.run = function (tour_id, mode) { - if (localStorage.getItem("tour") && mode === "test") { // only one test running - return; - } - var tour = T.tours[tour_id]; - T.saveState(tour.id, mode || tour.mode, 0); - if (tour.path && !window.location.href.match(new RegExp("("+T.getLang()+")?"+tour.path+"#?$", "i"))) { - window.location.href = "/"+T.getLang()+tour.path; - } else { - T.running(); - } -}; -T.registerSteps = function (tour) { - if (tour.register) { - return; - } - tour.register = true; - - for (var index=0, len=tour.steps.length; index 0 && tour.steps[index-1] && - tour.steps[index-1].popover && tour.steps[index-1].popover.next) { - step.waitNot = '.popover.tour.fade.in:visible'; +var T = website.Tour = { + tours: {}, + defaultDelay: 50, + errorDelay: 5000, + state: null, + $element: null, + timer: null, + testtimer: null, + currentTimer: null, + register: function (tour) { + if (tour.mode !== "test") tour.mode = "tutorial"; + T.tours[tour.id] = tour; + }, + run: function (tour_id, mode) { + if (localStorage.getItem("tour") && mode === "test") { // only one test running + return; } - if (!step.waitFor && index > 0 && tour.steps[index-1].snippet) { - step.waitFor = '.oe_overlay_options .oe_options:visible'; + var tour = T.tours[tour_id]; + T.saveState(tour.id, mode || tour.mode, 0); + if (tour.path && !window.location.href.match(new RegExp("("+T.getLang()+")?"+tour.path+"#?$", "i"))) { + window.location.href = "/"+T.getLang()+tour.path; + } else { + T.running(); } - - var snippet = step.element && step.element.match(/#oe_snippets (.*) \.oe_snippet_thumbnail/); - if (snippet) { - step.snippet = snippet[1]; - } else if (step.snippet) { - step.element = '#oe_snippets '+step.snippet+' .oe_snippet_thumbnail'; + }, + registerSteps: function (tour) { + if (tour.register) { + return; } + tour.register = true; - if (!step.element) { - step.element = "body"; - step.orphan = true; - step.backdrop = true; - } - } - if (tour.steps[index-1] && - tour.steps[index-1].popover && tour.steps[index-1].popover.next) { - var step = { - id: index, - waitNot: '.popover.tour.fade.in:visible' - }; - tour.steps.push(step); - } - - // rendering bootstrap tour and popover - if (tour.mode !== "test") { for (var index=0, len=tour.steps.length; index
    '); - } - - if (step.backdrop || $element.parents("#website-top-navbar, .modal").size()) { - $tip.css("z-index", 2010); - } - - // button click event - $tip.find("button") - .one("click", function () { - step.busy = true; - if (!$(this).is("[data-role='next']")) { - clearTimeout(T.timer); - T.endTour(); + if (!step.waitNot && index > 0 && tour.steps[index-1] && + tour.steps[index-1].popover && tour.steps[index-1].popover.next) { + step.waitNot = '.popover.tour.fade.in:visible'; + } + if (!step.waitFor && index > 0 && tour.steps[index-1].snippet) { + step.waitFor = '.oe_overlay_options .oe_options:visible'; } - T.closePopover(); - }); - T.repositionPopover(); -}; -T.repositionPopover = function() { - var popover = T.$element.data("bs.popover"); - var $tip = T.$element.data("bs.popover").tip(); + var snippet = step.element && step.element.match(/#oe_snippets (.*) \.oe_snippet_thumbnail/); + if (snippet) { + step.snippet = snippet[1]; + } else if (step.snippet) { + step.element = '#oe_snippets '+step.snippet+' .oe_snippet_thumbnail'; + } - if (popover.options.orphan) { - return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2); - } - - var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; - offsetWidth = $tip[0].offsetWidth; - offsetHeight = $tip[0].offsetHeight; - tipOffset = $tip.offset(); - originalLeft = tipOffset.left; - originalTop = tipOffset.top; - offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); - if (offsetBottom < 0) { - tipOffset.top = tipOffset.top + offsetBottom; - } - offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth(); - if (offsetRight < 0) { - tipOffset.left = tipOffset.left + offsetRight; - } - if (tipOffset.top < 0) { - tipOffset.top = 0; - } - if (tipOffset.left < 0) { - tipOffset.left = 0; - } - $tip.offset(tipOffset); - if (popover.options.placement === "bottom" || popover.options.placement === "top") { - var left = T.$element.offset().left + T.$element.outerWidth()/2 - tipOffset.left; - $tip.find(".arrow").css("left", left ? left + "px" : ""); - } else { - var top = T.$element.offset().top + T.$element.outerHeight()/2 - tipOffset.top; - $tip.find(".arrow").css("top", top ? top + "px" : ""); - } -}; -T.popoverTitle = function (tour, options) { - return openerp.qweb.render('website.tour_popover_title', options); -}; -T.popover = function (options) { - return openerp.qweb.render('website.tour_popover', options); -}; -T.getLang = function () { - return $("html").attr("lang").replace(/-/, '_'); -}; -T.getState = function () { - var state = JSON.parse(localStorage.getItem("tour") || 'false') || {}; - var tour_id,mode,step_id; - if (!state.id && window.location.href.indexOf("#tutorial.") > -1) { - state = { - "id": window.location.href.match(/#tutorial\.(.*)=true/)[1], - "mode": "tutorial", - "step_id": 0 - }; - } - if (!state.id) { - return; - } - state.tour = T.tours[state.id]; - state.step = state.tour.steps[state.step_id]; - return state; -}; -T.error = function (message) { - var state = T.getState(); - message += '\n tour: ' + state.id - + '\n step: ' + state.step_id + ": '" + (state.step._title || state.step.title) + "'" - + '\n href: ' + window.location.href - + '\n referrer: ' + document.referrer - + '\n element: ' + Boolean(!state.step.element || ($(state.step.element).size() && $(state.step.element).is(":visible") && !$(state.step.element).is(":hidden"))) - + '\n waitNot: ' + Boolean(!state.step.waitNot || !$(state.step.waitNot).size()) - + '\n waitFor: ' + Boolean(!state.step.waitFor || $(state.step.waitFor).size()) - + "\n localStorage: " + JSON.stringify(localStorage) - + '\n\n' + $("body").html(); - T.reset(); - throw new Error(message); -}; -T.lists = function () { - var tour_ids = []; - for (var k in T.tours) { - tour_ids.push(k); - } - return tour_ids; -}; -T.saveState = function (tour_id, mode, step_id) { - localStorage.setItem("tour", JSON.stringify({"id":tour_id, "mode":mode, "step_id":step_id || 0})); -}; -T.reset = function () { - var state = T.getState(); - if (state) { - for (var k in state.tour.steps) { - state.tour.steps[k].busy = false; + if (!step.element) { + step.element = "body"; + step.orphan = true; + step.backdrop = true; + } } - } - localStorage.removeItem("tour"); - clearTimeout(T.timer); - clearTimeout(T.testtimer); - T.closePopover(); -}; -T.running = function () { - var state = T.getState(); - if (state) { - T.registerSteps(state.tour); - if ($.ajaxBusy) { - $(document).ajaxStop(function() { - setTimeout(function () { - T.nextStep(); - },0); + if (tour.steps[index-1] && + tour.steps[index-1].popover && tour.steps[index-1].popover.next) { + var step = { + id: index, + waitNot: '.popover.tour.fade.in:visible' + }; + tour.steps.push(step); + } + + // rendering bootstrap tour and popover + if (tour.mode !== "test") { + for (var index=0, len=tour.steps.length; index
    '); + } + + if (step.backdrop || $element.parents("#website-top-navbar, .modal").size()) { + $tip.css("z-index", 2010); + } + + // button click event + $tip.find("button") + .one("click", function () { + step.busy = true; + if (!$(this).is("[data-role='next']")) { + clearTimeout(T.timer); + T.endTour(); + } + T.closePopover(); }); - } else { - T.nextStep(); - } - } -}; -T.check = function (step) { - return (step && - (!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) && - (!step.waitNot || !$(step.waitNot).size()) && - (!step.waitFor || $(step.waitFor).size())); -}; -T.waitNextStep = function () { - var state = T.getState(); - var time = new Date().getTime(); - var timer; - var next = state.tour.steps[state.step.id+1]; - var overlaps = state.mode === "test" ? T.errorDelay : 0; - window.onbeforeunload = function () { + T.repositionPopover(); + }, + repositionPopover: function() { + var popover = T.$element.data("bs.popover"); + var $tip = T.$element.data("bs.popover").tip(); + + if (popover.options.orphan) { + return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2); + } + + var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset; + offsetWidth = $tip[0].offsetWidth; + offsetHeight = $tip[0].offsetHeight; + tipOffset = $tip.offset(); + originalLeft = tipOffset.left; + originalTop = tipOffset.top; + offsetBottom = $(document).outerHeight() - tipOffset.top - $tip.outerHeight(); + if (offsetBottom < 0) { + tipOffset.top = tipOffset.top + offsetBottom; + } + offsetRight = $("html").outerWidth() - tipOffset.left - $tip.outerWidth(); + if (offsetRight < 0) { + tipOffset.left = tipOffset.left + offsetRight; + } + if (tipOffset.top < 0) { + tipOffset.top = 0; + } + if (tipOffset.left < 0) { + tipOffset.left = 0; + } + $tip.offset(tipOffset); + if (popover.options.placement === "bottom" || popover.options.placement === "top") { + var left = T.$element.offset().left + T.$element.outerWidth()/2 - tipOffset.left; + $tip.find(".arrow").css("left", left ? left + "px" : ""); + } else if (popover.options.placement !== "auto") { + var top = T.$element.offset().top + T.$element.outerHeight()/2 - tipOffset.top; + $tip.find(".arrow").css("top", top ? top + "px" : ""); + } + }, + popoverTitle: function (tour, options) { + return openerp.qweb.render('website.tour_popover_title', options); + }, + popover: function (options) { + return openerp.qweb.render('website.tour_popover', options); + }, + getLang: function () { + return $("html").attr("lang").replace(/-/, '_'); + }, + getState: function () { + var state = JSON.parse(localStorage.getItem("tour") || 'false') || {}; + var tour_id,mode,step_id; + if (!state.id && window.location.href.indexOf("#tutorial.") > -1) { + state = { + "id": window.location.href.match(/#tutorial\.(.*)=true/)[1], + "mode": "tutorial", + "step_id": 0 + }; + window.location.hash = ""; + T.saveState(state.id, state.mode, state.step_id); + } + if (!state.id) { + return; + } + state.tour = T.tours[state.id]; + state.step = state.tour.steps[state.step_id]; + return state; + }, + error: function (message) { + var state = T.getState(); + message += '\n tour: ' + state.id + + '\n step: ' + state.step_id + ": '" + (state.step._title || state.step.title) + "'" + + '\n href: ' + window.location.href + + '\n referrer: ' + document.referrer + + '\n element: ' + Boolean(!state.step.element || ($(state.step.element).size() && $(state.step.element).is(":visible") && !$(state.step.element).is(":hidden"))) + + '\n waitNot: ' + Boolean(!state.step.waitNot || !$(state.step.waitNot).size()) + + '\n waitFor: ' + Boolean(!state.step.waitFor || $(state.step.waitFor).size()) + + "\n localStorage: " + JSON.stringify(localStorage) + + '\n\n' + $("body").html(); + T.reset(); + throw new Error(message); + }, + lists: function () { + var tour_ids = []; + for (var k in T.tours) { + tour_ids.push(k); + } + return tour_ids; + }, + saveState: function (tour_id, mode, step_id) { + localStorage.setItem("tour", JSON.stringify({"id":tour_id, "mode":mode, "step_id":step_id || 0})); + }, + reset: function () { + var state = T.getState(); + if (state) { + for (var k in state.tour.steps) { + state.tour.steps[k].busy = false; + } + } + localStorage.removeItem("tour"); clearTimeout(T.timer); clearTimeout(T.testtimer); - }; - - function checkNext () { - T.autoTogglePopover(); - - clearTimeout(T.timer); - if (T.check(next)) { - clearTimeout(T.currentTimer); - // use an other timeout for cke dom loading - setTimeout(function () { - T.nextStep(next); - }, T.defaultDelay); - } else if (!overlaps || new Date().getTime() - time < overlaps) { - T.timer = setTimeout(checkNext, T.defaultDelay); - } else { - T.error("Can't reach the next step"); - } - } - checkNext(); -}; -T.nextStep = function (step) { - var state = T.getState(); - - if (!state) { - return; - } - - step = step || state.step; - T.saveState(state.id, state.mode, step.id); - - T.autoTogglePopover(true); - - if (step.onload) { - step.onload(); - } - - var next = state.tour.steps[step.id+1]; - if (next) { - setTimeout(function () { - T.waitNextStep(); - if (state.mode === "test") { - setTimeout(function(){ - T.autoNextStep(state.tour, step); - }, T.defaultDelay); - } - }, next.wait || 0); - } else { - T.endTour(); - } -}; -T.endTour = function () { - var state = T.getState(); - var test = state.step.id >= state.tour.steps.length-1; - T.reset(); - if (test) { - console.log('ok'); - } else { - console.log('error'); - } -}; -T.autoNextStep = function (tour, step) { - clearTimeout(T.testtimer); - - function autoStep () { - if (!step) return; - - if (step.autoComplete) { - step.autoComplete(tour); - } - - $(".popover.tour [data-role='next']").click(); - - var $element = $(step.element); - if (!$element.size()) return; - - if (step.snippet) { - - T.autoDragAndDropSnippet($element); - - } else if (step.sampleText) { - - $element.trigger($.Event("keydown", { srcElement: $element })); - if ($element.is("input") ) { - $element.val(step.sampleText); - } if ($element.is("select")) { - $element.find("[value='"+step.sampleText+"'], option:contains('"+step.sampleText+"')").attr("selected", true); - $element.val(step.sampleText); + T.closePopover(); + }, + running: function () { + var state = T.getState(); + if (state) { + T.registerSteps(state.tour); + if ($.ajaxBusy) { + $(document).ajaxStop(function() { + setTimeout(function () { + T.nextStep(); + },0); + }); } else { - $element.html(step.sampleText); + T.nextStep(); } - setTimeout(function () { - $element.trigger($.Event("keyup", { srcElement: $element })); - $element.trigger($.Event("change", { srcElement: $element })); - }, T.defaultDelay<<1); - - } else if ($element.is(":visible")) { - - $element.trigger($.Event("mouseenter", { srcElement: $element[0] })); - $element.trigger($.Event("mousedown", { srcElement: $element[0] })); - - var evt = document.createEvent("MouseEvents"); - evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - $element[0].dispatchEvent(evt); - - // trigger after for step like: mouseenter, next step click on button display with mouseenter - setTimeout(function () { - $element.trigger($.Event("mouseup", { srcElement: $element[0] })); - $element.trigger($.Event("mouseleave", { srcElement: $element[0] })); - }, 1000); } + }, + check: function (step) { + return (step && + (!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) && + (!step.waitNot || !$(step.waitNot).size()) && + (!step.waitFor || $(step.waitFor).size())); + }, + waitNextStep: function () { + var state = T.getState(); + var time = new Date().getTime(); + var timer; + var next = state.tour.steps[state.step.id+1]; + var overlaps = state.mode === "test" ? T.errorDelay : 0; + + window.onbeforeunload = function () { + clearTimeout(T.timer); + clearTimeout(T.testtimer); + }; + + function checkNext () { + T.autoTogglePopover(); + + clearTimeout(T.timer); + if (T.check(next)) { + clearTimeout(T.currentTimer); + // use an other timeout for cke dom loading + setTimeout(function () { + T.nextStep(next); + }, T.defaultDelay); + } else if (!overlaps || new Date().getTime() - time < overlaps) { + T.timer = setTimeout(checkNext, T.defaultDelay); + } else { + T.error("Can't reach the next step"); + } + } + checkNext(); + }, + nextStep: function (step) { + var state = T.getState(); + + if (!state) { + return; + } + + step = step || state.step; + T.saveState(state.id, state.mode, step.id); + + T.autoTogglePopover(true); + + if (step.onload) { + step.onload(); + } + + var next = state.tour.steps[step.id+1]; + if (next) { + setTimeout(function () { + T.waitNextStep(); + if (state.mode === "test") { + setTimeout(function(){ + T.autoNextStep(state.tour, step); + }, T.defaultDelay); + } + }, next.wait || 0); + } else { + T.endTour(); + } + }, + endTour: function () { + var state = T.getState(); + var test = state.step.id >= state.tour.steps.length-1; + T.reset(); + if (test) { + console.log('ok'); + } else { + console.log('error'); + } + }, + autoNextStep: function (tour, step) { + clearTimeout(T.testtimer); + + function autoStep () { + if (!step) return; + + if (step.autoComplete) { + step.autoComplete(tour); + } + + $(".popover.tour [data-role='next']").click(); + + var $element = $(step.element); + if (!$element.size()) return; + + if (step.snippet) { + + T.autoDragAndDropSnippet($element); + + } else if (step.sampleText) { + + $element.trigger($.Event("keydown", { srcElement: $element })); + if ($element.is("input") ) { + $element.val(step.sampleText); + } if ($element.is("select")) { + $element.find("[value='"+step.sampleText+"'], option:contains('"+step.sampleText+"')").attr("selected", true); + $element.val(step.sampleText); + } else { + $element.html(step.sampleText); + } + setTimeout(function () { + $element.trigger($.Event("keyup", { srcElement: $element })); + $element.trigger($.Event("change", { srcElement: $element })); + }, T.defaultDelay<<1); + + } else if ($element.is(":visible")) { + + $element.trigger($.Event("mouseenter", { srcElement: $element[0] })); + $element.trigger($.Event("mousedown", { srcElement: $element[0] })); + + var evt = document.createEvent("MouseEvents"); + evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); + $element[0].dispatchEvent(evt); + + // trigger after for step like: mouseenter, next step click on button display with mouseenter + setTimeout(function () { + $element.trigger($.Event("mouseup", { srcElement: $element[0] })); + $element.trigger($.Event("mouseleave", { srcElement: $element[0] })); + }, 1000); + } + } + T.testtimer = setTimeout(autoStep, 100); + }, + autoDragAndDropSnippet: function (selector) { + var $thumbnail = $(selector).first(); + var thumbnailPosition = $thumbnail.position(); + $thumbnail.trigger($.Event("mousedown", { which: 1, pageX: thumbnailPosition.left, pageY: thumbnailPosition.top })); + $thumbnail.trigger($.Event("mousemove", { which: 1, pageX: document.body.scrollWidth/2, pageY: document.body.scrollHeight/2 })); + var $dropZone = $(".oe_drop_zone").first(); + var dropPosition = $dropZone.position(); + $dropZone.trigger($.Event("mouseup", { which: 1, pageX: dropPosition.left, pageY: dropPosition.top })); } - T.testtimer = setTimeout(autoStep, 100); -}; -T.autoDragAndDropSnippet = function (selector) { - var $thumbnail = $(selector).first(); - var thumbnailPosition = $thumbnail.position(); - $thumbnail.trigger($.Event("mousedown", { which: 1, pageX: thumbnailPosition.left, pageY: thumbnailPosition.top })); - $thumbnail.trigger($.Event("mousemove", { which: 1, pageX: document.body.scrollWidth/2, pageY: document.body.scrollHeight/2 })); - var $dropZone = $(".oe_drop_zone").first(); - var dropPosition = $dropZone.position(); - $dropZone.trigger($.Event("mouseup", { which: 1, pageX: dropPosition.left, pageY: dropPosition.top })); }; //$(document).ready(T.running); From 24d37e284407a26987b1be3e539fa0243d81f656 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 21 Mar 2014 14:45:46 +0100 Subject: [PATCH 042/143] [FIX] website tour: template loading hide the real error bzr revid: chm@openerp.com-20140321134546-i5nw73en8thzrwc2 --- addons/website/static/src/js/website.tour.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 6a5f8faab76..eed431e071b 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -286,10 +286,10 @@ var T = website.Tour = { } }, popoverTitle: function (tour, options) { - return openerp.qweb.render('website.tour_popover_title', options); + return openerp.qweb ? openerp.qweb.render('website.tour_popover_title', options) : options.title; }, popover: function (options) { - return openerp.qweb.render('website.tour_popover', options); + return openerp.qweb ? openerp.qweb.render('website.tour_popover', options) : options.title; }, getLang: function () { return $("html").attr("lang").replace(/-/, '_'); From 62814f9c2331340a5721331d652b0fdc0d2a201d Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Mon, 24 Mar 2014 09:11:12 +0100 Subject: [PATCH 043/143] [FIX] website: activate new tour tests bzr revid: chm@openerp.com-20140324081112-15n58puu29weydme --- addons/website/tests/test_ui.py | 2 +- addons/website_blog/tests/test_ui.py | 2 +- addons/website_event/tests/test_ui.py | 2 +- addons/website_event_sale/tests/test_ui.py | 6 +++--- addons/website_sale/tests/test_ui.py | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/addons/website/tests/test_ui.py b/addons/website/tests/test_ui.py index 54cd8a73a67..7eb88d00df3 100644 --- a/addons/website/tests/test_ui.py +++ b/addons/website/tests/test_ui.py @@ -8,6 +8,6 @@ class TestUi(openerp.tests.HttpCase): self.phantom_js("/", "console.log('ok')", "openerp.website.editor", login='admin') def test_04_admin_tour_banner(self): - self.phantom_js("/", "openerp.website.Tour.run_test('banner')", "openerp.website.Tour.tours.banner", login='admin') + self.phantom_js("/", "openerp.website.Tour.run('banner', 'test')", "openerp.website.Tour.tours.banner", login='admin') # vim:et: diff --git a/addons/website_blog/tests/test_ui.py b/addons/website_blog/tests/test_ui.py index e99884ba4b1..35b7fdc56e7 100644 --- a/addons/website_blog/tests/test_ui.py +++ b/addons/website_blog/tests/test_ui.py @@ -2,5 +2,5 @@ import openerp.tests class TestUi(openerp.tests.HttpCase): def test_admin(self): - self.phantom_js("/", "openerp.website.Tour.run_test('blog')", "openerp.website.Tour") + self.phantom_js("/", "openerp.website.Tour.run('blog', 'test')", "openerp.website.Tour") diff --git a/addons/website_event/tests/test_ui.py b/addons/website_event/tests/test_ui.py index c4e884c0325..b59cdd94dcc 100644 --- a/addons/website_event/tests/test_ui.py +++ b/addons/website_event/tests/test_ui.py @@ -2,5 +2,5 @@ import openerp.tests class TestUi(openerp.tests.HttpCase): def test_admin(self): - self.phantom_js("/", "openerp.website.Tour.run_test('event')", "openerp.website.Tour") + self.phantom_js("/", "openerp.website.Tour.run('event', 'test')", "openerp.website.Tour") diff --git a/addons/website_event_sale/tests/test_ui.py b/addons/website_event_sale/tests/test_ui.py index b5950aaec54..b204b2bad69 100644 --- a/addons/website_event_sale/tests/test_ui.py +++ b/addons/website_event_sale/tests/test_ui.py @@ -9,11 +9,11 @@ inject = [ @openerp.tests.common.post_install(True) class TestUi(openerp.tests.HttpCase): def test_admin(self): - self.phantom_js("/", "openerp.website.Tour.run_test('event_buy_tickets')", "openerp.website.Tour", inject=inject) + self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour", inject=inject) def test_demo(self): - self.phantom_js("/", "openerp.website.Tour.run_test('event_buy_tickets')", "openerp.website.Tour", login="demo", password="demo", inject=inject); + self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour", login="demo", password="demo", inject=inject); def test_public(self): - self.phantom_js("/", "openerp.website.Tour.run_test('event_buy_tickets')", "openerp.website.Tour", login=None, inject=inject); + self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour", login=None, inject=inject); diff --git a/addons/website_sale/tests/test_ui.py b/addons/website_sale/tests/test_ui.py index 0eb5daae97a..0cedf2d0409 100644 --- a/addons/website_sale/tests/test_ui.py +++ b/addons/website_sale/tests/test_ui.py @@ -11,13 +11,13 @@ inject = [ @openerp.tests.common.post_install(True) class TestUi(openerp.tests.HttpCase): def test_01_admin_shop_tour(self): - self.phantom_js("/", "openerp.website.Tour.run_test('shop')", "openerp.website.Tour.Shop", login="admin") + self.phantom_js("/", "openerp.website.Tour.run('shop', 'test')", "openerp.website.Tour.Shop", login="admin") def test_02_admin_checkout(self): - self.phantom_js("/", "openerp.website.Tour.run_test('shop_buy_product')", "openerp.website.Tour.ShopTest", login="admin", inject=inject) + self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.ShopTest", login="admin", inject=inject) def test_03_demo_checkout(self): - self.phantom_js("/", "openerp.website.Tour.run_test('shop_buy_product')", "openerp.website.Tour.ShopTest", login="demo", inject=inject) + self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.ShopTest", login="demo", inject=inject) def test_04_public_checkout(self): - self.phantom_js("/", "openerp.website.Tour.run_test('shop_buy_product')", "openerp.website.Tour.ShopTest", inject=inject) + self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.ShopTest", inject=inject) From b28a32f6ef398347ed0a207762a75c98a2d5a5b1 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Wed, 26 Mar 2014 15:44:42 +0100 Subject: [PATCH 044/143] [FIX] website: test_ui running bzr revid: chm@openerp.com-20140326144442-ye2a51f03wyaxi8a --- addons/website_blog/tests/test_ui.py | 2 +- addons/website_event/tests/test_ui.py | 2 +- addons/website_event_sale/tests/test_ui.py | 6 +++--- addons/website_sale/tests/test_ui.py | 10 +++++----- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/addons/website_blog/tests/test_ui.py b/addons/website_blog/tests/test_ui.py index 35b7fdc56e7..b34ef25c002 100644 --- a/addons/website_blog/tests/test_ui.py +++ b/addons/website_blog/tests/test_ui.py @@ -2,5 +2,5 @@ import openerp.tests class TestUi(openerp.tests.HttpCase): def test_admin(self): - self.phantom_js("/", "openerp.website.Tour.run('blog', 'test')", "openerp.website.Tour") + self.phantom_js("/", "openerp.website.Tour.run('blog', 'test')", "openerp.website.Tour.tours.blog") diff --git a/addons/website_event/tests/test_ui.py b/addons/website_event/tests/test_ui.py index b59cdd94dcc..96a17a91563 100644 --- a/addons/website_event/tests/test_ui.py +++ b/addons/website_event/tests/test_ui.py @@ -2,5 +2,5 @@ import openerp.tests class TestUi(openerp.tests.HttpCase): def test_admin(self): - self.phantom_js("/", "openerp.website.Tour.run('event', 'test')", "openerp.website.Tour") + self.phantom_js("/", "openerp.website.Tour.run('event', 'test')", "openerp.website.Tour.tours.event") diff --git a/addons/website_event_sale/tests/test_ui.py b/addons/website_event_sale/tests/test_ui.py index b204b2bad69..3e26fba5cf4 100644 --- a/addons/website_event_sale/tests/test_ui.py +++ b/addons/website_event_sale/tests/test_ui.py @@ -9,11 +9,11 @@ inject = [ @openerp.tests.common.post_install(True) class TestUi(openerp.tests.HttpCase): def test_admin(self): - self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour", inject=inject) + self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour.tours.event_buy_tickets", inject=inject) def test_demo(self): - self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour", login="demo", password="demo", inject=inject); + self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour.tours.event_buy_tickets", login="demo", password="demo", inject=inject); def test_public(self): - self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour", login=None, inject=inject); + self.phantom_js("/", "openerp.website.Tour.run('event_buy_tickets', 'test')", "openerp.website.Tour.tours.event_buy_tickets", login=None, inject=inject); diff --git a/addons/website_sale/tests/test_ui.py b/addons/website_sale/tests/test_ui.py index 0cedf2d0409..61b0e904abf 100644 --- a/addons/website_sale/tests/test_ui.py +++ b/addons/website_sale/tests/test_ui.py @@ -4,20 +4,20 @@ import openerp.tests inject = [ ("openerp.website.Tour", os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js')), - ("openerp.website.Tour.ShopTest", os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.sale.js")), + ("openerp.website.Tour.tours.shop_buy_product", os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.sale.js")), ] @openerp.tests.common.at_install(False) @openerp.tests.common.post_install(True) class TestUi(openerp.tests.HttpCase): def test_01_admin_shop_tour(self): - self.phantom_js("/", "openerp.website.Tour.run('shop', 'test')", "openerp.website.Tour.Shop", login="admin") + self.phantom_js("/", "openerp.website.Tour.run('shop', 'test')", "openerp.website.Tour.tours.shop", login="admin") def test_02_admin_checkout(self): - self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.ShopTest", login="admin", inject=inject) + self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.tours.shop_buy_product", login="admin", inject=inject) def test_03_demo_checkout(self): - self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.ShopTest", login="demo", inject=inject) + self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.tours.shop_buy_product", login="demo", inject=inject) def test_04_public_checkout(self): - self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.ShopTest", inject=inject) + self.phantom_js("/", "openerp.website.Tour.run('shop_buy_product', 'test')", "openerp.website.Tour.tours.shop_buy_product", inject=inject) From fd593a3049407103165e4a872e92b9d39f641578 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Mon, 31 Mar 2014 17:12:37 +0200 Subject: [PATCH 045/143] [FIX] website_sale: test tour and activate website_event_sale test bzr revid: chm@openerp.com-20140331151237-ec0j7ywfsbjsw83k --- addons/website/static/src/js/website.tour.js | 17 +++++++++-------- addons/website_event_sale/tests/__init__.py | 2 +- addons/website_event_sale/tests/test_ui.py | 6 ++++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index eed431e071b..1a4a987739f 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -306,7 +306,7 @@ var T = website.Tour = { window.location.hash = ""; T.saveState(state.id, state.mode, state.step_id); } - if (!state.id) { + if (!state.id || !T.tours[state.id]) { return; } state.tour = T.tours[state.id]; @@ -349,20 +349,21 @@ var T = website.Tour = { clearTimeout(T.testtimer); T.closePopover(); }, + testRunning: 0, running: function () { - var state = T.getState(); - if (state) { - T.registerSteps(state.tour); + setTimeout(function () { if ($.ajaxBusy) { $(document).ajaxStop(function() { - setTimeout(function () { - T.nextStep(); - },0); + var state = T.getState(); + T.registerSteps(state.tour); + T.nextStep(); }); } else { + var state = T.getState(); + T.registerSteps(state.tour); T.nextStep(); } - } + },0); }, check: function (step) { return (step && diff --git a/addons/website_event_sale/tests/__init__.py b/addons/website_event_sale/tests/__init__.py index c9d4e3399ba..bf8ba6321ad 100644 --- a/addons/website_event_sale/tests/__init__.py +++ b/addons/website_event_sale/tests/__init__.py @@ -1 +1 @@ -#import test_ui +import test_ui diff --git a/addons/website_event_sale/tests/test_ui.py b/addons/website_event_sale/tests/test_ui.py index 3e26fba5cf4..fccbabb9d18 100644 --- a/addons/website_event_sale/tests/test_ui.py +++ b/addons/website_event_sale/tests/test_ui.py @@ -1,8 +1,10 @@ +import os + import openerp.tests inject = [ - "./../../../website/static/src/js/website.tour.test.js", - "./../../../website_event_sale/static/src/js/website.tour.event_sale.js", + ("openerp.website.Tour", os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js')), + ("openerp.website.Tour.tours.event_buy_tickets", os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.event_sale.js")), ] @openerp.tests.common.at_install(False) From f4225eda24d7ccd8485c778d917b43409e8e64fa Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Tue, 8 Apr 2014 14:41:19 +0200 Subject: [PATCH 046/143] [FIX] website test tour bzr revid: chm@openerp.com-20140408124119-jkmeh5vfdb3sjlna --- addons/website/static/src/js/website.tour.js | 19 ++++++++++--------- .../static/src/js/website.tour.event_sale.js | 4 ++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 1a4a987739f..02befe4fdbb 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -351,18 +351,19 @@ var T = website.Tour = { }, testRunning: 0, running: function () { - setTimeout(function () { - if ($.ajaxBusy) { - $(document).ajaxStop(function() { - var state = T.getState(); - T.registerSteps(state.tour); - T.nextStep(); - }); - } else { - var state = T.getState(); + function run () { + var state = T.getState(); + if (state) { T.registerSteps(state.tour); T.nextStep(); } + } + setTimeout(function () { + if ($.ajaxBusy) { + $(document).ajaxStop(run); + } else { + run(); + } },0); }, check: function (step) { diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js index 668a05001af..97de098240e 100644 --- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js +++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js @@ -57,11 +57,11 @@ }, { title: "select payment", - element: '#payment_method label:has(img[title="transfer"]) input', + element: '#payment_method label:has(img[title="Wire Transfer"]) input', }, { title: "Pay Now", - waitFor: '#payment_method label:has(input:checked):has(img[title="transfer"])', + waitFor: '#payment_method label:has(input:checked):has(img[title="Wire Transfer"])', element: '.oe_sale_acquirer_button .btn[name="submit"]:visible', }, { From 69dfcab5d9c9b461df49d297b5fa2f8d5539de90 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Tue, 8 Apr 2014 16:47:41 +0200 Subject: [PATCH 047/143] [WIP] add console.log bzr revid: chm@openerp.com-20140408144741-ylt01232o58xb7ys --- .../static/src/js/website.tour.event_sale.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js index 97de098240e..75ad2297f6b 100644 --- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js +++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js @@ -18,6 +18,11 @@ waitNot: 'a[href*="/event"]:contains("Functional Webinar")', autoComplete: function () { // use onload if website_event_track is installed + console.log("--------------------------------------------"); + console.log($('form:contains("Ticket Type")').size()); + console.log("--------------------------------------------"); + console.log($('a[href*="/event"][href*="/register"]').attr("href")); + console.log("--------------------------------------------"); if (!$('form:contains("Ticket Type")').size()) { window.location.href = $('a[href*="/event"][href*="/register"]').attr("href"); } From 584f2bea071ef4d603fb19786b79bac80170ed77 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 11 Apr 2014 12:51:05 +0200 Subject: [PATCH 048/143] [IMP] website: Tour: add a log time bzr revid: chm@openerp.com-20140411105105-y7vxgkf7nydjb1f8 --- addons/website/static/src/js/website.tour.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 02befe4fdbb..ce01b2e0cae 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -102,10 +102,12 @@ var T = website.Tour = { return; } var tour = T.tours[tour_id]; - T.saveState(tour.id, mode || tour.mode, 0); + this.time = new Date().getTime(); if (tour.path && !window.location.href.match(new RegExp("("+T.getLang()+")?"+tour.path+"#?$", "i"))) { + T.saveState(tour.id, mode || tour.mode, -1); window.location.href = "/"+T.getLang()+tour.path; } else { + T.saveState(tour.id, mode || tour.mode, 0); T.running(); } }, @@ -296,6 +298,7 @@ var T = website.Tour = { }, getState: function () { var state = JSON.parse(localStorage.getItem("tour") || 'false') || {}; + if (state) { this.time = state.time; } var tour_id,mode,step_id; if (!state.id && window.location.href.indexOf("#tutorial.") > -1) { state = { @@ -310,7 +313,7 @@ var T = website.Tour = { return; } state.tour = T.tours[state.id]; - state.step = state.tour.steps[state.step_id]; + state.step = state.tour.steps[state.step_id === -1 ? 0 : state.step_id]; return state; }, error: function (message) { @@ -335,7 +338,7 @@ var T = website.Tour = { return tour_ids; }, saveState: function (tour_id, mode, step_id) { - localStorage.setItem("tour", JSON.stringify({"id":tour_id, "mode":mode, "step_id":step_id || 0})); + localStorage.setItem("tour", JSON.stringify({"id":tour_id, "mode":mode, "step_id":step_id || 0, "time": this.time})); }, reset: function () { var state = T.getState(); @@ -412,6 +415,10 @@ var T = website.Tour = { step = step || state.step; T.saveState(state.id, state.mode, step.id); + if (step.id !== state.step_id) { + console.log("Tour Step: '" + step._title + "' (" + (new Date().getTime() - this.time) + "ms)"); + } + T.autoTogglePopover(true); if (step.onload) { From aa6386467a121e39266c7fd3e07684477cd3bc89 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 11 Apr 2014 13:53:14 +0200 Subject: [PATCH 049/143] [FIX] website: snippet clean_for_save: filter snippet before create overlay bzr revid: chm@openerp.com-20140411115314-xr5yutao88j8fusu --- addons/website/static/src/js/website.snippets.editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/website/static/src/js/website.snippets.editor.js b/addons/website/static/src/js/website.snippets.editor.js index d8eee3cbec5..7aa189db653 100644 --- a/addons/website/static/src/js/website.snippets.editor.js +++ b/addons/website/static/src/js/website.snippets.editor.js @@ -361,7 +361,7 @@ }, clean_for_save: function () { var self = this; - $(website.snippet.globalSelector).each(function () { + this.dom_filter(website.snippet.globalSelector).each(function () { var $snippet = $(this); self.make_active($snippet); self.make_active(false); From ab5aa5daff007b1c6f26b0aa8dfd3c50cd48bfb3 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 11 Apr 2014 13:55:02 +0200 Subject: [PATCH 050/143] [FIX] website tour: write undefined in log bzr revid: chm@openerp.com-20140411115502-804e5669do02swm2 --- addons/website/static/src/js/website.tour.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index ce01b2e0cae..743e3445fa5 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -416,7 +416,7 @@ var T = website.Tour = { T.saveState(state.id, state.mode, step.id); if (step.id !== state.step_id) { - console.log("Tour Step: '" + step._title + "' (" + (new Date().getTime() - this.time) + "ms)"); + console.log("Tour Step: '" + (step._title || step.title) + "' (" + (new Date().getTime() - this.time) + "ms)"); } T.autoTogglePopover(true); From 4550b532ca24a24b7bfae46ddcddf049bf5afdab Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 11 Apr 2014 13:59:39 +0200 Subject: [PATCH 051/143] [FIX] website_sale: add product: customize img (forgotten merge) bzr revid: chm@openerp.com-20140411115939-yw257u179wqbh6sy --- .../static/src/js/website.tour.shop.js | 32 ++++++------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/addons/website_sale/static/src/js/website.tour.shop.js b/addons/website_sale/static/src/js/website.tour.shop.js index 4f9a97dbb54..3dd5b54b357 100644 --- a/addons/website_sale/static/src/js/website.tour.shop.js +++ b/addons/website_sale/static/src/js/website.tour.shop.js @@ -54,41 +54,27 @@ title: _t("Change the price"), content: _t("Edit the price of this product by clicking on the amount."), }, + + { waitNot: '.product_price .oe_currency_value:containsExact(1.00)', - element: '#wrap img.img:first', + element: '#wrap img.product_detail_img', placement: 'top', title: _t("Update image"), content: _t("Click here to set an image describing your product."), }, { - element: 'button.hover-edition-button:visible', + element: 'img[alt=ipad]', placement: 'top', - title: _t("Update image"), - content: _t("Click here to set an image describing your product."), - }, - { - wait: 500, - element: '.well a.pull-right', - placement: 'bottom', title: _t("Select an Image"), - content: _t("Let's select an existing image."), - popover: { fixed: true }, + content: _t("Let's select an ipad image."), }, { - element: 'img[alt=imac]', - placement: 'bottom', - title: _t("Select an Image"), - content: _t("Let's select an imac image."), - popover: { fixed: true }, - }, - { - waitNot: 'img[alt=imac]', + waitFor: '.media_selected img[alt=ipad]', element: '.modal-content button.save', - placement: 'bottom', - title: _t("Select this Image"), - content: _t("Click to add the image to the product decsription."), - popover: { fixed: true }, + placement: 'top', + title: _t("Save this Image"), + content: _t("Click on save to add the image to the product decsription."), }, { waitNot: '.modal-content:visible', From a2f62bc341ab080ced91a069e0724421bbb94c3c Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 11 Apr 2014 14:33:05 +0200 Subject: [PATCH 052/143] [FIX] website tour: error log bzr revid: chm@openerp.com-20140411123305-t2n1aej9akn0zb5r --- addons/website/static/src/js/website.tour.js | 12 ++++++------ .../static/src/js/website.tour.event_sale.js | 9 ++------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 743e3445fa5..28d80fb2272 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -316,15 +316,15 @@ var T = website.Tour = { state.step = state.tour.steps[state.step_id === -1 ? 0 : state.step_id]; return state; }, - error: function (message) { + error: function (step, message) { var state = T.getState(); message += '\n tour: ' + state.id - + '\n step: ' + state.step_id + ": '" + (state.step._title || state.step.title) + "'" + + '\n step: ' + step.id + ": '" + (step._title || step.title) + "'" + '\n href: ' + window.location.href + '\n referrer: ' + document.referrer - + '\n element: ' + Boolean(!state.step.element || ($(state.step.element).size() && $(state.step.element).is(":visible") && !$(state.step.element).is(":hidden"))) - + '\n waitNot: ' + Boolean(!state.step.waitNot || !$(state.step.waitNot).size()) - + '\n waitFor: ' + Boolean(!state.step.waitFor || $(state.step.waitFor).size()) + + '\n element: ' + Boolean(!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden"))) + + '\n waitNot: ' + Boolean(!step.waitNot || !$(step.waitNot).size()) + + '\n waitFor: ' + Boolean(!step.waitFor || $(step.waitFor).size()) + "\n localStorage: " + JSON.stringify(localStorage) + '\n\n' + $("body").html(); T.reset(); @@ -400,7 +400,7 @@ var T = website.Tour = { } else if (!overlaps || new Date().getTime() - time < overlaps) { T.timer = setTimeout(checkNext, T.defaultDelay); } else { - T.error("Can't reach the next step"); + T.error(next, "Can't reach the next step"); } } checkNext(); diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js index 75ad2297f6b..9a200ece499 100644 --- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js +++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js @@ -11,20 +11,15 @@ steps: [ { title: "select event", - element: 'a[href*="/event"]:contains("Open Days in Los Angeles")', + element: 'a[href*="/event"]:contains("Open Days in Los Angeles"):first', }, { title: "go to register page", waitNot: 'a[href*="/event"]:contains("Functional Webinar")', autoComplete: function () { // use onload if website_event_track is installed - console.log("--------------------------------------------"); - console.log($('form:contains("Ticket Type")').size()); - console.log("--------------------------------------------"); - console.log($('a[href*="/event"][href*="/register"]').attr("href")); - console.log("--------------------------------------------"); if (!$('form:contains("Ticket Type")').size()) { - window.location.href = $('a[href*="/event"][href*="/register"]').attr("href"); + window.location.href = $('a[href*="/event/Open-Days-in-Los-Angeles"][href*="/register"]').attr("href"); } }, }, From 3f7e567acc1542134d46aeb747a373588279d2f9 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Mon, 14 Apr 2014 10:14:51 +0200 Subject: [PATCH 053/143] [FIX] website bzr revid: chm@openerp.com-20140414081451-0hzjgaewtcok6rod --- addons/website/static/src/js/website.editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 365b8cf46ea..c2e2ed46783 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -544,7 +544,7 @@ observer.disconnect(); var editor = this.rte.editor; - var root = editor.element.$; + var root = editor.element && editor.element.$; editor.destroy(); // FIXME: select editables then filter by dirty? var defs = this.rte.fetch_editables(root) From a001e9c4bcadcd04a9c9dcd64b88aa6dc5bafb5c Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Mon, 14 Apr 2014 10:48:33 +0200 Subject: [PATCH 054/143] [FIX] website: tour for website_event_sale bzr revid: chm@openerp.com-20140414084833-gsanxrhysk7jn9bo --- .../static/src/js/website.tour.event_sale.js | 21 ++++++------------- addons/website_report/views/layouts.xml | 1 - 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js index 9a200ece499..333481bc349 100644 --- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js +++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js @@ -11,32 +11,23 @@ steps: [ { title: "select event", - element: 'a[href*="/event"]:contains("Open Days in Los Angeles"):first', - }, - { - title: "go to register page", - waitNot: 'a[href*="/event"]:contains("Functional Webinar")', - autoComplete: function () { - // use onload if website_event_track is installed - if (!$('form:contains("Ticket Type")').size()) { - window.location.href = $('a[href*="/event/Open-Days-in-Los-Angeles"][href*="/register"]').attr("href"); - } - }, + element: 'a[href*="/event"]:contains("Conference on Business Applications"):first', }, { + waitNot: 'a[href*="/event"]:contains("Conference on Business Applications")', title: "select 2 Standard tickets", - element: 'select[name="ticket-1"]', + element: 'select:eq(0)', sampleText: '2', }, { title: "select 3 VIP tickets", - waitFor: 'select[name="ticket-1"] option:contains(2):selected', - element: 'select[name="ticket-2"]', + waitFor: 'select:eq(0) option:contains(2):selected', + element: 'select:eq(1)', sampleText: '3', }, { title: "Order Now", - waitFor: 'select[name="ticket-2"] option:contains(3):selected', + waitFor: 'select:eq(1) option:contains(3):selected', element: '.btn-primary:contains("Order Now")', }, { diff --git a/addons/website_report/views/layouts.xml b/addons/website_report/views/layouts.xml index c17fdf8c1ab..c9b2508489a 100644 --- a/addons/website_report/views/layouts.xml +++ b/addons/website_report/views/layouts.xml @@ -49,7 +49,6 @@ - From afd490c98443159469893401218542926f9db7ba Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Mon, 14 Apr 2014 12:49:54 +0200 Subject: [PATCH 055/143] [REM] removed details_summary, sales_user, sales_user_today, payment_user reports, wizards and rml [REM] dead code: pos_box_entries.py/xml, pos_box_out.py/xml, pos_return_view.py/xml [ADD] lines, invoice, cashbox of the day, payment, receipt, users product reports converted to QWeb. Added YML tests for the bank statement reports. [FIX] closed cashbox of the day sql using old fields in its queries, yml test not correctly generating an invoice from a pos order bzr revid: sle@openerp.com-20140414104954-xj10wi640tyr3ufe --- addons/point_of_sale/__init__.py | 8 +- addons/point_of_sale/__openerp__.py | 23 +- .../account_statement_report.xml | 67 +-- addons/point_of_sale/controllers/__init__.py | 1 - .../point_of_sale/data/report_paperformat.xml | 20 + addons/point_of_sale/point_of_sale.py | 3 - addons/point_of_sale/point_of_sale_data.xml | 5 +- addons/point_of_sale/point_of_sale_report.xml | 108 ++--- addons/point_of_sale/report/__init__.py | 4 - .../point_of_sale/report/account_statement.py | 9 +- .../report/account_statement.rml | 285 ------------- .../report/all_closed_cashbox_of_the_day.py | 17 +- .../report/all_closed_cashbox_of_the_day.rml | 249 ----------- addons/point_of_sale/report/pos_details.py | 11 +- addons/point_of_sale/report/pos_details.rml | 400 ------------------ .../report/pos_details_summary.py | 129 ------ .../report/pos_details_summary.rml | 315 -------------- addons/point_of_sale/report/pos_invoice.py | 52 ++- addons/point_of_sale/report/pos_lines.py | 9 +- addons/point_of_sale/report/pos_lines.rml | 239 ----------- .../report/pos_payment_report.py | 9 +- .../report/pos_payment_report.rml | 209 --------- .../report/pos_payment_report_user.py | 64 --- .../report/pos_payment_report_user.rml | 205 --------- addons/point_of_sale/report/pos_receipt.py | 10 +- addons/point_of_sale/report/pos_receipt.rml | 171 -------- addons/point_of_sale/report/pos_sales_user.py | 50 --- .../point_of_sale/report/pos_sales_user.rml | 175 -------- .../report/pos_sales_user_today.py | 50 --- .../report/pos_sales_user_today.rml | 175 -------- .../point_of_sale/report/pos_users_product.py | 18 +- .../report/pos_users_product.py.WORK | 68 --- .../report/pos_users_product.rml | 219 ---------- .../test/02_order_to_invoice.yml | 11 +- .../test/account_statement_reports.yml | 83 ++++ .../test/point_of_sale_report.yml | 41 +- .../views/report_closedcashbox.xml | 68 +++ .../views/report_detailsofsales.xml | 140 ++++++ addons/point_of_sale/views/report_payment.xml | 90 ++++ addons/point_of_sale/views/report_receipt.xml | 92 ++++ .../point_of_sale/views/report_saleslines.xml | 98 +++++ .../point_of_sale/views/report_statement.xml | 85 ++++ .../views/report_usersproduct.xml | 79 ++++ addons/point_of_sale/wizard/__init__.py | 10 +- addons/point_of_sale/wizard/pos_box.py | 2 +- .../point_of_sale/wizard/pos_box_entries.py | 146 ------- .../point_of_sale/wizard/pos_box_entries.xml | 50 --- addons/point_of_sale/wizard/pos_box_out.py | 105 ----- addons/point_of_sale/wizard/pos_box_out.xml | 48 --- addons/point_of_sale/wizard/pos_confirm.py | 1 - addons/point_of_sale/wizard/pos_confirm.xml | 11 - addons/point_of_sale/wizard/pos_details.py | 10 +- addons/point_of_sale/wizard/pos_discount.py | 17 +- addons/point_of_sale/wizard/pos_payment.py | 7 +- .../wizard/pos_payment_report.py | 48 --- .../wizard/pos_payment_report.xml | 31 -- .../wizard/pos_payment_report_user.py | 54 --- .../wizard/pos_payment_report_user.xml | 31 -- .../wizard/pos_payment_report_user_view.xml | 29 -- addons/point_of_sale/wizard/pos_receipt.py | 59 --- .../point_of_sale/wizard/pos_receipt_view.xml | 30 -- addons/point_of_sale/wizard/pos_return.py | 323 -------------- .../point_of_sale/wizard/pos_return_view.xml | 53 --- addons/point_of_sale/wizard/pos_sales_user.py | 60 --- .../point_of_sale/wizard/pos_sales_user.xml | 36 -- .../wizard/pos_sales_user_current_user.py | 58 --- .../wizard/pos_sales_user_today.py | 57 --- addons/report/controllers/main.py | 54 ++- .../report/static/src/js/qwebactionmanager.js | 3 +- 69 files changed, 978 insertions(+), 4519 deletions(-) create mode 100644 addons/point_of_sale/data/report_paperformat.xml delete mode 100644 addons/point_of_sale/report/account_statement.rml delete mode 100644 addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml delete mode 100644 addons/point_of_sale/report/pos_details.rml delete mode 100644 addons/point_of_sale/report/pos_details_summary.py delete mode 100644 addons/point_of_sale/report/pos_details_summary.rml delete mode 100644 addons/point_of_sale/report/pos_lines.rml delete mode 100644 addons/point_of_sale/report/pos_payment_report.rml delete mode 100644 addons/point_of_sale/report/pos_payment_report_user.py delete mode 100644 addons/point_of_sale/report/pos_payment_report_user.rml delete mode 100644 addons/point_of_sale/report/pos_receipt.rml delete mode 100644 addons/point_of_sale/report/pos_sales_user.py delete mode 100644 addons/point_of_sale/report/pos_sales_user.rml delete mode 100644 addons/point_of_sale/report/pos_sales_user_today.py delete mode 100644 addons/point_of_sale/report/pos_sales_user_today.rml delete mode 100644 addons/point_of_sale/report/pos_users_product.py.WORK delete mode 100644 addons/point_of_sale/report/pos_users_product.rml create mode 100644 addons/point_of_sale/test/account_statement_reports.yml create mode 100644 addons/point_of_sale/views/report_closedcashbox.xml create mode 100644 addons/point_of_sale/views/report_detailsofsales.xml create mode 100644 addons/point_of_sale/views/report_payment.xml create mode 100644 addons/point_of_sale/views/report_receipt.xml create mode 100644 addons/point_of_sale/views/report_saleslines.xml create mode 100644 addons/point_of_sale/views/report_statement.xml create mode 100644 addons/point_of_sale/views/report_usersproduct.xml delete mode 100644 addons/point_of_sale/wizard/pos_box_entries.py delete mode 100644 addons/point_of_sale/wizard/pos_box_entries.xml delete mode 100644 addons/point_of_sale/wizard/pos_box_out.py delete mode 100644 addons/point_of_sale/wizard/pos_box_out.xml delete mode 100644 addons/point_of_sale/wizard/pos_payment_report.py delete mode 100644 addons/point_of_sale/wizard/pos_payment_report.xml delete mode 100644 addons/point_of_sale/wizard/pos_payment_report_user.py delete mode 100644 addons/point_of_sale/wizard/pos_payment_report_user.xml delete mode 100644 addons/point_of_sale/wizard/pos_payment_report_user_view.xml delete mode 100644 addons/point_of_sale/wizard/pos_receipt.py delete mode 100644 addons/point_of_sale/wizard/pos_receipt_view.xml delete mode 100644 addons/point_of_sale/wizard/pos_return.py delete mode 100644 addons/point_of_sale/wizard/pos_return_view.xml delete mode 100644 addons/point_of_sale/wizard/pos_sales_user.py delete mode 100644 addons/point_of_sale/wizard/pos_sales_user.xml delete mode 100644 addons/point_of_sale/wizard/pos_sales_user_current_user.py delete mode 100644 addons/point_of_sale/wizard/pos_sales_user_today.py diff --git a/addons/point_of_sale/__init__.py b/addons/point_of_sale/__init__.py index 7a786ebb5f1..b8c887f6750 100644 --- a/addons/point_of_sale/__init__.py +++ b/addons/point_of_sale/__init__.py @@ -19,14 +19,12 @@ # ############################################################################## -import point_of_sale import account_bank_statement +import controllers +import point_of_sale +import report import res_users import res_partner import wizard -import report - -import controllers # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/point_of_sale/__openerp__.py b/addons/point_of_sale/__openerp__.py index fa42a19e209..9f3a023f062 100644 --- a/addons/point_of_sale/__openerp__.py +++ b/addons/point_of_sale/__openerp__.py @@ -19,7 +19,6 @@ # ############################################################################## - { 'name': 'Point of Sale', 'version': '1.0.1', @@ -51,19 +50,15 @@ Main Features 'images': ['images/pos_touch_screen.jpeg', 'images/pos_session.jpeg', 'images/pos_analysis.jpeg','images/sale_order_pos.jpeg','images/product_pos.jpeg'], 'depends': ['sale_stock'], 'data': [ + 'data/report_paperformat.xml', 'security/point_of_sale_security.xml', 'security/ir.model.access.csv', - 'wizard/pos_details.xml', + 'wizard/pos_box.xml', 'wizard/pos_confirm.xml', + 'wizard/pos_details.xml', 'wizard/pos_discount.xml', 'wizard/pos_open_statement.xml', - 'wizard/pos_payment_report_user_view.xml', - 'wizard/pos_sales_user.xml', - 'wizard/pos_receipt_view.xml', - 'wizard/pos_payment_report_user.xml', - 'wizard/pos_payment_report.xml', 'wizard/pos_payment.xml', - 'wizard/pos_box.xml', 'wizard/pos_session_opening.xml', 'point_of_sale_report.xml', 'point_of_sale_view.xml', @@ -75,16 +70,24 @@ Main Features 'account_statement_report.xml', 'res_users_view.xml', 'res_partner_view.xml', + 'views/report_statement.xml', + 'views/report_usersproduct.xml', + 'views/report_closedcashbox.xml', + 'views/report_receipt.xml', + 'views/report_saleslines.xml', + 'views/report_detailsofsales.xml', + 'views/report_payment.xml', ], 'demo': [ 'point_of_sale_demo.xml', 'account_statement_demo.xml', - 'test/00_register_open.yml' ], 'test': [ + 'test/00_register_open.yml', 'test/01_order_to_payment.yml', 'test/02_order_to_invoice.yml', - 'test/point_of_sale_report.yml' + 'test/point_of_sale_report.yml', + 'test/account_statement_reports.yml', ], 'installable': True, 'application': True, diff --git a/addons/point_of_sale/account_statement_report.xml b/addons/point_of_sale/account_statement_report.xml index a81d51a2679..2f08ee7f6d8 100644 --- a/addons/point_of_sale/account_statement_report.xml +++ b/addons/point_of_sale/account_statement_report.xml @@ -1,60 +1,29 @@ - + - + name="point_of_sale.report_usersproduct" + file="point_of_sale.report_usersproduct" + report_type="qweb-pdf" + /> - - - - - - - - - - + name="point_of_sale.report_closedcashbox" + file="point_of_sale.report_closedcashbox" + report_type="qweb-pdf" + /> diff --git a/addons/point_of_sale/controllers/__init__.py b/addons/point_of_sale/controllers/__init__.py index b5f0bcc9ec6..d37b070a7b2 100644 --- a/addons/point_of_sale/controllers/__init__.py +++ b/addons/point_of_sale/controllers/__init__.py @@ -1,3 +1,2 @@ import main # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/point_of_sale/data/report_paperformat.xml b/addons/point_of_sale/data/report_paperformat.xml new file mode 100644 index 00000000000..089506f1d2b --- /dev/null +++ b/addons/point_of_sale/data/report_paperformat.xml @@ -0,0 +1,20 @@ + + + + + Point Of Sale Receipt + + custom + 150 + 60 + Portrait + 3 + 3 + 3 + 3 + + 3 + 130 + + + diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index f18edf39e85..72b6a30c2ed 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -605,7 +605,6 @@ class pos_order(osv.osv): return {'value': {'pricelist_id': pricelist}} def _amount_all(self, cr, uid, ids, name, args, context=None): - tax_obj = self.pool.get('account.tax') cur_obj = self.pool.get('res.currency') res = {} for order in self.browse(cr, uid, ids, context=context): @@ -858,9 +857,7 @@ class pos_order(osv.osv): 'qty': -order_line.qty }, context=context) - new_order = ','.join(map(str,clone_list)) abs = { - #'domain': "[('id', 'in', ["+new_order+"])]", 'name': _('Return Products'), 'view_type': 'form', 'view_mode': 'form', diff --git a/addons/point_of_sale/point_of_sale_data.xml b/addons/point_of_sale/point_of_sale_data.xml index b8d1e6db82d..2bdf8739af3 100644 --- a/addons/point_of_sale/point_of_sale_data.xml +++ b/addons/point_of_sale/point_of_sale_data.xml @@ -1,8 +1,6 @@ - - - + Open POS Menu @@ -27,7 +25,6 @@ Record sale orders, register payments, compute change to return, create invoices, and manage refunds through a specific web touch-screen interface.

    If you install the PoS proxy you will be able to interface OpenERP with retail hardware: barcode scanners, printers, cash registers, weighing machines, credit card payment terminals.

    ]]>
    -
    diff --git a/addons/point_of_sale/point_of_sale_report.xml b/addons/point_of_sale/point_of_sale_report.xml index 94c2e946e90..a4c1f4648a3 100644 --- a/addons/point_of_sale/point_of_sale_report.xml +++ b/addons/point_of_sale/point_of_sale_report.xml @@ -1,86 +1,62 @@ + + + + + + + + + /> + /> - - - - - - - - - - + report_type="qweb-pdf" + name="point_of_sale.report_payment" + file="point_of_sale.report_payment" + /> diff --git a/addons/point_of_sale/report/__init__.py b/addons/point_of_sale/report/__init__.py index 3d8f93ae724..aa8d4c080d8 100644 --- a/addons/point_of_sale/report/__init__.py +++ b/addons/point_of_sale/report/__init__.py @@ -26,11 +26,7 @@ import pos_receipt import pos_invoice import pos_lines import pos_details -import pos_details_summary import pos_payment_report -import pos_sales_user -import pos_sales_user_today -import pos_payment_report_user import pos_report import pos_order_report diff --git a/addons/point_of_sale/report/account_statement.py b/addons/point_of_sale/report/account_statement.py index c9de91dbbbf..253469f6c89 100644 --- a/addons/point_of_sale/report/account_statement.py +++ b/addons/point_of_sale/report/account_statement.py @@ -20,8 +20,10 @@ ############################################################################## import time +from openerp.osv import osv from openerp.report import report_sxw + class account_statement(report_sxw.rml_parse): def __init__(self, cr, uid, name, context): @@ -46,6 +48,11 @@ class account_statement(report_sxw.rml_parse): total += line.amount return total -report_sxw.report_sxw('report.account.statement', 'account.bank.statement', 'addons/statement/report/account_statement.rml', parser=account_statement,header='internal') + +class report_account_statement(osv.AbstractModel): + _name = 'report.point_of_sale.report_statement' + _inherit = 'report.abstract_report' + _template = 'point_of_sale.report_statement' + _wrapped_report_class = account_statement # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/account_statement.rml b/addons/point_of_sale/report/account_statement.rml deleted file mode 100644 index 0b633f3f7c4..00000000000 --- a/addons/point_of_sale/report/account_statement.rml +++ /dev/null @@ -1,285 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Name - - - Partner - - - Amount - - - - - [[ repeatIn(objects,'statement') ]] - Statement - - - - Statement Name - - - Journal - - - Company - - - User - - - - - - - [[ statement.name ]] - - - [[ statement.journal_id.name ]] - - - [[ statement.company_id.name ]] - - - [[ statement.user_id.name ]] - - - - - - - - - - Opening Date - - - Closing Date - - - Starting Balance - - - Ending Balance - - - - - - - [[ formatLang(statement.date,date=True) ]] - - - [[ formatLang(statement.closing_date,date_time=True)]] - - - [[ formatLang(statement.balance_start, dp='Account', currency_obj = company.currency_id) ]] - - - [[ formatLang(statement.balance_end_real, dp='Account', currency_obj = company.currency_id) ]] - - - - - - - - - - Name - - - Partner - - - Amount - - - -
    - [[ repeatIn(statement.line_ids,'line_ids') and ' ' or removeParentNode('blockTable') ]] -
    - [[ repeatIn(get_data(statement), 'line_ids')]] - - - - [[ line_ids.name ]] - - - [[ line_ids.partner_id.name ]] - - - [[ formatLang(line_ids.amount, dp='Account', currency_obj=company.currency_id) ]] - - - -
    -
    - - - - - - - - - Total : - - - [[ formatLang(get_total(statement.line_ids), dp='Account', currency_obj = company.currency_id) ]] - - - - - - - - - - - - -
    -
    -
    diff --git a/addons/point_of_sale/report/all_closed_cashbox_of_the_day.py b/addons/point_of_sale/report/all_closed_cashbox_of_the_day.py index 8559d2571d6..1bb51e82048 100644 --- a/addons/point_of_sale/report/all_closed_cashbox_of_the_day.py +++ b/addons/point_of_sale/report/all_closed_cashbox_of_the_day.py @@ -20,8 +20,10 @@ ############################################################################## import time +from openerp.osv import osv from openerp.report import report_sxw + class all_closed_cashbox_of_the_day(report_sxw.rml_parse): #TOFIX: sql injection problem: SQL Request must be pass from sql injection... def __init__(self, cr, uid, name, context): @@ -39,14 +41,14 @@ class all_closed_cashbox_of_the_day(report_sxw.rml_parse): }) def _get_user(self, line_ids): - sql = "select name from res_users where id = %d"%(line_ids['create_uid']) + sql = "select login from res_users where id = %d"%(line_ids['create_uid']) self.cr.execute(sql) user = self.cr.fetchone() return user[0] def _get_data(self, user): data = {} - sql = """ SELECT abs.journal_id,abs.id,abs.date,abs.closing_date,abs.name as statement,aj.name as journal,ap.name as period,ru.name as user,rc.name as company, + sql = """ SELECT abs.journal_id,abs.id,abs.date,abs.closing_date,abs.name as statement,aj.name as journal,ap.name as period,ru.partner_id as user,rc.name as company, abs.state,abs.balance_end_real FROM account_bank_statement as abs LEFT JOIN account_journal as aj ON aj.id = abs.journal_id LEFT JOIN account_period as ap ON ap.id = abs.period_id @@ -67,7 +69,7 @@ class all_closed_cashbox_of_the_day(report_sxw.rml_parse): def _get_bal(self, data): res = {} - sql =""" select sum(pieces*number) as bal from account_cashbox_line where starting_id = %d """%(data['id']) + sql =""" select sum(pieces*number_closing) as bal from account_cashbox_line where bank_statement_id = %d """%(data['id']) self.cr.execute(sql) res = self.cr.dictfetchall() if res: @@ -115,7 +117,7 @@ class all_closed_cashbox_of_the_day(report_sxw.rml_parse): res = self.cr.dictfetchall() for r in res: total_ending_bal += (r['net_total'] or 0.0) - sql1 =""" select sum(pieces*number) as bal from account_cashbox_line where starting_id = %d"""%(r['id']) + sql1 =""" select sum(pieces*number_closing) as bal from account_cashbox_line where bank_statement_id = %d"""%(r['id']) self.cr.execute(sql1) data = self.cr.dictfetchall() if data[0]['bal']: @@ -135,6 +137,11 @@ class all_closed_cashbox_of_the_day(report_sxw.rml_parse): res = self.cr.dictfetchall() return res[0]['net_total'] or 0.0 -report_sxw.report_sxw('report.all.closed.cashbox.of.the.day', 'account.bank.statement', 'addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml', parser=all_closed_cashbox_of_the_day,header='internal') + +class report_closed_cashbox(osv.AbstractModel): + _name = 'report.point_of_sale.report_closedcashbox' + _inherit = 'report.abstract_report' + _template = 'point_of_sale.report_closedcashbox' + _wrapped_report_class = all_closed_cashbox_of_the_day # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml b/addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml deleted file mode 100644 index 4f16031c8b3..00000000000 --- a/addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(objects,'statement') ]] - - - - - - - Today's Closed Cashbox - - - - - - - Company - - - User - - - - - - - [[ company.name ]] - - - [[ user.name ]] - - - - - - - - - - St.Name - - - Journal - - - Opening Date - - - Closing Date - - - Starting Balance - - - Ending Balance - - - - - - - Total: - - - - - - - - - - - - - - - - - - [[ formatLang(get_net_total_starting(user)[1], currency_obj = company.currency_id)]] - - - [[ formatLang(get_net_total(user), currency_obj = company.currency_id)]] - - - -
    - [[ repeatIn(get_data(user),'statement') ]] - - - - [[ statement['statement'] ]] - - - [[ statement['journal'] ]] - - - [[ statement['date'] ]] - - - [[ statement['closing_date'] ]] - - - [[ formatLang(get_bal(statement), currency_obj = company.currency_id)]] - - - [[ formatLang(get_sub_total(user,statement['journal_id'],statement['date']), currency_obj = company.currency_id )]] - - - -
    - [[ repeatIn(get_lines(statement),'line_ids') ]] - - - - [[ line_ids['name'] ]] - - - - - - [[ get_partner(line_ids) or removeParentNode('font') ]] - - - [[ get_user(line_ids) or removeParentNode('font') ]] - - - - - - - - [[ formatLang(line_ids['amount'], currency_obj = company.currency_id)]] - - - - - - -
    -
    -
    -
    diff --git a/addons/point_of_sale/report/pos_details.py b/addons/point_of_sale/report/pos_details.py index cf1e7731bff..1c1f46ac0b7 100644 --- a/addons/point_of_sale/report/pos_details.py +++ b/addons/point_of_sale/report/pos_details.py @@ -20,8 +20,10 @@ ############################################################################## import time +from openerp.osv import osv from openerp.report import report_sxw + class pos_details(report_sxw.rml_parse): def _get_invoice(self, inv_id): @@ -180,7 +182,7 @@ class pos_details(report_sxw.rml_parse): 'strip_name': self._strip_name, 'getpayments': self._get_payments, 'getsumdisc': self._get_sum_discount, - 'gettotalofthaday': self._total_of_the_day, + 'gettotaloftheday': self._total_of_the_day, 'gettaxamount': self._get_tax_amount, 'pos_sales_details':self._pos_sales_details, 'getqtytotal2': self._get_qty_total_2, @@ -191,6 +193,11 @@ class pos_details(report_sxw.rml_parse): 'get_user_names': self._get_user_names, }) -report_sxw.report_sxw('report.pos.details', 'pos.order', 'addons/point_of_sale_singer/report/pos_details.rml', parser=pos_details, header='internal') + +class report_pos_details(osv.AbstractModel): + _name = 'report.point_of_sale.report_detailsofsales' + _inherit = 'report.abstract_report' + _template = 'point_of_sale.report_detailsofsales' + _wrapped_report_class = pos_details # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_details.rml b/addons/point_of_sale/report/pos_details.rml deleted file mode 100644 index 6360dc25b12..00000000000 --- a/addons/point_of_sale/report/pos_details.rml +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Details of Sales - - - - - - - Company - - - Users - - - Print Date - - - Start Period - - - End Period - - - - - - - [[ company.name ]] - - - [[ get_user_names(data['form']['user_ids']) or 'All' ]] - - - [[ formatLang(time.strftime('%Y-%m-%d'),date=True) ]] - - - [[ formatLang(data['form']['date_start'],date=True) ]] - - - [[ formatLang(data['form']['date_end'],date=True) ]] - - - - - - - - - - Date - - - Order - - - Product - - - Price - - - Qty - - - Disc(%) - - - Invoiced - - - -
    - [[ repeatIn(pos_sales_details(data['form']), 'line_ids') ]] - - - - [[ formatLang(line_ids['date_order'],date_time = True) ]] - - - [[ line_ids['pos_name'] ]] - - - [ [[ line_ids['code'] ]] ] [[ line_ids['name'] ]] - - - [[ formatLang(line_ids['price_unit'], dp='Sale Price', currency_obj = company.currency_id) ]] - - - [[ formatLang(line_ids['qty']) ]] [[ line_ids['uom'] ]] - - - [[ formatLang(line_ids['discount'], dp='Sale Price') ]] - - - [[ getinvoice(line_ids['invoice_id']) or removeParentNode('font') ]] - - - -
    - - - - - - - Taxes - - - - - - - - -
    - [[ repeatIn(gettaxamount(data['form']), 'p')]] - - - - [[ p['name'] or removeParentNode('para') ]] - - - [[ formatLang(p['amount'], currency_obj = company.currency_id) or removeParentNode('tr') ]] - - - - - - -
    - - - - - - - Payment - - - - - - - - -
    - [[ repeatIn(getpayments(data['form']), 'p') ]] - - - - [[ p['name'] or removeParentNode('para') ]] - - - [[ formatLang(p['sum'], dp='Account', currency_obj = company.currency_id) or removeParentNode('tr') ]] - - - - - - -
    - - - - - - - Summary - - - - - - - - - - - - Sales total(Revenue) - - - [[ formatLang(getsalestotal2(), dp='Sale Price', currency_obj = company.currency_id) ]] - - - - - Qty of product - - - [[ formatLang(getqtytotal2()) ]] - - - - - Total invoiced - - - [[ formatLang(getsuminvoice2(data['form']), dp='Sale Price', currency_obj = company.currency_id) ]] - - - - - Total discount - - - [[ formatLang(getsumdisc(data['form']), dp='Sale Price', currency_obj = company.currency_id) ]] - - - - - Total paid - - - [[ formatLang(getpaidtotal2(), dp='Sale Price', currency_obj = company.currency_id) ]] - - - - - Total of the day - - - [[ formatLang(gettotalofthaday(data['form']), dp='Sale Price', currency_obj = company.currency_id) ]] - - - - - - -
    -
    diff --git a/addons/point_of_sale/report/pos_details_summary.py b/addons/point_of_sale/report/pos_details_summary.py deleted file mode 100644 index d6600926bd6..00000000000 --- a/addons/point_of_sale/report/pos_details_summary.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time -from openerp.report import report_sxw - -class pos_details_summary(report_sxw.rml_parse): - def __init__(self, cr, uid, name, context): - super(pos_details_summary, self).__init__(cr, uid, name, context=context) - self.total = 0.0 - self.localcontext.update({ - 'time': time, - 'strip_name': self._strip_name, - 'getpayments': self._get_payments, - 'getqtytotal': self._get_qty_total, - 'getsumdisc': self._get_sum_discount, - 'getpaidtotal': self._paid_total, - 'gettotalofthaday': self._total_of_the_day, - 'getsuminvoice': self._sum_invoice, - 'gettaxamount': self._get_tax_amount, - 'getsalestotal': self._get_sales_total, - 'getstartperiod': self._get_start_period, - 'getendperiod': self._get_end_period, - 'getcompany':self.get_company - }) - - def get_company(self, objects): - comp=[obj.company_id.name for obj in objects] - return '%s' % (comp[0]) - - def _get_qty_total(self, objects): - #code for the sum of qty_total - return reduce(lambda acc, object: - acc + reduce( - lambda sum_qty, line: - sum_qty + line.qty, - object.lines, - 0 ), - objects, - 0) - - def _get_sum_discount(self, objects): - #code for the sum of discount value - return reduce(lambda acc, object: - acc + reduce( - lambda sum_dis, line: - sum_dis + ((line.price_unit * line.qty ) * (line.discount / 100)), - object.lines, - 0.0), - objects, - 0.0 ) - - def _get_payments(self, objects): - result = {} - for obj in objects: - for statement in obj.statement_ids: - if statement.journal_id: - result[statement.journal_id] = result.get(statement.journal_id, 0.0) + statement.amount - return result - - def _paid_total(self, objects): - return sum(self._get_payments(objects).values(), 0.0) - - def _total_of_the_day(self, objects): - total_paid = self._paid_total(objects) - total_invoiced = self._sum_invoice(objects) - return total_paid - total_invoiced - - def _sum_invoice(self, objects): - return reduce(lambda acc, obj: - acc + obj.invoice_id.amount_total, - [o for o in objects if o.invoice_id and o.invoice_id.number], - 0.0) - - def _ellipsis(self, string, maxlen=100, ellipsis = '...'): - ellipsis = ellipsis or '' - return string[:maxlen - len(ellipsis) ] + (ellipsis, '')[len(string) < maxlen] - - def _strip_name(self, name, maxlen=50): - return self._ellipsis(name, maxlen, ' ...') - - def _get_tax_amount(self, objects): - res = {} - for order in objects: - for line in order.lines: - for tax in line.product_id.taxes_id: - res[tax.name] = res.setdefault(tax.name, 0.0) + (line.price_subtotal_incl - line.price_subtotal) - return res - - def _get_sales_total(self, objects): - return reduce(lambda x, o: x + len(o.lines), objects, 0) - - def _get_start_period(self, objects): - date_orders = sorted([obj.date_order for obj in objects]) - min_date = date_orders[0] - return '%s' % min_date - - - def _get_end_period(self, objects): - date_orders = sorted([obj.date_order for obj in objects]) - max_date = date_orders[-1] - return '%s' % max_date - - -report_sxw.report_sxw('report.pos.details_summary', - 'pos.order', - 'addons/point_of_sale/report/pos_details_summary.rml', - parser=pos_details_summary, - header='internal') - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_details_summary.rml b/addons/point_of_sale/report/pos_details_summary.rml deleted file mode 100644 index 6564f821010..00000000000 --- a/addons/point_of_sale/report/pos_details_summary.rml +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Details of Sales - - - - - - - Company - - - Print Date - - - Start Period - - - End Period - - - - - - - [[ company.name ]] - - - [[ formatLang(time.strftime('%Y-%m-%d'),date=True) ]] - - - [[ '%s' % getstartperiod(objects) ]] - - - [[ '%s' % getendperiod(objects) ]] - - - - - - -
    - - - -
    - - - - Mode of Taxes - - - - - - - - -
    - [[ repeatIn(gettaxamount(objects).items(),'p') ]] - - - - [[ p[0] ]] - - - [[ formatLang(p[1], currency_obj=company.currency_id) ]] - - - - - - -
    - - - - - - - Mode of Payment - - - - - - - - -
    - [[ repeatIn(getpayments(objects).items(),'t') ]] - - - - [[ t[0].name ]] - - - [[ formatLang(t[1], currency_obj=company.currency_id) ]] - - - - - - -
    - - - - - - - Summary - - - - - - - - - - - - Sales total - - - [[ '%d' % getsalestotal(objects) ]] - - - - - Qty of product - - - [[ '%d' % getqtytotal(objects) ]] - - - - - Total invoiced - - - [[ formatLang(getsuminvoice(objects), currency_obj=company.currency_id) ]] - - - - - Total discount - - - [[ formatLang(getsumdisc(objects), currency_obj=company.currency_id) ]] - - - - - Total paid - - - [[ formatLang(getpaidtotal(objects), currency_obj=company.currency_id) ]] - - - - - Total of the day - - - [[ formatLang(gettotalofthaday(objects), currency_obj=company.currency_id) ]] - - - - - - -
    -
    diff --git a/addons/point_of_sale/report/pos_invoice.py b/addons/point_of_sale/report/pos_invoice.py index 60f4f233729..6ab06c4e99f 100644 --- a/addons/point_of_sale/report/pos_invoice.py +++ b/addons/point_of_sale/report/pos_invoice.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). +# Copyright (C) 2014-Today OpenERP SA (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,40 +19,36 @@ # ############################################################################## -import time - -from openerp.report import report_sxw from openerp.osv import osv from openerp.tools.translate import _ -class pos_invoice(report_sxw.rml_parse): - def __init__(self, cr, uid, name, context): - super(pos_invoice, self).__init__(cr, uid, name, context=context) - self.localcontext.update({ - 'time': time, - }) +class PosInvoiceReport(osv.AbstractModel): + _name = 'report.point_of_sale.report_invoice' - def set_context(self, objects, data, ids, report_type=None): - super(pos_invoice, self).set_context(objects, data, ids, report_type) - iids = [] - nids = [] + def render_html(self, cr, uid, ids, data=None, context=None): + if context is None: + context = {} - for order in objects: - order.write({'nb_print': order.nb_print + 1}) + report_obj = self.pool['report'] + report = report_obj._get_report_from_name(cr, uid, 'account.report_invoice') + selected_posorders = self.pool['pos.order'].browse(cr, uid, ids, context=context) - if order.invoice_id and order.invoice_id not in iids: - if not order.invoice_id: - raise osv.except_osv(_('Error!'), _('Please create an invoice for this sale.')) - iids.append(order.invoice_id) - nids.append(order.invoice_id.id) - data['ids'] = nids - self.datas = data - self.ids = nids - self.objects = iids - self.localcontext['data'] = data - self.localcontext['objects'] = iids + invoiced_posorders = [] + invoiced_posorders_ids = [] + for order in selected_posorders: + if order.invoice_id: + invoiced_posorders.append(order) + invoiced_posorders_ids.append(order.id) -report_sxw.report_sxw('report.pos.invoice', 'pos.order', 'addons/account/report/account_print_invoice.rml', parser= pos_invoice) + if not invoiced_posorders: + raise osv.except_osv(_('Error!'), _('Please create an invoice for this sale.')) + + docargs = { + 'doc_ids': invoiced_posorders_ids, + 'doc_model': report.model, + 'docs': invoiced_posorders, + } + return report_obj.render(cr, uid, invoiced_posorders_ids, 'account.report_invoice', docargs, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_lines.py b/addons/point_of_sale/report/pos_lines.py index f20ccfd1ec2..b4cf512cbe8 100644 --- a/addons/point_of_sale/report/pos_lines.py +++ b/addons/point_of_sale/report/pos_lines.py @@ -20,8 +20,10 @@ ############################################################################## import time +from openerp.osv import osv from openerp.report import report_sxw + class pos_lines(report_sxw.rml_parse): def __init__(self, cr, uid, name, context): @@ -50,6 +52,11 @@ class pos_lines(report_sxw.rml_parse): res=self.cr.fetchone()[0] return res -report_sxw.report_sxw('report.pos.lines', 'pos.order', 'addons/point_of_sale/report/pos_lines.rml', parser=pos_lines,header='internal') + +class report_pos_lines(osv.AbstractModel): + _name = 'report.point_of_sale.report_saleslines' + _inherit = 'report.abstract_report' + _template = 'point_of_sale.report_saleslines' + _wrapped_report_class = pos_lines # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_lines.rml b/addons/point_of_sale/report/pos_lines.rml deleted file mode 100644 index 1ed8e33eede..00000000000 --- a/addons/point_of_sale/report/pos_lines.rml +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[repeatIn(objects,'o')]] - [[ setLang(o.partner_id.lang) ]] - Sales lines - - - - - - - Company - - - Print Date - - - No. Of Articles - - - - - - - [[ company.name ]] - - - [[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]] - - - [[ formatLang(total_quantity(o)) ]] - - - - - - - - - - - - - Description - - - Tax - - - Quantity - - - Unit Price - - - Disc. (%) - - - Price - - - -
    - [[repeatIn(o.lines,'l')]] - - - - [ [[l.product_id.code]] ] [[l.product_id.name]] - - - [[taxes(l)]] - - - [[ formatLang(l.qty) ]] [[l.product_id.uom_id.name]] - - - [[ formatLang(l.price_unit) ]] - - - [[ formatLang(l.discount) ]] - - - [[ formatLang(l.price_subtotal, currency_obj=o.pricelist_id.currency_id) ]] - - - -
    - - - - - - - - - Net Total : - - - [[ formatLang(o.amount_total, currency_obj=o.pricelist_id.currency_id) ]] - - - - - - - - - - Taxes : - - - [[ formatLang(o.amount_tax, currency_obj=o.pricelist_id.currency_id) ]] - - - - - - - - - - Total: - - - [[ formatLang(o.amount_total + o.amount_tax, currency_obj=o.pricelist_id.currency_id) ]] - - - - - - -
    -
    diff --git a/addons/point_of_sale/report/pos_payment_report.py b/addons/point_of_sale/report/pos_payment_report.py index e52694c9d01..5fbc8d5971e 100644 --- a/addons/point_of_sale/report/pos_payment_report.py +++ b/addons/point_of_sale/report/pos_payment_report.py @@ -20,8 +20,10 @@ ############################################################################## import time +from openerp.osv import osv from openerp.report import report_sxw + class pos_payment_report(report_sxw.rml_parse): def __init__(self, cr, uid, name, context): @@ -59,6 +61,11 @@ class pos_payment_report(report_sxw.rml_parse): def _pos_payment_total(self, o): return self.total -report_sxw.report_sxw('report.pos.payment.report', 'pos.order', 'addons/point_of_sale/report/pos_payment_report.rml', parser=pos_payment_report,header='internal') + +class report_pos_payment(osv.AbstractModel): + _name = 'report.point_of_sale.report_payment' + _inherit = 'report.abstract_report' + _template = 'point_of_sale.report_payment' + _wrapped_report_class = pos_payment_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_payment_report.rml b/addons/point_of_sale/report/pos_payment_report.rml deleted file mode 100644 index bcc4b9ec261..00000000000 --- a/addons/point_of_sale/report/pos_payment_report.rml +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Payment For Sale - - - - - - - - - - Company - - - Print Date - - - - - - - [[ company.name ]] - - - [[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]] - - - - - - - - - - - - - Product - - - Qty - - - Disc.(%) - - - Unit Price - - - Total - - - -
    - [[ repeatIn(objects,'o') ]] -
    - [[ repeatIn(pos_payment(o), 'line_ids') ]] - - - - [ [[ line_ids['code'] ]] ] [[ line_ids['name'] ]] - - - [[ formatLang(line_ids['qty']) ]] [[line_ids['uom'] ]] - - - [[ formatLang(line_ids['discount']) ]] - - - [[ formatLang(line_ids['price_unit']) ]] - - - [[ formatLang(line_ids['total'], currency_obj = company.currency_id) ]] - - - - -
    -
    - - - - - - - - - Net Total: - - - [[ formatLang(pos_payment_total(o), currency_obj = company.currency_id) or removeParentNode('blockTable')]] - - - -
    -
    diff --git a/addons/point_of_sale/report/pos_payment_report_user.py b/addons/point_of_sale/report/pos_payment_report_user.py deleted file mode 100644 index d3928df4a84..00000000000 --- a/addons/point_of_sale/report/pos_payment_report_user.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time -from openerp.report import report_sxw - -class pos_payment_report_user(report_sxw.rml_parse): - - def __init__(self, cr, uid, name, context): - super(pos_payment_report_user, self).__init__(cr, uid, name, context=context) - self.total = 0.0 - self.localcontext.update({ - 'time': time, - 'pos_payment_user': self.__pos_payment_user__, - 'pos_payment_user_total':self.__pos_payment_user__total__, - }) - - def __pos_payment_user__(self, form): - data={} - ids = form['user_id'] - sql = "select pt.name,pp.default_code as code,pol.qty,pu.name as uom,pol.discount,pol.price_unit, " \ - "(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) as total " \ - "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt,product_uom as pu " \ - "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and pu.id=pt.uom_id " \ - "and po.state in ('paid','invoiced') and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date = current_date " \ - "and po.user_id IN %s" - self.cr.execute (sql, (tuple(ids), )) - data=self.cr.dictfetchall() - return data - - def __pos_payment_user__total__(self, form): - res=[] - ids = form['user_id'] - self.cr.execute ("select sum(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) " \ - "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \ - "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \ - "and po.state='paid' and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date = current_date " \ - "and po.user_id IN %s",(tuple(ids),)) - res=self.cr.fetchone() - res = res and res[0] or 0.0 - - return res - -report_sxw.report_sxw('report.pos.payment.report.user', 'pos.order', 'addons/point_of_sale/report/pos_payment_report_user.rml', parser=pos_payment_report_user,header='internal') - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_payment_report_user.rml b/addons/point_of_sale/report/pos_payment_report_user.rml deleted file mode 100644 index 3671408b760..00000000000 --- a/addons/point_of_sale/report/pos_payment_report_user.rml +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(objects,'order') ]] - - - - - - - Payment By User - - - - - - - Company - - - Print Date - - - - - - - [[ company.name ]] - - - [[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]] - - - - - - - - - - - - - Product - - - Qty - - - Disc(%) - - - Unit Price - - - Total - - - -
    - [[ repeatIn(pos_payment_user(data['form']), 'line_ids') ]] - - - - [ [[ line_ids['code'] ]] ] [[ line_ids['name'] ]] - - - [[ formatLang(line_ids['qty']) ]] [[line_ids['uom'] ]] - - - [[ formatLang(line_ids['discount']) ]] - - - [[ formatLang(line_ids['price_unit']) ]] - - - [[ formatLang(line_ids['total'], currency_obj = company.currency_id)]] - - - -
    - - - - - - - - - - - - - - - - - - - Total: - - - [[ formatLang(pos_payment_user_total(data['form']), currency_obj = company.currency_id) or removeParentNode('blockTable')]] - - - - - - -
    -
    diff --git a/addons/point_of_sale/report/pos_receipt.py b/addons/point_of_sale/report/pos_receipt.py index bc9d1853f5b..bba15843a0e 100644 --- a/addons/point_of_sale/report/pos_receipt.py +++ b/addons/point_of_sale/report/pos_receipt.py @@ -20,14 +20,17 @@ ############################################################################## import time +from openerp.osv import osv from openerp.report import report_sxw + def titlize(journal_name): words = journal_name.split() while words.pop() != 'journal': continue return ' '.join(words) + class order(report_sxw.rml_parse): def __init__(self, cr, uid, name, context): @@ -71,6 +74,11 @@ class order(report_sxw.rml_parse): data = self.cr.dictfetchall() return data -report_sxw.report_sxw('report.pos.receipt', 'pos.order', 'addons/point_of_sale/report/pos_receipt.rml', parser=order, header=False) + +class report_order_receipt(osv.AbstractModel): + _name = 'report.point_of_sale.report_receipt' + _inherit = 'report.abstract_report' + _template = 'point_of_sale.report_receipt' + _wrapped_report_class = order # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_receipt.rml b/addons/point_of_sale/report/pos_receipt.rml deleted file mode 100644 index 02b8a5b1a1a..00000000000 --- a/addons/point_of_sale/report/pos_receipt.rml +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(objects,'o') ]] - [[o.user_id.company_id.name]] - [[ address and display_address(address)]] - Tel : [[ address and address.phone ]] - User : [[ o.user_id.name ]] - Warehouse : [[ o.warehouse_id.name ]] - Date : [[ o.date_order ]] - - - - - - - - - - N° : [[ o.name ]] - - - - Description - - - Qty - - - Price - - - - - [[ repeatIn(o.lines,'line') ]] - [[ line.product_id.name ]] - - With a [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.2f' % line.discount ]]) % discount. - - - - - - - [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]] - - - [[o.state=='cancel' and o.statement_ids and '-' or '']][[ formatLang(net(line.id), currency_obj=company.currency_id) ]] [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ formatLang(line.discount, currency_obj=company.currency_id) ]]) - - - - - - - Taxes : - - - [[o.state=='cancel' and o.statement_ids and '-' or '']][[formatLang(o.amount_tax, currency_obj=company.currency_id)]] - - - - - - - Total : - - - [[o.state=='cancel' and o.statement_ids and '-' or '']][[formatLang(o.amount_total, currency_obj=company.currency_id)]] - - - - - - - Payment Mode - - - - - - - - Amount - - - - - [[ repeatIn(get_journal_amt(o),'d') ]] - [[ d['name'] ]] - - - - - - - - [[ formatLang(d['amt'] or 0, currency_obj=company.currency_id) ]] - - - - - diff --git a/addons/point_of_sale/report/pos_sales_user.py b/addons/point_of_sale/report/pos_sales_user.py deleted file mode 100644 index 1da46cc3a22..00000000000 --- a/addons/point_of_sale/report/pos_sales_user.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time -from openerp.report import report_sxw - -class pos_sales_user(report_sxw.rml_parse): - - def __init__(self, cr, uid, name, context): - super(pos_sales_user, self).__init__(cr, uid, name, context=context) - self.total = 0.0 - self.localcontext.update({ - 'time': time, - 'get_data':self._get_data, - - }) - - def _get_data(self, form): - dt1 = form['date_start'] + ' 00:00:00' - dt2 = form['date_end'] + ' 23:59:59' - data={} - self.cr.execute("select po.name as pos,po.date_order,rp.name as user,po.state,rc.name " \ - "from pos_order as po,res_users as ru,res_company as rc, res_partner as rp " \ - "where po.date_order >= %s and po.date_order <= %s " \ - "and po.company_id=rc.id and po.user_id=ru.id and po.user_id IN %s and ru.partner_id = rp.id" \ - ,(dt1,dt2,tuple(form['user_id']))) - - return self.cr.dictfetchall() - -report_sxw.report_sxw('report.pos.sales.user', 'pos.order', 'addons/point_of_sale/report/pos_sales_user.rml', parser=pos_sales_user,header='internal') - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_sales_user.rml b/addons/point_of_sale/report/pos_sales_user.rml deleted file mode 100644 index 8684ea11662..00000000000 --- a/addons/point_of_sale/report/pos_sales_user.rml +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(objects,'order') ]] - - - - - - - Sales Report - - - - - - - Company - - - Print Date - - - - - - - [[ company.name ]] - - - [[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]] - - - - - - - - - - - - - Name - - - Date Order - - - User - - - Status - - - Company - - - -
    - [[ repeatIn(get_data(data['form']), 'line_ids')]] - - - - [[ line_ids['pos'] ]] - - - [[ formatLang(line_ids['date_order'],date_time = True) ]] - - - [[ line_ids['user'] ]] - - - [[ line_ids['state'] ]] - - - [[ line_ids['name'] ]] - - - - - - -
    -
    -
    diff --git a/addons/point_of_sale/report/pos_sales_user_today.py b/addons/point_of_sale/report/pos_sales_user_today.py deleted file mode 100644 index 521fbd0adda..00000000000 --- a/addons/point_of_sale/report/pos_sales_user_today.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time -from openerp.report import report_sxw - -class pos_sales_user_today(report_sxw.rml_parse): - - def __init__(self, cr, uid, name, context): - super(pos_sales_user_today, self).__init__(cr, uid, name, context=context) - self.total = 0.0 - self.localcontext.update({ - 'time': time, - 'get_data':self._get_data, - - }) - - def _get_data(self, form): - data={} - ids = form['user_id'] - - self.cr.execute("select po.name as pos,po.date_order,ru.name as user,po.state,rc.name " \ - "from pos_order as po,res_users as ru,res_company as rc " \ - "where to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date = current_date " \ - "and po.company_id=rc.id and po.user_id=ru.id and po.user_id IN %s", (tuple(ids), )) - - data = self.cr.dictfetchall() - return data - -report_sxw.report_sxw('report.pos.sales.user.today', 'pos.order', 'addons/point_of_sale/report/pos_sales_user_today.rml', parser=pos_sales_user_today,header='internal') - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_sales_user_today.rml b/addons/point_of_sale/report/pos_sales_user_today.rml deleted file mode 100644 index d036d2d4813..00000000000 --- a/addons/point_of_sale/report/pos_sales_user_today.rml +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(objects,'order') ]] - - - - - - - Today's Sales By User - - - - - - - Company - - - Print Date - - - - - - - [[ company.name ]] - - - [[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]] - - - - - - - - - - - - - Name - - - Date Order - - - User - - - Status - - - Company - - - -
    - [[ repeatIn(get_data(data['form']), 'line_ids')]] - - - - [[ line_ids['pos'] ]] - - - [[ formatLang(line_ids['date_order'],date_time = True) ]] - - - [[ line_ids['user'] ]] - - - [[ line_ids['state'] ]] - - - [[ line_ids['name'] ]] - - - - - - -
    -
    -
    diff --git a/addons/point_of_sale/report/pos_users_product.py b/addons/point_of_sale/report/pos_users_product.py index 9dfc89a618d..ba77e327fae 100644 --- a/addons/point_of_sale/report/pos_users_product.py +++ b/addons/point_of_sale/report/pos_users_product.py @@ -20,8 +20,10 @@ ############################################################################## import time +from openerp.osv import osv from openerp.report import report_sxw + class pos_user_product(report_sxw.rml_parse): def __init__(self, cr, uid, name, context): @@ -52,17 +54,27 @@ class pos_user_product(report_sxw.rml_parse): return data def _get_user(self, object): + names = [] + users_obj = self.pool['res.users'] for o in object: - sql = """select ru.name from account_bank_statement as abs,res_users ru + sql = """select ru.id from account_bank_statement as abs,res_users ru where abs.user_id = ru.id and abs.id = %d"""%(o.id) self.cr.execute(sql) data = self.cr.fetchone() - return data[0] + if data: + user = users_obj.browse(self.cr, self.uid, data[0]) + names.append(user.partner_id.name) + return list(set(names)) def _get_total(self, o): return self.total -report_sxw.report_sxw('report.pos.user.product', 'account.bank.statement', 'addons/statement/report/pos_users_product.rml', parser=pos_user_product,header='internal') + +class report_pos_user_product(osv.AbstractModel): + _name = 'report.point_of_sale.report_usersproduct' + _inherit = 'report.abstract_report' + _template = 'point_of_sale.report_usersproduct' + _wrapped_report_class = pos_user_product # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/report/pos_users_product.py.WORK b/addons/point_of_sale/report/pos_users_product.py.WORK deleted file mode 100644 index 51ab021e650..00000000000 --- a/addons/point_of_sale/report/pos_users_product.py.WORK +++ /dev/null @@ -1,68 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved -# $Id$ -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -############################################################################## -import time -from report import report_sxw - - -class pos_user_product(report_sxw.rml_parse): - - def __init__(self, cr, uid, name, context): - super(pos_user_product, self).__init__(cr, uid, name, context) - self.total = 0.0 - self.localcontext.update({ - 'time': time, - 'get_data':self._get_data, - 'get_user':self._get_user, - 'get_total':self._get_total, - - }) - def _get_data(self,object): - data={} - for o in object : - sql1=""" SELECT distinct(o.id) from account_bank_statement s, account_bank_statement_line l,pos_order o,pos_order_line i where i.order_id=o.id and o.state in ('paid','invoiced') and l.statement_id=s.id and l.pos_statement_id=o.id and s.id=%d"""%(o.id) - self.cr.execute(sql1) - data = self.cr.dictfetchall() - a_l=[] - for r in data: - if r['id']: - a_l.append(r['id']) - a = ','.join(map(str,a_l)) - if len(a_l): - sql2="""SELECT sum(qty) as qty,l.price_unit*sum(l.qty) as amt,t.name as name from product_product p, product_template t, pos_order_line l where order_id in (%s) and p.product_tmpl_id=t.id and l.product_id=p.id group by t.name, l.price_unit"""%(a) - self.cr.execute(sql2) - data = self.cr.dictfetchall() - for d in data: - self.total += d['amt'] - return data - - def _get_user(self,object): - for o in object : - sql = """select ru.name from account_bank_statement as abs,res_users ru - where abs.user_id = ru.id - and abs.id = %d"""%(o.id) - self.cr.execute(sql) - data = self.cr.fetchone() - return data[0] - def _get_total(self): - return self.total - -report_sxw.report_sxw('report.pos.user.product', 'account.bank.statement', 'addons/statement/report/pos_users_product.rml', parser=pos_user_product) diff --git a/addons/point_of_sale/report/pos_users_product.rml b/addons/point_of_sale/report/pos_users_product.rml deleted file mode 100644 index 9758e924ada..00000000000 --- a/addons/point_of_sale/report/pos_users_product.rml +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(objects,'statement') ]] - - - - - - - User's Product - - - - - - - - - - User - - - Company - - - Print Date - - - Starting Date - - - Ending Date - - - - - - - [[ get_user(objects) ]] - - - [[ company.name ]] - - - [[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]] - - - [[ formatLang(statement.date,date = True) ]] - - - [[ formatLang(statement.closing_date,date_time = True) ]] - - - - - - - - - - Product - - - Qty - - - Amount - - - -
    - [[ repeatIn(get_data(statement), 'line_ids') and ' ' or removeParentNode('blockTable') ]] -
    - [[ repeatIn(get_data(statement), 'line_ids')]] - - - - [ [[line_ids['code'] ]] ] [[ line_ids['name'] ]] - - - [[ formatLang(line_ids['qty']) ]] [[line_ids['uom'] ]] - - - [[ formatLang(line_ids['amt'], currency_obj = company.currency_id) ]] - - - -
    -
    - - - - - - - - - Total : - - - [[ formatLang(get_total(statement), currency_obj = company.currency_id) ]] - - - - - - -
    -
    diff --git a/addons/point_of_sale/test/02_order_to_invoice.yml b/addons/point_of_sale/test/02_order_to_invoice.yml index bd76eb08a9c..ea63b24c58c 100644 --- a/addons/point_of_sale/test/02_order_to_invoice.yml +++ b/addons/point_of_sale/test/02_order_to_invoice.yml @@ -36,11 +36,16 @@ - state == 'paid' - not invoice_id - - I generate the invoice by pressing the Invoice button that calls the workflow + I set the order as invoiced - !workflow {model: pos.order, action: invoice, ref: pos_order_pos1} +- + I generate an invoice from the order +- + !python {model: pos.order}: | + invoice = self.action_invoice(cr, uid, [ref('pos_order_pos1')]) - I test that the total of the attached invoice is correct - - !assert {model: pos.order, id: pos_order_pos1, string: Invoice not correct}: - - amount_total == (450*2 + 300*3*1.05)*0.95 + !assert {model: pos.order, id: pos_order_pos1, string: Invoice inconsistent with its origin order}: + - invoice_id.amount_total == 1795.5 diff --git a/addons/point_of_sale/test/account_statement_reports.yml b/addons/point_of_sale/test/account_statement_reports.yml new file mode 100644 index 00000000000..30eb7d5741d --- /dev/null +++ b/addons/point_of_sale/test/account_statement_reports.yml @@ -0,0 +1,83 @@ +- + In order to test Bank Statement feature of account I create a bank statement line and confirm it and check it's move created +- + I select the period and journal for the bank statement +- + !python {model: account.bank.statement}: | + import time + journal = self._default_journal_id(cr, uid, {'lang': u'en_US', 'tz': False, 'active_model': 'ir.ui.menu', + 'journal_type': 'bank', 'period_id': time.strftime('%m'), 'active_ids': [ref('account.menu_bank_statement_tree')], 'active_id': ref('account.menu_bank_statement_tree')}) + assert journal, 'Journal has not been selected' +- + I create a bank statement with Opening and Closing balance 0. +- + !record {model: account.bank.statement, id: account_bank_statement_0}: + balance_end_real: 0.0 + balance_start: 0.0 + date: !eval time.strftime('%Y-%m-%d') + journal_id: account.bank_journal +- + I create bank statement line +- + !python {model: account.bank.statement.line}: | + partner = self.onchange_partner_id(cr, uid, [], ref('base.res_partner_4'), context=None) + vals = { + 'account_id': partner['value']['account_id'], + 'amount': 1000.0, + 'partner_id': ref('base.res_partner_4'), + 'statement_id': ref('account_bank_statement_0'), + 'name': 'EXT001' + } + vals.update(partner.get('value',{})) + line_id = self.create(cr, uid, vals) + assert line_id, "Account bank statement line has not been created" +- + I compute bank statement using Compute button +- + !python {model: account.bank.statement}: | + self.button_dummy(cr, uid, [ref("account_bank_statement_0")]) + +- + I modify the bank statement and set the Closing Balance. +- + !record {model: account.bank.statement, id: account_bank_statement_0}: + balance_end_real: 1000.0 + +- + I confirm the bank statement using Confirm button +- + !python {model: account.bank.statement}: | + self.button_confirm_bank(cr, uid, [ref("account_bank_statement_0")]) +- + Print the account statement report +- + !python {model: account.bank.statement}: | + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('account_bank_statement_0')], 'point_of_sale.report_statement', {}, {}) + if tools.config['test_report_directory']: + file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-statement.'+format), 'wb+').write(data) + +- + Print the closed cashbox of the day report +- + !python {model: account.bank.statement}: | + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('account_bank_statement_0')], 'point_of_sale.report_closedcashbox', {}, {}) + if tools.config['test_report_directory']: + file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-closedcashbox.'+format), 'wb+').write(data) + +- + Printing the user s product report +- + !python {model: account.bank.statement}: | + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('account_bank_statement_0')], 'point_of_sale.report_usersproduct', {}, {}) + if tools.config['test_report_directory']: + file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-usersproduct.'+format), 'wb+').write(data) + diff --git a/addons/point_of_sale/test/point_of_sale_report.yml b/addons/point_of_sale/test/point_of_sale_report.yml index af034c8f23e..0dda85879c6 100644 --- a/addons/point_of_sale/test/point_of_sale_report.yml +++ b/addons/point_of_sale/test/point_of_sale_report.yml @@ -1,14 +1,3 @@ -- - In order to test the PDF reports defined on a Point Of Sale,we will print a POS Detail Summary Report -- - !python {model: pos.order}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('point_of_sale.pos_order_pos1')], 'pos.details_summary', {}, {}) - if tools.config['test_report_directory']: - file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-details_summary report'+format), 'wb+').write(data) - - In order to test the PDF reports defined on a Point Of Sale, we will print a POS Invoice Report - @@ -16,7 +5,7 @@ import os import openerp.report from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('point_of_sale.pos_order_pos1')], 'pos.invoice', {}, {}) + data, format = openerp.report.render_report(cr, uid, [ref('pos_order_pos1')], 'point_of_sale.report_invoice', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-invoice report'+format), 'wb+').write(data) @@ -27,7 +16,7 @@ import os import openerp.report from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('point_of_sale.pos_order_pos1')], 'pos.lines', {}, {}) + data, format = openerp.report.render_report(cr, uid, [ref('pos_order_pos1')], 'point_of_sale.report_saleslines', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-lines report'+format), 'wb+').write(data) @@ -38,7 +27,7 @@ import os import openerp.report from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('point_of_sale.pos_order_pos1')], 'pos.receipt', {}, {}) + data, format = openerp.report.render_report(cr, uid, [ref('pos_order_pos1')], 'point_of_sale.report_receipt', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-receipt report'+format), 'wb+').write(data) @@ -53,17 +42,6 @@ from openerp.tools import test_reports test_reports.try_report_action(cr, uid, 'action_report_pos_details',wiz_data=data_dict, context=ctx, our_module='point_of_sale') -- - In order to test the PDF reports defined on a Point of Sale, we will print a POS Sales User Report -- - !python {model: pos.order}: | - import os, time - import openerp.report - from openerp import tools - data_dict = {'model':'ir.ui.menu', 'form':{'date_start': time.strftime('%Y-%m-%d'), 'date_end': time.strftime('%Y-%m-%d'),'user_id':[ref('base.user_root')] }} - data, format = openerp.report.render_report(cr, uid, [ref('point_of_sale.pos_order_pos1')], 'pos.sales.user', data_dict, {}) - if tools.config['test_report_directory']: - file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-sales_user_report'+format), 'wb+').write(data) - In order to test the PDF reports defined on a Point of Sale, we will print a POS Payment Report - @@ -71,17 +49,6 @@ import os, time import openerp.report from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('point_of_sale.pos_order_pos0')], 'pos.payment.report', {}, {}) + data, format = openerp.report.render_report(cr, uid, [ref('pos_order_pos0')], 'point_of_sale.report_payment', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-payment_report'+format), 'wb+').write(data) -- - In order to test the PDF reports defined on a Point of Sale, we will print a POS Payment User Report -- - !python {model: pos.order}: | - import os, time - import openerp.report - from openerp import tools - data_dict = {'model':'ir.ui.menu', 'form':{'user_id':[ref('base.user_root'),ref('base.user_demo')] }} - data, format = openerp.report.render_report(cr, uid, [ref('point_of_sale.pos_order_pos1')], 'pos.payment.report.user', data_dict, {}) - if tools.config['test_report_directory']: - file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-payment_user_report'+format), 'wb+').write(data) diff --git a/addons/point_of_sale/views/report_closedcashbox.xml b/addons/point_of_sale/views/report_closedcashbox.xml new file mode 100644 index 00000000000..4b936468341 --- /dev/null +++ b/addons/point_of_sale/views/report_closedcashbox.xml @@ -0,0 +1,68 @@ + + + + + + diff --git a/addons/point_of_sale/views/report_detailsofsales.xml b/addons/point_of_sale/views/report_detailsofsales.xml new file mode 100644 index 00000000000..5f9fa48752d --- /dev/null +++ b/addons/point_of_sale/views/report_detailsofsales.xml @@ -0,0 +1,140 @@ + + + + + + diff --git a/addons/point_of_sale/views/report_payment.xml b/addons/point_of_sale/views/report_payment.xml new file mode 100644 index 00000000000..82bc4f7c35b --- /dev/null +++ b/addons/point_of_sale/views/report_payment.xml @@ -0,0 +1,90 @@ + + + + + + diff --git a/addons/point_of_sale/views/report_receipt.xml b/addons/point_of_sale/views/report_receipt.xml new file mode 100644 index 00000000000..70b2d8a3dc4 --- /dev/null +++ b/addons/point_of_sale/views/report_receipt.xml @@ -0,0 +1,92 @@ + + + + + + diff --git a/addons/point_of_sale/views/report_saleslines.xml b/addons/point_of_sale/views/report_saleslines.xml new file mode 100644 index 00000000000..a3f479c5d84 --- /dev/null +++ b/addons/point_of_sale/views/report_saleslines.xml @@ -0,0 +1,98 @@ + + + + + + diff --git a/addons/point_of_sale/views/report_statement.xml b/addons/point_of_sale/views/report_statement.xml new file mode 100644 index 00000000000..4234d0b997b --- /dev/null +++ b/addons/point_of_sale/views/report_statement.xml @@ -0,0 +1,85 @@ + + + + + + \ No newline at end of file diff --git a/addons/point_of_sale/views/report_usersproduct.xml b/addons/point_of_sale/views/report_usersproduct.xml new file mode 100644 index 00000000000..9a3614e43d3 --- /dev/null +++ b/addons/point_of_sale/views/report_usersproduct.xml @@ -0,0 +1,79 @@ + + + + + + diff --git a/addons/point_of_sale/wizard/__init__.py b/addons/point_of_sale/wizard/__init__.py index 0f97a054533..744170cebef 100644 --- a/addons/point_of_sale/wizard/__init__.py +++ b/addons/point_of_sale/wizard/__init__.py @@ -19,18 +19,12 @@ # ############################################################################## +import pos_box import pos_confirm +import pos_details import pos_discount import pos_open_statement -import pos_details -import pos_sales_user -import pos_sales_user_today -import pos_receipt -import pos_payment_report_user -import pos_payment_report import pos_payment import pos_session_opening -import pos_box # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/point_of_sale/wizard/pos_box.py b/addons/point_of_sale/wizard/pos_box.py index e1fa90844d7..ad6719343d8 100644 --- a/addons/point_of_sale/wizard/pos_box.py +++ b/addons/point_of_sale/wizard/pos_box.py @@ -1,5 +1,5 @@ -from openerp.osv import osv, fields +from openerp.osv import osv from openerp.tools.translate import _ from openerp.addons.account.wizard.pos_box import CashBox diff --git a/addons/point_of_sale/wizard/pos_box_entries.py b/addons/point_of_sale/wizard/pos_box_entries.py deleted file mode 100644 index 8ca4f01b006..00000000000 --- a/addons/point_of_sale/wizard/pos_box_entries.py +++ /dev/null @@ -1,146 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time - -from openerp.osv import osv, fields -from openerp.tools.translate import _ - - -def get_journal(self, cr, uid, context=None): - """ - Make the selection list of Cash Journal . - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return :Return the list of journal - """ - - journal_obj = self.pool.get('account.journal') - statement_obj = self.pool.get('account.bank.statement') - - j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context) - obj_ids = statement_obj.search(cr, uid, [('state', '=', 'open'), ('user_id', '=', uid), ('journal_id', 'in', j_ids)], context=context) - res = statement_obj.read(cr, uid, obj_ids, ['journal_id'], context=context) - res = [(r['journal_id']) for r in res] - if not len(res) and context: - raise osv.except_osv(_('Error!'), _('You do not have any open cash register. You must create a payment method or open a cash register.')) - return res - -class pos_box_entries(osv.osv_memory): - _name = 'pos.box.entries' - _description = 'Pos Box Entries' - - def _get_income_product(self, cr, uid, context=None): - """ - Make the selection list of purchasing products. - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return :Return of operation of product - """ - product_obj = self.pool.get('product.product') - ids = product_obj.search(cr, uid, [('income_pdt', '=', True)], context=context) - res = product_obj.read(cr, uid, ids, ['id', 'name'], context=context) - res = [(r['id'], r['name']) for r in res] - res.insert(0, ('', '')) - - return res - - _columns = { - 'name': fields.char('Reason', size=32, required=True), - 'journal_id': fields.many2one('account.journal', 'Cash Register', required=True, domain="[('journal_id.type', '=', 'cash')]"), - 'product_id': fields.selection(_get_income_product, "Operation", required=True, size=-1), - 'amount': fields.float('Amount', digits=(16, 2), required=True), - 'ref': fields.char('Ref', size=32), - 'session_id' : fields.many2one('pos.session', 'Session'), - 'user_id' : fields.many2one('res.users', 'User'), - } - - def _default_session_id(self, cr, uid, context=None): - return context and context.get('active_id', False) or False - - def _default_cash_register(self, cr, uid, context=None): - - #import pdb - #pdb.set_trace() - if not context: - context = {} - result = context.get('active_id', False) or False - - return result - - _defaults = { - #'session_id' : _default_session_id, - #'journal_id': _default_cash_register, - #'product_id': 1, - 'user_id' : lambda obj, cr, uid, context: uid, - } - - def get_in(self, cr, uid, ids, context=None): - """ - Create the entry of statement in journal. - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return :Return of operation of product - """ - statement_obj = self.pool.get('account.bank.statement') - res_obj = self.pool.get('res.users') - product_obj = self.pool.get('product.product') - bank_statement = self.pool.get('account.bank.statement.line') - for data in self.read(cr, uid, ids, context=context): - vals = {} - curr_company = res_obj.browse(cr, uid, uid, context=context).company_id.id - statement_id = statement_obj.search(cr, uid, [('journal_id', '=', int(data['journal_id'])), ('company_id', '=', curr_company), ('user_id', '=', uid), ('state', '=', 'open')], context=context) - if not statement_id: - raise osv.except_osv(_('Error!'), _('You have to open at least one cashbox.')) - - product = product_obj.browse(cr, uid, int(data['product_id'])) - acc_id = product.property_account_income or product.categ_id.property_account_income_categ - if not acc_id: - raise osv.except_osv(_('Error!'), _('Please check that income account is set to %s.')%(product_obj.browse(cr, uid, data['product_id']).name)) - if statement_id: - statement_id = statement_id[0] - if not statement_id: - statement_id = statement_obj.create(cr, uid, { - 'date': time.strftime('%Y-%m-%d 00:00:00'), - 'journal_id': data['journal_id'], - 'company_id': curr_company, - 'user_id': uid, - }, context=context) - - vals['statement_id'] = statement_id - vals['journal_id'] = data['journal_id'] - if acc_id: - vals['account_id'] = acc_id.id - vals['amount'] = data['amount'] or 0.0 - vals['ref'] = "%s" % (data['ref'] or '') - vals['name'] = "%s: %s " % (product_obj.browse(cr, uid, data['product_id'], context=context).name, data['name'].decode('utf8')) - bank_statement.create(cr, uid, vals, context=context) - return {} - - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_box_entries.xml b/addons/point_of_sale/wizard/pos_box_entries.xml deleted file mode 100644 index 913f3b17b20..00000000000 --- a/addons/point_of_sale/wizard/pos_box_entries.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - Box Entries - pos.box.entries - -
    - - - - - - - - - -
    -
    - -
    -
    - - - - - - -
    -
    diff --git a/addons/point_of_sale/wizard/pos_box_out.py b/addons/point_of_sale/wizard/pos_box_out.py deleted file mode 100644 index 51c3993183b..00000000000 --- a/addons/point_of_sale/wizard/pos_box_out.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time -from datetime import datetime -from dateutil.relativedelta import relativedelta - -from openerp.osv import fields, osv -from openerp.tools.translate import _ -import pos_box_entries - -class pos_box_out(osv.osv_memory): - _name = 'pos.box.out' - _description = 'Pos Box Out' - - def _get_expense_product(self, cr, uid, context=None): - """ - Make the selection list of expense product. - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return :Return of operation of product - """ - product_obj = self.pool.get('product.product') - company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id - ids = product_obj.search(cr, uid, ['&', ('expense_pdt', '=', True), '|', ('company_id', '=', company_id), ('company_id', '=', None)], context=context) - res = product_obj.read(cr, uid, ids, ['id', 'name'], context=context) - res = [(r['id'], r['name']) for r in res] - return res - - _columns = { - 'name': fields.char('Description / Reason', size=32, required=True), - 'journal_id': fields.selection(pos_box_entries.get_journal, "Cash Register", required=True, size=-1), - 'product_id': fields.selection(_get_expense_product, "Operation", required=True, size=-1), - 'amount': fields.float('Amount', digits=(16, 2), required=True), - 'session_id' : fields.many2one('pos.session', 'Session'), - 'user_id' : fields.many2one('res.users', 'User'), - } - _defaults = { - 'journal_id': 1, - 'product_id': 1, - 'user_id' : lambda obj, cr, uid, context: uid, - } - def get_out(self, cr, uid, ids, context=None): - - """ - Create the entries in the CashBox . - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return :Return of operation of product - """ - vals = {} - statement_obj = self.pool.get('account.bank.statement') - statement_line_obj = self.pool.get('account.bank.statement.line') - product_obj = self.pool.get('product.product') - res_obj = self.pool.get('res.users') - for data in self.read(cr, uid, ids, context=context): - curr_company = res_obj.browse(cr, uid, uid, context=context).company_id.id - statement_ids = statement_obj.search(cr, uid, [('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid), ('state', '=', 'open')], context=context) - monday = (datetime.today() + relativedelta(weekday=0)).strftime('%Y-%m-%d') - sunday = (datetime.today() + relativedelta(weekday=6)).strftime('%Y-%m-%d') - done_statmt = statement_obj.search(cr, uid, [('date', '>=', monday+' 00:00:00'), ('date', '<=', sunday+' 23:59:59'), ('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid)], context=context) - stat_done = statement_obj.browse(cr, uid, done_statmt, context=context) - am = 0.0 - product = product_obj.browse(cr, uid, data['product_id'], context=context) - acc_id = product.property_account_expense or product.categ_id.property_account_expense_categ - if not acc_id: - raise osv.except_osv(_('Error!'), _('please check that account is set to %s.')%(product.name)) - if not statement_ids: - raise osv.except_osv(_('Error!'), _('You have to open at least one cashbox.')) - vals['statement_id'] = statement_ids[0] - vals['journal_id'] = data['journal_id'] - vals['account_id'] = acc_id.id - amount = data['amount'] or 0.0 - if data['amount'] > 0: - amount = -data['amount'] - vals['amount'] = amount - vals['name'] = "%s: %s " % (product.name, data['name']) - statement_line_obj.create(cr, uid, vals, context=context) - return {} - - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_box_out.xml b/addons/point_of_sale/wizard/pos_box_out.xml deleted file mode 100644 index 750630ac4db..00000000000 --- a/addons/point_of_sale/wizard/pos_box_out.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - Box Out - pos.box.out - -
    - - - - - - - - - -
    -
    - -
    -
    - - - - - -
    -
    diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py index 6a031f54f61..d1ecdfb4e0e 100644 --- a/addons/point_of_sale/wizard/pos_confirm.py +++ b/addons/point_of_sale/wizard/pos_confirm.py @@ -50,4 +50,3 @@ class pos_confirm(osv.osv_memory): return {} # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/point_of_sale/wizard/pos_confirm.xml b/addons/point_of_sale/wizard/pos_confirm.xml index 626c99e1069..77eead67bce 100644 --- a/addons/point_of_sale/wizard/pos_confirm.xml +++ b/addons/point_of_sale/wizard/pos_confirm.xml @@ -17,16 +17,5 @@ - - diff --git a/addons/point_of_sale/wizard/pos_details.py b/addons/point_of_sale/wizard/pos_details.py index bfd6e7c4ca7..1d34cd5c346 100644 --- a/addons/point_of_sale/wizard/pos_details.py +++ b/addons/point_of_sale/wizard/pos_details.py @@ -20,9 +20,9 @@ ############################################################################## import time - from openerp.osv import osv, fields + class pos_details(osv.osv_memory): _name = 'pos.details' _description = 'Sales Details' @@ -54,12 +54,6 @@ class pos_details(osv.osv_memory): datas['form'] = res if res.get('id',False): datas['ids']=[res['id']] - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'pos.details', - 'datas': datas, - } - + return self.pool['report'].get_action(cr, uid, [], 'point_of_sale.report_detailsofsales', data=datas, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/point_of_sale/wizard/pos_discount.py b/addons/point_of_sale/wizard/pos_discount.py index d60b2766644..735e4c1681e 100644 --- a/addons/point_of_sale/wizard/pos_discount.py +++ b/addons/point_of_sale/wizard/pos_discount.py @@ -21,6 +21,7 @@ from openerp.osv import osv, fields + class pos_discount(osv.osv_memory): _name = 'pos.discount' _description = 'Add a Global Discount' @@ -31,21 +32,6 @@ class pos_discount(osv.osv_memory): 'discount': 5, } -# def view_init(self, cr, uid, fields_list, context=None): -# """ -# Creates view dynamically and adding fields at runtime. -# @param self: The object pointer. -# @param cr: A database cursor -# @param uid: ID of the user currently logged in -# @param context: A standard dictionary -# @return: New arch of view with new columns. -# """ -# if context is None: -# context = {} -# super(pos_discount, self).view_init(cr, uid, fields_list, context=context) -# record_id = context and context.get('active_id', False) or False -# True - def apply_discount(self, cr, uid, ids, context=None): """ To give the discount of product and check the. @@ -68,5 +54,4 @@ class pos_discount(osv.osv_memory): order_line_ref.write(cr, uid, [x.id for x in order.lines], {'discount':this.discount}, context=context) return {} - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py index 02223153290..fc03ff4a281 100644 --- a/addons/point_of_sale/wizard/pos_payment.py +++ b/addons/point_of_sale/wizard/pos_payment.py @@ -21,11 +21,10 @@ import time -import pos_box_entries - from openerp.osv import osv, fields from openerp.tools.translate import _ + class account_journal(osv.osv): _inherit = 'account.journal' @@ -43,6 +42,7 @@ class account_journal(osv.osv): return super(account_journal, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count) + class pos_make_payment(osv.osv_memory): _name = 'pos.make.payment' _description = 'Point of Sale Payment' @@ -53,7 +53,6 @@ class pos_make_payment(osv.osv_memory): """ context = context or {} order_obj = self.pool.get('pos.order') - obj_partner = self.pool.get('res.partner') active_id = context and context.get('active_id', False) order = order_obj.browse(cr, uid, active_id, context=context) @@ -128,6 +127,4 @@ class pos_make_payment(osv.osv_memory): 'amount': _default_amount, } - - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment_report.py b/addons/point_of_sale/wizard/pos_payment_report.py deleted file mode 100644 index a591fd4ce5f..00000000000 --- a/addons/point_of_sale/wizard/pos_payment_report.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import osv - -class pos_payment_report(osv.osv_memory): - _name = 'pos.payment.report' - _description = 'Payment Report' - - def print_report(self, cr, uid, ids, context=None): - """ - To get the date and print the report - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return : retrun report - """ - if context is None: - context = {} - datas = {'ids': context.get('active_ids', [])} - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'pos.payment.report', - 'datas': datas, - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/point_of_sale/wizard/pos_payment_report.xml b/addons/point_of_sale/wizard/pos_payment_report.xml deleted file mode 100644 index 6ba34ffab8c..00000000000 --- a/addons/point_of_sale/wizard/pos_payment_report.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Payment Report - pos.payment.report - -
    -
    -
    -
    -
    -
    - - - Payment Report - ir.actions.act_window - pos.payment.report - form - form - new - - - -
    -
    diff --git a/addons/point_of_sale/wizard/pos_payment_report_user.py b/addons/point_of_sale/wizard/pos_payment_report_user.py deleted file mode 100644 index 37a62783ed2..00000000000 --- a/addons/point_of_sale/wizard/pos_payment_report_user.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import osv, fields - -class pos_payment_report_user(osv.osv_memory): - _name = 'pos.payment.report.user' - _description = 'Sales lines by Users' - def print_report(self, cr, uid, ids, context=None): - """ - To get the date and print the report - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return : retrun report - """ - if context is None: - context = {} - datas = {'ids': context.get('active_ids', [])} - res = self.read(cr, uid, ids, ['user_id'], context=context) - res = res and res[0] or {} - datas['form'] = res - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'pos.payment.report.user', - 'datas': datas, - } - - _columns = { - 'user_id': fields.many2many('res.users', 'res_user_sale', 'user_id', 'sale_id', 'Salesperson') - } - - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_payment_report_user.xml b/addons/point_of_sale/wizard/pos_payment_report_user.xml deleted file mode 100644 index 3f109616b34..00000000000 --- a/addons/point_of_sale/wizard/pos_payment_report_user.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Payment Report - pos.payment.report - -
    -
    -
    -
    -
    -
    - - - - Pyament Report - ir.actions.act_window - pos.payment.report - form - form - new - - -
    -
    diff --git a/addons/point_of_sale/wizard/pos_payment_report_user_view.xml b/addons/point_of_sale/wizard/pos_payment_report_user_view.xml deleted file mode 100644 index 3ec4db98305..00000000000 --- a/addons/point_of_sale/wizard/pos_payment_report_user_view.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - pos.payment.report.user.form - pos.payment.report.user - -
    - - - -
    -
    -
    -
    -
    - - Sales lines by Users - ir.actions.act_window - pos.payment.report.user - form - form - new - -
    -
    diff --git a/addons/point_of_sale/wizard/pos_receipt.py b/addons/point_of_sale/wizard/pos_receipt.py deleted file mode 100644 index 3e6714f3ac7..00000000000 --- a/addons/point_of_sale/wizard/pos_receipt.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import osv -from openerp.tools.translate import _ - -class pos_receipt(osv.osv_memory): - _name = 'pos.receipt' - _description = 'Point of sale receipt' - - def view_init(self, cr, uid, fields_list, context=None): - """ - Creates view dynamically and adding fields at runtime. - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return: New arch of view with new columns. - """ - order_lst = self. pool.get('pos.order').browse(cr, uid, context['active_id'], context=context) - - def print_report(self, cr, uid, ids, context=None): - """ - To get the date and print the report - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return : retrun report - """ - if context is None: - context = {} - datas = {'ids': context.get('active_ids', [])} - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'pos.receipt', - 'datas': datas, - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_receipt_view.xml b/addons/point_of_sale/wizard/pos_receipt_view.xml deleted file mode 100644 index ed7c4ac1d93..00000000000 --- a/addons/point_of_sale/wizard/pos_receipt_view.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Receipt - pos.receipt - -
    - - -
    -
    -
    -
    -
    - - - Receipt - pos.receipt - form - form - new - -
    -
    diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py deleted file mode 100644 index 92bb6721f08..00000000000 --- a/addons/point_of_sale/wizard/pos_return.py +++ /dev/null @@ -1,323 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import osv,fields -from openerp.tools.translate import _ -import time - -class pos_return(osv.osv_memory): - _name = 'pos.return' - _description = 'Point of sale return' - _columns = { - 'pos_moves_ids' : fields.one2many('pos.return.memory', 'pos_moves_id', 'Moves'), - } - - def default_get(self, cr, uid, fields, context=None): - """ - To get default values for the object. - - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param fields: List of fields for which we want default values - @param context: A standard dictionary - - @return: A dictionary which of fields with values. - - """ - res = super(pos_return, self).default_get(cr, uid, fields, context=context) - order_obj = self.pool.get('pos.order') - if context is None: - context={} - active_ids = context.get('active_ids') - result=[] - for order in order_obj.browse(cr, uid, active_ids, context=context): - for line in order.lines: - result.append({ - 'product_id' : line.product_id.id, - 'quantity' : line.qty, - 'line_id':line.id - }) - res.update({'pos_moves_ids': result}) - return res - - def create_returns(self, cr, uid, data, context=None): - """ - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - - @return: Return the add product form again for adding more product - - """ - if context is None: - context = {} - current_rec = self.browse(cr, uid, data, context=context)[0] - order_obj =self.pool.get('pos.order') - line_obj = self.pool.get('pos.order.line') - pos_current = order_obj.browse(cr, uid, context.get('active_id'), context=context) - for pos_line in pos_current.lines: - for record in current_rec.pos_moves_ids: - if pos_line.id == record.line_id: - less_qty = record.quantity - line_obj.write(cr, uid, pos_line.id, {'qty':pos_line.qty - less_qty}, context=context) - return { - 'name': _('Add Product'), - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'pos.add.product', - 'view_id': False, - 'target':'new', - 'views': False, - 'context': context, - 'type': 'ir.actions.act_window', - } - def create_returns2(self, cr, uid, ids, context=None): - - if context is None: - context = {} - active_id = context.get('active_id', False) - order_obj =self.pool.get('pos.order') - line_obj = self.pool.get('pos.order.line') - picking_obj = self.pool.get('stock.picking') - stock_move_obj = self.pool.get('stock.move') - property_obj= self.pool.get("ir.property") - uom_obj =self. pool.get('product.uom') - statementl_obj = self.pool.get('account.bank.statement.line') - #Todo :Need to clean the code - if active_id: - data = self.browse(cr, uid, ids, context=context)[0] - date_cur = time.strftime('%Y-%m-%d %H:%M:%S') - - for order_id in order_obj.browse(cr, uid, [active_id], context=context): - source_stock_id = property_obj.get(cr, uid, 'property_stock_customer', 'res.partner', context=context).id - cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w " - "WHERE w.lot_stock_id=s.id AND w.id=%s ", - (order_id.warehouse_id.id,)) - res = cr.fetchone() - location_id = res and res[0] or None - new_picking = picking_obj.copy(cr, uid, order_id.picking_id.id, {'name':'%s (return)' % order_id.name, - 'move_lines': [], - 'state':'draft', - 'type': 'in', - 'partner_id': order_id.partner_id.id, - 'date': date_cur }) - new_order = order_obj.copy(cr, uid, order_id.id, {'name': 'Refund %s'%order_id.name, - 'lines':[], - 'statement_ids':[], - 'picking_id':[]}) - account_def = property_obj.get(cr, uid, 'property_account_payable', 'res.partner', context=context) - amount = 0.0 - for line in order_id.lines: - for record in data.pos_moves_ids: - if line.id == record.line_id: - qty = record.quantity - amount += qty * line.price_unit - stock_move_obj.create(cr, uid, { - 'product_qty': qty , - 'product_uos_qty': uom_obj._compute_qty(cr, uid, qty ,line.product_id.uom_id.id), - 'picking_id': new_picking, - 'product_uom': line.product_id.uom_id.id, - 'location_id': source_stock_id, - 'product_id': line.product_id.id, - 'location_dest_id': location_id, - 'name': '%s (return)' %order_id.name, - 'date': date_cur - }) - if qty != 0.0: - line_obj.copy(cr, uid, line.id, {'qty': -qty, 'order_id': new_order}) - statementl_obj.create(cr, uid, { - 'name': 'Refund %s'%order_id.name, - 'statement_id': order_id.statement_ids[0].statement_id.id, - 'pos_statement_id': new_order, - 'date': fields.date.context_today(self, cr, uid, context=context), - 'account_id': order_id.partner_id and order_id.partner_id.property_account_payable \ - and order_id.partner_id.property_account_payable.id or account_def.id, - 'amount': -amount, - }) - order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'}) - picking_obj.signal_button_confirm(cr, uid, [new_picking]) - picking_obj.force_assign(cr, uid, [new_picking], context) - act = { - 'domain': "[('id', 'in', ["+str(new_order)+"])]", - 'name': 'Refunded Orders', - 'view_type': 'form', - 'view_mode': 'tree,form', - 'res_model': 'pos.order', - 'auto_refresh':0, - 'res_id':new_order, - 'view_id': False, - 'context':context, - 'type': 'ir.actions.act_window' - } - return act - - -class add_product(osv.osv_memory): - _inherit = 'pos.add.product' - def select_product(self, cr, uid, ids, context=None): - """ - To get the product and quantity and add in order . - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return : Retrun the add product form again for adding more product - """ - if context is None: - context = {} - - active_id=context.get('active_id', False) - data = self.read(cr, uid, ids) - data = data and data[0] or False - if active_id: - order_obj = self.pool.get('pos.order') - picking_obj = self.pool.get('stock.picking') - stock_move_obj = self.pool.get('stock.move') - property_obj= self.pool.get("ir.property") - date_cur=time.strftime('%Y-%m-%d') - uom_obj = self.pool.get('product.uom') - prod_obj=self.pool.get('product.product') - order_obj.add_product(cr, uid, active_id, data['product_id'], data['quantity'], context=context) - - for order_id in order_obj.browse(cr, uid, [active_id], context=context): - prod=data['product_id'] - qty=data['quantity'] - stock_dest_id = property_obj.get(cr, uid, 'property_stock_customer', 'res.partner', context=context).id - cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w " - "WHERE w.lot_stock_id=s.id AND w.id=%s ", - (order_id.warehouse_id.id,)) - res=cr.fetchone() - location_id=res and res[0] or None - prod_id=prod_obj.browse(cr, uid, prod, context=context) - new_picking=picking_obj.create(cr, uid, { - 'name':'%s (Added)' %order_id.name, - 'move_lines':[], - 'state':'draft', - 'type':'out', - 'date':date_cur - }) - stock_move_obj.create(cr, uid, { - 'product_qty': qty, - 'product_uos_qty': uom_obj._compute_qty(cr, uid, prod_id.uom_id.id, qty, prod_id.uom_id.id), - 'picking_id':new_picking, - 'product_uom':prod_id.uom_id.id, - 'location_id':location_id, - 'product_id':prod_id.id, - 'location_dest_id':stock_dest_id, - 'name':'%s (return)' %order_id.name, - 'date':date_cur - }) - - picking_obj.signal_button_confirm(cr, uid, [new_picking]) - picking_obj.force_assign(cr, uid, [new_picking], context) - order_obj.write(cr,uid,active_id,{'picking_id':new_picking}) - - return { - 'name': _('Add Product'), - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'pos.add.product', - 'view_id': False, - 'target':'new', - 'context':context, - 'views': False, - 'type': 'ir.actions.act_window', - } - - def close_action(self, cr, uid, ids, context=None): - if context is None: context = {} - active_ids=context.get('active_ids', False) - order_obj = self.pool.get('pos.order') - lines_obj = self.pool.get('pos.order.line') - picking_obj = self.pool.get('stock.picking') - stock_move_obj = self.pool.get('stock.move') - property_obj= self.pool.get("ir.property") - invoice_obj=self.pool.get('account.invoice') - date_cur=time.strftime('%Y-%m-%d %H:%M:%S') - uom_obj = self.pool.get('product.uom') - return_boj=self.pool.get('pos.return') - return_id = return_boj.search(cr,uid,[]) - data = {} - if return_id: - data = return_boj.read(cr,uid,return_id,[])[0] - - self_data = self.browse(cr, uid, ids, context=context)[0] - order_obj.add_product(cr, uid, active_ids[0], self_data.product_id.id, self_data.quantity, context=context) - - for order_id in order_obj.browse(cr, uid, active_ids, context=context): - stock_dest_id = property_obj.get(cr, uid, 'property_stock_customer', 'res.partner', context=context).id - cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w " - " WHERE w.lot_stock_id=s.id AND w.id=%s ", - (order_id.warehouse_id.id,)) - res=cr.fetchone() - location_id=res and res[0] or None - - if order_id.invoice_id: - invoice_obj.refund(cr, uid, [order_id.invoice_id.id], time.strftime('%Y-%m-%d'), False, order_id.name, context=context) - new_picking=picking_obj.create(cr, uid, { - 'name':'%s (return)' %order_id.name, - 'move_lines':[], 'state':'draft', - 'type':'in', - 'date':date_cur - }) - for line in order_id.lines: - key= 'return%s' % line.id - if line.id: - if data.has_key(key): - qty = data[key] - lines_obj.write(cr,uid,[line.id], { - 'qty':line.qty-(data[key] or 0.0) - }) - else: - qty = line.qty - stock_move_obj.create(cr, uid, { - 'product_qty': qty, - 'product_uos_qty': uom_obj._compute_qty(cr, uid, qty, line.product_id.uom_id.id), - 'picking_id':new_picking, - 'product_uom':line.product_id.uom_id.id, - 'location_id':location_id, - 'product_id':line.product_id.id, - 'location_dest_id':stock_dest_id, - 'name':'%s (return)' % order_id.name, - 'date':date_cur, - }) - picking_obj.signal_button_confirm(cr, uid, [new_picking]) - picking_obj.force_assign(cr, uid, [new_picking], context) - obj=order_obj.browse(cr,uid, active_ids[0]) - context.update({'return':'return'}) - - if obj.amount_total != obj.amount_paid: - return { - 'name': _('Make Payment'), - 'context ':context, - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'pos.make.payment', - 'view_id': False, - 'target': 'new', - 'views': False, - 'type': 'ir.actions.act_window', - } - return True - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/point_of_sale/wizard/pos_return_view.xml b/addons/point_of_sale/wizard/pos_return_view.xml deleted file mode 100644 index 62e2f3012d9..00000000000 --- a/addons/point_of_sale/wizard/pos_return_view.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - pos.return - pos.return - -
    -
    -
    -
    -
    -
    - - - Return lines - pos.return - form - form - new - - - - pos.return.memory - pos.return.memory - - - - - - - - - - - pos.return.memory - pos.return.memory - -
    - - - - - -
    -
    -
    - -
    -
    diff --git a/addons/point_of_sale/wizard/pos_sales_user.py b/addons/point_of_sale/wizard/pos_sales_user.py deleted file mode 100644 index e8ece7a7953..00000000000 --- a/addons/point_of_sale/wizard/pos_sales_user.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import osv, fields -from openerp.tools.translate import _ - - -class pos_sale_user(osv.osv_memory): - _name = 'pos.sale.user' - _description = 'Sale by User' - - _columns = { - 'date_start': fields.date('Date Start', required=True), - 'date_end': fields.date('Date End', required=True), - 'user_id': fields.many2many('res.users', 'sale_user_rel', 'user_id', 'uid', 'Salesperson'), - } - - def print_report(self, cr, uid, ids, context=None): - """ - To get the date and print the report - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return : return report - """ - if context is None: - context = {} - - datas = {'ids': context.get('active_ids', [])} - res = self.read(cr, uid, ids, ['date_start', 'date_end', 'user_id'], context=context) - res = res and res[0] or {} - datas['form'] = res - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'pos.sales.user', - 'datas': datas, - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/point_of_sale/wizard/pos_sales_user.xml b/addons/point_of_sale/wizard/pos_sales_user.xml deleted file mode 100644 index 2623c426cb8..00000000000 --- a/addons/point_of_sale/wizard/pos_sales_user.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - Sale By User - pos.sale.user - -
    - - - - - -
    -
    -
    -
    -
    - - - - Sale by User - ir.actions.act_window - pos.sale.user - form - form - new - - -
    -
    diff --git a/addons/point_of_sale/wizard/pos_sales_user_current_user.py b/addons/point_of_sale/wizard/pos_sales_user_current_user.py deleted file mode 100644 index d6178ff6a50..00000000000 --- a/addons/point_of_sale/wizard/pos_sales_user_current_user.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import osv -from openerp.tools.translate import _ - - -class pos_sales_user_today_current_user(osv.osv_memory): - _name = 'pos.sales.user.today.current_user' - _description = 'Sales Details' - - _columns = { - } - - def print_report(self, cr, uid, ids, context=None): - """ - To get the date and print the report - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return : retrun report - """ - if context is None: - context = {} - - datas = {'ids': context.get('active_ids', [])} - res = self.read(cr, uid, ids, [], context=context) - res = res and res[0] or {} - datas['form'] = res - - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'pos.sales.user.today.current.user', - 'datas': datas, - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/point_of_sale/wizard/pos_sales_user_today.py b/addons/point_of_sale/wizard/pos_sales_user_today.py deleted file mode 100644 index 65e4182daed..00000000000 --- a/addons/point_of_sale/wizard/pos_sales_user_today.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import osv, fields - - -class pos_sales_user_today(osv.osv_memory): - _name = 'pos.sales.user.today' - _description = 'Sales User Today' - - _columns = { - 'user_id': fields.many2many('res.users', 'sale_user_rel_today', 'user_id', 'uid', 'Salesperson'), - } - - def print_report(self, cr, uid, ids, context=None): - """ - To get the date and print the report - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param context: A standard dictionary - @return : retrun report - """ - if context is None: - context = {} - - datas = {'ids': context.get('active_ids', [])} - res = self.read(cr, uid, ids, ['user_id'], context=context) - res = res and res[0] or {} - datas['form'] = res - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'pos.sales.user.today', - 'datas': datas, - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/report/controllers/main.py b/addons/report/controllers/main.py index d3a683cccdc..95a1ea7636a 100644 --- a/addons/report/controllers/main.py +++ b/addons/report/controllers/main.py @@ -20,6 +20,8 @@ ############################################################################## from openerp.addons.web.http import Controller, route, request +from openerp.addons.web.controllers.main import _serialize_exception +from openerp.osv import osv import simplejson from werkzeug import exceptions, url_decode @@ -97,32 +99,40 @@ class ReportController(Controller): """ requestcontent = simplejson.loads(data) url, type = requestcontent[0], requestcontent[1] + try: + if type == 'qweb-pdf': + reportname = url.split('/report/pdf/')[1].split('?')[0] - if type == 'qweb-pdf': - reportname = url.split('/report/pdf/')[1].split('?')[0] + docids = None + if '/' in reportname: + reportname, docids = reportname.split('/') - docids = None - if '/' in reportname: - reportname, docids = reportname.split('/') + if docids: + # Generic report: + response = self.report_routes(reportname, docids=docids, converter='pdf') + else: + # Particular report: + data = url_decode(url.split('?')[1]).items() # decoding the args represented in JSON + response = self.report_routes(reportname, converter='pdf', **dict(data)) - if docids: - # Generic report: - response = self.report_routes(reportname, docids=docids, converter='pdf') + response.headers.add('Content-Disposition', 'attachment; filename=%s.pdf;' % reportname) + response.set_cookie('fileToken', token) + return response + elif type =='controller': + reqheaders = Headers(request.httprequest.headers) + response = Client(request.httprequest.app, BaseResponse).get(url, headers=reqheaders, follow_redirects=True) + response.set_cookie('fileToken', token) + return response else: - # Particular report: - data = url_decode(url.split('?')[1]).items() # decoding the args represented in JSON - response = self.report_routes(reportname, converter='pdf', **dict(data)) - - response.headers.add('Content-Disposition', 'attachment; filename=%s.pdf;' % reportname) - response.set_cookie('fileToken', token) - return response - elif type =='controller': - reqheaders = Headers(request.httprequest.headers) - response = Client(request.httprequest.app, BaseResponse).get(url, headers=reqheaders, follow_redirects=True) - response.set_cookie('fileToken', token) - return response - else: - return + return + except osv.except_osv, e: + se = _serialize_exception(e) + error = { + 'code': 200, + 'message': "OpenERP Server Error", + 'data': se + } + return request.make_response(simplejson.dumps(error)) @route(['/report/check_wkhtmltopdf'], type='json', auth="user") def check_wkhtmltopdf(self): diff --git a/addons/report/static/src/js/qwebactionmanager.js b/addons/report/static/src/js/qwebactionmanager.js index 7e55661be86..37a0fae6ea6 100644 --- a/addons/report/static/src/js/qwebactionmanager.js +++ b/addons/report/static/src/js/qwebactionmanager.js @@ -78,8 +78,7 @@ openerp.report = function(instance) { } return trigger_download(self.session, response, c); }); - } - else if (action.report_type == 'controller') { + } else if (action.report_type == 'controller') { return trigger_download(self.session, response, c); } } From faadf0fec4c577e984d916e7fd54c2a42ad621c5 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Mon, 14 Apr 2014 12:53:33 +0200 Subject: [PATCH 056/143] [FIX] get_file error: the exception can be the only node and must be json parsed bzr revid: sle@openerp.com-20140414105333-05jona7myntifamw --- addons/web/static/src/js/core.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index 90c84ba9cda..45ed6f41c6f 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -460,14 +460,11 @@ instance.web.Session.include( /** @lends instance.web.Session# */{ .appendTo(document.body) .load(function () { try { - if (options.error) { - if (!this.contentDocument.body.childNodes[1]) { - options.error(this.contentDocument.body.childNodes); - } - else { - options.error(JSON.parse(this.contentDocument.body.childNodes[1].textContent)); - } - } + if (options.error) { + var body = this.contentDocument.body; + var node = body.childNodes[1] || body.childNodes[0]; + options.error(JSON.parse(node.textContent)); + } } finally { complete(); } From 733f344ff623fce18400cdb743c349816045db93 Mon Sep 17 00:00:00 2001 From: Randhir Mayatra rma-openerp Date: Mon, 14 Apr 2014 17:39:15 +0530 Subject: [PATCH 057/143] [IMP] add 'report' in sale dependancy bzr revid: rma@tinyerp.com-20140414120915-3huithw6481rss0j --- addons/sale/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index c330e01d7ca..65269b75153 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -59,7 +59,7 @@ The Dashboard for the Sales Manager will include 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/Sale_order_line_to_invoice.jpeg','images/sale_order.jpeg','images/sales_analysis.jpeg'], - 'depends': ['account_voucher'], + 'depends': ['account_voucher', 'report'], 'data': [ 'wizard/sale_make_invoice_advance.xml', 'wizard/sale_line_invoice.xml', From a80d6878a63928c5ba1784423a105e297edff5e4 Mon Sep 17 00:00:00 2001 From: Randhir Mayatra rma-openerp Date: Mon, 14 Apr 2014 18:03:21 +0530 Subject: [PATCH 058/143] [IMP] remove 'action_menu_admin' record, because its not required anymore bzr revid: rma@tinyerp.com-20140414123321-mh0ecde7m7mhjiff --- openerp/addons/base/base_data.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml index 96e13773cae..728f1d43647 100644 --- a/openerp/addons/base/base_data.xml +++ b/openerp/addons/base/base_data.xml @@ -11,15 +11,6 @@ child_id - - Menu - menu - ir.actions.act_window - - ir.ui.menu - tree - [('parent_id', '=', False)] - en_US From 57fc6c4d557564e8a1b6d0b41f7da65c22832645 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Mon, 14 Apr 2014 14:35:29 +0200 Subject: [PATCH 059/143] [FIX] When converting a pos order line to an invoice line, a key 'note' was passed to the 'create' but there is not a 'note' field in the model invoice line. bzr revid: sle@openerp.com-20140414123529-7k2a0fdsz7fg01xl --- addons/point_of_sale/point_of_sale.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 72b6a30c2ed..931188f2ef6 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -919,8 +919,6 @@ class pos_order(osv.osv): line.product_id.uom_id.id, line.qty, partner_id = order.partner_id.id, fposition_id=order.partner_id.property_account_position.id)['value']) - if line.product_id.description_sale: - inv_line['note'] = line.product_id.description_sale inv_line['price_unit'] = line.price_unit inv_line['discount'] = line.discount inv_line['name'] = inv_name From 11a0b506d0379378bc551e4b62dd0e6d6b8b674d Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Mon, 14 Apr 2014 14:55:22 +0200 Subject: [PATCH 060/143] [FIX] bad condition on report_payment qweb view resulting in empty report bzr revid: sle@openerp.com-20140414125522-v4obm4xreljizqje --- addons/point_of_sale/views/report_payment.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/point_of_sale/views/report_payment.xml b/addons/point_of_sale/views/report_payment.xml index 82bc4f7c35b..81c644b6fef 100644 --- a/addons/point_of_sale/views/report_payment.xml +++ b/addons/point_of_sale/views/report_payment.xml @@ -19,7 +19,7 @@
    - +
    - - - - - - - - - - - - - Price List - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - [[repeatIn(get_categories(objects,data['form']), 'c')]] - -
    - - - - - - - -
    - [[repeatIn(c['products'], 'p')]] - -
    - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/addons/product/views/report_pricelist.xml b/addons/product/views/report_pricelist.xml new file mode 100644 index 00000000000..9b990f3c068 --- /dev/null +++ b/addons/product/views/report_pricelist.xml @@ -0,0 +1,68 @@ + + + + + + diff --git a/addons/product/wizard/product_price.py b/addons/product/wizard/product_price.py index 5b5c4ccd834..b43bc74e8ec 100644 --- a/addons/product/wizard/product_price.py +++ b/addons/product/wizard/product_price.py @@ -20,7 +20,6 @@ ############################################################################## from openerp.osv import fields, osv -from openerp.tools.translate import _ class product_price_list(osv.osv_memory): @@ -55,10 +54,6 @@ class product_price_list(osv.osv_memory): res = res and res[0] or {} res['price_list'] = res['price_list'][0] datas['form'] = res - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'product.pricelist', - 'datas': datas, - } -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + return self.pool['report'].get_action(cr, uid, [], 'product.report_pricelist', data=datas, context=context) +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 9c0526b1bde33922fcf7dddf1e65bf4429b64bff Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Tue, 15 Apr 2014 17:37:34 +0200 Subject: [PATCH 064/143] [FIX] website tour: test mode + add log bzr revid: chm@openerp.com-20140415153734-5n2sz3xn01ydfeh6 --- addons/website/static/src/js/website.tour.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 28d80fb2272..368a316e6f7 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -98,15 +98,15 @@ var T = website.Tour = { T.tours[tour.id] = tour; }, run: function (tour_id, mode) { - if (localStorage.getItem("tour") && mode === "test") { // only one test running - return; - } var tour = T.tours[tour_id]; this.time = new Date().getTime(); if (tour.path && !window.location.href.match(new RegExp("("+T.getLang()+")?"+tour.path+"#?$", "i"))) { + var href = "/"+T.getLang()+tour.path; + console.log("Tour Begin from run method (redirection to "+href+")"); T.saveState(tour.id, mode || tour.mode, -1); - window.location.href = "/"+T.getLang()+tour.path; + window.location.href = href; } else { + console.log("Tour Begin from run method"); T.saveState(tour.id, mode || tour.mode, 0); T.running(); } @@ -307,6 +307,7 @@ var T = website.Tour = { "step_id": 0 }; window.location.hash = ""; + console.log("Tour Begin from url hash"); T.saveState(state.id, state.mode, state.step_id); } if (!state.id || !T.tours[state.id]) { @@ -357,6 +358,7 @@ var T = website.Tour = { function run () { var state = T.getState(); if (state) { + console.log("Tour '"+state.id+"' is running"); T.registerSteps(state.tour); T.nextStep(); } From 9284bd4817e970ff26cb17d3cd8aff0d5c2efb24 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Wed, 16 Apr 2014 10:21:38 +0200 Subject: [PATCH 065/143] [FIX] website: tour test inject javascript bzr revid: chm@openerp.com-20140416082138-rhwo2tl9l6jrko78 --- addons/website_event_sale/tests/test_ui.py | 4 ++-- addons/website_sale/tests/test_ui.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/website_event_sale/tests/test_ui.py b/addons/website_event_sale/tests/test_ui.py index fccbabb9d18..9e0ae31484e 100644 --- a/addons/website_event_sale/tests/test_ui.py +++ b/addons/website_event_sale/tests/test_ui.py @@ -3,8 +3,8 @@ import os import openerp.tests inject = [ - ("openerp.website.Tour", os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js')), - ("openerp.website.Tour.tours.event_buy_tickets", os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.event_sale.js")), + os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js'), + os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.event_sale.js"), ] @openerp.tests.common.at_install(False) diff --git a/addons/website_sale/tests/test_ui.py b/addons/website_sale/tests/test_ui.py index 61b0e904abf..e242bb0b557 100644 --- a/addons/website_sale/tests/test_ui.py +++ b/addons/website_sale/tests/test_ui.py @@ -3,8 +3,8 @@ import os import openerp.tests inject = [ - ("openerp.website.Tour", os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js')), - ("openerp.website.Tour.tours.shop_buy_product", os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.sale.js")), + os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js'), + os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.sale.js"), ] @openerp.tests.common.at_install(False) From f50acd0bf9085167845787e9548b4fc75fd8be49 Mon Sep 17 00:00:00 2001 From: Jaydeep Barot Date: Mon, 21 Apr 2014 10:35:34 +0530 Subject: [PATCH 066/143] [IMP] merge two group by in search view to install account_followup and invisble accounting tab form partner view when user dont have account rights evnen, when is company true. bzr revid: jar@tinyerp.com-20140421050534-0z3zefpb3vp8why7 --- addons/account/partner_view.xml | 4 ++-- addons/account_followup/account_followup_customers.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml index 6a58bc7f77e..a11b1089dec 100644 --- a/addons/account/partner_view.xml +++ b/addons/account/partner_view.xml @@ -97,7 +97,7 @@ - + @@ -127,7 +127,7 @@ - +

    Accounting-related settings are managed on

    diff --git a/addons/account_followup/account_followup_customers.xml b/addons/account_followup/account_followup_customers.xml index fba0bce460b..8973e6e3984 100644 --- a/addons/account_followup/account_followup_customers.xml +++ b/addons/account_followup/account_followup_customers.xml @@ -50,11 +50,11 @@ - - - - + + + +
    From 0c38696de397a69f9552237eee70a67394a05ad5 Mon Sep 17 00:00:00 2001 From: Jaydeep Barot Date: Mon, 21 Apr 2014 10:58:58 +0530 Subject: [PATCH 067/143] [IMP] set number instead of amount in breadcum. bzr revid: jar@tinyerp.com-20140421052858-aoko0dogh3gz0s17 --- addons/account_voucher/account_voucher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 771c6e15bd8..f6667f209dd 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -189,7 +189,7 @@ class account_voucher(osv.osv): if not ids: return [] if context is None: context = {} - return [(r['id'], (str("%.2f" % r['amount']) or '')) for r in self.read(cr, uid, ids, ['amount'], context, load='_classic_write')] + return [(r['id'], (r['number'] or '')) for r in self.read(cr, uid, ids, ['number'], context, load='_classic_write')] def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False): mod_obj = self.pool.get('ir.model.data') From fcc4d29240eb817cedb9c84ceceffd2e2a3d8c4f Mon Sep 17 00:00:00 2001 From: Jaydeep Barot Date: Mon, 21 Apr 2014 11:04:56 +0530 Subject: [PATCH 068/143] [IMP] when we unselect allow multi currency, values of Gain Exchange Rate Account and Loss Exchange Rate Account will become false. bzr revid: jar@tinyerp.com-20140421053456-zc7x5mvy4rk34al8 --- addons/account/res_config.py | 5 +++++ addons/account/res_config_view.xml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/account/res_config.py b/addons/account/res_config.py index 8980a31927e..b9bceb3d2ff 100644 --- a/addons/account/res_config.py +++ b/addons/account/res_config.py @@ -259,6 +259,11 @@ class account_config_settings(osv.osv_memory): def onchange_tax_rate(self, cr, uid, ids, rate, context=None): return {'value': {'purchase_tax_rate': rate or False}} + def onchange_multi_currency(self, cr, uid, ids, group_multi_currency, context=None): + if not group_multi_currency: + return {'value': {'income_currency_exchange_account_id': False, 'expense_currency_exchange_account_id': False}} + return {} + def onchange_start_date(self, cr, uid, id, start_date): if start_date: start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d") diff --git a/addons/account/res_config_view.xml b/addons/account/res_config_view.xml index 8a5b1978ecb..115566e9ab5 100644 --- a/addons/account/res_config_view.xml +++ b/addons/account/res_config_view.xml @@ -122,7 +122,7 @@
    - - - - - - - - - - - - - - - - -
    - [[ repeatIn(get_employee(data['form']),'e') ]] - -
    - - - - - - - - - - - - - - - - - - -
    - [[ repeatIn(get_months_tol(),'t') ]] - -
    - - - - - - - - - - - - - - - - - - - diff --git a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py index 93594e1dff8..113ad52620d 100644 --- a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py +++ b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py @@ -20,7 +20,6 @@ ############################################################################## import time - from openerp.osv import fields, osv class hr_salary_employee_bymonth(osv.osv_memory): @@ -60,11 +59,8 @@ class hr_salary_employee_bymonth(osv.osv_memory): res = self.read(cr, uid, ids, context=context) res = res and res[0] or {} datas.update({'form': res}) - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'salary.employee.bymonth', - 'datas': datas, - } + return self.pool['report'].get_action(cr, uid, ids, + 'l10n_in_hr_payroll.employee_salary_bymonth', + data=datas, context=context) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 7d72983357b866f13e3ba31c72d73a27a498ce4b Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Mon, 21 Apr 2014 15:23:14 +0530 Subject: [PATCH 072/143] [ADD]: Add the view file of the QWEB report bzr revid: rsi@tinyerp.com-20140421095314-mq4o9qhi2efl5jai --- .../report_hr_salary_employee_bymonth.xml | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 addons/l10n_in_hr_payroll/views/report_hr_salary_employee_bymonth.xml diff --git a/addons/l10n_in_hr_payroll/views/report_hr_salary_employee_bymonth.xml b/addons/l10n_in_hr_payroll/views/report_hr_salary_employee_bymonth.xml new file mode 100644 index 00000000000..473c8148118 --- /dev/null +++ b/addons/l10n_in_hr_payroll/views/report_hr_salary_employee_bymonth.xml @@ -0,0 +1,75 @@ + + + + + + \ No newline at end of file From 2e67cf77de903671f7af9b20955893687a826c91 Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Tue, 22 Apr 2014 11:01:21 +0530 Subject: [PATCH 073/143] [IMP]: Change the file attribute value in report bzr revid: rsi@tinyerp.com-20140422053121-e146c69xlxbl3lum --- addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml index 804236c0c68..795d0feabd4 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml @@ -23,7 +23,7 @@ string="Yearly Salary by Head" model="hr.salary.employee.month" report_type="qweb-pdf" - file="Yearly Salary By Head" + file="l10n_in_hr_payroll.employee_salary_bymonth" name="l10n_in_hr_payroll.employee_salary_bymonth"/> Date: Tue, 22 Apr 2014 15:43:38 +0530 Subject: [PATCH 074/143] [IMP] change add groups on groupby company and change icon on groupby company bzr revid: jar@tinyerp.com-20140422101338-mb7m97rjr48t8gyz --- addons/account/account_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index d49d81b5bbc..2a184b003a2 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -384,7 +384,7 @@ - + From 166f735ce5d7a46e9e89603f786870f8539c2ce5 Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Tue, 22 Apr 2014 17:39:15 +0530 Subject: [PATCH 075/143] [IMP]: Remove the inline CSS bzr revid: rsi@tinyerp.com-20140422120915-wpkrw1v1zmjugx5d --- addons/l10n_in_hr_payroll/__openerp__.py | 2 +- .../l10n_in_hr_payroll_report.xml | 6 +- .../report_hr_salary_employee_bymonth.py | 4 +- .../report_hr_salary_employee_bymonth.xml | 75 ------------------- .../views/report_hrsalarybymonth.xml | 74 ++++++++++++++++++ .../wizard/hr_salary_employee_bymonth.py | 2 +- 6 files changed, 81 insertions(+), 82 deletions(-) delete mode 100644 addons/l10n_in_hr_payroll/views/report_hr_salary_employee_bymonth.xml create mode 100644 addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml diff --git a/addons/l10n_in_hr_payroll/__openerp__.py b/addons/l10n_in_hr_payroll/__openerp__.py index 3ffa88729b0..c86ad06c387 100644 --- a/addons/l10n_in_hr_payroll/__openerp__.py +++ b/addons/l10n_in_hr_payroll/__openerp__.py @@ -49,7 +49,7 @@ Indian Payroll Salary Rules. 'security/ir.model.access.csv', 'l10n_in_hr_payroll_report.xml', 'l10n_in_hr_payroll_sequence.xml', - 'views/report_hr_salary_employee_bymonth.xml', + 'views/report_hrsalarybymonth.xml', 'wizard/hr_salary_employee_bymonth_view.xml', 'wizard/hr_yearly_salary_detail_view.xml', 'report/payment_advice_report_view.xml', diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml index 795d0feabd4..dc07633ea3d 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml @@ -19,12 +19,12 @@ string="Print Advice" /> + file="l10n_in_hr_payroll.report_hrsalarybymonth" + name="l10n_in_hr_payroll.report_hrsalarybymonth"/> - - - - - \ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml new file mode 100644 index 00000000000..94d2faa18da --- /dev/null +++ b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml @@ -0,0 +1,74 @@ + + + + + + \ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py index 113ad52620d..6e37f5b58d5 100644 --- a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py +++ b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth.py @@ -60,7 +60,7 @@ class hr_salary_employee_bymonth(osv.osv_memory): res = res and res[0] or {} datas.update({'form': res}) return self.pool['report'].get_action(cr, uid, ids, - 'l10n_in_hr_payroll.employee_salary_bymonth', + 'l10n_in_hr_payroll.report_hrsalarybymonth', data=datas, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 7e8dcc5600b61d68af1572a904eaada9215b17a6 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Tue, 22 Apr 2014 14:11:05 +0200 Subject: [PATCH 076/143] [IMP] l10n_be and l1n_fr reports converted to QWeb bzr revid: sle@openerp.com-20140422121105-osvy8ji5v40t70jf --- addons/l10n_be/__openerp__.py | 7 +- addons/l10n_be/l10n_be_reports.xml | 23 + addons/l10n_be/views/report_vatintraprint.xml | 51 ++ .../views/report_vatpartnerlisting.xml | 44 ++ .../wizard/l10n_be_partner_vat_listing.py | 19 +- .../wizard/l10n_be_partner_vat_listing.rml | 179 ----- addons/l10n_be/wizard/l10n_be_vat_intra.py | 16 +- .../wizard/l10n_be_vat_intra_print.rml | 141 ---- addons/l10n_fr/__openerp__.py | 5 +- addons/l10n_fr/l10n_fr_reports.xml | 23 + addons/l10n_fr/report/base_report.py | 2 +- addons/l10n_fr/report/bilan_report.py | 112 ++- addons/l10n_fr/report/bilan_report.rml | 548 --------------- .../report/compute_resultant_report.py | 69 +- .../report/compute_resultant_report.rml | 652 ------------------ addons/l10n_fr/views/report_l10nfrbilan.xml | 546 +++++++++++++++ .../l10n_fr/views/report_l10nfrresultat.xml | 395 +++++++++++ addons/l10n_fr/wizard/fr_report_bilan.py | 8 +- .../wizard/fr_report_compute_resultant.py | 6 +- addons/report/models/abstract_report.py | 2 +- addons/report/models/report.py | 8 +- 21 files changed, 1298 insertions(+), 1558 deletions(-) create mode 100644 addons/l10n_be/l10n_be_reports.xml create mode 100644 addons/l10n_be/views/report_vatintraprint.xml create mode 100644 addons/l10n_be/views/report_vatpartnerlisting.xml delete mode 100644 addons/l10n_be/wizard/l10n_be_partner_vat_listing.rml delete mode 100644 addons/l10n_be/wizard/l10n_be_vat_intra_print.rml create mode 100644 addons/l10n_fr/l10n_fr_reports.xml delete mode 100644 addons/l10n_fr/report/bilan_report.rml delete mode 100644 addons/l10n_fr/report/compute_resultant_report.rml create mode 100644 addons/l10n_fr/views/report_l10nfrbilan.xml create mode 100644 addons/l10n_fr/views/report_l10nfrresultat.xml diff --git a/addons/l10n_be/__openerp__.py b/addons/l10n_be/__openerp__.py index 8e607ba3120..c828190aaf4 100644 --- a/addons/l10n_be/__openerp__.py +++ b/addons/l10n_be/__openerp__.py @@ -18,7 +18,8 @@ # along with this program. If not, see . # ############################################################################## -{ + +{ 'name': 'Belgium - Accounting', 'version': '1.1', 'category': 'Localization/Account Charts', @@ -72,12 +73,16 @@ Wizards provided by this module: 'wizard/l10n_be_partner_vat_listing.xml', 'wizard/account_wizard.xml', 'l10n_be_sequence.xml', + 'l10n_be_reports.xml', 'fiscal_templates.xml', 'account_fiscal_position_tax_template.xml', 'security/ir.model.access.csv', + 'views/report_vatintraprint.xml', + 'views/report_vatpartnerlisting.xml', ], 'demo': [], 'installable': True, 'images': ['images/1_config_chart_l10n_be.jpeg','images/2_l10n_be_chart.jpeg'], } + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be/l10n_be_reports.xml b/addons/l10n_be/l10n_be_reports.xml new file mode 100644 index 00000000000..6077b67e262 --- /dev/null +++ b/addons/l10n_be/l10n_be_reports.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/addons/l10n_be/views/report_vatintraprint.xml b/addons/l10n_be/views/report_vatintraprint.xml new file mode 100644 index 00000000000..94568e3f106 --- /dev/null +++ b/addons/l10n_be/views/report_vatintraprint.xml @@ -0,0 +1,51 @@ + + + + + + diff --git a/addons/l10n_be/views/report_vatpartnerlisting.xml b/addons/l10n_be/views/report_vatpartnerlisting.xml new file mode 100644 index 00000000000..b087ffc5802 --- /dev/null +++ b/addons/l10n_be/views/report_vatpartnerlisting.xml @@ -0,0 +1,44 @@ + + + + + + diff --git a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py index 0ffa0c16a24..3bdee77956e 100644 --- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py +++ b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py @@ -205,7 +205,6 @@ class partner_vat_list(osv.osv_memory): country = ads.country_id.code data = self.read(cr, uid, ids)[0] - sender_date = time.strftime('%Y-%m-%d') comp_name = obj_cmpny.name if not email: @@ -305,19 +304,16 @@ class partner_vat_list(osv.osv_memory): def print_vatlist(self, cr, uid, ids, context=None): if context is None: context = {} - obj_vat_lclient = self.pool.get('vat.listing.clients') datas = {'ids': []} datas['model'] = 'res.company' datas['year'] = context['year'] datas['limit_amount'] = context['limit_amount'] datas['client_datas'] = self._get_datas(cr, uid, ids, context=context) if not datas['client_datas']: - raise osv.except_osv(_('Error!'),_('No record to print.')) - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'partner.vat.listing.print', - 'datas': datas, - } + raise osv.except_osv(_('Error!'), _('No record to print.')) + return self.pool['report'].get_action( + cr, uid, [], 'l10n_be.report_l10nvatpartnerlisting', data=datas, context=context + ) class partner_vat_listing_print(report_sxw.rml_parse): @@ -338,6 +334,11 @@ class partner_vat_listing_print(report_sxw.rml_parse): }) super(partner_vat_listing_print, self).set_context(objects, data, ids) -report_sxw.report_sxw('report.partner.vat.listing.print', 'res.partner', 'addons/l10n_be/wizard/l10n_be_partner_vat_listing.rml', parser=partner_vat_listing_print,header=False) + +class wrapped_vat_listing_print(osv.AbstractModel): + _name = 'report.l10n_be.report_l10nvatpartnerlisting' + _inherit = 'report.abstract_report' + _template = 'l10n_be.report_l10nvatpartnerlisting' + _wrapped_report_class = partner_vat_listing_print # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.rml b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.rml deleted file mode 100644 index 81b0635fa37..00000000000 --- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.rml +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - [[ repeatIn(client_list, 'l') ]] - -
    - - - - - - - - - - - - - - - - - - - - diff --git a/addons/l10n_be/wizard/l10n_be_vat_intra.py b/addons/l10n_be/wizard/l10n_be_vat_intra.py index 1a2d9201790..e698973fef4 100644 --- a/addons/l10n_be/wizard/l10n_be_vat_intra.py +++ b/addons/l10n_be/wizard/l10n_be_vat_intra.py @@ -29,6 +29,7 @@ from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp.report import report_sxw + class partner_vat_intra(osv.osv_memory): """ Partner Vat Intra @@ -276,11 +277,9 @@ class partner_vat_intra(osv.osv_memory): 'model': 'partner.vat.intra', 'form': xml_data } - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'partner.vat.intra.print', - 'datas': datas, - } + return self.pool['report'].get_action( + cr, uid, [], 'l10n_be.report_l10nvatintraprint', data=datas, context=context + ) class vat_intra_print(report_sxw.rml_parse): @@ -290,6 +289,11 @@ class vat_intra_print(report_sxw.rml_parse): 'time': time, }) -report_sxw.report_sxw('report.partner.vat.intra.print', 'partner.vat.intra', 'addons/l10n_be/wizard/l10n_be_vat_intra_print.rml', parser=vat_intra_print, header="internal") + +class wrapped_vat_intra_print(osv.AbstractModel): + _name = 'report.l10n_be.report_l10nvatintraprint' + _inherit = 'report.abstract_report' + _template = 'l10n_be.report_l10nvatintraprint' + _wrapped_report_class = vat_intra_print # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml b/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml deleted file mode 100644 index a25f01ff348..00000000000 --- a/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Partner VAT Intra - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - [[ repeatIn(data['form']['clientlist'],'l') ]] - -
    - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/l10n_fr/__openerp__.py b/addons/l10n_fr/__openerp__.py index 9a563eeb197..5bc3a82bbc3 100644 --- a/addons/l10n_fr/__openerp__.py +++ b/addons/l10n_fr/__openerp__.py @@ -55,6 +55,9 @@ configuration of their taxes and fiscal positions manually. """, 'depends': ['base_iban', 'account', 'account_chart', 'base_vat', 'l10n_fr_rib'], 'data': [ + 'views/report_l10nfrbilan.xml', + 'views/report_l10nfrresultat.xml', + 'l10n_fr_reports.xml', 'fr_report.xml', 'plan_comptable_general.xml', 'l10n_fr_view.xml', @@ -72,5 +75,5 @@ configuration of their taxes and fiscal positions manually. 'installable': True, 'images': ['images/config_chart_l10n_fr.jpeg','images/l10n_fr_chart.jpeg'], } -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_fr/l10n_fr_reports.xml b/addons/l10n_fr/l10n_fr_reports.xml new file mode 100644 index 00000000000..ab97cf84c30 --- /dev/null +++ b/addons/l10n_fr/l10n_fr_reports.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/addons/l10n_fr/report/base_report.py b/addons/l10n_fr/report/base_report.py index bc2cd308bf8..14fcce0d88f 100644 --- a/addons/l10n_fr/report/base_report.py +++ b/addons/l10n_fr/report/base_report.py @@ -27,9 +27,9 @@ ############################################################################## import time - from openerp.report import report_sxw + class base_report(report_sxw.rml_parse): def __init__(self, cr, uid, name, context=None): super(base_report, self).__init__(cr, uid, name, context=context) diff --git a/addons/l10n_fr/report/bilan_report.py b/addons/l10n_fr/report/bilan_report.py index 2ffbd24cc4f..51a2dd64a10 100644 --- a/addons/l10n_fr/report/bilan_report.py +++ b/addons/l10n_fr/report/bilan_report.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## +# # # Copyright (c) 2008 JAILLET Simon - CrysaLEAD - www.crysalead.fr # @@ -24,16 +24,118 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # -############################################################################## +# import base_report -from openerp.report import report_sxw +from openerp.osv import osv + class bilan(base_report.base_report): + def __init__(self, cr, uid, name, context): super(bilan, self).__init__(cr, uid, name, context) -report_sxw.report_sxw('report.l10n.fr.bilan', 'account.move.line','addons/l10n_fr/report/bilan_report.rml', parser=bilan, header=False) + def set_context(self, objects, data, ids): + super(bilan, self).set_context(objects, data, ids) + + self._load('bilan', self.localcontext['data']['form']) + self._set_variable( + 'at1a', + self.localcontext['bavar1'] + self.localcontext['bavar2'] + self.localcontext['bavar3'] + + self.localcontext['bavar4'] + self.localcontext[ + 'bavar5'] + self.localcontext['bavar6'] + + self.localcontext['bavar7'] + self.localcontext[ + 'bavar8'] + self.localcontext['bavar9'] + + self.localcontext['bavar10'] + self.localcontext[ + 'bavar11'] + self.localcontext['bavar12'] + + self.localcontext['bavar13'] + self.localcontext[ + 'bavar14'] + self.localcontext['bavar15'] + + self.localcontext['bavar16'] + self.localcontext[ + 'bavar17'] + self.localcontext['bavar18'] + + self.localcontext['bavar19'] + self.localcontext['bavar20'] + ) + self._set_variable( + 'at1b', + self.localcontext['bavar2b'] + self.localcontext[ + 'bavar3b'] + self.localcontext['bavar4b'] + + self.localcontext['bavar5b'] + self.localcontext[ + 'bavar6b'] + self.localcontext['bavar7b'] + + self.localcontext['bavar9b'] + self.localcontext[ + 'bavar10b'] + self.localcontext['bavar11b'] + + self.localcontext['bavar12b'] + self.localcontext[ + 'bavar13b'] + self.localcontext['bavar15b'] + + self.localcontext['bavar16b'] + self.localcontext[ + 'bavar17b'] + self.localcontext['bavar18b'] + + self.localcontext['bavar19b'] + self.localcontext['bavar20b'] + ) + self._set_variable( + 'at1', + self.localcontext['at1a'] + self.localcontext['at1b'] + ) + self._set_variable( + 'at2a', + self.localcontext['bavar21'] + self.localcontext[ + 'bavar22'] + self.localcontext['bavar23'] + + self.localcontext['bavar24'] + self.localcontext[ + 'bavar25'] + self.localcontext['bavar26'] + + self.localcontext['bavar27'] + self.localcontext[ + 'bavar28'] + self.localcontext['bavar29'] + + self.localcontext['bavar30'] + self.localcontext[ + 'bavar31'] + self.localcontext['bavar32'] + + self.localcontext['bavar33'] + ) + self._set_variable( + 'at2b', + self.localcontext['bavar21b'] + self.localcontext[ + 'bavar22b'] + self.localcontext['bavar23b'] + + self.localcontext['bavar24b'] + self.localcontext[ + 'bavar26b'] + self.localcontext['bavar27b'] + + self.localcontext['bavar29b'] + self.localcontext['bavar30b'] + ) + self._set_variable( + 'at2', + self.localcontext['at2a'] + self.localcontext['at2b'] + ) + self._set_variable( + 'actif', + self.localcontext['at1'] + self.localcontext['at2'] + self.localcontext['bavar34'] + + self.localcontext['bavar35'] + self.localcontext['bavar36'] + ) + self._set_variable( + 'pt1', + self.localcontext['bpvar1'] + self.localcontext['bpvar2'] + self.localcontext['bpvar3'] + + self.localcontext['bpvar4'] + self.localcontext[ + 'bpvar5'] + self.localcontext['bpvar6'] + + self.localcontext['bpvar7'] + self.localcontext[ + 'bpvar8'] + self.localcontext['bpvar9'] + + self.localcontext['bpvar10'] + self.localcontext[ + 'bpvar11'] + self.localcontext['bpvar12'] + ) + self._set_variable( + 'pt2', + self.localcontext['bpvar13'] + self.localcontext['bpvar14'] + ) + self._set_variable( + 'pt3', + self.localcontext['bpvar15'] + self.localcontext[ + 'bpvar16'] + self.localcontext['bpvar17'] + + self.localcontext['bpvar18'] + self.localcontext[ + 'bpvar19'] + self.localcontext['bpvar20'] + + self.localcontext['bpvar21'] + self.localcontext[ + 'bpvar22'] + self.localcontext['bpvar23'] + + self.localcontext['bpvar24'] + self.localcontext['bpvar25'] + ) + self._set_variable( + 'passif', + self.localcontext['pt1'] + self.localcontext['pt2'] + self.localcontext['pt3'] + + self.localcontext['bpvar26'] + ) + + +class wrapped_report_bilan(osv.AbstractModel): + _name = 'report.l10n_fr.report_l10nfrbilan' + _inherit = 'report.abstract_report' + _template = 'l10n_fr.report_l10nfrbilan' + _wrapped_report_class = bilan # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/l10n_fr/report/bilan_report.rml b/addons/l10n_fr/report/bilan_report.rml deleted file mode 100644 index f448d63a81a..00000000000 --- a/addons/l10n_fr/report/bilan_report.rml +++ /dev/null @@ -1,548 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ _load('bilan',data['form'])]] - [[ _set_variable('at1a',bavar1+bavar2+bavar3+bavar4+bavar5+bavar6+bavar7+bavar8+bavar9+bavar10+bavar11+bavar12+bavar13+bavar14+bavar15+bavar16+bavar17+bavar18+bavar19+bavar20)]] - [[ _set_variable('at1b', bavar2b+bavar3b+bavar4b+bavar5b+bavar6b+bavar7b+bavar9b+bavar10b+bavar11b+bavar12b+bavar13b+bavar15b+ bavar16b+bavar17b+bavar18b+bavar19b+bavar20b)]] - [[ _set_variable('at1', at1a+at1b)]] - [[ _set_variable('at2a', bavar21+bavar22+bavar23+bavar24+bavar25+bavar26+bavar27+bavar28+bavar29+bavar30+bavar31+bavar32+bavar33)]] - [[ _set_variable('at2b', bavar21b+bavar22b+bavar23b+bavar24b+bavar26b+bavar27b+bavar29b+bavar30b)]] - [[ _set_variable('at2', at2a+at2b)]] - [[ _set_variable('actif', at1+at2+bavar34+bavar35+bavar36)]] - [[ _set_variable('pt1', bpvar1+bpvar2+bpvar3+bpvar4+bpvar5+bpvar6+bpvar7+bpvar8+bpvar9+bpvar10+bpvar11+bpvar12)]] - [[ _set_variable('pt2', bpvar13+bpvar14)]] - [[ _set_variable('pt3', bpvar15+bpvar16+bpvar17+bpvar18+bpvar19+bpvar20+bpvar21+bpvar22+bpvar23+bpvar24+bpvar25)]] - [[ _set_variable('passif', pt1+pt2+pt3+bpvar26)]] - - - - - - - - - - - - - ACTIF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PASSIF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ abs(bpcheck)<0.0001 and removeParentNode('para') ]] Attention, pour que votre bilan soit correct, vous devez solder les comptes 120 ou 129 (Résultat de l'exercice précédant) dans un compte de report à nouveau (compte 110 ou 119) ou dans le compte 108. Renseignez vous sur votre structure juridique et son fonctionnement comptable. - - \ No newline at end of file diff --git a/addons/l10n_fr/report/compute_resultant_report.py b/addons/l10n_fr/report/compute_resultant_report.py index 5eb62d7e82d..e371bcc12e6 100644 --- a/addons/l10n_fr/report/compute_resultant_report.py +++ b/addons/l10n_fr/report/compute_resultant_report.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## +# # # Copyright (c) 2008 JAILLET Simon - CrysaLEAD - www.crysalead.fr # @@ -24,16 +24,75 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # -############################################################################## +# import base_report -from openerp.report import report_sxw +from openerp.osv import osv + class cdr(base_report.base_report): def __init__(self, cr, uid, name, context): super(cdr, self).__init__(cr, uid, name, context) -report_sxw.report_sxw('report.l10n.fr.compute_resultant', 'account.move.line','addons/l10n_fr/report/compute_resultant_report.rml', parser=cdr, header=False) + def set_context(self, objects, data, ids): + super(cdr, self).set_context(objects, data, ids) + + self._load('cdr', self.localcontext['data']['form']) + self._set_variable( + 'ct1', + self.localcontext['cdrc1']+self.localcontext['cdrc2']+self.localcontext['cdrc3']+ + self.localcontext['cdrc4']+self.localcontext['cdrc5']+self.localcontext['cdrc6']+ + self.localcontext['cdrc7']+self.localcontext['cdrc8']+self.localcontext['cdrc9']+ + self.localcontext['cdrc10']+self.localcontext['cdrc11']+self.localcontext['cdrc12']+ + self.localcontext['cdrc13']+self.localcontext['cdrc14']+self.localcontext['cdrc15'] + ) + self._set_variable( + 'ct3', + self.localcontext['cdrc17']+self.localcontext['cdrc18']+self.localcontext['cdrc19']+ + self.localcontext['cdrc20'] + ) + self._set_variable( + 'ct4', + self.localcontext['cdrc21']+self.localcontext['cdrc22']+self.localcontext['cdrc23'] + ) + self._set_variable( + 'charges', + self.localcontext['ct1']+self.localcontext['cdrc16']+self.localcontext['ct3']+ + self.localcontext['ct4']+self.localcontext['cdrc24']+self.localcontext['cdrc25'] + ) + self._set_variable( + 'pta', + self.localcontext['cdrp1']+self.localcontext['cdrp2'] + ) + self._set_variable( + 'ptb', + self.localcontext['cdrp3']+self.localcontext['cdrp4']+self.localcontext['cdrp5']+ + self.localcontext['cdrp6']+self.localcontext['cdrp7'] + ) + self._set_variable( + 'pt1', + self.localcontext['pta']+self.localcontext['ptb'] + ) + self._set_variable( + 'pt3', + self.localcontext['cdrp9']+self.localcontext['cdrp10']+self.localcontext['cdrp11']+ + self.localcontext['cdrp12']+self.localcontext['cdrp13']+self.localcontext['cdrp14'] + ) + self._set_variable( + 'pt4', + self.localcontext['cdrp15']+self.localcontext['cdrp16']+self.localcontext['cdrp17'] + ) + self._set_variable( + 'produits', + self.localcontext['pt1']+self.localcontext['cdrp8']+self.localcontext['pt3']+ + self.localcontext['pt4'] + ) + + +class wrapped_report_resultat(osv.AbstractModel): + _name = 'report.l10n_fr.report_l10nfrresultat' + _inherit = 'report.abstract_report' + _template = 'l10n_fr.report_l10nfrresultat' + _wrapped_report_class = cdr # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/l10n_fr/report/compute_resultant_report.rml b/addons/l10n_fr/report/compute_resultant_report.rml deleted file mode 100644 index b3897c8a839..00000000000 --- a/addons/l10n_fr/report/compute_resultant_report.rml +++ /dev/null @@ -1,652 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ _load('cdr',data['form'])]] - [[ _set_variable('ct1', cdrc1+cdrc2+cdrc3+cdrc4+cdrc5+cdrc6+cdrc7+cdrc8+cdrc9+cdrc10+cdrc11+cdrc12+cdrc13+cdrc14+cdrc15)]] - [[ _set_variable('ct3', cdrc17+cdrc18+cdrc19+cdrc20)]] - [[ _set_variable('ct4', cdrc21+cdrc22+cdrc23)]] - [[ _set_variable('charges', ct1+cdrc16+ct3+ct4+cdrc24+cdrc25)]] - [[ _set_variable('pta', cdrp1+cdrp2)]] - [[ _set_variable('ptb', cdrp3+cdrp4+cdrp5+cdrp6+cdrp7)]] - [[ _set_variable('pt1', pta+ptb)]] - [[ _set_variable('pt3', cdrp9+cdrp10+cdrp11+cdrp12+cdrp13+cdrp14)]] - [[ _set_variable('pt4', cdrp15+cdrp16+cdrp17)]] - [[ _set_variable('produits', pt1+cdrp8+pt3+pt4)]] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/l10n_fr/views/report_l10nfrbilan.xml b/addons/l10n_fr/views/report_l10nfrbilan.xml new file mode 100644 index 00000000000..5b7335e0db0 --- /dev/null +++ b/addons/l10n_fr/views/report_l10nfrbilan.xml @@ -0,0 +1,546 @@ + + + + + + diff --git a/addons/l10n_fr/views/report_l10nfrresultat.xml b/addons/l10n_fr/views/report_l10nfrresultat.xml new file mode 100644 index 00000000000..9938e3fad6f --- /dev/null +++ b/addons/l10n_fr/views/report_l10nfrresultat.xml @@ -0,0 +1,395 @@ + + + + + + diff --git a/addons/l10n_fr/wizard/fr_report_bilan.py b/addons/l10n_fr/wizard/fr_report_bilan.py index e7ae542fa3f..3fde3c19d80 100644 --- a/addons/l10n_fr/wizard/fr_report_bilan.py +++ b/addons/l10n_fr/wizard/fr_report_bilan.py @@ -28,6 +28,7 @@ from openerp.osv import fields, osv + class account_bilan_report(osv.osv_memory): _name = 'account.bilan.report' _description = 'Account Bilan Report' @@ -41,7 +42,7 @@ class account_bilan_report(osv.osv_memory): } _defaults = { - 'fiscalyear_id':_get_default_fiscalyear + 'fiscalyear_id': _get_default_fiscalyear } def print_bilan_report(self, cr, uid, ids, context=None): @@ -50,7 +51,8 @@ class account_bilan_report(osv.osv_memory): data['form'] = {} data['ids'] = active_ids data['form']['fiscalyear_id'] = self.browse(cr, uid, ids)[0].fiscalyear_id.id - return {'type': 'ir.actions.report.xml', 'report_name': 'l10n.fr.bilan', 'datas': data} - + return self.pool['report'].get_action( + cr, uid, ids, 'l10n_fr.report_l10nfrbilan', data=data, context=context + ) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_fr/wizard/fr_report_compute_resultant.py b/addons/l10n_fr/wizard/fr_report_compute_resultant.py index c83f7494d4a..3e13da8f69f 100644 --- a/addons/l10n_fr/wizard/fr_report_compute_resultant.py +++ b/addons/l10n_fr/wizard/fr_report_compute_resultant.py @@ -28,6 +28,7 @@ from openerp.osv import fields, osv + class account_cdr_report(osv.osv_memory): _name = 'account.cdr.report' _description = 'Account CDR Report' @@ -50,7 +51,8 @@ class account_cdr_report(osv.osv_memory): data['form'] = {} data['ids'] = active_ids data['form']['fiscalyear_id'] = self.browse(cr, uid, ids)[0].fiscalyear_id.id - return { 'type': 'ir.actions.report.xml', 'report_name': 'l10n.fr.compute_resultant', 'datas': data} - + return self.pool['report'].get_action( + cr, uid, ids, 'l10n_fr.report_l10nfrresultat', data=data, context=context + ) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/report/models/abstract_report.py b/addons/report/models/abstract_report.py index 2da32b6c0f6..4f38b39b5e2 100644 --- a/addons/report/models/abstract_report.py +++ b/addons/report/models/abstract_report.py @@ -58,7 +58,7 @@ class AbstractReport(osv.AbstractModel): docargs = wrapped_report.localcontext docargs['docs'] = docargs.get('objects') - # Used in template translating (see render_doc method from report model) + # Used in template translation (see translate_doc method from report model) docargs['doc_ids'] = context['active_ids'] docargs['doc_model'] = model diff --git a/addons/report/models/report.py b/addons/report/models/report.py index 8dd8a4dce6f..212555dbc8a 100644 --- a/addons/report/models/report.py +++ b/addons/report/models/report.py @@ -262,15 +262,15 @@ class Report(osv.Model): :param report_name: Name of the template to generate an action for """ - if context is None: - context = {} - report_obj = self.pool['ir.actions.report.xml'] idreport = report_obj.search(cr, uid, [('report_name', '=', report_name)], context=context) try: report = report_obj.browse(cr, uid, idreport[0], context=context) except IndexError: - raise osv.except_osv(_('Bad Report'), _('This report is not loaded into the database.')) + raise osv.except_osv( + _('Bad Report Reference'), + _('This report is not loaded into the database: %s.' % report_name) + ) action = { 'context': context, From 5fdb6292b1d492a793b9ce75852cef30a49f8591 Mon Sep 17 00:00:00 2001 From: Sunil Sharma Date: Tue, 22 Apr 2014 18:07:57 +0530 Subject: [PATCH 077/143] [imp]:add qweb report and remove rml report bzr revid: ssh@tinyerp.com-20140422123757-6wskvlwyltlyjvp0 --- addons/l10n_in_hr_payroll/__openerp__.py | 1 + .../l10n_in_hr_payroll_report.xml | 5 +- .../report/report_hr_yearly_salary_detail.py | 11 +- .../report/report_hr_yearly_salary_detail.rml | 588 ------------------ .../view/report_hr_yearly_salary_detail.xml | 103 +++ .../wizard/hr_yearly_salary_detail.py | 9 +- 6 files changed, 117 insertions(+), 600 deletions(-) delete mode 100644 addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml create mode 100644 addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml diff --git a/addons/l10n_in_hr_payroll/__openerp__.py b/addons/l10n_in_hr_payroll/__openerp__.py index 2522d543548..231491dd15a 100644 --- a/addons/l10n_in_hr_payroll/__openerp__.py +++ b/addons/l10n_in_hr_payroll/__openerp__.py @@ -53,6 +53,7 @@ Indian Payroll Salary Rules. 'wizard/hr_yearly_salary_detail_view.xml', 'report/payment_advice_report_view.xml', 'report/payslip_report_view.xml', + 'view/report_hr_yearly_salary_detail.xml', ], 'test': [ diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml index 7f27291051f..90760d4b12f 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml @@ -30,8 +30,9 @@ auto="False" id="yearly_salary" model="yearly.salary.detail" - name="salary.detail.byyear" - rml="l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml" + name="l10n_in_hr_payroll.report_hr_yearly_salary" + file="l10n_in_hr_payroll.report_hr_yearly_salary" + report_type="qweb-pdf" string="Yearly Salary by Employee" /> diff --git a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py index 220bcdb5552..e531a335e7c 100644 --- a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py +++ b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py @@ -22,6 +22,7 @@ import time import datetime from openerp.report import report_sxw +from openerp.osv import osv class employees_yearly_salary_report(report_sxw.rml_parse): @@ -64,8 +65,8 @@ class employees_yearly_salary_report(report_sxw.rml_parse): current_year = last_year current_month = current_month + 1 for c in range(0, (12-no_months)): - mnth_name.append('None') - self.mnths.append('None') + mnth_name.append('') + self.mnths.append('') return [mnth_name] def get_employee(self, form): @@ -159,6 +160,10 @@ class employees_yearly_salary_report(report_sxw.rml_parse): def get_total(self): return self.total -report_sxw.report_sxw('report.salary.detail.byyear', 'yearly.salary.detail', 'hr_payroll/report/report_hr_yearly_salary_detail.rml', parser=employees_yearly_salary_report, header='internal landscape') +class wrapped_report_payslip(osv.AbstractModel): + _name = 'report.l10n_in_hr_payroll.report_hr_yearly_salary' + _inherit = 'report.abstract_report' + _template = 'l10n_in_hr_payroll.report_hr_yearly_salary' + _wrapped_report_class = employees_yearly_salary_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml deleted file mode 100644 index 502eaa7b0ff..00000000000 --- a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml +++ /dev/null @@ -1,588 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(get_employee(data['form']), 'o') ]] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - [[ repeatIn(get_periods(data['form']),'m') ]] - [[ get_employee_detail((data['form']),o) ]] - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - [[ repeatIn(get_allow(),'e1') ]] - -
    - - - - - - - - - - - - - - - - - - - - - - -
    - [[ repeatIn(get_deduct(),'e2') ]] - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml new file mode 100644 index 00000000000..5430518e10d --- /dev/null +++ b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml @@ -0,0 +1,103 @@ + + + + + + diff --git a/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py index de3680f2dd3..ec36a80dd46 100644 --- a/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py +++ b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail.py @@ -54,12 +54,7 @@ class yearly_salary_detail(osv.osv_memory): res = self.read(cr, uid, ids, context=context) res = res and res[0] or {} - datas.update({'form': res}) - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'salary.detail.byyear', - 'datas': datas, - } - + datas.update({'form':res}) + return self.pool['report'].get_action(cr, uid, ids, 'l10n_in_hr_payroll.report_hr_yearly_salary', data=datas, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 5184a7aceb072177e6a31131f9b6ce366c2d8086 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Tue, 22 Apr 2014 15:13:33 +0200 Subject: [PATCH 078/143] [FIX] l10n_fr tests: render the reports with their new xmlid bzr revid: sle@openerp.com-20140422131333-dbgt9lp8oa6us1zs --- addons/l10n_fr/test/l10n_fr_report.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/l10n_fr/test/l10n_fr_report.yml b/addons/l10n_fr/test/l10n_fr_report.yml index 25de74dd313..7038887ef52 100644 --- a/addons/l10n_fr/test/l10n_fr_report.yml +++ b/addons/l10n_fr/test/l10n_fr_report.yml @@ -5,7 +5,7 @@ import os import openerp.report from openerp import tools - data, format = openerp.report.render_report(cr, uid, [], 'l10n.fr.bilan', {'model':'account.move.line', 'form':{'fiscalyear_id': ref('account.data_fiscalyear')}}, {}) + data, format = openerp.report.render_report(cr, uid, [], 'l10n_fr.report_l10nfrbilan', {'model':'account.move.line', 'form':{'fiscalyear_id': ref('account.data_fiscalyear')}}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'l10n_fr-bilan_report.'+format), 'wb+').write(data) @@ -16,6 +16,6 @@ import os import openerp.report from openerp import tools - data, format = openerp.report.render_report(cr, uid, [], 'l10n.fr.compute_resultant', {'model':'account.move.line', 'form':{'fiscalyear_id': ref('account.data_fiscalyear')}}, {}) + data, format = openerp.report.render_report(cr, uid, [], 'l10n_fr.report_l10nfrresultat', {'model':'account.move.line', 'form':{'fiscalyear_id': ref('account.data_fiscalyear')}}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'l10n_fr-compute_resultant_report.'+format), 'wb+').write(data) From f44148ba221803ce29fbe368b2708b1b3a935674 Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Tue, 22 Apr 2014 19:23:08 +0530 Subject: [PATCH 079/143] [IMP]: Optimize the code bzr revid: rsi@tinyerp.com-20140422135308-ixhpb0d4lbbecl2z --- .../views/report_hrsalarybymonth.xml | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml index 94d2faa18da..a2e3de1ef32 100644 --- a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml +++ b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml @@ -10,61 +10,61 @@
    From To of Category
    @@ -70,12 +70,12 @@
    - + -
    - Net Total: + Net Total - + +
    From f44a31dd27cedc9d3331319298463396fde094d6 Mon Sep 17 00:00:00 2001 From: Randhir Mayatra rma-openerp Date: Mon, 14 Apr 2014 18:41:31 +0530 Subject: [PATCH 061/143] [IMP] remove extra action from membership bzr revid: rma@tinyerp.com-20140414131131-y0qjfqkb2dlrh2o5 --- addons/membership/report/report_membership_view.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml index 100ec32043f..ab1b1013e50 100644 --- a/addons/membership/report/report_membership_view.xml +++ b/addons/membership/report/report_membership_view.xml @@ -54,13 +54,6 @@ {"search_default_year":1,"search_default_member":1, 'search_default_Revenue':1, 'search_default_this_month':1, 'search_default_salesman':1,'group_by_no_leaf':1} - - - graph - - - - Date: Mon, 14 Apr 2014 16:44:27 +0200 Subject: [PATCH 062/143] [IMP] point of sale: added a session summary report bzr revid: sle@openerp.com-20140414144427-ry3yxybx385a4pop --- addons/point_of_sale/__openerp__.py | 1 + addons/point_of_sale/point_of_sale_report.xml | 9 ++ .../views/report_sessionsummary.xml | 120 ++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 addons/point_of_sale/views/report_sessionsummary.xml diff --git a/addons/point_of_sale/__openerp__.py b/addons/point_of_sale/__openerp__.py index 9f3a023f062..ad82c7e05a6 100644 --- a/addons/point_of_sale/__openerp__.py +++ b/addons/point_of_sale/__openerp__.py @@ -77,6 +77,7 @@ Main Features 'views/report_saleslines.xml', 'views/report_detailsofsales.xml', 'views/report_payment.xml', + 'views/report_sessionsummary.xml', ], 'demo': [ 'point_of_sale_demo.xml', diff --git a/addons/point_of_sale/point_of_sale_report.xml b/addons/point_of_sale/point_of_sale_report.xml index a4c1f4648a3..6ae4dbe9c30 100644 --- a/addons/point_of_sale/point_of_sale_report.xml +++ b/addons/point_of_sale/point_of_sale_report.xml @@ -58,5 +58,14 @@ name="point_of_sale.report_payment" file="point_of_sale.report_payment" /> + + diff --git a/addons/point_of_sale/views/report_sessionsummary.xml b/addons/point_of_sale/views/report_sessionsummary.xml new file mode 100644 index 00000000000..705b8bc93d0 --- /dev/null +++ b/addons/point_of_sale/views/report_sessionsummary.xml @@ -0,0 +1,120 @@ + + + + + + From 7be29e97c44035b594c490a94215b0ac39bdca40 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Mon, 14 Apr 2014 17:52:12 +0200 Subject: [PATCH 063/143] [IMP] Product pricelist converted to QWeb bzr revid: sle@openerp.com-20140414155212-4l3gvys24prccln6 --- addons/product/__openerp__.py | 4 +- addons/product/product_report.xml | 16 +- addons/product/report/product_pricelist.py | 17 +- addons/product/report/product_pricelist.rml | 266 -------------------- addons/product/views/report_pricelist.xml | 68 +++++ addons/product/wizard/product_price.py | 9 +- 6 files changed, 89 insertions(+), 291 deletions(-) delete mode 100644 addons/product/report/product_pricelist.rml create mode 100644 addons/product/views/report_pricelist.xml diff --git a/addons/product/__openerp__.py b/addons/product/__openerp__.py index c628fca6aa8..5b5e546fa61 100644 --- a/addons/product/__openerp__.py +++ b/addons/product/__openerp__.py @@ -59,7 +59,8 @@ Print product labels with barcode. 'product_view.xml', 'pricelist_view.xml', 'partner_view.xml', - 'process/product_process.xml' + 'process/product_process.xml', + 'views/report_pricelist.xml', ], 'test': [ 'product_pricelist_demo.yml', @@ -69,4 +70,5 @@ Print product labels with barcode. 'auto_install': False, 'images': ['images/product_uom.jpeg','images/product_pricelists.jpeg','images/products_categories.jpeg', 'images/products_form.jpeg'], } + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product/product_report.xml b/addons/product/product_report.xml index 791063696c4..5d2c3b99f62 100644 --- a/addons/product/product_report.xml +++ b/addons/product/product_report.xml @@ -2,14 +2,14 @@ - diff --git a/addons/product/report/product_pricelist.py b/addons/product/report/product_pricelist.py index 44433f39055..cd7054aa1a3 100644 --- a/addons/product/report/product_pricelist.py +++ b/addons/product/report/product_pricelist.py @@ -20,10 +20,9 @@ ############################################################################## import time - from openerp.osv import osv from openerp.report import report_sxw -from openerp.tools.translate import _ + class product_pricelist(report_sxw.rml_parse): def __init__(self, cr, uid, name, context): @@ -34,7 +33,6 @@ class product_pricelist(report_sxw.rml_parse): 'time': time, 'get_pricelist': self._get_pricelist, 'get_currency': self._get_currency, - 'get_currency_symbol': self._get_currency_symbol, # TODO 7.0 - remove this - unused 'get_categories': self._get_categories, 'get_price': self._get_price, 'get_titles': self._get_titles, @@ -69,12 +67,6 @@ class product_pricelist(report_sxw.rml_parse): pricelist = self.pool.get('product.pricelist').read(self.cr, self.uid, [pricelist_id], ['currency_id'], context=self.localcontext)[0] return pricelist['currency_id'][1] - # TODO 7.0 - remove this method, its unused - def _get_currency_symbol(self, pricelist_id): - pricelist = self.pool.get('product.pricelist').read(self.cr, self.uid, [pricelist_id], ['currency_id'], context=self.localcontext)[0] - symbol = self.pool.get('res.currency').read(self.cr, self.uid, [pricelist['currency_id'][0]], ['symbol'], context=self.localcontext)[0] - return symbol['symbol'] or '' - def _get_categories(self, products, form): cat_ids=[] res=[] @@ -120,4 +112,11 @@ class product_pricelist(report_sxw.rml_parse): price = self.formatLang(res[0]['list_price'], digits=sale_price_digits, currency_obj=pricelist.currency_id) return price + +class report_product_pricelist(osv.AbstractModel): + _name = 'report.product.report_pricelist' + _inherit = 'report.abstract_report' + _template = 'product.report_pricelist' + _wrapped_report_class = product_pricelist + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/product/report/product_pricelist.rml b/addons/product/report/product_pricelist.rml deleted file mode 100644 index 62f1dc4ef4b..00000000000 --- a/addons/product/report/product_pricelist.rml +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Description - [[repeatIn(get_titles(data['form']), 'k')]] - - [[ (k.has_key('qty1') and k['qty1']) or '' ]] - - [[ (k.has_key('qty2') and k['qty2']) or '' ]] - - [[ (k.has_key('qty3') and k['qty3']) or '' ]] - - [[ (k.has_key('qty4') and k['qty4']) or '' ]] - - [[ (k.has_key('qty5') and k['qty5']) or '' ]] -
    - Price List Name - - Currency - - Printing Date -
    - [[ get_pricelist(data['form']['price_list']) ]] - - [[ get_currency ( data['form']['price_list']) ]] - - [[ formatLang(time.strftime('%Y-%m-%d'), date=True) ]] -
    - Description - [[repeatIn(get_titles(data['form']), 'k')]] - - [[ (k.has_key('qty1') and k['qty1']) or '' ]] - - [[ (k.has_key('qty2') and k['qty2']) or '' ]] - - [[ (k.has_key('qty3') and k['qty3']) or '' ]] - - [[ (k.has_key('qty4') and k['qty4']) or '' ]] - - [[ (k.has_key('qty5') and k['qty5']) or '' ]] -
    - [[ c['name'] ]] - - - - -
    - [[ p['code'] and '[' + p['code'] + '] ' or '' ]] [[ p['name'] ]] - - [[ (p.has_key('qty1') and p['qty1']) or '' ]] - - [[ (p.has_key('qty2') and p['qty2']) or '' ]] - - [[ (p.has_key('qty3') and p['qty3']) or '' ]] - - [[ (p.has_key('qty4') and p['qty4']) or '' ]] - - [[ (p.has_key('qty5') and p['qty5']) or '' ]] -
    - Name - - [[ m[0] != 'None' and m[0] or '' ]] - - [[ m[1] != 'None' and m[1] or '' ]] - - [[ m[2] != 'None' and m[2] or '' ]] - - [[ m[3] != 'None' and m[3] or '' ]] - - [[ m[4] != 'None' and m[4] or '' ]] - - [[ m[5] != 'None' and m[5] or '' ]] - - [[ m[6] != 'None' and m[6] or '' ]] - - [[ m[7] != 'None' and m[7] or '' ]] - - [[ m[8] != 'None' and m[8] or '' ]] - - [[ m[9] != 'None' and m[9] or '' ]] - - [[ m[10] != 'None' and m[10] or '' ]] - - [[ m[11] != 'None' and m[11] or '' ]] - - Total -
    - [[ e[0] ]] - - - [[ (e[1]!='' and formatLang(e[1])) or removeParentNode('font') ]] - - - - [[ (e[2]!='' and formatLang(e[2])) or removeParentNode('font') ]] - - - - [[ (e[3]!='' and formatLang(e[3])) or removeParentNode('font') ]] - - - - [[ (e[4]!='' and formatLang(e[4])) or removeParentNode('font') ]] - - - - [[ (e[5]!='' and formatLang(e[5])) or removeParentNode('font') ]] - - - - [[ (e[6]!='' and formatLang(e[6])) or removeParentNode('font') ]] - - - - [[ (e[7]!='' and formatLang(e[7])) or removeParentNode('font') ]] - - - - [[ (e[8]!='' and formatLang(e[8])) or removeParentNode('font') ]] - - - - [[ (e[9]!='' and formatLang(e[9])) or removeParentNode('font') ]] - - - - [[ (e[10]!='' and formatLang(e[10])) or removeParentNode('font') ]] - - - - [[ (e[11]!='' and formatLang(e[11])) or removeParentNode('font') ]] - - - - [[ (e[12]!='' and formatLang(e[12])) or removeParentNode('font') ]] - - - [[ formatLang(e[13],currency_obj= company.currency_id)]] -
    - Total - - [[ formatLang(t[1],currency_obj= company.currency_id) or removeParentNode('para') ]] - - [[ formatLang(t[2],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[3],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[4],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[5],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[6],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[7],currency_obj= company.currency_id) or removeParentNode('para')]] ] - - [[ formatLang(t[8],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[9],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[10],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[11],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(t[12],currency_obj= company.currency_id) or removeParentNode('para')]] - - [[ formatLang(get_total(), currency_obj = company.currency_id)]] -
    - [[ company.name ]] - - [[ year ]] - - Annual Listing of VAT-Subjected Customers -
    - Nr - - Partner - - VAT Number - - Base Amount - - VAT Amount -
    - - - - - - [[ sum_turnover ]] - - - - [[ sum_tax ]] - -
    - [[ l['seq'] ]] - - [[ l['partner_name'] ]] - - [[ l['vat'] ]] - - [[ l['turnover'] ]] - - [[ l['vat_amount'] ]] -
    - Company Name - - VAT Number - - Partners without VAT -
    - [[ data['form']['company_name'] ]] - - [[ data['form']['company_vat'] ]] - - [[ data['form']['partner_wo_vat'] or '-']] -
    - Partner Name - - Partner VAT - - Code (Tax Code) - - Amount -
    - [[ l['partner_name'] ]] - - [[ l['vat'] ]] - - [[ l['code'] ]]([[ l['intra_code'] ]]) - - [[ formatLang(l['amount'], currency_obj=company.currency_id) ]] -
    - - - - - - - - - Total: - - [[ formatLang(data['form']['amountsum'], currency_obj=company.currency_id) ]] -
    [[ company.name ]]au [[ time.strftime('%d-%m-%Y',time.strptime(date_stop,'%Y-%m-%d'))]]BilanImprimé le : [[ time.strftime('%d-%m-%Y') ]]
    Tenue de Compte : [[ company.currency_id.name ]]
    BrutAmortissements et dépréciationsNet
    Capital souscrit - non appelé[[bavar1]] [[bavar1]]
    ACTIF IMMOBILISÉ
    IMMOBILISATIONS INCORPORELLES
    Frais d'établissement[[bavar2]][[-bavar2b]][[bavar2+bavar2b]]
    Frais de recherche et de développement[[bavar3]][[-bavar3b]][[bavar3+bavar3b]]
    Concessions, brevets, licences,..., droits et valeurs similaires[[bavar4]][[-bavar4b]][[bavar4+bavar4b]]
    Fonds commercial[[bavar5]][[-bavar5b]][[bavar5+bavar5b]]
    Autres[[bavar6]][[-bavar6b]][[bavar6+bavar6b]]
    Immobilisations incorporelles en cours[[bavar7]][[-bavar7b]][[bavar7+bavar7b]]
    Avances et acomptes[[bavar8]] [[bavar8]]
    IMMOBILISATIONS CORPORELLES
    Terrains[[bavar9]][[-bavar9b]][[bavar9+bavar9b]]
    Constructions[[bavar10]][[-bavar10b]][[bavar10+bavar10b]]
    Installations techniques,matériel et outillage[[bavar11]][[-bavar11b]][[bavar11+bavar11b]]
    Autres [[bavar12]][[-bavar12b]][[bavar12+bavar12b]]
    Immobilisations corporelles en cours[[bavar13]][[-bavar13b]][[bavar13+bavar13b]]
    Avances et acomptes[[bavar14]] [[bavar14]]
    IMMOBILISATIONS FINANCIÉRES
    Participations[[bavar15]][[-bavar15b]][[bavar15+bavar15b]]
    Créances rattachées à des participations[[bavar16]][[-bavar16b]][[bavar16+bavar16b]]
    Titres immobilisés de l'activité de portefeuille[[bavar17]][[-bavar17b]][[bavar17+bavar17b]]
    Autres titres immobilisés[[bavar18]][[-bavar18b]][[bavar18+bavar18b]]
    Prêts[[bavar19]][[-bavar19b]][[bavar19+bavar19b]]
    Autres[[bavar20]][[-bavar20b]][[bavar20+bavar20b]]
    TOTAL I[[at1a]][[-at1b]][[at1]]
    ACTIF CIRCULANT
    STOCK EN COURS
    Matières premières et autres approvisionnements[[bavar21]][[-bavar21b]][[bavar21+bavar21b]]
    En-cours de production [biens et services][[bavar22]][[-bavar22b]][[bavar22+bavar22b]]
    Produits intermédiaires et finis[[bavar23]][[-bavar23b]][[bavar23+bavar23b]]
    Marchandises[[bavar24]][[-bavar24b]][[bavar24+bavar24b]]
    Avances et acomptes versés sur commandes[[bavar25]] [[bavar25]]
    CRÉANCES
    Créances clients et comptes rattachés[[bavar26]][[-bavar26b]][[bavar26+bavar26b]]
    Autres[[bavar27]][[-bavar27b]][[bavar27+bavar27b]]
    Capital souscrit - appelé , non versé[[bavar28]] [[bavar28]]
    VALEURS MOBILIÈRES DE PLACEMENT
    Actions propres[[bavar29]][[-bavar29b]][[bavar29+bavar29b]]
    Autres titres[[bavar30]][[-bavar30b]][[bavar30+bavar30b]]
    Instruments de trésorerie[[bavar31]] [[bavar31]]
    Disponibilités[[bavar32]] [[bavar32]]
    Charges constatés d'avance[[bavar33]] [[bavar33]]
    TOTAL II[[at2a]][[-at2b]][[at2]]
    Charges à répartir sur plusieurs exercices ( III )[[bavar34]] [[bavar34]]
    Primes de remboursement des emprunts ( IV )[[bavar35]] [[bavar35]]
    Écarts de conversion actif ( V )[[bavar36]] [[bavar36]]
    TOTAL ACTIF ( I + II + III + IV + V )[[at1a+at2a]][[-at1b-at2b]][[actif]]
    CAPITAUX PROPRES
    Capital [dont versé...][[bpvar1]]
    Primes d'émission, de fusion, d'apport[[bpvar2]]
    Écarts de réévaluation[[bpvar3]]
    Écart d'équivalence[[bpvar4]]
    RÉSERVES
    Réserve légale[[bpvar5]]
    Réserves statutaires ou contractuelles[[bpvar6]]
    Réserves réglementées[[bpvar7]]
    Autres réserves[[bpvar8]]
    Report à nouveau[[bpvar9]]
    RÉSULTAT DE L'EXERCICE [bénéfice ou perte][[bpvar10]]
    Subventions d'investissement[[bpvar11]]
    Provisions réglementées[[bpvar12]]
    TOTAL I[[pt1]]
    PROVISIONS
    Provisions pour risques[[bpvar13]]
    Provisions pour charges[[bpvar14]]
    TOTAL II[[pt2]]
    DETTES
    Emprunts obligataires convertibles[[bpvar15]]
    Autres emprunts obligataires[[bpvar16]]
    Emprunts et dettes auprès des établissements de crédit[[bpvar17]]
    Emprunts et dettes financières diverses[[bpvar18]]
    Avances et acomptes reçus sur commandes en cours[[bpvar19]]
    Dettes fournisseurs et comptes rattachés [[bpvar20]]
    Dettes fiscales et sociales[[bpvar21]]
    Dettes sur immobilisations et comptes rattachés[[bpvar22]]
    Autres dettes[[bpvar23]]
    Instruments de trésorerie[[bpvar24]]
    Produits constatés d'avance[[bpvar25]]
    TOTAL III[[pt3]]
    Écarts de conversion passif ( IV )[[bpvar26]]
    TOTAL GÉNÉRAL (I + II + III + IV)[[passif]]
    ACTIF - PASSIF[[round(actif-passif,2)]]
    - [[ company.name ]] - période du [[ time.strftime('%d-%m-%Y',time.strptime(date_start,'%Y-%m-%d'))]] au [[ time.strftime('%d-%m-%Y',time.strptime(date_stop,'%Y-%m-%d'))]] - - Compte de résultat - - Imprimé le : [[ time.strftime('%d-%m-%Y') ]] -
    - - - - - - - - - Tenue de Compte : [[ company.currency_id.name ]] -
    - CHARGES ( hors taxes ) - - - - -
    - CHARGES D'EXPLOITATION - - - - -
    - Achat de marchandises - - [[cdrc1]] -
    - Variation des stocks - - [[cdrc2]] -
    - Achats de matières premières et autres approvisionnements - - [[cdrc3]] -
    - Variation des stocks - - [[cdrc4]] -
    - Autres achats et charges externes - - [[cdrc5]] -
    - Redevances de crédit-bail mobilier - - [[cdrc6]] -
    - Redevances de crédit-bail immobilier - - [[cdrc7]] -
    - Impôts, taxes et versements assimilés - - [[cdrc8]] -
    - Salaires et traitements - - [[cdrc9]] -
    - Charges sociales - - [[cdrc10]] -
    - Dotation aux amortissements et aux dépréciations - - - - -
    - Sur immobilisations : dotations aux amortissements - - [[cdrc11]] -
    - Sur immobilisations : dotations aux dépréciations - - [[cdrc12]] -
    - Sur actif circulant : dotations aux dépréciations - - [[cdrc13]] -
    - Dotations aux provisions - - [[cdrc14]] -
    - Autres charges - - [[cdrc15]] -
    - TOTAL I - - [[ct1]] -
    - Quotes-parts de résultat sur opérations faites en commun ( II ) - - [[cdrc16]] -
    - CHARGES FINANCIÈRES - - - - -
    - Dotations aux amortissements, aux dépréciations et aux provisions - - [[cdrc17]] -
    - Intérêts et charges assimilées - - [[cdrc18]] -
    - Différences négatives de change - - [[cdrc19]] -
    - Charges nettes sur cessions de valeurs mobilières de placement - - [[cdrc20]] -
    - TOTAL III - - [[ct3]] -
    - CHARGES EXCEPTIONNELLES - - - - -
    - Sur opérations de gestion - - [[cdrc21]] -
    - Sur opérations en capital - - [[cdrc22]] -
    - Dotations aux amortissements, aux dépréciations et aux provisions - - [[cdrc23]] -
    - TOTAL IV - - [[ct4]] -
    - Participation des salariés aux résultats ( V ) - - [[cdrc24]] -
    - Impôts sur les bénéfices ( VI ) - - [[cdrc25]] -
    - TOTAL CHARGES ( I + II + III + IV+ V+ VI ) - - [[charges]] -
    - PRODUITS (hors taxes) - - - - -
    - PRODUITS D'EXPLOITATION - - - - -
    - Vente de marchandises - - [[cdrp1]] -
    - Production vendue [biens et services] - - [[cdrp2]] -
    - Sous-total A - Montant net du chiffre d'affaires - - [[pta]] -
    - Production stockée - - [[cdrp3]] -
    - Production immobilisée - - [[cdrp4]] -
    - Subventions d'exploitation - - [[cdrp5]] -
    - Reprises sur provisions, dépréciations (et amortissements) et transferts de charges - - [[cdrp6]] -
    - Autres produits - - [[cdrp7]] -
    - Sous-total B - - [[ptb]] -
    - TOTAL I ( A + B ) - - [[pt1]] -
    - Quotes-parts de résultat sur opérations faites en commun (II) - - [[cdrp8]] -
    - PRODUITS FINANCIERS - - - - -
    - De participation - - [[cdrp9]] -
    - D'autres valeurs mobilières et créances de l'actif immobilisé - - [[cdrp10]] -
    - Autres intérêts et produits assimilés - - [[cdrp11]] -
    - Reprises sur provisions, dépréciations et transferts de charges - - [[cdrp12]] -
    - Différences positives de change - - [[cdrp13]] -
    - Produits nets sur cessions de valeurs mobilières de placement - - [[cdrp14]] -
    - TOTAL III - - [[pt3]] -
    - PRODUITS EXCEPTIONNELS - - - - -
    - Sur opérations de gestion - - [[cdrp15]] -
    - Sur opérations en capital - - [[cdrp16]] -
    - Reprises sur provisions, dépréciations et transferts de charges - - [[cdrp17]] -
    - TOTAL IV - - [[pt4]] -
    - TOTAL DES PRODUITS ( I + II + III + IV ) - - [[produits]] -
    - PRODUITS - CHARGES - - [[produits-charges]] -
    - From [[ formatLang(data['form']['date_from'], date=True) ]] To [[ formatLang(data['form']['date_to'], date=True) ]] -
    - Employee Code - - [[ o.identification_id ]] - - Department - - [[ o.department_id and o.department_id.name or '' ]] - - Bank - - [[ o.bank_account_id and o.bank_account_id.bank.name or '' ]] -
    - Employee Name - - [[ o.name ]] - - Other No. - - [[ o.otherid or '' ]] - - Address - - [[o.address_home_id and o.address_home_id.name or '' ]] -
    - Designation - - [[ o.job_id and o.job_id.name or '' ]] - - Phone No. - - [[ o.work_phone or '' ]] - - E-mail Address - - [[o.work_email or '' ]] -
    - Title - - [[ m[0] != 'None' and m[0] or '' ]] - - [[ m[1] != 'None' and m[1] or '' ]] - - [[ m[2] != 'None' and m[2] or '' ]] - - [[ m[3] != 'None' and m[3] or '' ]] - - [[ m[4] != 'None' and m[4] or '' ]] - - [[ m[5] != 'None' and m[5] or '' ]] - - [[ m[6] != 'None' and m[6] or '' ]] - - [[ m[7] != 'None' and m[7] or '' ]] - - [[ m[8] != 'None' and m[8] or '' ]] - - [[ m[9] != 'None' and m[9] or '' ]] - - [[ m[10] != 'None' and m[10] or '' ]] - - [[ m[11] != 'None' and m[11] or '' ]] - - Total -
    - Allowances with Basic: -
    - [[ e1[0] in ["Basic","Gross"] and e1[0] ]] - [[ e1[0] not in ["Basic","Gross"] and e1[0] ]] - - - [[ (e1[0] in ["Basic","Gross"] and e1[1]!='' and formatLang(e1[1])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[1]!='' and formatLang(e1[1])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[2]!='' and formatLang(e1[2])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[2]!='' and formatLang(e1[2])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[3]!='' and formatLang(e1[3])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[3]!='' and formatLang(e1[3])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[4]!='' and formatLang(e1[4])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[4]!='' and formatLang(e1[4])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[5]!='' and formatLang(e1[5])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[5]!='' and formatLang(e1[5])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[6]!='' and formatLang(e1[6])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[6]!='' and formatLang(e1[6])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[7]!='' and formatLang(e1[7])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[7]!='' and formatLang(e1[7])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[8]!='' and formatLang(e1[8])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[8]!='' and formatLang(e1[8])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[9]!='' and formatLang(e1[9])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[9]!='' and formatLang(e1[9])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[10]!='' and formatLang(e1[10])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[10]!='' and formatLang(e1[10])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[11]!='' and formatLang(e1[11])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[11]!='' and formatLang(e1[11])) or removeParentNode('font') ]] - - - - [[ (e1[0] in ["Basic","Gross"] and e1[12]!='' and formatLang(e1[12])) or removeParentNode('font') ]] - [[ (e1[0] not in ["Basic","Gross"] and e1[12]!='' and formatLang(e1[12])) or removeParentNode('font') ]] - - - [[ formatLang(e1[13],currency_obj= company.currency_id) ]] -
    - Deductions: -
    - [[ e2[0] in ["Net"] and e2[0] ]] - [[ e2[0] not in ["Net"] and e2[0] ]] - - - [[ (e2[0] in ["Net"] and e2[1]!='' and formatLang(e2[1])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[1]!='' and formatLang(e2[1])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[2]!='' and formatLang(e2[2])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[2]!='' and formatLang(e2[2])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[3]!='' and formatLang(e2[3])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[3]!='' and formatLang(e2[3])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[4]!='' and formatLang(e2[4])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[4]!='' and formatLang(e2[4])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[5]!='' and formatLang(e2[5])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[5]!='' and formatLang(e2[5])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[6]!='' and formatLang(e2[6])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[6]!='' and formatLang(e2[6])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[7]!='' and formatLang(e2[7])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[7]!='' and formatLang(e2[7])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[8]!='' and formatLang(e2[8])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[8]!='' and formatLang(e2[8])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[9]!='' and formatLang(e2[9])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[9]!='' and formatLang(e2[9])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[10]!='' and formatLang(e2[10])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[10]!='' and formatLang(e2[10])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[11]!='' and formatLang(e2[11])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[11]!='' and formatLang(e2[11])) or removeParentNode('font') ]] - - - - [[ (e2[0] in ["Net"] and e2[12]!='' and formatLang(e2[12])) or removeParentNode('font') ]] - [[ (e2[0] not in ["Net"] and e2[12]!='' and formatLang(e2[12])) or removeParentNode('font') ]] - - - [[ formatLang(e2[13],currency_obj= company.currency_id) ]] -
    - - - - - - - - + + + + - - - - + + + + - + + + + + + + + + + + + + + + +
    Name - - - - - - - - - - - - - Total
    - - - - - - - - - - - - - +
    Name + + + + + + + + + + + + + Total
    - - - - - - - - - - - - - +
    + + + + + + + + + + + + + +
    -
    Total
    From 748062b24894748f8f85c6454937fa54e7f2744e Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Tue, 22 Apr 2014 18:30:49 +0200 Subject: [PATCH 080/143] [WIP] hr_attendance: replace the attendance by week/month rml report by a graph view bzr revid: sle@openerp.com-20140422163049-kgq5hwnk66svrmb1 --- addons/hr_attendance/__openerp__.py | 1 + .../data/attendance_graphview.xml | 33 +++++++++++++++++++ addons/hr_attendance/hr_attendance.py | 26 +++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 addons/hr_attendance/data/attendance_graphview.xml diff --git a/addons/hr_attendance/__openerp__.py b/addons/hr_attendance/__openerp__.py index abdc1ad8cc1..447e1b08b8e 100644 --- a/addons/hr_attendance/__openerp__.py +++ b/addons/hr_attendance/__openerp__.py @@ -44,6 +44,7 @@ actions(Sign in/Sign out) performed by them. 'wizard/hr_attendance_error_view.xml', 'res_config_view.xml', 'views/report_attendanceerrors.xml', + 'data/attendance_graphview.xml', ], 'demo': ['hr_attendance_demo.xml'], 'test': [ diff --git a/addons/hr_attendance/data/attendance_graphview.xml b/addons/hr_attendance/data/attendance_graphview.xml new file mode 100644 index 00000000000..4a4ec02359c --- /dev/null +++ b/addons/hr_attendance/data/attendance_graphview.xml @@ -0,0 +1,33 @@ + + + + + hr.attendance.graph + hr.attendance + + + + + + + + + + + + Attendance + hr.attendance + form + graph + + + + + + + \ No newline at end of file diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py index dcff0ad5085..b31a0c91b91 100644 --- a/addons/hr_attendance/hr_attendance.py +++ b/addons/hr_attendance/hr_attendance.py @@ -20,6 +20,8 @@ ############################################################################## import time +from datetime import datetime +import math from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -50,12 +52,36 @@ class hr_attendance(osv.osv): res[obj.id] = time.strftime('%Y-%m-%d', time.strptime(obj.name, '%Y-%m-%d %H:%M:%S')) return res + def _worked_hours_compute(self, cr, uid, ids, fieldnames, args, context=None): + """For each hr.attendance record of action sign-in: assign 0. + For each hr.attendance record of action sign-out: assign number of hours since last sign-in. + """ + res = {} + for obj in self.browse(cr, uid, ids, context=context): + if obj.action == 'sign_in': + res[obj.id] = 0 + elif obj.action == 'sign_out': + # Get the associated sign-in + last_signin_id = self.search(cr, uid, [ + ('employee_id', '=', obj.employee_id.id), + ('name', '<', obj.name), ('action', '=', 'sign_in') + ], limit=1, order='name DESC') + last_signin = self.browse(cr, uid, last_signin_id, context=context)[0] + + # Compute time elapsed between sign-in and sign-out + last_signin_datetime = datetime.strptime(last_signin.name, '%Y-%m-%d %H:%M:%S') + signout_datetime = datetime.strptime(obj.name, '%Y-%m-%d %H:%M:%S') + workedhours_datetime = (signout_datetime - last_signin_datetime) + res[obj.id] = ((workedhours_datetime.seconds) / 60) / 60 + return res + _columns = { 'name': fields.datetime('Date', required=True, select=1), 'action': fields.selection([('sign_in', 'Sign In'), ('sign_out', 'Sign Out'), ('action','Action')], 'Action', required=True), 'action_desc': fields.many2one("hr.action.reason", "Action Reason", domain="[('action_type', '=', action)]", help='Specifies the reason for Signing In/Signing Out in case of extra hours.'), 'employee_id': fields.many2one('hr.employee', "Employee", required=True, select=True), 'day': fields.function(_day_compute, type='char', string='Day', store=True, select=1, size=32), + 'worked_hours': fields.function(_worked_hours_compute, type='float', string='Worked Hours', store=True), } _defaults = { 'name': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), #please don't remove the lambda, if you remove it then the current time will not change From 06ca6d2540add7e8534dea69aa62a4b5aa2a1747 Mon Sep 17 00:00:00 2001 From: Sunil Sharma Date: Wed, 23 Apr 2014 10:59:10 +0530 Subject: [PATCH 081/143] [imp]:improve code bzr revid: ssh@tinyerp.com-20140423052910-486im2lmzpqev14n --- .../view/report_hr_yearly_salary_detail.xml | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml index 5430518e10d..fc7a2fd4b9f 100644 --- a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml @@ -36,19 +36,43 @@ Employee Name - + + + + + Other No. - + + + + + Address - + + + + + Designation - + + + + + Phone No. - + + + + + E-mail Address - + + + + + From be542630e88d834cc20401cafda990f2a47a9ba7 Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Wed, 23 Apr 2014 12:27:55 +0530 Subject: [PATCH 082/143] [IMP]: Code optimization in the view file bzr revid: rsi@tinyerp.com-20140423065755-83tyantoitle2ow4 --- .../report_hr_salary_employee_bymonth.py | 4 +- .../views/report_hrsalarybymonth.xml | 38 ++++--------------- 2 files changed, 10 insertions(+), 32 deletions(-) diff --git a/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py index 6d29bd82efc..8873f6e2465 100644 --- a/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py +++ b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py @@ -81,7 +81,7 @@ class report_hr_salary_employee_bymonth(report_sxw.rml_parse): sal = self.cr.fetchall() salary = dict(sal) total = 0.0 - cnt = 1 + cnt = 0 for month in self.mnths: if month <> '': @@ -102,7 +102,7 @@ class report_hr_salary_employee_bymonth(report_sxw.rml_parse): def get_employee(self, form): emp_salary = [] salary_list = [] - total_mnths=['Total', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + total_mnths=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] emp_obj = self.pool.get('hr.employee') emp_ids = form.get('employee_ids', []) employees = emp_obj.browse(self.cr, self.uid, emp_ids, context=self.context) diff --git a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml index a2e3de1ef32..18a81412e26 100644 --- a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml +++ b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml @@ -14,18 +14,9 @@ Name - - - - - - - - - - - - + + + Total @@ -34,18 +25,9 @@ - - - - - - - - - - - - + + + @@ -53,13 +35,9 @@ + Total - - Total - - - - + From f15123df698df890916a880ac6b5e10e7e73a045 Mon Sep 17 00:00:00 2001 From: Sunil Sharma Date: Wed, 23 Apr 2014 15:23:39 +0530 Subject: [PATCH 083/143] [imp]:improve code firsr first call layout then foreach loop bzr revid: ssh@tinyerp.com-20140423095339-lkswkyqyhw1cm6oj --- .../view/report_hr_yearly_salary_detail.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml index fc7a2fd4b9f..8a82db03497 100644 --- a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml @@ -3,9 +3,9 @@ From fc2dd8983d63ea4eb54fc217ff136dcd9c4d6aa7 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Wed, 23 Apr 2014 11:54:09 +0200 Subject: [PATCH 084/143] [WIP] hr_attendance graphview: moved graph declaration inside hr_attendance_view.xml, removed the useless day field on hr.attendance model, fixed the groupby so that se graphview allows to group by day, week, etc. bzr revid: sle@openerp.com-20140423095409-wab11nwouwnz43og --- addons/hr_attendance/__openerp__.py | 1 - .../data/attendance_graphview.xml | 33 ------------------- addons/hr_attendance/hr_attendance.py | 8 ----- addons/hr_attendance/hr_attendance_view.xml | 31 +++++++++++++++-- 4 files changed, 29 insertions(+), 44 deletions(-) delete mode 100644 addons/hr_attendance/data/attendance_graphview.xml diff --git a/addons/hr_attendance/__openerp__.py b/addons/hr_attendance/__openerp__.py index 447e1b08b8e..abdc1ad8cc1 100644 --- a/addons/hr_attendance/__openerp__.py +++ b/addons/hr_attendance/__openerp__.py @@ -44,7 +44,6 @@ actions(Sign in/Sign out) performed by them. 'wizard/hr_attendance_error_view.xml', 'res_config_view.xml', 'views/report_attendanceerrors.xml', - 'data/attendance_graphview.xml', ], 'demo': ['hr_attendance_demo.xml'], 'test': [ diff --git a/addons/hr_attendance/data/attendance_graphview.xml b/addons/hr_attendance/data/attendance_graphview.xml deleted file mode 100644 index 4a4ec02359c..00000000000 --- a/addons/hr_attendance/data/attendance_graphview.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - hr.attendance.graph - hr.attendance - - - - - - - - - - - - Attendance - hr.attendance - form - graph - - - - - - - \ No newline at end of file diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py index b31a0c91b91..7df5bb34c68 100644 --- a/addons/hr_attendance/hr_attendance.py +++ b/addons/hr_attendance/hr_attendance.py @@ -21,7 +21,6 @@ import time from datetime import datetime -import math from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -46,12 +45,6 @@ class hr_attendance(osv.osv): _name = "hr.attendance" _description = "Attendance" - def _day_compute(self, cr, uid, ids, fieldnames, args, context=None): - res = dict.fromkeys(ids, '') - for obj in self.browse(cr, uid, ids, context=context): - res[obj.id] = time.strftime('%Y-%m-%d', time.strptime(obj.name, '%Y-%m-%d %H:%M:%S')) - return res - def _worked_hours_compute(self, cr, uid, ids, fieldnames, args, context=None): """For each hr.attendance record of action sign-in: assign 0. For each hr.attendance record of action sign-out: assign number of hours since last sign-in. @@ -80,7 +73,6 @@ class hr_attendance(osv.osv): 'action': fields.selection([('sign_in', 'Sign In'), ('sign_out', 'Sign Out'), ('action','Action')], 'Action', required=True), 'action_desc': fields.many2one("hr.action.reason", "Action Reason", domain="[('action_type', '=', action)]", help='Specifies the reason for Signing In/Signing Out in case of extra hours.'), 'employee_id': fields.many2one('hr.employee', "Employee", required=True, select=True), - 'day': fields.function(_day_compute, type='char', string='Day', store=True, select=1, size=32), 'worked_hours': fields.function(_worked_hours_compute, type='float', string='Worked Hours', store=True), } _defaults = { diff --git a/addons/hr_attendance/hr_attendance_view.xml b/addons/hr_attendance/hr_attendance_view.xml index c38ee45b510..c2fdd0b0ae9 100644 --- a/addons/hr_attendance/hr_attendance_view.xml +++ b/addons/hr_attendance/hr_attendance_view.xml @@ -40,7 +40,6 @@ - @@ -53,17 +52,30 @@ + - + + + hr.attendance.graph + hr.attendance + + + + + + + + + Attendances hr.attendance @@ -74,12 +86,27 @@ The Time Tracking functionality aims to manage employee attendances from Sign in/Sign out actions. You can also link this feature to an attendance device using OpenERP's web service features. + + Attendance + hr.attendance + form + graph + + + + + hr.action.reason.form hr.action.reason From d59d90449cb18b83ea6562f4b3b1992079947538 Mon Sep 17 00:00:00 2001 From: Jaydeep Barot Date: Wed, 23 Apr 2014 17:10:53 +0530 Subject: [PATCH 085/143] [IMP] add res remove return in if condition bzr revid: jar@tinyerp.com-20140423114053-wnjqd7408w8sva77 --- addons/account/res_config.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/account/res_config.py b/addons/account/res_config.py index b9bceb3d2ff..65f38d6e26b 100644 --- a/addons/account/res_config.py +++ b/addons/account/res_config.py @@ -260,9 +260,10 @@ class account_config_settings(osv.osv_memory): return {'value': {'purchase_tax_rate': rate or False}} def onchange_multi_currency(self, cr, uid, ids, group_multi_currency, context=None): + res = {} if not group_multi_currency: - return {'value': {'income_currency_exchange_account_id': False, 'expense_currency_exchange_account_id': False}} - return {} + res['value'] = {'income_currency_exchange_account_id': False, 'expense_currency_exchange_account_id': False} + return res def onchange_start_date(self, cr, uid, id, start_date): if start_date: From dc34d310ff3bd26c97375d47fab43ea8e67498cf Mon Sep 17 00:00:00 2001 From: Jaydeep Barot Date: Wed, 23 Apr 2014 17:41:17 +0530 Subject: [PATCH 086/143] [typo] improve typo for _check_currency_amount constraint bzr revid: jar@tinyerp.com-20140423121117-xitriiv7mfwvsn35 --- addons/account/account_move_line.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 730c8faa062..e44e8825128 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -628,7 +628,7 @@ class account_move_line(osv.osv): (_check_date, 'The date of your Journal Entry is not in the defined period! You should change the date or remove this constraint from the journal.', ['date']), (_check_currency, 'The selected account of your Journal Entry forces to provide a secondary currency. You should remove the secondary currency on the account or select a multi-currency view on the journal.', ['currency_id']), (_check_currency_and_amount, "You cannot create journal items with a secondary currency without recording both 'currency' and 'amount currency' field.", ['currency_id','amount_currency']), - (_check_currency_amount, 'The amount expressed in the secondary currency must be positive when account is a debited and negative when account is a credit.', ['amount_currency']), + (_check_currency_amount, 'The amount expressed in the secondary currency must be positive when account is debited and negative when account is credited.', ['amount_currency']), (_check_currency_company, "You cannot provide a secondary currency if it is the same than the company one." , ['currency_id']), ] From 7932140dd1ac195ccb371de79409bea5a35b47a4 Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Wed, 23 Apr 2014 19:00:32 +0530 Subject: [PATCH 087/143] [IMP]: convert rml to qweb report of Payslip Details bzr revid: rsi@tinyerp.com-20140423133032-l1wxnoyytdakdnpx --- addons/l10n_in_hr_payroll/__openerp__.py | 1 + .../l10n_in_hr_payroll_report.xml | 8 +- .../report/report_payslip_details.py | 7 +- .../report/report_payslip_details.rml | 372 ------------------ 4 files changed, 11 insertions(+), 377 deletions(-) delete mode 100644 addons/l10n_in_hr_payroll/report/report_payslip_details.rml diff --git a/addons/l10n_in_hr_payroll/__openerp__.py b/addons/l10n_in_hr_payroll/__openerp__.py index 2522d543548..adccb9cabd4 100644 --- a/addons/l10n_in_hr_payroll/__openerp__.py +++ b/addons/l10n_in_hr_payroll/__openerp__.py @@ -49,6 +49,7 @@ Indian Payroll Salary Rules. 'security/ir.model.access.csv', 'l10n_in_hr_payroll_report.xml', 'l10n_in_hr_payroll_sequence.xml', + 'views/report_payslipdetails.xml', 'wizard/hr_salary_employee_bymonth_view.xml', 'wizard/hr_yearly_salary_detail_view.xml', 'report/payment_advice_report_view.xml', diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml index 7f27291051f..077bf5debf8 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml @@ -3,12 +3,12 @@ + string="PaySlip Details" + report_type="qweb-pdf" + name="l10n_in_hr_payroll.report_payslipdetails" + file="l10n_in_hr_payroll.report_payslipdetails" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[repeatIn(objects,'o')]] - - - - Pay Slip Details - - - - - [[o.credit_note==False and removeParentNode('para')]] - Credit - - Note - - ([[o.name or removeParentNode('para')]]) - - - - Name - - - [[o.employee_id.name]] - - - Designation - - - [[ o.employee_id.job_id.name or '' ]] - - - - - - - - Address - - - - [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]] - - - - - - - Email - - - [[ o.employee_id.work_email or '' ]] - - - - Identification No - - - - [[ o.employee_id.identification_id or '' ]] - - - - - - - Reference - - - [[ o.number or '' ]] - - - Bank Account - - - [[ o.employee_id.otherid or '' ]] - - - - - - - Date From - - - [[ o.date_from or '']] - - - - Date To - - - - [[ o.date_to or '' ]] - - - - - - - - - - - - - - Details by Salary Rule Category: - - - - - - - Code - - - Salary Rule Category - - - Total - - - - - - -
    - [[repeatIn(get_details_by_rule_category(o.details_by_salary_rule_category),'h') ]] - - - - - [[ h['code'] ]] - [[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font')]] - - - - [[ '..'*h['level'] ]][[ h['rule_category'] ]][[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]] - - - [[ formatLang(h['total'], currency_obj = o.company_id and o.company_id.currency_id)]] [[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]] - - - -
    - - - - - - - - - - - - - - - - - - - - - - Authorized Signature - - - - - - -
    -
    - From c43d5235a5fe514038c2f04219281327da11fd75 Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Wed, 23 Apr 2014 19:04:03 +0530 Subject: [PATCH 088/143] [ADD]: add the view file of Payslip Details bzr revid: rsi@tinyerp.com-20140423133403-60ukgyi8uy4j6g4k --- .../views/report_payslipdetails.xml | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 addons/l10n_in_hr_payroll/views/report_payslipdetails.xml diff --git a/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml b/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml new file mode 100644 index 00000000000..0db3e17c7ee --- /dev/null +++ b/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml @@ -0,0 +1,93 @@ + + + + + + \ No newline at end of file From b1bc68d8eb374f30173e03e8048d1c3588a00d4b Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Wed, 23 Apr 2014 17:45:30 +0200 Subject: [PATCH 089/143] [FIX] website: tour inject sale/event bzr revid: chm@openerp.com-20140423154530-rfc3glnp5xk50xoc --- addons/website_event_sale/tests/test_ui.py | 4 ++-- addons/website_sale/tests/test_ui.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/website_event_sale/tests/test_ui.py b/addons/website_event_sale/tests/test_ui.py index 9e0ae31484e..3c3e643912a 100644 --- a/addons/website_event_sale/tests/test_ui.py +++ b/addons/website_event_sale/tests/test_ui.py @@ -3,8 +3,8 @@ import os import openerp.tests inject = [ - os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js'), - os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.event_sale.js"), + ("openerp.website.Tour", os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js')), + ("openerp.website.Tour.ShopTest", os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.event_sale.js")), ] @openerp.tests.common.at_install(False) diff --git a/addons/website_sale/tests/test_ui.py b/addons/website_sale/tests/test_ui.py index e242bb0b557..33e3a3c2ae8 100644 --- a/addons/website_sale/tests/test_ui.py +++ b/addons/website_sale/tests/test_ui.py @@ -3,8 +3,8 @@ import os import openerp.tests inject = [ - os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js'), - os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.sale.js"), + ("openerp.website.Tour", os.path.join(os.path.dirname(__file__), '../../website/static/src/js/website.tour.js')), + ("openerp.website.Tour.ShopTest", os.path.join(os.path.dirname(__file__), "../static/src/js/website.tour.sale.js")), ] @openerp.tests.common.at_install(False) From 2c042b1824e0a38f561621ac1333c7281476e073 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Wed, 23 Apr 2014 21:37:40 +0530 Subject: [PATCH 090/143] [IMP]: Renamed wrapped class bzr revid: atp@tinyerp.com-20140423160740-qnz5k1bnjyybgk9v --- .../report/report_hr_salary_employee_bymonth.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py index 8873f6e2465..31ea9cb4b3c 100644 --- a/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py +++ b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.py @@ -128,10 +128,10 @@ class report_hr_salary_employee_bymonth(report_sxw.rml_parse): self.total += item[count] return self.total -class employee_salary_bymonth(osv.AbstractModel): +class wrapped_report_employee_salary_bymonth(osv.AbstractModel): _name = 'report.l10n_in_hr_payroll.report_hrsalarybymonth' _inherit = 'report.abstract_report' _template = 'l10n_in_hr_payroll.report_hrsalarybymonth' _wrapped_report_class = report_hr_salary_employee_bymonth -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 3446fe069547e2a07e8896abeedb238e8bf3d8df Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Thu, 24 Apr 2014 00:02:41 +0530 Subject: [PATCH 091/143] [IMP]: Improve bootstrap class with span element. bzr revid: atp@tinyerp.com-20140423183241-8c7442xgroxoik0s --- .../views/report_hrsalarybymonth.xml | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml index 18a81412e26..57fadad5865 100644 --- a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml +++ b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml @@ -6,8 +6,10 @@
    -

    Yearly Salary Details

    -
    From To of Category
    +

    Yearly Salary Details

    +

    + From To of Category +

    @@ -15,7 +17,9 @@ - @@ -24,22 +28,26 @@ - - - - + - + @@ -49,4 +57,4 @@ - \ No newline at end of file + From 45e74261e4d8f961373c8d68514bc9e37e0f1d5d Mon Sep 17 00:00:00 2001 From: Sunil Sharma Date: Thu, 24 Apr 2014 10:17:56 +0530 Subject: [PATCH 092/143] [imp]:improve use a text-center class bzr revid: ssh@tinyerp.com-20140424044756-ls3g2mour8rmjtes --- .../view/report_hr_yearly_salary_detail.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml index 8a82db03497..bf64d028430 100644 --- a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml @@ -6,11 +6,11 @@
    -
    -
    From +
    +
    From To -
    +

    Name + + + Total
    + + + + + + +
    TotalTotal
    From c61a1b679e9a575ca8e2e510edb2704accdd1fc8 Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Thu, 24 Apr 2014 10:51:18 +0530 Subject: [PATCH 093/143] [IMP]: Add the padding to the child level bzr revid: rsi@tinyerp.com-20140424052118-y92vvkbam7cwlklj --- addons/l10n_in_hr_payroll/views/report_payslipdetails.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml b/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml index 0db3e17c7ee..4d59b5b4178 100644 --- a/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml +++ b/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml @@ -74,7 +74,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr_timesheet/report/users_timesheet.py b/addons/hr_timesheet/report/users_timesheet.py deleted file mode 100644 index 0d3f23e6bd3..00000000000 --- a/addons/hr_timesheet/report/users_timesheet.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import datetime -import time - -import openerp -from openerp.report.interface import report_rml -from openerp.report.interface import toxml -from openerp.tools.translate import _ -from openerp.report import report_sxw -from openerp.tools import ustr - - -def lengthmonth(year, month): - if month == 2 and ((year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0))): - return 29 - return [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] - -def emp_create_xml(cr, id, som, eom, emp): - # Computing the attendence by analytical account - cr.execute( - "select line.date, (unit_amount / unit.factor) as amount "\ - "from account_analytic_line as line, hr_analytic_timesheet as hr, "\ - "product_uom as unit "\ - "where hr.line_id=line.id "\ - "and product_uom_id = unit.id "\ - "and line.user_id=%s and line.date >= %s and line.date < %s " - "order by line.date", - (id, som.strftime('%Y-%m-%d'), eom.strftime('%Y-%m-%d'))) - - # Sum by day - month = {} - for presence in cr.dictfetchall(): - day = int(presence['date'][-2:]) - month[day] = month.get(day, 0.0) + presence['amount'] - - xml = ''' - - %.2f - - ''' - time_xml = ([xml % (day, amount) for day, amount in month.iteritems()]) - - # Computing the xml - xml = ''' - - %s - - ''' % (id, toxml(emp), '\n'.join(time_xml)) - return xml - -class report_custom(report_rml): - - def get_month_name(self, cr, uid, month, context=None): - _months = {1:_("January"), 2:_("February"), 3:_("March"), 4:_("April"), 5:_("May"), 6:_("June"), 7:_("July"), 8:_("August"), 9:_("September"), 10:_("October"), 11:_("November"), 12:_("December")} - return _months[month] - - def get_weekday_name(self, cr, uid, weekday, context=None): - _weekdays = {1:_('Mon'), 2:_('Tue'), 3:_('Wed'), 4:_('Thu'), 5:_('Fri'), 6:_('Sat'), 7:_('Sun')} - return _weekdays[weekday] - - def create_xml(self, cr, uid, ids, data, context): - registry = openerp.registry(cr.dbname) - - # Computing the dates (start of month: som, and end of month: eom) - som = datetime.date(data['form']['year'], data['form']['month'], 1) - eom = som + datetime.timedelta(lengthmonth(som.year, som.month)) - date_xml = ['' % (self.get_month_name(cr, uid, som.month, context=context), som.year), ''] - date_xml += ['' % (x, self.get_weekday_name(cr, uid, som.replace(day=x).weekday()+1, context=context), som.replace(day=x).weekday()+1) for x in range(1, lengthmonth(som.year, som.month)+1)] - date_xml.append('') - date_xml.append('2.5cm%s,2cm\n' % (',0.7cm' * lengthmonth(som.year, som.month))) - - emp_xml='' - emp_obj = registry['hr.employee'] - for id in data['form']['employee_ids']: - user = emp_obj.browse(cr, uid, id).user_id.id - empl_name = emp_obj.browse(cr, uid, id).name - if user: - emp_xml += emp_create_xml(cr, user, som, eom, empl_name) - # Computing the xml - #Without this, report don't show non-ascii characters (TO CHECK) - date_xml = '\n'.join(date_xml) - rpt_obj = emp_obj - rml_obj=report_sxw.rml_parse(cr, uid, rpt_obj._name,context) - header_xml = ''' -
    - %s - %s -
    - ''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),toxml(registry['res.users'].browse(cr,uid,uid).company_id.name)) - - xml=''' - - %s - %s - %s - - ''' % (header_xml,date_xml, ustr(emp_xml)) - return xml - -report_custom('report.hr.analytical.timesheet_users', 'hr.employee', '', 'addons/hr_timesheet/report/users_timesheet.xsl') - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/hr_timesheet/report/users_timesheet.xsl b/addons/hr_timesheet/report/users_timesheet.xsl deleted file mode 100644 index 9c99b56afe6..00000000000 --- a/addons/hr_timesheet/report/users_timesheet.xsl +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lightgrey - - - ,0 - - - - ,-1 - - - - - - - - - - - - - - Employees Timesheet - - - month - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 3f0a8e8931adfb40b4393074193a00bc20ede601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Fri, 25 Apr 2014 14:22:20 +0200 Subject: [PATCH 108/143] [IMP] point_of_sale, hw_scale: various small fixes and improvements for the scale module bzr revid: fva@openerp.com-20140425122220-q7rw1dve8bgs25as --- addons/hw_scale/controllers/main.py | 8 ++++---- addons/point_of_sale/point_of_sale_view.xml | 6 +++--- addons/point_of_sale/static/src/js/devices.js | 2 +- addons/point_of_sale/static/src/js/widgets.js | 16 +++++++++------- addons/point_of_sale/static/src/xml/pos.xml | 2 +- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/addons/hw_scale/controllers/main.py b/addons/hw_scale/controllers/main.py index 4c8e1ffd0cd..3c4aa12a1b9 100644 --- a/addons/hw_scale/controllers/main.py +++ b/addons/hw_scale/controllers/main.py @@ -59,12 +59,11 @@ class Scale(Thread): def get_device(self): try: - devices = [ device for device in listdir(self.input_dir)] - scales = [ device for device in devices if ('mettler' in device.lower()) or ('toledo' in device.lower()) ] + devices = [ device for device in listdir(self.input_dir)] + scales = [ device for device in devices if ('mettler' in device.lower()) or ('toledo' in device.lower()) ] if len(scales) > 0: print join(self.input_dir,scales[0]) self.set_status('connected','Connected to '+scales[0]) -# s = serial.Serial("/dev/serial/by-id/usb-METTLER_TOLEDO_15_kg_DI_Firmware_CKOR_F_Ser_CDC-if00",baudrate=9600,bytesize=serial.SEVENBITS,parity=serial.PARITY_EVEN) return serial.Serial(join(self.input_dir,scales[0]), baudrate = 9600, bytesize = serial.SEVENBITS, @@ -97,7 +96,7 @@ class Scale(Thread): if self.device: try: self.device.write('W') - time.sleep(0.2) + time.sleep(0.1) answer = [] while True: @@ -119,6 +118,7 @@ class Scale(Thread): self.weight_info.append('over_capacity') if stat & 1 << 2: self.weight_info.append('negative') + self.weight = 0.0 if stat & 1 << 3: self.weight_info.append('outside_zero_capture_range') if stat & 1 << 4: diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 7740020e37f..15d2dc64289 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -739,12 +739,10 @@ - + - - @@ -752,6 +750,8 @@ + + diff --git a/addons/point_of_sale/static/src/js/devices.js b/addons/point_of_sale/static/src/js/devices.js index 316aea50e43..2b016445638 100644 --- a/addons/point_of_sale/static/src/js/devices.js +++ b/addons/point_of_sale/static/src/js/devices.js @@ -394,7 +394,7 @@ function openerp_pos_devices(instance,module){ //module is instance.point_of_sal console.log(weight) ret.resolve(self.use_debug_weight ? self.debug_weight : weight); }, function(){ //failed to read weight - ret.resolve(self.use_debug_weight ? self.debug_weight : {weight:0.0, info:'ok'}); + ret.resolve(self.use_debug_weight ? self.debug_weight : {weight:0.0, unit:'Kg', info:'ok'}); }); return ret; }, diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js index 95ff7cbea7e..54aa8d115f0 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -693,7 +693,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa 'open_cashbox', 'print_receipt', 'print_pdf_invoice', - 'weighting_read_kg', + 'scale_read', 'payment_status', ], minimized: false, @@ -811,12 +811,6 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa self.pos.proxy.add_notification('transaction_end',function(){ self.$('.status.transaction').removeClass('on'); }); - self.pos.proxy.add_notification('weighting_start',function(){ - self.$('.status.weighting').addClass('on'); - }); - self.pos.proxy.add_notification('weighting_end',function(){ - self.$('.status.weighting').removeClass('on'); - }); }, }); @@ -876,6 +870,14 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa msg += _t('Printer'); } } + if( this.pos.config.iface_electronic_scale ){ + var scale = status.drivers.scale ? status.drivers.scale.status : false; + if( scale != 'connected' && scale != 'connecting' ){ + warning = true; + msg = msg ? msg + ' & ' : msg; + msg += _t('Scale'); + } + } msg = msg ? msg + ' ' + _t('Offline') : msg; this.set_status(warning ? 'warning' : 'connected', msg); }else{ diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml index 02c6374578b..34d6e729d06 100644 --- a/addons/point_of_sale/static/src/xml/pos.xml +++ b/addons/point_of_sale/static/src/xml/pos.xml @@ -692,7 +692,7 @@
  • Open Cashbox
  • -
  • Read Weighting Scale
  • +
  • Read Weighting Scale
  • From 24852d7ec9f3dda1899c9d25b74349ef7be3addf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Fri, 25 Apr 2014 14:32:46 +0200 Subject: [PATCH 109/143] [FIX] hw_scale: remove useless python module bzr revid: fva@openerp.com-20140425123246-lexb4viqi6k7zwgq --- addons/hw_scale/controllers/main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/hw_scale/controllers/main.py b/addons/hw_scale/controllers/main.py index 3c4aa12a1b9..ed2d898fcfc 100644 --- a/addons/hw_scale/controllers/main.py +++ b/addons/hw_scale/controllers/main.py @@ -7,7 +7,6 @@ from os.path import join from threading import Thread, Lock from select import select from Queue import Queue, Empty -from bitstring import BitArray import openerp import openerp.addons.hw_proxy.controllers.main as hw_proxy From c0d62797c93f3eca43a8c9666a641538d96c6b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Fri, 25 Apr 2014 14:40:05 +0200 Subject: [PATCH 110/143] [FIX] hw_scale: remove useless driver test script bzr revid: fva@openerp.com-20140425124005-pugnyq6gsl0gw8yx --- addons/hw_scale/mettler.py | 100 ------------------------------------- 1 file changed, 100 deletions(-) delete mode 100755 addons/hw_scale/mettler.py diff --git a/addons/hw_scale/mettler.py b/addons/hw_scale/mettler.py deleted file mode 100755 index 5c5df97a60e..00000000000 --- a/addons/hw_scale/mettler.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/python -import serial -import time -import sys -from bitstring import BitArray - -path = "/dev/serial/by-id/usb-METTLER_TOLEDO_15_kg_DI_Firmware_CKOR_F_Ser_CDC-if00" - -device = serial.Serial(path, - baudrate = 9600, - bytesize = serial.SEVENBITS, - stopbits = serial.STOPBITS_ONE, - parity = serial.PARITY_EVEN, - #xonxoff = serial.XON, - timeout = 0.1, - writeTimeout= 0.1) - -if len(sys.argv) == 1: - cmd = 'weight' -else: - cmd = sys.argv[1] - -def write(stuff): - print stuff - device.write(stuff) - -def read_answer(): - answer = [] - while True: - char = device.read(1) - if not char: - return answer - else: - answer.append(char) - -def print_answer(answer): - print answer - if '?' in answer: - status = answer[answer.index('?')+1] - print 'status_bits: '+BitArray(int=ord(status),length=8).bin - - -if cmd == 'weight': - while True: - time.sleep(0.25) - write('W') - time.sleep(0.25) - print_answer(read_answer()) - -if cmd == 'interactive': - weight = 0 - status = '' - while True: - time.sleep(0.25) - device.write('W') - answer = read_answer() - if '?' in answer: - oldstatus = status - b = answer[answer.index('?')+1] - if b == '\x00' or b == ' ': - pass # ignore status - elif b == 'B': - status = 'too_heavy' - elif b == 'D': - status = 'negative' - elif b == 'A' or b == 'Q' or b == '\x01': - status = 'moving' - else: - status = 'unknown' - print b.__repr__(), BitArray(int=ord(b),length=8).bin - if oldstatus != status: - print status - else: - oldweight = weight - answer = answer[1:-1] - if 'N' in answer: - answer = answer[0:-1] - weight = float(''.join(answer)) - if oldweight != weight: - print weight - - -elif cmd == 'zero': - time.sleep(1) - write('Z') - time.sleep(1) - print_answer(read_answer()) - -elif cmd == 'test': - time.sleep(1) - write('A') - time.sleep(1) - write('B') - time.sleep(1) - answer = read_answer() - if '@' in answer: - print 'all test passed' - else: - print_answer(answer) - From 18de18a29e37f084c000206e138aaeddf9bc62ac Mon Sep 17 00:00:00 2001 From: Sunil Sharma Date: Fri, 25 Apr 2014 18:34:57 +0530 Subject: [PATCH 111/143] [imp]:improve hr yearly salary detail tbody code bzr revid: ssh@tinyerp.com-20140425130457-rh9fxo703956eyqx --- .../views/report_hr_yearly_salary_detail.xml | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml index c231587ab77..4c7f41c3bde 100644 --- a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml @@ -87,30 +87,35 @@
    - - + - - + + - - + + + + + + - - - - + + - + - + + + + - + +
    - + From ad71e6b87c3d841f761a65014dfc469e6bd09e4f Mon Sep 17 00:00:00 2001 From: Sunil Sharma Date: Thu, 24 Apr 2014 14:14:02 +0530 Subject: [PATCH 094/143] [imp]:improve th tag to td tag bzr revid: ssh@tinyerp.com-20140424084402-gam7edp04qvyj7gu --- .../view/report_hr_yearly_salary_detail.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml index bf64d028430..13383817889 100644 --- a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml @@ -14,20 +14,20 @@
    - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr_attendance/report/timesheet.py b/addons/hr_attendance/report/timesheet.py deleted file mode 100644 index 42dd686eba3..00000000000 --- a/addons/hr_attendance/report/timesheet.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - - -from datetime import datetime -from dateutil.relativedelta import relativedelta -import time - -import openerp -from openerp import tools -from openerp.report import report_sxw -from openerp.report.interface import report_rml, toxml -from openerp.tools.translate import _ - -one_week = relativedelta(days=7) -num2day = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] - -def to_hour(h): - return int(h), int(round((h - int(h)) * 60, 0)) - -class report_custom(report_rml): - - def create_xml(self, cr, uid, ids, datas, context=None): - registry = openerp.registry(cr.dbname) - obj_emp = registry['hr.employee'] - - emp_ids = datas['active_ids'] - start_date = datetime.strptime(datas['form']['init_date'], '%Y-%m-%d') - end_date = datetime.strptime(datas['form']['end_date'], '%Y-%m-%d') - first_monday = start_date - relativedelta(days=start_date.date().weekday()) - last_monday = end_date + relativedelta(days=7 - end_date.date().weekday()) - - if last_monday < first_monday: - first_monday, last_monday = last_monday, first_monday - - rpt_obj = obj_emp - rml_obj=report_sxw.rml_parse(cr, uid, rpt_obj._name,context) - header_xml = ''' -
    - %s - %s -
    - ''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),registry['res.users'].browse(cr,uid,uid).company_id.name) - user_xml = [] - for employee_id in emp_ids: - emp = obj_emp.read(cr, uid, [employee_id], ['id', 'name'])[0] - monday, n_monday = first_monday, first_monday + one_week - stop, week_xml = False, [] - user_repr = ''' - - %s - %%s - - ''' % tools.ustr(toxml(emp['name'])) - while monday != last_monday: - #### Work hour calculation - sql = ''' - select action, att.name - from hr_employee as emp inner join hr_attendance as att - on emp.id = att.employee_id - where att.name between %s and %s and emp.id = %s - order by att.name - ''' - for idx in range(7): - cr.execute(sql, (monday.strftime('%Y-%m-%d %H:%M:%S'), (monday + relativedelta(days=idx+1)).strftime('%Y-%m-%d %H:%M:%S'), employee_id)) - attendances = cr.dictfetchall() - week_wh = {} - # Fake sign ins/outs at week ends, to take attendances across week ends into account - # XXX this is wrong for the first sign-in ever and the last sign out to this date - if attendances and attendances[0]['action'] == 'sign_out': - attendances.insert(0, {'name': monday.strftime('%Y-%m-%d %H:%M:%S'), 'action': 'sign_in'}) - if attendances and attendances[-1]['action'] == 'sign_in': - attendances.append({'name': n_monday.strftime('%Y-%m-%d %H:%M:%S'), 'action': 'sign_out'}) - # sum up the attendances' durations - ldt = None - for att in attendances: - dt = datetime.strptime(att['name'], '%Y-%m-%d %H:%M:%S') - if ldt and att['action'] == 'sign_out': - week_wh[ldt.date().weekday()] = week_wh.get(ldt.date().weekday(), 0) + (float((dt - ldt).seconds)/3600) - else: - ldt = dt - - # Week xml representation - week_repr = ['', '%s' % monday.strftime('%Y-%m-%d'), '%s' % (n_monday - relativedelta(days=1)).strftime('%Y-%m-%d')] - for idx in range(7): - week_repr.append('<%s>' % num2day[idx]) - if idx in week_wh: - week_repr.append('%sh%02d' % to_hour(week_wh[idx])) - week_repr.append('' % num2day[idx]) - week_repr.append('') - week_repr.append('%sh%02d' % to_hour(reduce(lambda x,y:x+y, week_wh.values(), 0))) - week_repr.append('') - week_repr.append('') - week_xml.append('\n'.join(week_repr)) - - monday, n_monday = n_monday, n_monday + one_week - user_xml.append(user_repr % '\n'.join(week_xml)) - xml = ''' - - %s - %s - %s - - ''' % (header_xml,_('Attendances by Week'),'\n'.join(user_xml)) - xml = tools.ustr(xml).encode('utf8') - return self.post_process_xml_data(cr, uid, xml, context) - -report_custom('report.hr.attendance.allweeks', 'hr.employee', '', 'addons/hr_attendance/report/timesheet.xsl') -# vim:noexpandtab:tw=0 diff --git a/addons/hr_attendance/report/timesheet.xsl b/addons/hr_attendance/report/timesheet.xsl deleted file mode 100644 index 4d113512801..00000000000 --- a/addons/hr_attendance/report/timesheet.xsl +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Employee: - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr_attendance/test/hr_attendance_report.yml b/addons/hr_attendance/test/hr_attendance_report.yml index a5276b775d8..1a55ffcf496 100644 --- a/addons/hr_attendance/test/hr_attendance_report.yml +++ b/addons/hr_attendance/test/hr_attendance_report.yml @@ -1,11 +1,3 @@ -- - Print the HR Attendance Report By Month through the wizard -- - !python {model: hr.employee}: | - from openerp.tools import test_reports - ctx = {'model': 'hr.employee','active_ids': [ref('hr.employee_fp'),ref('hr.employee_qdp'),ref('hr.employee_al')]} - data_dict = {} - test_reports.try_report_action(cr, uid, 'action_hr_attendance_month',wiz_data=data_dict, context=ctx, our_module='hr_attendance') - Print HR Attendance Error Report through the wizard - diff --git a/addons/hr_attendance/wizard/__init__.py b/addons/hr_attendance/wizard/__init__.py index 6269c507d8c..4c7d60afa8b 100644 --- a/addons/hr_attendance/wizard/__init__.py +++ b/addons/hr_attendance/wizard/__init__.py @@ -20,7 +20,5 @@ ############################################################################## import hr_attendance_error -import hr_attendance_byweek -import hr_attendance_bymonth # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/wizard/hr_attendance_bymonth.py b/addons/hr_attendance/wizard/hr_attendance_bymonth.py deleted file mode 100644 index 93868bb2379..00000000000 --- a/addons/hr_attendance/wizard/hr_attendance_bymonth.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################### -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import time - -from openerp.osv import osv, fields - -class hr_attendance_bymonth(osv.osv_memory): - _name = 'hr.attendance.month' - _description = 'Print Monthly Attendance Report' - _columns = { - 'month': fields.selection([(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')], 'Month', required=True), - 'year': fields.integer('Year', required=True) - } - _defaults = { - 'month': lambda *a: time.gmtime()[1], - 'year': lambda *a: time.gmtime()[0], - } - - def print_report(self, cr, uid, ids, context=None): - datas = { - 'ids': [], - 'active_ids': context['active_ids'], - 'model': 'hr.employee', - 'form': self.read(cr, uid, ids)[0] - } - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'hr.attendance.bymonth', - 'datas': datas, - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml b/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml deleted file mode 100644 index d34a65fd05f..00000000000 --- a/addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - Attendances Report Monthly - hr.attendance.month - -
    - - - - -
    -
    - -
    -
    - - - Attendances By Month - ir.actions.act_window - hr.attendance.month - form - form - new - - - - - Attendances By Month - client_print_multi - - action - hr.employee - - -
    -
    diff --git a/addons/hr_attendance/wizard/hr_attendance_byweek.py b/addons/hr_attendance/wizard/hr_attendance_byweek.py deleted file mode 100644 index 963a2946ffa..00000000000 --- a/addons/hr_attendance/wizard/hr_attendance_byweek.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from datetime import datetime -from dateutil.relativedelta import relativedelta - -from openerp.osv import fields, osv - -class hr_attendance_byweek(osv.osv_memory): - _name = 'hr.attendance.week' - _description = 'Print Week Attendance Report' - _columns = { - 'init_date': fields.date('Starting Date', required=True), - 'end_date': fields.date('Ending Date', required=True) - } - _defaults = { - 'init_date': (datetime.today() - relativedelta(days=datetime.date(datetime.today()).weekday())).strftime('%Y-%m-%d'), - 'end_date': (datetime.today() + relativedelta(days=6 - datetime.date(datetime.today()).weekday())).strftime('%Y-%m-%d'), - } - - def print_report(self, cr, uid, ids, context=None): - datas = { - 'ids': [], - 'active_ids': context['active_ids'], - 'model': 'hr.employee', - 'form': self.read(cr, uid, ids)[0] - } - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'hr.attendance.allweeks', - 'datas': datas, - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/wizard/hr_attendance_byweek_view.xml b/addons/hr_attendance/wizard/hr_attendance_byweek_view.xml deleted file mode 100644 index accbf6304c5..00000000000 --- a/addons/hr_attendance/wizard/hr_attendance_byweek_view.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Attendances Report Weekly - hr.attendance.week - -
    - - - - -
    -
    - -
    -
    - - - Attendances By Week - ir.actions.act_window - hr.attendance.week - form - form - new - - - - - Attendances By Week - client_print_multi - - action - hr.employee - - -
    -
    From d2765da09cf63f833312d659fa892cfd0bad6032 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Thu, 24 Apr 2014 11:30:52 +0200 Subject: [PATCH 096/143] [FIX] hr_attendance: menuitem wording bzr revid: sle@openerp.com-20140424093052-eq0llqvty1s4bjf1 --- addons/hr_attendance/hr_attendance_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hr_attendance/hr_attendance_view.xml b/addons/hr_attendance/hr_attendance_view.xml index c2fdd0b0ae9..ae8a168a595 100644 --- a/addons/hr_attendance/hr_attendance_view.xml +++ b/addons/hr_attendance/hr_attendance_view.xml @@ -87,7 +87,7 @@ - Attendance + Attendance Analysis hr.attendance form graph From 5c69f3470d3f453dc3c5f34aa2315d7c603a9606 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Thu, 24 Apr 2014 11:38:00 +0200 Subject: [PATCH 097/143] [FIX] hr_attendance: removed useless xsl bzr revid: sle@openerp.com-20140424093800-cn3rtga12qk4g7wx --- .../report/hr_custom_default.xsl | 36 ------------------ addons/hr_attendance/report/hr_custom_rml.xsl | 37 ------------------- 2 files changed, 73 deletions(-) delete mode 100644 addons/hr_attendance/report/hr_custom_default.xsl delete mode 100644 addons/hr_attendance/report/hr_custom_rml.xsl diff --git a/addons/hr_attendance/report/hr_custom_default.xsl b/addons/hr_attendance/report/hr_custom_default.xsl deleted file mode 100644 index 2eda3a08f4b..00000000000 --- a/addons/hr_attendance/report/hr_custom_default.xsl +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - 1.3cm 19.3cm 28.5cm 19.3cm - - - - - - - - - - - - 1.3cm 19.3cm 28.5cm 19.3cm - - - - - - - - - - - diff --git a/addons/hr_attendance/report/hr_custom_rml.xsl b/addons/hr_attendance/report/hr_custom_rml.xsl deleted file mode 100644 index 64a4894613a..00000000000 --- a/addons/hr_attendance/report/hr_custom_rml.xsl +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - From 2949a395ba7960e8ec7c4aff9c9239b1895bd396 Mon Sep 17 00:00:00 2001 From: "Rakesh Sindhav (OpenERP)" Date: Thu, 24 Apr 2014 15:31:50 +0530 Subject: [PATCH 098/143] [IMP]: set the header to left side bzr revid: rsi@tinyerp.com-20140424100150-0as1tmhipxo8tfdn --- .../l10n_in_hr_payroll/views/report_payslipdetails.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml b/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml index 4d59b5b4178..426a71de1ee 100644 --- a/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml +++ b/addons/l10n_in_hr_payroll/views/report_payslipdetails.xml @@ -6,8 +6,8 @@
    -

    Pay Slip Details

    -
    ()
    +

    Pay Slip Details

    +

    Employee CodeEmployee Code DepartmentDepartment BankBank From 5eb2f28bb94fec1e55e3b204c2e744368a17df1f Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Thu, 24 Apr 2014 11:26:39 +0200 Subject: [PATCH 095/143] [REM] hr_attendance: removed attendance by week/month reports, rml and wizards bzr revid: sle@openerp.com-20140424092639-nlzxtx17jaa2w9p7 --- addons/hr_attendance/__openerp__.py | 2 - addons/hr_attendance/hr_attendance.py | 4 +- addons/hr_attendance/report/__init__.py | 2 - .../report/attendance_by_month.py | 196 ------------------ addons/hr_attendance/report/bymonth.xsl | 81 -------- addons/hr_attendance/report/timesheet.py | 127 ------------ addons/hr_attendance/report/timesheet.xsl | 155 -------------- .../test/hr_attendance_report.yml | 8 - addons/hr_attendance/wizard/__init__.py | 2 - .../wizard/hr_attendance_bymonth.py | 52 ----- .../wizard/hr_attendance_bymonth_view.xml | 42 ---- .../wizard/hr_attendance_byweek.py | 53 ----- .../wizard/hr_attendance_byweek_view.xml | 41 ---- 13 files changed, 3 insertions(+), 762 deletions(-) delete mode 100644 addons/hr_attendance/report/attendance_by_month.py delete mode 100644 addons/hr_attendance/report/bymonth.xsl delete mode 100644 addons/hr_attendance/report/timesheet.py delete mode 100644 addons/hr_attendance/report/timesheet.xsl delete mode 100644 addons/hr_attendance/wizard/hr_attendance_bymonth.py delete mode 100644 addons/hr_attendance/wizard/hr_attendance_bymonth_view.xml delete mode 100644 addons/hr_attendance/wizard/hr_attendance_byweek.py delete mode 100644 addons/hr_attendance/wizard/hr_attendance_byweek_view.xml diff --git a/addons/hr_attendance/__openerp__.py b/addons/hr_attendance/__openerp__.py index abdc1ad8cc1..7ff0a63a79b 100644 --- a/addons/hr_attendance/__openerp__.py +++ b/addons/hr_attendance/__openerp__.py @@ -39,8 +39,6 @@ actions(Sign in/Sign out) performed by them. 'security/ir.model.access.csv', 'hr_attendance_view.xml', 'hr_attendance_report.xml', - 'wizard/hr_attendance_bymonth_view.xml', - 'wizard/hr_attendance_byweek_view.xml', 'wizard/hr_attendance_error_view.xml', 'res_config_view.xml', 'views/report_attendanceerrors.xml', diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py index 7df5bb34c68..5495ebe4d25 100644 --- a/addons/hr_attendance/hr_attendance.py +++ b/addons/hr_attendance/hr_attendance.py @@ -25,6 +25,7 @@ from datetime import datetime from openerp.osv import fields, osv from openerp.tools.translate import _ + class hr_action_reason(osv.osv): _name = "hr.action.reason" _description = "Action Reason" @@ -41,6 +42,7 @@ def _employee_get(obj, cr, uid, context=None): ids = obj.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)], context=context) return ids and ids[0] or False + class hr_attendance(osv.osv): _name = "hr.attendance" _description = "Attendance" @@ -128,7 +130,7 @@ class hr_employee(osv.osv): for res in cr.fetchall(): result[res[1]] = res[0] == 'sign_in' and 'present' or 'absent' return result - + def _last_sign(self, cr, uid, ids, name, args, context=None): result = {} if not ids: diff --git a/addons/hr_attendance/report/__init__.py b/addons/hr_attendance/report/__init__.py index faa57ad2e95..9bb280eb645 100644 --- a/addons/hr_attendance/report/__init__.py +++ b/addons/hr_attendance/report/__init__.py @@ -20,7 +20,5 @@ ############################################################################## import attendance_errors -import attendance_by_month -import timesheet # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/report/attendance_by_month.py b/addons/hr_attendance/report/attendance_by_month.py deleted file mode 100644 index 8e8f95c81e1..00000000000 --- a/addons/hr_attendance/report/attendance_by_month.py +++ /dev/null @@ -1,196 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from datetime import datetime, timedelta -from dateutil.relativedelta import relativedelta -import time - -import openerp -from openerp.report import report_sxw -from openerp.report.interface import report_rml -from openerp.report.interface import toxml -from openerp.tools import to_xml, ustr -from openerp.tools.translate import _ - -one_day = relativedelta(days=1) -month2name = [0, 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] - -def hour2str(h): - hours = int(h) - minutes = int(round((h - hours) * 60, 0)) - return '%02dh%02d' % (hours, minutes) - -def lengthmonth(year, month): - if month == 2 and ((year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0))): - return 29 - return [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] - -class report_custom(report_rml): - - def create_xml(self, cr, uid, ids, datas, context=None): - registry = openerp.registry(cr.dbname) - obj_emp = registry['hr.employee'] - if context is None: - context = {} - month = datetime(datas['form']['year'], datas['form']['month'], 1) - emp_ids = datas['active_ids'] - user_xml = ['%s' % _(month2name[month.month]), '%s' % month.year] - if emp_ids: - for emp in obj_emp.read(cr, uid, emp_ids, ['name']): - stop, days_xml = False, [] - total_wh = 0.0 - user_repr = ''' - - %s - %%s - - ''' % (ustr(toxml(emp['name']))) - today, tomor = month, month + one_day - while today.month == month.month: - #### Work hour calculation - sql = ''' - select action, att.name - from hr_employee as emp inner join hr_attendance as att - on emp.id = att.employee_id - where att.name between %s and %s and emp.id = %s - order by att.name - ''' - cr.execute(sql, (today.strftime('%Y-%m-%d %H:%M:%S'), tomor.strftime('%Y-%m-%d %H:%M:%S'), emp['id'])) - attendences = cr.dictfetchall() - wh = 0.0 - # Fake sign ins/outs at week ends, to take attendances across week ends into account - if attendences and attendences[0]['action'] == 'sign_out': - attendences.insert(0, {'name': today.strftime('%Y-%m-%d %H:%M:%S'), 'action':'sign_in'}) - if attendences and attendences[-1]['action'] == 'sign_in': - attendences.append({'name': tomor.strftime('%Y-%m-%d %H:%M:%S'), 'action':'sign_out'}) - # sum up the attendances' durations - ldt = None - for att in attendences: - dt = datetime.strptime(att['name'], '%Y-%m-%d %H:%M:%S') - if ldt and att['action'] == 'sign_out': - if dt.date() > ldt.date(): - dt = ldt - wh += (float((dt - ldt).seconds)/60/60) - else: - ldt = dt - # Week xml representation - total_wh += wh - wh = hour2str(wh) - today_xml = '%s' % ((today - month).days+1, (wh)) - dy=(today - month).days+1 - days_xml.append(today_xml) - today, tomor = tomor, tomor + one_day - total_wh = hour2str(total_wh) - today_xml = '%s' % (total_wh) - days_xml.append(today_xml) - user_xml.append(user_repr % '\n'.join(days_xml)) - - rpt_obj = obj_emp - rml_obj=report_sxw.rml_parse(cr, uid, rpt_obj._name,context) - header_xml = ''' -
    - %s - %s -
    - ''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(registry['res.users'].browse(cr,uid,uid).company_id.name)) - - first_date = str(month) - som = datetime.strptime(first_date, '%Y-%m-%d %H:%M:%S') - eom = som + timedelta(int(dy)-1) - day_diff=eom-som - date_xml=[] - cell=1 - date_xml.append('') - if day_diff.days>=30: - date_xml += ['' % (x, _(som.replace(day=x).strftime('%a')),x-som.day+1) for x in range(som.day, lengthmonth(som.year, som.month)+1)] - else: - if day_diff.days>=(lengthmonth(som.year, som.month)-som.day): - date_xml += ['' % (x, _(som.replace(day=x).strftime('%a')),x-som.day+1) for x in range(som.day, lengthmonth(som.year, som.month)+1)] - else: - date_xml += ['' % (x, _(som.replace(day=x).strftime('%a')),x-som.day+1) for x in range(som.day, eom.day+1)] - cell=x-som.day+1 - day_diff1=day_diff.days-cell+1 - width_dict={} - month_dict={} - i=1 - j=1 - year=som.year - month=som.month - month_dict[j]=som.strftime('%B') - width_dict[j]=cell - - while day_diff1>0: - if month+i<=12: - if day_diff1 > lengthmonth(year,i+month): # Not on 30 else you have problems when entering 01-01-2009 for example - som1=datetime.date(year,month+i,1) - date_xml += ['' % (x, _(som1.replace(day=x).strftime('%a')),cell+x) for x in range(1, lengthmonth(year,i+month)+1)] - i=i+1 - j=j+1 - month_dict[j]=som1.strftime('%B') - cell=cell+x - width_dict[j]=x - else: - som1=datetime.date(year,month+i,1) - date_xml += ['' % (x, _(som1.replace(day=x).strftime('%a')),cell+x) for x in range(1, eom.day+1)] - i=i+1 - j=j+1 - month_dict[j]=som1.strftime('%B') - cell=cell+x - width_dict[j]=x - day_diff1=day_diff1-x - else: - years=year+1 - year=years - month=0 - i=1 - if day_diff1>=30: - som1=datetime.date(years,i,1) - date_xml += ['' % (x, _(som1.replace(day=x).strftime('%a')),cell+x) for x in range(1, lengthmonth(years,i)+1)] - i=i+1 - j=j+1 - month_dict[j]=som1.strftime('%B') - cell=cell+x - width_dict[j]=x - else: - som1=datetime.date(years,i,1) - i=i+1 - j=j+1 - month_dict[j]=som1.strftime('%B') - date_xml += ['' % (x, _(som1.replace(day=x).strftime('%a')),cell+x) for x in range(1, eom.day+1)] - cell=cell+x - width_dict[j]=x - day_diff1=day_diff1-x - date_xml += [''] - date_xml.append('') - date_xml.append('3.5cm%s,1.2cm\n' % (',0.74cm' * (int(dy)))) - xml = ''' - - %s - %s - %s - %s - - ''' % (header_xml,_('Attendances by Month'),'\n'.join(user_xml),date_xml) - return xml - -report_custom('report.hr.attendance.bymonth', 'hr.employee', '', 'addons/hr_attendance/report/bymonth.xsl') - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_attendance/report/bymonth.xsl b/addons/hr_attendance/report/bymonth.xsl deleted file mode 100644 index 0ec0a23cc8d..00000000000 --- a/addons/hr_attendance/report/bymonth.xsl +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - week - -
    - -
    - -
    - -
    From to MonTueWedThuFriSatSunTotal
    Worked hours - - - - - 0h00 - - - - - - - 0h00 - - - - - - - 0h00 - - - - - - - 0h00 - - - - - - - 0h00 - - - - - - - 0h00 - - - - - - - 0h00 - - - -
    @@ -43,7 +43,7 @@
    -
    Details by Salary Rule Category:
    +

    Details by Salary Rule Category

    @@ -54,7 +54,6 @@ -
    @@ -84,6 +83,8 @@
    + +

    Authorized signature

    From e5c1bf06a2ac350adf42eecfb3505d5633a5c319 Mon Sep 17 00:00:00 2001 From: Sunil Sharma Date: Thu, 24 Apr 2014 16:20:05 +0530 Subject: [PATCH 099/143] [imp]:remove br or text-center class then improve h2 or p tag bzr revid: ssh@tinyerp.com-20140424105005-bcg7ynx571h25w3w --- .../view/report_hr_yearly_salary_detail.xml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml index 13383817889..cc827bd6555 100644 --- a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml @@ -6,12 +6,10 @@
    -
    -
    From +

    +

    From - To -

    -
    + To

    From 1e81e20cca31baffc487c32cb0f677888f2c260c Mon Sep 17 00:00:00 2001 From: "Sunil Sharma (OpenERP)" Date: Thu, 24 Apr 2014 17:32:02 +0530 Subject: [PATCH 100/143] [IMP]: Change function condition. bzr revid: atp@tinyerp.com-20140424120202-jqbkr72y1a43dbpf --- .../view/report_hr_yearly_salary_detail.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml index cc827bd6555..ce148d5fbf9 100644 --- a/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/view/report_hr_yearly_salary_detail.xml @@ -10,7 +10,7 @@

    From To

    -
    Employee Code
    +
    -
    Employee Code @@ -18,7 +18,6 @@ Department @@ -73,7 +72,7 @@
    - + @@ -88,7 +87,6 @@ - From 90d0139ae1eee3ccd92140090847cb26dcd2aaa2 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Thu, 24 Apr 2014 14:47:03 +0200 Subject: [PATCH 101/143] [FIX] website tour: must retry running tour because in test mode some files are added after the first running try bzr revid: chm@openerp.com-20140424124703-qeft3n8xjmb1mvxn --- addons/website/static/src/js/website.tour.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 03b449479c4..2a661b4cc9b 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -87,6 +87,7 @@ var localStorage = window.localStorage; var T = website.Tour = { tours: {}, defaultDelay: 50, + retryRunningDelay: 1000, errorDelay: 5000, state: null, $element: null, @@ -129,6 +130,7 @@ var T = website.Tour = { step.waitFor = '.oe_overlay_options .oe_options:visible'; } + var snippet = step.element && step.element.match(/#oe_snippets (.*) \.oe_snippet_thumbnail/); if (snippet) { step.snippet = snippet[1]; @@ -145,6 +147,7 @@ var T = website.Tour = { if (tour.steps[index-1] && tour.steps[index-1].popover && tour.steps[index-1].popover.next) { var step = { + _title: "", id: index, waitNot: '.popover.tour.fade.in:visible' }; @@ -310,11 +313,11 @@ var T = website.Tour = { console.log("Tour Begin from url hash"); T.saveState(state.id, state.mode, state.step_id); } - if (!state.id || !T.tours[state.id]) { + if (!state.id) { return; } state.tour = T.tours[state.id]; - state.step = state.tour.steps[state.step_id === -1 ? 0 : state.step_id]; + state.step = state.tour && state.tour.steps[state.step_id === -1 ? 0 : state.step_id]; return state; }, error: function (step, message) { @@ -353,14 +356,17 @@ var T = website.Tour = { clearTimeout(T.testtimer); T.closePopover(); }, - testRunning: 0, running: function () { function run () { var state = T.getState(); - if (state) { + if (!state) return; + if (state.tour) { console.log("Tour '"+state.id+"' is running"); T.registerSteps(state.tour); T.nextStep(); + } else { + console.log("Tour '"+state.id+"' wait for running (tour undefined)"); + setTimeout(T.running, state.mode === "test" ? T.defaultDelay : T.retryRunningDelay); } } setTimeout(function () { From f3da22c0671d0fc2d4cd5a6aacb056bd51feab94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Thu, 24 Apr 2014 19:12:59 +0200 Subject: [PATCH 102/143] [IMP] point_of_sale, hw_scale: first commit for the hw_scale module, which handles scale connections for the POS bzr revid: fva@openerp.com-20140424171259-hi9ma6w0fkdfrqnv --- addons/hw_proxy/controllers/main.py | 37 ---- addons/hw_scale/__init__.py | 25 +++ addons/hw_scale/__openerp__.py | 45 ++++ addons/hw_scale/controllers/__init__.py | 3 + addons/hw_scale/controllers/main.py | 202 ++++++++++++++++++ addons/hw_scale/mettler.py | 100 +++++++++ addons/point_of_sale/static/src/js/devices.js | 42 +--- addons/point_of_sale/static/src/js/screens.js | 11 +- 8 files changed, 383 insertions(+), 82 deletions(-) create mode 100644 addons/hw_scale/__init__.py create mode 100644 addons/hw_scale/__openerp__.py create mode 100644 addons/hw_scale/controllers/__init__.py create mode 100644 addons/hw_scale/controllers/main.py create mode 100755 addons/hw_scale/mettler.py diff --git a/addons/hw_proxy/controllers/main.py b/addons/hw_proxy/controllers/main.py index ea9b45c1b35..c65c7966b7c 100644 --- a/addons/hw_proxy/controllers/main.py +++ b/addons/hw_proxy/controllers/main.py @@ -24,9 +24,6 @@ from openerp.addons.web.controllers.main import manifest_list, module_boot, html drivers = {} class Proxy(http.Controller): - def __init__(self): - self.scale = 'closed' - self.scale_weight = 0.0 def get_status(self): statuses = {} @@ -154,40 +151,6 @@ class Proxy(http.Controller): """ print "help_canceled" - @http.route('/hw_proxy/weighting_start', type='json', auth='none', cors='*') - def weighting_start(self): - if self.scale == 'closed': - print "Opening (Fake) Connection to Scale..." - self.scale = 'open' - self.scale_weight = 0.0 - time.sleep(0.1) - print "... Scale Open." - else: - print "WARNING: Scale already Connected !!!" - - @http.route('/hw_proxy/weighting_read_kg', type='json', auth='none', cors='*') - def weighting_read_kg(self): - if self.scale == 'open': - print "Reading Scale..." - time.sleep(0.025) - self.scale_weight += 0.01 - print "... Done." - return self.scale_weight - else: - print "WARNING: Reading closed scale !!!" - return 0.0 - - @http.route('/hw_proxy/weighting_end', type='json', auth='none', cors='*') - def weighting_end(self): - if self.scale == 'open': - print "Closing Connection to Scale ..." - self.scale = 'closed' - self.scale_weight = 0.0 - time.sleep(0.1) - print "... Scale Closed." - else: - print "WARNING: Scale already Closed !!!" - @http.route('/hw_proxy/payment_request', type='json', auth='none', cors='*') def payment_request(self, price): """ diff --git a/addons/hw_scale/__init__.py b/addons/hw_scale/__init__.py new file mode 100644 index 00000000000..a208bc1c551 --- /dev/null +++ b/addons/hw_scale/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import controllers + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/hw_scale/__openerp__.py b/addons/hw_scale/__openerp__.py new file mode 100644 index 00000000000..c986d88e44c --- /dev/null +++ b/addons/hw_scale/__openerp__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + + +{ + 'name': 'Weighting Scale Hardware Driver', + 'version': '1.0', + 'category': 'Hardware Drivers', + 'sequence': 6, + 'summary': 'Hardware Driver for Weighting Scales', + 'description': """ +Barcode Scanner Hardware Driver +================================ + +This module allows the point of sale to connect to a scale using a USB HSM Serial Scale Interface, +such as the Mettler Toledo Ariva. + +""", + 'author': 'OpenERP SA', + 'depends': ['hw_proxy'], + 'test': [ + ], + 'installable': True, + 'auto_install': False, +} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hw_scale/controllers/__init__.py b/addons/hw_scale/controllers/__init__.py new file mode 100644 index 00000000000..b5f0bcc9ec6 --- /dev/null +++ b/addons/hw_scale/controllers/__init__.py @@ -0,0 +1,3 @@ +import main +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/hw_scale/controllers/main.py b/addons/hw_scale/controllers/main.py new file mode 100644 index 00000000000..4c8e1ffd0cd --- /dev/null +++ b/addons/hw_scale/controllers/main.py @@ -0,0 +1,202 @@ +# -*- coding: utf-8 -*- +import logging +import os +import time +from os import listdir +from os.path import join +from threading import Thread, Lock +from select import select +from Queue import Queue, Empty +from bitstring import BitArray + +import openerp +import openerp.addons.hw_proxy.controllers.main as hw_proxy +from openerp import http +from openerp.http import request +from openerp.tools.translate import _ + +_logger = logging.getLogger(__name__) + +try: + import serial +except ImportError: + _logger.error('OpenERP module hw_scale depends on the pyserial python module') + serial = None + + +class Scale(Thread): + def __init__(self): + Thread.__init__(self) + self.lock = Lock() + self.scalelock = Lock() + self.status = {'status':'connecting', 'messages':[]} + self.input_dir = '/dev/serial/by-id/' + self.weight = 0 + self.weight_info = 'ok' + self.device = None + + def lockedstart(self): + with self.lock: + if not self.isAlive(): + self.daemon = True + self.start() + + def set_status(self, status, message = None): + if status == self.status['status']: + if message != None and message != self.status['messages'][-1]: + self.status['messages'].append(message) + else: + self.status['status'] = status + if message: + self.status['messages'] = [message] + else: + self.status['messages'] = [] + + if status == 'error' and message: + _logger.error('Scale Error: '+message) + elif status == 'disconnected' and message: + _logger.warning('Disconnected Scale: '+message) + + def get_device(self): + try: + devices = [ device for device in listdir(self.input_dir)] + scales = [ device for device in devices if ('mettler' in device.lower()) or ('toledo' in device.lower()) ] + if len(scales) > 0: + print join(self.input_dir,scales[0]) + self.set_status('connected','Connected to '+scales[0]) +# s = serial.Serial("/dev/serial/by-id/usb-METTLER_TOLEDO_15_kg_DI_Firmware_CKOR_F_Ser_CDC-if00",baudrate=9600,bytesize=serial.SEVENBITS,parity=serial.PARITY_EVEN) + return serial.Serial(join(self.input_dir,scales[0]), + baudrate = 9600, + bytesize = serial.SEVENBITS, + stopbits = serial.STOPBITS_ONE, + parity = serial.PARITY_EVEN, + #xonxoff = serial.XON, + timeout = 0.01, + writeTimeout= 0.01) + else: + self.set_status('disconnected','Scale Not Found') + return None + except Exception as e: + self.set_status('error',str(e)) + return None + + def get_weight(self): + self.lockedstart() + return self.weight + + def get_weight_info(self): + self.lockedstart() + return self.weight_info + + def get_status(self): + self.lockedstart() + return self.status + + def read_weight(self): + with self.scalelock: + if self.device: + try: + self.device.write('W') + time.sleep(0.2) + answer = [] + + while True: + char = self.device.read(1) + if not char: + break + else: + answer.append(char) + + if '?' in answer: + stat = ord(answer[answer.index('?')+1]) + if stat == 0: + self.weight_info = 'ok' + else: + self.weight_info = [] + if stat & 1 : + self.weight_info.append('moving') + if stat & 1 << 1: + self.weight_info.append('over_capacity') + if stat & 1 << 2: + self.weight_info.append('negative') + if stat & 1 << 3: + self.weight_info.append('outside_zero_capture_range') + if stat & 1 << 4: + self.weight_info.append('center_of_zero') + if stat & 1 << 5: + self.weight_info.append('net_weight') + else: + answer = answer[1:-1] + if 'N' in answer: + answer = answer[0:-1] + self.weight = float(''.join(answer)) + + except Exception as e: + self.set_status('error',str(e)) + self.device = None + + def set_zero(self): + with self.scalelock: + if self.device: + try: + self.device.write('Z') + except Exception as e: + self.set_status('error',str(e)) + self.device = None + + def set_tare(self): + with self.scalelock: + if self.device: + try: + self.device.write('T') + except Exception as e: + self.set_status('error',str(e)) + self.device = None + + def clear_tare(self): + with self.scalelock: + if self.device: + try: + self.device.write('C') + except Exception as e: + self.set_status('error',str(e)) + self.device = None + + def run(self): + self.device = None + + while True: + if self.device: + self.read_weight() + time.sleep(0.05) + else: + with self.scalelock: + self.device = self.get_device() + if not self.device: + time.sleep(5) + +s = Scale() + +hw_proxy.drivers['scale'] = s + +class ScaleDriver(hw_proxy.Proxy): + @http.route('/hw_proxy/scale_read/', type='json', auth='none', cors='*') + def scale_read(self): + return {'weight':s.get_weight(), 'unit':'kg', 'info':s.get_weight_info()} + + @http.route('/hw_proxy/scale_zero/', type='json', auth='none', cors='*') + def scale_zero(self): + s.set_zero() + return True + + @http.route('/hw_proxy/scale_tare/', type='json', auth='none', cors='*') + def scale_tare(self): + s.set_tare() + return True + + @http.route('/hw_proxy/scale_clear_tare/', type='json', auth='none', cors='*') + def scale_clear_tare(self): + s.clear_tare() + return True + + diff --git a/addons/hw_scale/mettler.py b/addons/hw_scale/mettler.py new file mode 100755 index 00000000000..5c5df97a60e --- /dev/null +++ b/addons/hw_scale/mettler.py @@ -0,0 +1,100 @@ +#!/usr/bin/python +import serial +import time +import sys +from bitstring import BitArray + +path = "/dev/serial/by-id/usb-METTLER_TOLEDO_15_kg_DI_Firmware_CKOR_F_Ser_CDC-if00" + +device = serial.Serial(path, + baudrate = 9600, + bytesize = serial.SEVENBITS, + stopbits = serial.STOPBITS_ONE, + parity = serial.PARITY_EVEN, + #xonxoff = serial.XON, + timeout = 0.1, + writeTimeout= 0.1) + +if len(sys.argv) == 1: + cmd = 'weight' +else: + cmd = sys.argv[1] + +def write(stuff): + print stuff + device.write(stuff) + +def read_answer(): + answer = [] + while True: + char = device.read(1) + if not char: + return answer + else: + answer.append(char) + +def print_answer(answer): + print answer + if '?' in answer: + status = answer[answer.index('?')+1] + print 'status_bits: '+BitArray(int=ord(status),length=8).bin + + +if cmd == 'weight': + while True: + time.sleep(0.25) + write('W') + time.sleep(0.25) + print_answer(read_answer()) + +if cmd == 'interactive': + weight = 0 + status = '' + while True: + time.sleep(0.25) + device.write('W') + answer = read_answer() + if '?' in answer: + oldstatus = status + b = answer[answer.index('?')+1] + if b == '\x00' or b == ' ': + pass # ignore status + elif b == 'B': + status = 'too_heavy' + elif b == 'D': + status = 'negative' + elif b == 'A' or b == 'Q' or b == '\x01': + status = 'moving' + else: + status = 'unknown' + print b.__repr__(), BitArray(int=ord(b),length=8).bin + if oldstatus != status: + print status + else: + oldweight = weight + answer = answer[1:-1] + if 'N' in answer: + answer = answer[0:-1] + weight = float(''.join(answer)) + if oldweight != weight: + print weight + + +elif cmd == 'zero': + time.sleep(1) + write('Z') + time.sleep(1) + print_answer(read_answer()) + +elif cmd == 'test': + time.sleep(1) + write('A') + time.sleep(1) + write('B') + time.sleep(1) + answer = read_answer() + if '@' in answer: + print 'all test passed' + else: + print_answer(answer) + diff --git a/addons/point_of_sale/static/src/js/devices.js b/addons/point_of_sale/static/src/js/devices.js index f46b156371c..316aea50e43 100644 --- a/addons/point_of_sale/static/src/js/devices.js +++ b/addons/point_of_sale/static/src/js/devices.js @@ -384,47 +384,17 @@ function openerp_pos_devices(instance,module){ //module is instance.point_of_sal return this.message('help_canceled'); }, - //the client is starting to weight - weighting_start: function(){ - var ret = new $.Deferred(); - if(!this.weighting){ - this.weighting = true; - this.message('weighting_start').always(function(){ - ret.resolve(); - }); - }else{ - console.error('Weighting already started!!!'); - ret.resolve(); - } - return ret; - }, - - // the client has finished weighting products - weighting_end: function(){ - var ret = new $.Deferred(); - if(this.weighting){ - this.weighting = false; - this.message('weighting_end').always(function(){ - ret.resolve(); - }); - }else{ - console.error('Weighting already ended !!!'); - ret.resolve(); - } - return ret; - }, - - //returns the weight on the scale. - // is called at regular interval (up to 10x/sec) between a weighting_start() - // and a weighting_end() - weighting_read_kg: function(){ + // returns the weight on the scale. + scale_read: function(){ var self = this; var ret = new $.Deferred(); - this.message('weighting_read_kg',{}) + console.log('scale_read'); + this.message('scale_read',{}) .then(function(weight){ + console.log(weight) ret.resolve(self.use_debug_weight ? self.debug_weight : weight); }, function(){ //failed to read weight - ret.resolve(self.use_debug_weight ? self.debug_weight : 0.0); + ret.resolve(self.use_debug_weight ? self.debug_weight : {weight:0.0, info:'ok'}); }); return ret; }, diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index 1d6f018ae1b..c58e7d860a0 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -526,12 +526,8 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa }); queue.schedule(function(){ - return self.pos.proxy.weighting_start() - },{ important: true }); - - queue.schedule(function(){ - return self.pos.proxy.weighting_read_kg().then(function(weight){ - self.set_weight(weight); + return self.pos.proxy.scale_read().then(function(weight){ + self.set_weight(weight.weight); }); },{duration:50, repeat: true}); @@ -584,9 +580,6 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa $('body').off('keyup',this.hotkey_handler); this.pos.proxy_queue.clear(); - this.pos.proxy_queue.schedule(function(){ - self.pos.proxy.weighting_end(); - },{ important: true }); }, }); From e2aa0707bb075052b0dfa6b843885e73d9fe6692 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Fri, 25 Apr 2014 09:46:41 +0530 Subject: [PATCH 103/143] [FIX]: ADD formatLang function in date field. use h2 tag in report title. bzr revid: atp@tinyerp.com-20140425041641-vk95pdxb8w3034ij --- .../views/report_hr_yearly_salary_detail.xml | 8 +++----- .../l10n_in_hr_payroll/views/report_hrsalarybymonth.xml | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml index ce148d5fbf9..91d93c3b73f 100644 --- a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml @@ -8,8 +8,8 @@

    From - - To

    + + To

    Total
    Allowances with Basic:
    @@ -102,8 +102,7 @@ - - + @@ -111,7 +110,6 @@ -
    Employee Code
    Deductions:
    diff --git a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml index 57fadad5865..2f1f2ac8a9d 100644 --- a/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml +++ b/addons/l10n_in_hr_payroll/views/report_hrsalarybymonth.xml @@ -6,8 +6,8 @@
    -

    Yearly Salary Details

    -

    +

    Yearly Salary Details

    +

    From To of Category

    From be912b1d4622e541a6043c8ddf6dd4cabe3cd086 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Fri, 25 Apr 2014 09:51:48 +0530 Subject: [PATCH 104/143] [FIX]: Add qweb xml into openerp.py file bzr revid: atp@tinyerp.com-20140425042148-jkldr55vvxfrxnmy --- addons/l10n_in_hr_payroll/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/l10n_in_hr_payroll/__openerp__.py b/addons/l10n_in_hr_payroll/__openerp__.py index 61c4e11edaa..122ff26243c 100644 --- a/addons/l10n_in_hr_payroll/__openerp__.py +++ b/addons/l10n_in_hr_payroll/__openerp__.py @@ -55,7 +55,7 @@ Indian Payroll Salary Rules. 'wizard/hr_yearly_salary_detail_view.xml', 'report/payment_advice_report_view.xml', 'report/payslip_report_view.xml', - 'view/report_hr_yearly_salary_detail.xml', + 'views/report_hr_yearly_salary_detail.xml', ], 'test': [ From 1fadb254d5cd404996e11a8abc249b32a8e3bc98 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Fri, 25 Apr 2014 13:07:19 +0530 Subject: [PATCH 105/143] [FIX]: Fix months count in yearly salary details bzr revid: atp@tinyerp.com-20140425073719-7nlk18wuoxx3s39o --- .../views/report_hr_yearly_salary_detail.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml index 91d93c3b73f..c231587ab77 100644 --- a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml @@ -3,9 +3,9 @@ From 775e553d5a9b7abb1218bb36b22bad03221d3049 Mon Sep 17 00:00:00 2001 From: "Chirag Dodiya (OpenERP)" Date: Fri, 25 Apr 2014 15:43:40 +0530 Subject: [PATCH 106/143] [IMP]Improved code for add

    tag bzr revid: cod@tinyerp.com-20140425101340-znewo5agt8vdl5mw --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 5207794bb39..1db4112d2a4 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3365,7 +3365,7 @@ instance.web.form.M2ODialog = instance.web.Dialog.extend({ start: function() { var self = this; var text = _.str.sprintf(_t("You are creating a new %s, are you sure it does not exist yet?"), self.name); - $( "p" ).text( text ); + this.$("p").text( text ); this.$buttons.html(QWeb.render("M2ODialog.buttons")); this.$("input").val(this.getParent().last_query); this.$buttons.find(".oe_form_m2o_qc_button").click(function(){ From 49fe785e642e5586d965064a56d61d816b2d4911 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Fri, 25 Apr 2014 13:32:28 +0200 Subject: [PATCH 107/143] [REM] hr_timesheet: removed xsl/models of user(s) timesheet reports as they are not available since rev 9064 revid:ged@openerp.com-20140127161718-uo6pperke86pqq5v. They are already replaced by graphviews. bzr revid: sle@openerp.com-20140425113228-obzblo2nmkmo2q58 --- addons/hr_timesheet/__init__.py | 1 - addons/hr_timesheet/__openerp__.py | 2 - addons/hr_timesheet/hr_timesheet_report.xml | 9 -- addons/hr_timesheet/hr_timesheet_wizard.xml | 5 - addons/hr_timesheet/report/__init__.py | 26 ---- addons/hr_timesheet/report/custom_default.xsl | 36 ----- addons/hr_timesheet/report/custom_rml.xsl | 37 ------ addons/hr_timesheet/report/user_timesheet.py | 124 ------------------ addons/hr_timesheet/report/user_timesheet.xsl | 123 ----------------- addons/hr_timesheet/report/users_timesheet.py | 123 ----------------- .../hr_timesheet/report/users_timesheet.xsl | 114 ---------------- 11 files changed, 600 deletions(-) delete mode 100644 addons/hr_timesheet/hr_timesheet_report.xml delete mode 100644 addons/hr_timesheet/hr_timesheet_wizard.xml delete mode 100644 addons/hr_timesheet/report/__init__.py delete mode 100644 addons/hr_timesheet/report/custom_default.xsl delete mode 100644 addons/hr_timesheet/report/custom_rml.xsl delete mode 100644 addons/hr_timesheet/report/user_timesheet.py delete mode 100644 addons/hr_timesheet/report/user_timesheet.xsl delete mode 100644 addons/hr_timesheet/report/users_timesheet.py delete mode 100644 addons/hr_timesheet/report/users_timesheet.xsl diff --git a/addons/hr_timesheet/__init__.py b/addons/hr_timesheet/__init__.py index f29aca0a003..0ba28b1946c 100644 --- a/addons/hr_timesheet/__init__.py +++ b/addons/hr_timesheet/__init__.py @@ -21,7 +21,6 @@ import hr_timesheet import wizard -import report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet/__openerp__.py b/addons/hr_timesheet/__openerp__.py index 6105271be77..411aac660b4 100644 --- a/addons/hr_timesheet/__openerp__.py +++ b/addons/hr_timesheet/__openerp__.py @@ -46,8 +46,6 @@ up a management by affair. 'security/ir.model.access.csv', 'security/hr_timesheet_security.xml', 'hr_timesheet_view.xml', - 'hr_timesheet_report.xml', - 'hr_timesheet_wizard.xml', 'process/hr_timesheet_process.xml', 'wizard/hr_timesheet_sign_in_out_view.xml', 'hr_timesheet_installer.xml', diff --git a/addons/hr_timesheet/hr_timesheet_report.xml b/addons/hr_timesheet/hr_timesheet_report.xml deleted file mode 100644 index 487dcd592bd..00000000000 --- a/addons/hr_timesheet/hr_timesheet_report.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/addons/hr_timesheet/hr_timesheet_wizard.xml b/addons/hr_timesheet/hr_timesheet_wizard.xml deleted file mode 100644 index ebc084668b7..00000000000 --- a/addons/hr_timesheet/hr_timesheet_wizard.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/addons/hr_timesheet/report/__init__.py b/addons/hr_timesheet/report/__init__.py deleted file mode 100644 index 8304c90421d..00000000000 --- a/addons/hr_timesheet/report/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import user_timesheet -import users_timesheet - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet/report/custom_default.xsl b/addons/hr_timesheet/report/custom_default.xsl deleted file mode 100644 index 2eda3a08f4b..00000000000 --- a/addons/hr_timesheet/report/custom_default.xsl +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - 1.3cm 19.3cm 28.5cm 19.3cm - - - - - - - - - - - - 1.3cm 19.3cm 28.5cm 19.3cm - - - - - - - - - - - diff --git a/addons/hr_timesheet/report/custom_rml.xsl b/addons/hr_timesheet/report/custom_rml.xsl deleted file mode 100644 index 64a4894613a..00000000000 --- a/addons/hr_timesheet/report/custom_rml.xsl +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/hr_timesheet/report/user_timesheet.py b/addons/hr_timesheet/report/user_timesheet.py deleted file mode 100644 index 63edf3cc398..00000000000 --- a/addons/hr_timesheet/report/user_timesheet.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import datetime -import time - -import openerp -from openerp.report.interface import report_rml -from openerp.report.interface import toxml -from openerp.tools.translate import _ -from openerp.report import report_sxw -from openerp.tools import ustr -from openerp.tools import to_xml - -def lengthmonth(year, month): - if month == 2 and ((year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0))): - return 29 - return [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] - -class report_custom(report_rml): - - def get_month_name(self, cr, uid, month, context=None): - _months = {1:_("January"), 2:_("February"), 3:_("March"), 4:_("April"), 5:_("May"), 6:_("June"), 7:_("July"), 8:_("August"), 9:_("September"), 10:_("October"), 11:_("November"), 12:_("December")} - return _months[month] - def get_weekday_name(self, cr, uid, weekday, context=None): - _weekdays = {1:_('Mon'), 2:_('Tue'), 3:_('Wed'), 4:_('Thu'), 5:_('Fri'), 6:_('Sat'), 7:_('Sun')} - return _weekdays[weekday] - - def create_xml(self, cr, uid, ids, data, context): - registry = openerp.registry(cr.dbname) - - # Get the user id from the selected employee record - emp_id = data['form']['employee_id'] - emp_obj = registry['hr.employee'] - user_id = emp_obj.browse(cr, uid, emp_id).user_id.id - empl_name = emp_obj.browse(cr, uid, emp_id).name - - # Computing the dates (start of month: som, and end of month: eom) - som = datetime.date(data['form']['year'], data['form']['month'], 1) - eom = som + datetime.timedelta(lengthmonth(som.year, som.month)) - - date_xml = ['' % (self.get_month_name(cr, uid, som.month, context=context), som.year), ''] - date_xml += ['' % (x, self.get_weekday_name(cr, uid, som.replace(day=x).weekday()+1, context=context), som.replace(day=x).weekday()+1) for x in range(1, lengthmonth(som.year, som.month)+1)] - - date_xml.append('') - date_xml.append('2.5cm%s,2cm\n' % (',0.7cm' * lengthmonth(som.year, som.month))) - - # Sum attendence by account, then by day - accounts = {} - header_xml = '' - if user_id: - # Computing the attendence by analytical account - cr.execute( - "select line.date, (unit_amount / unit.factor) as amount, account_id, account.name "\ - "from account_analytic_line as line, hr_analytic_timesheet as hr, "\ - "account_analytic_account as account, product_uom as unit "\ - "where hr.line_id=line.id and line.account_id=account.id "\ - "and product_uom_id = unit.id "\ - "and line.user_id=%s and line.date >= %s and line.date < %s " - "order by line.date", - (user_id, som.strftime('%Y-%m-%d'), eom.strftime('%Y-%m-%d'))) - - for presence in cr.dictfetchall(): - day = int(presence['date'][-2:]) - account = accounts.setdefault((presence['account_id'], presence['name']), {}) - account[day] = account.get(day, 0.0) + presence['amount'] - - xml = ''' - - %.2f - - ''' - rpt_obj = registry['hr.employee'] - rml_obj = report_sxw.rml_parse(cr, uid, rpt_obj._name,context) - if user_id: - header_xml = ''' -

    - %s - %s -
    - ''' % (str(rml_obj.formatLang(time.strftime("%Y-%m-%d"),date=True))+' ' + str(time.strftime("%H:%M")),to_xml(registry['res.users'].browse(cr,uid,user_id).company_id.name)) - - account_xml = [] - for account, telems in accounts.iteritems(): - aid, aname = account - aname = registry['account.analytic.account'].name_get(cr, uid, [aid], context) - aname = aname[0][1] - - account_xml.append('' % (aid, toxml(aname))) - account_xml.append('\n'.join([xml % (day, amount) for day, amount in telems.iteritems()])) - account_xml.append('') - - # Computing the xml - xml = ''' - - %s - %s - %s - - ''' % (header_xml, ustr(toxml(empl_name)), '\n'.join(date_xml) + '\n'.join(account_xml)) - return xml - -report_custom('report.hr.analytical.timesheet', 'hr.employee', '', 'addons/hr_timesheet/report/user_timesheet.xsl') - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet/report/user_timesheet.xsl b/addons/hr_timesheet/report/user_timesheet.xsl deleted file mode 100644 index b58e8af33b2..00000000000 --- a/addons/hr_timesheet/report/user_timesheet.xsl +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - lightgrey - - - ,0 - - - - ,-1 - - - - - - - - - - - - - - Timesheet by Employee - - - - - month - -
    - -
    - - Total
    Sum - - - - glande - - - normal_people - - - esclave - - - - - - -
    - - - - - -
    - -
    - - Total
    - - - - glande - - - normal_people - - - esclave - - - - - - -
    Total
    Total
    Allowances with Basic:
    Deductions:
    From d75153f990f45ef6639637139bccef77a4a8a7ce Mon Sep 17 00:00:00 2001 From: Sunil Sharma Date: Fri, 25 Apr 2014 18:39:34 +0530 Subject: [PATCH 112/143] [imp]:improve title for allowances with basic bzr revid: ssh@tinyerp.com-20140425130934-y3oho46frq1ss4p4 --- .../l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml index 4c7f41c3bde..bf9de12125e 100644 --- a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml @@ -88,6 +88,7 @@ + Allowances with Basic: From 1c1d9eee500a79b6db699e4fee39bbc629a6f9a7 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Fri, 25 Apr 2014 22:00:22 +0530 Subject: [PATCH 113/143] [ADD]: Add payroll advice report bzr revid: atp@tinyerp.com-20140425163022-q4fw9zcx0f7n35ox --- addons/l10n_in_hr_payroll/__openerp__.py | 2 +- .../l10n_in_hr_payroll_report.xml | 6 +- .../report/report_payroll_advice.py | 6 +- .../report/report_payroll_advice.rml | 425 ------------------ .../views/report_payrolladvice.xml | 92 ++++ 5 files changed, 101 insertions(+), 430 deletions(-) delete mode 100644 addons/l10n_in_hr_payroll/report/report_payroll_advice.rml create mode 100644 addons/l10n_in_hr_payroll/views/report_payrolladvice.xml diff --git a/addons/l10n_in_hr_payroll/__openerp__.py b/addons/l10n_in_hr_payroll/__openerp__.py index 122ff26243c..eb6b8d4165a 100644 --- a/addons/l10n_in_hr_payroll/__openerp__.py +++ b/addons/l10n_in_hr_payroll/__openerp__.py @@ -56,7 +56,7 @@ Indian Payroll Salary Rules. 'report/payment_advice_report_view.xml', 'report/payslip_report_view.xml', 'views/report_hr_yearly_salary_detail.xml', - + 'views/report_payrolladvice.xml', ], 'test': [ 'test/payment_advice.yml', diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml index 3e1e8e529c5..b6c04794e8a 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml @@ -14,9 +14,9 @@ auto="False" id="payroll_advice" model="hr.payroll.advice" - name="payroll.advice" - rml="l10n_in_hr_payroll/report/report_payroll_advice.rml" - string="Print Advice" /> + report_type="qweb-pdf" + name="l10n_in_hr_payroll.report_payrolladvice" + file="l10n_in_hr_payroll.report_payrolladvice"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[repeatIn(objects,'o')]] - - - - [[ formatLang(time.strftime('%Y-%m-%d'),date=True) ]] - - - - - - - - - - - - - - To, - The Manager - - - - - - - - - - [[ o.bank_id.name ]] Bank - - - - - - - - - - - - - Dear Sir/Madam, - - - - - - - - - - - - Payment Advice from [[ o.name ]] A/C no. [[ o.company_id.bank_ids and o.company_id.bank_ids[0].acc_number ]] form period [[ get_month(o.date)['from_name'] ]] to [[ get_month(o.date)['to_name'] ]] - - - - - - - [[ o.note ]] - - - - - - - [[ o.neft == True and removeParentNode('blockTable') ]] - - - SI. No. - - - Name of the Employe - - - Bank Account No. - - - By Salary - - - C/D - - - -
    - [[ repeatIn(get_detail(o.line_ids),'line') ]] - [[ o.neft == True and removeParentNode('blockTable') ]] - - - - . - - - - - [[ line['name'] ]] - - - [[ line['acc_no'] ]] - - - [[formatLang(line['bysal'], currency_obj = company.currency_id) ]] - - - [[ line['debit_credit'] ]] - - - -
    - [[ o.neft != True and removeParentNode('blockTable') ]] - - - SI. No. - - - Name of the Employe - - - Bank Account No. - - - IFSC Code - - - By Salary - - - C/D - - - -
    - [[ repeatIn(get_detail(o.line_ids),'line') ]] - [[ o.neft !=True and removeParentNode('blockTable') ]] - - - - . - - - - [[ line['name'] ]] - - - [[ line['acc_no'] ]] - - - [[ line['ifsc_code'] ]] - - - [[formatLang(line['bysal'], currency_obj = company.currency_id) ]] - - - [[ line['debit_credit'] ]] - - - -
    - [[ o.neft == True and removeParentNode('blockTable') ]] - - - - - - - - - - - - - Total : [[ o.line_ids==[] and removeParentNode('para') ]] - - - - [[ o.line_ids==[] and removeParentNode('para') ]][[ formatLang(get_bysal_total(), currency_obj = company.currency_id) ]] - - - - - - - - - [[ o.neft !=True and removeParentNode('blockTable') ]] - - - - - - - - - - - - - Total : [[ o.line_ids==[] and removeParentNode('para') ]] - - - - [[ o.line_ids==[] and removeParentNode('para') ]][[ formatLang(get_bysal_total(), currency_obj = company.currency_id) ]] - - - - - - - - - - - - - - - Yours Sincerely - - - - - - - - - - For [[ company.name ]] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Authorized Signature - - - - - - - - - - - - - - -
    -
    diff --git a/addons/l10n_in_hr_payroll/views/report_payrolladvice.xml b/addons/l10n_in_hr_payroll/views/report_payrolladvice.xml new file mode 100644 index 00000000000..03bb91f567d --- /dev/null +++ b/addons/l10n_in_hr_payroll/views/report_payrolladvice.xml @@ -0,0 +1,92 @@ + + + + + + \ No newline at end of file From 105331f12a19fba7561f84bd64f8d7d2a2a0f08d Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Fri, 25 Apr 2014 22:35:24 +0530 Subject: [PATCH 114/143] [FIX]: import osv file in report file. add stringin reportxml file bzr revid: atp@tinyerp.com-20140425170524-fev2rr0uhycalp9h --- addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml | 3 ++- addons/l10n_in_hr_payroll/report/report_payroll_advice.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml index b6c04794e8a..9cf41633d50 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml @@ -11,9 +11,10 @@ file="l10n_in_hr_payroll.report_payslipdetails" /> diff --git a/addons/l10n_in_hr_payroll/report/report_payroll_advice.py b/addons/l10n_in_hr_payroll/report/report_payroll_advice.py index c2efe496387..41f4b5880d3 100644 --- a/addons/l10n_in_hr_payroll/report/report_payroll_advice.py +++ b/addons/l10n_in_hr_payroll/report/report_payroll_advice.py @@ -23,7 +23,7 @@ import time from datetime import datetime - +from openerp.osv import osv from openerp.report import report_sxw from openerp.tools import amount_to_text_en From ae858f4d68fa74629b2eff810c1c75754f4f2cb1 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Fri, 25 Apr 2014 23:22:30 +0530 Subject: [PATCH 115/143] [IMP]: Rename report name report_hryearly salary bzr revid: atp@tinyerp.com-20140425175230-sctyfvvn87c6exm9 --- addons/l10n_in_hr_payroll/__openerp__.py | 2 +- .../l10n_in_hr_payroll_report.xml | 4 +- .../report/report_hr_yearly_salary_detail.py | 4 +- ...y_detail.xml => report_hryearlysalary.xml} | 73 +++++++++---------- .../wizard/hr_yearly_salary_detail.py | 2 +- 5 files changed, 42 insertions(+), 43 deletions(-) rename addons/l10n_in_hr_payroll/views/{report_hr_yearly_salary_detail.xml => report_hryearlysalary.xml} (63%) diff --git a/addons/l10n_in_hr_payroll/__openerp__.py b/addons/l10n_in_hr_payroll/__openerp__.py index eb6b8d4165a..c56417fbce4 100644 --- a/addons/l10n_in_hr_payroll/__openerp__.py +++ b/addons/l10n_in_hr_payroll/__openerp__.py @@ -55,7 +55,7 @@ Indian Payroll Salary Rules. 'wizard/hr_yearly_salary_detail_view.xml', 'report/payment_advice_report_view.xml', 'report/payslip_report_view.xml', - 'views/report_hr_yearly_salary_detail.xml', + 'views/report_hryearlysalary.xml', 'views/report_payrolladvice.xml', ], 'test': [ diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml index 9cf41633d50..427e9111017 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll_report.xml @@ -31,8 +31,8 @@ auto="False" id="yearly_salary" model="yearly.salary.detail" - name="l10n_in_hr_payroll.report_hr_yearly_salary" - file="l10n_in_hr_payroll.report_hr_yearly_salary" + name="l10n_in_hr_payroll.report_hryearlysalary" + file="l10n_in_hr_payroll.report_hryearlysalary" report_type="qweb-pdf" string="Yearly Salary by Employee" /> diff --git a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py index e531a335e7c..e396e611a3f 100644 --- a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py +++ b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.py @@ -161,9 +161,9 @@ class employees_yearly_salary_report(report_sxw.rml_parse): return self.total class wrapped_report_payslip(osv.AbstractModel): - _name = 'report.l10n_in_hr_payroll.report_hr_yearly_salary' + _name = 'report.l10n_in_hr_payroll.report_hryearlysalary' _inherit = 'report.abstract_report' - _template = 'l10n_in_hr_payroll.report_hr_yearly_salary' + _template = 'l10n_in_hr_payroll.report_hryearlysalary' _wrapped_report_class = employees_yearly_salary_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml b/addons/l10n_in_hr_payroll/views/report_hryearlysalary.xml similarity index 63% rename from addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml rename to addons/l10n_in_hr_payroll/views/report_hryearlysalary.xml index bf9de12125e..189dfd29e5a 100644 --- a/addons/l10n_in_hr_payroll/views/report_hr_yearly_salary_detail.xml +++ b/addons/l10n_in_hr_payroll/views/report_hryearlysalary.xml @@ -1,7 +1,7 @@ -