[MERGE] Sync with trunk.
bzr revid: tde@openerp.com-20130226155252-vi618lsx000a1i01
This commit is contained in:
@@ -334,11 +334,11 @@
|
||||
<label for="currency_id" groups="base.group_multi_currency"/>
|
||||
<div groups="base.group_multi_currency">
|
||||
<field name="currency_id" class="oe_inline"/>
|
||||
<!-- note fp: I don't think we need this feature ?
|
||||
<button name="%(action_account_change_currency)d" type="action"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
class="oe_inline oe_link oe_edit_only"
|
||||
string="(change)"
|
||||
attrs="{'invisible':[('state','!=','draft')]}"
|
||||
groups="account.group_account_user"/> -->
|
||||
groups="account.group_account_user"/>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -8,19 +8,19 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2011-05-06 12:05+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2013-02-25 14:55+0000\n"
|
||||
"Last-Translator: Софче Димитријева <Unknown>\n"
|
||||
"Language-Team: Macedonian <mk@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-22 06:02+0000\n"
|
||||
"X-Generator: Launchpad (build 16378)\n"
|
||||
"X-Launchpad-Export-Date: 2013-02-26 05:09+0000\n"
|
||||
"X-Generator: Launchpad (build 16506)\n"
|
||||
|
||||
#. module: account_accountant
|
||||
#: model:ir.actions.client,name:account_accountant.action_client_account_menu
|
||||
msgid "Open Accounting Menu"
|
||||
msgstr ""
|
||||
msgstr "Отвори го менито за сметководство"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
|
||||
@@ -68,6 +68,22 @@
|
||||
<field name="search_view_id" ref="view_account_analytic_default_form_search"/>
|
||||
<field name="context">{"search_default_current":1}</field>
|
||||
</record>
|
||||
|
||||
<record id="action_product_default_list" model="ir.actions.act_window">
|
||||
<field name="name">Analytic Defaults</field>
|
||||
<field name="res_model">account.analytic.default</field>
|
||||
<field name="context">{'search_default_product_id': [active_id], 'default_product_id': active_id}</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="product_form_view_default_analytic_button">
|
||||
<field name="name">product.product.stock.move</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button string="Analytic Rules" name= "%(action_product_default_list)d" type="action" groups="analytic.group_analytic_accounting" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
name="Entries"
|
||||
@@ -99,13 +115,5 @@
|
||||
context="{'search_default_user_id': [active_id], 'default_user_id': active_id}"
|
||||
groups="analytic.group_analytic_accounting"/>
|
||||
|
||||
<act_window
|
||||
name="Analytic Rules"
|
||||
res_model="account.analytic.default"
|
||||
id="analytic_rule_action_product"
|
||||
src_model="product.product"
|
||||
context="{'search_default_product_id': [active_id], 'default_product_id': active_id}"
|
||||
groups="analytic.group_analytic_accounting"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
name="action_button_convert2opportunity"
|
||||
states="open,pending"
|
||||
icon="gtk-index"
|
||||
type="action" attrs="{'invisible':[('opportunity_id','!=',False)]}"/>
|
||||
type="object" attrs="{'invisible':[('opportunity_id','!=',False)]}"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -0,0 +1,188 @@
|
||||
# Arabic translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-02-25 21:35+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Arabic <ar@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-02-26 05:09+0000\n"
|
||||
"X-Generator: Launchpad (build 16506)\n"
|
||||
|
||||
#. module: google_docs
|
||||
#: code:addons/google_docs/google_docs.py:139
|
||||
#, python-format
|
||||
msgid "Key Error!"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: view:google.docs.config:0
|
||||
msgid ""
|
||||
"for a presentation (slide show) document with url like "
|
||||
"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id"
|
||||
".p`, the ID is `presentation:123456789`"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: view:google.docs.config:0
|
||||
msgid ""
|
||||
"for a text document with url like "
|
||||
"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is "
|
||||
"`document:123456789`"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: field:google.docs.config,gdocs_resource_id:0
|
||||
msgid "Google Resource ID to Use as Template"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: view:google.docs.config:0
|
||||
msgid ""
|
||||
"for a drawing document with url like "
|
||||
"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is "
|
||||
"`drawings:123456789`"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#. openerp-web
|
||||
#: code:addons/google_docs/static/src/xml/gdocs.xml:6
|
||||
#, python-format
|
||||
msgid "Add Google Doc..."
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: view:google.docs.config:0
|
||||
msgid ""
|
||||
"This is the id of the template document, on google side. You can find it "
|
||||
"thanks to its URL:"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: model:ir.model,name:google_docs.model_google_docs_config
|
||||
msgid "Google Docs templates config"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#. openerp-web
|
||||
#: code:addons/google_docs/static/src/js/gdocs.js:25
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The user google credentials are not set yet. Contact your administrator for "
|
||||
"help."
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: view:google.docs.config:0
|
||||
msgid ""
|
||||
"for a spreadsheet document with url like "
|
||||
"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, "
|
||||
"the ID is `spreadsheet:123456789`"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: code:addons/google_docs/google_docs.py:101
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Your resource id is not correct. You can find the id in the google docs URL."
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: code:addons/google_docs/google_docs.py:125
|
||||
#, python-format
|
||||
msgid "Creating google docs may only be done by one at a time."
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: code:addons/google_docs/google_docs.py:56
|
||||
#: code:addons/google_docs/google_docs.py:101
|
||||
#: code:addons/google_docs/google_docs.py:125
|
||||
#, python-format
|
||||
msgid "Google Docs Error!"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: code:addons/google_docs/google_docs.py:56
|
||||
#, python-format
|
||||
msgid "Check your google configuration in Users/Users/Synchronization tab."
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: model:ir.ui.menu,name:google_docs.menu_gdocs_config
|
||||
msgid "Google Docs configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config
|
||||
#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config
|
||||
msgid "Models configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: field:google.docs.config,model_id:0
|
||||
msgid "Model"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#. openerp-web
|
||||
#: code:addons/google_docs/static/src/js/gdocs.js:28
|
||||
#, python-format
|
||||
msgid "User Google credentials are not yet set."
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: code:addons/google_docs/google_docs.py:139
|
||||
#, python-format
|
||||
msgid "Your Google Doc Name Pattern's key does not found in object."
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: help:google.docs.config,name_template:0
|
||||
msgid ""
|
||||
"Choose how the new google docs will be named, on google side. Eg. "
|
||||
"gdoc_%(field_name)s"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: view:google.docs.config:0
|
||||
msgid "Google Docs Configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: help:google.docs.config,gdocs_resource_id:0
|
||||
msgid ""
|
||||
"\n"
|
||||
"This is the id of the template document, on google side. You can find it "
|
||||
"thanks to its URL: \n"
|
||||
"*for a text document with url like "
|
||||
"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is "
|
||||
"`document:123456789`\n"
|
||||
"*for a spreadsheet document with url like "
|
||||
"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, "
|
||||
"the ID is `spreadsheet:123456789`\n"
|
||||
"*for a presentation (slide show) document with url like "
|
||||
"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id"
|
||||
".p`, the ID is `presentation:123456789`\n"
|
||||
"*for a drawing document with url like "
|
||||
"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is "
|
||||
"`drawings:123456789`\n"
|
||||
"...\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: model:ir.model,name:google_docs.model_ir_attachment
|
||||
msgid "ir.attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: google_docs
|
||||
#: field:google.docs.config,name_template:0
|
||||
msgid "Google Doc Name Pattern"
|
||||
msgstr ""
|
||||
@@ -93,6 +93,10 @@ class hr_job(osv.osv):
|
||||
_inherit = ['mail.thread']
|
||||
_columns = {
|
||||
'name': fields.char('Job Name', size=128, required=True, select=True),
|
||||
# TO CLEAN: when doing a cleaning, we should change like this:
|
||||
# no_of_recruitment: a function field
|
||||
# expected_employees: float
|
||||
# This would allow a clean update when creating new employees.
|
||||
'expected_employees': fields.function(_no_of_employee, string='Total Forecasted Employees',
|
||||
help='Expected number of employees for this job position after new recruitment.',
|
||||
store = {
|
||||
@@ -146,6 +150,7 @@ class hr_employee(osv.osv):
|
||||
_name = "hr.employee"
|
||||
_description = "Employee"
|
||||
_inherits = {'resource.resource': "resource_id"}
|
||||
_inherit = ['mail.thread']
|
||||
|
||||
def _get_image(self, cr, uid, ids, name, args, context=None):
|
||||
result = dict.fromkeys(ids, False)
|
||||
|
||||
@@ -84,6 +84,10 @@
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -116,7 +116,10 @@ class hr_holidays(osv.osv):
|
||||
},
|
||||
}
|
||||
|
||||
def _employee_get(self, cr, uid, context=None):
|
||||
def _employee_get(self, cr, uid, context=None):
|
||||
emp_id = context.get('default_employee_id', False)
|
||||
if emp_id:
|
||||
return emp_id
|
||||
ids = self.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)], context=context)
|
||||
if ids:
|
||||
return ids[0]
|
||||
@@ -203,9 +206,9 @@ class hr_holidays(osv.osv):
|
||||
leave_ids = obj_res_leave.search(cr, uid, [('holiday_id', 'in', ids)], context=context)
|
||||
return obj_res_leave.unlink(cr, uid, leave_ids, context=context)
|
||||
|
||||
def onchange_type(self, cr, uid, ids, holiday_type):
|
||||
result = {'value': {'employee_id': False}}
|
||||
if holiday_type == 'employee':
|
||||
def onchange_type(self, cr, uid, ids, holiday_type, employee_id=False, context=None):
|
||||
result = {}
|
||||
if holiday_type == 'employee' and not employee_id:
|
||||
ids_employee = self.pool.get('hr.employee').search(cr, uid, [('user_id','=', uid)])
|
||||
if ids_employee:
|
||||
result['value'] = {
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
<field name="category_id" attrs="{'required':[('holiday_type','=','category')], 'invisible':[('holiday_type','=','employee')], 'readonly':[('state','!=','draft'), ('state','!=','confirm')]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" width="130" string="Mode" groups="base.group_hr_user"/>
|
||||
<field name="holiday_type" on_change="onchange_type(holiday_type, employee_id)" attrs="{'readonly':[('state','!=','draft')]}" width="130" string="Mode" groups="base.group_hr_user"/>
|
||||
<field name="employee_id" attrs="{'required':[('holiday_type','=','employee')],'invisible':[('holiday_type','=','category')]}" on_change="onchange_employee(employee_id)" groups="base.group_hr_user"/>
|
||||
<field name="department_id" attrs="{'readonly':[('holiday_type','=','category')]}" groups="base.group_hr_user"/>
|
||||
</group>
|
||||
@@ -206,7 +206,8 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="red:state == 'refuse';blue:state == ' draft';black:state in ('confirm','validate','validate1')" string="Leave Requests">
|
||||
<field name="employee_id"/>
|
||||
<field name="holiday_type" string="Mode" groups="base.group_hr_user"/>
|
||||
<field name="holiday_type" string="Mode" groups="base.group_no_one"/>
|
||||
<field name="holiday_status_id"/>
|
||||
<field name="name"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
@@ -214,7 +215,6 @@
|
||||
<field name="state"/>
|
||||
<field name="category_id" invisible="1"/>
|
||||
<field name="department_id" invisible="not context.get('set_visible',False)"/>
|
||||
<field name="holiday_status_id" invisible="1"/>
|
||||
<field name="manager_id" invisible="1"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
</tree>
|
||||
|
||||
@@ -420,12 +420,13 @@ class hr_applicant(base_stage, osv.Model):
|
||||
act_window = self.pool.get('ir.actions.act_window')
|
||||
emp_id = False
|
||||
for applicant in self.browse(cr, uid, ids, context=context):
|
||||
address_id = False
|
||||
address_id = contact_name = False
|
||||
if applicant.partner_id:
|
||||
address_id = self.pool.get('res.partner').address_get(cr,uid,[applicant.partner_id.id],['contact'])['contact']
|
||||
if applicant.job_id:
|
||||
contact_name = self.pool.get('res.partner').name_get(cr,uid,[applicant.partner_id.id])[0][1]
|
||||
if applicant.job_id and (applicant.partner_name or contact_name):
|
||||
applicant.job_id.write({'no_of_recruitment': applicant.job_id.no_of_recruitment - 1})
|
||||
emp_id = hr_employee.create(cr,uid,{'name': applicant.partner_name or applicant.name,
|
||||
emp_id = hr_employee.create(cr,uid,{'name': applicant.partner_name or contact_name,
|
||||
'job_id': applicant.job_id.id,
|
||||
'address_home_id': address_id,
|
||||
'department_id': applicant.department_id.id
|
||||
@@ -433,7 +434,7 @@ class hr_applicant(base_stage, osv.Model):
|
||||
self.write(cr, uid, [applicant.id], {'emp_id': emp_id}, context=context)
|
||||
self.case_close(cr, uid, [applicant.id], context)
|
||||
else:
|
||||
raise osv.except_osv(_('Warning!'), _('You must define Applied Job for this applicant.'))
|
||||
raise osv.except_osv(_('Warning!'), _('You must define an Applied Job and a Contact Name for this applicant.'))
|
||||
|
||||
action_model, action_id = model_data.get_object_reference(cr, uid, 'hr', 'open_view_employee_list')
|
||||
dict_act_window = act_window.read(cr, uid, action_id, [])
|
||||
|
||||
@@ -10,3 +10,4 @@ access_hr_recruitment_source_hr_officer,hr.recruitment.source,model_hr_recruitme
|
||||
access_hr_recruitment_source_all,hr.recruitment.source,model_hr_recruitment_source,,1,0,0,0
|
||||
access_hr_applicant_category,hr.applicant_category,model_hr_applicant_category,,1,1,1,0
|
||||
access_hr_applicant_category_manager,hr.applicant_category,model_hr_applicant_category,base.group_hr_manager,1,1,1,1
|
||||
access_crm_meeting_type_hr_officer,crm.meeting.type.officer,base_calendar.model_crm_meeting_type,base.group_hr_user,1,1,1,0
|
||||
|
||||
|
@@ -69,6 +69,7 @@
|
||||
<field name="date"/>
|
||||
<field name="order_line_ids"/>
|
||||
<filter name='is_mine' string="My Orders" domain="[('user_id','=',uid)]"/>
|
||||
<filter name='by_users' string="Users" context="{'group_by':'user_id'}"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
@@ -304,6 +305,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Orders Tree">
|
||||
<field name="date"/>
|
||||
<field name='user_id'/>
|
||||
<field name="order_line_ids"/>
|
||||
<field name="state" />
|
||||
<field name="total" sum="Total"/>
|
||||
|
||||
+15
-23
@@ -980,26 +980,6 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_product_id': [active_id]}"
|
||||
id="act_product_manufacturing_open"
|
||||
name="Manufacturing Orders"
|
||||
view_id="mrp_production_tree_view"
|
||||
res_model="mrp.production"
|
||||
src_model="product.product"/>
|
||||
|
||||
<act_window
|
||||
id="action_product_bom_structure"
|
||||
name="Product BoM Structure"
|
||||
domain="[('product_id', 'in', active_ids),('bom_id','=',False)]"
|
||||
context="{'default_product_id': active_id}"
|
||||
view_type="tree"
|
||||
view_mode="tree"
|
||||
view_id="mrp_bom_tree_view"
|
||||
res_model="mrp.bom"
|
||||
src_model="product.product"
|
||||
groups="mrp.group_mrp_user"/>
|
||||
|
||||
<!-- Menu for Resource for MRP-->
|
||||
|
||||
<record id="mrp_workcenter_action" model="ir.actions.act_window">
|
||||
@@ -1034,21 +1014,33 @@
|
||||
id="menu_mrp_production_order_action" name="Order Planning"
|
||||
parent="menu_mrp_planning" sequence="1"/>
|
||||
|
||||
|
||||
<record id="act_product_mrp_bom_open" model="ir.actions.act_window">
|
||||
<field name="name">BoM Structure</field>
|
||||
<field name="context">{'default_product_id': active_id}</field>
|
||||
<field name="domain">[('product_id', 'in', active_ids),('bom_id','=',False)]</field>
|
||||
<field name="res_model">mrp.bom</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="product_open_bom">
|
||||
<field name="context">{'default_product_id': active_id, 'search_default_product_id': active_id}</field>
|
||||
<field name="name">Bill of Materials</field>
|
||||
<field name="domain">[('bom_id','=',False)]</field>
|
||||
<field name="res_model">mrp.bom</field>
|
||||
</record>
|
||||
|
||||
<record id="act_product_mrp_production" model="ir.actions.act_window">
|
||||
<field name="context">{'search_default_product_id': [active_id]}</field>
|
||||
<field name="name">Manufacturing Orders</field>
|
||||
<field name="res_model">mrp.production</field>
|
||||
<field name="view_id" ref="mrp_production_tree_view"/>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="product_form_view_bom_button">
|
||||
<field name="name">product.product.procurement</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button string="Bill of Materials" name="%(product_open_bom)d" type="action"/>
|
||||
<button string="Bill of Materials" name="%(product_open_bom)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}"/>
|
||||
<button string="BoM Structure" name="%(act_product_mrp_bom_open)d" type="action" groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}"/>
|
||||
<button string="Manufacturing Orders" name="%(act_product_mrp_production)d" type="action" groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -27,6 +27,14 @@
|
||||
<li> MS Outlook 2005 or above.</li>
|
||||
<li> MS .Net Framework 3.5 or above.</li>
|
||||
</ol>
|
||||
<p>Outlook plug-in installation:</p>
|
||||
<ol>
|
||||
<li>Save the outlook plugin corresponding to your Office version (Office x86 or Office x64).</li>
|
||||
<li>Double-click on the executable file and install the plugin.</li>
|
||||
<li>Open Outlook (close it and open it again if it is already closed).</li>
|
||||
<li>From the Outlook menubar: OpenERP -> Configuration.</li>
|
||||
<li>Configure your openerp server.</li>
|
||||
</ol>
|
||||
</xpath>
|
||||
<separator string="title" position="attributes">
|
||||
<attribute name="string"></attribute>
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# Slovenian translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-02-24 12:33+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Slovenian <sl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-02-25 05:08+0000\n"
|
||||
"X-Generator: Launchpad (build 16506)\n"
|
||||
|
||||
#. module: portal_event
|
||||
#: view:event.event:0
|
||||
msgid "Portal Settings"
|
||||
msgstr "Nastavitve portala"
|
||||
|
||||
#. module: portal_event
|
||||
#: model:ir.actions.act_window,help:portal_event.action_event_view
|
||||
msgid "There are no public events."
|
||||
msgstr "Ni javnih dogodkov"
|
||||
|
||||
#. module: portal_event
|
||||
#: selection:event.event,visibility:0
|
||||
msgid "Private"
|
||||
msgstr "Zasebno"
|
||||
|
||||
#. module: portal_event
|
||||
#: model:ir.model,name:portal_event.model_event_event
|
||||
msgid "Event"
|
||||
msgstr "Dogodek"
|
||||
|
||||
#. module: portal_event
|
||||
#: model:ir.actions.act_window,name:portal_event.action_event_view
|
||||
#: model:ir.ui.menu,name:portal_event.portal_company_events
|
||||
msgid "Events"
|
||||
msgstr "Dogodki"
|
||||
|
||||
#. module: portal_event
|
||||
#: field:event.event,visibility:0
|
||||
msgid "Visibility"
|
||||
msgstr "Vidljivost"
|
||||
|
||||
#. module: portal_event
|
||||
#: help:event.event,visibility:0
|
||||
msgid "Event's visibility in the portal's contact page"
|
||||
msgstr "Vidljivost dogodka na kontaktni strani portala"
|
||||
|
||||
#. module: portal_event
|
||||
#: selection:event.event,visibility:0
|
||||
msgid "Public"
|
||||
msgstr "Javno"
|
||||
@@ -312,11 +312,13 @@
|
||||
<record model="ir.ui.view" id="product_form_view_procurement_button">
|
||||
<field name="name">product.product.procurement</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="inherit_id" ref="stock.view_normal_procurement_locations_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='incoming_qty']" position="after">
|
||||
<button string="⇒ Request Procurement" name="%(act_make_procurement)d" type="action" class="oe_link"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button string="Request Procurement" name="%(act_make_procurement)d" type="action"/>
|
||||
<button string="Orderpoints" name="%(product_open_orderpoint)d" type="action"/>
|
||||
<button string="Orderpoints" name="%(product_open_orderpoint)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='cost_method']" position="before">
|
||||
<field name="procure_method" groups="base.group_user"/>
|
||||
|
||||
@@ -372,7 +372,11 @@
|
||||
</header>
|
||||
<sheet string="Task">
|
||||
<h1>
|
||||
<field name="name" placeholder="Task summary..."/>
|
||||
<field name="name" placeholder="Task summary..." class="oe_inline"/>
|
||||
<field name="kanban_state" invisible='1'/>
|
||||
<button name="set_kanban_state_done" help="In Progress" attrs="{'invisible': [('kanban_state', 'in', ['done','blocked'])]}" type="object" icon="gtk-normal" class="oe_link oe_right"/>
|
||||
<button name="set_kanban_state_blocked" help="Ready for Next Stage" attrs="{'invisible': [('kanban_state', 'in', ['normal','blocked'])]}" type="object" icon="gtk-yes" class="oe_link oe_right"/>
|
||||
<button name="set_kanban_state_normal" help="Blocked" attrs="{'invisible': [('kanban_state', 'in', ['done','normal'])]}" type="object" icon="gtk-no" class="oe_link oe_right"/>
|
||||
</h1>
|
||||
<group>
|
||||
<group>
|
||||
|
||||
@@ -34,7 +34,7 @@ class project_configuration(osv.osv_memory):
|
||||
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
|
||||
(by default, http://ietherpad.com/).
|
||||
(for example: http://ietherpad.com/).
|
||||
This installs the module pad."""),
|
||||
'module_project_timesheet': fields.boolean("Record timesheet lines per tasks",
|
||||
help="""This allows you to transfer the entries under tasks defined for Project Management to
|
||||
|
||||
@@ -21,3 +21,4 @@ access_project_task_history_cumulative,project.task.history project,project.mode
|
||||
access_resource_calendar,project.resource_calendar manager,resource.model_resource_calendar,project.group_project_manager,1,0,0,0
|
||||
access_project_category,project.project_category,model_project_category,,1,0,0,0
|
||||
access_project_category_manager,project.project_category,model_project_category,project.group_project_manager,1,1,1,1
|
||||
access_mail_alias,mail.alias,mail.model_mail_alias,project.group_project_manager,1,1,1,1
|
||||
|
||||
|
@@ -68,7 +68,13 @@
|
||||
</header>
|
||||
<sheet string="Issue">
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1><field name="name"/></h1>
|
||||
<h1>
|
||||
<field name="name" class="oe_inline"/>
|
||||
<field name="kanban_state" invisible='1'/>
|
||||
<button name="set_kanban_state_done" help="In Progress" attrs="{'invisible': [('kanban_state', 'in', ['done','blocked'])]}" type="object" icon="gtk-normal" class="oe_link oe_right"/>
|
||||
<button name="set_kanban_state_blocked" help="Ready for Next Stage" attrs="{'invisible': [('kanban_state', 'in', ['normal','blocked'])]}" type="object" icon="gtk-yes" class="oe_link oe_right"/>
|
||||
<button name="set_kanban_state_normal" help="Blocked" attrs="{'invisible': [('kanban_state', 'in', ['done','normal'])]}" type="object" icon="gtk-no" class="oe_link oe_right"/>
|
||||
</h1>
|
||||
<group>
|
||||
<group groups="base.group_user">
|
||||
<field name="user_id"/>
|
||||
|
||||
@@ -334,8 +334,8 @@
|
||||
<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, 'search_default_to_approve': 1}</field>
|
||||
<field name="domain">[('state','in',('draft','sent','confirmed'))]</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="domain">[('state','in',('draft','sent','cancel'))]</field>
|
||||
<field name="view_mode">tree,form,graph,calendar</field>
|
||||
<field name="search_view_id" ref="view_purchase_order_filter"/>
|
||||
<field name="help" type="html">
|
||||
@@ -492,15 +492,6 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_product_id': [active_id], 'default_product_id': active_id}"
|
||||
id="action_purchase_line_product_tree"
|
||||
name="Purchases"
|
||||
res_model="purchase.order.line"
|
||||
src_model="product.product"
|
||||
groups="purchase.group_purchase_user"/>
|
||||
|
||||
|
||||
<record id="purchase_line_form_action2" model="ir.actions.act_window">
|
||||
<field name="name">On Purchase Order Lines</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
@@ -613,12 +604,20 @@
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_purchase_line_product_tree">
|
||||
<field name="context">{'search_default_product_id': active_id, 'default_product_id': active_id}</field>
|
||||
<field name="name">Purchases</field>
|
||||
<field name="res_model">purchase.order.line</field>
|
||||
<field name="view_id" ref="purchase_order_line_tree"/>
|
||||
</record>
|
||||
<record id="view_product_account_purchase_ok_form" model="ir.ui.view">
|
||||
<field name="name">product.account.purchase.ok.form.inherit</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="account.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button string="Purchases" name="%(action_purchase_line_product_tree)d" type="action" groups="purchase.group_purchase_user"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='property_account_expense']" position="replace" >
|
||||
<field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" groups="account.group_account_user"/>
|
||||
</xpath>
|
||||
@@ -627,6 +626,5 @@
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -30,7 +30,7 @@ class purchase_config_settings(osv.osv_memory):
|
||||
_columns = {
|
||||
'default_invoice_method': fields.selection(
|
||||
[('manual', 'Based on purchase order lines'),
|
||||
('picking', 'Based on receptions'),
|
||||
('picking', 'Based on incoming shipments'),
|
||||
('order', 'Pre-generate draft invoices based on purchase orders'),
|
||||
], 'Default invoicing control method', required=True, default_model='purchase.order'),
|
||||
'group_purchase_pricelist':fields.boolean("Manage pricelist per supplier",
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
name="view_picking"
|
||||
string="Incoming Shipments" states="approved"/>
|
||||
<button type="object" name="invoice_open"
|
||||
string="Invoices" attrs="{'invisible': [('state', '=', 'draft')]}"/>
|
||||
string="Invoices" attrs="{'invisible': [('state', 'in', ['draft','sent'])]}"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
|
||||
@@ -0,0 +1,318 @@
|
||||
# Mongolian translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
|
||||
"PO-Revision-Date: 2013-02-25 09:32+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Mongolian <mn@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-02-26 05:09+0000\n"
|
||||
"X-Generator: Launchpad (build 16506)\n"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Cancelled Invoice"
|
||||
msgstr "Цуцлагдсан нэхэмжлэл"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Total (inclu. taxes):"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Disc. (%)"
|
||||
msgstr "Хөнгөлөлт. (%)"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Supplier Invoice"
|
||||
msgstr "Нийлүүлэгчийн Нэхэмжлэл"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Unit Price"
|
||||
msgstr "Нэгжийн үнэ"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,type:0
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
#: field:report.intrastat.code,description:0
|
||||
msgid "Description"
|
||||
msgstr "Тайлбар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "VAT :"
|
||||
msgstr "НӨАТ :"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Document"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "PRO-FORMA"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Taxes:"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "March"
|
||||
msgstr "3-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "August"
|
||||
msgstr "8-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "May"
|
||||
msgstr "5-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:report.intrastat,type:0
|
||||
msgid "Type"
|
||||
msgstr "Төрөл"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: model:ir.actions.report.xml,name:report_intrastat.invoice_intrastat_id
|
||||
msgid "Invoice Intrastat"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Invoice Date"
|
||||
msgstr "Нэхэмлэлийн Огноо"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "June"
|
||||
msgstr "6-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Tel. :"
|
||||
msgstr "Утас:"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Base"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "January"
|
||||
msgstr "1-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "July"
|
||||
msgstr "7-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Quantity"
|
||||
msgstr "Тоо хэмжээ"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Partner Ref."
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "February"
|
||||
msgstr "2-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "October"
|
||||
msgstr "10-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: model:ir.model,name:report_intrastat.model_report_intrastat
|
||||
msgid "Intrastat report"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Invoice"
|
||||
msgstr "Нэхэмжлэл"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: model:ir.model,name:report_intrastat.model_res_country
|
||||
msgid "Country"
|
||||
msgstr "Улс"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "September"
|
||||
msgstr "9-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Taxes"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "April"
|
||||
msgstr "4-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Amount"
|
||||
msgstr "Дүн"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: view:report.intrastat:0
|
||||
msgid "Intrastat Data"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:report.intrastat,value:0
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
#: model:ir.actions.act_window,name:report_intrastat.action_report_intrastat_tree_all
|
||||
#: model:ir.ui.menu,name:report_intrastat.menu_report_intrastat_all
|
||||
msgid "Intrastat"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Draft Invoice"
|
||||
msgstr "Ноорог нэхэмжлэл"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:report.intrastat,supply_units:0
|
||||
msgid "Supply Units"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "November"
|
||||
msgstr "11-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: model:ir.model,name:report_intrastat.model_report_intrastat_code
|
||||
#: field:product.template,intrastat_id:0
|
||||
#: field:report.intrastat,intrastat_id:0
|
||||
#: view:report.intrastat.code:0
|
||||
msgid "Intrastat code"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Refund"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:report.intrastat,ref:0
|
||||
msgid "Source document"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Fiscal Position Remark :"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
#: field:report.intrastat,weight:0
|
||||
msgid "Weight"
|
||||
msgstr "Жин"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: model:ir.model,name:report_intrastat.model_product_template
|
||||
msgid "Product Template"
|
||||
msgstr "Барааны үлгэр"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:res.country,intrastat:0
|
||||
msgid "Intrastat member"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,month:0
|
||||
msgid "December"
|
||||
msgstr "12-р сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Tax"
|
||||
msgstr "Татвар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:report.intrastat,code:0
|
||||
msgid "Country code"
|
||||
msgstr "Улсын код"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:report.intrastat,month:0
|
||||
msgid "Month"
|
||||
msgstr "Сар"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:report.intrastat,currency_id:0
|
||||
msgid "Currency"
|
||||
msgstr "Валют"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: selection:report.intrastat,type:0
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Fax :"
|
||||
msgstr "Факс :"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: field:report.intrastat,name:0
|
||||
msgid "Year"
|
||||
msgstr "Жил"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Supplier Refund"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Total (excl. taxes):"
|
||||
msgstr ""
|
||||
|
||||
#. module: report_intrastat
|
||||
#: report:account.invoice.intrastat:0
|
||||
msgid "Price"
|
||||
msgstr "Үнэ"
|
||||
|
||||
#. module: report_intrastat
|
||||
#: model:ir.actions.act_window,name:report_intrastat.action_report_intrastat_code_tree
|
||||
#: model:ir.ui.menu,name:report_intrastat.menu_report_intrastat_code
|
||||
#: view:report.intrastat.code:0
|
||||
#: field:report.intrastat.code,name:0
|
||||
msgid "Intrastat Code"
|
||||
msgstr ""
|
||||
@@ -36,5 +36,6 @@ import webkit_report
|
||||
import ir_report
|
||||
import wizard
|
||||
import convert
|
||||
import report
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -89,6 +89,9 @@ TODO:
|
||||
'header_view.xml',
|
||||
'ir_report_view.xml',
|
||||
],
|
||||
'demo': [
|
||||
"report/webkit_report_demo.xml",
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/companies_webkit.jpeg','images/header_html.jpeg','images/header_img.jpeg'],
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
<body style="border:0; margin: 0;" onload="subst()">
|
||||
<table class="header" style="border-bottom: 0px solid black; width: 100%">
|
||||
<tr>
|
||||
<td>${helper.embed_logo_by_name('camptocamp_logo')|n}</td>
|
||||
<td>${helper.embed_company_logo()|safe}</td>
|
||||
<td style="text-align:right"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -63,21 +63,21 @@
|
||||
<td style="text-align:right"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${company.partner_id.name |entity}</td>
|
||||
<td>${company.partner_id.name}</td>
|
||||
<td/>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >${company.partner_id.street or ''|entity}</td>
|
||||
<td >${company.partner_id.street or ''}</td>
|
||||
<td/>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Phone: ${company.partner_id.phone or ''|entity} </td>
|
||||
<td>Phone: ${company.partner_id.phone or ''} </td>
|
||||
<td/>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mail: ${company.partner_id.email or ''|entity}<br/></td>
|
||||
<td>Mail: ${company.partner_id.email or ''}<br/></td>
|
||||
</tr>
|
||||
</table> ${_debug or ''|n} </body>
|
||||
</table> ${_debug or ''|safe} </body>
|
||||
</html>]]>
|
||||
</field>
|
||||
<field eval="55.0" name="margin_top"/>
|
||||
|
||||
@@ -39,13 +39,13 @@ def register_report(name, model, tmpl_path, parser=rml_parse):
|
||||
"""Register the report into the services"""
|
||||
name = 'report.%s' % name
|
||||
if name in openerp.report.interface.report_int._reports:
|
||||
service = openerp.report.interface.report_int[name]
|
||||
service = openerp.report.interface.report_int._reports[name]
|
||||
if isinstance(service, WebKitParser):
|
||||
#already instantiated properly, skip it
|
||||
return
|
||||
if hasattr(service, 'parser'):
|
||||
parser = service.parser
|
||||
del openerp.report.interface.report_int[name]
|
||||
del openerp.report.interface.report_int._reports[name]
|
||||
WebKitParser(name, model, tmpl_path, parser=parser)
|
||||
|
||||
|
||||
|
||||
@@ -7,11 +7,13 @@
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@string='Security']" position="before" >
|
||||
<page string="Webkit" attrs="{'invisible':[('report_type','!=','webkit')]}">
|
||||
<field name="webkit_header"/>
|
||||
<field name="webkit_debug"/>
|
||||
<field name="precise_mode"/>
|
||||
<separator string="Webkit Template (used if Report File is not found)" colspan="4"/>
|
||||
<field name="report_webkit_data" colspan="4" nolabel="1"/>
|
||||
<group>
|
||||
<field name="webkit_header"/>
|
||||
<field name="webkit_debug"/>
|
||||
<field name="precise_mode"/>
|
||||
<separator string="Webkit Template (used if Report File is not found)" colspan="4"/>
|
||||
<field name="report_webkit_data" colspan="4" nolabel="1"/>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
import webkit_report_demo
|
||||
@@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<style type="text_css">${css}</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>List of reports:</h1>
|
||||
<ul>
|
||||
% for report in objects:
|
||||
<li>${report.name}</li>
|
||||
% endfor
|
||||
</ul>
|
||||
|
||||
<p>The administrator name is: ${admin_name}</p>
|
||||
<p>If this report does not contain headers, it is because you have a badly compiled wkhtmltopdf. Consider installing
|
||||
the static version distributed on the official web site: <a href="https://code.google.com/p/wkhtmltopdf/">https://code.google.com/p/wkhtmltopdf/</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
from openerp.addons.report_webkit.webkit_report import webkit_report_extender
|
||||
from openerp import SUPERUSER_ID
|
||||
|
||||
@webkit_report_extender("report_webkit.webkit_demo_report")
|
||||
def extend_demo(pool, cr, uid, localcontext, context):
|
||||
admin = pool.get("res.users").browse(cr, uid, SUPERUSER_ID, context)
|
||||
localcontext.update({
|
||||
"admin_name": admin.name,
|
||||
})
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<report string="Report on reports"
|
||||
id="webkit_demo_report"
|
||||
model="ir.actions.report.xml"
|
||||
name="webkit.ir.actions.report.xml"
|
||||
file="report_webkit/report/webkit_report_demo.mako"
|
||||
report_type="webkit"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -39,6 +39,7 @@ class WebKitHelper(object):
|
||||
self.uid = uid
|
||||
self.pool = pooler.get_pool(self.cursor.dbname)
|
||||
self.report_id = report_id
|
||||
self.context = context
|
||||
|
||||
def embed_image(self, type, img, width=0, height=0) :
|
||||
"Transform a DB image into an embedded HTML image"
|
||||
@@ -79,6 +80,13 @@ class WebKitHelper(object):
|
||||
"""Return HTML embedded logo by name"""
|
||||
img, type = self.get_logo_by_name(name)
|
||||
return self.embed_image(type, img, width, height)
|
||||
|
||||
def embed_company_logo(self, width=0, height=0):
|
||||
cr, uid, context = self.cursor, self.uid, self.context
|
||||
my_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||
logo = my_user.company_id.logo_web
|
||||
return self.embed_image("png", logo, width, height)
|
||||
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -38,10 +38,6 @@ import tempfile
|
||||
import time
|
||||
import logging
|
||||
|
||||
from mako.template import Template
|
||||
from mako.lookup import TemplateLookup
|
||||
from mako import exceptions
|
||||
|
||||
from openerp import netsvc
|
||||
from openerp import pooler
|
||||
from report_helper import WebKitHelper
|
||||
@@ -50,16 +46,72 @@ from openerp import addons
|
||||
from openerp import tools
|
||||
from openerp.tools.translate import _
|
||||
from openerp.osv.osv import except_osv
|
||||
from urllib import urlencode, quote as quote
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
try:
|
||||
# We use a jinja2 sandboxed environment to render mako templates.
|
||||
# Note that the rendering does not cover all the mako syntax, in particular
|
||||
# arbitrary Python statements are not accepted, and not all expressions are
|
||||
# allowed: only "public" attributes (not starting with '_') of objects may
|
||||
# be accessed.
|
||||
# This is done on purpose: it prevents incidental or malicious execution of
|
||||
# Python code that may break the security of the server.
|
||||
from jinja2.sandbox import SandboxedEnvironment
|
||||
mako_template_env = SandboxedEnvironment(
|
||||
block_start_string="<%",
|
||||
block_end_string="%>",
|
||||
variable_start_string="${",
|
||||
variable_end_string="}",
|
||||
comment_start_string="<%doc>",
|
||||
comment_end_string="</%doc>",
|
||||
line_statement_prefix="%",
|
||||
line_comment_prefix="##",
|
||||
trim_blocks=True, # do not output newline after blocks
|
||||
autoescape=True, # XML/HTML automatic escaping
|
||||
)
|
||||
mako_template_env.globals.update({
|
||||
'str': str,
|
||||
'quote': quote,
|
||||
'urlencode': urlencode,
|
||||
})
|
||||
except ImportError:
|
||||
_logger.warning("jinja2 not available, templating features will not work!")
|
||||
|
||||
def mako_template(text):
|
||||
"""Build a Mako template.
|
||||
|
||||
This template uses UTF-8 encoding
|
||||
"""
|
||||
tmp_lookup = TemplateLookup() #we need it in order to allow inclusion and inheritance
|
||||
return Template(text, input_encoding='utf-8', output_encoding='utf-8', lookup=tmp_lookup)
|
||||
|
||||
return mako_template_env.from_string(text)
|
||||
|
||||
_extender_functions = {}
|
||||
|
||||
def webkit_report_extender(report_name):
|
||||
"""
|
||||
A decorator to define functions to extend the context used in a template rendering.
|
||||
report_name must be the xml id of the desired report (it is mandatory to indicate the
|
||||
module in that xml id).
|
||||
|
||||
The given function will be called at the creation of the report. The following arguments
|
||||
will be passed to it (in this order):
|
||||
- pool The model pool.
|
||||
- cr The cursor.
|
||||
- uid The user id.
|
||||
- localcontext The context given to the template engine to render the templates for the
|
||||
current report. This is the context that should be modified.
|
||||
- context The OpenERP context.
|
||||
"""
|
||||
def fct1(fct):
|
||||
lst = _extender_functions.get(report_name)
|
||||
if not lst:
|
||||
lst = []
|
||||
_extender_functions[report_name] = lst
|
||||
lst.append(fct)
|
||||
return fct
|
||||
return fct1
|
||||
|
||||
class WebKitParser(report_sxw):
|
||||
"""Custom class that use webkit to render HTML reports
|
||||
@@ -201,6 +253,17 @@ class WebKitParser(report_sxw):
|
||||
def create_single_pdf(self, cursor, uid, ids, data, report_xml, context=None):
|
||||
"""generate the PDF"""
|
||||
|
||||
# just try to find an xml id for the report
|
||||
cr = cursor
|
||||
import openerp.pooler as pooler
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
found_xml_ids = pool.get("ir.model.data").search(cr, uid, [["model", "=", "ir.actions.report.xml"], \
|
||||
["res_id", "=", report_xml.id]], context=context)
|
||||
xml_id = None
|
||||
if found_xml_ids:
|
||||
xml_id = pool.get("ir.model.data").read(cr, uid, found_xml_ids[0], ["module", "name"])
|
||||
xml_id = "%s.%s" % (xml_id["module"], xml_id["name"])
|
||||
|
||||
if context is None:
|
||||
context={}
|
||||
htmls = []
|
||||
@@ -242,64 +305,57 @@ class WebKitParser(report_sxw):
|
||||
if not css :
|
||||
css = ''
|
||||
|
||||
#default_filters=['unicode', 'entity'] can be used to set global filter
|
||||
body_mako_tpl = mako_template(template)
|
||||
helper = WebKitHelper(cursor, uid, report_xml.id, context)
|
||||
self.parser_instance.localcontext['helper'] = helper
|
||||
self.parser_instance.localcontext['css'] = css
|
||||
self.parser_instance.localcontext['_'] = self.translate_call
|
||||
|
||||
# apply extender functions
|
||||
additional = {}
|
||||
if xml_id in _extender_functions:
|
||||
for fct in _extender_functions[xml_id]:
|
||||
fct(pool, cr, uid, self.parser_instance.localcontext, context)
|
||||
|
||||
if report_xml.precise_mode:
|
||||
for obj in objs:
|
||||
self.parser_instance.localcontext['objects'] = [obj]
|
||||
ctx = dict(self.parser_instance.localcontext)
|
||||
for obj in self.parser_instance.localcontext['objects']:
|
||||
ctx['objects'] = [obj]
|
||||
try :
|
||||
html = body_mako_tpl.render(helper=helper,
|
||||
css=css,
|
||||
_=self.translate_call,
|
||||
**self.parser_instance.localcontext)
|
||||
html = body_mako_tpl.render(dict(ctx))
|
||||
htmls.append(html)
|
||||
except Exception:
|
||||
msg = exceptions.text_error_template().render()
|
||||
except Exception, e:
|
||||
msg = u"%s" % e
|
||||
_logger.error(msg)
|
||||
raise except_osv(_('Webkit render!'), msg)
|
||||
else:
|
||||
try :
|
||||
html = body_mako_tpl.render(helper=helper,
|
||||
css=css,
|
||||
_=self.translate_call,
|
||||
**self.parser_instance.localcontext)
|
||||
html = body_mako_tpl.render(dict(self.parser_instance.localcontext))
|
||||
htmls.append(html)
|
||||
except Exception:
|
||||
msg = exceptions.text_error_template().render()
|
||||
msg = u"%s" % e
|
||||
_logger.error(msg)
|
||||
raise except_osv(_('Webkit render!'), msg)
|
||||
head_mako_tpl = mako_template(header)
|
||||
try :
|
||||
head = head_mako_tpl.render(helper=helper,
|
||||
css=css,
|
||||
_=self.translate_call,
|
||||
_debug=False,
|
||||
**self.parser_instance.localcontext)
|
||||
except Exception:
|
||||
raise except_osv(_('Webkit render!'),
|
||||
exceptions.text_error_template().render())
|
||||
head = head_mako_tpl.render(dict(self.parser_instance.localcontext, _debug=False))
|
||||
except Exception, e:
|
||||
raise except_osv(_('Webkit render!'), u"%s" % e)
|
||||
foot = False
|
||||
if footer :
|
||||
foot_mako_tpl = mako_template(footer)
|
||||
try :
|
||||
foot = foot_mako_tpl.render(helper=helper,
|
||||
css=css,
|
||||
_=self.translate_call,
|
||||
**self.parser_instance.localcontext)
|
||||
except:
|
||||
msg = exceptions.text_error_template().render()
|
||||
foot = foot_mako_tpl.render(dict({},
|
||||
**self.parser_instance.localcontext))
|
||||
except Exception, e:
|
||||
msg = u"%s" % e
|
||||
_logger.error(msg)
|
||||
raise except_osv(_('Webkit render!'), msg)
|
||||
if report_xml.webkit_debug :
|
||||
try :
|
||||
deb = head_mako_tpl.render(helper=helper,
|
||||
css=css,
|
||||
_debug=tools.ustr("\n".join(htmls)),
|
||||
_=self.translate_call,
|
||||
**self.parser_instance.localcontext)
|
||||
except Exception:
|
||||
msg = exceptions.text_error_template().render()
|
||||
deb = head_mako_tpl.render(dict(self.parser_instance.localcontext, _debug=tools.ustr("\n".join(htmls))))
|
||||
except Exception, e:
|
||||
msg = u"%s" % e
|
||||
_logger.error(msg)
|
||||
raise except_osv(_('Webkit render!'), msg)
|
||||
return (deb, 'html')
|
||||
|
||||
@@ -538,15 +538,22 @@
|
||||
<field name="domain">[('invoiced','<>', 1),('state','=','done')]</field>
|
||||
<field name="filter" eval="True"/>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_product_id': active_id, 'default_product_id': active_id}"
|
||||
id="action_order_line_product_tree"
|
||||
name="Sales Order Lines"
|
||||
res_model="sale.order.line"
|
||||
src_model="product.product"
|
||||
groups="base.group_sale_salesman"/>
|
||||
|
||||
<record id="action_order_line_product_tree" model="ir.actions.act_window">
|
||||
<field name="context">{'search_default_product_id': active_id, 'default_product_id': active_id}</field>
|
||||
<field name="name">Sales Order Lines</field>
|
||||
<field name="res_model">sale.order.line</field>
|
||||
<field name="view_id" ref="view_order_line_tree"/>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="product_form_view_sale_order_button">
|
||||
<field name="name">product.product.sale.order</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button string="Sales" name="%(action_order_line_product_tree)d" type="action" groups="base.group_sale_salesman"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<menuitem id="base.menu_invoiced" name="Invoicing" parent="base.menu_base_partner" sequence="5"/>
|
||||
<menuitem id="menu_invoicing_sales_order_lines" parent="base.menu_invoiced" action="action_order_line_tree2" sequence="10" groups="sale.group_invoice_so_lines"/>
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ class sale_advance_payment_inv(osv.osv_memory):
|
||||
result = []
|
||||
for sale in sale_obj.browse(cr, uid, sale_ids, context=context):
|
||||
val = inv_line_obj.product_id_change(cr, uid, [], wizard.product_id.id,
|
||||
uom_id=False, partner_id=sale.partner_id.id, fposition_id=sale.fiscal_position.id)
|
||||
False, partner_id=sale.partner_id.id, fposition_id=sale.fiscal_position.id)
|
||||
res = val['value']
|
||||
|
||||
# determine and check income account
|
||||
@@ -86,7 +86,7 @@ class sale_advance_payment_inv(osv.osv_memory):
|
||||
prop = ir_property_obj.get(cr, uid,
|
||||
'property_account_income_categ', 'product.category', context=context)
|
||||
prop_id = prop and prop.id or False
|
||||
account_id = fiscal_obj.map_account(cr, uid, sale.fiscal_position.id or False, prop_id)
|
||||
account_id = fiscal_obj.map_account(cr, uid, sale.fiscal_position or False, prop_id)
|
||||
if not account_id:
|
||||
raise osv.except_osv(_('Configuration Error!'),
|
||||
_('There is no income account defined as global property.'))
|
||||
|
||||
@@ -235,6 +235,8 @@ class product_product(osv.osv):
|
||||
else:
|
||||
location_ids = []
|
||||
wids = warehouse_obj.search(cr, uid, [], context=context)
|
||||
if not wids:
|
||||
return res
|
||||
for w in warehouse_obj.browse(cr, uid, wids, context=context):
|
||||
location_ids.append(w.lot_stock_id.id)
|
||||
|
||||
|
||||
@@ -68,6 +68,10 @@
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button string="Inventory" name="%(action_product_location_tree)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_locations"/>
|
||||
<button string="Moves" name= "%(act_product_stock_move_open)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_stock_user"/>
|
||||
</xpath>
|
||||
<group name="procurement_uom" position="before">
|
||||
<group name="delay" string="Delays">
|
||||
<label for="produce_delay" attrs="{'invisible':[('type','=','service')]}"/>
|
||||
@@ -88,13 +92,16 @@
|
||||
<label for="qty_available"/>
|
||||
<div>
|
||||
<field name="qty_available" class="oe_inline"/>
|
||||
<button name="%(action_view_change_product_quantity)d" string="update"
|
||||
type="action"
|
||||
class="oe_link"/>
|
||||
<button name="%(action_view_change_product_quantity)d" string="⇒ Update"
|
||||
type="action"
|
||||
class="oe_link"/>
|
||||
</div>
|
||||
<label for="incoming_qty"/>
|
||||
<div>
|
||||
<field name="incoming_qty" class="oe_inline"/>
|
||||
<field name="outgoing_qty" class="oe_inline"/>
|
||||
<field name="virtual_available" class="oe_inline"/>
|
||||
</div>
|
||||
<field name="outgoing_qty" class="oe_inline"/>
|
||||
<field name="virtual_available" class="oe_inline"/>
|
||||
</group>
|
||||
<group name="lot" groups="stock.group_tracking_lot,stock.group_production_lot" string="Lots">
|
||||
<field name="track_production" groups="stock.group_production_lot"/>
|
||||
|
||||
@@ -2,13 +2,6 @@
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<act_window
|
||||
context="{'product_id': active_id}"
|
||||
id="act_stock_product_location_open"
|
||||
name="Stock by Location"
|
||||
res_model="stock.location"
|
||||
src_model="product.product"/>
|
||||
|
||||
<act_window
|
||||
domain="[('tracking_id', '=', active_id)]"
|
||||
id="act_stock_tracking_lot_2_stock_report_tracklots"
|
||||
|
||||
+10
-15
@@ -632,6 +632,16 @@
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="action_product_location_tree">
|
||||
<field name="context">{'product_id': active_id}</field>
|
||||
<field name="name">Stock by Location</field>
|
||||
<field name="res_model">stock.location</field>
|
||||
</record>
|
||||
<record id="act_product_stock_move_open" model="ir.actions.act_window">
|
||||
<field name="context">{'search_default_done': 1,'search_default_product_id': active_id, 'default_product_id': active_id}</field>
|
||||
<field name="name">Moves</field>
|
||||
<field name="res_model">stock.move</field>
|
||||
</record>
|
||||
<record id="action_location_tree" model="ir.actions.act_window">
|
||||
<field name="name">Location Structure</field>
|
||||
<field name="res_model">stock.location</field>
|
||||
@@ -1562,21 +1572,6 @@
|
||||
res_model="product.product"
|
||||
src_model="stock.location"/>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_done': 1,'search_default_product_id': [active_id], 'default_product_id': active_id}"
|
||||
id="act_product_stock_move_open"
|
||||
name="Inventory Move"
|
||||
res_model="stock.move"
|
||||
src_model="product.product"/>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_future': 1,'search_default_product_id': [active_id], 'default_product_id': active_id}"
|
||||
domain="[('state','in',('waiting','confirmed','assigned'))]"
|
||||
id="act_product_stock_move_futur_open"
|
||||
name="Future Stock Moves"
|
||||
res_model="stock.move"
|
||||
src_model="product.product"/>
|
||||
|
||||
<record id="ir_act_product_location_open" model="ir.values">
|
||||
<field name="key2">tree_but_open</field>
|
||||
<field name="model">stock.location</field>
|
||||
|
||||
Reference in New Issue
Block a user