[MERGE] Merged with addons/trunk.
bzr revid: tde@openerp.com-20120920144900-isobpji9066sftj1
This commit is contained in:
commit
84fbc3b7da
|
@ -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)
|
||||
|
|
|
@ -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')]
|
||||
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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'], ))
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)"/>
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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)]"/>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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', '<>', 'view')]" name="account_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="type" />
|
||||
<field domain="[('type', '<>', 'view')]" name="account_id"/>
|
||||
<field name="amount"/>
|
||||
<field name="globalisation_id"/>
|
||||
<field name="sequence" readonly="0"/>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC") 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("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC") 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("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeF59z4EJADEIQ1F36k7u5E7ZKXeUQPACJ3wK7UNokVxVk9kHnQH7bY9hbDyDhNXgjpRLqFlo4M2GgfyJHhjq8V4agfrgPQX3JtJQGbofmCHgA/nAKks+JAjFAAAAAElFTkSuQmCC") 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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
|
@ -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)
|
|
@ -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>
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
};
|
|
@ -261,7 +261,6 @@ class hr_employee(osv.osv):
|
|||
_defaults = {
|
||||
'active': 1,
|
||||
'image': _get_default_image,
|
||||
'marital': 'single',
|
||||
'color': 0,
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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
|
||||
|
|
|
|
@ -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.
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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','<>',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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import company
|
||||
import wizard
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -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:
|
|
@ -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,
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
memo.css: memo.sass
|
||||
sass -t expanded memo.sass memo.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;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@-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;
|
||||
}
|
||||
|
||||
.oe_kanban_column .note_text_line_through {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
.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_0 {
|
||||
box-shadow: 0px 4px 9px rgba(48, 48, 48, 0.15);
|
||||
}
|
||||
.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);
|
||||
}
|
||||
.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);
|
||||
}
|
||||
.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);
|
||||
}
|
||||
.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_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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 !
|
||||
|
|
|
@ -1293,7 +1293,7 @@ msgstr ""
|
|||
|
||||
#. module: project
|
||||
#: view:project.task:0
|
||||
msgid "Delegations History"
|
||||
msgid "Delegation"
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
|
|
|
@ -49,8 +49,9 @@ class project_task_type(osv.osv):
|
|||
}
|
||||
_defaults = {
|
||||
'sequence': 1,
|
||||
'state': 'draft',
|
||||
'state': 'open',
|
||||
'fold': False,
|
||||
'case_default': True,
|
||||
}
|
||||
_order = 'sequence'
|
||||
|
||||
|
|
|
@ -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&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"/>
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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}"/>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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<>'order'</field>
|
||||
<field name="condition">invoice_method<>'order' and invoiced</field>
|
||||
</record>
|
||||
<record id="trans_except_picking_picking_done" model="workflow.transition">
|
||||
<field name="act_from" ref="act_except_picking"/>
|
||||
|
|
|
@ -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."),
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
Loading…
Reference in New Issue