summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Delavallée <tde@openerp.com>2012-09-20 16:49:00 +0200
committerThibault Delavallée <tde@openerp.com>2012-09-20 16:49:00 +0200
commit84fbc3b7da2a9ac2c3e6faed911eebdcb3585980 (patch)
tree2c407a3bf81f348f0ebaadb6160c72599d7c2251
parentfda33df8a608fd5063ae45b7f9db73c9e1c65013 (diff)
parent5959a1f7a987b1349bc005df63570e530e0833ba (diff)
[MERGE] Merged with addons/trunk.
bzr revid: tde@openerp.com-20120920144900-isobpji9066sftj1
-rw-r--r--addons/account/account.py2
-rw-r--r--addons/account/account_invoice.py8
-rw-r--r--addons/account/account_menuitem.xml2
-rw-r--r--addons/account/account_move_line.py9
-rw-r--r--addons/account/account_view.xml12
-rw-r--r--addons/account/partner_view.xml9
-rw-r--r--addons/account/wizard/account_move_journal.py2
-rw-r--r--addons/account_analytic_analysis/__openerp__.py1
-rw-r--r--addons/account_analytic_analysis/security/account_analytic_analysis_security.xml10
-rw-r--r--addons/account_asset/account_asset_view.xml7
-rw-r--r--addons/account_budget/account_budget_view.xml7
-rw-r--r--addons/account_budget/security/account_budget_security.xml4
-rw-r--r--addons/account_coda/account_coda_view.xml12
-rw-r--r--addons/account_voucher/account_voucher_view.xml28
-rw-r--r--addons/anonymization/anonymization.py10
-rw-r--r--addons/crm/crm_lead_view.xml16
-rw-r--r--addons/document_page/__openerp__.py4
-rw-r--r--addons/document_page/document_page_demo.xml164
-rw-r--r--addons/document_page/document_page_view.xml2
-rw-r--r--addons/document_page/static/src/js/document_page.js18
-rwxr-xr-xaddons/document_page/static/src/lib/wiky/Readme.md41
-rwxr-xr-xaddons/document_page/static/src/lib/wiky/index.html56
-rwxr-xr-xaddons/document_page/static/src/lib/wiky/input_complete35
-rwxr-xr-xaddons/document_page/static/src/lib/wiky/wiky.css79
-rwxr-xr-xaddons/document_page/static/src/lib/wiky/wiky.js303
-rw-r--r--addons/hr/hr.py1
-rw-r--r--addons/hr/hr_view.xml2
-rw-r--r--addons/hr/res_config_view.xml2
-rw-r--r--addons/hr_contract/hr_contract_view.xml2
-rw-r--r--addons/hr_evaluation/hr_evaluation_data.xml6
-rw-r--r--addons/hr_evaluation/hr_evaluation_view.xml2
-rw-r--r--addons/hr_evaluation/security/ir.model.access.csv2
-rw-r--r--addons/hr_evaluation/test/test_hr_evaluation.yml1
-rw-r--r--addons/hr_expense/hr_expense_view.xml2
-rw-r--r--addons/hr_holidays/hr_holidays_view.xml7
-rw-r--r--addons/hr_payroll/hr_payroll.py24
-rw-r--r--addons/hr_payroll/hr_payroll_view.xml6
-rw-r--r--addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml4
-rw-r--r--addons/l10n_be/__init__.py1
-rw-r--r--addons/l10n_be/company.py45
-rw-r--r--addons/l10n_be/wizard/l10n_be_account_vat_declaration.py28
-rw-r--r--addons/l10n_be/wizard/l10n_be_partner_vat_listing.py7
-rw-r--r--addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml18
-rw-r--r--addons/l10n_be/wizard/l10n_be_vat_intra.py2
-rw-r--r--addons/l10n_fr_rib/bank_view.xml2
-rw-r--r--addons/multi_company/multi_company_demo.xml2
-rw-r--r--addons/note/note_view.xml2
-rw-r--r--addons/note/static/src/css/Makefile3
-rw-r--r--addons/note/static/src/css/note.css128
-rw-r--r--addons/note/static/src/css/note.sass207
-rw-r--r--addons/portal/portal_demo.xml2
-rw-r--r--addons/project/i18n/project.pot2
-rw-r--r--addons/project/project.py3
-rw-r--r--addons/project/project_view.xml26
-rw-r--r--addons/project/res_config.py9
-rw-r--r--addons/project/res_config_view.xml4
-rw-r--r--addons/project_issue/project_issue_view.xml8
-rw-r--r--addons/project_mrp/project_procurement.py1
-rw-r--r--addons/purchase/purchase.py60
-rw-r--r--addons/purchase/purchase_view.xml35
-rw-r--r--addons/purchase/purchase_workflow.xml2
-rw-r--r--addons/purchase/res_config.py13
-rw-r--r--addons/purchase/res_config_view.xml4
-rw-r--r--addons/purchase/stock_view.xml77
-rw-r--r--addons/sale/sale.py20
-rw-r--r--addons/sale_crm/sale_crm_view.xml4
-rw-r--r--addons/stock/stock.py7
-rw-r--r--addons/stock/wizard/stock_partial_picking.py13
-rw-r--r--addons/web_linkedin/static/src/xml/linkedin.xml2
69 files changed, 459 insertions, 1180 deletions
diff --git a/addons/account/account.py b/addons/account/account.py
index b01da6b1425..d145f0308b0 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -836,6 +836,8 @@ class account_journal(osv.osv):
@return: Returns a list of tupples containing id, name
"""
+ if not ids:
+ return []
if isinstance(ids, (int, long)):
ids = [ids]
result = self.browse(cr, user, ids, context=context)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index a145e5c06be..bd7e9e9be9f 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -1103,10 +1103,10 @@ class account_invoice(osv.osv):
if not ids:
return []
types = {
- 'out_invoice': 'CI: ',
- 'in_invoice': 'SI: ',
- 'out_refund': 'OR: ',
- 'in_refund': 'SR: ',
+ 'out_invoice': 'Invoice ',
+ 'in_invoice': 'Sup. Invoice ',
+ 'out_refund': 'Refund ',
+ 'in_refund': 'Supplier Refund ',
}
return [(r['id'], (r['number']) or types[r['type']] + (r['name'] or '')) for r in self.read(cr, uid, ids, ['type', 'number', 'name'], context, load='_classic_write')]
diff --git a/addons/account/account_menuitem.xml b/addons/account/account_menuitem.xml
index 480d5ec76a6..a2fbf11963b 100644
--- a/addons/account/account_menuitem.xml
+++ b/addons/account/account_menuitem.xml
@@ -30,7 +30,7 @@
<menuitem id="menu_analytic" parent="menu_analytic_accounting" name="Accounts" groups="analytic.group_analytic_accounting"/>
<menuitem id="menu_journals" sequence="15" name="Journals" parent="menu_finance_configuration" groups="group_account_manager"/>
<menuitem id="menu_configuration_misc" name="Miscellaneous" parent="menu_finance_configuration" sequence="55"/>
- <menuitem id="base.menu_action_currency_form" parent="menu_configuration_misc" sequence="20" groups="base.group_no_one"/>
+ <menuitem id="base.menu_action_currency_form" name="Currencies" parent="menu_configuration_misc" sequence="20" groups="base.group_no_one"/>
<menuitem id="menu_finance_generic_reporting" name="Generic Reporting" parent="menu_finance_reports" sequence="100"/>
<menuitem id="menu_finance_entries" name="Journal Entries" parent="menu_finance" sequence="5" groups="group_account_user,group_account_manager"/>
<menuitem id="menu_account_reports" name="Financial Reports" parent="menu_finance_configuration" sequence="30" />
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index 18ab1a779a3..69b1bef08e6 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -215,8 +215,10 @@ class account_move_line(osv.osv):
def _default_get(self, cr, uid, fields, context=None):
if context is None:
context = {}
- if not context.get('journal_id', False) and context.get('search_default_journal_id', False):
+ if not context.get('journal_id', False):
context['journal_id'] = context.get('search_default_journal_id')
+ if not context.get('period_id', False):
+ context['period_id'] = context.get('search_default_period_id')
account_obj = self.pool.get('account.account')
period_obj = self.pool.get('account.period')
journal_obj = self.pool.get('account.journal')
@@ -226,6 +228,9 @@ class account_move_line(osv.osv):
partner_obj = self.pool.get('res.partner')
currency_obj = self.pool.get('res.currency')
context = self.convert_to_period(cr, uid, context)
+ #pass the right context when search_defaul_journal_id
+ if context.get('search_default_journal_id',False):
+ context['journal_id'] = context.get('search_default_journal_id')
# Compute simple values
data = super(account_move_line, self).default_get(cr, uid, fields, context=context)
# Starts: Manual entry from account.move form
@@ -926,6 +931,8 @@ class account_move_line(osv.osv):
return res
if (not context.get('journal_id', False)) or (not context.get('period_id', False)):
return False
+ if context.get('search_default_journal_id', False):
+ context['journal_id'] = context.get('search_default_journal_id')
cr.execute('SELECT code FROM account_journal WHERE id = %s', (context['journal_id'], ))
j = cr.fetchone()[0] or ''
cr.execute('SELECT code FROM account_period WHERE id = %s', (context['period_id'], ))
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index 20aa198c63f..874adb417d3 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -102,6 +102,7 @@
<field name="arch" type="xml">
<form string="Account Period" version="7.0">
<header>
+ <button string="Close Period" name="%(account.action_account_period_close)d" type="action" class="oe_highlight" states="draft"/>
<button name="action_draft" states="done" string="Set to Draft" type="object" groups="account.group_account_manager"/>
<field name="state" widget="statusbar" nolabel="1"/>
</header>
@@ -1718,8 +1719,10 @@
<field name="model">account.payment.term.line</field>
<field name="arch" type="xml">
<form string="Payment Term" version="7.0">
- <field name="name"/>
- <field name="sequence"/>
+ <group>
+ <field name="name"/>
+ <field name="sequence"/>
+ </group>
<group>
<group string="Amount Computation">
<field name="value"/>
@@ -1767,12 +1770,11 @@
<field name="model">account.payment.term</field>
<field name="arch" type="xml">
<form string="Payment Term" version="7.0">
- <group>
+ <group col="4">
<field name="name"/>
<field name="active"/>
</group>
- <separator string="Description on Invoices"/>
- <field name="note"/>
+ <field name="note" placeholder="Note fo the invoice..."/>
<separator string="Computation"/>
<field name="line_ids"/>
</form>
diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml
index d83571b314e..7ac1efd4f9f 100644
--- a/addons/account/partner_view.xml
+++ b/addons/account/partner_view.xml
@@ -12,7 +12,7 @@
<field name="active"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
</group>
- <separator string="Mapping"/>
+ <separator string="Taxes Mapping"/>
<field name="tax_ids" widget="one2many_list">
<tree string="Tax Mapping" editable="bottom">
<field name="tax_src_id" domain="[('parent_id','=',False)]"/>
@@ -23,6 +23,7 @@
<field name="tax_dest_id" domain="[('parent_id','=',False)]"/>
</form>
</field>
+ <separator string="Accounts Mapping"/>
<field name="account_ids" widget="one2many_list">
<tree string="Account Mapping" editable="bottom">
<field name="account_src_id"/>
@@ -93,8 +94,10 @@
</group>
<field name="bank_ids">
<form string="Bank account" version="7.0">
- <field name="state"/>
- <field name="acc_number"/>
+ <group col="4">
+ <field name="state"/>
+ <field name="acc_number"/>
+ </group>
<group>
<group name="owner" string="Bank Account Owner">
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
diff --git a/addons/account/wizard/account_move_journal.py b/addons/account/wizard/account_move_journal.py
index d87e4d04a0c..da6a142972b 100644
--- a/addons/account/wizard/account_move_journal.py
+++ b/addons/account/wizard/account_move_journal.py
@@ -92,7 +92,7 @@ class account_move_journal(osv.osv_memory):
journal = False
if journal_id:
- journal = journal_pool.read(cr, uid, journal_id, ['name'], context=context).name
+ journal = journal_pool.read(cr, uid, journal_id, ['name'], context=context).get('name',False)
journal_string = _("Journal: %s") % tools.ustr(journal)
else:
journal_string = _("Journal: All")
diff --git a/addons/account_analytic_analysis/__openerp__.py b/addons/account_analytic_analysis/__openerp__.py
index 40b67289fb1..3e8c579b729 100644
--- a/addons/account_analytic_analysis/__openerp__.py
+++ b/addons/account_analytic_analysis/__openerp__.py
@@ -36,6 +36,7 @@ Adds menu to show relevant information to each manager.You can also view the rep
'depends': ['hr_timesheet_invoice', 'sale'], #although sale is technically not required to install this module, all menuitems are located under 'Sales' application
'data': [
'security/ir.model.access.csv',
+ 'security/account_analytic_analysis_security.xml',
'account_analytic_analysis_view.xml',
'account_analytic_analysis_menu.xml',
'account_analytic_analysis_cron.xml',
diff --git a/addons/account_analytic_analysis/security/account_analytic_analysis_security.xml b/addons/account_analytic_analysis/security/account_analytic_analysis_security.xml
new file mode 100644
index 00000000000..8bcc7f2d7f0
--- /dev/null
+++ b/addons/account_analytic_analysis/security/account_analytic_analysis_security.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <record model="res.users" id="base.user_root">
+ <field eval="[(4,ref('sale.group_analytic_accounting'))]" name="groups_id"/>
+ </record>
+
+ </data>
+</openerp> \ No newline at end of file
diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml
index bb0222d5e4f..3fab306863c 100644
--- a/addons/account_asset/account_asset_view.xml
+++ b/addons/account_asset/account_asset_view.xml
@@ -129,7 +129,7 @@
</group>
</page>
<page string="Depreciation Board">
- <field name="depreciation_line_ids" mode="tree,graph">
+ <field name="depreciation_line_ids" mode="tree">
<tree string="Depreciation Lines" colors="blue:(move_check == False);black:(move_check == True)">
<field name="depreciation_date"/>
<field name="sequence" invisible="1"/>
@@ -159,11 +159,6 @@
</group>
</group>
</form>
- <graph type="bar">
- <field name="name"/>
- <field name="amount"/>
- <field name="depreciated_value"/>
- </graph>
</field>
<button type="object" name="compute_depreciation_board" string="Compute" icon="terp-stock_format-scientific" colspan="2" attrs="{'invisible':[('state','=','close')]}"/>
</page>
diff --git a/addons/account_budget/account_budget_view.xml b/addons/account_budget/account_budget_view.xml
index f6b4842b596..7868755d143 100644
--- a/addons/account_budget/account_budget_view.xml
+++ b/addons/account_budget/account_budget_view.xml
@@ -62,12 +62,7 @@
<field name="account_ids"/>
</page>
<page string="Budget Lines">
- <field name="crossovered_budget_line" widget="one2many_list" mode="graph,tree">
- <graph type="bar" string="Lines">
- <field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
- <field name="planned_amount" operator="+"/>
- <field group="True" name="general_budget_id"/>
- </graph>
+ <field name="crossovered_budget_line" widget="one2many_list" mode="tree">
<tree string="Budget Lines" editable="top">
<field name="crossovered_budget_id"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('parent_id','!=',False)]"/>
diff --git a/addons/account_budget/security/account_budget_security.xml b/addons/account_budget/security/account_budget_security.xml
index 1fbcd82e86c..46a3efebb5c 100644
--- a/addons/account_budget/security/account_budget_security.xml
+++ b/addons/account_budget/security/account_budget_security.xml
@@ -22,6 +22,10 @@
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
+
+ <record model="res.users" id="base.user_root">
+ <field eval="[(4,ref('analytic.group_analytic_accounting'))]" name="groups_id"/>
+ </record>
</data>
</openerp>
diff --git a/addons/account_coda/account_coda_view.xml b/addons/account_coda/account_coda_view.xml
index 23e63b2a4a4..21db77466a0 100644
--- a/addons/account_coda/account_coda_view.xml
+++ b/addons/account_coda/account_coda_view.xml
@@ -404,9 +404,9 @@
<field name="name"/>
<field name="statement_id" readonly="1"/>
<field name="ref" readonly="1"/>
- <field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
- <field name="type" on_change="onchange_type(partner_id, type)"/>
- <field name="account_id" domain="[('journal_id','=',parent.journal_id)]"/>
+ <field name="partner_id" />
+ <field name="type" />
+ <field name="account_id" />
<field name="amount" readonly="1" sum="Total Amount"/>
<field name="globalisation_id" string="Glob. Id"/>
<field name="globalisation_amount" string="Glob. Am."/>
@@ -426,9 +426,9 @@
<field name="val_date"/>
<field name="name"/>
<field name="ref" readonly="0"/>
- <field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
- <field name="type" on_change="onchange_type(partner_id, type)"/>
- <field domain="[('journal_id', '=', parent.journal_id), ('type', '&lt;&gt;', 'view')]" name="account_id"/>
+ <field name="partner_id"/>
+ <field name="type" />
+ <field domain="[('type', '&lt;&gt;', 'view')]" name="account_id"/>
<field name="amount"/>
<field name="globalisation_id"/>
<field name="sequence" readonly="0"/>
diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml
index daf1f7a361e..0c1f26fb20e 100644
--- a/addons/account_voucher/account_voucher_view.xml
+++ b/addons/account_voucher/account_voucher_view.xml
@@ -47,16 +47,18 @@
<field name="state" widget="statusbar" statusbar_visible="draft,posted" statusbar_colors='{"proforma":"blue"}'/>
</header>
<sheet string="Accounting Voucher">
- <group col="6" colspan="4">
+ <group col="4" colspan="4">
<field name="partner_id" required="1" on_change="onchange_journal_voucher(line_ids, tax_id, amount, partner_id, journal_id, type)"/>
- <field name="payment_rate_currency_id" invisible="1"/>
<field name="date" on_change="onchange_date(date, currency_id, payment_rate_currency_id, amount, company_id)"/>
<field name="journal_id" widget="selection" on_change="onchange_journal_voucher(line_ids, tax_id, amount, partner_id, journal_id, type)"/>
<field name="type" required="1"/>
<field name="name" colspan="2"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<field name="reference"/>
+ <field name="number"/>
+ <field name="currency_id" groups="base.group_multi_currency"/>
<field name="account_id" widget="selection" invisible="True"/>
+ <field name="payment_rate_currency_id" invisible="1"/>
</group>
<notebook colspan="4">
<page string="Voucher Entry">
@@ -69,20 +71,16 @@
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"/>
</tree>
</field>
- <group col="3">
- <group string="Internal Notes">
- <field name="narration" colspan="2" nolabel="1"/>
- </group>
- <group string="Other Information">
- <field name="number"/>
- <field name="currency_id" groups="base.group_multi_currency"/>
- </group>
- <group col="4" attrs="{'invisible':[('type','in',['payment', 'receipt', False])]}">
- <separator string="Total" colspan="4"/>
- <field name="tax_id" on_change="onchange_price(line_ids, tax_id, partner_id)" widget="selection"/>
+ <group>
+ <field name="narration" nolabel="1" placeholder="Internal Notes"/>
+ <group class="oe_subtotal_footer oe_right" attrs="{'invisible':[('type','in',['payment', 'receipt', False])]}">
+ <field name="tax_id" on_change="onchange_price(line_ids, tax_id, partner_id)" widget="selection" nolabel="1"/>
<field name="tax_amount" nolabel="1"/>
- <button type="object" icon="terp-stock_format-scientific" name="compute_tax" string="Compute Tax" attrs="{'invisible': [('state','!=','draft')]}"/>
- <label colspan="1" string=""/><field name="amount" string="Total"/>
+ <div class="oe_subtotal_footer_separator">
+ <label for="amount"/>
+ <button type="object" icon="terp-stock_format-scientific" name="compute_tax" class="oe_link oe_edit_only" string="(Update)" attrs="{'invisible': [('state','!=','draft')]}"/>
+ </div>
+ <field name="amount" class="oe_subtotal_footer_separator" nolabel="1"/>
</group>
</group>
</page>
diff --git a/addons/anonymization/anonymization.py b/addons/anonymization/anonymization.py
index 6b6db168a4f..43d198b27e2 100644
--- a/addons/anonymization/anonymization.py
+++ b/addons/anonymization/anonymization.py
@@ -68,8 +68,10 @@ class ir_model_fields_anonymization(osv.osv):
return state
def _check_write(self, cr, uid, context=None):
- # check that the field is created from the menu and not from an database update
- # otherwise the database update can crash:
+ """check that the field is created from the menu and not from an database update
+ otherwise the database update can crash:"""
+ if context is None:
+ context = {}
if context.get('manual'):
global_state = self._get_global_state(cr, uid, context=context)
@@ -295,10 +297,10 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, *args, **kwargs):
state = self.pool.get('ir.model.fields.anonymization')._get_global_state(cr, uid, context=context)
-
+
if context is None:
context = {}
-
+
step = context.get('step', 'new_window')
res = super(ir_model_fields_anonymize_wizard, self).fields_view_get(cr, uid, view_id, view_type, context, *args, **kwargs)
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index 4bfa145188c..6607f2dfa1b 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -132,8 +132,6 @@
<header>
<button name="%(crm.action_crm_lead2opportunity_partner)d" string="Convert to Opportunity" type="action"
states="draft,open,pending" help="Convert to Opportunity" class="oe_highlight"/>
- <button name="case_escalate" string="Escalate" type="object"
- states="draft,open,pending"/>
<button name="case_reset" string="Reset" type="object"
states="cancel"/>
<button name="case_cancel" string="Cancel" type="object"
@@ -188,7 +186,11 @@
</group>
<group>
<field name="user_id"/>
- <field name="section_id"/>
+ <label for="section_id"/>
+ <div>
+ <field name="section_id"/>
+ <button name="case_escalate" string="Escalate" type="object" states="draft,open,pending"/>
+ </div>
<field name="type" invisible="1"/>
</group>
<group>
@@ -405,8 +407,6 @@
states="draft,open,pending" class="oe_highlight"/>
<button name="case_mark_lost" string="Mark Lost" type="object"
states="draft,open" class="oe_highlight"/>
- <button name="case_escalate" string="Escalate" type="object"
- states="open" />
<field name="stage_id" widget="statusbar" clickable="True"/>
</header>
<sheet>
@@ -452,7 +452,11 @@
<group>
<field name="user_id"/>
- <field name="section_id" colspan="1" widget="selection"/>
+ <label for="section_id"/>
+ <div>
+ <field name="section_id" widget="selection"/>
+ <button name="case_escalate" string="Escalate" type="object" states="draft,open,pending" />
+ </div>
</group>
<group>
<field name="categ_ids"
diff --git a/addons/document_page/__openerp__.py b/addons/document_page/__openerp__.py
index a88e1d827d7..eec5166b0bf 100644
--- a/addons/document_page/__openerp__.py
+++ b/addons/document_page/__openerp__.py
@@ -44,10 +44,6 @@ Web pages
'auto_install': False,
'certificate': '0086363630317',
'images': [],
- 'js': [
- 'static/src/lib/wiky/wiky.js',
- 'static/src/js/document_page.js'
- ],
'css' : ['static/src/css/document_page.css'],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/document_page/document_page_demo.xml b/addons/document_page/document_page_demo.xml
index a5ca56fd573..f779ea8313f 100644
--- a/addons/document_page/document_page_demo.xml
+++ b/addons/document_page/document_page_demo.xml
@@ -23,24 +23,28 @@ Additional ressources
<field name="name">OpenERP 6.1. Functional Demo</field>
<field name="parent_id" ref="demo_category1"/>
<field name="content">
-
-The news is out, OpenERP's latest version 6.1. is here. It's more
-user-friendly, even more business oriented and efficient to manage your company
-
-How to discover the latest version 6.1.?
-
-Demo : [http://demo.openerp.com]
-Online: [http://openerp.com/online]
-Download: [http://openerp.com/downloads]
-
-We have also put together a functional demo that presents 6.1. Watch this video
-to learn directly from us what OpenERP 6.1. can do for you. Share it in your
-company, with your clients and implement it now for your business.
-
-==Watch on Youtube!==
-
-[[Video:http://www.youtube.com/embed/7jES2jxKMso ]]
-
+<![CDATA[
+<br>
+<br>
+The news is out, OpenERP's latest version 6.1. is here. It's more<br>
+user-friendly, even more business oriented and efficient to manage your company<br>
+<br>
+How to discover the latest version 6.1.?<br>
+<br>
+Demo : <a target="http://demo.openerp.com" href="http://demo.openerp.com" style="background: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC&quot;) no-repeat scroll right center transparent;padding-right: 13px;"></a><br>
+Online: <a target="http://openerp.com/online" href="http://openerp.com/online" style="background: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC&quot;) no-repeat scroll right center transparent;padding-right: 13px;"></a><br>
+Download: <a target="http://openerp.com/downloads" href="http://openerp.com/downloads" style="background: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC&quot;) no-repeat scroll right center transparent;padding-right: 13px;"></a><br>
+<br>
+We have also put together a functional demo that presents 6.1. Watch this video<br>
+to learn directly from us what OpenERP 6.1. can do for you. Share it in your<br>
+company, with your clients and implement it now for your business.<br>
+<br>
+<h3>Watch on Youtube!</h3><br>
+<br>
+<iframe width="480" height="390" src="http://www.youtube.com/embed/7jES2jxKMso " frameborder="0" allowfullscreen=""></iframe><br>
+<br>
+<br>
+]]>
</field>
</record>
@@ -48,36 +52,40 @@ company, with your clients and implement it now for your business.
<field name="name">Personalise Dashboards</field>
<field name="parent_id" ref="demo_category1"/>
<field name="content">
-You like OpenERP, but feel like you want to personalise it more? Now, OpenERP
-goes a step further and lets you customize your dashboard. Thanks to a new
-feature that allows you to customize your dashboard by adding new boards of any
-search view.
-
-==How is it done?==
-
-Step 1: access one search view
-
-Step 2: apply the filter you want to see at each connection to the application
-(eg. on sales, manufacturing, etc)
-
-Step 3: add it into the dashboard in the same space where you can save the filter
-
-Step 4: choose the application you want it visible on and the name of the array
-
-Look at this simple example below from Purchase, where I want to put on the
-application's dashboard "Purchases to Approve". After I access the search view
-and apply the filter for "Purchases to Approve", I can add it immediately to my
-Purchase dashboard.
-
-[[File:http://www.openerp.com/sites/default/files/fileattach/dashboard2_1(1).png ]]
-
-In less than a minute, the search view is visible on the dashboard
-
-[[File:http://www.openerp.com/sites/default/files/fileattach/dashboard2_2.png ]]
-
-Of course, you are free to delete what you don't need or like, but just in case
-you change your mind there is a reset button to return to the default view.
-
+<![CDATA[
+<br>
+You like OpenERP, but feel like you want to personalise it more? Now, OpenERP<br>
+goes a step further and lets you customize your dashboard. Thanks to a new<br>
+feature that allows you to customize your dashboard by adding new boards of any<br>
+search view.<br>
+<br>
+<h3>How is it done?</h3><br>
+<br>
+Step 1: access one search view <br>
+<br>
+Step 2: apply the filter you want to see at each connection to the application<br>
+(eg. on sales, manufacturing, etc)<br>
+<br>
+Step 3: add it into the dashboard in the same space where you can save the filter<br>
+<br>
+Step 4: choose the application you want it visible on and the name of the array<br>
+<br>
+Look at this simple example below from Purchase, where I want to put on the<br>
+application's dashboard "Purchases to Approve". After I access the search view<br>
+and apply the filter for "Purchases to Approve", I can add it immediately to my<br>
+Purchase dashboard.<br>
+<br>
+<img src="http://www.openerp.com/sites/default/files/fileattach/dashboard2_1(1).png" alt=""><br>
+<br>
+In less than a minute, the search view is visible on the dashboard<br>
+<br>
+<img src="http://www.openerp.com/sites/default/files/fileattach/dashboard2_2.png" alt=""><br>
+<br>
+Of course, you are free to delete what you don't need or like, but just in case<br>
+you change your mind there is a reset button to return to the default view.<br>
+<br>
+<br>
+]]>
</field>
</record>
@@ -85,36 +93,36 @@ you change your mind there is a reset button to return to the default view.
<field name="name">Touchscreen Point of Sale</field>
<field name="parent_id" ref="demo_category1"/>
<field name="content">
-The brand new OpenERP touchscreen point of sale available with 6.1 allows you
-to manage your shop sales very easily. It's fully web based so that you don't
-have to install or deploy any software and all the sales shops can be easily
-consolidated. It works in connected and disconnected modes so that you can
-continue to sell if you lose your internet connection.
-
-[[File:http://www.openerp.com/sites/default/files/fileattach/POS(2).png ]]
-
-==Here's a summary of its main features and benefits:==
-
-100% WEB based
-
-* available for any touchscreen device (ipod, ipad, any tablet)mobile (with portable devices)
-* no installation required
-* no synchronization needed, completely integrated
-* continue working even when your connection is down if you close your browser, data won't be lost
-* fully web based with a clean interface smart interface
-
-You have different options to select your products. You can do it through the
-barcode reader, just browse through the categories you have put in place (ie.
-drinks, snacks, meals, etc.), or text search in case neither of the other
-options work for you. If you need to use the POS for your restaurant, for
-example, your employees can record at the same time multiple tickets without
-having to wait to do one transaction at a time. Along, to facilitate payment,
-the application allows multiple payment methods.
-
-The POS application is so simple and accessible to use that your shop or
-restaurant will never need any other tool to manage orders. Due to its smart
-and user-friendly interface you don't need any training to learn how to use it.
-Think of it as an out-of-the-box solution to boost your business' productivity.
+<![CDATA[
+<br>
+The brand new OpenERP touchscreen point of sale available with 6.1 allows you<br>
+to manage your shop sales very easily. It's fully web based so that you don't<br>
+have to install or deploy any software and all the sales shops can be easily<br>
+consolidated. It works in connected and disconnected modes so that you can<br>
+continue to sell if you lose your internet connection.<br>
+<br>
+<img src="http://www.openerp.com/sites/default/files/fileattach/POS(2).png" alt=""><br>
+<br>
+<h3>Here's a summary of its main features and benefits:</h3><br>
+<br>
+100% WEB based<br>
+<br>
+<ul><li>available for any touchscreen device (ipod, ipad, any tablet)mobile (with portable devices)</li><li>no installation required</li><li>no synchronization needed, completely integrated</li><li>continue working even when your connection is down if you close your browser, data won't be lost</li><li>fully web based with a clean interface smart interface</li></ul><br>
+<br>
+You have different options to select your products. You can do it through the<br>
+barcode reader, just browse through the categories you have put in place (ie.<br>
+drinks, snacks, meals, etc.), or text search in case neither of the other<br>
+options work for you. If you need to use the POS for your restaurant, for<br>
+example, your employees can record at the same time multiple tickets without<br>
+having to wait to do one transaction at a time. Along, to facilitate payment,<br>
+the application allows multiple payment methods.<br>
+<br>
+The POS application is so simple and accessible to use that your shop or<br>
+restaurant will never need any other tool to manage orders. Due to its smart<br>
+and user-friendly interface you don't need any training to learn how to use it.<br>
+Think of it as an out-of-the-box solution to boost your business' productivity.<br>
+<br>
+]]>
</field>
</record>
diff --git a/addons/document_page/document_page_view.xml b/addons/document_page/document_page_view.xml
index 23c4b8f29c8..63f208c08a7 100644
--- a/addons/document_page/document_page_view.xml
+++ b/addons/document_page/document_page_view.xml
@@ -55,7 +55,7 @@
</div>
<field name="content" placeholder="e.g. Once upon a time..." class="oe_edit_only"/>
<div class="oe_document_page">
- <field name="display_content" widget="text_wiki" class="oe_view_only"/>
+ <field name="display_content" widget="html" class="oe_view_only" options='{"safe": true}'/>
</div>
</form>
</field>
diff --git a/addons/document_page/static/src/js/document_page.js b/addons/document_page/static/src/js/document_page.js
deleted file mode 100644
index 836803bf700..00000000000
--- a/addons/document_page/static/src/js/document_page.js
+++ /dev/null
@@ -1,18 +0,0 @@
-openerp.document_page = function (openerp) {
- openerp.web.form.widgets.add('text_wiki', 'openerp.web.form.FieldTextWiki');
-
- openerp.web.form.FieldTextWiki = openerp.web.form.FieldText.extend({
- render_value: function() {
- var show_value = openerp.web.format_value(this.get('value'), this, '');
- if (!this.get("effective_readonly")) {
- this.$textarea.val(show_value);
- if (show_value && this.view.options.resize_textareas) {
- this.do_resize(this.view.options.resize_textareas);
- }
- } else {
- var wiki_value = wiky.process(show_value || '');
- this.$el.html(wiki_value);
- }
- },
- });
-};
diff --git a/addons/document_page/static/src/lib/wiky/Readme.md b/addons/document_page/static/src/lib/wiky/Readme.md
deleted file mode 100755
index 5d9bfe175a6..00000000000
--- a/addons/document_page/static/src/lib/wiky/Readme.md
+++ /dev/null
@@ -1,41 +0,0 @@
-Wiky.js - a javascript library to convert Wiki Markup language to HTML.
-=======================
-
-(It is buggy, please use with care)
-
-Wiky.js is a javascript library that converts Wiki Markup language to HTML.
-
-
-How to use it
--------------------
-Include wiki.js into your HTML file. Wiky.js has only one function, which is wiky.process(wikitext).
-
-Please see index.html for an example.
-
-*wiky.js does not depend on jQuery, which is included for testing purpose.
-
-
-
-Supported Syntax
--------------------
-* == Heading ==
-* === Subheading ===
-* [http://www.url.com Name of URLs]
-* [[File:http://www.url.com/image.png Alternative Text]]
-* -------------------- (Horizontal line)
-* : (Indentation)
-* # Ordered bullet point
-* * Unordered bullet point
-
-
-
-License
-------------------
-Creative Commons 3.0
-
-
-
-Contributors
--------------------
-Tanin Na Nakorn
-Tanun Niyomjit (Designer) \ No newline at end of file
diff --git a/addons/document_page/static/src/lib/wiky/index.html b/addons/document_page/static/src/lib/wiky/index.html
deleted file mode 100755
index 97992354fd6..00000000000
--- a/addons/document_page/static/src/lib/wiky/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
- <script type="text/javascript" src="wiky.js"></script>
- <title>Untitled Document</title>
- <link href="wiky.css" rel="stylesheet" type="text/css">
- </head>
- <body>
- <textarea id="textarea" onchange="$('#preview').html(wiky.process($(this).val()));" cols="60" rows="20">=== Heading ===
-Some content
-I would like to add another line
-
-== Subheading ==
-Some more content
-Some more lines1
-:A line with indent
-:: A 2-indented line
-:: more
-:back to 1-indented line
-
-This is Taeyeon.
-[[File:http://www.oknation.net/blog/home/blog_data/12/2012/images/ty4.jpg Taeyeon]]
-Taeyeon is so cute.
-
-This is a link:[http://www.google.com Google].
-This is a bold link:'''[http://www.google.com Google]'''.
-This is a bold-italic link:'''''[http://www.google.com Google]'''''.
-This is '''bold''', '''''bold-italic''''', and ''italic''
-
-[[Video:http://www.youtube.com/embed/ovVfLancwys]]
-# First
-# secon
-## Second-First
-*** First Point
-*** Second Point
-#### z
-#### y
-#### x
-*** Third Point
-## Second-Second [ftp://www.facebook.com FacebookFTP]
-## Second-Third [http://www.google.com Google Here]
-# third
-
-</textarea>
- <br/>
- <span style="display:block;width:600px;border:1px solid #999999;">
- <span style="display:block;margin:10px 10px 10px 10px;" class="wiky_preview_area" id="preview">
- </span>
- </span>
- </body>
-</html>
-<script language="javascript">
- $('#preview').html(wiky.process($('#textarea').val()));
-</script>
diff --git a/addons/document_page/static/src/lib/wiky/input_complete b/addons/document_page/static/src/lib/wiky/input_complete
deleted file mode 100755
index c7e860cccf9..00000000000
--- a/addons/document_page/static/src/lib/wiky/input_complete
+++ /dev/null
@@ -1,35 +0,0 @@
-=== Heading ===
-Some content
-I would like to add another line
-
-== Subheading ==
-Some more content
-Some more lines1
-:A line with indent
-:: A 2-indented line
-:: more
-:back to 1-indented line
-
-This is Taeyeon.
-[[File:http://www.oknation.net/blog/home/blog_data/12/2012/images/ty4.jpg Taeyeon]]
-Taeyeon is so cute.
-
-This is a link:[http://www.google.com Google].
-This is a bold link:'''[http://www.google.com Google]'''.
-This is a bold-italic link:'''''[http://www.google.com Google]'''''.
-This is '''bold''', '''''bold-italic''''', and ''italic''
-
-
-# First
-# second
-## Second-First
-*** First Point
-*** Second Point
-#### z
-#### y
-#### x
-*** Third Point
-## Second-Second [ftp://www.facebook.com FacebookFTP]
-## Second-Third [http://www.google.com Google Here]
-# third
-
diff --git a/addons/document_page/static/src/lib/wiky/wiky.css b/addons/document_page/static/src/lib/wiky/wiky.css
deleted file mode 100755
index 0adc7896df0..00000000000
--- a/addons/document_page/static/src/lib/wiky/wiky.css
+++ /dev/null
@@ -1,79 +0,0 @@
-@charset "UTF-8";
-.wiky_preview_area {
- font-family: "Helvetica Neue", Arial, Helvetica, 'Liberation Sans', FreeSans, sans-serif;
- font-size: 13px;
- line-height: 1.5em;
- color: #666;
- font-weight:350;
- width:600px;
- display:block;
-}
-.wiky_preview_area h2{
- font-size:24px;
- color:#333;
- font-weight:400;
-
- text-shadow:0 1px 0 rgba(000, 000, 000, .4);
-}
-.wiky_preview_area h3{
- font-size:18px;
- color:#555;
- font-weight:400;
-
- text-shadow:0 1px 0 rgba(000, 000, 000, .4);
-}
-.wiky_preview_area img{
- background-repeat: repeat;
- width: 400px;
- -webkit-border-radius: 10px;
- -moz-border-radius: 10px;
- border-radius: 10px;
- -webkit-box-shadow:0 1px 3px rgba(0, 0, 0, .8);
- -moz-box-shadow:0 1px 3px rgba(0, 0, 0, .8);
- box-shadow:0 1px 3px rgba(0, 0, 0, .8);
-}
-.wiky_preview_area a{
- padding:5px;
- font-weight:400;
-
- background: #999; /* for non-css3 browsers */
-
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cccccc', endColorstr='#000000'); /* for IE */
- background: -webkit-gradient(linear, left top, left bottom, from(#ccc), to(#000)); /* for webkit browsers */
- background: -moz-linear-gradient(top, #ccc, #000); /* for firefox 3.6+ */
-
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-
- -webkit-box-shadow:none;
- -moz-box-shadow:none;
- box-shadow:none;
-
- text-shadow:0 1px 0 rgba(255, 255, 255, 1);
-}
-
-.wiky_preview_area a:hover{
- color:#333;
- padding:5px;
- font-weight:400;
- text-decoration:none;
-
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-
- -webkit-box-shadow:0 1px 3px rgba(0, 0, 0, .3);
- -moz-box-shadow:0 1px 3px rgba(0, 0, 0, .3);
- box-shadow:0 1px 3px rgba(0, 0, 0, .3);
-
- text-shadow:0 1px 0 rgba(255, 255, 255, 1);
-}
-
-
-.wiky_preview_area > ol,
-.wiky_preview_area > ul,
-.wiky_preview_area > ul > li,
-.wiky_preview_area > ol > li {
- list-style: disc inside none;
-} \ No newline at end of file
diff --git a/addons/document_page/static/src/lib/wiky/wiky.js b/addons/document_page/static/src/lib/wiky/wiky.js
deleted file mode 100755
index 5bc9c6f167d..00000000000
--- a/addons/document_page/static/src/lib/wiky/wiky.js
+++ /dev/null
@@ -1,303 +0,0 @@
-/**
- * Wiky.js - Javascript library to converts Wiki MarkUp language to HTML.
- * You can do whatever with it. Please give me some credits (Apache License)
- * - Tanin Na Nakorn
- */
-
-var wiky = {};
-
-
-wiky.process = function(wikitext) {
- var lines = wikitext.split(/\r?\n/);
- var start;
- var html = "";
-
- for (var i=0;i<lines.length;i++)
- {
- var line = lines[i];
- if (line.match(/^===/)!=null && line.match(/===$/)!=null)
- {
- html += "<h2>"+line.substring(3,line.length-3)+"</h2>";
- }
- else if (line.match(/^==/)!=null && line.match(/==$/)!=null)
- {
- html += "<h3>"+line.substring(2,line.length-2)+"</h3>";
- }
- else if (line.match(/^:+/)!=null)
- {
- // find start line and ending line
- start = i;
- while (i < lines.length && lines[i].match(/^:+/)!=null) i++;
- i--;
-
- html += wiky.process_indent(lines,start,i);
- }
- else if (line.match(/^----+(\s*)$/)!=null)
- {
- html += "<hr/>";
- }
- else if (line.match(/^(\*+) /)!=null)
- {
- // find start line and ending line
- start = i;
- while (i < lines.length && lines[i].match(/^(\*+|##+):? /)!=null) i++;
- i--;
-
- html += wiky.process_bullet_point(lines,start,i);
- }
- else if (line.match(/^(#+) /)!=null)
- {
- // find start line and ending line
- start = i;
- while (i < lines.length && lines[i].match(/^(#+|\*\*+):? /)!=null) i++;
- i--;
-
- html += wiky.process_bullet_point(lines,start,i);
- }
- else
- {
- html += wiky.process_normal(line);
- }
-
- html += "<br/>\n";
- }
-
- return html;
-};
-
-wiky.process_indent = function(lines,start,end) {
- var html = "<dl>";
-
- for(var i=start;i<=end;i++) {
-
- html += "<dd>";
-
- var this_count = lines[i].match(/^(:+)/)[1].length;
-
- html += wiky.process_normal(lines[i].substring(this_count));
-
- var nested_end = i;
- for (var j=i+1;j<=end;j++) {
- var nested_count = lines[j].match(/^(:+)/)[1].length;
- if (nested_count <= this_count) break;
- else nested_end = j;
- }
-
- if (nested_end > i) {
- html += wiky.process_indent(lines,i+1,nested_end);
- i = nested_end;
- }
-
- html += "</dd>";
- }
-
- html += "</dl>";
- return html;
-};
-
-wiky.process_bullet_point = function(lines,start,end) {
- var html = (lines[start].charAt(0)=='*')?"<ul>":"<ol>";
-
- for(var i=start;i<=end;i++) {
-
- html += "<li>";
-
- var this_count = lines[i].match(/^(\*+|#+) /)[1].length;
-
- html += wiky.process_normal(lines[i].substring(this_count+1));
-
- // continue previous with #:
- {
- var nested_end = i;
- for (var j = i + 1; j <= end; j++) {
- var nested_count = lines[j].match(/^(\*+|#+):? /)[1].length;
-
- if (nested_count < this_count)
- break;
- else {
- if (lines[j].charAt(nested_count) == ':') {
- html += "<br/>" + wiky.process_normal(lines[j].substring(nested_count + 2));
- nested_end = j;
- } else {
- break;
- }
- }
-
- }
-
- i = nested_end;
- }
-
- // nested bullet point
- {
- var nested_end = i;
- for (var j = i + 1; j <= end; j++) {
- var nested_count = lines[j].match(/^(\*+|#+):? /)[1].length;
- if (nested_count <= this_count)
- break;
- else
- nested_end = j;
- }
-
- if (nested_end > i) {
- html += wiky.process_bullet_point(lines, i + 1, nested_end);
- i = nested_end;
- }
- }
-
- // continue previous with #:
- {
- var nested_end = i;
- for (var j = i + 1; j <= end; j++) {
- var nested_count = lines[j].match(/^(\*+|#+):? /)[1].length;
-
- if (nested_count < this_count)
- break;
- else {
- if (lines[j].charAt(nested_count) == ':') {
- html += wiky.process_normal(lines[j].substring(nested_count + 2));
- nested_end = j;
- } else {
- break;
- }
- }
-
- }
-
- i = nested_end;
- }
-
- html += "</li>";
- }
-
- html += (lines[start].charAt(0)=='*')?"</ul>":"</ol>";
- return html;
-};
-
-wiky.process_url = function(txt) {
-
- var index = txt.indexOf(" ");
-
- if (index == -1)
- {
- return "<a target='"+txt+"' href='"+txt+"' style='background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC\") no-repeat scroll right center transparent;padding-right: 13px;'></a>";
- }
- else
- {
- var url = txt.substring(0,index);
- var label = txt.substring(index+1);
- return "<a target='"+url+"' href='"+url+"' style='background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC\") no-repeat scroll right center transparent;padding-right: 13px;'>"+label+"</a>";
- }
-};
-
-wiky.process_image = function(txt) {
- var index = txt.indexOf(" ");
- var url = txt;
- var label = "";
-
- if (index > -1)
- {
- url = txt.substring(0,index);
- label = txt.substring(index+1);
- }
-
-
- return "<img src='"+url+"' alt=\""+label+"\" />";
-};
-
-wiky.process_video = function(url) {
-
- if (url.match(/^(https?:\/\/)?(www.)?youtube.com\//) == null)
- {
- return "<b>"+url+" is an invalid YouTube URL</b>";
- }
- var result;
- if ((result = url.match(/^(https?:\/\/)?(www.)?youtube.com\/watch\?(.*)v=([^&]+)/)) != null)
- {
- url = "http://www.youtube.com/embed/"+result[4];
- }
-
-
- return '<iframe width="480" height="390" src="'+url+'" frameborder="0" allowfullscreen></iframe>';
-};
-
-wiky.process_normal = function(wikitext) {
-
- // Image
- {
- var index = wikitext.indexOf("[[File:");
- var end_index = wikitext.indexOf("]]", index + 7);
- while (index > -1 && end_index > -1) {
-
- wikitext = wikitext.substring(0,index)
- + wiky.process_image(wikitext.substring(index+7,end_index))
- + wikitext.substring(end_index+2);
-
- index = wikitext.indexOf("[[File:");
- end_index = wikitext.indexOf("]]", index + 7);
- }
- }
-
- // Video
- {
- var index = wikitext.indexOf("[[Video:");
- var end_index = wikitext.indexOf("]]", index + 8);
- while (index > -1 && end_index > -1) {
-
- wikitext = wikitext.substring(0,index)
- + wiky.process_video(wikitext.substring(index+8,end_index))
- + wikitext.substring(end_index+2);
-
- index = wikitext.indexOf("[[Video:");
- end_index = wikitext.indexOf("]]", index + 8);
- }
- }
-
-
- // URL
- var protocols = ["http","ftp","news"];
-
- for (var i=0;i<protocols.length;i++)
- {
- var index = wikitext.indexOf("["+protocols[i]+"://");
- var end_index = wikitext.indexOf("]", index + 1);
- while (index > -1 && end_index > -1) {
-
- wikitext = wikitext.substring(0,index)
- + wiky.process_url(wikitext.substring(index+1,end_index))
- + wikitext.substring(end_index+1);
-
- index = wikitext.indexOf("["+protocols[i]+"://",end_index+1);
- end_index = wikitext.indexOf("]", index + 1);
-
- }
- }
-
- var count_b = 0;
- var index = wikitext.indexOf("'''");
- while(index > -1) {
-
- if ((count_b%2)==0) wikitext = wikitext.replace(/'''/,"<b>");
- else wikitext = wikitext.replace(/'''/,"</b>");
-
- count_b++;
-
- index = wikitext.indexOf("'''",index);
- }
-
- var count_i = 0;
- var index = wikitext.indexOf("''");
- while(index > -1) {
-
- if ((count_i%2)==0) wikitext = wikitext.replace(/''/,"<i>");
- else wikitext = wikitext.replace(/''/,"</i>");
-
- count_i++;
-
- index = wikitext.indexOf("''",index);
- }
-
- wikitext = wikitext.replace(/<\/b><\/i>/g,"</i></b>");
-
- return wikitext;
-};
diff --git a/addons/hr/hr.py b/addons/hr/hr.py
index 90f967fb4b4..aac1f41574f 100644
--- a/addons/hr/hr.py
+++ b/addons/hr/hr.py
@@ -261,7 +261,6 @@ class hr_employee(osv.osv):
_defaults = {
'active': 1,
'image': _get_default_image,
- 'marital': 'single',
'color': 0,
}
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index 00ed2afbef2..5d4c2ae9d45 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -180,7 +180,7 @@
<field name="name">Employees</field>
<field name="res_model">hr.employee</field>
<field name="view_type">form</field>
- <field name="view_mode">tree,form</field>
+ <field name="view_mode">form,tree</field>
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="view_employee_filter"/>
</record>
diff --git a/addons/hr/res_config_view.xml b/addons/hr/res_config_view.xml
index c42857e5f6b..7507665c96d 100644
--- a/addons/hr/res_config_view.xml
+++ b/addons/hr/res_config_view.xml
@@ -17,7 +17,7 @@
<field name="name">Payroll</field>
<field name="res_model">ir.module.module</field>
<field name="view_mode">kanban,tree,form</field>
- <field name="context" eval="{'search_default_category_id': ref('base.module_category_localization'), 'search_default_name': 'payroll'}"/>
+ <field name="context" eval="{'search_default_category_id': ref('base.module_category_localization')}"/>
<field name="search_view_id" ref="base.view_module_filter"/>
</record>
diff --git a/addons/hr_contract/hr_contract_view.xml b/addons/hr_contract/hr_contract_view.xml
index 92ae2524921..6566f303d36 100644
--- a/addons/hr_contract/hr_contract_view.xml
+++ b/addons/hr_contract/hr_contract_view.xml
@@ -21,7 +21,7 @@
<field name="arch" type="xml">
<data>
<xpath expr="//div[@name='button_box']" position="inside">
- <button name="%(act_hr_employee_2_hr_contract)d" string="Contracts" type="action"/>
+ <button name="%(act_hr_employee_2_hr_contract)d" string="Contracts" type="action" groups="base.group_hr_manager"/>
</xpath>
<xpath expr="//field[@name='coach_id']" position="after">
<field name="manager"/>
diff --git a/addons/hr_evaluation/hr_evaluation_data.xml b/addons/hr_evaluation/hr_evaluation_data.xml
index 607cd017a85..01915de76a0 100644
--- a/addons/hr_evaluation/hr_evaluation_data.xml
+++ b/addons/hr_evaluation/hr_evaluation_data.xml
@@ -392,12 +392,6 @@ Once the form had been filled, the employee send it to his supervisor.
<field name="type">char</field>
<field eval="5" name="sequence"/>
</record>
- <record id="survey_answer_98" model="survey.answer">
- <field name="answer">Title</field>
- <field name="question_id" ref="survey_question_2"/>
- <field name="type">char</field>
- <field eval="6" name="sequence"/>
- </record>
<record id="survey_question_column_heading_4" model="survey.question.column.heading">
<field name="in_visible_rating_weight">1</field>
<field name="in_visible_menu_choice">1</field>
diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml
index 8744567c597..29d68d7a12c 100644
--- a/addons/hr_evaluation/hr_evaluation_view.xml
+++ b/addons/hr_evaluation/hr_evaluation_view.xml
@@ -239,7 +239,7 @@
<field name="name">Appraisal</field>
<field name="res_model">hr_evaluation.evaluation</field>
<field name="view_type">form</field>
- <field name="view_mode">tree,form,graph</field>
+ <field name="view_mode">tree,form</field>
<field name="search_view_id" ref="hr_evaluation.evaluation_search"/>
<field name="context">{"search_default_next_month":1}</field>
<field name="help" type="html">
diff --git a/addons/hr_evaluation/security/ir.model.access.csv b/addons/hr_evaluation/security/ir.model.access.csv
index f9b8897eb01..a304ee84c10 100644
--- a/addons/hr_evaluation/security/ir.model.access.csv
+++ b/addons/hr_evaluation/security/ir.model.access.csv
@@ -39,4 +39,4 @@ access_survey_response_hr_employee,survey.response.employee,survey.model_survey_
access_survey_question_column_heading_hr_employee,survey.question.column.heading.employee,survey.model_survey_question_column_heading,base.group_user,1,0,0,0
access_survey_response_line_hr_employee,survey.response.line.employee,survey.model_survey_response_line,base.group_user,1,1,1,0
access_survey_response_answer_hr_employee,survey.response.answer.hr.employee,survey.model_survey_response_answer,base.group_user,1,1,1,0
-
+access_survey_tbl_column_heading_hr_employee,survey.tbl.column.heading,survey.model_survey_tbl_column_heading,base.group_user,1,1,1,0
diff --git a/addons/hr_evaluation/test/test_hr_evaluation.yml b/addons/hr_evaluation/test/test_hr_evaluation.yml
index 2bdc3513962..a66731531fa 100644
--- a/addons/hr_evaluation/test/test_hr_evaluation.yml
+++ b/addons/hr_evaluation/test/test_hr_evaluation.yml
@@ -54,7 +54,6 @@
str(ref("survey_question_2")) +"_" +str(ref("survey_answer_20")) + "_multi" :'3',
str(ref("survey_question_2")) +"_" +str(ref("survey_answer_25")) + "_multi" :'2011-12-02 16:42:00',
str(ref("survey_question_2")) +"_" +str(ref("survey_answer_43")) + "_multi" :'HR',
- str(ref("survey_question_2")) +"_" +str(ref("survey_answer_98")) + "_multi" :'tpa review'
}, context = ctx)
-
I close this Evaluation survey by giving answer of questions.
diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml
index e577d196695..e8440cb37c5 100644
--- a/addons/hr_expense/hr_expense_view.xml
+++ b/addons/hr_expense/hr_expense_view.xml
@@ -130,7 +130,7 @@
</page>
<page string="Other Info">
<group>
- <group string="Accounting Data">
+ <group string="Accounting Data" groups="account.group_account_user">
<field name="journal_id" widget="selection" domain="[('type', '=', 'purchase')]"/>
<field name="voucher_id" context="{'form_view_ref': 'account_voucher.view_purchase_receipt_form'}"/>
</group>
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index 8ac67fa1723..7392719a597 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -92,7 +92,7 @@
<header>
<button string="Approve" name="validate" states="confirm" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
<button string="Validate" name="second_validate" states="validate1" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
- <button string="Refuse" name="refuse" states="confirm,validate1,validate" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
+ <button string="Refuse" name="refuse" states="confirm,validate1,validate" type="workflow" groups="base.group_hr_user"/>
<button string="Reset to New" name="set_to_draft" states="refuse" type="object" groups="base.group_hr_user" />
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/>
</header>
@@ -140,7 +140,7 @@
<header>
<button string="Approve" name="validate" states="confirm" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
<button string="Validate" name="second_validate" states="validate1" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
- <button string="Refuse" name="refuse" states="confirm,validate,validate1" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
+ <button string="Refuse" name="refuse" states="confirm,validate,validate1" type="workflow" groups="base.group_hr_user"/>
<button string="Reset to New" name="set_to_draft" states="cancel,refuse" type="object" groups="base.group_hr_user" />
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/>
</header>
@@ -489,6 +489,7 @@
<record id="hr_holidays_leaves_assign_tree_view" model="ir.ui.view">
<field name="name">hr.employee.leave.tree</field>
<field name="model">hr.employee</field>
+ <field name="priority" eval="20"/>
<field name="arch" type="xml">
<tree string="Assign Leaves" editable="bottom">
<field name="name" string="Employee"/>
@@ -528,7 +529,7 @@
</group>
</xpath>
<xpath expr="//div[@name='button_box']" position="inside">
- <button name="%(act_hr_employee_holiday_request)d" string="Leaves" type="action"/>
+ <button name="%(act_hr_employee_holiday_request)d" string="Leaves" type="action" groups="base.group_hr_user"/>
</xpath>
</field>
</record>
diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py
index c82c6db446b..6a2e40b9571 100644
--- a/addons/hr_payroll/hr_payroll.py
+++ b/addons/hr_payroll/hr_payroll.py
@@ -669,26 +669,26 @@ class hr_payslip(osv.osv):
if not context.get('contract', False):
#fill with the first contract of the employee
contract_ids = self.get_contract(cr, uid, employee_id, date_from, date_to, context=context)
- res['value'].update({
- 'struct_id': contract_ids and contract_obj.read(cr, uid, contract_ids[0], ['struct_id'], context=context)['struct_id'][0] or False,
- 'contract_id': contract_ids and contract_ids[0] or False,
- })
else:
if contract_id:
#set the list of contract for which the input have to be filled
contract_ids = [contract_id]
- #fill the structure with the one on the selected contract
- contract_record = contract_obj.browse(cr, uid, contract_id, context=context)
- res['value'].update({
- 'struct_id': contract_record.struct_id.id,
- 'contract_id': contract_id
- })
else:
#if we don't give the contract, then the input to fill should be for all current contracts of the employee
contract_ids = self.get_contract(cr, uid, employee_id, date_from, date_to, context=context)
- if not contract_ids:
- return res
+ if not contract_ids:
+ return res
+ contract_record = contract_obj.browse(cr, uid, contract_ids[0], context=context)
+ res['value'].update({
+ 'contract_id': contract_record and contract_record.id or False
+ })
+ struct_record = contract_record and contract_record.struct_id or False
+ if not struct_record:
+ return res
+ res['value'].update({
+ 'struct_id': struct_record.id,
+ })
#computation of the salary input
worked_days_line_ids = self.get_worked_day_lines(cr, uid, contract_ids, date_from, date_to, context=context)
input_line_ids = self.get_inputs(cr, uid, contract_ids, date_from, date_to, context=context)
diff --git a/addons/hr_payroll/hr_payroll_view.xml b/addons/hr_payroll/hr_payroll_view.xml
index d5b8b50306d..ef3c0ea2e9f 100644
--- a/addons/hr_payroll/hr_payroll_view.xml
+++ b/addons/hr_payroll/hr_payroll_view.xml
@@ -234,7 +234,7 @@
</h2>
</div>
<group col="4">
- <field name="contract_id" domain="[('employee_id','=',employee_id)]" on_change="onchange_contract_id(date_from, date_to, employee_id, contract_id)"/>
+ <field name="contract_id" domain="[('employee_id','=',employee_id)]" on_change="onchange_contract_id(date_from, date_to, employee_id, contract_id)" context="{'default_employee_id': employee_id}"/>
<field name="number"/>
<field name="struct_id" attrs="{'required':[('contract_id','&lt;&gt;',False)]}"/>
<field name="name"/>
@@ -369,7 +369,7 @@
<field name="view_id" ref="view_hr_payslip_tree"/>
<field name="search_view_id" ref="view_hr_payslip_filter"/>
</record>
- <menuitem action="action_view_hr_payslip_form" id="menu_department_tree" parent="menu_hr_root_payroll"/>
+ <menuitem action="action_view_hr_payslip_form" id="menu_department_tree" parent="menu_hr_root_payroll" groups="base.group_hr_user"/>
<act_window name="Payslips"
context="{'search_default_employee_id': [active_id], 'default_employee_id': active_id}"
res_model="hr.payslip"
@@ -386,7 +386,7 @@
<field name="arch" type="xml">
<data>
<xpath expr="//div[@name='button_box']" position="inside">
- <button name="%(act_hr_employee_payslip_list)d" string="Payslips" type="action"/>
+ <button name="%(act_hr_employee_payslip_list)d" string="Payslips" type="action" groups="base.group_hr_user"/>
</xpath>
</data>
</field>
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index 52d2cfa9d14..6c92e28564e 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -187,7 +187,7 @@
</record>
<menuitem action="act_hr_timesheet_sheet_form" id="menu_act_hr_timesheet_sheet_form" parent="hr_attendance.menu_hr_time_tracking"
- sequence="2" groups="base.group_hr_user,base.group_hr_manager"/>
+ sequence="2" groups="base.group_hr_user"/>
<!--
Company inheritancy
@@ -350,7 +350,7 @@
<field name="inherit_id" ref="hr_timesheet.hr_timesheet_employee_extd_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
- <button name="%(act_hr_employee_2_hr_timesheet)d" string="Timesheets" type="action"/>
+ <button name="%(act_hr_employee_2_hr_timesheet)d" string="Timesheets" type="action" groups="base.group_hr_manager"/>
</xpath>
</field>
</record>
diff --git a/addons/l10n_be/__init__.py b/addons/l10n_be/__init__.py
index 1b2677d295e..7bdc1f61b1f 100644
--- a/addons/l10n_be/__init__.py
+++ b/addons/l10n_be/__init__.py
@@ -19,7 +19,6 @@
#
##############################################################################
-import company
import wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file
diff --git a/addons/l10n_be/company.py b/addons/l10n_be/company.py
deleted file mode 100644
index 118696ec9f6..00000000000
--- a/addons/l10n_be/company.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-# 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 <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-from osv import osv
-
-class res_company(osv.osv):
- _inherit = "res.company"
- _description = 'Company'
-
- def _get_default_ad(self, addresses):
- name = email = phone = city = post_code = address = country_code = ""
- for ads in addresses:
- if ads.type == 'default':
- city = ads.city or ""
- post_code = ads.zip or ""
- if ads.street:
- address = ads.street or ""
- if ads.street2:
- address += " " + ads.street2
- if ads.country_id:
- country_code = ads.country_id and ads.country_id.code or ""
- name = ads.name or ""
- email = ads.email or ""
- phone = ads.phone or ""
- return name, email, phone, city, post_code, address, country_code
-res_company()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
index 5e357facd86..092d907e4ab 100644
--- a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
+++ b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
@@ -45,8 +45,8 @@ class l10n_be_vat_declaration(osv.osv_memory):
'tax_code_id': fields.many2one('account.tax.code', 'Tax Code', domain=[('parent_id', '=', False)], required=True),
'msg': fields.text('File created', size=64, readonly=True),
'file_save': fields.binary('Save File'),
- 'ask_restitution': fields.boolean('Ask Restitution',help='It indicates whether a restitution is to made or not?'),
- 'ask_payment': fields.boolean('Ask Payment',help='It indicates whether a payment is to made or not?'),
+ 'ask_restitution': fields.boolean('Ask Restitution',help='It indicates whether a restitution is to make or not?'),
+ 'ask_payment': fields.boolean('Ask Payment',help='It indicates whether a payment is to make or not?'),
'client_nihil': fields.boolean('Last Declaration, no clients in client listing', help='Tick this case only if it concerns only the last statement on the civil or cessation of activity: ' \
'no clients to be included in the client listing.'),
'comments': fields.text('Comments'),
@@ -70,6 +70,7 @@ class l10n_be_vat_declaration(osv.osv_memory):
obj_tax_code = self.pool.get('account.tax.code')
obj_acc_period = self.pool.get('account.period')
obj_user = self.pool.get('res.users')
+ obj_partner = self.pool.get('res.partner')
mod_obj = self.pool.get('ir.model.data')
if context is None:
@@ -83,7 +84,7 @@ class l10n_be_vat_declaration(osv.osv_memory):
obj_company = obj_user.browse(cr, uid, uid, context=context).company_id
vat_no = obj_company.partner_id.vat
if not vat_no:
- raise osv.except_osv(_('Insufficient Data!'), _('No VAT Number Associated with Main Company.'))
+ raise osv.except_osv(_('insufficient data!'), _('No VAT number associated with your company.'))
vat_no = vat_no.replace(' ','').upper()
vat = vat_no[2:]
@@ -93,8 +94,9 @@ class l10n_be_vat_declaration(osv.osv_memory):
ctx['period_id'] = data['period_id'][0]
tax_info = obj_tax_code.read(cr, uid, tax_code_ids, ['code','sum_period'], context=ctx)
- name = email = phone = address = post_code = city = country_code = ''
- name, email, phone, city, post_code, address, country_code = self.pool.get('res.company')._get_default_ad(obj_company.partner_id)
+ default_address = obj_partner.address_get(cr, uid, [obj_company.partner_id.id])
+ default_address_id = default_address.get("default", obj_company.partner_id.id)
+ address_id= obj_partner.browse(cr, uid, default_address_id, context)
account_period = obj_acc_period.browse(cr, uid, data['period_id'][0], context=context)
issued_by = vat_no[:2]
@@ -106,21 +108,21 @@ class l10n_be_vat_declaration(osv.osv_memory):
ending_month = account_period.date_stop[5:7]
quarter = str(((int(starting_month) - 1) / 3) + 1)
- if not email:
+ if not address_id.email:
raise osv.except_osv(_('Insufficient Data!'),_('No email address associated with the company.'))
- if not phone:
+ if not address_id.phone:
raise osv.except_osv(_('Insufficient Data!'),_('No phone associated with the company.'))
file_data = {
'issued_by': issued_by,
'vat_no': vat_no,
'only_vat': vat_no[2:],
'cmpny_name': obj_company.name,
- 'address': address,
- 'post_code': post_code,
- 'city': city,
- 'country_code': country_code,
- 'email': email,
- 'phone': phone.replace('.','').replace('/','').replace('(','').replace(')','').replace(' ',''),
+ 'address': "%s %s"%(address_id.street or "",address_id.street2 or ""),
+ 'post_code': address_id.zip or "",
+ 'city': address_id.city or "",
+ 'country_code': address_id.country_id and address_id.country_id.code or "",
+ 'email': address_id.email or "",
+ 'phone': address_id.phone.replace('.','').replace('/','').replace('(','').replace(')','').replace(' ',''),
'send_ref': send_ref,
'quarter': quarter,
'month': starting_month,
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 8cad2d01a3e..fad6ca53f92 100644
--- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py
+++ b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py
@@ -61,7 +61,7 @@ class partner_vat(osv.osv_memory):
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
period_ids = obj_period.search(cr, uid, [('date_start' ,'>=', date_start), ('date_stop','<=',date_stop), ('company_id','=',company_id)])
if not period_ids:
- raise osv.except_osv(_('Insufficient Data!'), _('No data for the selected year.'))
+ raise osv.except_osv(_('insufficient data!'), _('No data for the selected year.'))
partners = []
partner_ids = obj_partner.search(cr, uid, [('vat_subjected', '!=', False), ('vat','ilike','BE%')], context=context)
@@ -87,6 +87,9 @@ class partner_vat(osv.osv_memory):
if record['turnover'] >= data['limit_amount']:
id_client = obj_vat_lclient.create(cr, uid, record, context=context)
partners.append(id_client)
+
+ if not partners:
+ raise osv.except_osv(_('insufficient data!'), _('No data found for the selected year.'))
context.update({'partner_ids': partners, 'year': data['year'], 'limit_amount': data['limit_amount']})
model_data_ids = obj_model_data.search(cr, uid, [('model','=','ir.ui.view'), ('name','=','view_vat_listing')])
resource_id = obj_model_data.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
@@ -190,7 +193,7 @@ class partner_vat_list(osv.osv_memory):
phone = ads.phone.replace(' ','') or ''
email = ads.email or ''
name = ads.name or ''
- city = obj_partner.get_city(cr, uid, ads.id)
+ city = ads.city or ''
zip = obj_partner.browse(cr, uid, ads.id, context=context).zip or ''
if not city:
city = ''
diff --git a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml
index 563396c8a03..4ac165344e8 100644
--- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml
+++ b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml
@@ -6,18 +6,18 @@
<field name="model">partner.vat</field>
<field name="arch" type="xml">
<form string="Partner VAT Listing" version="7.0">
- <header>
+ <p class="oe_grey">
+ This wizard will create an XML file for VAT details and total invoiced amounts per partner.
+ </p>
+ <group>
+ <field name="year"/>
+ <field name="limit_amount"/>
+ </group>
+ <footer>
<button name="get_partner" string="View Customers" type="object" class="oe_highlight" />
or
<button string="Cancel" class="oe_link" special="cancel" />
- </header>
- <group>
- <label string="This wizard will create an XML file for VAT details and total invoiced amounts per partner." colspan="4"/>
- </group>
- <newline/>
- <field name="year"/>
- <newline/>
- <field name="limit_amount"/>
+ </footer>
</form>
</field>
</record>
diff --git a/addons/l10n_be/wizard/l10n_be_vat_intra.py b/addons/l10n_be/wizard/l10n_be_vat_intra.py
index 47a29a8457f..aa4dac11072 100644
--- a/addons/l10n_be/wizard/l10n_be_vat_intra.py
+++ b/addons/l10n_be/wizard/l10n_be_vat_intra.py
@@ -108,7 +108,7 @@ class partner_vat_intra(osv.osv_memory):
# Get Company vat
company_vat = data_company.partner_id.vat
if not company_vat:
- raise osv.except_osv(_('Insufficient Data!'),_('No VAT number associated with the company.'))
+ raise osv.except_osv(_('insufficient data!'),_('No VAT number associated with your company.'))
company_vat = company_vat.replace(' ','').upper()
issued_by = company_vat[:2]
diff --git a/addons/l10n_fr_rib/bank_view.xml b/addons/l10n_fr_rib/bank_view.xml
index a25867ffa6a..5b750326601 100644
--- a/addons/l10n_fr_rib/bank_view.xml
+++ b/addons/l10n_fr_rib/bank_view.xml
@@ -8,7 +8,7 @@
<field name="inherit_id" ref="account.view_partner_property_form" />
<field name="arch" type="xml">
<data>
- <xpath expr="//field[@name='bank_ids']/form/field[@name='acc_number']" position="before">
+ <xpath expr="//field[@name='bank_ids']//field[@name='acc_number']" position="before">
<newline />
<field name="bank_code" />
<field name="office" />
diff --git a/addons/multi_company/multi_company_demo.xml b/addons/multi_company/multi_company_demo.xml
index d120550e3b9..00c68186108 100644
--- a/addons/multi_company/multi_company_demo.xml
+++ b/addons/multi_company/multi_company_demo.xml
@@ -181,7 +181,7 @@
</record>
<record id="sale.sale_order_5" model="sale.order">
- <field name="company_id" ref="res_company_oerp_in"/>
+ <field name="company_id" ref="base.main_company"/>
</record>
diff --git a/addons/note/note_view.xml b/addons/note/note_view.xml
index 4ed2fade43f..99a2690cfe7 100644
--- a/addons/note/note_view.xml
+++ b/addons/note/note_view.xml
@@ -62,7 +62,7 @@
<div class="oe_dropdown_kanban">
<span>
<a name="onclick_note_is_done" type="object" t-if="record.open.raw_value" class="oe_e">W</a>
- <a name="onclick_note_not_done" type="object" t-if="!record.open.raw_value" class="oe_e">è</a>
+ <a name="onclick_note_not_done" type="object" t-if="!record.open.raw_value" class="oe_e">W</a>
</span>
<!-- dropdown menu -->
diff --git a/addons/note/static/src/css/Makefile b/addons/note/static/src/css/Makefile
deleted file mode 100644
index 91b3abc9333..00000000000
--- a/addons/note/static/src/css/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-memo.css: memo.sass
- sass -t expanded memo.sass memo.css
-
diff --git a/addons/note/static/src/css/note.css b/addons/note/static/src/css/note.css
index 6ada8d6cd14..d4b5f3d8d64 100644
--- a/addons/note/static/src/css/note.css
+++ b/addons/note/static/src/css/note.css
@@ -1,93 +1,53 @@
@charset "utf-8";
-@font-face {
- font-family: "mnmliconsRegular";
- src: url("/web/static/src/font/mnmliconsv21-webfont.eot") format("eot");
- src: url("/web/static/src/font/mnmliconsv21-webfont.woff") format("woff");
- src: url("/web/static/src/font/mnmliconsv21-webfont.ttf") format("truetype");
- src: url("/web/static/src/font/mnmliconsv21-webfont.svg") format("svg") active;
- font-weight: normal;
- font-style: normal;
+.oe_kanban_column .note_text_line_through {
+ text-decoration: line-through;
}
-@font-face {
- font-family: "EntypoRegular";
- src: url("/web/static/src/font/entypo-webfont.eot") format("eot");
- src: url("/web/static/src/font/entypo-webfont.eot?#iefix") format("embedded-opentype");
- src: url("/web/static/src/font/entypo-webfont.woff") format("woff");
- src: url("/web/static/src/font/entypo-webfont.ttf") format("truetype");
- src: url("/web/static/src/font/entypo-webfont.svg") format("svg") active;
- font-weight: normal;
- font-style: normal;
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_0 {
+ box-shadow: 0px 4px 9px rgba(48, 48, 48, 0.15);
}
-
-@-moz-keyframes bounce {
- 0% {
- -moz-transform: scale(0);
- opacity: 0;
- }
-
- 50% {
- -moz-transform: scale(1.3);
- opacity: 0.4;
- }
-
- 75% {
- -moz-transform: scale(0.9);
- opacity: 0.7;
- }
-
- 100% {
- -moz-transform: scale(1);
- opacity: 1;
- }
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_1 {
+ box-shadow: 0px 4px 9px rgba(0, 0, 0, 0.15);
}
-
-@-webkit-keyframes bounce {
- 0% {
- -webkit-transform: scale(0);
- opacity: 0;
- }
-
- 50% {
- -webkit-transform: scale(1.3);
- opacity: 0.4;
- }
-
- 75% {
- -webkit-transform: scale(0.9);
- opacity: 0.7;
- }
-
- 100% {
- -webkit-transform: scale(1);
- opacity: 1;
- }
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_2 {
+ box-shadow: 0px 4px 9px rgba(48, 0, 0, 0.15);
}
-
-.oe_kanban_color_2 {
- background-color: red;
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_3 {
+ box-shadow: 0px 4px 9px rgba(97, 93, 0, 0.16);
}
-
-.oe_kanban_column .note_text_line_through {
- text-decoration: line-through;
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_4 {
+ box-shadow: 0px 4px 9px rgba(77, 128, 0, 0.17);
}
-
-.openerp .oe_fold_column .oe_kanban_card_fancy {
- text-decoration: none;
- color: black;
- display: block;
- padding: 1em;
- margin-right: 1em;
- margin-bottom: 1em;
- -moz-box-shadow: 5px 5px 7px #212121;
- -webkit-box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7);
- box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7);
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_5 {
+ box-shadow: 0px 4px 9px rgba(0, 88, 11, 0.15);
+}
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_6 {
+ box-shadow: 0px 4px 9px rgba(0, 80, 95, 0.15);
+}
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_7 {
+ box-shadow: 0px 4px 9px rgba(3, 13, 133, 0.18);
+}
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_8 {
+ box-shadow: 0px 4px 9px rgba(56, 0, 128, 0.15);
+}
+.openerp .oe_kanban_view.oe_notes .oe_kanban_card_fancy.oe_kanban_color_9 {
+ box-shadow: 0px 4px 9px rgba(102, 0, 116, 0.15);
}
-
.openerp .oe_kanban_record .oe_kanban_card_fancy {
+ text-shadow: none;
+ border-radius: 2px;
+ padding: 12px;
+ margin-left: 3px;
+ margin-right: 3px;
+ padding-bottom: 16px;
+ margin-bottom: 16px;
-webkit-transform: rotate(-2deg);
-o-transform: rotate(-2deg);
-moz-transform: rotate(-2deg);
+ -webkit-transition: all 300ms cubic-bezier(0.5, 0, 0.5, 1);
+ -moz-transition: all 300ms cubic-bezier(0.5, 0, 0.5, 1);
+ -ms-transition: all 300ms cubic-bezier(0.5, 0, 0.5, 1);
+ transition: all 300ms cubic-bezier(0.5, 0, 0.5, 1);
}
.openerp .oe_kanban_record:nth-of-type(even) .oe_kanban_card_fancy {
-webkit-transform: rotate(1deg);
@@ -132,12 +92,14 @@
.openerp .oe_kanban_column .oe_fold_column .oe_kanban_card_fancy:hover,
.openerp .oe_kanban_column .oe_fold_column .oe_kanban_card_fancy:focus {
- box-shadow: 10px 10px 7px rgba(0, 0, 0, 0.7);
- -moz-box-shadow: 10px 10px 7px rgba(0, 0, 0, 0.7);
- -webkit-box-shadow: 10px 10px 7px rgba(0, 0, 0, 0.7);
position: relative;
z-index: 5;
- -webkit-transform: rotate(0);
- -o-transform: rotate(0);
- -moz-transform: rotate(0);
+ border-color: rgba(0, 0, 0, 0.4);
+ -webkit-transition: all 150ms cubic-bezier(0.5, 0, 0.5, 1);
+ -moz-transition: all 150ms cubic-bezier(0.5, 0, 0.5, 1);
+ -ms-transition: all 150ms cubic-bezier(0.5, 0, 0.5, 1);
+ transition: all 150ms cubic-bezier(0.5, 0, 0.5, 1);
+ -webkit-transform: rotate(0) !important;
+ -o-transform: rotate(0) !important;
+ -moz-transform: rotate(0) !important;
}
diff --git a/addons/note/static/src/css/note.sass b/addons/note/static/src/css/note.sass
index 56aa91abc44..cc4e44f6765 100644
--- a/addons/note/static/src/css/note.sass
+++ b/addons/note/static/src/css/note.sass
@@ -1,168 +1,54 @@
@charset "utf-8"
-// Variables {{{
-$section-title-color: #8786b7
-$tag-bg-light: #f0f0fa
-$tag-bg-dark: #8786b7
-$tag-border: #afafb6
-$tag-border-selected: #a6a6fe
-$hover-background: #f0f0fa
-$link-color: #8a89ba
-$sheet-max-width: 860px
-// }}}
-// Mixins {{{
-@font-face
- font-family: 'mnmliconsRegular'
- src: url('/web/static/src/font/mnmliconsv21-webfont.eot') format('eot')
- src: url('/web/static/src/font/mnmliconsv21-webfont.woff') format('woff')
- src: url('/web/static/src/font/mnmliconsv21-webfont.ttf') format('truetype')
- src: url('/web/static/src/font/mnmliconsv21-webfont.svg') format('svg') active
- font-weight: normal
- font-style: normal
-
-@font-face
- font-family: 'EntypoRegular'
- src: url('/web/static/src/font/entypo-webfont.eot') format('eot')
- src: url('/web/static/src/font/entypo-webfont.eot?#iefix') format('embedded-opentype')
- src: url('/web/static/src/font/entypo-webfont.woff') format('woff')
- src: url('/web/static/src/font/entypo-webfont.ttf') format('truetype')
- src: url('/web/static/src/font/entypo-webfont.svg') format('svg') active
- font-weight: normal
- font-style: normal
-
-@mixin reset()
- border: none
- padding: 0
- margin: 0
- background: none
- @include radius(none)
- @include box-shadow(none)
-
-@mixin vertical-gradient($startColor: #555, $endColor: #333)
- background-color: $startColor
- background-image: -webkit-gradient(linear, left top, left bottom, from($startColor), to($endColor)) /* Saf4+, Chrome */
- background-image: -webkit-linear-gradient(top, $startColor, $endColor) /* Chrome 10+, Saf5.1+, iOS 5+ */
- background-image: -moz-linear-gradient(top, $startColor, $endColor) /* FF3.6 */
- background-image: -ms-linear-gradient(top, $startColor, $endColor) /* IE10 */
- background-image: -o-linear-gradient(top, $startColor, $endColor) /* Opera 11.10+ */
- background-image: linear-gradient(to bottom, $startColor, $endColor)
-
-@mixin radial-gradient($gradient)
- background-position: center center
- background-image: -webkit-radial-gradient(circle, $gradient)
- background-image: -moz-radial-gradient($gradient)
- background-image: -ms-radial-gradient($gradient)
- background-image: radial-gradient($gradient)
-
-@mixin radius($radius: 5px)
- -moz-border-radius: $radius
- -webkit-border-radius: $radius
- border-radius: $radius
-
-@mixin box-shadow($bsval: 0px 1px 4px #777)
- -moz-box-shadow: $bsval
- -webkit-box-shadow: $bsval
- box-shadow: $bsval
-
-@mixin transition($transval: (border linear 0.2s, box-shadow linear 0.2s))
- -webkit-transition: $transval
- -moz-transition: $transval
- -ms-transition: $transval
- -o-transition: $transval
- transition: $transval
-
-@mixin opacity($opacity: .5)
- filter: alpha(opacity=$opacity * 100)
- opacity: $opacity
-
-@mixin background-clip($clip: padding-box)
- -webkit-background-clip: $clip
- -moz-background-clip: $clip
- background-clip: $clip
-
-@mixin box-sizing($type: content)
- // type = border || content || padding
- -webkit-box-sizing: #{$type}-box
- -moz-box-sizing: #{$type}-box
- -ms-box-sizing: #{$type}-box
- box-sizing: #{$type}-box
-
-// Transforms the (readable) text of an inline element into an mmlicons icon,
-// allows for actual readable text in-code (and in readers?) with iconic looks
-@mixin text-to-icon($icon-name, $color: #404040)
- font-size: 1px
- letter-spacing: -1px
- color: transparent
- &: before
- font: 21px "mnmliconsRegular"
- content: $icon-name
- color: $color
-
-// }}}
-// CSS animation bounces {{{
-@-moz-keyframes bounce
- 0%
- -moz-transform: scale(0)
- opacity: 0
- 50%
- -moz-transform: scale(1.3)
- opacity: 0.4
- 75%
- -moz-transform: scale(0.9)
- opacity: 0.7
- 100%
- -moz-transform: scale(1)
- opacity: 1
-
-@-webkit-keyframes bounce
- 0%
- -webkit-transform: scale(0)
- opacity: 0
- 50%
- -webkit-transform: scale(1.3)
- opacity: 0.4
- 75%
- -webkit-transform: scale(0.9)
- opacity: 0.7
- 100%
- -webkit-transform: scale(1)
- opacity: 1
-// }}}
-
-
-.oe_kanban_color_2
- background-color: red
-
-// au BufWritePost,FileWritePost *.sass : !sass --style expanded --line-numbers <afile> > "%: p: r.css"
-
.oe_kanban_column
.note_text_line_through
text-decoration: line-through
-
-.openerp
- .oe_fold_column
- .oe_kanban_card_fancy
- text-decoration: none
- color: #000
- display: block
- padding: 1em
- margin-right: 1em
- margin-bottom: 1em
- -moz-box-shadow: 5px 5px 7px rgba(33,33,33,1)
- -webkit-box-shadow: 5px 5px 7px rgba(33,33,33,.7)
- box-shadow: 5px 5px 7px rgba(33,33,33,.7)
-
-
@mixin rotate($a)
- -webkit-transform: rotate($a)
- -o-transform: rotate($a)
+ -webkit-transform: rotate($a)
+ -o-transform: rotate($a)
-moz-transform: rotate($a)
+@mixin transition($what:all,$duration:100ms)
+ -webkit-transition: $what $duration cubic-bezier(0.5,0,0.5,1)
+ -moz-transition: $what $duration cubic-bezier(0.5,0,0.5,1)
+ -ms-transition: $what $duration cubic-bezier(0.5,0,0.5,1)
+ transition: $what $duration cubic-bezier(0.5,0,0.5,1)
+
+
.openerp
+ .oe_kanban_view.oe_notes
+ .oe_kanban_card_fancy.oe_kanban_color_0
+ box-shadow: 0px 4px 9px rgba(48,48,48,0.15)
+ .oe_kanban_card_fancy.oe_kanban_color_1
+ box-shadow: 0px 4px 9px rgba(0,0,0,0.15)
+ .oe_kanban_card_fancy.oe_kanban_color_2
+ box-shadow: 0px 4px 9px rgba(48,0,0,0.15)
+ .oe_kanban_card_fancy.oe_kanban_color_3
+ box-shadow: 0px 4px 9px rgba(97,93,0,0.16)
+ .oe_kanban_card_fancy.oe_kanban_color_4
+ box-shadow: 0px 4px 9px rgba(77,128,0,0.17)
+ .oe_kanban_card_fancy.oe_kanban_color_5
+ box-shadow: 0px 4px 9px rgba(0,88,11,0.15)
+ .oe_kanban_card_fancy.oe_kanban_color_6
+ box-shadow: 0px 4px 9px rgba(0,80,95,0.15)
+ .oe_kanban_card_fancy.oe_kanban_color_7
+ box-shadow: 0px 4px 9px rgba(3,13,133,0.18)
+ .oe_kanban_card_fancy.oe_kanban_color_8
+ box-shadow: 0px 4px 9px rgba(56,0,128,0.15)
+ .oe_kanban_card_fancy.oe_kanban_color_9
+ box-shadow: 0px 4px 9px rgba(102,0,116,0.15)
.oe_kanban_record
.oe_kanban_card_fancy
+ text-shadow: none
+ border-radius: 2px
+ padding: 12px
+ margin-left: 3px
+ margin-right: 3px
+ padding-bottom: 16px
+ margin-bottom: 16px
@include rotate(-2deg)
+ @include transition($what:all, $duration:300ms)
.oe_kanban_record:nth-of-type(even)
.oe_kanban_card_fancy
@include rotate(1deg)
@@ -193,17 +79,16 @@ $sheet-max-width: 860px
@include rotate(-1deg)
-@mixin oe_kanban_card_fancy
- box-shadow: 10px 10px 7px rgba(0,0,0,.7)
- -moz-box-shadow: 10px 10px 7px rgba(0,0,0,.7)
- -webkit-box-shadow: 10px 10px 7px rgba(0,0,0,.7)
- position: relative
- z-index: 5
- @include rotate(0)
-
.openerp
.oe_kanban_column
.oe_fold_column
.oe_kanban_card_fancy:hover,
.oe_kanban_card_fancy:focus
- @include oe_kanban_card_fancy
+ position: relative
+ z-index: 5
+ border-color: rgba(0,0,0,0.4)
+ @include transition($what:all, $duration:150ms)
+ -webkit-transform: rotate(0) !important
+ -o-transform: rotate(0) !important
+ -moz-transform: rotate(0) !important
+
diff --git a/addons/portal/portal_demo.xml b/addons/portal/portal_demo.xml
index f4ba8fe2192..a8727b99556 100644
--- a/addons/portal/portal_demo.xml
+++ b/addons/portal/portal_demo.xml
@@ -19,7 +19,7 @@
<!-- Company news and comments -->
<record id="message_company_news0" model="mail.message">
- <field name="subject">Our first company's blogpost !</field>
+ <field name="subject">Our company's first blog-post !</field>
<field name="model">mail.group</field>
<field name="res_id" ref="company_news_feed"/>
<field name="body"><![CDATA[Hello, and welcome to our company's portal !
diff --git a/addons/project/i18n/project.pot b/addons/project/i18n/project.pot
index 46cf1a9279a..4f364cc1e66 100644
--- a/addons/project/i18n/project.pot
+++ b/addons/project/i18n/project.pot
@@ -1293,7 +1293,7 @@ msgstr ""
#. module: project
#: view:project.task:0
-msgid "Delegations History"
+msgid "Delegation"
msgstr ""
#. module: project
diff --git a/addons/project/project.py b/addons/project/project.py
index 58bc3714526..782c2e6635f 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -49,8 +49,9 @@ class project_task_type(osv.osv):
}
_defaults = {
'sequence': 1,
- 'state': 'draft',
+ 'state': 'open',
'fold': False,
+ 'case_default': True,
}
_order = 'sequence'
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 4d7bceb4599..6d4d7018f4a 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -130,7 +130,7 @@
</div>
</group>
<group>
- <group string="Administration">
+ <group string="Administration" groups="project.group_time_work_estimation_tasks">
<field name="planned_hours" widget="float_time"/>
<field name="effective_hours" widget="float_time"/>
<field name="resource_calendar_id"/>
@@ -143,7 +143,6 @@
<field name="currency_id" groups="base.group_multi_currency" required="1"/>
<field name="parent_id" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/>
-
</group>
</group>
</page>
@@ -297,16 +296,14 @@
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to start a new project.
- </p>
- <p>
+ </p><p>
Projects are used to organize your activities; plan
tasks, track issues, invoice timesheets. You can define
internal projects (R&amp;D, Improve Sales Process),
private projects (My Todos) or customer ones.
- </p>
- <p>
- You will be able collaborate with internal users on
- projects or invite customers to share your activities.
+ </p><p>
+ You will be able collaborate with internal users on
+ projects or invite customers to share your activities.
</p>
</field>
</record>
@@ -405,8 +402,6 @@
states="cancelled,done" context="{'button_reactivate':True}"/>
<button name="action_close" string="Done" type="object"
states="draft,open,pending"/>
- <button name="%(action_project_task_delegate)d" string="Delegate" type="action"
- states="pending,open,draft" groups="project.group_delegate_task"/>
<button name="do_cancel" string="Cancel" type="object"
states="draft,open,pending"/>
</span>
@@ -453,7 +448,9 @@
</group>
<div class="oe_clear"/>
</page>
- <page string="Delegations History" groups="project.group_delegate_task">
+ <page string="Delegation" groups="project.group_delegate_task">
+ <button name="%(action_project_task_delegate)d" string="Delegate" type="action"
+ states="pending,open,draft" groups="project.group_delegate_task"/>
<separator string="Parent Tasks"/>
<field name="parent_ids"/>
<separator string="Delegated tasks"/>
@@ -523,7 +520,7 @@
<t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit...</a></li></t>
<t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t>
<li>
- <ul class="oe_kanban_project_times">
+ <ul class="oe_kanban_project_times" groups="project.group_time_work_estimation_tasks">
<li><a name="set_remaining_time_1" type="object" class="oe_kanban_button">1</a></li>
<li><a name="set_remaining_time_2" type="object" class="oe_kanban_button">2</a></li>
<li><a name="set_remaining_time_5" type="object" class="oe_kanban_button">5</a></li>
@@ -540,7 +537,8 @@
<div>
<field name="project_id"/>
<t t-esc="kanban_text_ellipsis(record.description.value, 160)"/><br/>
- <i><field name="date_deadline"/></i>
+ <t t-if="record.date_deadline.raw_value and record.date_deadline.raw_value lt (new Date())" t-set="red">oe_kanban_text_red</t>
+ <span t-attf-class="#{red || ''}"><i><field name="date_deadline"/></i></span>
</div>
<div class="oe_kanban_bottom_right">
<a t-if="record.kanban_state.raw_value === 'normal'" type="object" string="Ready to Pull" name="set_kanban_state_done" class="oe_kanban_status"> </a>
@@ -801,7 +799,7 @@
<menuitem id="menu_tasks_config" name="GTD" parent="base.menu_definitions" sequence="1"/>
- <menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/>
+ <menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1" groups="base.group_no_one"/>
<menuitem action="open_task_type_form" name="Task Stages" id="menu_task_types_view" parent="base.menu_project_config_project" sequence="2"/>
<menuitem action="open_view_project_all" id="menu_projects" name="Projects" parent="menu_project_management" sequence="1"/>
diff --git a/addons/project/res_config.py b/addons/project/res_config.py
index 6642dbf485d..85b4bd7001b 100644
--- a/addons/project/res_config.py
+++ b/addons/project/res_config.py
@@ -30,7 +30,7 @@ class project_configuration(osv.osv_memory):
'module_project_mrp': fields.boolean('Generate tasks from sale orders',
help ="""This feature automatically creates project tasks from service products in sale orders.
More precisely, tasks are created for procurement lines with product of type 'Service',
- procurement method 'Make to Order', and supply method 'Produce'.
+ procurement method 'Make to Order', and supply method 'Manufacture'.
This installs the module project_mrp."""),
'module_pad': fields.boolean("Use integrated collaborative note pads on task",
help="""Lets the company customize which Pad installation should be used to link to new pads
@@ -52,7 +52,7 @@ class project_configuration(osv.osv_memory):
'module_project_issue_sheet': fields.boolean("Invoice working time on issues",
help="""Provides timesheet support for the issues/bugs management in project.
This installs the module project_issue_sheet."""),
- 'group_tasks_work_on_tasks': fields.boolean("Compute work activities on tasks",
+ 'group_tasks_work_on_tasks': fields.boolean("Log work activities on tasks",
implied_group='project.group_tasks_work_on_tasks',
help="Allows you to compute work on tasks."),
'group_time_work_estimation_tasks': fields.boolean("Manage time estimation on tasks",
@@ -72,4 +72,9 @@ class project_configuration(osv.osv_memory):
user = self.pool.get('res.users').browse(cr, uid, uid, context)
user.company_id.write({'project_time_mode_id': config.time_unit.id})
+ def onchange_time_estimation_project_timesheet(self, cr, uid, ids, group_time_work_estimation_tasks, module_project_timesheet):
+ if group_time_work_estimation_tasks or module_project_timesheet:
+ return {'value': {'group_tasks_work_on_tasks': True}}
+ return {}
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project/res_config_view.xml b/addons/project/res_config_view.xml
index 56803484adf..207f35da72e 100644
--- a/addons/project/res_config_view.xml
+++ b/addons/project/res_config_view.xml
@@ -29,7 +29,7 @@
<label for="id" string="Task"/>
<div>
<div>
- <field name="module_project_timesheet" class="oe_inline"/>
+ <field name="module_project_timesheet" on_change="onchange_time_estimation_project_timesheet(group_time_work_estimation_tasks, module_project_timesheet)" class="oe_inline"/>
<label for="module_project_timesheet"/>
</div>
<div>
@@ -50,7 +50,7 @@
<label for="id" string="Planning"/>
<div>
<div>
- <field name="group_time_work_estimation_tasks" class="oe_inline"/>
+ <field name="group_time_work_estimation_tasks" on_change="onchange_time_estimation_project_timesheet(group_time_work_estimation_tasks, module_project_timesheet)" class="oe_inline"/>
<label for="group_time_work_estimation_tasks"/>
</div>
<div>
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index 6d1d0272ab0..66b3b97b5e8 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -100,8 +100,6 @@
states="open"/>
<button name="case_close" string="Done" type="object"
states="draft,pending"/>
- <button name="case_escalate" string="Escalate" type="object"
- states="draft,open,pending"/>
<button name="case_cancel" string="Cancel" type="object"
states="draft,open,pending"/>
</span>
@@ -118,7 +116,11 @@
</group>
<group>
<field name="priority"/>
- <field name="project_id" required="True" on_change="on_change_project(project_id)" context="{'default_use_issues':1}"/>
+ <label for="project_id"/>
+ <div>
+ <field name="project_id" required="True" on_change="on_change_project(project_id)" class="oe_inline" context="{'default_use_issues':1}"/>
+ <button name="case_escalate" string="Escalate" type="object" states="draft,open,pending" class="oe_inline"/>
+ </div>
<label for="task_id"/>
<div>
<field name="task_id" on_change="onchange_task_id(task_id)" class="oe_inline" context="{'default_project_id':project_id}"/>
diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py
index 299a74f52aa..f9f6fb6a279 100644
--- a/addons/project_mrp/project_procurement.py
+++ b/addons/project_mrp/project_procurement.py
@@ -73,6 +73,7 @@ class procurement_order(osv.osv):
'date_deadline': procurement.date_planned,
'planned_hours': planned_hours,
'remaining_hours': planned_hours,
+ 'partner_id': procurement.sale_line_id and procurement.sale_line_id.order_id.partner_id.id or False,
'user_id': procurement.product_id.product_manager.id,
'notes': procurement.note,
'procurement_id': procurement.id,
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 9fe05da33fc..72ae354faa6 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -318,21 +318,26 @@ class purchase_order(osv.osv):
for po in self.browse(cr, uid, ids, context=context):
pick_ids += [picking.id for picking in po.picking_ids]
- res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_in_form')
- res_id = res and res[1] or False
-
- return {
- 'name': _('Receptions'),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'view_id': [res_id],
- 'res_model': 'stock.picking',
- 'context': "{'contact_display': 'partner'}",
- 'type': 'ir.actions.act_window',
- 'nodestroy': True,
- 'target': 'current',
- 'res_id': pick_ids and pick_ids[0] or False,
- }
+ action_model, action_id = tuple(mod_obj.get_object_reference(cr, uid, 'stock', 'action_picking_tree4'))
+ action = self.pool.get(action_model).read(cr, uid, action_id, context=context)
+ ctx = eval(action['context'])
+ ctx.update({
+ 'search_default_purchase_id': ids[0]
+ })
+ if pick_ids and len(pick_ids) == 1:
+ form_view_ids = [view_id for view_id, view in action['views'] if view == 'form']
+ view_id = form_view_ids and form_view_ids[0] or False
+ action.update({
+ 'views': [],
+ 'view_mode': 'form',
+ 'view_id': view_id,
+ 'res_id': pick_ids[0]
+ })
+
+ action.update({
+ 'context': ctx,
+ })
+ return action
def wkf_approve_order(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'approved', 'date_approve': fields.date.context_today(self,cr,uid,context=context)})
@@ -863,6 +868,12 @@ class purchase_order_line(osv.osv):
supplier_delay = int(supplier_info.delay) if supplier_info else 0
return datetime.strptime(date_order_str, DEFAULT_SERVER_DATE_FORMAT) + relativedelta(days=supplier_delay)
+ def _check_product_uom_group(self, cr, uid, context=None):
+ group_uom = self.pool.get('ir.model.data').get_object(cr, uid, 'product', 'group_uom')
+ res = [user for user in group_uom.users if user.id == uid]
+ return len(res) and True or False
+
+
def onchange_product_id(self, cr, uid, ids, pricelist_id, product_id, qty, uom_id,
partner_id, date_order=False, fiscal_position_id=False, date_planned=False,
name=False, price_unit=False, context=None):
@@ -908,7 +919,8 @@ class purchase_order_line(osv.osv):
uom_id = product_uom_po_id
if product.uom_id.category_id.id != product_uom.browse(cr, uid, uom_id, context=context).category_id.id:
- res['warning'] = {'title': _('Warning!'), 'message': _('Selected Unit of Measure does not belong to the same category as the product Unit of Measure.')}
+ if self._check_product_uom_group(cr, uid, context=context):
+ res['warning'] = {'title': _('Warning!'), 'message': _('Selected Unit of Measure does not belong to the same category as the product Unit of Measure.')}
uom_id = product_uom_po_id
res['value'].update({'product_uom': uom_id})
@@ -1083,15 +1095,15 @@ class procurement_order(osv.osv):
procurement_order()
-class mail_message(osv.osv):
- _name = 'mail.message'
- _inherit = 'mail.message'
+class mail_mail(osv.osv):
+ _name = 'mail.mail'
+ _inherit = 'mail.mail'
- def _postprocess_sent_message(self, cr, uid, message, context=None):
- if message.model == 'purchase.order':
+ def _postprocess_sent_message(self, cr, uid, mail, context=None):
+ if mail.model == 'purchase.order':
wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'purchase.order', message.res_id, 'send_rfq', cr)
- return super(mail_message, self)._postprocess_sent_message(cr, uid, message=message, context=context)
+ wf_service.trg_validate(uid, 'purchase.order', mail.res_id, 'send_rfq', cr)
+ return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context)
-mail_message()
+mail_mail()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 9a2bd02f9a2..d8e6942f7fc 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -14,19 +14,40 @@
<menuitem id="menu_purchase_config_purchase" name="Configuration"
groups="group_purchase_manager"
parent="base.menu_purchase_root" sequence="100"/>
+ <menuitem
+ action="product.product_pricelist_action_for_purchase" id="menu_product_pricelist_action2_purchase"
+ parent="menu_purchase_config_purchase" sequence="10" groups="product.group_purchase_pricelist" />
+ <record id="purchase_pricelist_version_action" model="ir.actions.act_window">
+ <field name="name">Pricelist Versions</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">product.pricelist.version</field>
+ <field name="view_type">form</field>
+ <field name="view_id" ref="product.product_pricelist_version_tree_view"/>
+ <field name="domain">[('pricelist_id.type','=','purchase')]</field>
+ <field name="help" type="html">
+ <p class="oe_view_nocontent_create">
+ Click to add a pricelist version.
+ </p><p>
+ There can be more than one version of a pricelist, each of
+ these must be valid during a certain period of time. Some
+ examples of versions: Main Prices, 2010, 2011, Summer Sales,
+ etc.
+ </p>
+ </field>
+ </record>
<menuitem
id="menu_purchase_config_pricelist" name="Pricelists"
parent="menu_purchase_config_purchase" sequence="50" groups="product.group_purchase_pricelist"/>
<menuitem
- action="product.product_pricelist_action" id="menu_product_pricelist_action_purhase"
- parent="menu_purchase_config_pricelist" sequence="20" groups="base.group_no_one"/>
+ action="purchase_pricelist_version_action" id="menu_purchase_pricelist_version_action"
+ parent="menu_purchase_config_pricelist" sequence="2" groups="product.group_purchase_pricelist"/>
+
<menuitem
- action="product.product_pricelist_action_for_purchase" id="menu_product_pricelist_action2_purchase"
- parent="menu_purchase_config_pricelist" sequence="10" />
-
+ action="product.product_price_type_action" id="menu_product_pricelist_action2_purchase_type"
+ parent="menu_purchase_config_pricelist" sequence="60" />
<menuitem
id="menu_product_in_config_purchase" name="Products"
parent="menu_purchase_config_purchase" sequence="30" groups="base.group_no_one"/>
@@ -188,7 +209,7 @@
<button name="view_picking" string="Receive Products" type="object" attrs="{'invisible': ['|', ('shipped','=',True), ('state','!=', 'approved')]}" class="oe_highlight"/>
<button name="action_cancel_draft" states="cancel,sent,confirmed" string="Set to Draft" type="object" />
<button name="purchase_cancel" states="draft,confirmed,sent" string="Cancel"/>
- <field name="state" widget="statusbar" statusbar_visible="draft,approved,done" statusbar_colors='{"except_picking":"red","except_invoice":"red","confirmed":"blue"}' readonly="1"/>
+ <field name="state" widget="statusbar" statusbar_visible="draft,sent,approved,done" statusbar_colors='{"except_picking":"red","except_invoice":"red","confirmed":"blue"}' readonly="1"/>
</header>
<sheet>
<div class="oe_title">
@@ -349,7 +370,7 @@
<field name="name">Quotations</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.order</field>
- <field name="context">{'search_default_draft': 1}</field>
+ <field name="context">{}</field>
<field name="domain">[('state','in',('draft','sent','confirmed'))]</field>
<field name="view_mode">tree,form,graph,calendar</field>
<field name="search_view_id" ref="view_purchase_order_filter"/>
diff --git a/addons/purchase/purchase_workflow.xml b/addons/purchase/purchase_workflow.xml
index 00fb5517568..212ce304e07 100644
--- a/addons/purchase/purchase_workflow.xml
+++ b/addons/purchase/purchase_workflow.xml
@@ -145,7 +145,7 @@
<record id="trans_router_invoice_no_order" model="workflow.transition">
<field name="act_from" ref="act_router"/>
<field name="act_to" ref="act_invoice_end"/>
- <field name="condition">invoice_method&lt;&gt;'order'</field>
+ <field name="condition">invoice_method&lt;&gt;'order' and invoiced</field>
</record>
<record id="trans_except_picking_picking_done" model="workflow.transition">
<field name="act_from" ref="act_except_picking"/>
diff --git a/addons/purchase/res_config.py b/addons/purchase/res_config.py
index bf7512a8666..19b059d4d5b 100644
--- a/addons/purchase/res_config.py
+++ b/addons/purchase/res_config.py
@@ -46,10 +46,6 @@ class purchase_config_settings(osv.osv_memory):
'group_purchase_delivery_address': fields.boolean("Allow a different address for incoming products and invoicings",
implied_group='purchase.group_delivery_invoice_address',
help="Allows you to specify different delivery and invoice addresses on a purchase order."),
- 'module_purchase_analytic_plans': fields.boolean('Allow using multiple analytic accounts on the same order',
- help ="""Allows the user to maintain several analysis plans. These let you split
- lines on a purchase order between several accounts and analytic plans.
- This installs the module purchase_analytic_plans."""),
'module_warning': fields.boolean("Alerts by products or supplier",
help="""Allow to configure warnings on products and trigger them when a user wants to purchase a given product or a given supplier.
Example: Product: this product is deprecated, do not purchase more than 5.
@@ -62,6 +58,12 @@ class purchase_config_settings(osv.osv_memory):
help="""Purchase Requisitions are used when you want to request quotations from several suppliers for a given set of products.
You can configure per product if you directly do a Request for Quotation
to one supplier or if you want a purchase requisition to negotiate with several suppliers."""),
+ 'module_purchase_analytic_plans': fields.boolean('Use multiple analytic accounts on purchase orders',
+ help ="""Allows the user to maintain several analysis plans. These let you split lines on a purchase order between several accounts and analytic plans.
+ This installs the module purchase_analytic_plans."""),
+ 'group_analytic_account_for_purchases': fields.boolean('Analytic accounting for purchases',
+ implied_group='purchase.group_analytic_accounting',
+ help="Allows you to specify an analytic account on purchase orders."),
}
_defaults = {
@@ -75,7 +77,8 @@ class account_config_settings(osv.osv_memory):
_inherit = 'account.config.settings'
_columns = {
'module_purchase_analytic_plans': fields.boolean('Use multiple analytic accounts on orders',
- help="""This allows install module purchase_analytic_plans."""),
+ help ="""Allows the user to maintain several analysis plans. These let you split lines on a purchase order between several accounts and analytic plans.
+ This installs the module purchase_analytic_plans."""),
'group_analytic_account_for_purchases': fields.boolean('Analytic accounting for purchases',
implied_group='purchase.group_analytic_accounting',
help="Allows you to specify an analytic account on purchase orders."),
diff --git a/addons/purchase/res_config_view.xml b/addons/purchase/res_config_view.xml
index 6453752a638..f659d7b437f 100644
--- a/addons/purchase/res_config_view.xml
+++ b/addons/purchase/res_config_view.xml
@@ -74,6 +74,10 @@
<field name="module_purchase_analytic_plans" class="oe_inline"/>
<label for="module_purchase_analytic_plans"/>
</div>
+ <div>
+ <field name="group_analytic_account_for_purchases" class="oe_inline"/>
+ <label for="group_analytic_account_for_purchases"/>
+ </div>
</div>
</group>
</form>
diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml
index 21c52b4d2ec..d248ef66160 100644
--- a/addons/purchase/stock_view.xml
+++ b/addons/purchase/stock_view.xml
@@ -11,16 +11,6 @@
</xpath>
</field>
</record>
- <record id="stock_picking_inherit_purchase" model="ir.ui.view">
- <field name="name">Picking list</field>
- <field name="model">stock.picking</field>
- <field name="inherit_id" ref="stock.view_picking_form"/>
- <field name="arch" type="xml">
- <field name="auto_picking" position="after">
- <field name="purchase_id" invisible="1"/>
- </field>
- </field>
- </record>
<record id="stock_picking_in_inherit_purchase" model="ir.ui.view">
<field name="name">Incoming Picking Inherited</field>
@@ -36,63 +26,18 @@
</field>
</record>
- <!-- Picking to Invoice -->
- <record id="view_picking_in_search_picking_to_invoice" model="ir.ui.view">
- <field name="name">stock.picking.in.search</field>
+ <record id="view_picking_in_search_picking_inherit" model="ir.ui.view">
+ <field name="name">stock.picking.in.search.inherit</field>
<field name="model">stock.picking.in</field>
+ <field name="inherit_id" ref="stock.view_picking_in_search"/>
<field name="arch" type="xml">
- <search string="Picking to Invoice">
- <field name="name" string="Picking to Invoice" filter_domain="['|',('name','ilike',self),('origin','ilike',self)]"/>
- <filter icon="terp-check" name="available" string="Available" domain="[('state','=','assigned')]" help="Incoming Shipments Available"/>
- <filter icon="terp-dialog-close" name="done" string="Received" domain="[('state','=','done')]" help="Incoming Shipments already Received"/>
- <separator/>
- <filter icon="terp-accessories-archiver-minus" string="Back Orders" domain="[('backorder_id', '!=', False)]" help="Is a Back Order"/>
- <separator/>
- <filter string="To Invoice" name="to_invoice" icon="terp-dolar" domain="[('invoice_state', '=', '2binvoiced')]"/>
- <field name="stock_journal_id"/>
- <field name="company_id" groups="base.group_multi_company"/>
- <field name="purchase_id" />
- <group expand="0" string="Group By..." colspan="4" col="8">
- <filter icon="terp-stock_effects-object-colorize" name="Status" string="Status" domain="[]" context="{'group_by':'state'}"/>
- <filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date'}"/>
- <filter string="Scheduled Date" icon="terp-go-month" domain="[]" context="{'group_by':'min_date'}"/>
- <filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'stock_journal_id'}"/>
- </group>
- </search>
+ <xpath expr="//field[@name='product_id']" position="before">
+ <field name="purchase_id"/>
+ </xpath>
</field>
</record>
- <record id="act_purchase_order_2_stock_picking" model="ir.actions.act_window">
- <field name="name">Incoming Shipments</field>
- <field name="res_model">stock.picking.in</field>
- <field name="type">ir.actions.act_window</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form,calendar</field>
- <field name="domain">[('type','=','in')]</field>
- <field name="context">{'search_default_purchase_id': active_id,'default_type': 'in'}</field>
- <field name="search_view_id" ref="view_picking_in_search_picking_to_invoice"/>
- </record>
-
- <record id="act_purchase_order_2_stock_picking_tree" model="ir.actions.act_window.view">
- <field eval="1" name="sequence"/>
- <field name="view_mode">tree</field>
- <field name="view_id" ref="stock.view_picking_in_tree"/>
- <field name="act_window_id" ref="act_purchase_order_2_stock_picking"/>
- </record>
-
- <record id="act_purchase_order_2_stock_picking_form" model="ir.actions.act_window.view">
- <field eval="2" name="sequence"/>
- <field name="view_mode">form</field>
- <field name="view_id" ref="stock.view_picking_in_form"/>
- <field name="act_window_id" ref="act_purchase_order_2_stock_picking"/>
- </record>
-
- <record id="act_purchase_order_2_stock_picking_calendar" model="ir.actions.act_window.view">
- <field eval="3" name="sequence"/>
- <field name="view_mode">calendar</field>
- <field name="view_id" ref="stock.stock_picking_in_calendar"/>
- <field name="act_window_id" ref="act_purchase_order_2_stock_picking"/>
- </record>
+ <!-- is it need ? we have another method "Receive Products"-->
<record id="purchase_order_2_stock_picking" model="ir.ui.view">
<field name="name">Purchase Picking Inherited</field>
<field name="model">purchase.order</field>
@@ -100,8 +45,8 @@
<field name="arch" type="xml">
<xpath expr="//div[contains(@class, 'oe_title')]" position="before">
<div class="oe_right oe_button_box" name="buttons">
- <button type="action"
- name="%(act_purchase_order_2_stock_picking)d"
+ <button type="object"
+ name="view_picking"
string="Incoming Shipments" states="approved"/>
</div>
</xpath>
@@ -110,13 +55,13 @@
<record id="action_picking_tree4_picking_to_invoice" model="ir.actions.act_window">
<field name="name">On Incoming Shipments</field>
- <field name="res_model">stock.picking</field>
+ <field name="res_model">stock.picking.in</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar</field>
<field name="domain">[('type','=','in')]</field>
<field name="context">{"default_type": "in", "contact_display": "partner_address", "search_default_done": 1, "search_default_to_invoice": 1}</field>
- <field name="search_view_id" ref="view_picking_in_search_picking_to_invoice"/>
+ <field name="search_view_id" ref="stock.view_picking_in_search"/>
<field name="help" type="html">
<p>
Here you can track all the product receptions of purchase
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index ba85a62ca1d..feaf411cb54 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -771,7 +771,8 @@ class sale_order(osv.osv):
'default_res_id': ids[0],
'default_use_template': True,
'default_template_id': template_id,
- })
+ 'mark_so_as_sent': True
+ })
return {
'view_type': 'form',
'view_mode': 'form',
@@ -1476,15 +1477,14 @@ class sale_order_line(osv.osv):
sale_order_line()
-class mail_message(osv.osv):
- _inherit = 'mail.message'
-
- def _postprocess_sent_message(self, cr, uid, message, context=None):
- if message.model == 'sale.order':
+class mail_compose_message(osv.osv):
+ _inherit = 'mail.compose.message'
+ def send_mail(self, cr, uid, ids, context=None):
+ context = context or {}
+ if context.get('mark_so_as_sent', False) and context.get('default_res_id', False):
wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'sale.order', message.res_id, 'quotation_sent', cr)
- return super(mail_message, self)._postprocess_sent_message(cr, uid, message=message, context=context)
-
-mail_message()
+ wf_service.trg_validate(uid, 'sale.order', context.get('default_res_id', False), 'quotation_sent', cr)
+ return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
+mail_compose_message()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale_crm/sale_crm_view.xml b/addons/sale_crm/sale_crm_view.xml
index be871b87796..e54ba158b9b 100644
--- a/addons/sale_crm/sale_crm_view.xml
+++ b/addons/sale_crm/sale_crm_view.xml
@@ -9,8 +9,8 @@
<field name="arch" type="xml">
<data>
<xpath expr="/form/header/button[@name='case_mark_lost']" position="after">
- <button states="done" string="Convert to Quote" name="%(action_crm_make_sale)d" type="action" class="oe_highlight"/>
- <button states="draft,open,pending" string="Convert to Quote" name="%(action_crm_make_sale)d" type="action"/>
+ <button states="done" string="Convert to Quotation" name="%(action_crm_make_sale)d" type="action" class="oe_highlight"/>
+ <button states="draft,open,pending" string="Convert to Quotation" name="%(action_crm_make_sale)d" type="action"/>
</xpath>
</data>
</field>
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index f96c3582a6d..5b7acea2d86 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -673,6 +673,13 @@ class stock_picking(osv.osv):
]
def action_process(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ context.update({
+ 'active_model': self._name,
+ 'active_ids': ids,
+ 'active_id': len(ids) and ids[0] or False
+ })
return {
'view_type': 'form',
'view_mode': 'form',
diff --git a/addons/stock/wizard/stock_partial_picking.py b/addons/stock/wizard/stock_partial_picking.py
index 68e053b9e22..2cf0a743faa 100644
--- a/addons/stock/wizard/stock_partial_picking.py
+++ b/addons/stock/wizard/stock_partial_picking.py
@@ -107,21 +107,10 @@ class stock_partial_picking(osv.osv_memory):
picking_ids = context.get('active_ids', [])
active_model = context.get('active_model')
- if active_model == 'purchase.order':
- for purchase_order in self.pool.get('purchase.order').browse(cr, uid, picking_ids, context=context):
- picking_ids = [picking_id.id for picking_id in purchase_order.picking_ids]
- elif active_model == 'sale.order':
- for sale_order in self.pool.get('sale.order').browse(cr, uid, picking_ids, context=context):
- picking_ids = [picking.id for picking in sale_order.picking_ids]
-
if not picking_ids or len(picking_ids) != 1:
# Partial Picking Processing may only be done for one picking at a time
return res
- # The check about active_model is there in case the client mismatched the context during propagation of it
- # (already seen in previous bug where context passed was containing ir.ui.menu as active_model and the menu
- # ID as active_id). Though this should be fixed in clients now, this place is sensitive enough to ensure the
- # consistancy of the context.
- assert active_model in ('stock.picking', 'stock.picking.in', 'stock.picking.out', 'purchase.order', 'sale.order'), 'Bad context propagation'
+ assert active_model in ('stock.picking', 'stock.picking.in', 'stock.picking.out'), 'Bad context propagation'
picking_id, = picking_ids
if 'picking_id' in fields:
res.update(picking_id=picking_id)
diff --git a/addons/web_linkedin/static/src/xml/linkedin.xml b/addons/web_linkedin/static/src/xml/linkedin.xml
index 1a8009ab066..4956fd7df5a 100644
--- a/addons/web_linkedin/static/src/xml/linkedin.xml
+++ b/addons/web_linkedin/static/src/xml/linkedin.xml
@@ -30,7 +30,7 @@
<t t-name="LinkedIn.DisabledWarning">
<div>
LinkedIn access was not enabled on this server.
- Please ask your administrator to configure it in Settings > Configuration > Linkedin.
+ Please ask your administrator to configure it in Settings > Configuration > Sales > Social Network Integration.
</div>
</t>
</templates> \ No newline at end of file