[MERGE] Merge with parent branch
bzr revid: fka@tinyerp.com-20120831104259-3gqgnikdczkmcgv2
This commit is contained in:
commit
87658d9de8
|
@ -746,9 +746,11 @@ class account_journal(osv.osv):
|
|||
'profit_account_id' : fields.many2one('account.account', 'Profit Account'),
|
||||
'loss_account_id' : fields.many2one('account.account', 'Loss Account'),
|
||||
'internal_account_id' : fields.many2one('account.account', 'Internal Transfers Account', select=1),
|
||||
'cash_control' : fields.boolean('Cash Control', help='If you want the journal should be control at opening/closing, check this option'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'cash_control' : False,
|
||||
'with_last_closing_balance' : False,
|
||||
'user_id': lambda self, cr, uid, context: uid,
|
||||
'company_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
|
||||
|
|
|
@ -194,12 +194,27 @@ class account_cash_statement(osv.osv):
|
|||
journal = self.pool.get('account.journal').browse(cr, uid, vals['journal_id'], context=context)
|
||||
if journal and (journal.type == 'cash') and not vals.get('details_ids'):
|
||||
vals['details_ids'] = []
|
||||
|
||||
last_pieces = None
|
||||
|
||||
if journal.with_last_closing_balance == True:
|
||||
domain = [('journal_id', '=', journal.id),
|
||||
('state', '=', 'confirm')]
|
||||
last_bank_statement_ids = self.search(cr, uid, domain, limit=1, order='create_date desc', context=context)
|
||||
if last_bank_statement_ids:
|
||||
last_bank_statement = self.browse(cr, uid, last_bank_statement_ids[0], context=context)
|
||||
|
||||
last_pieces = dict(
|
||||
(line.pieces, line.number_closing) for line in last_bank_statement.details_ids
|
||||
)
|
||||
|
||||
for value in journal.cashbox_line_ids:
|
||||
nested_values = {
|
||||
'number_closing' : 0,
|
||||
'number_opening' : 0,
|
||||
'number_opening' : last_pieces.get(value.pieces, 0) if isinstance(last_pieces, dict) else 0,
|
||||
'pieces' : value.pieces
|
||||
}
|
||||
|
||||
vals['details_ids'].append([0, False, nested_values])
|
||||
|
||||
res_id = super(account_cash_statement, self).create(cr, uid, vals, context=context)
|
||||
|
|
|
@ -515,7 +515,7 @@
|
|||
<separator colspan="4" string="Accounts Allowed (empty for no control)"/>
|
||||
<field colspan="4" name="account_control_ids" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Cash Registers" attrs="{'invisible':[('type', '!=', 'cash')]}">
|
||||
<page string="Cash Registers">
|
||||
<group>
|
||||
<group string="Accounts">
|
||||
<field name="profit_account_id"/>
|
||||
|
@ -524,10 +524,11 @@
|
|||
</group>
|
||||
<group string="Miscellaneous">
|
||||
<field name="with_last_closing_balance"/>
|
||||
<field name="cash_control"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Available Coins" colspan="4" />
|
||||
<field name="cashbox_line_ids" nolabel="1" string="Unit Of Currency Definition" colspan="4">
|
||||
<separator string="Available Coins" colspan="4" attrs="{'invisible' : [('cash_control', '=', False)] }"/>
|
||||
<field name="cashbox_line_ids" nolabel="1" string="Unit Of Currency Definition" colspan="4" attrs="{'invisible' : [('cash_control', '=', False)]}">
|
||||
<tree string="CashBox Lines" editable="bottom">
|
||||
<field name="pieces" />
|
||||
</tree>
|
||||
|
|
|
@ -381,6 +381,11 @@
|
|||
<field name="name">Cash Journal - (test)</field>
|
||||
<field name="code">TCSH</field>
|
||||
<field name="type">cash</field>
|
||||
<field name="profit_account_id" model="account.account" ref="rsa" />
|
||||
<field name="loss_account_id" model="account.account" ref="rsa" />
|
||||
<field name="internal_account_id" model="account.account" ref="chart0" />
|
||||
<field name="with_last_closing_balance" eval="True" />
|
||||
<field name="cash_control" eval="True" />
|
||||
<field name="view_id" ref="account_journal_bank_view"/>
|
||||
<field name="sequence_id" ref="sequence_cash_journal"/>
|
||||
<field model="account.account" name="default_debit_account_id" ref="cash"/>
|
||||
|
|
|
@ -21,13 +21,14 @@
|
|||
</record>
|
||||
|
||||
<!-- Notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>With OpenERP's accounting, you can get an instant access to all your financial data, setup your analytic accounting, forecast your taxes, control your budgets, easily create and send invoices, record bank statements, etc.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Accounting and Finance application installed!</field>
|
||||
<field name="body">With OpenERP's accounting, you get instant access to your financial data, and can setup analytic accounting, forecast taxes, control budgets, easily create and send invoices, record bank statements, etc.
|
||||
|
||||
The accounting features are fully integrated with others OpenERP applications to automate all your processes: creation of customer invoices, control of supplier invoices, point-of-sale integration, automated follow-ups, etc.</value>
|
||||
<value>Module Accounting and Finance has been installed.</value>
|
||||
</function>
|
||||
The accounting features are fully integrated with other OpenERP applications to automate all your processes: creation of customer invoices, control of supplier invoices, point-of-sale integration, automated follow-ups, etc.</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
|
||||
"PO-Revision-Date: 2009-01-30 12:43+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"PO-Revision-Date: 2012-08-29 15:27+0000\n"
|
||||
"Last-Translator: Eric Huang <eh@cenoq.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:20+0000\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
|
||||
#. module: account_payment
|
||||
|
@ -24,7 +24,7 @@ msgstr ""
|
|||
#. module: account_payment
|
||||
#: field:payment.line,currency:0
|
||||
msgid "Partner Currency"
|
||||
msgstr "伙伴貨幣"
|
||||
msgstr "業務夥伴貨幣"
|
||||
|
||||
#. module: account_payment
|
||||
#: view:payment.order:0
|
||||
|
@ -40,7 +40,7 @@ msgstr "選取要應用之付款模式。"
|
|||
#: view:payment.mode:0
|
||||
#: view:payment.order:0
|
||||
msgid "Group By..."
|
||||
msgstr "分組根據..."
|
||||
msgstr "分類方式..."
|
||||
|
||||
#. module: account_payment
|
||||
#: field:payment.order,line_ids:0
|
||||
|
@ -84,7 +84,7 @@ msgstr "首選日期"
|
|||
#. module: account_payment
|
||||
#: model:res.groups,name:account_payment.group_account_payment
|
||||
msgid "Accounting / Payments"
|
||||
msgstr ""
|
||||
msgstr "會計/付款"
|
||||
|
||||
#. module: account_payment
|
||||
#: selection:payment.line,state:0
|
||||
|
@ -111,7 +111,7 @@ msgstr "到期日"
|
|||
#. module: account_payment
|
||||
#: view:account.move.line:0
|
||||
msgid "Account Entry Line"
|
||||
msgstr ""
|
||||
msgstr "會計分錄明細"
|
||||
|
||||
#. module: account_payment
|
||||
#: view:payment.order.create:0
|
||||
|
@ -222,7 +222,7 @@ msgstr ""
|
|||
#: view:payment.order:0
|
||||
#: field:payment.order,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "狀態"
|
||||
|
||||
#. module: account_payment
|
||||
#: view:payment.line:0
|
||||
|
@ -307,7 +307,7 @@ msgstr ""
|
|||
#. module: account_payment
|
||||
#: view:payment.order:0
|
||||
msgid "Select Invoices to Pay"
|
||||
msgstr ""
|
||||
msgstr "選擇要付款的發票"
|
||||
|
||||
#. module: account_payment
|
||||
#: view:payment.line:0
|
||||
|
@ -329,12 +329,12 @@ msgstr "通訊類型"
|
|||
#: field:payment.mode,partner_id:0
|
||||
#: report:payment.order:0
|
||||
msgid "Partner"
|
||||
msgstr "伙伴"
|
||||
msgstr "業務夥伴"
|
||||
|
||||
#. module: account_payment
|
||||
#: field:payment.line,bank_statement_line_id:0
|
||||
msgid "Bank statement line"
|
||||
msgstr ""
|
||||
msgstr "銀行對帳單明細"
|
||||
|
||||
#. module: account_payment
|
||||
#: selection:payment.order,date_prefered:0
|
||||
|
@ -399,7 +399,7 @@ msgstr "付款類型"
|
|||
#. module: account_payment
|
||||
#: help:payment.line,amount_currency:0
|
||||
msgid "Payment amount in the partner currency"
|
||||
msgstr "以伙伴貨幣計算之付款總額"
|
||||
msgstr "以業務夥伴貨幣計算之付款總額"
|
||||
|
||||
#. module: account_payment
|
||||
#: view:payment.order:0
|
||||
|
@ -441,7 +441,7 @@ msgstr ""
|
|||
#. module: account_payment
|
||||
#: field:payment.order,user_id:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
msgstr "使用者"
|
||||
|
||||
#. module: account_payment
|
||||
#: field:account.payment.populate.statement,lines:0
|
||||
|
@ -504,7 +504,7 @@ msgstr "匯入付款明細"
|
|||
#. module: account_payment
|
||||
#: field:account.move.line,amount_to_pay:0
|
||||
msgid "Amount to pay"
|
||||
msgstr "要付總額"
|
||||
msgstr "應付總額"
|
||||
|
||||
#. module: account_payment
|
||||
#: field:payment.line,amount:0
|
||||
|
|
|
@ -2,15 +2,16 @@
|
|||
<openerp>
|
||||
<data noupdate="1">
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>OpenERP's electronic invoicing allows to ease and fasten the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">eInvoicing & Payments application installed!</field>
|
||||
<field name="body">OpenERP's electronic invoicing accelerates the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.
|
||||
|
||||
You can track customer payments easily and automate the reminders. You get an overview of the discussion with your customers on each invoice to ensure a full traceability.
|
||||
You can track customer payments easily and automate follow-ups. You get an overview of the discussion with your customers on each invoice for easier traceability.
|
||||
|
||||
If you want to use advanced accounting features, you should install the "Accounting and Finance" module.</value>
|
||||
<value>Module eInvoicing & Payments has been installed.</value>
|
||||
</function>
|
||||
For advanced accounting features, you should install the "Accounting and Finance" module.</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -1,41 +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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
{
|
||||
'name': 'Projects Management: hr_expense link',
|
||||
'version': '1.1',
|
||||
'category': 'Hidden',
|
||||
'description': """
|
||||
This module is for modifying project view to show some data related to the hr_expense module.
|
||||
=============================================================================================
|
||||
""",
|
||||
'author': 'OpenERP S.A.',
|
||||
'website': 'http://www.openerp.com/',
|
||||
'depends': ['analytic_contract_hr_expense','project'],
|
||||
'data': ['analytic_contract_expense_project_view.xml'],
|
||||
'demo': [],
|
||||
'css' : [],
|
||||
'installable': True,
|
||||
'auto_install': True,
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,37 +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 project_project(osv.osv):
|
||||
_inherit = "project.project"
|
||||
|
||||
def open_hr_expense(self, cr, uid, ids, context=None):
|
||||
account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)]
|
||||
return self.pool.get('account.analytic.account').open_hr_expense(cr, uid, account_ids, context=context)
|
||||
|
||||
def hr_to_invoice_expense(self, cr, uid, ids, context=None):
|
||||
account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)]
|
||||
return self.pool.get('account.analytic.account').hr_to_invoice_expense(cr, uid, account_ids, context=context)
|
||||
|
||||
project_project()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,33 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="project_form_expense_form" model="ir.ui.view">
|
||||
<field name="name">project.project.form.expense.inherit</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="analytic_contract_project.project_account_analytic_account_form"/>
|
||||
<field eval="20" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//tr[@name="total"]' position='before'>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="charge_expenses"/>
|
||||
</td><td>
|
||||
<field name="charge_expenses"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="est_expenses" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="expense_invoiced" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="remaining_expense" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="expense_to_invoice" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
|
||||
</td><td>
|
||||
<button name="open_hr_expense" string="All Expenses" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
|
||||
<button name="hr_to_invoice_expense" string="Expenses to Invoice" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -1,24 +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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import analytic_contract_project
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,38 +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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
{
|
||||
'name' : 'Contract on Project',
|
||||
'version': '1.1',
|
||||
'author' : 'OpenERP SA',
|
||||
'category': 'Hidden',
|
||||
'website' : 'http://www.openerp.com',
|
||||
'depends' : ['project', 'account_analytic_analysis'],
|
||||
'description': """
|
||||
Add "Contract Data" in project view.
|
||||
====================================
|
||||
""",
|
||||
'data': ['analytic_contract_project_view.xml'],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': True,
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -1,84 +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 fields, osv
|
||||
from tools.translate import _
|
||||
|
||||
class project_project(osv.osv):
|
||||
_inherit = 'project.project'
|
||||
|
||||
_defaults = {
|
||||
'use_timesheets': True,
|
||||
}
|
||||
|
||||
def open_sale_order_lines(self,cr,uid,ids,context=None):
|
||||
account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)]
|
||||
return self.pool.get('account.analytic.account').open_sale_order_lines(cr, uid, account_ids, context=context)
|
||||
|
||||
def open_timesheets_to_invoice(self,cr,uid,ids,context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
analytic_account_id = self.browse(cr, uid, ids[0], context=context).analytic_account_id.id
|
||||
context.update({'search_default_account_id': analytic_account_id, 'default_account_id': analytic_account_id, 'search_default_to_invoice': 1})
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('Timesheet Lines to Invoice'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'context': context,
|
||||
'domain' : [('invoice_id','=',False),('to_invoice','!=',False), ('journal_id.type', '=', 'general')],
|
||||
'res_model': 'account.analytic.line',
|
||||
'nodestroy': True,
|
||||
}
|
||||
|
||||
def open_timesheets(self, cr, uid, ids, context=None):
|
||||
""" open Timesheets view """
|
||||
project = self.browse(cr, uid, ids[0], context)
|
||||
try:
|
||||
journal_id = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_timesheet', 'analytic_journal').id
|
||||
except ValueError:
|
||||
journal_id = False
|
||||
view_context = {
|
||||
'search_default_account_id': [project.analytic_account_id.id],
|
||||
'default_account_id': project.analytic_account_id.id,
|
||||
'default_journal_id': journal_id,
|
||||
}
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('Bill Tasks Works'),
|
||||
'res_model': 'account.analytic.line',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'context': view_context,
|
||||
'nodestroy': True,
|
||||
}
|
||||
project_project()
|
||||
|
||||
class task(osv.osv):
|
||||
_inherit = "project.task"
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
task_id = super(task, self).create(cr, uid, vals, context=context)
|
||||
task_browse = self.browse(cr, uid, task_id, context=context)
|
||||
if task_browse.project_id.analytic_account_id:
|
||||
self.pool.get('account.analytic.account').message_post(cr, uid, [task_browse.project_id.analytic_account_id.id], body=_("Task <em>%s</em> has been <b>created</b>.") % (task_browse.name), context=context)
|
||||
return task_id
|
||||
task()
|
|
@ -1,127 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="project_account_analytic_account_form" model="ir.ui.view">
|
||||
<field name="name">project.project.form.inherit</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//page[@name="team"]' position='after'>
|
||||
<page string="Contract Data">
|
||||
<group>
|
||||
<group string="Validity">
|
||||
<label for="date_start" string="Duration"/>
|
||||
<div name="duration">
|
||||
<field name="date_start" class="oe_inline"/>
|
||||
<label attrs="{'invisible':[('date','=',False)]}" class="oe_inline" string=" - "/>
|
||||
<field name="date" class="oe_inline"/>
|
||||
</div>
|
||||
<label for="quantity_max"/>
|
||||
<div>
|
||||
<field name="quantity_max" class="oe_inline"/>
|
||||
<field name="company_uom_id" readonly="1" class="oe_inline"/> / Remaining:
|
||||
<field name="remaining_hours" class="oe_inline"/>
|
||||
<field name="company_uom_id" readonly="1" class="oe_inline"/>
|
||||
</div>
|
||||
</group>
|
||||
<group string="Invoice Options">
|
||||
<field name="manager_id" />
|
||||
<field name="pricelist_id" attrs="{'invisible': [('invoice_on_timesheets','=',0)]}"/>
|
||||
<field name="to_invoice" widget="selection" attrs="{'invisible': [('invoice_on_timesheets','=',0)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator name="toinvoice" string="Invoicing"/>
|
||||
<table width="100%%">
|
||||
<tr>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th><label string="Est.Tot"/></th>
|
||||
<th><label string="Invoiced"/></th>
|
||||
<th><label string="Remaining"/></th>
|
||||
<th><label string="To Invoice"/></th>
|
||||
<th></th>
|
||||
</tr><tr>
|
||||
<td>
|
||||
<label for="fix_price_invoices"/>
|
||||
</td><td>
|
||||
<field name="fix_price_invoices" class="oe_inline"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="amount_max" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="ca_invoiced" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="remaining_ca" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="fix_price_to_invoice" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
|
||||
</td><td>
|
||||
<button name="%(account_analytic_analysis.action_sales_order)d" string="All Sales" type="action" context="{'default_partner_id': [partner_id], 'search_default_partner_id': [partner_id], 'default_project_id': analytic_account_id, 'search_default_project_id': analytic_account_id}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
|
||||
<button name="open_sale_order_lines" string="Lines To Invoice" type="object" context="{'default_partner_id': [partner_id],'default_project_id': analytic_account_id,'search_default_uninvoiced': 1,'search_default_project_id': analytic_account_id,'search_default_partner_id': [partner_id]}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/></td>
|
||||
</tr><tr attrs="{'invisible':[('use_timesheets','=',False)]}">
|
||||
<td>
|
||||
<label for="invoice_on_timesheets"/>
|
||||
</td><td>
|
||||
<field name="invoice_on_timesheets"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="hours_qtt_est" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="timesheet_ca_invoiced" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="remaining_hours_to_invoice" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="ca_to_invoice" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/>
|
||||
</td><td>
|
||||
<button name="%(hr_timesheet.act_hr_timesheet_line_evry1_all_form)d" string="All Timesheets" type="action" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}" context="{'default_account_id': analytic_account_id,'search_default_account_id': analytic_account_id}"/>
|
||||
<button name="open_timesheets_to_invoice" string="Timesheets to Invoice" type="object" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</td>
|
||||
</tr><tr name="total">
|
||||
<th>
|
||||
<label string="Total"/>
|
||||
</th><td>
|
||||
</td><td>
|
||||
<field name="est_total" class="oe_inline" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</td><td>
|
||||
<field name="invoiced_total" class="oe_inline"/>
|
||||
</td><td>
|
||||
<field name="remaining_total" class="oe_inline"/>
|
||||
</td><td>
|
||||
<field name="toinvoice_total" class="oe_inline"/>
|
||||
</td><td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<separator string="Terms and Conditions" name="description"/>
|
||||
<field name="description"/>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="project_invoice_form" model="ir.ui.view">
|
||||
<field name="name">Inherit project form : Invoicing Data</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//tr[@name="use_tasks_row"]' position='after'>
|
||||
<tr>
|
||||
<td><group><field name="use_timesheets"/></group></td>
|
||||
<td><button icon="terp-gtk-go-back-rtl" name="open_timesheets" string="Timesheets" type="object" attrs="{'invisible':[('use_timesheets','=', 0)]}"/></td>
|
||||
</tr>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="contract_inherited_form" model="ir.ui.view">
|
||||
<field name="name">Inherit contract form : adding UoM</field>
|
||||
<field name="model">account.analytic.account</field>
|
||||
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
|
||||
<field name="priority">50</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//field[@name="quantity_max"]' position='after'>
|
||||
<field name="company_uom_id" readonly="1" class="oe_inline"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-29 05:05+0000\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
|
||||
#. module: anonymization
|
||||
|
|
|
@ -7,31 +7,31 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2009-01-23 17:17+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"PO-Revision-Date: 2012-08-30 13:46+0000\n"
|
||||
"Last-Translator: Eric Huang <eh@cenoq.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:25+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: audittrail
|
||||
#: code:addons/audittrail/audittrail.py:75
|
||||
#, python-format
|
||||
msgid "WARNING: audittrail is not part of the pool"
|
||||
msgstr ""
|
||||
msgstr "警告:稽核追蹤不屬於此池"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,log_id:0
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
msgstr "日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
#: selection:audittrail.rule,state:0
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
msgstr "已訂閱"
|
||||
|
||||
#. module: audittrail
|
||||
#: sql_constraint:audittrail.rule:0
|
||||
|
@ -39,330 +39,332 @@ msgid ""
|
|||
"There is already a rule defined on this object\n"
|
||||
" You cannot define another: please edit the existing one."
|
||||
msgstr ""
|
||||
"該對象已經定義了稽核規則。\n"
|
||||
"您不能再次定義,請直接編輯現有的稽核規則。"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "Subscribed Rule"
|
||||
msgstr ""
|
||||
msgstr "已訂閱規則"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.model,name:audittrail.model_audittrail_rule
|
||||
msgid "Audittrail Rule"
|
||||
msgstr ""
|
||||
msgstr "稽核追蹤規則"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.view.log:0
|
||||
#: model:ir.actions.act_window,name:audittrail.action_audittrail_log_tree
|
||||
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_log_tree
|
||||
msgid "Audit Logs"
|
||||
msgstr ""
|
||||
msgstr "稽核日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
#: view:audittrail.rule:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
msgstr "分類方式..."
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
#: field:audittrail.rule,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "狀態"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "_Subscribe"
|
||||
msgstr ""
|
||||
msgstr "訂閱(_S)"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
#: selection:audittrail.rule,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
msgstr "草稿"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,old_value:0
|
||||
msgid "Old Value"
|
||||
msgstr ""
|
||||
msgstr "舊值"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.actions.act_window,name:audittrail.action_audittrail_view_log
|
||||
msgid "View log"
|
||||
msgstr ""
|
||||
msgstr "查看日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: help:audittrail.rule,log_read:0
|
||||
msgid ""
|
||||
"Select this if you want to keep track of read/open on any record of the "
|
||||
"object of this rule"
|
||||
msgstr ""
|
||||
msgstr "如果你需要追蹤對該對象的任何記錄的讀和打開動作請選擇此項"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,method:0
|
||||
msgid "Method"
|
||||
msgstr ""
|
||||
msgstr "方法"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.view.log,from:0
|
||||
msgid "Log From"
|
||||
msgstr ""
|
||||
msgstr "日誌來源"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,log:0
|
||||
msgid "Log ID"
|
||||
msgstr ""
|
||||
msgstr "日誌標識"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,res_id:0
|
||||
msgid "Resource Id"
|
||||
msgstr ""
|
||||
msgstr "資源標識"
|
||||
|
||||
#. module: audittrail
|
||||
#: help:audittrail.rule,user_id:0
|
||||
msgid "if User is not added then it will applicable for all users"
|
||||
msgstr ""
|
||||
msgstr "如果未加入使用者則適用於所有使用者"
|
||||
|
||||
#. module: audittrail
|
||||
#: help:audittrail.rule,log_workflow:0
|
||||
msgid ""
|
||||
"Select this if you want to keep track of workflow on any record of the "
|
||||
"object of this rule"
|
||||
msgstr ""
|
||||
msgstr "如果您需要追蹤該對象所有記錄的工作流程請選擇此項"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,user_id:0
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
msgstr "使用者"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "Log Lines"
|
||||
msgstr ""
|
||||
msgstr "日誌明細"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
#: field:audittrail.log,object_id:0
|
||||
#: field:audittrail.rule,object_id:0
|
||||
msgid "Object"
|
||||
msgstr ""
|
||||
msgstr "對象"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "AuditTrail Rule"
|
||||
msgstr ""
|
||||
msgstr "稽核追蹤規則"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.view.log,to:0
|
||||
msgid "Log To"
|
||||
msgstr ""
|
||||
msgstr "記錄到"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "New Value Text: "
|
||||
msgstr ""
|
||||
msgstr "新值內容: "
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "Search Audittrail Rule"
|
||||
msgstr ""
|
||||
msgstr "搜索稽核追蹤規則"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.actions.act_window,name:audittrail.action_audittrail_rule_tree
|
||||
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_rule_tree
|
||||
msgid "Audit Rules"
|
||||
msgstr ""
|
||||
msgstr "稽核規則"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "Old Value : "
|
||||
msgstr ""
|
||||
msgstr "舊值: "
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,name:0
|
||||
msgid "Resource Name"
|
||||
msgstr ""
|
||||
msgstr "資源名稱"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
#: field:audittrail.log,timestamp:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
msgstr "日期"
|
||||
|
||||
#. module: audittrail
|
||||
#: help:audittrail.rule,log_write:0
|
||||
msgid ""
|
||||
"Select this if you want to keep track of modification on any record of the "
|
||||
"object of this rule"
|
||||
msgstr ""
|
||||
msgstr "如果您要追蹤此對象所有記錄的變更請選擇此項。"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_create:0
|
||||
msgid "Log Creates"
|
||||
msgstr ""
|
||||
msgstr "建立日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: help:audittrail.rule,object_id:0
|
||||
msgid "Select object for which you want to generate log."
|
||||
msgstr ""
|
||||
msgstr "選擇您要生成稽核日誌的對象"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "Old Value Text : "
|
||||
msgstr ""
|
||||
msgstr "舊值內容: "
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_workflow:0
|
||||
msgid "Log Workflow"
|
||||
msgstr ""
|
||||
msgstr "記錄工作流"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_read:0
|
||||
msgid "Log Reads"
|
||||
msgstr ""
|
||||
msgstr "記錄讀操作"
|
||||
|
||||
#. module: audittrail
|
||||
#: code:addons/audittrail/audittrail.py:76
|
||||
#, python-format
|
||||
msgid "Change audittrail depends -- Setting rule as DRAFT"
|
||||
msgstr ""
|
||||
msgstr "修改檢查稽核依賴 - 設定規則為草稿"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,line_ids:0
|
||||
msgid "Log lines"
|
||||
msgstr ""
|
||||
msgstr "日誌明細"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,field_id:0
|
||||
msgid "Fields"
|
||||
msgstr ""
|
||||
msgstr "欄位列表"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "AuditTrail Rules"
|
||||
msgstr ""
|
||||
msgstr "稽核追蹤規則"
|
||||
|
||||
#. module: audittrail
|
||||
#: help:audittrail.rule,log_unlink:0
|
||||
msgid ""
|
||||
"Select this if you want to keep track of deletion on any record of the "
|
||||
"object of this rule"
|
||||
msgstr ""
|
||||
msgstr "如果你要追蹤所有刪除這個對象記錄的操作請選擇此項"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
#: field:audittrail.log,user_id:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
msgstr "使用者"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,action_id:0
|
||||
msgid "Action ID"
|
||||
msgstr ""
|
||||
msgstr "動作ID"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "Users (if User is not added then it will applicable for all users)"
|
||||
msgstr ""
|
||||
msgstr "使用者(如果沒有選擇使用者則適用於所有使用者)"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "UnSubscribe"
|
||||
msgstr ""
|
||||
msgstr "取消訂閱"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_unlink:0
|
||||
msgid "Log Deletes"
|
||||
msgstr ""
|
||||
msgstr "記錄刪除操作"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,field_description:0
|
||||
msgid "Field Description"
|
||||
msgstr ""
|
||||
msgstr "欄位說明"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "Search Audittrail Log"
|
||||
msgstr ""
|
||||
msgstr "搜尋稽核追蹤日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_write:0
|
||||
msgid "Log Writes"
|
||||
msgstr ""
|
||||
msgstr "記錄修改操作"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.view.log:0
|
||||
msgid "Open Logs"
|
||||
msgstr ""
|
||||
msgstr "打開日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,new_value_text:0
|
||||
msgid "New value Text"
|
||||
msgstr ""
|
||||
msgstr "新值內容"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,name:0
|
||||
msgid "Rule Name"
|
||||
msgstr ""
|
||||
msgstr "規則名稱"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,new_value:0
|
||||
msgid "New Value"
|
||||
msgstr ""
|
||||
msgstr "新值"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "AuditTrail Logs"
|
||||
msgstr ""
|
||||
msgstr "稽核追蹤日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "Draft Rule"
|
||||
msgstr ""
|
||||
msgstr "草稿規則"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.model,name:audittrail.model_audittrail_log
|
||||
msgid "Audittrail Log"
|
||||
msgstr ""
|
||||
msgstr "稽核追蹤日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: help:audittrail.rule,log_action:0
|
||||
msgid ""
|
||||
"Select this if you want to keep track of actions on the object of this rule"
|
||||
msgstr ""
|
||||
msgstr "如果你要追蹤這個對象所有記錄執行的操作請選擇此項"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "New Value : "
|
||||
msgstr ""
|
||||
msgstr "新值: "
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,old_value_text:0
|
||||
msgid "Old value Text"
|
||||
msgstr ""
|
||||
msgstr "舊值內容"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.view.log:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "取消"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.model,name:audittrail.model_audittrail_view_log
|
||||
msgid "View Log"
|
||||
msgstr ""
|
||||
msgstr "查看日誌"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.model,name:audittrail.model_audittrail_log_line
|
||||
msgid "Log Line"
|
||||
msgstr ""
|
||||
msgstr "日誌明細"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_action:0
|
||||
msgid "Log Action"
|
||||
msgstr ""
|
||||
msgstr "記錄動作"
|
||||
|
||||
#. module: audittrail
|
||||
#: help:audittrail.rule,log_create:0
|
||||
msgid ""
|
||||
"Select this if you want to keep track of creation on any record of the "
|
||||
"object of this rule"
|
||||
msgstr ""
|
||||
msgstr "如果你想追蹤此對象所有記錄的建立請選擇此項"
|
||||
|
|
|
@ -31,7 +31,10 @@ Allow users to sign up.
|
|||
'website': 'http://www.openerp.com',
|
||||
'installable': True,
|
||||
'depends': ['base_setup'],
|
||||
'data': ['res_config.xml'],
|
||||
'data': [
|
||||
'auth_signup_data.xml',
|
||||
'res_config.xml',
|
||||
],
|
||||
'js': ['static/src/js/auth_signup.js'],
|
||||
'qweb': ['static/src/xml/auth_signup.xml'],
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
<!-- Default template user for new users signing in -->
|
||||
<record id="default_template_user" model="res.users">
|
||||
<field name="name">Template User</field>
|
||||
<field name="login">portaltemplate</field>
|
||||
<!-- No password: this template user doesn't need to log in -->
|
||||
<field name="password"></field>
|
||||
<field name="active" eval="False"/>
|
||||
<!-- Avoid auto-including this user in any default group, just like a typical portal member -->
|
||||
<field name="groups_id" eval="[(5,)]"/>
|
||||
</record>
|
||||
|
||||
<record id="default_template_user" model="ir.config_parameter">
|
||||
<field name="key">auth_signup.template_user_id</field>
|
||||
<field name="value" ref="default_template_user"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -29,13 +29,13 @@ class base_config_settings(osv.TransientModel):
|
|||
'auth_signup_template_user_id': fields.many2one('res.users', 'Template user for new users created through signup'),
|
||||
}
|
||||
|
||||
def get_default_signup(self, cr, uid, fields, context=None):
|
||||
def get_default_auth_signup_template_user_id(self, cr, uid, fields, context=None):
|
||||
icp = self.pool.get('ir.config_parameter')
|
||||
return {
|
||||
'auth_signup_template_user_id': icp.get_param(cr, uid, 'auth.signup_template_user_id', 0) or False
|
||||
'auth_signup_template_user_id': icp.get_param(cr, uid, 'auth_signup.template_user_id', 0) or False
|
||||
}
|
||||
|
||||
def set_signup(self, cr, uid, ids, context=None):
|
||||
def set_auth_signup_template_user_id(self, cr, uid, ids, context=None):
|
||||
config = self.browse(cr, uid, ids[0], context=context)
|
||||
icp = self.pool.get('ir.config_parameter')
|
||||
icp.set_param(cr, uid, 'auth.signup_template_user_id', config.auth_signup_template_user_id.id)
|
||||
icp.set_param(cr, uid, 'auth_signup.template_user_id', config.auth_signup_template_user_id.id)
|
||||
|
|
|
@ -12,9 +12,9 @@
|
|||
<field name="auth_signup_uninvited" class="oe_inline"/>
|
||||
<label for="auth_signup_uninvited"/>
|
||||
</div>
|
||||
<div>
|
||||
<div attrs="{'invisible':[('auth_signup_uninvited','=',False)]}">
|
||||
<label for="auth_signup_template_user_id"/>
|
||||
<field name="auth_signup_template_user_id" class="oe_inline"/>
|
||||
<field name="auth_signup_template_user_id" class="oe_inline" domain="['|',('active','=',0),('active','=',1)]"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-01-20 19:34+0000\n"
|
||||
"PO-Revision-Date: 2012-08-30 17:01+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:08+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: base_setup
|
||||
#: field:user.preferences.config,menu_tips:0
|
||||
|
@ -79,12 +79,12 @@ msgstr ""
|
|||
#. module: base_setup
|
||||
#: field:product.installer,customers:0
|
||||
msgid "Customers"
|
||||
msgstr ""
|
||||
msgstr "Заказчики"
|
||||
|
||||
#. module: base_setup
|
||||
#: selection:user.preferences.config,view:0
|
||||
msgid "Extended"
|
||||
msgstr ""
|
||||
msgstr "Расширенный"
|
||||
|
||||
#. module: base_setup
|
||||
#: selection:base.setup.terminology,partner:0
|
||||
|
@ -197,7 +197,7 @@ msgstr ""
|
|||
#. module: base_setup
|
||||
#: selection:base.setup.terminology,partner:0
|
||||
msgid "Client"
|
||||
msgstr ""
|
||||
msgstr "Клиент"
|
||||
|
||||
#. module: base_setup
|
||||
#: field:migrade.application.installer.modules,import_saleforce:0
|
||||
|
@ -207,7 +207,7 @@ msgstr ""
|
|||
#. module: base_setup
|
||||
#: field:user.preferences.config,context_tz:0
|
||||
msgid "Timezone"
|
||||
msgstr ""
|
||||
msgstr "Часовой пояс"
|
||||
|
||||
#. module: base_setup
|
||||
#: model:ir.actions.act_window,name:base_setup.action_partner_terminology_config_form
|
||||
|
@ -224,6 +224,8 @@ msgstr ""
|
|||
msgid ""
|
||||
"Check out this box if you want to always display tips on each menu action"
|
||||
msgstr ""
|
||||
"Отметьте этот квадратик, если вы хотите всегда выводить советы для каждого "
|
||||
"пункта меню"
|
||||
|
||||
#. module: base_setup
|
||||
#: field:base.setup.terminology,config_logo:0
|
||||
|
@ -261,7 +263,7 @@ msgstr ""
|
|||
#. module: base_setup
|
||||
#: selection:user.preferences.config,view:0
|
||||
msgid "Simplified"
|
||||
msgstr ""
|
||||
msgstr "Упрощенный"
|
||||
|
||||
#. module: base_setup
|
||||
#: help:migrade.application.installer.modules,import_sugarcrm:0
|
||||
|
@ -271,7 +273,7 @@ msgstr ""
|
|||
#. module: base_setup
|
||||
#: selection:base.setup.terminology,partner:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
msgstr "Контрагент"
|
||||
|
||||
#. module: base_setup
|
||||
#: view:base.setup.terminology:0
|
||||
|
|
|
@ -55,21 +55,20 @@
|
|||
</record>
|
||||
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>From the top menu Sales, you can: trace leads and opportunities, get accurate forecast on your sales pipeline, plan meetings and phonecalls, get realtime statistics and efficiently organize the communication with your prospects.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">CRM application installed!</field>
|
||||
<field name="body">From the top Sales menu you can track leads and opportunities, get accurate forecast on your sales pipeline, plan meetings and phonecalls, get realtime statistics and efficiently organize the communication with your prospects.
|
||||
To manage quotations and sale orders, install the "Sales Management" application.</field>
|
||||
</record>
|
||||
|
||||
To manage quotations and sale orders, install the module "Sales Management".</value>
|
||||
<value>Module CRM has been installed</value>
|
||||
</function>
|
||||
|
||||
<record model="mail.alias" id="default_sales_alias">
|
||||
<field name="alias_name">sales</field>
|
||||
<field name="alias_model_id" ref="model_crm_lead"/>
|
||||
<field name="alias_user_id" ref="base.user_root"/>
|
||||
<field name="alias_defaults">{'type':'lead'}</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
|
||||
"PO-Revision-Date: 2012-08-06 11:58+0000\n"
|
||||
"PO-Revision-Date: 2012-08-30 17:52+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
|
@ -320,7 +320,7 @@ msgstr "Перспективный партнер"
|
|||
#: code:addons/crm/crm_lead.py:735
|
||||
#, python-format
|
||||
msgid "No Subject"
|
||||
msgstr ""
|
||||
msgstr "Без темы"
|
||||
|
||||
#. module: crm
|
||||
#: model:crm.case.resource.type,name:crm.type_lead6
|
||||
|
@ -535,7 +535,7 @@ msgstr "Эл. письмо"
|
|||
#. module: crm
|
||||
#: view:crm.phonecall:0
|
||||
msgid "Phonecalls during last 7 days"
|
||||
msgstr ""
|
||||
msgstr "Звонки за последние 7 дней"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.lead.report,creation_month:0
|
||||
|
@ -626,7 +626,7 @@ msgstr "Встреча '%s' была подтверждена."
|
|||
#. module: crm
|
||||
#: selection:crm.add.note,state:0 selection:crm.lead,state:0
|
||||
msgid "In Progress"
|
||||
msgstr ""
|
||||
msgstr "В процессе"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.case.section,reply_to:0
|
||||
|
@ -720,7 +720,7 @@ msgstr "Вероятность (%)"
|
|||
#. module: crm
|
||||
#: field:crm.lead,company_currency:0
|
||||
msgid "Company Currency"
|
||||
msgstr ""
|
||||
msgstr "Валюта организации"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
|
@ -763,7 +763,7 @@ msgstr "Остановить процесс"
|
|||
#. module: crm
|
||||
#: view:crm.lead.report:0 view:crm.phonecall.report:0
|
||||
msgid "Month-1"
|
||||
msgstr ""
|
||||
msgstr "Месяц-1"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.phonecall:0
|
||||
|
@ -778,7 +778,7 @@ msgstr "Продолжить"
|
|||
#. module: crm
|
||||
#: field:crm.segmentation,som_interval:0
|
||||
msgid "Days per Period"
|
||||
msgstr ""
|
||||
msgstr "Дней в периоде"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.meeting,byday:0
|
||||
|
@ -933,7 +933,7 @@ msgstr "Внимание!"
|
|||
#. module: crm
|
||||
#: view:crm.phonecall.report:0
|
||||
msgid "Phone calls made in current year"
|
||||
msgstr ""
|
||||
msgstr "Звонки за текущий год"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.lead,day_open:0
|
||||
|
@ -943,7 +943,7 @@ msgstr "Дней до открытия"
|
|||
#. module: crm
|
||||
#: view:crm.meeting:0
|
||||
msgid "Show Time as"
|
||||
msgstr ""
|
||||
msgstr "Показать время как"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.phonecall2partner:0
|
||||
|
@ -973,7 +973,7 @@ msgstr "Мои встречи"
|
|||
#. module: crm
|
||||
#: view:crm.phonecall:0
|
||||
msgid "Todays's Phonecalls"
|
||||
msgstr ""
|
||||
msgstr "Звонки за сегодня"
|
||||
|
||||
#. module: crm
|
||||
#: view:board.board:0
|
||||
|
@ -1030,7 +1030,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
msgid "Change Color"
|
||||
msgstr ""
|
||||
msgstr "Изменить цвет"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -1180,7 +1180,7 @@ msgstr "Письмо партнеру"
|
|||
#. module: crm
|
||||
#: view:crm.opportunity2phonecall:0 view:crm.phonecall2phonecall:0
|
||||
msgid "Call Details"
|
||||
msgstr ""
|
||||
msgstr "Детали звонка"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.meeting,class:0
|
||||
|
@ -1270,7 +1270,7 @@ msgstr "Продолжительность в минутах"
|
|||
#. module: crm
|
||||
#: field:crm.case.channel,name:0
|
||||
msgid "Channel Name"
|
||||
msgstr ""
|
||||
msgstr "Название канала"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.partner2opportunity,name:0 field:crm.phonecall2opportunity,name:0
|
||||
|
@ -1321,7 +1321,7 @@ msgstr "Дата записи"
|
|||
#. module: crm
|
||||
#: view:crm.meeting:0
|
||||
msgid "End of Recurrency"
|
||||
msgstr ""
|
||||
msgstr "Конец повторения"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.meeting:0
|
||||
|
@ -1345,7 +1345,7 @@ msgstr "Установить сигнал на это время, перед с
|
|||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_categ_phone_create_partner
|
||||
msgid "Schedule a Call"
|
||||
msgstr ""
|
||||
msgstr "Назначить звонок"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead2partner:0 view:crm.phonecall:0 view:crm.phonecall2partner:0
|
||||
|
@ -1433,7 +1433,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.phonecall.report:0
|
||||
msgid "Date of call"
|
||||
msgstr ""
|
||||
msgstr "Дата звонка"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.lead,section_id:0
|
||||
|
@ -1549,7 +1549,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
msgid "Mail"
|
||||
msgstr ""
|
||||
msgstr "Почта"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_phonecall_categ_action
|
||||
|
@ -1905,7 +1905,7 @@ msgstr "Преобразовать в предложение"
|
|||
#: model:ir.model,name:crm.model_crm_case_channel
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_channel
|
||||
msgid "Channels"
|
||||
msgstr ""
|
||||
msgstr "Каналы"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.phonecall:0 selection:crm.phonecall,state:0
|
||||
|
@ -2181,7 +2181,7 @@ msgstr "Создать нового партнера"
|
|||
#: model:ir.actions.act_window,name:crm.crm_case_categ_phone_outgoing0
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_phone_outbound
|
||||
msgid "Scheduled Calls"
|
||||
msgstr ""
|
||||
msgstr "Запланированные звонки"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.meeting:0 view:res.partner:0
|
||||
|
@ -2191,7 +2191,7 @@ msgstr "Дата начала"
|
|||
#. module: crm
|
||||
#: view:crm.phonecall:0
|
||||
msgid "Scheduled Phonecalls"
|
||||
msgstr ""
|
||||
msgstr "Запланированные звонки"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.meeting:0
|
||||
|
@ -2201,7 +2201,7 @@ msgstr "Отклонить"
|
|||
#. module: crm
|
||||
#: field:crm.lead,user_email:0
|
||||
msgid "User Email"
|
||||
msgstr ""
|
||||
msgstr "Email пользователя"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.lead,optin:0
|
||||
|
@ -2387,7 +2387,7 @@ msgstr "Прочее"
|
|||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.open_board_crm
|
||||
msgid "Sales"
|
||||
msgstr ""
|
||||
msgstr "Продажи"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm.py:430
|
||||
|
@ -2575,7 +2575,7 @@ msgstr "Проверка классификации"
|
|||
#. module: crm
|
||||
#: field:crm.lead,user_login:0
|
||||
msgid "User Login"
|
||||
msgstr ""
|
||||
msgstr "Логин пользователя"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -2706,7 +2706,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.lead,subjects:0
|
||||
msgid "Subject of Email"
|
||||
msgstr ""
|
||||
msgstr "Тема письма"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.action_view_attendee_form
|
||||
|
@ -2822,7 +2822,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.lead,color:0
|
||||
msgid "Color Index"
|
||||
msgstr ""
|
||||
msgstr "Цветовая палитра"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
|
@ -3010,7 +3010,7 @@ msgstr "Создание предложений из кандидатов"
|
|||
#: model:ir.actions.act_window,name:crm.open_board_statistical_dash
|
||||
#: model:ir.ui.menu,name:crm.menu_board_statistics_dash
|
||||
msgid "CRM Dashboard"
|
||||
msgstr ""
|
||||
msgstr "Панель аналитики CRM"
|
||||
|
||||
#. module: crm
|
||||
#: model:crm.case.categ,name:crm.categ_oppor4
|
||||
|
@ -3095,7 +3095,7 @@ msgstr "Условие на историю общения"
|
|||
#. module: crm
|
||||
#: view:crm.phonecall:0
|
||||
msgid "Date of Call"
|
||||
msgstr ""
|
||||
msgstr "Дата звонка"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,som_interval:0
|
||||
|
@ -3398,7 +3398,7 @@ msgstr "Закрыть"
|
|||
#: selection:crm.opportunity2phonecall,action:0
|
||||
#: selection:crm.phonecall2phonecall,action:0
|
||||
msgid "Schedule a call"
|
||||
msgstr ""
|
||||
msgstr "Запланировать звонок"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead:0 view:crm.phonecall:0
|
||||
|
@ -3408,7 +3408,7 @@ msgstr "Категоризация"
|
|||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
msgid "Log Call"
|
||||
msgstr ""
|
||||
msgstr "Описать звонок"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_base_action_rule
|
||||
|
@ -3438,7 +3438,7 @@ msgstr "Кому"
|
|||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
msgid "Create date"
|
||||
msgstr ""
|
||||
msgstr "Дата создания"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.meeting,class:0
|
||||
|
@ -3470,7 +3470,7 @@ msgstr "Описание"
|
|||
#. module: crm
|
||||
#: view:crm.phonecall.report:0
|
||||
msgid "Phone calls made in current month"
|
||||
msgstr ""
|
||||
msgstr "Звонки, сделанные в текущем месяце"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.lead.report,creation_month:0
|
||||
|
@ -3565,7 +3565,7 @@ msgstr "Проиграно"
|
|||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Изменить"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.lead,country_id:0 view:crm.lead.report:0
|
||||
|
@ -3625,6 +3625,9 @@ msgid ""
|
|||
"channels that will be maintained at the creation of a document in the "
|
||||
"system. Some examples of channels can be: Website, Phone Call, Reseller, etc."
|
||||
msgstr ""
|
||||
"Отлеживание источников появления кандидатов и предложений путём создания "
|
||||
"специализированных каналов, обслуживаемых при создании докумета в системе. "
|
||||
"Например, каналы могут быть такими: сайт, телефонный звонок, реселлер и т.д."
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.lead2opportunity.partner,name:0
|
||||
|
@ -3655,7 +3658,7 @@ msgstr "Последовательность"
|
|||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_mail_compose_message
|
||||
msgid "E-mail composition wizard"
|
||||
msgstr ""
|
||||
msgstr "Мастер создания электронной почты"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.meeting:0
|
||||
|
@ -3692,7 +3695,7 @@ msgstr "Год"
|
|||
#. module: crm
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr ""
|
||||
msgstr "Ошибка! Вы не можете создавать рекурсивные ссылки на участников."
|
||||
|
||||
#. module: crm
|
||||
#: model:crm.case.resource.type,name:crm.type_lead8
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-29 05:05+0000\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
|
||||
#. module: crm_caldav
|
||||
|
|
|
@ -8,67 +8,67 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-08-24 03:36+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
||||
"PO-Revision-Date: 2012-08-30 03:01+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Cenoq Corp. MIME-Version: 1.0\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:37+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim.report,nbr:0
|
||||
msgid "# of Cases"
|
||||
msgstr ""
|
||||
msgstr "# 業務量"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
msgstr "分類方式..."
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Responsibilities"
|
||||
msgstr ""
|
||||
msgstr "責任人"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,date_action_next:0
|
||||
msgid "Next Action Date"
|
||||
msgstr ""
|
||||
msgstr "下一動作日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
msgstr "3月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim.report,delay_close:0
|
||||
msgid "Delay to close"
|
||||
msgstr ""
|
||||
msgstr "延遲關閉"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,resolution:0
|
||||
msgid "Resolution"
|
||||
msgstr ""
|
||||
msgstr "解決方案"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,company_id:0
|
||||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,company_id:0
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
msgstr "公司"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,email_cc:0
|
||||
msgid "Watchers Emails"
|
||||
msgstr ""
|
||||
msgstr "視察者的電子郵件"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "#Claim"
|
||||
msgstr ""
|
||||
msgstr "#索賠"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.actions.act_window,help:crm_claim.crm_claim_stage_act
|
||||
|
@ -76,99 +76,99 @@ msgid ""
|
|||
"You can create claim stages to categorize the status of every claim entered "
|
||||
"in the system. The stages define all the steps required for the resolution "
|
||||
"of a claim."
|
||||
msgstr ""
|
||||
msgstr "你能建立索賠階段的分類在系統輸入每個索賠的狀態度。階段定義索賠解決方案的所有需求的步驟。"
|
||||
|
||||
#. module: crm_claim
|
||||
#: code:addons/crm_claim/crm_claim.py:132
|
||||
#, python-format
|
||||
msgid "The claim '%s' has been opened."
|
||||
msgstr ""
|
||||
msgstr "索賠'%s' 已被打開。"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Date Closed"
|
||||
msgstr ""
|
||||
msgstr "結束日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,day:0
|
||||
msgid "Day"
|
||||
msgstr ""
|
||||
msgstr "日"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Add Internal Note"
|
||||
msgstr ""
|
||||
msgstr "加入內部備註"
|
||||
|
||||
#. module: crm_claim
|
||||
#: help:crm.claim,section_id:0
|
||||
msgid ""
|
||||
"Sales team to which Case belongs to.Define Responsible user and Email "
|
||||
"account for mail gateway."
|
||||
msgstr ""
|
||||
msgstr "銷售團隊屬於的業務,定義負責人和郵件地址的郵件閘道。"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Claim Description"
|
||||
msgstr ""
|
||||
msgstr "索陪說明"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
msgstr "訊息"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.categ,name:crm_claim.categ_claim1
|
||||
msgid "Factual Claims"
|
||||
msgstr ""
|
||||
msgstr "實際索賠"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim,state:0
|
||||
#: selection:crm.claim.report,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
msgstr "已取消"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.resource.type,name:crm_claim.type_claim2
|
||||
msgid "Preventive"
|
||||
msgstr ""
|
||||
msgstr "預防措施"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim.report,date_closed:0
|
||||
msgid "Close Date"
|
||||
msgstr ""
|
||||
msgstr "結束日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,ref:0
|
||||
msgid "Reference"
|
||||
msgstr ""
|
||||
msgstr "關聯"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Date of claim"
|
||||
msgstr ""
|
||||
msgstr "索賠日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "All pending Claims"
|
||||
msgstr ""
|
||||
msgstr "所有未決索賠"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "# Mails"
|
||||
msgstr ""
|
||||
msgstr "#郵件"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Reset to Draft"
|
||||
msgstr ""
|
||||
msgstr "重設為草稿"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: field:crm.claim,date_deadline:0
|
||||
#: field:crm.claim.report,date_deadline:0
|
||||
msgid "Deadline"
|
||||
msgstr ""
|
||||
msgstr "截止日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
|
@ -177,116 +177,116 @@ msgstr ""
|
|||
#: field:crm.claim.report,partner_id:0
|
||||
#: model:ir.model,name:crm_claim.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
msgstr "業務夥伴"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Month of claim"
|
||||
msgstr ""
|
||||
msgstr "索賠月份"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim,type_action:0
|
||||
#: selection:crm.claim.report,type_action:0
|
||||
msgid "Preventive Action"
|
||||
msgstr ""
|
||||
msgstr "預防措施的動作"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim.report,section_id:0
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
msgstr "劃分"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Root Causes"
|
||||
msgstr ""
|
||||
msgstr "根本原因"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,user_fault:0
|
||||
msgid "Trouble Responsible"
|
||||
msgstr ""
|
||||
msgstr "問題責任"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,priority:0
|
||||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,priority:0
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
msgstr "優先級"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Send New Email"
|
||||
msgstr ""
|
||||
msgstr "發送新的電子郵件"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: selection:crm.claim,state:0
|
||||
#: view:crm.claim.report:0
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
msgstr "新建"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
msgstr "類型"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,email_from:0
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
msgstr "電子郵件"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim,priority:0
|
||||
#: selection:crm.claim.report,priority:0
|
||||
msgid "Lowest"
|
||||
msgstr ""
|
||||
msgstr "最低"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,action_next:0
|
||||
msgid "Next Action"
|
||||
msgstr ""
|
||||
msgstr "下一動作"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "My Sales Team(s)"
|
||||
msgstr ""
|
||||
msgstr "我的銷售團隊"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.stage,name:crm_claim.stage_claim3
|
||||
msgid "Won't fix"
|
||||
msgstr ""
|
||||
msgstr "不修正"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,create_date:0
|
||||
msgid "Creation Date"
|
||||
msgstr ""
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,name:0
|
||||
msgid "Claim Subject"
|
||||
msgstr ""
|
||||
msgstr "索賠主題"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.actions.act_window,help:crm_claim.action_report_crm_claim
|
||||
msgid ""
|
||||
"Have a general overview of all claims processed in the system by sorting "
|
||||
"them with specific criteria."
|
||||
msgstr ""
|
||||
msgstr "為系統內所有的索賠處理指定一個排序標準"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
msgstr "7月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.actions.act_window,name:crm_claim.crm_claim_stage_act
|
||||
msgid "Claim Stages"
|
||||
msgstr ""
|
||||
msgstr "索賠階段"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.ui.menu,name:crm_claim.menu_crm_case_claim-act
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
msgstr "分類"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
|
@ -294,108 +294,108 @@ msgstr ""
|
|||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,stage_id:0
|
||||
msgid "Stage"
|
||||
msgstr ""
|
||||
msgstr "階段"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "History Information"
|
||||
msgstr ""
|
||||
msgstr "日誌資訊"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
msgstr "日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
msgstr "聯繫人"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Month-1"
|
||||
msgstr ""
|
||||
msgstr "上月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.actions.act_window,name:crm_claim.action_report_crm_claim
|
||||
#: model:ir.ui.menu,name:crm_claim.menu_report_crm_claim_tree
|
||||
msgid "Claims Analysis"
|
||||
msgstr ""
|
||||
msgstr "索賠分析"
|
||||
|
||||
#. module: crm_claim
|
||||
#: help:crm.claim.report,delay_close:0
|
||||
msgid "Number of Days to close the case"
|
||||
msgstr ""
|
||||
msgstr "到期天數"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.model,name:crm_claim.model_crm_claim_report
|
||||
msgid "CRM Claim Report"
|
||||
msgstr ""
|
||||
msgstr "客戶關係管理索賠報表"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.stage,name:crm_claim.stage_claim1
|
||||
msgid "Accepted as Claim"
|
||||
msgstr ""
|
||||
msgstr "作為索賠接受"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.resource.type,name:crm_claim.type_claim1
|
||||
msgid "Corrective"
|
||||
msgstr ""
|
||||
msgstr "糾正"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
msgstr "9月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
msgstr "12月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,month:0
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
msgstr "月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,type_action:0
|
||||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,type_action:0
|
||||
msgid "Action Type"
|
||||
msgstr ""
|
||||
msgstr "動作類型"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,write_date:0
|
||||
msgid "Update Date"
|
||||
msgstr ""
|
||||
msgstr "更新日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Year of claim"
|
||||
msgstr ""
|
||||
msgstr "索賠年份"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Salesman"
|
||||
msgstr ""
|
||||
msgstr "業務員"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,categ_id:0
|
||||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,categ_id:0
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "分類"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.categ,name:crm_claim.categ_claim2
|
||||
msgid "Value Claims"
|
||||
msgstr ""
|
||||
msgstr "索賠金額"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Responsible User"
|
||||
msgstr ""
|
||||
msgstr "負責使用者"
|
||||
|
||||
#. module: crm_claim
|
||||
#: help:crm.claim,email_cc:0
|
||||
|
@ -403,30 +403,30 @@ msgid ""
|
|||
"These email addresses will be added to the CC field of all inbound and "
|
||||
"outbound emails for this record before being sent. Separate multiple email "
|
||||
"addresses with a comma"
|
||||
msgstr ""
|
||||
msgstr "這些郵件地址將加入到之前發送記錄的發送和接收郵件的郵件副本欄位,分隔多個郵件地址有逗號。"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
msgstr "草稿"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim,priority:0
|
||||
#: selection:crm.claim.report,priority:0
|
||||
msgid "Low"
|
||||
msgstr ""
|
||||
msgstr "低"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,date_closed:0
|
||||
#: selection:crm.claim,state:0
|
||||
#: selection:crm.claim.report,state:0
|
||||
msgid "Closed"
|
||||
msgstr ""
|
||||
msgstr "已結束"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Reply"
|
||||
msgstr ""
|
||||
msgstr "回覆"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
|
@ -434,99 +434,99 @@ msgstr ""
|
|||
#: view:crm.claim.report:0
|
||||
#: selection:crm.claim.report,state:0
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
msgstr "待處理"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Communication & History"
|
||||
msgstr ""
|
||||
msgstr "溝通&日誌"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
msgstr "8月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim,priority:0
|
||||
#: selection:crm.claim.report,priority:0
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
msgstr "普通"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Global CC"
|
||||
msgstr ""
|
||||
msgstr "完整副本"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
msgstr "6月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:res.partner:0
|
||||
msgid "Partners Claim"
|
||||
msgstr ""
|
||||
msgstr "客戶抱怨"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,partner_phone:0
|
||||
msgid "Phone"
|
||||
msgstr ""
|
||||
msgstr "電話"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim.report,user_id:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
msgstr "使用者"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "啟用"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
msgstr "11月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr ""
|
||||
msgstr "增加篩選條件"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Closure"
|
||||
msgstr ""
|
||||
msgstr "關閉"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
msgstr "搜尋"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
msgstr "10月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
msgstr "1月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: field:crm.claim,date:0
|
||||
msgid "Claim Date"
|
||||
msgstr ""
|
||||
msgstr "索賠日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: help:crm.claim,email_from:0
|
||||
msgid "These people will receive email."
|
||||
msgstr ""
|
||||
msgstr "這些人將收到電子郵件。"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.actions.act_window,name:crm_claim.crm_claim_categ_action
|
||||
msgid "Claim Categories"
|
||||
msgstr ""
|
||||
msgstr "索賠分類"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
|
@ -537,40 +537,40 @@ msgstr ""
|
|||
#: model:ir.ui.menu,name:crm_claim.menu_crm_case_claims
|
||||
#: field:res.partner,claims_ids:0
|
||||
msgid "Claims"
|
||||
msgstr ""
|
||||
msgstr "索賠"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim,type_action:0
|
||||
#: selection:crm.claim.report,type_action:0
|
||||
msgid "Corrective Action"
|
||||
msgstr ""
|
||||
msgstr "糾正的動作"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.categ,name:crm_claim.categ_claim3
|
||||
msgid "Policy Claims"
|
||||
msgstr ""
|
||||
msgstr "索賠政策"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
msgstr "日誌"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.model,name:crm_claim.model_crm_claim
|
||||
#: model:ir.ui.menu,name:crm_claim.menu_config_claim
|
||||
msgid "Claim"
|
||||
msgstr ""
|
||||
msgstr "索賠"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim,priority:0
|
||||
#: selection:crm.claim.report,priority:0
|
||||
msgid "Highest"
|
||||
msgstr ""
|
||||
msgstr "最高"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,partner_address_id:0
|
||||
msgid "Partner Contact"
|
||||
msgstr ""
|
||||
msgstr "業務夥伴聯繫方式"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
|
@ -578,109 +578,109 @@ msgstr ""
|
|||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "狀態"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
msgstr "完成"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Claim Reporter"
|
||||
msgstr ""
|
||||
msgstr "索賠者"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "取消"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "結束"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: view:crm.claim.report:0
|
||||
#: selection:crm.claim.report,state:0
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "開啟"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "New Claims"
|
||||
msgstr ""
|
||||
msgstr "新抱怨"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: selection:crm.claim,state:0
|
||||
msgid "In Progress"
|
||||
msgstr ""
|
||||
msgstr "進行中"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
#: field:crm.claim,user_id:0
|
||||
msgid "Responsible"
|
||||
msgstr ""
|
||||
msgstr "負責人"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Claims created in current year"
|
||||
msgstr ""
|
||||
msgstr "本年新建的抱怨"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Unassigned Claims"
|
||||
msgstr ""
|
||||
msgstr "未分配的抱怨"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Claims created in current month"
|
||||
msgstr ""
|
||||
msgstr "本月新建的抱怨"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim.report,delay_expected:0
|
||||
msgid "Overpassed Deadline"
|
||||
msgstr ""
|
||||
msgstr "超過截止日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,cause:0
|
||||
msgid "Root Cause"
|
||||
msgstr ""
|
||||
msgstr "根本原因"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Claim/Action Description"
|
||||
msgstr ""
|
||||
msgstr "索賠/動作說明"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,description:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
msgstr "說明"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Search Claims"
|
||||
msgstr ""
|
||||
msgstr "搜尋索賠"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,section_id:0
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Sales Team"
|
||||
msgstr ""
|
||||
msgstr "銷售團隊"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
msgstr "5月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Resolution Actions"
|
||||
msgstr ""
|
||||
msgstr "決定採取的行動"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.actions.act_window,help:crm_claim.crm_case_categ_claim0
|
||||
|
@ -690,31 +690,33 @@ msgid ""
|
|||
"history for a claim (emails sent, intervention type and so on). Claims may "
|
||||
"automatically be linked to an email address using the mail gateway module."
|
||||
msgstr ""
|
||||
"記錄和追蹤你客戶的索賠,索賠可以連結到一個或很多銷售訂單中。你可以發送帶附件的郵件和保留一個索賠的所有日誌(郵件發送,介入類型等)。索賠可以自動連結到電子"
|
||||
"郵件使用的閘道。"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim.report,email:0
|
||||
msgid "# Emails"
|
||||
msgstr ""
|
||||
msgstr "電子郵件"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.stage,name:crm_claim.stage_claim2
|
||||
msgid "Actions Done"
|
||||
msgstr ""
|
||||
msgstr "動作完成"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "Claims created in last month"
|
||||
msgstr ""
|
||||
msgstr "上個月新建的抱怨"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:crm.case.stage,name:crm_claim.stage_claim5
|
||||
msgid "Actions Defined"
|
||||
msgstr ""
|
||||
msgstr "動作定義"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Follow Up"
|
||||
msgstr ""
|
||||
msgstr "跟進"
|
||||
|
||||
#. module: crm_claim
|
||||
#: help:crm.claim,state:0
|
||||
|
@ -727,67 +729,71 @@ msgid ""
|
|||
" \n"
|
||||
"If the case needs to be reviewed then the state is set to 'Pending'."
|
||||
msgstr ""
|
||||
"當一個業務建立時狀態設為'草稿'\n"
|
||||
"如果業務正在處理狀態設為'開啟'\n"
|
||||
"當業務結束狀態設為'完成'\n"
|
||||
"如果業務需要審查狀態設為'待處理'"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
msgstr "2月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
#: field:crm.claim.report,name:0
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
msgstr "年"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "My company"
|
||||
msgstr ""
|
||||
msgstr "我的公司"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim.report,month:0
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
msgstr "4月"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim.report:0
|
||||
msgid "My Case(s)"
|
||||
msgstr ""
|
||||
msgstr "我的業務"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim,id:0
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
msgstr "ID"
|
||||
|
||||
#. module: crm_claim
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr ""
|
||||
msgstr "錯誤,您不能建立循環引用的會員用戶"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
msgstr "動作"
|
||||
|
||||
#. module: crm_claim
|
||||
#: selection:crm.claim,priority:0
|
||||
#: selection:crm.claim.report,priority:0
|
||||
msgid "High"
|
||||
msgstr ""
|
||||
msgstr "高"
|
||||
|
||||
#. module: crm_claim
|
||||
#: model:ir.actions.act_window,help:crm_claim.crm_claim_categ_action
|
||||
msgid ""
|
||||
"Create claim categories to better manage and classify your claims. Some "
|
||||
"example of claims can be: preventive action, corrective action."
|
||||
msgstr ""
|
||||
msgstr "建立索賠的類型以更好管理和分類你的索賠。如:索賠可以是預防措施、糾正措施。"
|
||||
|
||||
#. module: crm_claim
|
||||
#: field:crm.claim.report,create_date:0
|
||||
msgid "Create Date"
|
||||
msgstr ""
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: crm_claim
|
||||
#: view:crm.claim:0
|
||||
msgid "In Progress Claims"
|
||||
msgstr ""
|
||||
msgstr "正在處理的抱怨"
|
||||
|
|
|
@ -0,0 +1,744 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-08-30 10:12+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Cenoq Corp.\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk.report,delay_close:0
|
||||
msgid "Delay to Close"
|
||||
msgstr "延遲關閉"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk.report,nbr:0
|
||||
msgid "# of Cases"
|
||||
msgstr "# 業務量"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Group By..."
|
||||
msgstr "分類方式..."
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Today"
|
||||
msgstr "今日"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "March"
|
||||
msgstr "3月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Helpdesk requests occurred in current year"
|
||||
msgstr "本年發生的服務需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,company_id:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "公司"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,email_cc:0
|
||||
msgid "Watchers Emails"
|
||||
msgstr "視察者的電子郵件"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk,priority:0
|
||||
#: selection:crm.helpdesk.report,priority:0
|
||||
msgid "Highest"
|
||||
msgstr "最高"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,day:0
|
||||
msgid "Day"
|
||||
msgstr "日"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Add Internal Note"
|
||||
msgstr "加入內部備註"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Date of helpdesk requests"
|
||||
msgstr "客服需求日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Notes"
|
||||
msgstr "備註"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr "訊息"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "My company"
|
||||
msgstr "我的公司"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk,state:0
|
||||
#: selection:crm.helpdesk.report,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "已取消"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.actions.act_window,name:crm_helpdesk.action_report_crm_helpdesk
|
||||
#: model:ir.ui.menu,name:crm_helpdesk.menu_report_crm_helpdesks_tree
|
||||
msgid "Helpdesk Analysis"
|
||||
msgstr "客服分析"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,date_closed:0
|
||||
msgid "Close Date"
|
||||
msgstr "結束日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,ref:0
|
||||
msgid "Reference"
|
||||
msgstr "關聯"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,date_action_next:0
|
||||
msgid "Next Action"
|
||||
msgstr "下一動作"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Helpdesk Supports"
|
||||
msgstr "客服協助"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Extra Info"
|
||||
msgstr "額外資訊"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: field:crm.helpdesk,partner_id:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr "業務夥伴"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Estimates"
|
||||
msgstr "估計"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk.report,section_id:0
|
||||
msgid "Section"
|
||||
msgstr "劃分"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Helpdesk requests occurred in last month"
|
||||
msgstr "上個月發生的客服需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Send New Email"
|
||||
msgstr "發送新的電子郵件"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Helpdesk requests during last 7 days"
|
||||
msgstr "之前7天內的客服需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: selection:crm.helpdesk,state:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "New"
|
||||
msgstr "新建"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.model,name:crm_helpdesk.model_crm_helpdesk_report
|
||||
msgid "Helpdesk report after Sales Services"
|
||||
msgstr "客服售後服務報表"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,email_from:0
|
||||
msgid "Email"
|
||||
msgstr "電子郵件"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,channel_id:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,channel_id:0
|
||||
msgid "Channel"
|
||||
msgstr "管道"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk,priority:0
|
||||
#: selection:crm.helpdesk.report,priority:0
|
||||
msgid "Lowest"
|
||||
msgstr "最低"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "# Mails"
|
||||
msgstr "郵件"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "My Sales Team(s)"
|
||||
msgstr "我的銷售團隊"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,create_date:0
|
||||
#: field:crm.helpdesk.report,create_date:0
|
||||
msgid "Creation Date"
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Reset to Draft"
|
||||
msgstr "重設為草稿"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: selection:crm.helpdesk,state:0
|
||||
#: selection:crm.helpdesk.report,state:0
|
||||
msgid "Pending"
|
||||
msgstr "待處理"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: field:crm.helpdesk,date_deadline:0
|
||||
#: field:crm.helpdesk.report,date_deadline:0
|
||||
msgid "Deadline"
|
||||
msgstr "截止日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "July"
|
||||
msgstr "7月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.actions.act_window,name:crm_helpdesk.crm_helpdesk_categ_action
|
||||
msgid "Helpdesk Categories"
|
||||
msgstr "客服分類"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.ui.menu,name:crm_helpdesk.menu_crm_case_helpdesk-act
|
||||
msgid "Categories"
|
||||
msgstr "分類"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "New Helpdesk Request"
|
||||
msgstr "新的客服需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "History Information"
|
||||
msgstr "日誌資訊"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Dates"
|
||||
msgstr "日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Month of helpdesk requests"
|
||||
msgstr "客服需求月份"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: code:addons/crm_helpdesk/crm_helpdesk.py:101
|
||||
#, python-format
|
||||
msgid "No Subject"
|
||||
msgstr "無主題"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "#Helpdesk"
|
||||
msgstr "客服"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "All pending Helpdesk Request"
|
||||
msgstr "所有暫停的客服需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Year of helpdesk requests"
|
||||
msgstr "服務需求的年份"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "References"
|
||||
msgstr "關聯"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "September"
|
||||
msgstr "9月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Communication"
|
||||
msgstr "溝通"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,month:0
|
||||
msgid "Month"
|
||||
msgstr "月份"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Escalate"
|
||||
msgstr "提升"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,write_date:0
|
||||
msgid "Update Date"
|
||||
msgstr "更新日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Helpdesk requests occurred in current month"
|
||||
msgstr "當月發生的客服需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Salesman"
|
||||
msgstr "業務員"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,ref2:0
|
||||
msgid "Reference 2"
|
||||
msgstr "關聯2"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,categ_id:0
|
||||
#: field:crm.helpdesk.report,categ_id:0
|
||||
msgid "Category"
|
||||
msgstr "分類"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Responsible User"
|
||||
msgstr "負責使用者"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Helpdesk Support"
|
||||
msgstr "客服協助"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,planned_cost:0
|
||||
#: field:crm.helpdesk.report,planned_cost:0
|
||||
msgid "Planned Costs"
|
||||
msgstr "計劃成本"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: help:crm.helpdesk,channel_id:0
|
||||
msgid "Communication channel."
|
||||
msgstr "通訊管道"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: help:crm.helpdesk,email_cc:0
|
||||
msgid ""
|
||||
"These email addresses will be added to the CC field of all inbound and "
|
||||
"outbound emails for this record before being sent. Separate multiple email "
|
||||
"addresses with a comma"
|
||||
msgstr "這些郵件地址將加入到之前發送記錄的發送和接收郵件的郵件副本欄位,分隔多個郵件地址有逗號。"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Search Helpdesk"
|
||||
msgstr "搜索客服"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr "草稿"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk,priority:0
|
||||
#: selection:crm.helpdesk.report,priority:0
|
||||
msgid "Low"
|
||||
msgstr "低"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,date_closed:0
|
||||
#: selection:crm.helpdesk,state:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: selection:crm.helpdesk.report,state:0
|
||||
msgid "Closed"
|
||||
msgstr "已結束"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Reply"
|
||||
msgstr "回覆"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "7 Days"
|
||||
msgstr "7天"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Communication & History"
|
||||
msgstr "溝通&日誌"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "August"
|
||||
msgstr "8月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk,priority:0
|
||||
#: selection:crm.helpdesk.report,priority:0
|
||||
msgid "Normal"
|
||||
msgstr "普通"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Global CC"
|
||||
msgstr "完整副本"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "June"
|
||||
msgstr "6月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,planned_revenue:0
|
||||
msgid "Planned Revenue"
|
||||
msgstr "計劃收入"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk.report,user_id:0
|
||||
msgid "User"
|
||||
msgstr "使用者"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,active:0
|
||||
msgid "Active"
|
||||
msgstr "生效"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "November"
|
||||
msgstr "11月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr "增加篩選條件"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.actions.act_window,name:crm_helpdesk.crm_case_helpdesk_act111
|
||||
msgid "Helpdesk Requests"
|
||||
msgstr "客服需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Search"
|
||||
msgstr "搜索"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "October"
|
||||
msgstr "10月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "January"
|
||||
msgstr "1月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: help:crm.helpdesk,email_from:0
|
||||
msgid "These people will receive email."
|
||||
msgstr "這些人將收到電子郵件。"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: field:crm.helpdesk,date:0
|
||||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "History"
|
||||
msgstr "日誌"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: field:crm.helpdesk,priority:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,priority:0
|
||||
msgid "Priority"
|
||||
msgstr "優先級"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,partner_address_id:0
|
||||
msgid "Partner Contact"
|
||||
msgstr "業務夥伴聯絡人"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Misc"
|
||||
msgstr "雜項"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: field:crm.helpdesk,state:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,state:0
|
||||
msgid "State"
|
||||
msgstr "狀態"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "General"
|
||||
msgstr "一般"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Send Reminder"
|
||||
msgstr "傳送提醒"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: help:crm.helpdesk,section_id:0
|
||||
msgid ""
|
||||
"Sales team to which Case belongs to. Define "
|
||||
"Responsible user and Email account for mail gateway."
|
||||
msgstr "屬於此種情況下,銷售團隊。定義負責用戶和電子郵件帳戶的郵件網關。"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Done"
|
||||
msgstr "完成"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "December"
|
||||
msgstr "12月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Close"
|
||||
msgstr "結束"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: selection:crm.helpdesk.report,state:0
|
||||
msgid "Open"
|
||||
msgstr "開啟"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Helpdesk Support Tree"
|
||||
msgstr "客服協助來源"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk,state:0
|
||||
msgid "In Progress"
|
||||
msgstr "進行中"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Categorization"
|
||||
msgstr "分類"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: model:ir.model,name:crm_helpdesk.model_crm_helpdesk
|
||||
#: model:ir.ui.menu,name:crm_helpdesk.menu_config_helpdesk
|
||||
msgid "Helpdesk"
|
||||
msgstr "客服"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: field:crm.helpdesk,user_id:0
|
||||
msgid "Responsible"
|
||||
msgstr "負責人"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk.report,delay_expected:0
|
||||
msgid "Overpassed Deadline"
|
||||
msgstr "超過截止日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,description:0
|
||||
msgid "Description"
|
||||
msgstr "說明"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "May"
|
||||
msgstr "5月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,probability:0
|
||||
msgid "Probability (%)"
|
||||
msgstr "概率(%)"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk.report,email:0
|
||||
msgid "# Emails"
|
||||
msgstr "電子郵件"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.actions.act_window,help:crm_helpdesk.action_report_crm_helpdesk
|
||||
msgid ""
|
||||
"Have a general overview of all support requests by sorting them with "
|
||||
"specific criteria such as the processing time, number of requests answered, "
|
||||
"emails sent and costs."
|
||||
msgstr "為所有的支持請求排序指定具體標準如:處理時間,請求回覆的次數,發送的郵件,成本."
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: help:crm.helpdesk,state:0
|
||||
msgid ""
|
||||
"The state is set to 'Draft', when a case is created. "
|
||||
" \n"
|
||||
"If the case is in progress the state is set to 'Open'. "
|
||||
" \n"
|
||||
"When the case is over, the state is set to 'Done'. "
|
||||
" \n"
|
||||
"If the case needs to be reviewed then the state is set to 'Pending'."
|
||||
msgstr ""
|
||||
"當一個業務建立時狀態設為'草稿'\n"
|
||||
"如果業務正在處理狀態設為'開啟'\n"
|
||||
"當業務結束狀態設為'完成'\n"
|
||||
"如果業務需要審查狀態設為'待處理'"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "February"
|
||||
msgstr "2月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,name:0
|
||||
msgid "Name"
|
||||
msgstr "名稱"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Month-1"
|
||||
msgstr "上月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.ui.menu,name:crm_helpdesk.menu_help_support_main
|
||||
msgid "Helpdesk and Support"
|
||||
msgstr "客服和協助"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk.report,month:0
|
||||
msgid "April"
|
||||
msgstr "4月"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "My Case(s)"
|
||||
msgstr "我的業務"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Query"
|
||||
msgstr "提問"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,id:0
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.actions.act_window,help:crm_helpdesk.crm_helpdesk_categ_action
|
||||
msgid ""
|
||||
"Create and manage helpdesk categories to better manage and classify your "
|
||||
"support requests."
|
||||
msgstr "建立和管理客服類型去更好管理和分類你的需求協助"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Todays's Helpdesk Requests"
|
||||
msgstr "今天的客服需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Request Date"
|
||||
msgstr "需求日期"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
msgid "Open Helpdesk Request"
|
||||
msgstr "打開客服需求"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: selection:crm.helpdesk,priority:0
|
||||
#: selection:crm.helpdesk.report,priority:0
|
||||
msgid "High"
|
||||
msgstr "高"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk:0
|
||||
#: field:crm.helpdesk,section_id:0
|
||||
#: view:crm.helpdesk.report:0
|
||||
msgid "Sales Team"
|
||||
msgstr "銷售團隊"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,date_action_last:0
|
||||
msgid "Last Action"
|
||||
msgstr "最近動作"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: model:ir.actions.act_window,help:crm_helpdesk.crm_case_helpdesk_act111
|
||||
msgid ""
|
||||
"Helpdesk and Support allow you to track your interventions. Select a "
|
||||
"customer, add notes and categorize interventions with partners if necessary. "
|
||||
"You can also assign a priority level. Use the OpenERP Issues system to "
|
||||
"manage your support activities. Issues can be connected to the email "
|
||||
"gateway: new emails may create issues, each of them automatically gets the "
|
||||
"history of the conversation with the customer."
|
||||
msgstr ""
|
||||
"客服和協助使你可以去追蹤.如果需要選擇一個客戶增加備註和類型這業務夥伴.你可以分配一優先級用系統問題模塊來管理的的支持活動.問題能鏈接郵件閘道.新的郵件可"
|
||||
"能建立新的問題,它們能自動寫入於客戶溝通的日誌."
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: view:crm.helpdesk.report:0
|
||||
#: field:crm.helpdesk.report,name:0
|
||||
msgid "Year"
|
||||
msgstr "年"
|
||||
|
||||
#. module: crm_helpdesk
|
||||
#: field:crm.helpdesk,duration:0
|
||||
msgid "Duration"
|
||||
msgstr "持續時間"
|
|
@ -0,0 +1,885 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-08-30 10:14+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Cenoq Corp.MIME-Version: 1.0\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,send_to:0
|
||||
msgid "Send to"
|
||||
msgstr "傳送給"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,subtype:0
|
||||
msgid "Message type"
|
||||
msgstr "訊息類型"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,auto_delete:0
|
||||
msgid "Permanently delete emails after sending"
|
||||
msgstr "電子郵件發送後永久刪除"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,delay_close:0
|
||||
msgid "Delay to Close"
|
||||
msgstr "延遲關閉"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,email_to:0
|
||||
msgid "Message recipients"
|
||||
msgstr "收件人"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,planned_revenue:0
|
||||
msgid "Planned Revenue"
|
||||
msgstr "計劃收入"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,nbr:0
|
||||
msgid "# of Cases"
|
||||
msgstr "# 業務量"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: view:crm.partner.report.assign:0
|
||||
msgid "Group By..."
|
||||
msgstr "分組..."
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,template_id:0
|
||||
msgid "Template"
|
||||
msgstr "範本"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead:0
|
||||
msgid "Forward"
|
||||
msgstr "轉寄"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:res.partner:0
|
||||
msgid "Geo Localize"
|
||||
msgstr "Geo 定位"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_text:0
|
||||
msgid "Plain-text version of the message"
|
||||
msgstr "內容的純文字版本"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.forward.to.partner:0
|
||||
msgid "Body"
|
||||
msgstr "內文"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "March"
|
||||
msgstr "3月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,type:0
|
||||
msgid "Lead"
|
||||
msgstr "潛在客戶"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Delay to close"
|
||||
msgstr "延遲關閉"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.partner.report.assign:0
|
||||
msgid "#Partner"
|
||||
msgstr "#Partner"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.forward.to.partner,history:0
|
||||
msgid "Whole Story"
|
||||
msgstr "完整的情況"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "公司"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: code:addons/crm_partner_assign/partner_geo_assign.py:37
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Could not contact geolocation servers, please make sure you have a working "
|
||||
"internet connection (%s)"
|
||||
msgstr "無法連接到服務器,請確保你的連線(%s) 正常。"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,date_assign:0
|
||||
msgid "Partner Date"
|
||||
msgstr "業務夥伴日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,priority:0
|
||||
msgid "Highest"
|
||||
msgstr "最高"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_text:0
|
||||
msgid "Text contents"
|
||||
msgstr "文本內容"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,day:0
|
||||
msgid "Day"
|
||||
msgstr "日"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,message_id:0
|
||||
msgid "Message unique identifier"
|
||||
msgstr "訊息唯一編號"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.forward.to.partner,history:0
|
||||
msgid "Latest email"
|
||||
msgstr "最近的郵件"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead,partner_latitude:0
|
||||
#: field:res.partner,partner_latitude:0
|
||||
msgid "Geo Latitude"
|
||||
msgstr "Geo 緯度"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.forward.to.partner:0
|
||||
msgid ""
|
||||
"Add here all attachments of the current document you want to include in the "
|
||||
"Email."
|
||||
msgstr "在這裡加入你在郵件裡要加入現有的單據附件。"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "已取消"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead:0
|
||||
msgid "Geo Assignation"
|
||||
msgstr "Geo 指派的"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,date_closed:0
|
||||
msgid "Close Date"
|
||||
msgstr "結束日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:res.partner,partner_weight:0
|
||||
msgid ""
|
||||
"Gives the probability to assign a lead to this partner. (0 means no "
|
||||
"assignation.)"
|
||||
msgstr "為潛在客戶指定一個業務夥伴的概率(表示沒指派)"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,body_html:0
|
||||
msgid "Rich-text/HTML version of the message"
|
||||
msgstr "內容的富文本/HTML版本"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,auto_delete:0
|
||||
msgid "Auto Delete"
|
||||
msgstr "自動刪除"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,email_bcc:0
|
||||
msgid "Blind carbon copy message recipients"
|
||||
msgstr "密件副本收件人"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,partner_id:0
|
||||
#: selection:crm.lead.forward.to.partner,send_to:0
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,partner_assigned_id:0
|
||||
#: model:ir.model,name:crm_partner_assign.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "業務夥伴"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,probability:0
|
||||
msgid "Avg Probability"
|
||||
msgstr "平均概率"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:res.partner:0
|
||||
msgid "Previous"
|
||||
msgstr "前一個"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: code:addons/crm_partner_assign/partner_geo_assign.py:36
|
||||
#, python-format
|
||||
msgid "Network error"
|
||||
msgstr "網絡錯誤"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,email_from:0
|
||||
msgid "From"
|
||||
msgstr "來自"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.actions.act_window,name:crm_partner_assign.res_partner_grade_action
|
||||
#: model:ir.ui.menu,name:crm_partner_assign.menu_res_partner_grade_action
|
||||
#: field:res.partner,grade_id:0
|
||||
#: view:res.partner.grade:0
|
||||
msgid "Partner Grade"
|
||||
msgstr "業務夥伴級別"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: view:crm.partner.report.assign:0
|
||||
msgid "Section"
|
||||
msgstr "劃分"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.forward.to.partner:0
|
||||
msgid "Send"
|
||||
msgstr "發送"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:res.partner:0
|
||||
msgid "Next"
|
||||
msgstr "下一個"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,priority:0
|
||||
msgid "Priority"
|
||||
msgstr "優先級"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,state:0
|
||||
msgid "State"
|
||||
msgstr "狀態"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,delay_expected:0
|
||||
msgid "Overpassed Deadline"
|
||||
msgstr "超過截止日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,type:0
|
||||
msgid "Type"
|
||||
msgstr "類型"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.partner.report.assign:0
|
||||
msgid "Name"
|
||||
msgstr "名稱"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,priority:0
|
||||
msgid "Lowest"
|
||||
msgstr "最低"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,subtype:0
|
||||
msgid ""
|
||||
"Type of message, usually 'html' or 'plain', used to select plaintext or rich "
|
||||
"text contents accordingly"
|
||||
msgstr "內容類型,一般是“html”或“純文本”,用於對應地選擇純文本或富文本"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Assign Date"
|
||||
msgstr "分配日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Leads Analysis"
|
||||
msgstr "潛在客戶分析"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,creation_date:0
|
||||
msgid "Creation Date"
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,res_id:0
|
||||
msgid "Related Document ID"
|
||||
msgstr "相關單據編號"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "7 Days"
|
||||
msgstr "7天"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead:0
|
||||
msgid "Partner Assignation"
|
||||
msgstr "指定業務夥伴"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.report.assign,type:0
|
||||
msgid "Type is used to separate Leads and Opportunities"
|
||||
msgstr "類型用於區分線索和商機"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "July"
|
||||
msgstr "7月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,stage_id:0
|
||||
msgid "Stage"
|
||||
msgstr "階段"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,model:0
|
||||
msgid "Related Document model"
|
||||
msgstr "相關單據模組"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: code:addons/crm_partner_assign/wizard/crm_forward_to_partner.py:192
|
||||
#, python-format
|
||||
msgid "Fwd"
|
||||
msgstr "轉發"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:res.partner:0
|
||||
msgid "Geo Localization"
|
||||
msgstr "Geo 定位"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: view:crm.partner.report.assign:0
|
||||
msgid "Opportunities Assignment Analysis"
|
||||
msgstr "商機指定分析"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:res.partner:0
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,history:0
|
||||
msgid "Send history"
|
||||
msgstr "發送日誌"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.forward.to.partner:0
|
||||
msgid "Contact"
|
||||
msgstr "聯絡人"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.forward.to.partner:0
|
||||
#: view:res.partner:0
|
||||
msgid "Close"
|
||||
msgstr "結束"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,use_template:0
|
||||
msgid "Use Template"
|
||||
msgstr "使用者範本"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.actions.act_window,name:crm_partner_assign.action_report_crm_opportunity_assign
|
||||
#: model:ir.ui.menu,name:crm_partner_assign.menu_report_crm_opportunities_assign_tree
|
||||
msgid "Opp. Assignment Analysis"
|
||||
msgstr "商機指定分析"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.report.assign,delay_close:0
|
||||
msgid "Number of Days to close the case"
|
||||
msgstr "到期天數"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:res.partner,partner_weight:0
|
||||
msgid "Weight"
|
||||
msgstr "重要性"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Delay to open"
|
||||
msgstr "延遲開啟"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,grade_id:0
|
||||
#: view:crm.partner.report.assign:0
|
||||
#: field:crm.partner.report.assign,grade_id:0
|
||||
msgid "Grade"
|
||||
msgstr "級別"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "December"
|
||||
msgstr "12月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,month:0
|
||||
msgid "Month"
|
||||
msgstr "月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,opening_date:0
|
||||
msgid "Opening Date"
|
||||
msgstr "開啟日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,subject:0
|
||||
msgid "Subject"
|
||||
msgstr "主題"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: view:crm.partner.report.assign:0
|
||||
msgid "Salesman"
|
||||
msgstr "業務員"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,categ_id:0
|
||||
msgid "Category"
|
||||
msgstr "分類"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "#Opportunities"
|
||||
msgstr "#商機"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead:0
|
||||
msgid "Team"
|
||||
msgstr "團隊"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead:0
|
||||
msgid "Referred Partner"
|
||||
msgstr "推薦的業務夥伴"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,state:0
|
||||
msgid "Draft"
|
||||
msgstr "草稿"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,priority:0
|
||||
msgid "Low"
|
||||
msgstr "低"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: selection:crm.lead.report.assign,state:0
|
||||
msgid "Closed"
|
||||
msgstr "已結束"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.actions.act_window,name:crm_partner_assign.action_crm_send_mass_forward
|
||||
msgid "Mass forward to partner"
|
||||
msgstr "批量轉發給業務夥伴"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:res.partner:0
|
||||
#: field:res.partner,opportunity_assigned_ids:0
|
||||
msgid "Assigned Opportunities"
|
||||
msgstr "轉為商機"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead,date_assign:0
|
||||
msgid "Assignation Date"
|
||||
msgstr "指定日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,probability_max:0
|
||||
msgid "Max Probability"
|
||||
msgstr "最大可能"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "August"
|
||||
msgstr "8月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,priority:0
|
||||
msgid "Normal"
|
||||
msgstr "普通"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:res.partner:0
|
||||
msgid "Escalate"
|
||||
msgstr "提升"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "June"
|
||||
msgstr "6月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.report.assign,delay_open:0
|
||||
msgid "Number of Days to open the case"
|
||||
msgstr "業務開啟的天數"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,delay_open:0
|
||||
msgid "Delay to Open"
|
||||
msgstr "延遲開啟"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.forward.to.partner,send_to:0
|
||||
#: field:crm.lead.forward.to.partner,user_id:0
|
||||
#: field:crm.lead.report.assign,user_id:0
|
||||
#: field:crm.partner.report.assign,user_id:0
|
||||
msgid "User"
|
||||
msgstr "使用者"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:res.partner.grade,active:0
|
||||
msgid "Active"
|
||||
msgstr "生效"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "November"
|
||||
msgstr "11月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr "增加篩選條件"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead,partner_longitude:0
|
||||
#: field:res.partner,partner_longitude:0
|
||||
msgid "Geo Longitude"
|
||||
msgstr "Geo 經度"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.partner.report.assign,opp:0
|
||||
msgid "# of Opportunity"
|
||||
msgstr "商機編號"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Lead Assign"
|
||||
msgstr "潛在客戶指定"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "October"
|
||||
msgstr "10月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead:0
|
||||
msgid "Assignation"
|
||||
msgstr "指定"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "January"
|
||||
msgstr "1月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead,partner_assigned_id:0
|
||||
msgid "Partner this case has been forwarded/assigned to."
|
||||
msgstr "這業務的業務夥伴已提出/已指定"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,date:0
|
||||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,body_html:0
|
||||
msgid "Rich-text contents"
|
||||
msgstr "Rich-text內容"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Planned Revenues"
|
||||
msgstr "已計劃收入"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.model,name:crm_partner_assign.model_res_partner_grade
|
||||
msgid "res.partner.grade"
|
||||
msgstr "res.partner.grade"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,message_id:0
|
||||
msgid "Message-Id"
|
||||
msgstr "訊息-Id"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.forward.to.partner:0
|
||||
#: field:crm.lead.forward.to.partner,attachment_ids:0
|
||||
msgid "Attachments"
|
||||
msgstr "附件"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,email_cc:0
|
||||
msgid "Cc"
|
||||
msgstr "副本收件人"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "September"
|
||||
msgstr "9月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,references:0
|
||||
msgid "References"
|
||||
msgstr "關聯"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Last 30 Days"
|
||||
msgstr "最近30天"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:res.partner.grade,name:0
|
||||
msgid "Grade Name"
|
||||
msgstr "級別名稱"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead,date_assign:0
|
||||
msgid "Last date this case was forwarded/assigned to a partner"
|
||||
msgstr "這業務指定/轉發的業務夥伴的最後期限"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,state:0
|
||||
#: view:res.partner:0
|
||||
msgid "Open"
|
||||
msgstr "開啟"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,email_cc:0
|
||||
msgid "Carbon copy message recipients"
|
||||
msgstr "郵件副本收件人"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,headers:0
|
||||
msgid ""
|
||||
"Full message headers, e.g. SMTP session headers (usually available on "
|
||||
"inbound messages only)"
|
||||
msgstr "完整的郵件標題,例如僅SMTP會話頭(通常可在入站消息)"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:res.partner,date_localization:0
|
||||
msgid "Geo Localization Date"
|
||||
msgstr "Geo 定位的日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
msgid "Current"
|
||||
msgstr "當前的"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,email_to:0
|
||||
msgid "To"
|
||||
msgstr "給"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,email_from:0
|
||||
msgid ""
|
||||
"Message sender, taken from user preferences. If empty, this is not a mail "
|
||||
"but a message."
|
||||
msgstr "郵件發件人,來自使用者的個人設置。如果為空,不發郵件而是發內部消息。"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.partner.report.assign,nbr:0
|
||||
msgid "# of Partner"
|
||||
msgstr "# of Partner"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.forward.to.partner:0
|
||||
#: model:ir.actions.act_window,name:crm_partner_assign.crm_lead_forward_to_partner_act
|
||||
msgid "Forward to Partner"
|
||||
msgstr "轉發給業務夥伴"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.partner.report.assign,name:0
|
||||
msgid "Partner name"
|
||||
msgstr "上級名稱"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "May"
|
||||
msgstr "5月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,probable_revenue:0
|
||||
msgid "Probable Revenue"
|
||||
msgstr "預計收入"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,reply_to:0
|
||||
msgid "Reply-To"
|
||||
msgstr "回覆給"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead,partner_assigned_id:0
|
||||
msgid "Assigned Partner"
|
||||
msgstr "指定的業務夥伴"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,address_id:0
|
||||
msgid "Address"
|
||||
msgstr "地址"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,type:0
|
||||
msgid "Opportunity"
|
||||
msgstr "商機"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.forward.to.partner:0
|
||||
msgid "Send Mail"
|
||||
msgstr "發送郵件"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,partner_id:0
|
||||
msgid "Customer"
|
||||
msgstr "客戶"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "February"
|
||||
msgstr "2月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.forward.to.partner,send_to:0
|
||||
msgid "Email Address"
|
||||
msgstr "電子郵件地址"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,country_id:0
|
||||
#: view:crm.partner.report.assign:0
|
||||
#: field:crm.partner.report.assign,country_id:0
|
||||
msgid "Country"
|
||||
msgstr "國家"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,headers:0
|
||||
msgid "Message headers"
|
||||
msgstr "郵件頭"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:res.partner:0
|
||||
msgid "Convert to Opportunity"
|
||||
msgstr "轉換為商機"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,email_bcc:0
|
||||
msgid "Bcc"
|
||||
msgstr "密件副本"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead:0
|
||||
msgid "Geo Assign"
|
||||
msgstr "指定geolocalization"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,month:0
|
||||
msgid "April"
|
||||
msgstr "4月"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.actions.act_window,name:crm_partner_assign.action_report_crm_partner_assign
|
||||
#: model:ir.ui.menu,name:crm_partner_assign.menu_report_crm_partner_assign_tree
|
||||
msgid "Partnership Analysis"
|
||||
msgstr "業務夥伴分析"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.model,name:crm_partner_assign.model_crm_lead
|
||||
msgid "crm.lead"
|
||||
msgstr "crm.lead"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,state:0
|
||||
msgid "Pending"
|
||||
msgstr "待處理"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.partner.report.assign:0
|
||||
msgid "Partner assigned Analysis"
|
||||
msgstr "業務夥伴分配分析"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.model,name:crm_partner_assign.model_crm_lead_report_assign
|
||||
msgid "CRM Lead Report"
|
||||
msgstr "客戶關係管理 線索報表"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,references:0
|
||||
msgid "Message references, such as identifiers of previous messages"
|
||||
msgstr "郵件引用,例如前一個郵件的ID"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr "錯誤,您不能建立循環引用的會員用戶"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.forward.to.partner,history:0
|
||||
msgid "Case Information"
|
||||
msgstr "業務資訊"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:res.partner.grade,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr "順序"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.model,name:crm_partner_assign.model_crm_partner_report_assign
|
||||
msgid "CRM Partner Report"
|
||||
msgstr "CRM業務夥伴報表"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: model:ir.model,name:crm_partner_assign.model_crm_lead_forward_to_partner
|
||||
msgid "Email composition wizard"
|
||||
msgstr "電子郵件成分嚮導"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: selection:crm.lead.report.assign,priority:0
|
||||
msgid "High"
|
||||
msgstr "高"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,section_id:0
|
||||
#: field:crm.partner.report.assign,section_id:0
|
||||
msgid "Sales Team"
|
||||
msgstr "銷售團隊"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.report.assign,create_date:0
|
||||
msgid "Create Date"
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: field:crm.lead.forward.to.partner,filter_id:0
|
||||
msgid "Filters"
|
||||
msgstr "篩選"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: view:crm.lead.report.assign:0
|
||||
#: field:crm.lead.report.assign,year:0
|
||||
msgid "Year"
|
||||
msgstr "年"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
#: help:crm.lead.forward.to.partner,reply_to:0
|
||||
msgid "Preferred response address for the message"
|
||||
msgstr "本郵件推薦的回覆地址"
|
||||
|
||||
#~ msgid "E-mail composition wizard"
|
||||
#~ msgstr "郵件協同作業"
|
|
@ -7,19 +7,19 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-05-10 18:26+0000\n"
|
||||
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\n"
|
||||
"PO-Revision-Date: 2012-08-29 08:56+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:25+0000\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
msgid "Questions List"
|
||||
msgstr "問題表"
|
||||
msgstr "問題列表"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.actions.act_window,help:crm_profiling.open_questionnaires
|
||||
|
@ -28,7 +28,7 @@ msgid ""
|
|||
"in the sales cycle by helping them to ask the right questions. The "
|
||||
"segmentation tool allows you to automatically assign a partner to a category "
|
||||
"according to his answers to the different questionnaires."
|
||||
msgstr ""
|
||||
msgstr "你能建立特定主題的問卷調查去指導你的團隊在銷售週期向客戶詢問合適的問題。這細分工具能根據不同問題的答案自動劃分業務夥伴到不同的類型。"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.answer,question_id:0
|
||||
|
@ -47,12 +47,12 @@ msgstr "開啟問卷"
|
|||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,child_ids:0
|
||||
msgid "Child Profiles"
|
||||
msgstr ""
|
||||
msgstr "子客戶特徵"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Partner Segmentations"
|
||||
msgstr "伙伴分割"
|
||||
msgstr "業務夥伴分類"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.answer,name:0
|
||||
|
@ -64,17 +64,17 @@ msgstr "答案"
|
|||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_open_questionnaire_line
|
||||
msgid "open.questionnaire.line"
|
||||
msgstr ""
|
||||
msgstr "open.questionnaire.line"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_crm_segmentation
|
||||
msgid "Partner Segmentation"
|
||||
msgstr "伙伴區間"
|
||||
msgstr "業務夥伴分類"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:res.partner:0
|
||||
msgid "Profiling"
|
||||
msgstr ""
|
||||
msgstr "紀錄運行效能(Profiling)"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
|
@ -97,7 +97,7 @@ msgstr "答案"
|
|||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_open_questionnaire
|
||||
msgid "open.questionnaire"
|
||||
msgstr ""
|
||||
msgstr "open.questionnaire"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:open.questionnaire,questionnaire_id:0
|
||||
|
@ -112,12 +112,12 @@ msgstr "使用問卷"
|
|||
#. module: crm_profiling
|
||||
#: view:open.questionnaire:0
|
||||
msgid "_Cancel"
|
||||
msgstr ""
|
||||
msgstr "取消(_C)"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:open.questionnaire,question_ans_ids:0
|
||||
msgid "Question / Answers"
|
||||
msgstr ""
|
||||
msgstr "問/答"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
|
@ -133,22 +133,22 @@ msgid ""
|
|||
"Check this box if you want to use this tab as "
|
||||
"part of the segmentation rule. If not checked, "
|
||||
"the criteria beneath will be ignored"
|
||||
msgstr ""
|
||||
msgstr "勾選這選項,如果你想使用這標籤作為細分規則的一部分。如果勾選,這規則將被忽略"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:crm.segmentation:0
|
||||
msgid "Error ! You can not create recursive profiles."
|
||||
msgstr ""
|
||||
msgstr "錯誤! 你不能建立相關的簡介。"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,profiling_active:0
|
||||
msgid "Use The Profiling Rules"
|
||||
msgstr ""
|
||||
msgstr "使用這客戶特徵的規則"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr ""
|
||||
msgstr "錯誤! 您不能建立相關的會員用戶"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.question:0
|
||||
|
@ -172,7 +172,7 @@ msgstr "問題"
|
|||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,parent_id:0
|
||||
msgid "Parent Profile"
|
||||
msgstr ""
|
||||
msgstr "上級客戶簡介"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:open.questionnaire:0
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-08-29 09:15+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@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-08-30 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.model,name:crm_todo.model_project_task
|
||||
msgid "Task"
|
||||
msgstr "任務"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Timebox"
|
||||
msgstr "時間區間"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "For cancelling the task"
|
||||
msgstr "取消任務"
|
||||
|
||||
#. module: crm_todo
|
||||
#: constraint:project.task:0
|
||||
msgid "Error ! Task end-date must be greater then task start-date"
|
||||
msgstr "錯誤!任務結束日期必須大於任務開始日期"
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.model,name:crm_todo.model_crm_lead
|
||||
msgid "crm.lead"
|
||||
msgstr "crm.lead"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Next"
|
||||
msgstr "下一步"
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
||||
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
||||
msgid "My Tasks"
|
||||
msgstr "我的任務"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
#: field:crm.lead,task_ids:0
|
||||
msgid "Tasks"
|
||||
msgstr "任務"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Done"
|
||||
msgstr "完成"
|
||||
|
||||
#. module: crm_todo
|
||||
#: constraint:project.task:0
|
||||
msgid "Error ! You cannot create recursive tasks."
|
||||
msgstr "錯誤!不能創建循環引用的任務"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Cancel"
|
||||
msgstr "刪除"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Extra Info"
|
||||
msgstr "額外資訊"
|
||||
|
||||
#. module: crm_todo
|
||||
#: field:project.task,lead_id:0
|
||||
msgid "Lead / Opportunity"
|
||||
msgstr "潛在客戶/機會"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "For changing to done state"
|
||||
msgstr "要設置為完成狀態"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Previous"
|
||||
msgstr "前一頁"
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2011-09-27 08:06+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2012-08-29 07:43+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@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-08-28 06:34+0000\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-30 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
|
||||
#. module: decimal_precision
|
||||
|
@ -46,7 +46,7 @@ msgstr "小數精確度"
|
|||
#. module: decimal_precision
|
||||
#: model:ir.model,name:decimal_precision.model_decimal_precision
|
||||
msgid "decimal.precision"
|
||||
msgstr ""
|
||||
msgstr "decimal.precision"
|
||||
|
||||
#~ msgid "Decimal Precision Configuration"
|
||||
#~ msgstr "小數精確度設定"
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2011-01-28 03:53+0000\n"
|
||||
"Last-Translator: Walter Cheuk <wwycheuk@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"PO-Revision-Date: 2012-08-30 11:51+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Cenoq Corp.\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:28+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,parent_id:0
|
||||
|
@ -35,7 +35,7 @@ msgstr "名稱欄位"
|
|||
#. module: document
|
||||
#: view:board.board:0
|
||||
msgid "Document board"
|
||||
msgstr ""
|
||||
msgstr "文件佈告欄"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_process_node
|
||||
|
@ -58,7 +58,7 @@ msgstr "用作資源目錄名稱之欄位。如留空,會用該「名稱」。
|
|||
#: view:document.directory:0
|
||||
#: view:document.storage:0
|
||||
msgid "Group By..."
|
||||
msgstr "分組根據..."
|
||||
msgstr "分類方式..."
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_document_directory_content_type
|
||||
|
@ -79,7 +79,7 @@ msgstr "檔案"
|
|||
#. module: document
|
||||
#: view:report.files.partner:0
|
||||
msgid "Files per Month"
|
||||
msgstr ""
|
||||
msgstr "當月文件"
|
||||
|
||||
#. module: document
|
||||
#: selection:report.document.user,month:0
|
||||
|
@ -90,12 +90,12 @@ msgstr "三月"
|
|||
#. module: document
|
||||
#: view:document.configuration:0
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "抬頭"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.dctx,expr:0
|
||||
msgid "Expression"
|
||||
msgstr "表達式"
|
||||
msgstr "表達方式"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
|
@ -111,7 +111,7 @@ msgstr "目錄內容"
|
|||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Dynamic context"
|
||||
msgstr ""
|
||||
msgstr "動態背景"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.ui.menu,name:document.menu_document_management_configuration
|
||||
|
@ -125,11 +125,14 @@ msgid ""
|
|||
"You can use 'dir_id' for current dir, 'res_id', 'res_model' as a reference "
|
||||
"to the current record, in dynamic folders"
|
||||
msgstr ""
|
||||
"A python expression used to evaluate the field.\n"
|
||||
"You can use 'dir_id' for current dir, 'res_id', 'res_model' as a reference "
|
||||
"to the current record, in dynamic folders"
|
||||
|
||||
#. module: document
|
||||
#: view:report.document.user:0
|
||||
msgid "This Year"
|
||||
msgstr "本年"
|
||||
msgstr "今年"
|
||||
|
||||
#. module: document
|
||||
#: field:document.storage,path:0
|
||||
|
@ -146,7 +149,7 @@ msgstr "目錄名不能重覆!"
|
|||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Filter on my documents"
|
||||
msgstr ""
|
||||
msgstr "過濾我的文件"
|
||||
|
||||
#. module: document
|
||||
#: field:ir.attachment,index_content:0
|
||||
|
@ -158,12 +161,12 @@ msgstr "已索引內容"
|
|||
msgid ""
|
||||
"If true, all attachments that match this resource will be located. If "
|
||||
"false, only ones that have this as parent."
|
||||
msgstr ""
|
||||
msgstr "如果正確,所有符合資源的附件會被發現。如果錯誤,只有符合資源的附件會被歸屬。"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.todo.category,name:document.category_knowledge_mgmt_config
|
||||
msgid "Knowledge Management"
|
||||
msgstr ""
|
||||
msgstr "知識管理"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
|
@ -175,7 +178,7 @@ msgstr "目錄"
|
|||
#. module: document
|
||||
#: model:ir.model,name:document.model_report_document_user
|
||||
msgid "Files details by Users"
|
||||
msgstr "各用戶檔案詳情"
|
||||
msgstr "各使用者檔案詳情"
|
||||
|
||||
#. module: document
|
||||
#: code:addons/document/document_storage.py:573
|
||||
|
@ -187,17 +190,17 @@ msgstr "錯誤!"
|
|||
#. module: document
|
||||
#: field:document.directory,resource_find_all:0
|
||||
msgid "Find all resources"
|
||||
msgstr ""
|
||||
msgstr "尋找所有資源"
|
||||
|
||||
#. module: document
|
||||
#: selection:document.directory,type:0
|
||||
msgid "Folders per resource"
|
||||
msgstr ""
|
||||
msgstr "按資源歸類檔案夾"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,suffix:0
|
||||
msgid "Suffix"
|
||||
msgstr "後綴"
|
||||
msgstr "字尾"
|
||||
|
||||
#. module: document
|
||||
#: field:report.document.user,change_date:0
|
||||
|
@ -207,7 +210,7 @@ msgstr "修改日期"
|
|||
#. module: document
|
||||
#: view:document.configuration:0
|
||||
msgid "Knowledge Application Configuration"
|
||||
msgstr ""
|
||||
msgstr "文管設定"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
|
@ -219,7 +222,7 @@ msgstr "伙伴"
|
|||
#. module: document
|
||||
#: view:board.board:0
|
||||
msgid "Files by Users"
|
||||
msgstr "各用戶檔案"
|
||||
msgstr "使用者檔案"
|
||||
|
||||
#. module: document
|
||||
#: field:process.node,directory_id:0
|
||||
|
@ -239,7 +242,7 @@ msgstr "檢驗錯誤"
|
|||
#. module: document
|
||||
#: model:ir.model,name:document.model_ir_actions_report_xml
|
||||
msgid "ir.actions.report.xml"
|
||||
msgstr ""
|
||||
msgstr "ir.actions.report.xml"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.action_document_file_form
|
||||
|
@ -252,13 +255,13 @@ msgstr "文件"
|
|||
#. module: document
|
||||
#: constraint:document.directory:0
|
||||
msgid "Error! You can not create recursive Directories."
|
||||
msgstr ""
|
||||
msgstr "錯誤! 您不可以建立循環目錄。"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
#: field:document.directory,storage_id:0
|
||||
msgid "Storage"
|
||||
msgstr ""
|
||||
msgstr "存儲器"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,ressource_type_id:0
|
||||
|
@ -292,28 +295,28 @@ msgstr "類型"
|
|||
msgid ""
|
||||
"Select an object here and there will be one folder per record of that "
|
||||
"resource."
|
||||
msgstr ""
|
||||
msgstr "在這裡選擇一個目標,這個資源將會是一筆記錄一個檔案夾"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory,domain:0
|
||||
msgid ""
|
||||
"Use a domain if you want to apply an automatic filter on visible resources."
|
||||
msgstr ""
|
||||
msgstr "請使用一個領域,如果您要將可見的資源自動過濾。"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.action_view_files_by_partner
|
||||
msgid "Files Per Partner"
|
||||
msgstr ""
|
||||
msgstr "夥伴文件"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,dctx_ids:0
|
||||
msgid "Context fields"
|
||||
msgstr "脈絡欄位"
|
||||
msgstr "內文欄位"
|
||||
|
||||
#. module: document
|
||||
#: field:ir.attachment,store_fname:0
|
||||
msgid "Stored Filename"
|
||||
msgstr ""
|
||||
msgstr "儲存名稱"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
|
@ -336,7 +339,7 @@ msgstr "七月"
|
|||
#: model:ir.actions.act_window,name:document.open_board_document_manager
|
||||
#: model:ir.ui.menu,name:document.menu_reports_document_manager
|
||||
msgid "Document Dashboard"
|
||||
msgstr "文件儀錶板"
|
||||
msgstr "文件控制台"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content.type,code:0
|
||||
|
@ -346,7 +349,7 @@ msgstr "延伸檔案"
|
|||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Created"
|
||||
msgstr ""
|
||||
msgstr "已建立"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,content_ids:0
|
||||
|
@ -356,25 +359,25 @@ msgstr "虛擬檔案"
|
|||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Modified"
|
||||
msgstr ""
|
||||
msgstr "已修改"
|
||||
|
||||
#. module: document
|
||||
#: code:addons/document/document_storage.py:639
|
||||
#, python-format
|
||||
msgid "Error at doc write!"
|
||||
msgstr ""
|
||||
msgstr "文件書寫錯誤!"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Generated Files"
|
||||
msgstr ""
|
||||
msgstr "已產生檔案"
|
||||
|
||||
#. module: document
|
||||
#: view:document.configuration:0
|
||||
msgid ""
|
||||
"When executing this wizard, it will configure your directories automatically "
|
||||
"according to modules installed."
|
||||
msgstr ""
|
||||
msgstr "執行這個精靈,它會根據已安裝的模組自動組態您的目錄。"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,directory_id:0
|
||||
|
@ -397,7 +400,7 @@ msgstr "安全"
|
|||
#: field:document.storage,write_uid:0
|
||||
#: field:ir.attachment,write_uid:0
|
||||
msgid "Last Modification User"
|
||||
msgstr "最後修改用戶"
|
||||
msgstr "最後修改使用者"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.act_res_partner_document
|
||||
|
@ -425,7 +428,7 @@ msgstr "各目錄檔案詳情"
|
|||
#. module: document
|
||||
#: view:report.document.user:0
|
||||
msgid "All users files"
|
||||
msgstr "所有用戶檔案"
|
||||
msgstr "所有使用者檔案"
|
||||
|
||||
#. module: document
|
||||
#: view:board.board:0
|
||||
|
@ -453,18 +456,18 @@ msgstr "靜態目錄"
|
|||
#. module: document
|
||||
#: field:document.directory,child_ids:0
|
||||
msgid "Children"
|
||||
msgstr ""
|
||||
msgstr "子目錄"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Define words in the context, for all child directories and files"
|
||||
msgstr ""
|
||||
msgstr "在內文中定義所有的子目錄及檔案"
|
||||
|
||||
#. module: document
|
||||
#: help:document.storage,online:0
|
||||
msgid ""
|
||||
"If not checked, media is currently offline and its contents not available"
|
||||
msgstr ""
|
||||
msgstr "如果未檢查,媒體已離線且其內容也無法使用。"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
|
@ -475,7 +478,7 @@ msgstr ""
|
|||
#: field:report.document.user,user_id:0
|
||||
#: field:report.document.wall,user_id:0
|
||||
msgid "Owner"
|
||||
msgstr ""
|
||||
msgstr "擁有人"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
|
@ -492,7 +495,7 @@ msgstr "內容"
|
|||
#: field:document.storage,create_date:0
|
||||
#: field:report.document.user,create_date:0
|
||||
msgid "Date Created"
|
||||
msgstr ""
|
||||
msgstr "產生的日期"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory.content,include_name:0
|
||||
|
@ -501,12 +504,14 @@ msgid ""
|
|||
"name.\n"
|
||||
"If set, the directory will have to be a resource one."
|
||||
msgstr ""
|
||||
"如果您要檔案名稱包含記錄名稱,請檢查這個欄位。\n"
|
||||
"如果設定, 這個目錄將會是第一個資源"
|
||||
|
||||
#. module: document
|
||||
#: view:document.configuration:0
|
||||
#: model:ir.actions.act_window,name:document.action_config_auto_directory
|
||||
msgid "Configure Directories"
|
||||
msgstr ""
|
||||
msgstr "目錄組態"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,include_name:0
|
||||
|
@ -521,26 +526,26 @@ msgstr "附件"
|
|||
#. module: document
|
||||
#: field:ir.actions.report.xml,model_id:0
|
||||
msgid "Model Id"
|
||||
msgstr ""
|
||||
msgstr "模型 Id"
|
||||
|
||||
#. module: document
|
||||
#: field:document.storage,online:0
|
||||
msgid "Online"
|
||||
msgstr ""
|
||||
msgstr "在線上"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory,ressource_tree:0
|
||||
msgid ""
|
||||
"Check this if you want to use the same tree structure as the object selected "
|
||||
"in the system."
|
||||
msgstr ""
|
||||
msgstr "檢查這個項目,如果您要在系統中使用相同的樹狀結構當作選擇的目標。"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory,ressource_id:0
|
||||
msgid ""
|
||||
"Along with Parent Model, this ID attaches this folder to a specific record "
|
||||
"of Parent Model."
|
||||
msgstr ""
|
||||
msgstr "隨著母模型,這個ID在這個檔案夾附屬在母模型的特定記錄上。"
|
||||
|
||||
#. module: document
|
||||
#: selection:report.document.user,month:0
|
||||
|
@ -551,7 +556,7 @@ msgstr "八月"
|
|||
#. module: document
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "Directory cannot be parent of itself!"
|
||||
msgstr ""
|
||||
msgstr "目錄不能作自己的母目錄!"
|
||||
|
||||
#. module: document
|
||||
#: selection:report.document.user,month:0
|
||||
|
@ -563,7 +568,7 @@ msgstr "六月"
|
|||
#: field:report.document.user,user:0
|
||||
#: field:report.document.wall,user:0
|
||||
msgid "User"
|
||||
msgstr "用戶"
|
||||
msgstr "使用者"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,group_ids:0
|
||||
|
@ -574,7 +579,7 @@ msgstr "群組"
|
|||
#. module: document
|
||||
#: field:document.directory.content.type,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "啟用"
|
||||
|
||||
#. module: document
|
||||
#: selection:report.document.user,month:0
|
||||
|
@ -596,6 +601,8 @@ msgid ""
|
|||
"record, just like attachments. Don't put a parent directory if you select a "
|
||||
"parent model."
|
||||
msgstr ""
|
||||
"如果您在這裡放置一個目標,這個目錄範本將會出現下列所有目標。這種目錄是 \"附件\" "
|
||||
"於特定的模型或記錄,就像附屬文件。如果您選擇一個母模型,就不要放置母目錄。"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
|
@ -611,7 +618,7 @@ msgstr "十月"
|
|||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Seq."
|
||||
msgstr ""
|
||||
msgstr "Seq."
|
||||
|
||||
#. module: document
|
||||
#: selection:document.storage,type:0
|
||||
|
@ -637,12 +644,12 @@ msgstr ""
|
|||
#. module: document
|
||||
#: model:ir.ui.menu,name:document.menu_reports_document
|
||||
msgid "Dashboard"
|
||||
msgstr "儀錶板"
|
||||
msgstr "控制台"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.action_view_user_graph
|
||||
msgid "Files By Users"
|
||||
msgstr "各用戶檔案"
|
||||
msgstr "各使用者檔案"
|
||||
|
||||
#. module: document
|
||||
#: field:document.storage,readonly:0
|
||||
|
@ -652,7 +659,7 @@ msgstr "唯讀"
|
|||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.action_document_directory_form
|
||||
msgid "Document Directory"
|
||||
msgstr ""
|
||||
msgstr "文件目錄"
|
||||
|
||||
#. module: document
|
||||
#: sql_constraint:document.directory:0
|
||||
|
@ -663,12 +670,12 @@ msgstr "目錄名不能重覆!"
|
|||
#: field:document.directory,create_uid:0
|
||||
#: field:document.storage,create_uid:0
|
||||
msgid "Creator"
|
||||
msgstr ""
|
||||
msgstr "建置者"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
msgstr "順序"
|
||||
|
||||
#. module: document
|
||||
#: view:document.configuration:0
|
||||
|
@ -678,6 +685,8 @@ msgid ""
|
|||
"attached to the document, or to print and download any report. This tool "
|
||||
"will create directories automatically according to modules installed."
|
||||
msgstr ""
|
||||
"OpenERP's "
|
||||
"文件管理系統支援虛擬檔案夾與文件配對。文件的虛擬檔案夾可以用來管理文件的附件,或列印及下載任何報表。這個工具會根據安裝的模組自動產生目錄。"
|
||||
|
||||
#. module: document
|
||||
#: view:board.board:0
|
||||
|
@ -695,7 +704,7 @@ msgstr "九月"
|
|||
#. module: document
|
||||
#: field:document.directory.content,prefix:0
|
||||
msgid "Prefix"
|
||||
msgstr "前綴"
|
||||
msgstr "字尾"
|
||||
|
||||
#. module: document
|
||||
#: field:report.document.wall,last:0
|
||||
|
@ -710,7 +719,7 @@ msgstr "檔案名稱"
|
|||
#. module: document
|
||||
#: view:document.configuration:0
|
||||
msgid "res_config_contents"
|
||||
msgstr ""
|
||||
msgstr "res_config_contents"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,ressource_id:0
|
||||
|
@ -720,19 +729,19 @@ msgstr "資源ID"
|
|||
#. module: document
|
||||
#: selection:document.storage,type:0
|
||||
msgid "External file storage"
|
||||
msgstr ""
|
||||
msgstr "外部檔案儲存"
|
||||
|
||||
#. module: document
|
||||
#: view:board.board:0
|
||||
#: model:ir.actions.act_window,name:document.action_view_wall
|
||||
#: view:report.document.wall:0
|
||||
msgid "Wall of Shame"
|
||||
msgstr ""
|
||||
msgstr "排行榜"
|
||||
|
||||
#. module: document
|
||||
#: help:document.storage,path:0
|
||||
msgid "For file storage, the root path of the storage"
|
||||
msgstr ""
|
||||
msgstr "關於檔案儲存,儲存的根路徑"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_report_files_partner
|
||||
|
@ -747,17 +756,17 @@ msgstr "欄位"
|
|||
#. module: document
|
||||
#: model:ir.model,name:document.model_document_directory_dctx
|
||||
msgid "Directory Dynamic Context"
|
||||
msgstr ""
|
||||
msgstr "目錄動態內文"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,ressource_parent_type_id:0
|
||||
msgid "Parent Model"
|
||||
msgstr ""
|
||||
msgstr "母模型"
|
||||
|
||||
#. module: document
|
||||
#: view:report.document.user:0
|
||||
msgid "Files by users"
|
||||
msgstr "各用戶檔案"
|
||||
msgstr "各使用者檔案"
|
||||
|
||||
#. module: document
|
||||
#: field:report.document.file,month:0
|
||||
|
@ -771,12 +780,12 @@ msgstr "月"
|
|||
#. module: document
|
||||
#: view:report.document.user:0
|
||||
msgid "This Months Files"
|
||||
msgstr ""
|
||||
msgstr "當月檔案"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.ui.menu,name:document.menu_reporting
|
||||
msgid "Reporting"
|
||||
msgstr "報告"
|
||||
msgstr "報表"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,ressource_tree:0
|
||||
|
@ -792,29 +801,29 @@ msgstr "五月"
|
|||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.action_view_all_document_tree1
|
||||
msgid "All Users files"
|
||||
msgstr "所有用戶檔案"
|
||||
msgstr "所有使用者檔案"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_report_document_wall
|
||||
msgid "Users that did not inserted documents since one month"
|
||||
msgstr ""
|
||||
msgstr "使用者已經一個月未插入文件"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.act_window,help:document.action_document_file_form
|
||||
msgid ""
|
||||
"The Documents repository gives you access to all attachments, such as mails, "
|
||||
"project documents, invoices etc."
|
||||
msgstr ""
|
||||
msgstr "文件儲存室讓您可以存取所有附件,如電郵、專案文件、商業發票等"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "For each entry here, virtual files will appear in this folder."
|
||||
msgstr ""
|
||||
msgstr "對於每一輸入,虛擬檔案在檔案夾中出現"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_ir_attachment
|
||||
msgid "ir.attachment"
|
||||
msgstr ""
|
||||
msgstr "ir.attachment"
|
||||
|
||||
#. module: document
|
||||
#: view:board.board:0
|
||||
|
@ -834,7 +843,7 @@ msgstr "各伙伴檔案"
|
|||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Indexed Content - experimental"
|
||||
msgstr ""
|
||||
msgstr "已索引內容 - 實驗性質"
|
||||
|
||||
#. module: document
|
||||
#: view:report.document.user:0
|
||||
|
@ -844,12 +853,12 @@ msgstr "本月"
|
|||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Notes"
|
||||
msgstr "注解"
|
||||
msgstr "備註"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_document_configuration
|
||||
msgid "Directory Configuration"
|
||||
msgstr ""
|
||||
msgstr "目錄組態"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory,type:0
|
||||
|
@ -860,6 +869,8 @@ msgid ""
|
|||
"resources automatically possess sub-directories for each of resource types "
|
||||
"defined in the parent directory."
|
||||
msgstr ""
|
||||
"每一個目錄可以是靜態或連接於另一個資源。一個靜態的目錄與其作業系統,是一個典型的目錄可以包含一組檔案。這個目錄連接於系統資源,在母目錄中按資源別自動持有次"
|
||||
"目錄。"
|
||||
|
||||
#. module: document
|
||||
#: selection:report.document.user,month:0
|
||||
|
@ -871,14 +882,14 @@ msgstr "二月"
|
|||
#: model:ir.actions.act_window,name:document.open_board_document_manager1
|
||||
#: model:ir.ui.menu,name:document.menu_reports_document_manager1
|
||||
msgid "Statistics by User"
|
||||
msgstr "各用戶統計"
|
||||
msgstr "各使用者統計"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory.dctx,field:0
|
||||
msgid ""
|
||||
"The name of the field. Note that the prefix \"dctx_\" will be prepended to "
|
||||
"what is typed here."
|
||||
msgstr ""
|
||||
msgstr "這個欄位名稱的字首包含\"dctx_\" 將會根據這裡的輸入預先決定。"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,name:0
|
||||
|
@ -889,7 +900,7 @@ msgstr "名稱"
|
|||
#. module: document
|
||||
#: sql_constraint:document.storage:0
|
||||
msgid "The storage path must be unique!"
|
||||
msgstr ""
|
||||
msgstr "儲存路徑不能重複!"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
|
@ -899,7 +910,7 @@ msgstr "欄位"
|
|||
#. module: document
|
||||
#: help:document.storage,readonly:0
|
||||
msgid "If set, media is for reading only"
|
||||
msgstr ""
|
||||
msgstr "如果設定,媒體只能唯讀。"
|
||||
|
||||
#. module: document
|
||||
#: selection:report.document.user,month:0
|
||||
|
@ -918,21 +929,21 @@ msgstr "檔案數"
|
|||
#: code:addons/document/document.py:209
|
||||
#, python-format
|
||||
msgid "(copy)"
|
||||
msgstr ""
|
||||
msgstr "(copy)"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid ""
|
||||
"Only members of these groups will have access to this directory and its "
|
||||
"files."
|
||||
msgstr ""
|
||||
msgstr "只有這個群組中的數字,才能存取這個目錄及其檔案。"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid ""
|
||||
"These groups, however, do NOT apply to children directories, which must "
|
||||
"define their own groups."
|
||||
msgstr ""
|
||||
msgstr "雖然這些模組沒有子目錄,但是還是要定義它們自己的群組。"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content.type,mimetype:0
|
||||
|
@ -942,7 +953,7 @@ msgstr "Mime 類型"
|
|||
#. module: document
|
||||
#: view:report.document.user:0
|
||||
msgid "All Months Files"
|
||||
msgstr ""
|
||||
msgstr "所有月份文件"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,name:0
|
||||
|
@ -959,12 +970,12 @@ msgstr "檔案名不能重覆!"
|
|||
#. module: document
|
||||
#: selection:document.storage,type:0
|
||||
msgid "Internal File storage"
|
||||
msgstr ""
|
||||
msgstr "內部文件儲存"
|
||||
|
||||
#. module: document
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "Directory must have a parent or a storage"
|
||||
msgstr ""
|
||||
msgstr "目錄必須要有母目錄或儲存"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.action_document_directory_tree
|
||||
|
@ -1030,3 +1041,6 @@ msgstr "文件類型"
|
|||
|
||||
#~ msgid "Product"
|
||||
#~ msgstr "產品"
|
||||
|
||||
#~ msgid "Attached To"
|
||||
#~ msgstr "附屬於"
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-08-29 09:46+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Chinese (Traditional) <zh_TW@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-08-30 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.model,name:document_ftp.model_document_ftp_configuration
|
||||
msgid "Auto Directory Configuration"
|
||||
msgstr "自動目錄配置"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid ""
|
||||
"Indicate the network address on which your OpenERP server should be "
|
||||
"reachable for end-users. This depends on your network topology and "
|
||||
"configuration, and will only affect the links displayed to the users. The "
|
||||
"format is HOST:PORT and the default host (localhost) is only suitable for "
|
||||
"access from the server machine itself.."
|
||||
msgstr ""
|
||||
"說明OpenERP的服務器上的網絡地址應該為最終用戶訪問。這取決於您的網絡拓撲和配置,而且只會影響顯示給用戶的鏈接。的格式為HOST:PORT和預設的主機"
|
||||
"(localhost)的訪問從服務器本身只適合.."
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.url,name:document_ftp.action_document_browse
|
||||
msgid "Browse Files"
|
||||
msgstr "瀏覽檔案"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.configuration,config_logo:0
|
||||
msgid "Image"
|
||||
msgstr "圖像"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.configuration,host:0
|
||||
msgid "Address"
|
||||
msgstr "地址"
|
||||
|
||||
#. module: document_ftp
|
||||
#: field:document.ftp.browse,url:0
|
||||
msgid "FTP Server"
|
||||
msgstr "FTP 伺服器"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory
|
||||
msgid "FTP Server Configuration"
|
||||
msgstr "FTP Server Configuration"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "_Browse"
|
||||
msgstr "瀏覽(_B)"
|
||||
|
||||
#. module: document_ftp
|
||||
#: help:document.ftp.configuration,host:0
|
||||
msgid ""
|
||||
"Server address or IP and port to which users should connect to for DMS access"
|
||||
msgstr "服務器地址或IP地址和端口,用戶應該連接到DMS訪問"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.ui.menu,name:document_ftp.menu_document_browse
|
||||
msgid "Shared Repository (FTP)"
|
||||
msgstr "供享的儲存庫"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "_Cancel"
|
||||
msgstr "取消(_C)"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "Configure FTP Server"
|
||||
msgstr "設置FTP 伺服器"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "title"
|
||||
msgstr "標題"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.model,name:document_ftp.model_document_ftp_browse
|
||||
msgid "Document FTP Browse"
|
||||
msgstr "瀏覽FTP文件"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "Knowledge Application Configuration"
|
||||
msgstr "知識應用配置"
|
||||
|
||||
#. module: document_ftp
|
||||
#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
|
||||
msgid "Document Browse"
|
||||
msgstr "文件瀏覽"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.browse:0
|
||||
msgid "Browse Document"
|
||||
msgstr "瀏覽文件"
|
||||
|
||||
#. module: document_ftp
|
||||
#: view:document.ftp.configuration:0
|
||||
msgid "res_config_contents"
|
||||
msgstr "res_config_contents"
|
|
@ -7,165 +7,165 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
|
||||
"PO-Revision-Date: 2012-08-13 12:08+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"PO-Revision-Date: 2012-08-30 09:36+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:43+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.type,template:0
|
||||
msgid "Document page Template"
|
||||
msgstr ""
|
||||
msgstr "文檔頁面範本"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.action_wiki
|
||||
#: model:ir.ui.menu,name:document_page.menu_action_wiki_wiki
|
||||
msgid "Document Pages"
|
||||
msgstr ""
|
||||
msgstr "文檔頁面"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.type,method:0
|
||||
msgid "Display Method"
|
||||
msgstr ""
|
||||
msgstr "展示方法"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0 field:document.page,create_uid:0
|
||||
msgid "Author"
|
||||
msgstr ""
|
||||
msgstr "作者"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.action_view_wiki_wiki_page_open
|
||||
#: view:document.page.page.open:0
|
||||
msgid "Open Page"
|
||||
msgstr ""
|
||||
msgstr "開啓葉面"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,menu_id:0
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
msgstr "選單"
|
||||
|
||||
#. module: document_page
|
||||
#: help:document.page,type:0
|
||||
msgid "Indicates that this pages have a table of contents or not"
|
||||
msgstr ""
|
||||
msgstr "表示,這個頁面至少有一個表的內容"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.model,name:document_page.model_wiki_wiki_history view:document.page.history:0
|
||||
msgid "Document page History"
|
||||
msgstr ""
|
||||
msgstr "頁面歷史文件"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,minor_edit:0
|
||||
msgid "Minor edit"
|
||||
msgstr ""
|
||||
msgstr "小編輯"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0 field:document.page,content:0
|
||||
msgid "Content"
|
||||
msgstr ""
|
||||
msgstr "內容"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,child_ids:0
|
||||
msgid "Child Pages"
|
||||
msgstr ""
|
||||
msgstr "子頁面"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,parent_id:0
|
||||
msgid "Parent Page"
|
||||
msgstr ""
|
||||
msgstr "上級頁面"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0 field:document.page,write_uid:0
|
||||
msgid "Last Contributor"
|
||||
msgstr ""
|
||||
msgstr "最後的貢獻者"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.create.menu,menu_parent_id:0
|
||||
msgid "Parent Menu"
|
||||
msgstr ""
|
||||
msgstr "上級選單"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,name:0
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
msgstr "標題"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.model,name:document_page.model_wiki_create_menu
|
||||
msgid "Wizard Create Menu"
|
||||
msgstr ""
|
||||
msgstr "嚮導創建選單"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,history_id:0
|
||||
msgid "History Lines"
|
||||
msgstr ""
|
||||
msgstr "歷史記錄"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0
|
||||
msgid "Page Content"
|
||||
msgstr ""
|
||||
msgstr "頁面內容"
|
||||
|
||||
#. module: document_page
|
||||
#: code:addons/document_page/document_page.py:237 code:addons/wiki/wizard/wiki_make_index.py:52
|
||||
#, python-format
|
||||
msgid "Warning !"
|
||||
msgstr ""
|
||||
msgstr "警告!"
|
||||
|
||||
#. module: document_page
|
||||
#: code:addons/document_page/document_page.py:237
|
||||
#, python-format
|
||||
msgid "There are no changes in revisions"
|
||||
msgstr ""
|
||||
msgstr "有沒有變化修訂"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.create.menu,menu_name:0
|
||||
msgid "Menu Name"
|
||||
msgstr ""
|
||||
msgstr "選單名稱"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.type,notes:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
msgstr "描述"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,review:0
|
||||
msgid "Needs Review"
|
||||
msgstr ""
|
||||
msgstr "需要回顧"
|
||||
|
||||
#. module: document_page
|
||||
#: help:document.page,review:0
|
||||
msgid ""
|
||||
"Indicates that this page should be reviewed, raising the attention of other "
|
||||
"contributors"
|
||||
msgstr ""
|
||||
msgstr "表示這個頁面應該檢討,提高其他出資人的注意"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.create.menu:0 view:document.page.make.index:0
|
||||
msgid "Menu Information"
|
||||
msgstr ""
|
||||
msgstr "選單資訊"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.act_wiki_wiki_history
|
||||
msgid "Page History"
|
||||
msgstr ""
|
||||
msgstr "頁面歷史記錄"
|
||||
|
||||
#. module: document_page
|
||||
#: selection:document.page.type,method:0
|
||||
msgid "Tree"
|
||||
msgstr ""
|
||||
msgstr "目錄樹"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.type:0
|
||||
msgid "Page Template"
|
||||
msgstr ""
|
||||
msgstr "頁面模版"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,tags:0
|
||||
msgid "Keywords"
|
||||
msgstr ""
|
||||
msgstr "關鍵字"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,help:document_page.action_wiki
|
||||
|
@ -175,173 +175,175 @@ msgid ""
|
|||
"(CRM, Sales, etc.). You can use keywords to ease access to your wiki pages. "
|
||||
"There is a basic wiki editing for text format."
|
||||
msgstr ""
|
||||
"Wiki頁面,您可以與您的同事的想法和問題。您可以創建一個新的文件,可以連接到一個或多個應用程序(客戶關係管理(CRM),銷售等)。您可以使用關鍵字,以便"
|
||||
"於訪問到您的wiki頁面。有一個基本的的維基編輯為文本格式。"
|
||||
|
||||
#. module: document_page
|
||||
#: code:addons/document_page/wizard/document_page_show_diff.py:54
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
msgstr "警告"
|
||||
|
||||
#. module: document_page
|
||||
#: help:document.page.type,home:0
|
||||
msgid "Required to select home page if display method is Home Page"
|
||||
msgstr ""
|
||||
msgstr "在首頁,需要選擇首頁顯示的方法"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.history,create_date:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
msgstr "日期"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.make.index:0
|
||||
msgid "Want to create a Index on Selected Pages ? "
|
||||
msgstr ""
|
||||
msgstr "要選定的頁面上創建一個索引呢? "
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff
|
||||
#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values
|
||||
#: view:wizard.document.page.history.show_diff:0
|
||||
msgid "Difference"
|
||||
msgstr ""
|
||||
msgstr "差異"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.type,page_ids:0
|
||||
msgid "Pages"
|
||||
msgstr ""
|
||||
msgstr "頁面"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.type:0
|
||||
msgid "Group Description"
|
||||
msgstr ""
|
||||
msgstr "群組敘述"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.page.open:0
|
||||
msgid "Want to open a wiki page? "
|
||||
msgstr ""
|
||||
msgstr "要打開一個wiki頁面? "
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.history,content:0
|
||||
msgid "Text area"
|
||||
msgstr ""
|
||||
msgstr "文本區域"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0
|
||||
msgid "Meta Information"
|
||||
msgstr ""
|
||||
msgstr "中繼資訊"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,create_date:0
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
msgstr "建立於"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.type:0 view:wizard.document.page.history.show_diff:0
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
msgstr "備註"
|
||||
|
||||
#. module: document_page
|
||||
#: selection:document.page.type,method:0
|
||||
msgid "List"
|
||||
msgstr ""
|
||||
msgstr "列表"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,summary:0 field:document.page.history,edit_summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
msgstr "摘要"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.groups,create_date:0
|
||||
msgid "Created Date"
|
||||
msgstr ""
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.action_history
|
||||
msgid "All Page Histories"
|
||||
msgstr ""
|
||||
msgstr "所有頁面的歷史記錄"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.model,name:document_page.model_wiki_wiki
|
||||
msgid "document.page"
|
||||
msgstr ""
|
||||
msgstr "document.page"
|
||||
|
||||
#. module: document_page
|
||||
#: help:document.page.type,method:0
|
||||
msgid "Define the default behaviour of the menu created on this group"
|
||||
msgstr ""
|
||||
msgstr "本組創建的選單中定義默認行為"
|
||||
|
||||
#. module: document_page
|
||||
#: view:wizard.document.page.history.show_diff:0
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "結束"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.model,name:document_page.model_wizard_wiki_history_show_diff
|
||||
msgid "wizard.document.page.history.show_diff"
|
||||
msgstr ""
|
||||
msgstr "wizard.document.page.history.show_diff"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.history,wiki_id:0
|
||||
msgid "Wiki Id"
|
||||
msgstr ""
|
||||
msgstr "維基標識"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.type,home:0 selection:document.page.type,method:0
|
||||
msgid "Home Page"
|
||||
msgstr ""
|
||||
msgstr "首頁"
|
||||
|
||||
#. module: document_page
|
||||
#: help:document.page,parent_id:0
|
||||
msgid "Allows you to link with the other page with in the current topic"
|
||||
msgstr ""
|
||||
msgstr "允許您與其他頁的鏈接,在當前主題"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0
|
||||
msgid "Modification Information"
|
||||
msgstr ""
|
||||
msgstr "修改信息"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.ui.menu,name:document_page.menu_wiki_configuration view:document.page:0
|
||||
msgid "Wiki"
|
||||
msgstr ""
|
||||
msgstr "維基 (Wiki)"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page,write_date:0
|
||||
msgid "Modification Date"
|
||||
msgstr ""
|
||||
msgstr "修改日期"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.type:0
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
msgstr "設置"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.action_view_wiki_make_index
|
||||
#: model:ir.actions.act_window,name:document_page.action_view_wiki_make_index_values
|
||||
#: model:ir.model,name:document_page.model_wiki_make_index view:document.page.make.index:0
|
||||
msgid "Create Index"
|
||||
msgstr ""
|
||||
msgstr "創建索引"
|
||||
|
||||
#. module: document_page
|
||||
#: code:addons/document_page/wizard/document_page_show_diff.py:54
|
||||
#, python-format
|
||||
msgid "You need to select minimum 1 or maximum 2 history revision!"
|
||||
msgstr ""
|
||||
msgstr "您需要選擇最小或最大歷史修訂!"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
msgstr "分類方式..."
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu
|
||||
#: view:document.page.create.menu:0 view:document.page.type:0 view:document.page.make.index:0
|
||||
msgid "Create Menu"
|
||||
msgstr ""
|
||||
msgstr "建立選單"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.history,minor_edit:0
|
||||
msgid "This is a major edit ?"
|
||||
msgstr ""
|
||||
msgstr "這是一個主要的編輯嗎?"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.action_wiki_groups
|
||||
|
@ -349,56 +351,56 @@ msgstr ""
|
|||
#: model:ir.model,name:document_page.model_wiki_groups
|
||||
#: model:ir.ui.menu,name:document_page.menu_action_wiki_groups view:document.page.type:0
|
||||
msgid "Document Types"
|
||||
msgstr ""
|
||||
msgstr "文件類型"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0
|
||||
msgid "Topic"
|
||||
msgstr ""
|
||||
msgstr "主題"
|
||||
|
||||
#. module: document_page
|
||||
#: field:document.page.history,write_uid:0
|
||||
msgid "Modify By"
|
||||
msgstr ""
|
||||
msgstr "修改者"
|
||||
|
||||
#. module: document_page
|
||||
#: code:addons/document_page/web/widgets/wikimarkup/__init__.py:1981
|
||||
#: field:document.page,type:0
|
||||
#, python-format
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
msgstr "類型"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.type:0 view:document.page.page.open:0
|
||||
msgid "Open Document Page"
|
||||
msgstr ""
|
||||
msgstr "開啓文件"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.model,name:document_page.model_wiki_wiki_page_open
|
||||
msgid "wiz open page"
|
||||
msgstr ""
|
||||
msgstr "WIZ打開的頁面"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page.create.menu:0 view:document.page.make.index:0 view:document.page.page.open:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "刪除"
|
||||
|
||||
#. module: document_page
|
||||
#: field:wizard.document.page.history.show_diff,file_path:0
|
||||
msgid "Diff"
|
||||
msgstr ""
|
||||
msgstr "差異"
|
||||
|
||||
#. module: document_page
|
||||
#: view:document.page:0
|
||||
msgid "Need Review"
|
||||
msgstr ""
|
||||
msgstr "需要回顧"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.action_wiki_review
|
||||
msgid "Pages Waiting Review"
|
||||
msgstr ""
|
||||
msgstr "頁面等待審查"
|
||||
|
||||
#. module: document_page
|
||||
#: model:ir.actions.act_window,name:document_page.act_wiki_group_open
|
||||
msgid "Search Page"
|
||||
msgstr ""
|
||||
msgstr "搜尋頁面"
|
||||
|
|
|
@ -0,0 +1,196 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-08-30 11:51+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Cenoq Corp.\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,create_date:0
|
||||
#: field:document.webdav.file.property,create_date:0
|
||||
msgid "Date Created"
|
||||
msgstr "建立日期"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_document_props
|
||||
msgid "Documents"
|
||||
msgstr "文件"
|
||||
|
||||
#. module: document_webdav
|
||||
#: constraint:document.directory:0
|
||||
msgid "Error! You can not create recursive Directories."
|
||||
msgstr "錯誤! 您不能建立循環的目錄"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Search Document properties"
|
||||
msgstr "搜尋文件目錄"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: field:document.webdav.dir.property,namespace:0
|
||||
#: view:document.webdav.file.property:0
|
||||
#: field:document.webdav.file.property,namespace:0
|
||||
msgid "Namespace"
|
||||
msgstr "Namespace"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.directory,dav_prop_ids:0
|
||||
msgid "DAV properties"
|
||||
msgstr "DAV 內容"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.model,name:document_webdav.model_document_webdav_file_property
|
||||
msgid "document.webdav.file.property"
|
||||
msgstr "document.webdav.file.property"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Group By..."
|
||||
msgstr "群組...."
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "These properties will be added to WebDAV requests"
|
||||
msgstr "這些內容將被加到 WebDAV 請求"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.actions.act_window,name:document_webdav.action_file_props_form
|
||||
msgid "DAV Properties for Documents"
|
||||
msgstr "文件的DAV 內容"
|
||||
|
||||
#. module: document_webdav
|
||||
#: code:addons/document_webdav/webdav.py:37
|
||||
#, python-format
|
||||
msgid "PyWebDAV Import Error!"
|
||||
msgstr "PyWebDAV 匯入錯誤!"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.file.property:0
|
||||
#: field:document.webdav.file.property,file_id:0
|
||||
msgid "Document"
|
||||
msgstr "文件"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_folder_props
|
||||
msgid "Folders"
|
||||
msgstr "檔案夾"
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "Directory cannot be parent of itself!"
|
||||
msgstr "目錄不能成為自己的母目錄!"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "Dynamic context"
|
||||
msgstr "動態背景"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
msgid "WebDAV properties"
|
||||
msgstr "WebDAV 內容"
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "The directory name must be unique !"
|
||||
msgstr "目錄名不能重覆!"
|
||||
|
||||
#. module: document_webdav
|
||||
#: code:addons/document_webdav/webdav.py:37
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please install PyWebDAV from "
|
||||
"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-"
|
||||
"0.9.4.tar.gz&can=2&q=/"
|
||||
msgstr ""
|
||||
"從 http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-"
|
||||
"0.9.4.tar.gz&can=2&q=/,請安裝 PyWebDAV"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form
|
||||
msgid "DAV Properties for Folders"
|
||||
msgstr "DAV 檔案夾內容"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.directory:0
|
||||
#: view:document.webdav.dir.property:0
|
||||
#: view:document.webdav.file.property:0
|
||||
msgid "Properties"
|
||||
msgstr "內容"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,name:0
|
||||
#: field:document.webdav.file.property,name:0
|
||||
msgid "Name"
|
||||
msgstr "名稱"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.model,name:document_webdav.model_document_webdav_dir_property
|
||||
msgid "document.webdav.dir.property"
|
||||
msgstr "document.webdav.dir.property"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,value:0
|
||||
#: field:document.webdav.file.property,value:0
|
||||
msgid "Value"
|
||||
msgstr "價值"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,dir_id:0
|
||||
#: model:ir.model,name:document_webdav.model_document_directory
|
||||
msgid "Directory"
|
||||
msgstr "目錄"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,write_uid:0
|
||||
#: field:document.webdav.file.property,write_uid:0
|
||||
msgid "Last Modification User"
|
||||
msgstr "最後修改使用者"
|
||||
|
||||
#. module: document_webdav
|
||||
#: view:document.webdav.dir.property:0
|
||||
msgid "Dir"
|
||||
msgstr "路徑"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,write_date:0
|
||||
#: field:document.webdav.file.property,write_date:0
|
||||
msgid "Date Modified"
|
||||
msgstr "修改日期"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,create_uid:0
|
||||
#: field:document.webdav.file.property,create_uid:0
|
||||
msgid "Creator"
|
||||
msgstr "建立者"
|
||||
|
||||
#. module: document_webdav
|
||||
#: model:ir.ui.menu,name:document_webdav.menu_properties
|
||||
msgid "DAV Properties"
|
||||
msgstr "DAV 內容"
|
||||
|
||||
#. module: document_webdav
|
||||
#: sql_constraint:document.directory:0
|
||||
msgid "Directory must have a parent or a storage"
|
||||
msgstr "目錄必須要有母目錄或儲存室"
|
||||
|
||||
#. module: document_webdav
|
||||
#: field:document.webdav.dir.property,do_subst:0
|
||||
#: field:document.webdav.file.property,do_subst:0
|
||||
msgid "Substitute"
|
||||
msgstr "替代項目"
|
|
@ -0,0 +1,386 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
|
||||
"PO-Revision-Date: 2012-08-30 11:51+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Cenoq Corp.\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:res.currency:0
|
||||
msgid "The currency code must be unique per company!"
|
||||
msgstr "每個公司的貨幣代碼必須唯一"
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_partner_address
|
||||
msgid "Partner Addresses"
|
||||
msgstr "業務夥伴地址"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:res.company:0
|
||||
msgid "The company name must be unique !"
|
||||
msgstr "公司名稱必須唯一!"
|
||||
|
||||
#. module: edi
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr "錯誤,您不能建立循環引用的會員"
|
||||
|
||||
#. module: edi
|
||||
#: field:edi.document,name:0
|
||||
msgid "EDI token"
|
||||
msgstr "EDI權杖"
|
||||
|
||||
#. module: edi
|
||||
#: help:edi.document,name:0
|
||||
msgid "Unique identifier for retrieving an EDI document."
|
||||
msgstr "接收EDI文件的唯一標識符"
|
||||
|
||||
#. module: edi
|
||||
#: constraint:res.company:0
|
||||
msgid "Error! You can not create recursive companies."
|
||||
msgstr "錯誤!您不能建立循環引用的公司."
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "公司"
|
||||
|
||||
#. module: edi
|
||||
#: sql_constraint:edi.document:0
|
||||
msgid "EDI Tokens must be unique!"
|
||||
msgstr "EDI權杖必須唯一"
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_currency
|
||||
msgid "Currency"
|
||||
msgstr "貨幣"
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:153
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The document you are trying to import requires the OpenERP `%s` application. "
|
||||
"You can install it by connecting as the administrator and opening the "
|
||||
"configuration assistant."
|
||||
msgstr "你要匯入的文件需要OpenERP的 %s 模組。你可以用管理員使用者安裝並打開配置精靈。"
|
||||
|
||||
#. module: edi
|
||||
#: help:edi.document,document:0
|
||||
msgid "EDI document content"
|
||||
msgstr "EDI文件內容"
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_edi_document
|
||||
msgid "EDI Document"
|
||||
msgstr "EDI文件"
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:48
|
||||
#, python-format
|
||||
msgid "'%s' is an invalid external ID"
|
||||
msgstr "%s是個無效的外部ID"
|
||||
|
||||
#. module: edi
|
||||
#: model:ir.model,name:edi.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "業務夥伴"
|
||||
|
||||
#. module: edi
|
||||
#: code:addons/edi/models/edi.py:152
|
||||
#, python-format
|
||||
msgid "Missing Application"
|
||||
msgstr "不存在此功能"
|
||||
|
||||
#. module: edi
|
||||
#: field:edi.document,document:0
|
||||
msgid "Document"
|
||||
msgstr "文件"
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:23
|
||||
msgid "View/Print"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:28
|
||||
msgid "Import this document"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:33
|
||||
msgid "Import it into an existing OpenERP instance"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:36
|
||||
msgid "OpenERP instance address:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:39
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:44
|
||||
msgid "Import it into a new OpenERP Online instance"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:47
|
||||
msgid "Create my new OpenERP instance"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:52
|
||||
msgid "Import into another application"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:54
|
||||
msgid ""
|
||||
"OpenERP's Electronic Data Interchange documents are based on a generic and "
|
||||
"language\n"
|
||||
" independent"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:56
|
||||
msgid "JSON"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:56
|
||||
msgid ""
|
||||
"serialization of the document's attribute.\n"
|
||||
" It is usually very quick and straightforward to "
|
||||
"create a small plug-in for your preferred\n"
|
||||
" application that will be capable of importing "
|
||||
"any OpenERP EDI document.\n"
|
||||
" You can find out more details about how to do "
|
||||
"this and what the content of OpenERP EDI documents\n"
|
||||
" is like in the"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:60
|
||||
msgid "OpenERP documentation"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:61
|
||||
msgid "To get started immediately,"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:62
|
||||
msgid "see is all it takes to use this EDI document in Python"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:70
|
||||
msgid "You can download the raw EDI document here:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:73
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:87
|
||||
msgid "Powered by"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:87
|
||||
msgid "OpenERP"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:34
|
||||
msgid "Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:37
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:38
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:41
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:39
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:40
|
||||
msgid "Your Reference"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:50
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:57
|
||||
msgid "Product Description"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:51
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:58
|
||||
msgid "Quantity"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:52
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:59
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:53
|
||||
msgid "Discount"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:54
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:61
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:72
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:81
|
||||
msgid "Net Total:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:83
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:92
|
||||
msgid "Taxes:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:94
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:103
|
||||
msgid "Total:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:106
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:107
|
||||
msgid "Base Amount"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:108
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:121
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:113
|
||||
msgid "Notes:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:129
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:121
|
||||
msgid "Pay Online"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:133
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:125
|
||||
msgid "Paypal"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:135
|
||||
msgid ""
|
||||
"You may directly pay this invoice online via Paypal's secure payment gateway:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:145
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:137
|
||||
msgid "Bank Wire Transfer"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:147
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:139
|
||||
msgid "Please transfer"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:148
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:140
|
||||
msgid "to"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:149
|
||||
msgid ""
|
||||
"(postal address on the invoice header)\n"
|
||||
" using one of the following bank accounts. Be sure to "
|
||||
"mention the invoice\n"
|
||||
" reference"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:151
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:143
|
||||
msgid "on the transfer:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:36
|
||||
msgid "Order"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:42
|
||||
msgid "Salesman"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:43
|
||||
msgid "Payment terms"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:60
|
||||
msgid "Discount(%)"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:127
|
||||
msgid ""
|
||||
"You may directly pay this order online via Paypal's secure payment gateway:"
|
||||
msgstr ""
|
||||
|
||||
#. openerp-web
|
||||
#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:141
|
||||
msgid ""
|
||||
"(postal address on the order header)\n"
|
||||
" using one of the following bank accounts. Be sure to "
|
||||
"mention the document\n"
|
||||
" reference"
|
||||
msgstr ""
|
|
@ -28,6 +28,8 @@ from osv import osv
|
|||
from osv import fields
|
||||
import tools
|
||||
from tools.translate import _
|
||||
from tools.html_sanitize import html_sanitize
|
||||
from tools import html2plaintext
|
||||
from urllib import quote as quote
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -134,7 +136,7 @@ class email_template(osv.osv):
|
|||
"This is useful for CRM leads for example"),
|
||||
|
||||
# Overridden mail.message.common fields for technical reasons:
|
||||
'model': fields.related('model_id','model', type='char', string='Related Document Model',
|
||||
'model': fields.related('model_id', 'model', type='char', string='Related Document Model',
|
||||
size=128, select=True, store=True, readonly=True),
|
||||
# we need a separate m2m table to avoid ID collisions with the original mail.message entries
|
||||
#'attachment_ids': fields.many2many('ir.attachment', 'email_template_attachment_rel', 'email_template_id',
|
||||
|
@ -143,7 +145,7 @@ class email_template(osv.osv):
|
|||
# "emails created from this template"),
|
||||
|
||||
# Overridden mail.message.common fields to make tooltips more appropriate:
|
||||
#'subject':fields.char('Subject', size=512, translate=True, help="Subject (placeholders may be used here)",),
|
||||
'subject': fields.char('Subject', translate=True, help="Subject (placeholders may be used here)",),
|
||||
'email_from': fields.char('From', size=128, help="Sender address (placeholders may be used here)"),
|
||||
'email_to': fields.char('To', size=256, help="Comma-separated recipient addresses (placeholders may be used here)"),
|
||||
'email_cc': fields.char('Cc', size=256, help="Carbon copy recipients (placeholders may be used here)"),
|
||||
|
@ -151,13 +153,7 @@ class email_template(osv.osv):
|
|||
'mail_server_id': fields.many2one('ir.mail_server', 'Outgoing Mail Server', readonly=False,
|
||||
help="Optional preferred server for outgoing mails. If not set, the highest "
|
||||
"priority one will be used."),
|
||||
#'body': fields.text('Text Contents', translate=True, help="Plaintext version of the message (placeholders may be used here)"),
|
||||
'body_html': fields.text('Rich-text Contents', translate=True, help="Rich-text/HTML version of the message (placeholders may be used here)"),
|
||||
#'message_id': fields.char('Message-Id', size=256, help="Message-ID SMTP header to use in outgoing messages based on this template. "
|
||||
# "Please note that this overrides the 'Resource Tracking' option, "
|
||||
# "so if you simply need to track replies to outgoing emails, enable "
|
||||
# "that option instead.\n"
|
||||
# "Placeholders must be used here, as this value always needs to be unique!"),
|
||||
|
||||
# Fake fields used to implement the placeholder assistant
|
||||
'model_object_field': fields.many2one('ir.model.fields', string="Field",
|
||||
|
@ -300,7 +296,6 @@ class email_template(osv.osv):
|
|||
context = {}
|
||||
values = {
|
||||
'subject': False,
|
||||
'body': False,
|
||||
'body_html': False,
|
||||
'email_from': False,
|
||||
'email_to': False,
|
||||
|
@ -314,7 +309,6 @@ class email_template(osv.osv):
|
|||
'attachment_ids': False,
|
||||
'message_id': False,
|
||||
'state': 'outgoing',
|
||||
'content_subtype': 'plain',
|
||||
}
|
||||
if not template_id:
|
||||
return values
|
||||
|
@ -322,15 +316,15 @@ class email_template(osv.osv):
|
|||
report_xml_pool = self.pool.get('ir.actions.report.xml')
|
||||
template = self.get_email_template(cr, uid, template_id, res_id, context)
|
||||
|
||||
for field in ['subject', 'body', 'body_html', 'email_from',
|
||||
'email_to', 'email_cc', 'reply_to',
|
||||
'message_id']:
|
||||
for field in ['subject', 'body_html', 'email_from',
|
||||
'email_to', 'email_cc', 'reply_to']:
|
||||
values[field] = self.render_template(cr, uid, getattr(template, field),
|
||||
template.model, res_id, context=context) \
|
||||
or False
|
||||
|
||||
if values['body_html']:
|
||||
values.update(content_subtype='html')
|
||||
values['body'] = html_sanitize(values['body_html'])
|
||||
values['body_text'] = html2plaintext(values['body_html'])
|
||||
|
||||
if template.user_signature:
|
||||
signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature
|
||||
|
|
|
@ -22,10 +22,7 @@
|
|||
<field name="reply_to"/>
|
||||
<field name="subject" required="1"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Body (Text)">
|
||||
<field name="body" colspan="4" width="250" height="250" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Body (Rich/HTML)">
|
||||
<page string="Body (HTML)">
|
||||
<field name="body_html" colspan="4" width="250" height="250" nolabel="1"/>
|
||||
<label string="Note: This is Raw HTML." colspan="4"/>
|
||||
</page>
|
||||
|
|
|
@ -0,0 +1,711 @@
|
|||
# Chinese (Traditional) translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-08-30 10:19+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: Cenoq Corp.\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,subtype:0
|
||||
#: field:email_template.preview,subtype:0
|
||||
msgid "Message type"
|
||||
msgstr "訊息類型"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,report_name:0
|
||||
#: field:email_template.preview,report_name:0
|
||||
msgid "Report Filename"
|
||||
msgstr "報表檔名"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "SMTP Server"
|
||||
msgstr "SMTP 伺服器"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Remove the sidebar button currently displayed on related documents"
|
||||
msgstr "移除側邊欄按鈕目前顯示在相關的文件"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,ref_ir_act_window:0
|
||||
#: field:email_template.preview,ref_ir_act_window:0
|
||||
msgid "Sidebar action"
|
||||
msgstr "側邊欄動作"
|
||||
|
||||
#. module: email_template
|
||||
#: view:mail.compose.message:0
|
||||
msgid "Save as a new template"
|
||||
msgstr "另存新的範本"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,subject:0
|
||||
#: help:email_template.preview,subject:0
|
||||
msgid "Subject (placeholders may be used here)"
|
||||
msgstr "主旨 (佔位符可在這裡使用)"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,email_cc:0
|
||||
#: help:email_template.preview,email_cc:0
|
||||
msgid "Carbon copy recipients (placeholders may be used here)"
|
||||
msgstr "副本收件人 (佔位符可在這裡使用)"
|
||||
|
||||
#. module: email_template
|
||||
#: selection:email.template,state:0
|
||||
#: selection:email_template.preview,state:0
|
||||
msgid "Received"
|
||||
msgstr "收到"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
#: field:email.template,ref_ir_value:0
|
||||
#: field:email_template.preview,ref_ir_value:0
|
||||
msgid "Sidebar Button"
|
||||
msgstr "側邊欄按鈕"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,report_name:0
|
||||
#: help:email_template.preview,report_name:0
|
||||
msgid ""
|
||||
"Name to use for the generated report file (may contain placeholders)\n"
|
||||
"The extension can be omitted and will then come from the report type."
|
||||
msgstr ""
|
||||
"產生的報表文件命名(可能包含佔位符)\n"
|
||||
"可以省略分機號碼然後將會成為報表型態."
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Attach existing files"
|
||||
msgstr "附加現有文件"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Email Content"
|
||||
msgstr "郵件內容"
|
||||
|
||||
#. module: email_template
|
||||
#: selection:email.template,state:0
|
||||
#: selection:email_template.preview,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "已取消"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,reply_to:0
|
||||
#: field:email_template.preview,reply_to:0
|
||||
msgid "Reply-To"
|
||||
msgstr "回覆給"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,auto_delete:0
|
||||
#: field:email_template.preview,auto_delete:0
|
||||
msgid "Auto Delete"
|
||||
msgstr "自動刪除"
|
||||
|
||||
#. module: email_template
|
||||
#: code:addons/email_template/email_template.py:218
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
|
||||
#. module: email_template
|
||||
#: model:ir.model,name:email_template.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "業務夥伴"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,subject:0
|
||||
#: field:email_template.preview,subject:0
|
||||
msgid "Subject"
|
||||
msgstr "主旨"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,email_from:0
|
||||
#: field:email_template.preview,email_from:0
|
||||
msgid "From"
|
||||
msgstr "從"
|
||||
|
||||
#. module: email_template
|
||||
#: field:mail.compose.message,template_id:0
|
||||
msgid "Template"
|
||||
msgstr "範本"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,partner_id:0
|
||||
#: field:email_template.preview,partner_id:0
|
||||
msgid "Related partner"
|
||||
msgstr "相關的合作夥伴"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,sub_model_object_field:0
|
||||
#: field:email_template.preview,sub_model_object_field:0
|
||||
msgid "Sub-field"
|
||||
msgstr "子欄位"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid ""
|
||||
"Display a button in the sidebar of related documents to open a composition "
|
||||
"wizard with this template"
|
||||
msgstr "相關文件螢幕上的精靈列按鈕可打開這範本之精靈"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,state:0
|
||||
#: field:email_template.preview,state:0
|
||||
msgid "State"
|
||||
msgstr "狀態"
|
||||
|
||||
#. module: email_template
|
||||
#: selection:email.template,state:0
|
||||
#: selection:email_template.preview,state:0
|
||||
msgid "Sent"
|
||||
msgstr "傳送"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,subtype:0
|
||||
#: help:email_template.preview,subtype:0
|
||||
msgid ""
|
||||
"Type of message, usually 'html' or 'plain', used to select plaintext or rich "
|
||||
"text contents accordingly"
|
||||
msgstr "訊息類型, 經常是'html'或'plain', 用於選擇 plaintext 或 rich text 做為內容"
|
||||
|
||||
#. module: email_template
|
||||
#: model:ir.model,name:email_template.model_mail_compose_message
|
||||
msgid "Email composition wizard"
|
||||
msgstr "電子郵件成分嚮導"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Dynamic Values Builder"
|
||||
msgstr "建立動態值"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,res_id:0
|
||||
msgid "Related Document ID"
|
||||
msgstr "相關文件 ID"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,lang:0
|
||||
#: field:email_template.preview,lang:0
|
||||
msgid "Language Selection"
|
||||
msgstr "語言選擇"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Advanced"
|
||||
msgstr "提出"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,email_to:0
|
||||
#: field:email_template.preview,email_to:0
|
||||
msgid "To"
|
||||
msgstr "給"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,model:0
|
||||
#: field:email_template.preview,model:0
|
||||
msgid "Related Document Model"
|
||||
msgstr "相關文檔模型"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,model_object_field:0
|
||||
#: help:email_template.preview,model_object_field:0
|
||||
msgid ""
|
||||
"Select target field from the related document model.\n"
|
||||
"If it is a relationship field you will be able to select a target field at "
|
||||
"the destination of the relationship."
|
||||
msgstr ""
|
||||
"從相關文件類型選擇目標\n"
|
||||
"若它是關聯欄位,您就可以在這關聯關係中,取得這欄位"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Preview Template"
|
||||
msgstr "預覽範本"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,null_value:0
|
||||
#: field:email_template.preview,null_value:0
|
||||
msgid "Null value"
|
||||
msgstr "空值"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,sub_object:0
|
||||
#: field:email_template.preview,sub_object:0
|
||||
msgid "Sub-model"
|
||||
msgstr "子類型"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,track_campaign_item:0
|
||||
#: help:email_template.preview,track_campaign_item:0
|
||||
msgid ""
|
||||
"Enable this is you wish to include a special tracking marker in outgoing "
|
||||
"emails so you can identify replies and link them back to the corresponding "
|
||||
"resource record. This is useful for CRM leads for example"
|
||||
msgstr "啟用,這是您希望包括一個特殊的追蹤電子郵件標記,這樣您就可以找出答覆並連接到相應的資源記錄。這是有用的,例如CRM的線索"
|
||||
|
||||
#. module: email_template
|
||||
#: field:mail.compose.message,use_template:0
|
||||
msgid "Use Template"
|
||||
msgstr "使用範本"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,attachment_ids:0
|
||||
#: field:email_template.preview,attachment_ids:0
|
||||
msgid "Files to attach"
|
||||
msgstr "附加的文件"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Options"
|
||||
msgstr "選項"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,model_id:0
|
||||
#: field:email_template.preview,model_id:0
|
||||
msgid "Related document model"
|
||||
msgstr "相關文件類型"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,email_from:0
|
||||
#: help:email_template.preview,email_from:0
|
||||
msgid "Sender address (placeholders may be used here)"
|
||||
msgstr "發信人地址(佔位符可以用在這)"
|
||||
|
||||
#. module: email_template
|
||||
#: help:res.partner,opt_out:0
|
||||
msgid ""
|
||||
"If checked, this partner will not receive any automated email notifications, "
|
||||
"such as the availability of invoices."
|
||||
msgstr "若勾選, 這個合作夥伴將不會收到任何自動郵件回復, 例如有效發票"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Note: This is Raw HTML."
|
||||
msgstr "備註: 這是Raw HTML."
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Group by..."
|
||||
msgstr "分類方式..."
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,user_signature:0
|
||||
#: field:email_template.preview,user_signature:0
|
||||
msgid "Add Signature"
|
||||
msgstr "加入簽名"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,body_text:0
|
||||
#: help:email_template.preview,body_text:0
|
||||
msgid "Plaintext version of the message (placeholders may be used here)"
|
||||
msgstr "Plaintext 消息版本(佔位符可以用在這)"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,original:0
|
||||
#: help:email_template.preview,original:0
|
||||
msgid "Original version of the message, as it was sent on the network"
|
||||
msgstr "消息原始版本, 因為它是在網路上發送"
|
||||
|
||||
#. module: email_template
|
||||
#: code:addons/email_template/email_template.py:230
|
||||
#, python-format
|
||||
msgid "(copy)"
|
||||
msgstr "(副本)"
|
||||
|
||||
#. module: email_template
|
||||
#: selection:email.template,state:0
|
||||
#: selection:email_template.preview,state:0
|
||||
msgid "Outgoing"
|
||||
msgstr "外送"
|
||||
|
||||
#. module: email_template
|
||||
#: view:mail.compose.message:0
|
||||
msgid "Use a message template"
|
||||
msgstr "使用訊息範本"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,user_signature:0
|
||||
#: help:email_template.preview,user_signature:0
|
||||
msgid ""
|
||||
"If checked, the user's signature will be appended to the text version of the "
|
||||
"message"
|
||||
msgstr "若勾選, 使用者的簽名將附加到郵件的文字版本"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
#: view:email_template.preview:0
|
||||
msgid "Body (Rich/HTML)"
|
||||
msgstr "內文 (Rich/HTML)"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,sub_object:0
|
||||
#: help:email_template.preview,sub_object:0
|
||||
msgid ""
|
||||
"When a relationship field is selected as first field, this field shows the "
|
||||
"document model the relationship goes to."
|
||||
msgstr ""
|
||||
"當這相關欄位是選為第一欄位, this field shows the document model the relationship goes to."
|
||||
|
||||
#. module: email_template
|
||||
#: model:ir.model,name:email_template.model_email_template
|
||||
msgid "Email Templates"
|
||||
msgstr "郵件範本"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,date:0
|
||||
#: field:email_template.preview,date:0
|
||||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
#. module: email_template
|
||||
#: model:ir.actions.act_window,name:email_template.wizard_email_template_preview
|
||||
msgid "Template Preview"
|
||||
msgstr "預覽範本"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,message_id:0
|
||||
#: field:email_template.preview,message_id:0
|
||||
msgid "Message-Id"
|
||||
msgstr "訊息-Id"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Add sidebar button"
|
||||
msgstr "加入側邊欄按鈕"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
#: view:email_template.preview:0
|
||||
msgid "Body (Text)"
|
||||
msgstr "內文 (Text)"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Advanced Options"
|
||||
msgstr "進階選項"
|
||||
|
||||
#. module: email_template
|
||||
#: code:addons/email_template/email_template.py:183
|
||||
#, python-format
|
||||
msgid "Send Mail (%s)"
|
||||
msgstr "傳送郵件 (%s)"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,body_html:0
|
||||
#: field:email_template.preview,body_html:0
|
||||
msgid "Rich-text Contents"
|
||||
msgstr "富文本內容"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,copyvalue:0
|
||||
#: field:email_template.preview,copyvalue:0
|
||||
msgid "Expression"
|
||||
msgstr "表達"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,original:0
|
||||
#: field:email_template.preview,original:0
|
||||
msgid "Original"
|
||||
msgstr "原作"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Addresses"
|
||||
msgstr "地址"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,copyvalue:0
|
||||
#: help:email_template.preview,copyvalue:0
|
||||
msgid ""
|
||||
"Final placeholder expression, to be copy-pasted in the desired template "
|
||||
"field."
|
||||
msgstr "最後的模板欄位,找到要複製-貼上的區塊"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Attachments"
|
||||
msgstr "附件"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Email Details"
|
||||
msgstr "郵件詳情"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,email_cc:0
|
||||
#: field:email_template.preview,email_cc:0
|
||||
msgid "Cc"
|
||||
msgstr "副本"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,body_text:0
|
||||
#: field:email_template.preview,body_text:0
|
||||
msgid "Text Contents"
|
||||
msgstr "文字內容"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,auto_delete:0
|
||||
#: help:email_template.preview,auto_delete:0
|
||||
msgid "Permanently delete this email after sending it, to save space"
|
||||
msgstr "永久刪除已發送的郵件以節省空間"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,references:0
|
||||
#: field:email_template.preview,references:0
|
||||
msgid "References"
|
||||
msgstr "參考"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,display_text:0
|
||||
#: field:email_template.preview,display_text:0
|
||||
msgid "Display Text"
|
||||
msgstr "顯示文字"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email_template.preview:0
|
||||
msgid "Close"
|
||||
msgstr "關閉"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,attachment_ids:0
|
||||
#: help:email_template.preview,attachment_ids:0
|
||||
msgid ""
|
||||
"You may attach files to this template, to be added to all emails created "
|
||||
"from this template"
|
||||
msgstr "這個範本您可以加入附件, 從這範本新建所有郵件"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,headers:0
|
||||
#: help:email_template.preview,headers:0
|
||||
msgid ""
|
||||
"Full message headers, e.g. SMTP session headers (usually available on "
|
||||
"inbound messages only)"
|
||||
msgstr "完整的郵件標題,例如僅SMTP會話頭(通常可在入站消息)"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,mail_server_id:0
|
||||
#: field:email_template.preview,mail_server_id:0
|
||||
msgid "Outgoing Mail Server"
|
||||
msgstr "發送郵件伺服器"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,ref_ir_act_window:0
|
||||
#: help:email_template.preview,ref_ir_act_window:0
|
||||
msgid ""
|
||||
"Sidebar action to make this template available on records of the related "
|
||||
"document model"
|
||||
msgstr "側邊欄動作使這個範本記錄相關的文件類型"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,model_object_field:0
|
||||
#: field:email_template.preview,model_object_field:0
|
||||
msgid "Field"
|
||||
msgstr "欄位"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,user_id:0
|
||||
#: field:email_template.preview,user_id:0
|
||||
msgid "Related user"
|
||||
msgstr "相關使用者"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
#: model:ir.actions.act_window,name:email_template.action_email_template_tree_all
|
||||
#: model:ir.ui.menu,name:email_template.menu_email_templates
|
||||
msgid "Templates"
|
||||
msgstr "範本"
|
||||
|
||||
#. module: email_template
|
||||
#: field:res.partner,opt_out:0
|
||||
msgid "Opt-Out"
|
||||
msgstr "不參加"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,email_bcc:0
|
||||
#: help:email_template.preview,email_bcc:0
|
||||
msgid "Blind carbon copy recipients (placeholders may be used here)"
|
||||
msgstr "密件副本收件人(佔位符可以用在這裡)"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,lang:0
|
||||
#: help:email_template.preview,lang:0
|
||||
msgid ""
|
||||
"Optional translation language (ISO code) to select when sending out an "
|
||||
"email. If not set, the english version will be used. This should usually be "
|
||||
"a placeholder expression that provides the appropriate language code, e.g. "
|
||||
"${object.partner_id.lang.code}."
|
||||
msgstr ""
|
||||
"選擇翻譯語言(ISO代碼)選擇發送電子郵件時。如果沒有設置,將使用英文版本。通常,這應該是一個佔位符,表達式,提供適當的語言代碼,例如$ "
|
||||
"{object.partner_id.lang.code}。"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email_template.preview,res_id:0
|
||||
msgid "Sample Document"
|
||||
msgstr "文件範本"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,email_to:0
|
||||
#: help:email_template.preview,email_to:0
|
||||
msgid "Comma-separated recipient addresses (placeholders may be used here)"
|
||||
msgstr "逗號分隔的收件人地址(佔位符可以用在這裡)"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,name:0
|
||||
#: field:email_template.preview,name:0
|
||||
msgid "Name"
|
||||
msgstr "名稱"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,track_campaign_item:0
|
||||
#: field:email_template.preview,track_campaign_item:0
|
||||
msgid "Resource Tracking"
|
||||
msgstr "資源追蹤"
|
||||
|
||||
#. module: email_template
|
||||
#: model:ir.model,name:email_template.model_email_template_preview
|
||||
msgid "Email Template Preview"
|
||||
msgstr "預覽郵件範本"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email_template.preview:0
|
||||
msgid "Email Preview"
|
||||
msgstr "預覽郵件"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,message_id:0
|
||||
#: help:email_template.preview,message_id:0
|
||||
msgid ""
|
||||
"Message-ID SMTP header to use in outgoing messages based on this template. "
|
||||
"Please note that this overrides the 'Resource Tracking' option, so if you "
|
||||
"simply need to track replies to outgoing emails, enable that option "
|
||||
"instead.\n"
|
||||
"Placeholders must be used here, as this value always needs to be unique!"
|
||||
msgstr ""
|
||||
"消息ID SMTP頭使用在基於此模板的傳出消息。請注意,這將覆蓋'資源追蹤'選項,所以如果您只需要跟蹤答覆外發郵件,啟用該選項。\n"
|
||||
"佔位符必須用在這裡,這個值永遠必須是唯一的!"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,headers:0
|
||||
#: field:email_template.preview,headers:0
|
||||
msgid "Message headers"
|
||||
msgstr "訊息頂端"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,email_bcc:0
|
||||
#: field:email_template.preview,email_bcc:0
|
||||
msgid "Bcc"
|
||||
msgstr "密件副本收件人"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,reply_to:0
|
||||
#: help:email_template.preview,reply_to:0
|
||||
msgid "Preferred response address (placeholders may be used here)"
|
||||
msgstr "首選的回覆地址(佔位符可以用在這裡)"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Remove sidebar button"
|
||||
msgstr "移動側邊欄按鈕"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,null_value:0
|
||||
#: help:email_template.preview,null_value:0
|
||||
msgid "Optional value to use if the target field is empty"
|
||||
msgstr "若欄位是空的需選擇使用值"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Model"
|
||||
msgstr "型號"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,references:0
|
||||
#: help:email_template.preview,references:0
|
||||
msgid "Message references, such as identifiers of previous messages"
|
||||
msgstr "消息引用,如以前的消息標識符"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,ref_ir_value:0
|
||||
#: help:email_template.preview,ref_ir_value:0
|
||||
msgid "Sidebar button to open the sidebar action"
|
||||
msgstr "側邊欄按鈕來打開側邊欄動作"
|
||||
|
||||
#. module: email_template
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr "錯誤 ! 您不行建立相關成員"
|
||||
|
||||
#. module: email_template
|
||||
#: code:addons/email_template/email_template.py:218
|
||||
#, python-format
|
||||
msgid "Deletion of the action record failed."
|
||||
msgstr "刪除的動作記錄失敗"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,mail_server_id:0
|
||||
#: help:email_template.preview,mail_server_id:0
|
||||
msgid ""
|
||||
"Optional preferred server for outgoing mails. If not set, the highest "
|
||||
"priority one will be used."
|
||||
msgstr "可選擇伺服器發送的郵件。如果沒有設置,優先級最高的將被使用。"
|
||||
|
||||
#. module: email_template
|
||||
#: selection:email.template,state:0
|
||||
#: selection:email_template.preview,state:0
|
||||
msgid "Delivery Failed"
|
||||
msgstr "傳送失敗"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,sub_model_object_field:0
|
||||
#: help:email_template.preview,sub_model_object_field:0
|
||||
msgid ""
|
||||
"When a relationship field is selected as first field, this field lets you "
|
||||
"select the target field within the destination document model (sub-model)."
|
||||
msgstr "當相關欄位已被選擇為第一欄位, 這欄位,讓您選擇目標欄位內的目標文件類型(子類型型)。"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Attach Report"
|
||||
msgstr "附加報表"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,report_template:0
|
||||
#: field:email_template.preview,report_template:0
|
||||
msgid "Optional report to print and attach"
|
||||
msgstr "選擇報表列印與附加"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,body_html:0
|
||||
#: help:email_template.preview,body_html:0
|
||||
msgid "Rich-text/HTML version of the message (placeholders may be used here)"
|
||||
msgstr "Rich-text/HTML版本的消息(佔位符可以用在這裡)"
|
||||
|
||||
#~ msgid "Sidebar button"
|
||||
#~ msgstr "側邊欄按鈕"
|
||||
|
||||
#~ msgid "E-mail composition wizard"
|
||||
#~ msgstr "郵件合併精靈"
|
||||
|
||||
#~ msgid "Related Document model"
|
||||
#~ msgstr "相關文件類型"
|
||||
|
||||
#~ msgid "Rich-text contents"
|
||||
#~ msgstr "豐富的文字內容"
|
||||
|
||||
#~ msgid "Text contents"
|
||||
#~ msgstr "文字內容"
|
||||
|
||||
#~ msgid "Opt-out"
|
||||
#~ msgstr "退出選擇"
|
|
@ -1,8 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# OpenERP, Open Source Business Applications
|
||||
# Copyright (c) 2012-TODAY OpenERP S.A. <http://openerp.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
|
@ -15,10 +15,13 @@
|
|||
# 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/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
from . import test_mail
|
||||
|
||||
import analytic_contract_expense_project
|
||||
checks = [
|
||||
test_mail,
|
||||
]
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,103 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Business Applications
|
||||
# Copyright (c) 2012-TODAY OpenERP S.A. <http://openerp.com>
|
||||
#
|
||||
# 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 openerp.tests import common
|
||||
import tools
|
||||
|
||||
class test_message_compose(common.TransactionCase):
|
||||
|
||||
def _mock_smtp_gateway(self, *args, **kwargs):
|
||||
return True
|
||||
|
||||
def _mock_build_email(self, *args, **kwargs):
|
||||
self._build_email_args = args
|
||||
self._build_email_kwargs = kwargs
|
||||
return self.build_email_real(*args, **kwargs)
|
||||
|
||||
def setUp(self):
|
||||
super(test_message_compose, self).setUp()
|
||||
self.mail_group = self.registry('mail.group')
|
||||
self.mail_mail = self.registry('mail.mail')
|
||||
self.mail_message = self.registry('mail.message')
|
||||
self.res_users = self.registry('res.users')
|
||||
self.res_partner = self.registry('res.partner')
|
||||
|
||||
# Install mock SMTP gateway
|
||||
self.build_email_real = self.registry('ir.mail_server').build_email
|
||||
self.registry('ir.mail_server').build_email = self._mock_build_email
|
||||
self.registry('ir.mail_server').send_email = self._mock_smtp_gateway
|
||||
|
||||
# create a 'pigs' group that will be used through the various tests
|
||||
self.group_pigs_id = self.mail_group.create(self.cr, self.uid,
|
||||
{'name': 'Pigs', 'description': 'Fans of Pigs, unite !'})
|
||||
|
||||
def test_00_message_compose_wizard(self):
|
||||
""" Tests designed for the mail.compose.message wizard updated by email_template. """
|
||||
cr, uid = self.cr, self.uid
|
||||
mail_compose = self.registry('mail.compose.message')
|
||||
self.res_users.write(cr, uid, [uid], {'signature': 'Admin', 'email': 'a@a'})
|
||||
user_admin = self.res_users.browse(cr, uid, uid)
|
||||
group_model_id = self.registry('ir.model').search(cr, uid, [('model', '=', 'mail.group')])[0]
|
||||
group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
|
||||
|
||||
# Create template on mail.group
|
||||
email_template = self.registry('email.template')
|
||||
email_template_id = email_template.create(cr, uid, {'model_id': group_model_id,
|
||||
'name': 'Pigs Template', 'subject': '${record.name}',
|
||||
'body_html': '${object.description}', 'user_signature': True,
|
||||
'email_to': 'b@b c@c', 'email_cc': 'd@d'})
|
||||
# import pdb
|
||||
# pdb.set_trace()
|
||||
|
||||
# Mail data
|
||||
_subject = 'Pigs'
|
||||
_body_text = 'Pigs rules'
|
||||
|
||||
# 3 - Create in mass_mail composition mode that should work with or without email_template installed
|
||||
compose_id = mail_compose.create(cr, uid,
|
||||
{'subject': _subject, 'body': _body_text},
|
||||
{'default_composition_mode': 'mass_mail', 'default_model': 'mail.group',
|
||||
'default_res_id': -1, 'default_use_template': True,
|
||||
'active_ids': [self.group_pigs_id], 'default_template_id': email_template_id})
|
||||
compose = mail_compose.browse(cr, uid, compose_id)
|
||||
# print compose.subject
|
||||
|
||||
|
||||
# Try the 'onchange_template_id'
|
||||
values = mail_compose.onchange_template_id(cr, uid, [], compose.use_template, compose.template_id, compose.composition_mode, compose.res_id)
|
||||
# print values
|
||||
values = mail_compose.onchange_use_template(cr, uid, [], not compose.use_template, compose.template_id, compose.composition_mode, compose.res_id)
|
||||
# print values
|
||||
|
||||
compose.refresh()
|
||||
|
||||
|
||||
# # Post the comment, get created message
|
||||
# mail_compose.send_mail(cr, uid, [compose_id], {'default_res_id': -1, 'active_ids': [self.group_pigs_id]})
|
||||
# group_pigs.refresh()
|
||||
# msg = group_pigs.message_ids[0]
|
||||
|
||||
# # Test: last message on Pigs = last created message
|
||||
# test_msg = self.mail_message.browse(cr, uid, self.mail_message.search(cr, uid, [], limit=1))[0]
|
||||
# self.assertEqual(msg.id, test_msg.id, 'Pigs did not receive its mass mailing message')
|
||||
# # Test: mail.message: subject, body
|
||||
# self.assertEqual(msg.subject, _subject, 'mail.message subject is incorrect')
|
||||
# self.assertEqual(msg.body, group_pigs.description, 'mail.message body is incorrect')
|
|
@ -20,62 +20,62 @@
|
|||
##############################################################################
|
||||
|
||||
import base64
|
||||
import tools
|
||||
|
||||
from osv import osv
|
||||
from osv import fields
|
||||
from tools.translate import _
|
||||
import tools
|
||||
|
||||
|
||||
class mail_compose_message(osv.osv_memory):
|
||||
""" Inherit mail_compose_message to add email template feature in the
|
||||
message composer. """
|
||||
|
||||
_inherit = 'mail.compose.message'
|
||||
|
||||
def _get_templates(self, cr, uid, context=None):
|
||||
"""
|
||||
Return Email Template of particular Model.
|
||||
"""
|
||||
""" Return Email Template of particular Model. """
|
||||
if context is None:
|
||||
context = {}
|
||||
record_ids = []
|
||||
email_template= self.pool.get('email.template')
|
||||
model = False
|
||||
if context.get('message_id'):
|
||||
mail_message = self.pool.get('mail.message')
|
||||
message_data = mail_message.browse(cr, uid, int(context.get('message_id')), context)
|
||||
model = message_data.model
|
||||
elif context.get('mail.compose.target.model') or context.get('active_model'):
|
||||
model = context.get('mail.compose.target.model', context.get('active_model'))
|
||||
email_template_obj= self.pool.get('email.template')
|
||||
|
||||
if context.get('default_composition_mode') == 'reply' and context.get('active_id'):
|
||||
message_data = self.pool.get('mail.message').browse(cr, uid, int(context.get('active_id')), context)
|
||||
if message_data:
|
||||
model = message_data.model
|
||||
else:
|
||||
model = context.get('default_model', context.get('active_model'))
|
||||
|
||||
if model:
|
||||
record_ids = email_template.search(cr, uid, [('model', '=', model)])
|
||||
return email_template.name_get(cr, uid, record_ids, context) + [(False,'')]
|
||||
record_ids = email_template_obj.search(cr, uid, [('model', '=', model)], context=context)
|
||||
return email_template_obj.name_get(cr, uid, record_ids, context) + [(False, '')]
|
||||
return []
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
""" Override to handle templates. """
|
||||
if context is None:
|
||||
context = {}
|
||||
result = super(mail_compose_message, self).default_get(cr, uid, fields, context=context)
|
||||
result['template_id'] = context.get('default_template_id', context.get('mail.compose.template_id', False))
|
||||
return result
|
||||
|
||||
_columns = {
|
||||
'use_template': fields.boolean('Use Template'),
|
||||
'template_id': fields.selection(_get_templates, 'Template',
|
||||
size=-1 # means we want an int db column
|
||||
),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'template_id' : lambda self, cr, uid, context={} : context.get('mail.compose.template_id', False)
|
||||
# incredible hack of the day: size=-1 means we want an int db column instead of an str one
|
||||
'template_id': fields.selection(_get_templates, 'Template', size=-1),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, ids, use_template, template_id, email_from=None, email_to=None, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
values = {}
|
||||
if template_id:
|
||||
res_id = context.get('active_id', False)
|
||||
if context.get('mail.compose.message.mode') == 'mass_mail':
|
||||
# use the original template values - to be rendered when actually sent
|
||||
# by super.send_mail()
|
||||
values = self.pool.get('email.template').read(cr, uid, template_id, self.fields_get_keys(cr, uid), context)
|
||||
def onchange_template_id(self, cr, uid, ids, use_template, template_id, composition_mode, res_id, context=None):
|
||||
""" onchange_template_id: read or render the template if set, get back
|
||||
to default values if not. """
|
||||
fields = ['body', 'body_html', 'subject', 'partner_ids', 'email_to', 'email_cc']
|
||||
if use_template and template_id:
|
||||
# use the original template values, to be rendered when actually sent
|
||||
if composition_mode == 'mass_mail':
|
||||
values = self.pool.get('email.template').read(cr, uid, template_id, fields, context)
|
||||
# render the mail as one-shot
|
||||
else:
|
||||
# render the mail as one-shot
|
||||
values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context)
|
||||
# get partner_ids back
|
||||
values['dest_partner_ids'] = values['partner_ids']
|
||||
# retrofit generated attachments in the expected field format
|
||||
if values['attachments']:
|
||||
attachment = values.pop('attachments')
|
||||
|
@ -92,65 +92,61 @@ class mail_compose_message(osv.osv_memory):
|
|||
}
|
||||
att_ids.append(attachment_obj.create(cr, uid, data_attach))
|
||||
values['attachment_ids'] = att_ids
|
||||
else:
|
||||
# restore defaults
|
||||
values = self.default_get(cr, uid, self.fields_get_keys(cr, uid), context)
|
||||
values.update(use_template=use_template, template_id=template_id)
|
||||
else: # restore defaults
|
||||
values = self.default_get(cr, uid, fields, context=context)
|
||||
|
||||
if values.get('body_html') and not values.get('body'):
|
||||
values['body'] = values.get('body_html')
|
||||
|
||||
values.update(use_template=use_template, template_id=template_id)
|
||||
|
||||
print 'returning ', values
|
||||
|
||||
return {'value': values}
|
||||
|
||||
def template_toggle(self, cr, uid, ids, context=None):
|
||||
def toggle_template(self, cr, uid, ids, context=None):
|
||||
""" hit toggle template mode button: calls onchange_use_template to
|
||||
emulate an on_change, then writes the value to update the form. """
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
values = {}
|
||||
use_template = record.use_template
|
||||
# simulate an on_change on use_template
|
||||
values.update(self.onchange_use_template(cr, uid, ids, not use_template, context=context)['value'])
|
||||
record.write(values)
|
||||
return False
|
||||
onchange_res = self.onchange_use_template(cr, uid, ids, not record.use_template,
|
||||
record.template_id, record.composition_mode, record.res_id, context=context)['value']
|
||||
record.write(onchange_res)
|
||||
return True
|
||||
|
||||
def onchange_use_template(self, cr, uid, ids, use_template, context=None):
|
||||
values = {'use_template': use_template}
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
if not use_template:
|
||||
# equivalent to choosing an empty template
|
||||
onchange_template_values = self.on_change_template(cr, uid, record.id, use_template,
|
||||
False, email_from=record.email_from, email_to=record.email_to, context=context)
|
||||
values.update(onchange_template_values['value'])
|
||||
return {'value': values}
|
||||
def onchange_use_template(self, cr, uid, ids, use_template, template_id, composition_mode, res_id, context=None):
|
||||
""" onchange_use_template (values: True or False). If use_template is
|
||||
False, we do like an onchange with template_id False for values """
|
||||
onchange_template_values = self.onchange_template_id(cr, uid, ids, use_template,
|
||||
template_id, composition_mode, res_id, context=context)
|
||||
return onchange_template_values
|
||||
|
||||
def save_as_template(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
""" hit save as template button: current form value will be a new
|
||||
template attached to the current document. """
|
||||
email_template = self.pool.get('email.template')
|
||||
model_pool = self.pool.get('ir.model')
|
||||
ir_model_pool = self.pool.get('ir.model')
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
model = record.model or context.get('active_model')
|
||||
model_ids = model_pool.search(cr, uid, [('model', '=', model)])
|
||||
model = record.model
|
||||
model_ids = ir_model_pool.search(cr, uid, [('model', '=', model)])
|
||||
model_id = model_ids and model_ids[0] or False
|
||||
model_name = ''
|
||||
if model_id:
|
||||
model_name = model_pool.browse(cr, uid, model_id, context=context).name
|
||||
model_name = ir_model_pool.browse(cr, uid, model_id, context=context).name
|
||||
template_name = "%s: %s" % (model_name, tools.ustr(record.subject))
|
||||
values = {
|
||||
'name': template_name,
|
||||
'email_from': record.email_from or False,
|
||||
'subject': record.subject or False,
|
||||
'body': record.body or False,
|
||||
'email_to': record.email_to or False,
|
||||
'email_cc': record.email_cc or False,
|
||||
'reply_to': record.reply_to or False,
|
||||
'model_id': model_id or False,
|
||||
'attachment_ids': [(6, 0, [att.id for att in record.attachment_ids])]
|
||||
}
|
||||
template_id = email_template.create(cr, uid, values, context=context)
|
||||
record.write({'template_id': template_id,
|
||||
'use_template': True})
|
||||
record.write({'template_id': template_id, 'use_template': True})
|
||||
return True
|
||||
|
||||
# _reopen same wizard screen with new template preselected
|
||||
return False
|
||||
|
||||
# override the basic implementation
|
||||
def render_template(self, cr, uid, template, model, res_id, context=None):
|
||||
""" Override of mail.compose.message behavior: use the power of
|
||||
templates ! """
|
||||
return self.pool.get('email.template').render_template(cr, uid, template, model, res_id, context=context)
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -10,15 +10,16 @@
|
|||
<data>
|
||||
<xpath expr="//form/footer/button" position="before">
|
||||
<field name="use_template" invisible="1"/>
|
||||
<button icon="gtk-paste" type="object" name="template_toggle"
|
||||
<button icon="gtk-paste" type="object" name="toggle_template"
|
||||
string="" help="Use a message template" />
|
||||
<button icon="gtk-save" type="object" name="save_as_template"
|
||||
string="" help="Save as a new template"/>
|
||||
</xpath>
|
||||
<xpath expr="//form/notebook" position="after">
|
||||
<group attrs="{'invisible':[('use_template','=',False)]}" colspan="4" col="4">
|
||||
<field name="use_template" invisible="1"/>
|
||||
<field name="template_id" colspan="3"
|
||||
on_change="on_change_template(use_template, template_id, email_from, email_to, context)"/>
|
||||
on_change="onchange_template_id(use_template, template_id, composition_mode, res_id, context)"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</data>
|
||||
|
@ -33,14 +34,14 @@
|
|||
<data>
|
||||
<xpath expr="//field[@name='partner_ids']" position="after">
|
||||
<field name="use_template" colspan="2" nolabel="1" invisible="1"
|
||||
on_change="onchange_use_template(use_template, context)"/>
|
||||
on_change="onchange_use_template(use_template, template_id, composition_mode, res_id, context)"/>
|
||||
<field name="template_id" colspan="2" nolabel="1"
|
||||
attrs="{'invisible':[('use_template','=',False)]}"
|
||||
on_change="on_change_template(use_template, template_id, False, False, context)"/>
|
||||
on_change="onchange_template_id(use_template, template_id, composition_mode, res_id, context)"/>
|
||||
</xpath>
|
||||
<xpath expr="//button[@class='oe_mail_compose_message_attachment']" position="before">
|
||||
<button icon="/email_template/static/src/img/email_template.png"
|
||||
type="object" name="template_toggle" string=""
|
||||
type="object" name="toggle_template" string=""
|
||||
help="Use a message template"/>
|
||||
<button icon="/email_template/static/src/img/email_template_save.png"
|
||||
type="object" name="save_as_template" string=""
|
||||
|
|
|
@ -14,11 +14,13 @@
|
|||
</record>
|
||||
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>From the top menu Events, you can organize events, manage registrations, automate communication around your event and sell events through your quotations.</value>
|
||||
<value>Module Events Organisation has been installed</value>
|
||||
</function>
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Events Organisation application installed!</field>
|
||||
<field name="body">From the top Events menu, you can organize events, manage registrations, automate communication around your event and sell events through your quotations.</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2009-01-23 17:18+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"PO-Revision-Date: 2012-08-30 03:32+0000\n"
|
||||
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:27+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: event_project
|
||||
#: model:ir.model,name:event_project.model_event_project
|
||||
|
@ -29,7 +29,7 @@ msgstr "結束日期"
|
|||
#. module: event_project
|
||||
#: view:event.project:0
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
msgstr "確認"
|
||||
|
||||
#. module: event_project
|
||||
#: help:event.project,project_id:0
|
||||
|
@ -37,13 +37,13 @@ msgid ""
|
|||
"This is Template Project. Project of event is a duplicate of this Template. "
|
||||
"After click on 'Create Retro-planning', New Project will be duplicated from "
|
||||
"this template project."
|
||||
msgstr ""
|
||||
msgstr "這是模板專案。專案的事件是重複的,這個模板。點擊打造追朔規劃“後,新專案將被複製此模板的專案。"
|
||||
|
||||
#. module: event_project
|
||||
#: view:event.project:0
|
||||
#: model:ir.actions.act_window,name:event_project.action_event_project
|
||||
msgid "Retro-Planning"
|
||||
msgstr ""
|
||||
msgstr "追溯計畫"
|
||||
|
||||
#. module: event_project
|
||||
#: constraint:event.event:0
|
||||
|
@ -63,23 +63,23 @@ msgstr "專案範本"
|
|||
#. module: event_project
|
||||
#: view:event.event:0
|
||||
msgid "All tasks"
|
||||
msgstr ""
|
||||
msgstr "所有的工作任務"
|
||||
|
||||
#. module: event_project
|
||||
#: view:event.event:0
|
||||
#: model:ir.actions.act_window,name:event_project.act_event_task
|
||||
msgid "Tasks"
|
||||
msgstr ""
|
||||
msgstr "任務"
|
||||
|
||||
#. module: event_project
|
||||
#: constraint:event.event:0
|
||||
msgid "Error ! You cannot create recursive event."
|
||||
msgstr ""
|
||||
msgstr "錯誤!您不能創建遞歸的事件"
|
||||
|
||||
#. module: event_project
|
||||
#: field:event.event,task_ids:0
|
||||
msgid "Project tasks"
|
||||
msgstr ""
|
||||
msgstr "專案任務"
|
||||
|
||||
#. module: event_project
|
||||
#: view:event.project:0
|
||||
|
@ -94,7 +94,7 @@ msgstr "開始日期"
|
|||
#. module: event_project
|
||||
#: view:event.event:0
|
||||
msgid "Create Retro-Planning"
|
||||
msgstr ""
|
||||
msgstr "創建追溯計畫"
|
||||
|
||||
#. module: event_project
|
||||
#: model:ir.model,name:event_project.model_event_event
|
||||
|
@ -104,7 +104,7 @@ msgstr "活動"
|
|||
#. module: event_project
|
||||
#: view:event.event:0
|
||||
msgid "Tasks Management"
|
||||
msgstr ""
|
||||
msgstr "任務管理"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Organization and management of events.\n"
|
||||
|
|
|
@ -2,14 +2,16 @@
|
|||
<openerp>
|
||||
<data noupdate="1">
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Manage your human resources in OpenERP: employees and hierarchy, HR departments and jobs.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Employee Directory application installed!</field>
|
||||
<field name="body">Manage your human resources with OpenERP: employees and their hierarchy, HR departments and job positions.
|
||||
|
||||
More HR features are available from the following modules: Recruitment Process (manage job positions and recruitment), Timesheets Validation (record timesheets and attendance), Leaves Management (keep track of employee leaves), Expenses Management (manage employee expenses), Employee Appraisals (organize employee surveys, where employees evaluate their subordinates or their manager.)</value>
|
||||
<value>Module Employee Directory has been installed</value>
|
||||
</function>
|
||||
More HR features are available via extra applications: Recruitment Process (manage job positions and recruitment), Timesheet Validation (record timesheets and attendance),
|
||||
Leave Management (keep track of employee leaves), Expense Management (manage employee expenses), Employee Appraisals (organize employee surveys, where employees evaluate their subordinates or their manager).</field>
|
||||
</record>
|
||||
|
||||
<record id="employee" model="hr.employee">
|
||||
<field name="name">Administrator</field>
|
||||
|
|
|
@ -14,12 +14,14 @@
|
|||
<field name="sequence">100</field>
|
||||
</record>
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Create evaluations for your subordinates or manager. You can define a plan with several surveys, where you organize evaluation surveys related to the hierarchy levels. Evaluations filled by employees can exported as pdf files.</value>
|
||||
<value>Module Employee Appraisals has been installed</value>
|
||||
</function>
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Employee Appraisals application installed!</field>
|
||||
<field name="body">Manage employee reviews: you can define an appraisal campaign with several steps, with specific evaluation surveys according to hierarchy levels.
|
||||
Evaluations filled by employees may be exported as pdf files.</field>
|
||||
</record>
|
||||
|
||||
<record id="survey_2" model="survey">
|
||||
<field name="title">Self Appraisal</field>
|
||||
|
|
|
@ -21,14 +21,14 @@
|
|||
|
||||
|
||||
{
|
||||
'name': 'Expenses Management',
|
||||
'name': 'Expense Management',
|
||||
'version': '1.0',
|
||||
'category': 'Human Resources',
|
||||
'sequence': 30,
|
||||
'summary': 'Expenses Validation, Invoicing',
|
||||
'description': """
|
||||
This module aims to manage employee's expenses.
|
||||
===============================================
|
||||
This module aims to manage employee expenses.
|
||||
=============================================
|
||||
|
||||
The whole workflow is implemented:
|
||||
----------------------------------
|
||||
|
|
|
@ -2,20 +2,20 @@
|
|||
<openerp>
|
||||
<data noupdate="1">
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Manage your employee's expenses, with validations by employee manager and accountant, creation and payment of invoices.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Expense Management application installed!</field>
|
||||
<field name="body">Manage your employees' expenses, after due validation by their manager and the accountant, then generate and pay the corresponding invoices.
|
||||
|
||||
This module also uses the analytic accounting and is compatible with the invoice on timesheet module so that you will be able to automatically re-invoice your customer's expenses if your work by project.</value>
|
||||
<value>Module Expenses Management has been installed</value>
|
||||
</function>
|
||||
This feature is also linked to analytic accounting and compatible with timesheet invoices, so you will be able to automatically re-invoice project-related expenses to your customers.</field>
|
||||
</record>
|
||||
|
||||
<!-- Resource: product.uom.categ -->
|
||||
<record id="cat_expense" model="product.category">
|
||||
<field name="parent_id" ref="product.product_category_all"/>
|
||||
<field name="name">Expenses</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
|
||||
{
|
||||
'name': 'Leaves Management',
|
||||
'name': 'Leave Management',
|
||||
'version': '1.5',
|
||||
'author': 'OpenERP SA',
|
||||
'category': 'Human Resources',
|
||||
|
@ -29,8 +29,8 @@
|
|||
'summary': 'Holidays, Allocation and Leave Requests',
|
||||
'website': 'http://www.openerp.com',
|
||||
'description': """
|
||||
This module allows you to manage leaves and leave's requests.
|
||||
=============================================================
|
||||
This module allows you to manage leaves and leave requests.
|
||||
===========================================================
|
||||
|
||||
Implements a dashboard for human resource management that includes:
|
||||
-------------------------------------------------------------------
|
||||
|
|
|
@ -13,12 +13,15 @@
|
|||
<field name="sequence">100</field>
|
||||
</record>
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Manage employee leaves from the top menu "Human Resources". Employees can create leave requests that are validated by their manager and/or HR people. Once validated, they are visible in the employee's calendar. HR people can define leave types and allocate off-days for employees.</value>
|
||||
<value>Module Leaves Management has been installed</value>
|
||||
</function>
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Leave Management application installed!</field>
|
||||
<field name="body">Manage employee leaves from the top menu "Human Resources". Employees can create leave requests that are validated by their manager and/or HR officers.
|
||||
Once validated, they are visible in the employee's calendar. HR officers can define leave types and allocate leaves to employees and employee categories.</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Casual leave -->
|
||||
<record model="hr.holidays.status" id="holiday_status_cl">
|
||||
|
|
|
@ -2,14 +2,15 @@
|
|||
<openerp>
|
||||
<data noupdate="1">
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Manage job positions and the recruitment process in your company. This module is integrated with the module Survey to help you to define interviews for different jobs.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Recruitment Process application installed!</field>
|
||||
<field name="body">Manage job positions and your company's recruitment process. This application is integrated with the Survey application to help you define interviews for different jobs.
|
||||
|
||||
You can automatically create application records from an email gateway, that you can configure in the Human Resources Settings.</value>
|
||||
<value>Module Recruitment Process has been installed</value>
|
||||
</function>
|
||||
You can automatically receive job application though an email gateway, see the Human Resources settings.</field>
|
||||
</record>
|
||||
|
||||
<!-- Meeting Types (for interview meetings) -->
|
||||
<record model="crm.meeting.type" id="categ_meet_interview">
|
||||
|
|
|
@ -27,8 +27,8 @@
|
|||
'sequence': 16,
|
||||
'summary': 'Timesheets, Attendances, Activities',
|
||||
'description': """
|
||||
This module helps you to easily encode and validate timesheet and attendances within the same view.
|
||||
===================================================================================================
|
||||
This module helps you to easily record and validate timesheets and attendances within the same view.
|
||||
====================================================================================================
|
||||
|
||||
* It will maintain attendances and track (sign in/sign out) events.
|
||||
* Track the timesheet lines.
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<!-- Notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>From the top menu "Human Resources", encode and validate timesheets and attendances.</value>
|
||||
<value>Module Timesheets Validation has been installed</value>
|
||||
</function>
|
||||
<!-- notify all employees of module installation -->
|
||||
<record model="mail.message" id="hr_timesheet_module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Timesheet Validation application installed!</field>
|
||||
<field name="body">From the top menu "Human Resources", enter and validate timesheets and attendances.</field>
|
||||
</record>
|
||||
|
||||
<record id="ir_actions_server_timsheet_sheet" model="ir.actions.server">
|
||||
<field eval="5" name="sequence"/>
|
||||
<field eval=""""code"""" name="state"/>
|
||||
<field eval=""""ir.actions.server"""" name="type"/>
|
||||
<field name="sequence" eval="5"/>
|
||||
<field name="state">code</field>
|
||||
<field name="type">ir.actions.server</field>
|
||||
<field name="model_id" ref="model_hr_timesheet_current_open"/>
|
||||
<field eval="[(6,0,[])]" name="child_ids"/>
|
||||
<field eval=""""action = pool.get('hr.timesheet.current.open').open_timesheet(cr, uid, None, context)"""" name="code"/>
|
||||
<field eval=""""True"""" name="condition"/>
|
||||
<field eval=""""My Timesheet"""" name="name"/>
|
||||
<field name="code">action = pool.get('hr.timesheet.current.open').open_timesheet(cr, uid, None, context)</field>
|
||||
<field name="condition">True</field>
|
||||
<field name="name">My Timesheet</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="My Current Timesheet" id="menu_act_hr_timesheet_sheet_form_my_current" parent="hr_attendance.menu_hr_time_tracking" action="ir_actions_server_timsheet_sheet" sequence="1"/>
|
||||
|
|
|
@ -0,0 +1,429 @@
|
|||
# German translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-08-29 07:36+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: German <de@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-08-30 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1105
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1131
|
||||
#, python-format
|
||||
msgid "Error !!"
|
||||
msgstr "Fehler!"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid ""
|
||||
"Use the SugarSoap API URL (read tooltip) and a full access SugarCRM login."
|
||||
msgstr ""
|
||||
"Nutzen Sie die SugarSoap API URL (siehe Tooltip) und eine SugarCRM-Anmeldung "
|
||||
"mit Vollzugriff."
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "(Coming Soon)"
|
||||
msgstr "(Bald erwartet)"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,document:0
|
||||
msgid "Documents"
|
||||
msgstr "Dokumente"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Import your data from SugarCRM :"
|
||||
msgstr "Importieren Sie Ihre Daten aus SugarCRM:"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid ""
|
||||
"Choose data you want to import. Click 'Import' to get data manually or "
|
||||
"'Schedule Reccurent Imports' to get recurrently and automatically data."
|
||||
msgstr ""
|
||||
"Wählen Sie die zu importierenden Daten aus. Drücken Sie \"Import\", um Daten "
|
||||
"manuell zu holen oder \"Wiederkehrende Importe Terminieren\", um Daten "
|
||||
"automatisch und wiederholt einzuholen."
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,contact:0
|
||||
msgid "Contacts"
|
||||
msgstr "Kontakte"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "HR"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,bug:0
|
||||
msgid "Check this box to import sugarCRM Bugs into OpenERP project issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,instance_name:0
|
||||
msgid "Instance's Name"
|
||||
msgstr "Name der Instanz"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,project_task:0
|
||||
msgid "Project Tasks"
|
||||
msgstr "Projekt Aufgaben"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,email_from:0
|
||||
msgid "Notify End Of Import To:"
|
||||
msgstr "Über Abschluss des Imports zu informieren:"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,user:0
|
||||
msgid ""
|
||||
"Check this box to import sugarCRM Users into OpenERP users, warning if a "
|
||||
"user with the same login exist in OpenERP, user information will be erase by "
|
||||
"sugarCRM user information"
|
||||
msgstr ""
|
||||
"Haken Sie dieses Feld an, um SugarCRM-Benutzer als OpenERP-Benutzer zu "
|
||||
"importieren. Hinweis: In OpenERP bestehende Benutzer gleichen Namens werden "
|
||||
"gelöscht und durch die SugarCRM-Information ersetzt."
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/sugarsoap_services.py:23
|
||||
#, python-format
|
||||
msgid "Please install SOAP for python - ZSI-2.0-rc3.tar.gz - python-zci"
|
||||
msgstr ""
|
||||
"Installieren Sie bitte SOAP für Python - ZSI-2.0-rc3.tar.gz - python-zci"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "_Schedule Recurrent Imports"
|
||||
msgstr "_Terminierung wiederkehrender Importe"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid ""
|
||||
"Do not forget the email address to be notified of the success of the import."
|
||||
msgstr ""
|
||||
"Vergessen Sie nicht die über den Erfolg des Imports zu banachrichtende EMail-"
|
||||
"Adresse."
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,call:0
|
||||
msgid "Check this box to import sugarCRM Calls into OpenERP calls"
|
||||
msgstr ""
|
||||
"Haken Sie dieses Feld an, um SugarCRM-Anrufe in OpenERP-Anrufe zu "
|
||||
"importieren."
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid ""
|
||||
"If you make recurrent or ponctual import, data already in OpenERP will be "
|
||||
"updated by SugarCRM data."
|
||||
msgstr ""
|
||||
"Wenn Sie wiederkehrende oder vereinzelte Importe durchführen, werden bereits "
|
||||
"in OpenERP vorliegende Daten aktualsiert."
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,employee:0
|
||||
msgid "Employee"
|
||||
msgstr "Angstellter"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Document"
|
||||
msgstr "Dokument"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,document:0
|
||||
msgid "Check this box to import sugarCRM Documents into OpenERP documents"
|
||||
msgstr ""
|
||||
"Haken Sie dieses Feld an, um Dokumente aus SugarCRM in OpenERP zu importieren"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Import Data From SugarCRM"
|
||||
msgstr "Daten von SugarCRM importieren"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "CRM"
|
||||
msgstr "Kundenbeziehungsverwaltung"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.message:0
|
||||
msgid ""
|
||||
"Data are importing, the process is running in the background, an email will "
|
||||
"be sent to the given email address if it was defined."
|
||||
msgstr ""
|
||||
"Daten werden importiert; der Prozess läuft im Hintergrund. Bei Abschluss "
|
||||
"wird eine Benachrichtigung per EMail verschickt, sofern diese angegeben "
|
||||
"wurde."
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,call:0
|
||||
msgid "Calls"
|
||||
msgstr "Anrufe"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Multi Instance Management"
|
||||
msgstr "Verwaltung von mehrfachen Instanzen"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.message:0
|
||||
msgid "_Ok"
|
||||
msgstr "_OK"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,opportunity:0
|
||||
msgid ""
|
||||
"Check this box to import sugarCRM Leads and Opportunities into OpenERP Leads "
|
||||
"and Opportunities"
|
||||
msgstr ""
|
||||
"Haken Sie dieses Feld an, um Leads aus SugarCRM nach OpenERP zu importieren."
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,email_history:0
|
||||
msgid "Email and Note"
|
||||
msgstr "Nachrichten und Notizen"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,url:0
|
||||
msgid ""
|
||||
"Webservice's url where to get the data. example : "
|
||||
"'http://example.com/sugarcrm/soap.php', or copy the address of your sugarcrm "
|
||||
"application "
|
||||
"http://trial.sugarcrm.com/qbquyj4802/index.php?module=Home&action=index"
|
||||
msgstr ""
|
||||
"URL des Web-Dienstes bei dem Daten geholt werden sollen. Beispiel: "
|
||||
"\"http://example.com/sugarcrm/soap.php\", oder kopieren Sie die Adresse "
|
||||
"Ihrer SugarCRM-Anwendung (z. B. "
|
||||
"http://trial.sugarcrm.com/qbquyj4802/index.php?module=Home&action=index)"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: model:ir.actions.act_window,name:import_sugarcrm.action_import_sugarcrm
|
||||
#: model:ir.ui.menu,name:import_sugarcrm.menu_sugarcrm_import
|
||||
msgid "Import SugarCRM"
|
||||
msgstr "Aus SugarCRM importieren"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "_Import"
|
||||
msgstr "_Import"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,user:0
|
||||
msgid "User"
|
||||
msgstr "Benutzer"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1105
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1131
|
||||
#, python-format
|
||||
msgid "%s data required %s Module to be installed, Please install %s module"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,claim:0
|
||||
msgid "Cases"
|
||||
msgstr "Vorgänge"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,meeting:0
|
||||
msgid ""
|
||||
"Check this box to import sugarCRM Meetings and Tasks into OpenERP meetings"
|
||||
msgstr ""
|
||||
"Haken Sie dieses Feld an, um Termine von SugarCRM nach OpenERP zu importieren"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,email_history:0
|
||||
msgid ""
|
||||
"Check this box to import sugarCRM Emails, Notes and Attachments into OpenERP "
|
||||
"Messages and Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,project:0
|
||||
msgid "Projects"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/sugarsoap_services_types.py:14
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please install SOAP for python - ZSI-2.0-rc3.tar.gz from "
|
||||
"http://pypi.python.org/pypi/ZSI/"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,project:0
|
||||
msgid "Check this box to import sugarCRM Projects into OpenERP projects"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1098
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1124
|
||||
#, python-format
|
||||
msgid "Select Module to Import."
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,meeting:0
|
||||
msgid "Meetings"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,employee:0
|
||||
msgid "Check this box to import sugarCRM Employees into OpenERP employees"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,url:0
|
||||
msgid "SugarSoap Api url:"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Address Book"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/sugar.py:60
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Authentication error !\n"
|
||||
"Bad Username or Password bad SugarSoap Api url !"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,bug:0
|
||||
msgid "Bugs"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,project_task:0
|
||||
msgid "Check this box to import sugarCRM Project Tasks into OpenERP tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,opportunity:0
|
||||
msgid "Leads & Opp"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Authentication error !\n"
|
||||
"Bad Username or Password or bad SugarSoap Api url !"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:79
|
||||
#: code:addons/import_sugarcrm/sugar.py:60
|
||||
#, python-format
|
||||
msgid "Error !"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1098
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1124
|
||||
#, python-format
|
||||
msgid "Warning !"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,instance_name:0
|
||||
msgid ""
|
||||
"Prefix of SugarCRM id to differentiate xml_id of SugarCRM models datas come "
|
||||
"from different server."
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,contact:0
|
||||
msgid "Check this box to import sugarCRM Contacts into OpenERP addresses"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,password:0
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Login Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,claim:0
|
||||
msgid "Check this box to import sugarCRM Cases into OpenERP claims"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Email Notification When Import is Finished"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,username:0
|
||||
msgid "User Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.message:0
|
||||
#: model:ir.model,name:import_sugarcrm.model_import_message
|
||||
msgid "Import Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,account:0
|
||||
msgid "Check this box to import sugarCRM Accounts into OpenERP partners"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Online documentation:"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: field:import.sugarcrm,account:0
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "_Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/sugarsoap_services.py:23
|
||||
#: code:addons/import_sugarcrm/sugarsoap_services_types.py:14
|
||||
#, python-format
|
||||
msgid "ZSI Import Error!"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: model:ir.model,name:import_sugarcrm.model_import_sugarcrm
|
||||
msgid "Import SugarCRM DATA"
|
||||
msgstr ""
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
msgid "Email Address to Notify"
|
||||
msgstr ""
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
<record id="message_blogpost0" model="mail.message">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="group_all_employees"/>
|
||||
<field name="body"><![CDATA[Your monthly meal vouchers arrived. You can get them at Christine's office.
|
||||
This month you also have 250 EUR of eco-checks for all employees that worked with us since 1 year minimum.]]></field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="body">Your monthly meal vouchers arrived. You can get them at Christine's office.
|
||||
This month you also get 250 EUR of eco-vouchers if you have been in the company for more than a year.</field>
|
||||
<field name="type">comment</field>
|
||||
</record>
|
||||
|
||||
|
@ -21,7 +21,7 @@ This month you also have 250 EUR of eco-checks for all employees that worked wit
|
|||
<record id="message_blogpost0_comment1" model="mail.message">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="group_all_employees"/>
|
||||
<field name="body"><![CDATA[Yes, that's a good news.]]></field>
|
||||
<field name="body">Thanks, but where is Christine's office, if I may ask? (I'm new here)</field>
|
||||
<field name="parent_id" ref="message_blogpost0"/>
|
||||
<field name="type">comment</field>
|
||||
</record>
|
||||
|
@ -29,16 +29,19 @@ This month you also have 250 EUR of eco-checks for all employees that worked wit
|
|||
<record id="message_blogpost0_comment2" model="mail.message">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="group_all_employees"/>
|
||||
<field name="body"><![CDATA[Sure: Curabitur tempor bibendum diam, et euismod ante rutrum vel.
|
||||
|
||||
In quis purus neque. Integer sodales dolor eu elit fringilla blandit. Maecenas lacus nisi, facilisis sit amet viverra eu, tristique vel augue.
|
||||
Donec viverra congue dui eu blandit. In lacinia molestie nulla, ut sagittis risus feugiat eu.
|
||||
|
||||
Check the file in attachment for more information ! (third comment)]]></field>
|
||||
<field name="body">Great news, I need to buy a new fridge, I think I can pay it with the eco-vouchers!</field>
|
||||
<field name="parent_id" ref="message_blogpost0"/>
|
||||
<field name="type">comment</field>
|
||||
</record>
|
||||
|
||||
<record id="message_blogpost0_comment1_2" model="mail.message">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="group_all_employees"/>
|
||||
<field name="body">Building B3, second floor on the right :-)</field>
|
||||
<field name="parent_id" ref="message_blogpost0_comment1"/>
|
||||
<field name="type">comment</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.config_parameter" id="user_mail_alias">
|
||||
<field name="key">mail.catchall.domain</field>
|
||||
<field name="value">demo.openerp.com</field>
|
||||
|
|
|
@ -13,16 +13,16 @@
|
|||
</record>
|
||||
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- thread_id, body='', subject=False, msg_type='notification', parent_id=False -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Your homepage is a summary of messages you received and key information about documents you follow.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Welcome to OpenERP!</field>
|
||||
<field name="body">Your homepage is a summary of messages you received and key information about documents you follow.
|
||||
|
||||
The top menu bar contains all applications you installed. You can use this <i>Settings</i> menu to install more applications, activate others features or give access to new users.
|
||||
|
||||
To setup your preferences (name, email signature, avatar), click on the top right corner.</value>
|
||||
<value>Welcome to OpenERP!</value>
|
||||
</function>
|
||||
|
||||
To setup your preferences (name, email signature, avatar), click on the top right corner.</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
from osv import osv
|
||||
from osv import fields
|
||||
import tools
|
||||
|
||||
class mail_followers(osv.Model):
|
||||
""" mail_followers holds the data related to the follow mechanism inside
|
||||
|
@ -82,32 +83,47 @@ class mail_notification(osv.Model):
|
|||
if context.get('mail_noemail') or not partner_ids:
|
||||
return True
|
||||
|
||||
mail_mail_obj = self.pool.get('mail.mail')
|
||||
msg_obj = self.pool.get('mail.message')
|
||||
msg = msg_obj.browse(cr, uid, msg_id, context=context)
|
||||
mail_mail = self.pool.get('mail.mail')
|
||||
msg = self.pool.get('mail.message').browse(cr, uid, msg_id, context=context)
|
||||
|
||||
# add signature
|
||||
body_html = msg.body
|
||||
signature = msg.author_id and msg.author_id.user_ids[0].signature or ''
|
||||
if signature:
|
||||
signature_block = u'\n<pre>%s</pre>\n' % signature
|
||||
insertion_point = body_html.find('</html>')
|
||||
if insertion_point > -1:
|
||||
body_html = body_html[:insertion_point] + signature_block + body_html[insertion_point:]
|
||||
else:
|
||||
body_html += signature_block
|
||||
|
||||
towrite = {
|
||||
'mail_message_id': msg.id,
|
||||
'email_to': [],
|
||||
'user_signature': True,
|
||||
'auto_delete': True,
|
||||
'auto_delete': False,
|
||||
'body_html': body_html,
|
||||
}
|
||||
|
||||
for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids, context=context):
|
||||
# Do not send an email to the writer
|
||||
if partner.user_id.id == uid:
|
||||
if partner.user_ids and partner.user_ids[0].id == uid:
|
||||
continue
|
||||
# Do not send to partners without email address defined
|
||||
if not partner.email:
|
||||
continue
|
||||
# Partner does not want to receive any emails
|
||||
if partner.notification_email_send=='none' or not partner.email:
|
||||
if partner.notification_email_send == 'none':
|
||||
continue
|
||||
# Partner want to receive only emails and comments
|
||||
if partner.notification_email_send=='comment' and msg.type not in ('email','comment'):
|
||||
# Partner wants to receive only emails and comments
|
||||
if partner.notification_email_send == 'comment' and msg.type not in ('email', 'comment'):
|
||||
continue
|
||||
# Partner wants to receive only emails
|
||||
if partner.notification_email_send == 'email' and msg.type != 'email':
|
||||
continue
|
||||
|
||||
if partner.email not in towrite['email_to']:
|
||||
towrite['email_to'].append(partner.email)
|
||||
towrite['email_to'] = ', '.join(towrite['email_to'])
|
||||
|
||||
email_notif_id = mail_mail_obj.create(cr, uid, towrite, context=context)
|
||||
mail_mail_obj.send(cr, uid, [email_notif_id], context=context)
|
||||
if towrite['email_to']:
|
||||
towrite['email_to'] = ', '.join(towrite['email_to'])
|
||||
email_notif_id = mail_mail.create(cr, uid, towrite, context=context)
|
||||
mail_mail.send(cr, uid, [email_notif_id], context=context)
|
||||
return True
|
||||
|
|
|
@ -39,6 +39,8 @@ class mail_mail(osv.Model):
|
|||
_name = 'mail.mail'
|
||||
_description = 'Outgoing Mails'
|
||||
_inherits = {'mail.message': 'mail_message_id'}
|
||||
_order = 'id desc'
|
||||
|
||||
_columns = {
|
||||
'mail_message_id': fields.many2one('mail.message', 'Message', required=True, ondelete='cascade'),
|
||||
'mail_server_id': fields.many2one('ir.mail_server', 'Outgoing mail server', readonly=1),
|
||||
|
@ -51,13 +53,12 @@ class mail_mail(osv.Model):
|
|||
], 'Status', readonly=True),
|
||||
'auto_delete': fields.boolean('Auto Delete',
|
||||
help="Permanently delete this email after sending it, to save space"),
|
||||
'user_signature': fields.boolean('Add Signature',
|
||||
help="If checked, the user's signature will be appended to the text version of the message"),
|
||||
'references': fields.text('References', help='Message references, such as identifiers of previous messages', readonly=1),
|
||||
'email_from': fields.char('From', size=128, help='Message sender, taken from user preferences.'),
|
||||
'email_from': fields.char('From', help='Message sender, taken from user preferences.'),
|
||||
'email_to': fields.text('To', help='Message recipients'),
|
||||
'email_cc': fields.char('Cc', size=256, help='Carbon copy message recipients'),
|
||||
'reply_to':fields.char('Reply-To', size=256, help='Preferred response address for the message'),
|
||||
'email_cc': fields.char('Cc', help='Carbon copy message recipients'),
|
||||
'reply_to':fields.char('Reply-To', help='Preferred response address for the message'),
|
||||
'body_html': fields.text('Rich-text Contents', help="Rich-text/HTML message"),
|
||||
}
|
||||
|
||||
def _get_default_from(self, cr, uid, context=None):
|
||||
|
@ -71,7 +72,6 @@ class mail_mail(osv.Model):
|
|||
_defaults = {
|
||||
'state': 'outgoing',
|
||||
'email_from': lambda self, cr, uid, ctx=None: self._get_default_from(cr, uid, ctx),
|
||||
'user_signature': False,
|
||||
}
|
||||
|
||||
def mark_outgoing(self, cr, uid, ids, context=None):
|
||||
|
@ -145,19 +145,13 @@ class mail_mail(osv.Model):
|
|||
ir_mail_server = self.pool.get('ir.mail_server')
|
||||
for message in self.browse(cr, uid, ids, context=context):
|
||||
try:
|
||||
body = message.body
|
||||
body = message.body_html
|
||||
|
||||
# handle attachments
|
||||
attachments = []
|
||||
for attach in message.attachment_ids:
|
||||
attachments.append((attach.datas_fname, base64.b64decode(attach.datas)))
|
||||
|
||||
# add signature if flag set
|
||||
if message.user_signature:
|
||||
signature = message.author_id and message.author_id.user_ids[0].signature or ''
|
||||
insertion_point = body.find('</html>')
|
||||
body = body[:insertion_point] + signature + body[:insertion_point]
|
||||
|
||||
# no subject, res_id, model: '<Author> posted on <Resource>'
|
||||
if not message.subject and message.model and message.res_id:
|
||||
subject = '%s posted on %s' % (message.author_id.name, message.record_name)
|
||||
|
@ -171,11 +165,11 @@ class mail_mail(osv.Model):
|
|||
# build an RFC2822 email.message.Message object and send it
|
||||
# without queuing
|
||||
msg = ir_mail_server.build_email(
|
||||
email_from = message.email_from,
|
||||
email_to = tools.email_split(message.email_to),
|
||||
subject = subject,
|
||||
body = body,
|
||||
body_alternative = body_alternative,
|
||||
email_from = message.email_from,
|
||||
email_to = tools.email_split(message.email_to),
|
||||
email_cc = tools.email_split(message.email_cc),
|
||||
reply_to = message.reply_to,
|
||||
attachments = attachments,
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</group>
|
||||
<notebook>
|
||||
<page string="Body">
|
||||
<field name="body"/>
|
||||
<field name="body_html"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</page>
|
||||
|
|
|
@ -323,34 +323,33 @@ class mail_message(osv.Model):
|
|||
values['message_id'] = tools.generate_tracking_message_id('%(model)s-%(res_id)s'% values)
|
||||
newid = super(mail_message, self).create(cr, uid, values, context)
|
||||
self.check(cr, uid, [newid], mode='create', context=context)
|
||||
self.notify(cr, uid, newid, values.get('subtype_id',False), context=context)
|
||||
self.notify(cr, uid, newid, context=context)
|
||||
return newid
|
||||
|
||||
def notify(self, cr, uid, newid,subtype_id=None, context=None):
|
||||
def notify(self, cr, uid, newid, context=None):
|
||||
""" Add the related record followers to the destination partner_ids.
|
||||
Call mail_notification.notify to manage the email sending
|
||||
"""
|
||||
followers_obj = self.pool.get("mail.followers")
|
||||
message = self.browse(cr, uid, newid, context=context)
|
||||
partners_to_notify = []
|
||||
partners_to_notify = set([])
|
||||
# add all partner_ids of the message
|
||||
is_subtype = False
|
||||
if message.partner_ids:
|
||||
for partner in message.partner_ids:
|
||||
if partner.id not in partners_to_notify:
|
||||
if subtype_id:
|
||||
if subtype_id in [subtype.id for subtype in subscription.subtype_ids]:
|
||||
is_subtype = False
|
||||
partners_to_notify.append(partner.id)
|
||||
else:
|
||||
partners_to_notify.append(partner.id)
|
||||
# add all followers and set them as partner_ids
|
||||
partners_to_notify |= set(partner.id for partner in message.partner_ids)
|
||||
# add all followers and set add them in partner_ids
|
||||
if message.model and message.res_id:
|
||||
modobj = self.pool.get(message.model)
|
||||
for follower in modobj.browse(cr, uid, message.res_id, context=context).message_follower_ids:
|
||||
if(is_subtype):
|
||||
partners_to_notify.append(follower.id)
|
||||
self.write(cr, uid, [newid], {'partner_ids': [(4, follower.id)]}, context=context)
|
||||
self.pool.get('mail.notification').notify(cr, uid, partners_to_notify, newid, context=context)
|
||||
record = self.pool.get(message.model).browse(cr, uid, message.res_id, context=context)
|
||||
extra_notified = set(partner.id for partner in record.message_follower_ids)
|
||||
missing_notified = extra_notified - partners_to_notify
|
||||
missing_follow_ids = []
|
||||
if message.subtype_id:
|
||||
for p_id in missing_notified:
|
||||
follow_ids = followers_obj.search(cr, uid, [('partner_id','=',p_id),('subtype_ids','in',[message.subtype_id.id]),('res_model','=',message.model),('res_id','=',message.res_id)])
|
||||
if follow_ids and len(follow_ids):
|
||||
missing_follow_ids.append(p_id)
|
||||
message.write({'partner_ids': [(4, p_id) for p_id in missing_follow_ids]})
|
||||
partners_to_notify |= extra_notified
|
||||
self.pool.get('mail.notification').notify(cr, uid, list(partners_to_notify), newid, context=context)
|
||||
|
||||
def read(self, cr, uid, ids, fields_to_read=None, context=None, load='_classic_read'):
|
||||
self.check(cr, uid, ids, 'read', context=context)
|
||||
|
|
|
@ -103,33 +103,25 @@ class many2many_reference(fields.many2many):
|
|||
return super(many2many_reference, self).set(cr, model, id, name, values, user, context)
|
||||
|
||||
class mail_thread(osv.Model):
|
||||
'''Mixin model, meant to be inherited by any model that needs to
|
||||
act as a discussion topic on which messages can be attached.
|
||||
Public methods are prefixed with ``message_`` in order to avoid
|
||||
name collisions with methods of the models that will inherit
|
||||
from this mixin.
|
||||
''' mail_thread model is meant to be inherited by any model that needs to
|
||||
act as a discussion topic on which messages can be attached. Public
|
||||
methods are prefixed with ``message_`` in order to avoid name
|
||||
collisions with methods of the models that will inherit from this class.
|
||||
|
||||
``mail.thread`` is designed to work without adding any field
|
||||
to the extended models. All functionalities and expected behavior
|
||||
are managed by mail.thread, using model name and record ids.
|
||||
A widget has been designed for the 6.1 and following version of OpenERP
|
||||
web-client. However, due to technical limitations, ``mail.thread``
|
||||
adds a simulated one2many field, to display the web widget by
|
||||
overriding the default field displayed. Using this field
|
||||
is not recommanded has it will disappeear in future version
|
||||
of OpenERP, leading to a pure mixin class.
|
||||
``mail.thread`` defines fields used to handle and display the
|
||||
communication history. ``mail.thread`` also manages followers of
|
||||
inheriting classes. All features and expected behavior are managed
|
||||
by mail.thread. Widgets has been designed for the 7.0 and following
|
||||
versions of OpenERP.
|
||||
|
||||
Inheriting classes are not required to implement any method, as the
|
||||
default implementation will work for any model. However it is common
|
||||
to override at least the ``message_new`` and ``message_update``
|
||||
methods (calling ``super``) to add model-specific behavior at
|
||||
creation and update of a thread.
|
||||
|
||||
#TODO: UPDATE WITH SUBTYPE / NEW FOLLOW MECHANISM
|
||||
Inheriting classes are not required to implement any method, as the
|
||||
default implementation will work for any model. However it is common
|
||||
to override at least the ``message_new`` and ``message_update``
|
||||
methods (calling ``super``) to add model-specific behavior at
|
||||
creation and update of a thread when processing incoming emails.
|
||||
'''
|
||||
_name = 'mail.thread'
|
||||
_description = 'Email Thread'
|
||||
# TODO: may be we should make it _inherit ir.needaction
|
||||
|
||||
def _get_message_data(self, cr, uid, ids, name, args, context=None):
|
||||
res = dict( (id, dict(message_unread=False, message_summary='')) for id in ids)
|
||||
|
@ -179,8 +171,7 @@ class mail_thread(osv.Model):
|
|||
string='Related Messages',
|
||||
help="All messages related to the current document."),
|
||||
'message_unread': fields.function(_get_message_data, fnct_search=_search_unread,
|
||||
string='Has Unread Messages',
|
||||
type='boolean',
|
||||
string='Has Unread Messages', type='boolean',
|
||||
help="When checked, new messages require your attention.",
|
||||
multi="_get_message_data"),
|
||||
'message_summary': fields.function(_get_message_data, method=True,
|
||||
|
@ -221,7 +212,6 @@ class mail_thread(osv.Model):
|
|||
if self._needaction:
|
||||
return [('message_unread', '=', True)]
|
||||
return []
|
||||
|
||||
#------------------------------------------------------
|
||||
# Mail gateway
|
||||
#------------------------------------------------------
|
||||
|
@ -447,7 +437,6 @@ class mail_thread(osv.Model):
|
|||
self.write(cr, uid, ids, update_vals, context=context)
|
||||
return True
|
||||
|
||||
|
||||
def _message_extract_payload(self, message, save_original=False):
|
||||
"""Extract body as HTML and attachments from the mail message"""
|
||||
attachments = []
|
||||
|
@ -475,16 +464,25 @@ class mail_thread(osv.Model):
|
|||
# plain text is wrapped in <pre/> to preserve formatting
|
||||
text = u'<pre>%s</pre>' % tools.ustr(part.get_payload(decode=True),
|
||||
encoding, errors='replace')
|
||||
body = body[:insertion_point] + text + body[:insertion_point]
|
||||
if insertion_point != -1:
|
||||
body = body[:insertion_point] + text + body[insertion_point:]
|
||||
else:
|
||||
body += text
|
||||
# 3) text/html -> raw
|
||||
elif part.get_content_type() == 'text/html':
|
||||
html = tools.ustr(part.get_payload(decode=True), encoding, errors='replace')
|
||||
if alternative:
|
||||
body = html
|
||||
# force </html> tag to lowercase, for easier matching
|
||||
body = re.sub(r'(?i)</html>', r'</html>', body)
|
||||
else:
|
||||
html = re.sub('(?i)</?html>', '', html)
|
||||
# strip enclosing html/body tags and append to existing body
|
||||
html = re.sub(r'(?i)(</?html>|</?body>)', '', html)
|
||||
insertion_point = body.find('</html>')
|
||||
body = body[:insertion_point] + text + body[:insertion_point]
|
||||
if insertion_point != -1:
|
||||
body = body[:insertion_point] + html + body[insertion_point:]
|
||||
else:
|
||||
body += html
|
||||
# 4) Anything else -> attachment
|
||||
else:
|
||||
attachments.append((filename or 'attachment', part.get_payload(decode=True)))
|
||||
|
@ -510,8 +508,7 @@ class mail_thread(osv.Model):
|
|||
'from': from,
|
||||
'to': to,
|
||||
'cc': cc,
|
||||
'body': unified_body,
|
||||
'body_html': html_body, --> to remove
|
||||
'body': unified_body,
|
||||
'attachments': [('file1', 'bytes'),
|
||||
('file2', 'bytes')}
|
||||
}
|
||||
|
@ -581,27 +578,27 @@ class mail_thread(osv.Model):
|
|||
|
||||
def message_post(self, cr, uid, thread_id, body='', subject=False,
|
||||
msg_type='notification', parent_id=False, attachments=None, subtype='other', context=None, **kwargs):
|
||||
"""Post a new message in an existing message thread, returning the new mail.message ID.
|
||||
Extra keyword arguments will be used as default column values for the new
|
||||
mail.message record.
|
||||
|
||||
:param int thread_id: thread ID to post into, or list with one ID
|
||||
:param str body: body of the message, usually raw HTML
|
||||
:param str subject: optional subject
|
||||
:param str msg_type: message type, out of the possible values for mail_message.type,
|
||||
currently one of ``email, 'comment', 'notification'``.
|
||||
:param int parent_id: optional ID of parent message in this thread
|
||||
:param tuple(str,str) attachments: list of attachment tuples in the form ``(name,content)``
|
||||
:return: ID of newly created mail.message
|
||||
""" Post a new message in an existing message thread, returning the new
|
||||
mail.message ID. Extra keyword arguments will be used as default
|
||||
column values for the new mail.message record.
|
||||
:param int thread_id: thread ID to post into, or list with one ID
|
||||
:param str body: body of the message, usually raw HTML that will
|
||||
be sanitized
|
||||
:param str subject: optional subject
|
||||
:param str msg_type: mail_message.type
|
||||
:param int parent_id: optional ID of parent message in this thread
|
||||
:param tuple(str,str) attachments: list of attachment tuples in the form
|
||||
``(name,content)``, where content is NOT base64 encoded
|
||||
:return: ID of newly created mail.message
|
||||
"""
|
||||
context = context or {}
|
||||
attachments = attachments or {}
|
||||
attachments = attachments or []
|
||||
assert (not thread_id) or isinstance(thread_id, (int,long)) or \
|
||||
(isinstance(thread_id, (list, tuple)) and len(thread_id) == 1), "Invalid thread_id"
|
||||
if isinstance(thread_id, (list, tuple)):
|
||||
thread_id = thread_id and thread_id[0]
|
||||
|
||||
to_attach = []
|
||||
attachment_ids = []
|
||||
for name, content in attachments:
|
||||
if isinstance(content, unicode):
|
||||
content = content.encode('utf-8')
|
||||
|
@ -613,7 +610,8 @@ class mail_thread(osv.Model):
|
|||
'res_model': context.get('thread_model') or self._name,
|
||||
'res_id': thread_id,
|
||||
}
|
||||
to_attach.append((0,0, data_attach))
|
||||
attachment_ids.append((0,0, data_attach))
|
||||
|
||||
values = kwargs
|
||||
subtype_obj = self.pool.get('mail.message.subtype')
|
||||
if subtype:
|
||||
|
@ -629,7 +627,7 @@ class mail_thread(osv.Model):
|
|||
'subject': subject,
|
||||
'type': msg_type,
|
||||
'parent_id': parent_id,
|
||||
'attachment_ids': to_attach,
|
||||
'attachment_ids': attachment_ids,
|
||||
})
|
||||
for x in ('from','to','cc'): values.pop(x, None) # Avoid warnings
|
||||
return self.pool.get('mail.message').create(cr, uid, values, context=context)
|
||||
|
@ -652,7 +650,6 @@ class mail_thread(osv.Model):
|
|||
:param partner_ids: a list of partner_ids to subscribe
|
||||
:param return: new value of followers, for Chatter
|
||||
"""
|
||||
print "message_subscribe",subtype_ids
|
||||
self.write(cr, uid, ids, {'message_follower_ids': [(4, pid) for pid in partner_ids]}, context=context)
|
||||
if not subtype_ids:
|
||||
subtype_obj = self.pool.get('mail.message.subtype')
|
||||
|
@ -714,19 +711,8 @@ class mail_thread(osv.Model):
|
|||
return True
|
||||
|
||||
def message_subscribe_udpate_subtypes(self, cr, uid, ids, user_id, subtype_ids,context=None):
|
||||
subscription_obj = self.pool.get('mail.followers')
|
||||
subscription_ids = subscription_obj.search(cr, uid, [('res_model', '=', self._name), ('res_id', 'in', ids)])
|
||||
return subscription_obj.write(cr, uid, subscription_ids, {'subtype_ids': [(6, 0 , subtype_ids)]}, context = context) #overright or add new one
|
||||
followers_obj = self.pool.get('mail.followers')
|
||||
followers_ids = followers_obj.search(cr, uid, [('res_model', '=', self._name), ('res_id', 'in', ids)])
|
||||
return followers_obj.write(cr, uid, followers_ids, {'subtype_ids': [(6, 0 , subtype_ids)]}, context = context) #overright or add new one
|
||||
|
||||
def message_subscription_remove_subtype(self, cr, uid, ids, user_id, subtype_id):
|
||||
subscription_obj = self.pool.get('mail.followers')
|
||||
subscription_ids = subscription_obj.search(cr, uid, [('res_model', '=', self._name), ('res_id', 'in', ids)])
|
||||
return subscription_obj.write(cr, uid, subscription_ids, {'subtype_ids': [3, subtype_id]}, context = context) # remove link
|
||||
|
||||
def message_subscription_remove_subtype_name(self, cr, uid, ids, user_id, subtype_name):
|
||||
subtype_obj = self.pool.get('mail.message.subtype')
|
||||
subtype_ids = subtype_obj.search(cr, uid, [('name', '=', subtype_name), ('model_ids', '=', self._name)])
|
||||
if not subtype_ids:
|
||||
return False
|
||||
self.message_subscription_remove_subtype(cr, uid, ids, user_id, subtype_ids)
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -29,7 +29,8 @@ class res_partner_mail(osv.Model):
|
|||
_columns = {
|
||||
'notification_email_send': fields.selection([
|
||||
('all', 'All feeds'),
|
||||
('comment', 'Comments and emails'),
|
||||
('comment', 'Comments and Emails'),
|
||||
('email', 'Emails only'),
|
||||
('none', 'Never')
|
||||
], 'Receive Feeds by Email', required=True,
|
||||
help="Choose in which case you want to receive an email when you "\
|
||||
|
|
|
@ -40,11 +40,7 @@ openerp_mail_followers = function(session, mail) {
|
|||
this._check_visibility();
|
||||
this.fetch_subtype();
|
||||
this.$el.find('ul.oe_mail_recthread_subtype').click(function () {self.update_subtype();})
|
||||
this.$el.find('button.oe_mail_button_follow').click(function () {
|
||||
self.do_follow();
|
||||
self.fetch_subtype();
|
||||
})
|
||||
this.$el.find('button.oe_mail_button_follow').click(function () { self.do_follow(); })
|
||||
this.$el.find('button.oe_mail_button_follow').click(function () { self.do_follow(); self.fetch_subtype();})
|
||||
.mouseover(function () { $(this).html('Follow').removeClass('oe_mail_button_mouseout').addClass('oe_mail_button_mouseover'); })
|
||||
.mouseleave(function () { $(this).html('Not following').removeClass('oe_mail_button_mouseover').addClass('oe_mail_button_mouseout'); });
|
||||
this.$el.find('button.oe_mail_button_unfollow').click(function () { self.do_unfollow(); })
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
<button type="button" class="oe_mail_button_follow oe_mail_button_mouseout">Not following</button>
|
||||
<button type="button" class="oe_mail_button_unfollow oe_mail_button_mouseout">Following</button>
|
||||
</div>
|
||||
<ul class="oe_mail_recthread_subtype"></ul>
|
||||
<div class="oe_mail_recthread_followers">
|
||||
<t t-if="widget.options.title">
|
||||
<h4><t t-raw="widget.options.title"/></h4>
|
||||
</t>
|
||||
<ul class="oe_mail_recthread_subtype"></ul>
|
||||
<ul class="oe_mail_followers_display"></ul>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -63,9 +63,16 @@ Content-Transfer-Encoding: quoted-printable
|
|||
------=_Part_4200734_24778174.1344608186754--
|
||||
"""
|
||||
|
||||
|
||||
class test_mail(common.TransactionCase):
|
||||
|
||||
def _mock_smtp_gateway(self, *args, **kwargs):
|
||||
return True
|
||||
|
||||
def _mock_build_email(self, *args, **kwargs):
|
||||
self._build_email_args = args
|
||||
self._build_email_kwargs = kwargs
|
||||
return self.build_email_real(*args, **kwargs)
|
||||
|
||||
def setUp(self):
|
||||
super(test_mail, self).setUp()
|
||||
self.ir_model = self.registry('ir.model')
|
||||
|
@ -80,7 +87,9 @@ class test_mail(common.TransactionCase):
|
|||
self.res_partner = self.registry('res.partner')
|
||||
|
||||
# Install mock SMTP gateway
|
||||
self.registry('ir.mail_server').send_email = lambda *a,**kwargs: True
|
||||
self.build_email_real = self.registry('ir.mail_server').build_email
|
||||
self.registry('ir.mail_server').build_email = self._mock_build_email
|
||||
self.registry('ir.mail_server').send_email = self._mock_smtp_gateway
|
||||
|
||||
# groups@.. will cause the creation of new mail groups
|
||||
self.mail_group_model_id = self.ir_model.search(self.cr, self.uid, [('model','=', 'mail.group')])[0]
|
||||
|
@ -88,7 +97,8 @@ class test_mail(common.TransactionCase):
|
|||
'alias_model_id': self.mail_group_model_id})
|
||||
|
||||
# create a 'pigs' group that will be used through the various tests
|
||||
self.group_pigs_id = self.mail_group.create(self.cr, self.uid, {'name': 'pigs'})
|
||||
self.group_pigs_id = self.mail_group.create(self.cr, self.uid,
|
||||
{'name': 'Pigs', 'description': 'Fans of Pigs, unite !'})
|
||||
|
||||
def test_00_message_process(self):
|
||||
cr, uid = self.cr, self.uid
|
||||
|
@ -141,69 +151,47 @@ class test_mail(common.TransactionCase):
|
|||
{'res_model': 'mail.group', 'res_id': group_dummy_id, 'partner_id': partner_bert_id})
|
||||
|
||||
# Pigs just created: should be only Admin as follower
|
||||
follower_ids = [follower.id for follower in group_pigs.message_follower_ids]
|
||||
self.assertTrue(len(follower_ids) == 1,
|
||||
'Newly created group should have only 1 follower')
|
||||
self.assertTrue(user_admin.partner_id.id in follower_ids,
|
||||
'Admin should be the only Pigs group follower')
|
||||
follower_ids = set([follower.id for follower in group_pigs.message_follower_ids])
|
||||
self.assertEqual(follower_ids, set([user_admin.partner_id.id]), 'Admin should be the only Pigs fan')
|
||||
|
||||
# Subscribe Bert through a '4' command
|
||||
group_pigs.write({'message_follower_ids': [(4, partner_bert_id)]})
|
||||
group_pigs.refresh()
|
||||
follower_ids = [follower.id for follower in group_pigs.message_follower_ids]
|
||||
self.assertTrue(len(follower_ids) == 2,
|
||||
'Pigs group should have 2 followers after linking Bert')
|
||||
self.assertTrue(all(id in follower_ids for id in [partner_bert_id, user_admin.partner_id.id]),
|
||||
'Bert and Admin should be the 2 Pigs group followers')
|
||||
follower_ids = set([follower.id for follower in group_pigs.message_follower_ids])
|
||||
self.assertEqual(follower_ids, set([partner_bert_id, user_admin.partner_id.id]), 'Bert and Admin should be the only Pigs fans')
|
||||
|
||||
# Unsubscribe Bert through a '3' command
|
||||
group_pigs.write({'message_follower_ids': [(3, partner_bert_id)]})
|
||||
group_pigs.refresh()
|
||||
follower_ids = [follower.id for follower in group_pigs.message_follower_ids]
|
||||
self.assertTrue(len(follower_ids) == 1,
|
||||
'Pigs group should have 1 follower after unlinking Bert')
|
||||
self.assertTrue(all(id in follower_ids for id in [user_admin.partner_id.id]),
|
||||
'Admin should be the only Pigs group follower')
|
||||
follower_ids = set([follower.id for follower in group_pigs.message_follower_ids])
|
||||
self.assertEqual(follower_ids, set([user_admin.partner_id.id]), 'Admin should be the only Pigs fan')
|
||||
|
||||
# Set followers through a '6' command
|
||||
group_pigs.write({'message_follower_ids': [(6, 0, [partner_bert_id])]})
|
||||
group_pigs.refresh()
|
||||
follower_ids = [follower.id for follower in group_pigs.message_follower_ids]
|
||||
self.assertTrue(len(follower_ids) == 1,
|
||||
'Pigs group should have 1 follower after replacing followers')
|
||||
self.assertTrue(follower_ids == [partner_bert_id],
|
||||
'Bert should be the only Pigs group follower')
|
||||
follower_ids = set([follower.id for follower in group_pigs.message_follower_ids])
|
||||
self.assertEqual(follower_ids, set([partner_bert_id]), 'Bert should be the only Pigs fan')
|
||||
|
||||
# Add a follower created on the fly through a '0' command
|
||||
group_pigs.write({'message_follower_ids': [(0, 0, {'name': 'Patrick Fiori'})]})
|
||||
partner_patrick_id = self.res_partner.search(cr, uid, [('name', '=', 'Patrick Fiori')])[0]
|
||||
group_pigs.refresh()
|
||||
follower_ids = [follower.id for follower in group_pigs.message_follower_ids]
|
||||
self.assertTrue(len(follower_ids) == 2,
|
||||
'Pigs group should have 2 followers after linking to new partner')
|
||||
self.assertTrue(all(id in follower_ids for id in [partner_bert_id, partner_patrick_id]),
|
||||
'Bert and Patrick should be Pigs group followers')
|
||||
follower_ids = set([follower.id for follower in group_pigs.message_follower_ids])
|
||||
self.assertEqual(follower_ids, set([partner_bert_id, partner_patrick_id]), 'Bert and Patrick should be the only Pigs fans')
|
||||
|
||||
# Finally, unlink through a '5' command
|
||||
group_pigs.write({'message_follower_ids': [(5, 0)]})
|
||||
group_pigs.refresh()
|
||||
follower_ids = [follower.id for follower in group_pigs.message_follower_ids]
|
||||
self.assertTrue(len(follower_ids) == 0,
|
||||
'Pigs group should not have followers anymore')
|
||||
follower_ids = set([follower.id for follower in group_pigs.message_follower_ids])
|
||||
self.assertFalse(follower_ids, 'Pigs group should not have fans anymore')
|
||||
|
||||
# Test dummy data has not been altered
|
||||
fol_obj_ids = self.mail_followers.search(cr, uid, [('res_model', '=', 'mail.thread'), ('res_id', '=', self.group_pigs_id)])
|
||||
follower_ids = [follower.partner_id.id for follower in self.mail_followers.browse(cr, uid, fol_obj_ids)]
|
||||
self.assertTrue(len(follower_ids) == 1,
|
||||
'mail.thread dummy data should have 1 follower')
|
||||
self.assertTrue(follower_ids[0] == partner_bert_id,
|
||||
'Bert should be the follower of dummy mail.thread data')
|
||||
follower_ids = set([follower.partner_id.id for follower in self.mail_followers.browse(cr, uid, fol_obj_ids)])
|
||||
self.assertEqual(follower_ids, set([partner_bert_id]), 'Bert should be the follower of dummy mail.thread data')
|
||||
fol_obj_ids = self.mail_followers.search(cr, uid, [('res_model', '=', 'mail.group'), ('res_id', '=', group_dummy_id)])
|
||||
follower_ids = [follower.partner_id.id for follower in self.mail_followers.browse(cr, uid, fol_obj_ids)]
|
||||
self.assertTrue(len(follower_ids) == 2,
|
||||
'mail.group dummy data should have 2 followers')
|
||||
self.assertTrue(all(id in follower_ids for id in [partner_bert_id, user_admin.partner_id.id]),
|
||||
'Bert and Admin should be the followers of dummy mail.group data')
|
||||
follower_ids = set([follower.partner_id.id for follower in self.mail_followers.browse(cr, uid, fol_obj_ids)])
|
||||
self.assertEqual(follower_ids,set([partner_bert_id, user_admin.partner_id.id]), 'Bert and Admin should be the followers of dummy mail.group data')
|
||||
|
||||
def test_11_message_followers(self):
|
||||
""" Tests designed for the subscriber API. """
|
||||
|
@ -218,93 +206,195 @@ class test_mail(common.TransactionCase):
|
|||
# Subscribe Raoul twice (niak niak) through message_subscribe_users
|
||||
group_pigs.message_subscribe_users([user_raoul_id, user_raoul_id])
|
||||
group_pigs.refresh()
|
||||
follower_ids = [follower.id for follower in group_pigs.message_follower_ids]
|
||||
self.assertTrue(len(follower_ids) == 2,
|
||||
'Pigs group should have 2 followers after having subscribed Raoul. Subscribing twice '\
|
||||
'the same user should create only one follower.')
|
||||
self.assertTrue(all(id in follower_ids for id in [user_raoul.partner_id.id, user_admin.partner_id.id]),
|
||||
'Admin and Raoul should be the 2 Pigs group followers')
|
||||
follower_ids = set([follower.id for follower in group_pigs.message_follower_ids])
|
||||
self.assertEqual(follower_ids, set([user_raoul.partner_id.id, user_admin.partner_id.id]), 'Admin and Raoul should be the only 2 Pigs group followers')
|
||||
|
||||
# Unsubscribe Raoul twice through message_unsubscribe_users
|
||||
group_pigs.message_unsubscribe_users([user_raoul_id, user_raoul_id])
|
||||
group_pigs.refresh()
|
||||
follower_ids = [follower.id for follower in group_pigs.message_follower_ids]
|
||||
self.assertTrue(len(follower_ids) == 1,
|
||||
'Pigs group should have 1 follower after unsubscribing Raoul')
|
||||
self.assertTrue(all(id in follower_ids for id in [user_admin.partner_id.id]),
|
||||
'Admin the only Pigs group followers')
|
||||
follower_ids = set([follower.id for follower in group_pigs.message_follower_ids])
|
||||
self.assertEqual(follower_ids, set([user_admin.partner_id.id]), 'Admin must be the only Pigs fan')
|
||||
|
||||
def test_20_message_post_and_compose(self):
|
||||
""" Tests designed for message_post and the mail.compose.message wizard. """
|
||||
def test_20_message_post(self):
|
||||
""" Tests designed for message_post. """
|
||||
cr, uid = self.cr, self.uid
|
||||
self.res_users.write(cr, uid, [uid], {'signature': 'Admin', 'email': 'a@a'})
|
||||
user_admin = self.res_users.browse(cr, uid, uid)
|
||||
group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
|
||||
|
||||
# 0 - Admin
|
||||
p_a_id = user_admin.partner_id.id
|
||||
# 1 - Bert Tartopoils, with email, should receive emails for comments and emails
|
||||
p_b_id = self.res_partner.create(cr, uid, {'name': 'Bert Tartopoils', 'email': 'b@b'})
|
||||
# 2 - Carine Poilvache, with email, should never receive emails
|
||||
p_c_id = self.res_partner.create(cr, uid, {'name': 'Carine Poilvache', 'email': 'c@c', 'notification_email_send': 'email'})
|
||||
# 3 - Dédé Grosbedon, without email, to test email verification; should receive emails for every message
|
||||
p_d_id = self.res_partner.create(cr, uid, {'name': 'Dédé Grosbedon', 'notification_email_send': 'all'})
|
||||
|
||||
# Subscribe #1, #2
|
||||
group_pigs.message_subscribe([p_b_id, p_c_id])
|
||||
|
||||
# Mail data
|
||||
_subject = 'Pigs'
|
||||
_mail_subject = '%s posted on %s' % (user_admin.name, group_pigs.name)
|
||||
_body1 = 'Pigs rules'
|
||||
_mail_body1 = 'Pigs rules\n<pre>Admin</pre>\n'
|
||||
_mail_bodyalt1 = 'Pigs rules\nAdmin'
|
||||
_body2 = '<html>Pigs rules</html>'
|
||||
_mail_body2 = '<html>Pigs rules\n<pre>Admin</pre>\n</html>'
|
||||
_mail_bodyalt2 = 'Pigs rules\nAdmin\n'
|
||||
|
||||
# Post comment with body and subject, comment preference
|
||||
msg_id = self.mail_group.message_post(cr, uid, self.group_pigs_id, body=_body1, subject=_subject, msg_type='comment')
|
||||
# Fetch: created mail_message, mail_mail, sent_email
|
||||
message = self.mail_message.browse(cr, uid, msg_id)
|
||||
mail_ids = self.mail_mail.search(cr, uid, [], limit=1)
|
||||
mail = self.mail_mail.browse(cr, uid, mail_ids[0])
|
||||
sent_email = self._build_email_kwargs
|
||||
|
||||
# Test: mail_message: subject is _subject, body is _body1 (no formatting done)
|
||||
self.assertEqual(message.subject, _subject, 'mail.message subject incorrect')
|
||||
self.assertEqual(message.body, _body1, 'mail.message body incorrect')
|
||||
# Test: mail_mail: subject is _subject, body_html is _mail_body1 (signature appended)
|
||||
self.assertEqual(mail.subject, _subject, 'mail.mail subject incorrect')
|
||||
self.assertEqual(mail.body_html, _mail_body1, 'mail.mail body_html incorrect')
|
||||
self.assertEqual(mail.mail_message_id.id, msg_id, 'mail_mail.mail_message_id is not the id of its related mail_message)')
|
||||
# Test: sent_email: email send by server: correct subject and body
|
||||
self.assertEqual(sent_email['subject'], _subject, 'sent_email subject incorrect')
|
||||
self.assertEqual(sent_email['body'], _mail_body1, 'sent_email body incorrect')
|
||||
self.assertEqual(sent_email['body_alternative'], _mail_bodyalt1, 'sent_email body_alternative is incorrect')
|
||||
# Test: mail_message: partner_ids = group followers
|
||||
message_pids = set([partner.id for partner in message.partner_ids])
|
||||
test_pids = set([p_a_id, p_b_id, p_c_id])
|
||||
self.assertEqual(test_pids, message_pids, 'mail.message partners incorrect')
|
||||
# Test: notification linked to this message = group followers = partner_ids
|
||||
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', message.id)])
|
||||
notif_pids = set([notif.partner_id.id for notif in self.mail_notification.browse(cr, uid, notif_ids)])
|
||||
self.assertEqual(notif_pids, test_pids, 'mail.message notification partners incorrect')
|
||||
# Test: sent_email: email_to should contain b@b, not c@c (pref email), not a@a (writer)
|
||||
self.assertEqual(sent_email['email_to'], ['b@b'], 'sent_email email_to is incorrect')
|
||||
|
||||
# New post: test automatic subject, signature in html, add a partner, email preference, parent_id previous message
|
||||
msg_id2 = self.mail_group.message_post(cr, uid, self.group_pigs_id, body=_body2, msg_type='email', partner_ids=[(6, 0, [p_d_id])], parent_id=msg_id)
|
||||
# Fetch: created mail_message, mail_mail, sent_email
|
||||
message = self.mail_message.browse(cr, uid, msg_id2)
|
||||
mail_ids = self.mail_mail.search(cr, uid, [], limit=1)
|
||||
mail = self.mail_mail.browse(cr, uid, mail_ids[0])
|
||||
sent_email = self._build_email_kwargs
|
||||
|
||||
# Test: mail_message: subject is False, body is _body1 (no formatting done), parent_id is msg_id
|
||||
self.assertEqual(message.subject, False, 'mail.message subject incorrect')
|
||||
self.assertEqual(message.body, _body2, 'mail.message body incorrect')
|
||||
self.assertEqual(message.parent_id.id, msg_id, 'mail.message parent_id incorrect')
|
||||
# Test: mail_mail: subject is False, body_html is _mail_body1 (signature appended)
|
||||
self.assertEqual(mail.subject, False, 'mail.mail subject is incorrect')
|
||||
self.assertEqual(mail.body_html, _mail_body2, 'mail.mail body_html incorrect')
|
||||
self.assertEqual(mail.mail_message_id.id, msg_id2, 'mail_mail.mail_message_id incorrect')
|
||||
# Test: sent_email: email send by server: correct subject and body
|
||||
self.assertEqual(sent_email['subject'], _mail_subject, 'sent_email subject incorrect')
|
||||
self.assertEqual(sent_email['body'], _mail_body2, 'sent_email body incorrect')
|
||||
self.assertEqual(sent_email['body_alternative'], _mail_bodyalt2, 'sent_email body_alternative incorrect')
|
||||
# Test: mail_message: partner_ids = group followers
|
||||
message_pids = set([partner.id for partner in message.partner_ids])
|
||||
test_pids = set([p_a_id, p_b_id, p_c_id, p_d_id])
|
||||
self.assertEqual(message_pids, test_pids, 'mail.message partners incorrect')
|
||||
# Test: notification linked to this message = group followers = partner_ids
|
||||
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', message.id)])
|
||||
notif_pids = set([notif.partner_id.id for notif in self.mail_notification.browse(cr, uid, notif_ids)])
|
||||
self.assertEqual(notif_pids, test_pids, 'mail.message notification partners incorrect')
|
||||
# Test: sent_email: email_to should contain b@b, c@c, not a@a (writer)
|
||||
self.assertEqual(set(sent_email['email_to']), set(['b@b', 'c@c']), 'sent_email email_to incorrect')
|
||||
|
||||
def test_21_message_post_attachments(self):
|
||||
""" Tests designed for attachments. """
|
||||
|
||||
def test_22_message_compose_wizard(self):
|
||||
""" Tests designed for the mail.compose.message wizard. """
|
||||
cr, uid = self.cr, self.uid
|
||||
mail_compose = self.registry('mail.compose.message')
|
||||
self.res_users.write(cr, uid, [uid], {'signature': 'Admin', 'email': 'a@a'})
|
||||
user_admin = self.res_users.browse(cr, uid, uid)
|
||||
self.res_users.write(cr, uid, [uid], {'signature': 'Admin'})
|
||||
user_admin.refresh()
|
||||
group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
|
||||
|
||||
# Mail data
|
||||
_subject = 'Pigs'
|
||||
_mail_subject = '%s posted a comment on %s' % (user_admin.name, group_pigs.name)
|
||||
_mail_subject = '%s posted on %s' % (user_admin.name, group_pigs.name)
|
||||
_body_text = 'Pigs rules'
|
||||
_body_html = '<b>Pigs</b> rules'
|
||||
_msg_body1 = '<pre>Pigs rules</pre>'
|
||||
_body_html = '<html>Pigs rules</html>'
|
||||
_msg_body2 = '<html>Pigs rules</html>'
|
||||
|
||||
# Create partners
|
||||
# 0 - Create an email address for Admin, to check email sending
|
||||
self.res_users.write(cr, uid, [uid], {'email': 'a@a'})
|
||||
# 0 - Admin
|
||||
p_a_id = user_admin.partner_id.id
|
||||
# 1 - Bert Tartopoils, with email, should receive emails for comments and emails
|
||||
partner_bert_id = self.res_partner.create(cr, uid, {'name': 'Bert Tartopoils', 'email': 'b@b'})
|
||||
# 2 - Raoul Grosbedon, without email, to test email verification; should receive emails for every message
|
||||
partner_raoul_id = self.res_partner.create(cr, uid, {'name': 'Raoul Grosbedon', 'notification_email_send': 'all'})
|
||||
# 3 - Roger Poilvache, with email, should never receive emails
|
||||
partner_roger_id = self.res_partner.create(cr, uid, {'name': 'Roger Poilvache', 'email': 'r@r', 'notification_email_send': 'none'})
|
||||
p_b_id = self.res_partner.create(cr, uid, {'name': 'Bert Tartopoils', 'email': 'b@b'})
|
||||
# 2 - Carine Poilvache, with email, should never receive emails
|
||||
p_c_id = self.res_partner.create(cr, uid, {'name': 'Carine Poilvache', 'email': 'c@c', 'notification_email_send': 'email'})
|
||||
# 3 - Dédé Grosbedon, without email, to test email verification; should receive emails for every message
|
||||
p_d_id = self.res_partner.create(cr, uid, {'name': 'Dédé Grosbedon', 'notification_email_send': 'all'})
|
||||
|
||||
# Create a new comment on group_pigs
|
||||
# Subscribe #1
|
||||
group_pigs.message_subscribe([p_b_id])
|
||||
|
||||
# Comment group_pigs: body_text
|
||||
compose_id = mail_compose.create(cr, uid,
|
||||
{'subject': _subject, 'body_text': _body_text, 'partner_ids': [(4, partner_bert_id), (4, partner_raoul_id), (4, partner_roger_id)]},
|
||||
{'mail.compose.message': 'comment', 'default_model': 'mail.group', 'default_res_id': self.group_pigs_id})
|
||||
{'subject': _subject, 'body_text': _body_text, 'partner_ids': [(4, p_c_id), (4, p_d_id)]},
|
||||
{'mail.compose.message.mode': 'comment', 'default_model': 'mail.group', 'default_res_id': self.group_pigs_id})
|
||||
compose = mail_compose.browse(cr, uid, compose_id)
|
||||
|
||||
# Test: model, res_id
|
||||
self.assertTrue(compose.model == 'mail.group' and compose.res_id == self.group_pigs_id,
|
||||
'Wizard message has model %s and res_id %s; should be mail.group and %s' % (compose.model, compose.res_id, self.group_pigs_id))
|
||||
'mail.compose.message has model %s and res_id %s; should be mail.group and %s' % (compose.model, compose.res_id, self.group_pigs_id))
|
||||
|
||||
# Post the comment, get created message
|
||||
mail_compose.send_mail(cr, uid, [compose_id])
|
||||
group_pigs.refresh()
|
||||
first_com = group_pigs.message_ids[0]
|
||||
msg = group_pigs.message_ids[0]
|
||||
|
||||
# Check message content
|
||||
self.assertTrue(first_com.subject == False and first_com.body == _body_text,
|
||||
'Posted comment subject is %s and body is %s; should be False and %s' % (first_com.subject, first_com.body, _body_text))
|
||||
|
||||
# Message partners = notified people = writer + partner_ids
|
||||
first_com_pids = [partner.id for partner in first_com.partner_ids]
|
||||
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', first_com.id)])
|
||||
self.assertTrue(len(first_com_pids) == 4, 'There are %s partners linked to the newly posted comment; should be 4' % (len(first_com_pids)))
|
||||
# Test: mail.message: subject, body inside pre
|
||||
self.assertTrue(msg.subject == False and msg.body == _msg_body1,
|
||||
'mail.message subject is %s, body is %s; should be %s and %s' % (msg.subject, msg.body, False, _msg_body1))
|
||||
# Test: mail.message partners = notified people: group_pigs followers (a, b) + mail.compose.message partner_ids (c, d)
|
||||
msg_pids = [partner.id for partner in msg.partner_ids]
|
||||
test_pids = [p_a_id, p_b_id, p_c_id, p_d_id]
|
||||
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', msg.id)])
|
||||
self.assertTrue(len(msg_pids) == 4, 'There are %s partners linked to the newly posted comment; should be 4' % (len(msg_pids)))
|
||||
self.assertTrue(len(notif_ids) == 4, 'There are %s entries in mail_notification: should be 4' % (len(notif_ids)))
|
||||
self.assertTrue(all(id in [user_admin.partner_id.id, partner_bert_id, partner_raoul_id, partner_roger_id] for id in first_com_pids),
|
||||
self.assertTrue(all(id in msg_pids for id in test_pids) and len(msg_pids) == len(test_pids),
|
||||
'Admin, Bert Raoul and Roger should be the 4 partners of the newly created message')
|
||||
|
||||
# Fetch latest created email, that should be the email send to partners
|
||||
mail_ids = self.mail_mail.search(cr, uid, [], limit=1)
|
||||
mail = self.mail_mail.browse(cr, uid, mail_ids[0])
|
||||
mail_emails = tools.email_split(mail.email_to)
|
||||
|
||||
# Check email subject, body, and email_to
|
||||
expected_emails = ['a@a', 'b@b']
|
||||
self.assertTrue(mail.subject == _mail_subject and _body_text in mail.body,
|
||||
'Send email subject is \'%s\' and should be %s; body is %s and should contain %s' % (mail.subject, _mail_subject, mail.body, _body_text))
|
||||
self.assertTrue(all(email in mail_emails for email in expected_emails) and len(mail_emails) == 2,
|
||||
'Send email emails are %s; should be %s' % (mail_emails, expected_emails))
|
||||
|
||||
# Create a reply to the last comment
|
||||
compose_id = mail_compose.create(cr, uid,
|
||||
{}, {'mail.compose.message.mode': 'reply', 'default_model': 'mail.thread', 'default_res_id': self.group_pigs_id,
|
||||
'active_id': first_com.id})
|
||||
'active_id': msg.id})
|
||||
compose = mail_compose.browse(cr, uid, compose_id)
|
||||
|
||||
# Test: model, res_id, parent_id
|
||||
self.assertTrue(compose.model == 'mail.group' and compose.res_id == self.group_pigs_id,
|
||||
'Wizard message has model: %s and res_id:%s; should be mail.group and %s' % (compose.model, compose.res_id, self.group_pigs_id))
|
||||
self.assertTrue(compose.parent_id.id == first_com.id,
|
||||
'Wizard parent_id is %d; should be %d' % (compose.parent_id.id, first_com.id))
|
||||
self.assertEqual(compose.parent_id.id, msg.id,
|
||||
'Wizard parent_id is %d; should be %d' % (compose.parent_id.id, msg.id))
|
||||
|
||||
# 3 - Create in mass_mail composition mode that should work with or without email_template installed
|
||||
compose_id = mail_compose.create(cr, uid,
|
||||
{'subject': _subject, 'body': '${object.description}'},
|
||||
{'default_composition_mode': 'mass_mail', 'default_model': 'mail.group', 'default_res_id': -1,
|
||||
'active_ids': [self.group_pigs_id]})
|
||||
compose = mail_compose.browse(cr, uid, compose_id)
|
||||
|
||||
# Post the comment, get created message
|
||||
mail_compose.send_mail(cr, uid, [compose_id], {'default_res_id': -1, 'active_ids': [self.group_pigs_id]})
|
||||
group_pigs.refresh()
|
||||
msg = group_pigs.message_ids[0]
|
||||
|
||||
# Test: last message on Pigs = last created message
|
||||
test_msg = self.mail_message.browse(cr, uid, self.mail_message.search(cr, uid, [], limit=1))[0]
|
||||
self.assertEqual(msg.id, test_msg.id, 'Pigs did not receive its mass mailing message')
|
||||
# Test: mail.message: subject, body
|
||||
self.assertEqual(msg.subject, _subject, 'mail.message subject is incorrect')
|
||||
self.assertEqual(msg.body, group_pigs.description, 'mail.message body is incorrect')
|
||||
|
||||
|
||||
def test_30_message_read(self):
|
||||
""" Tests designed for message_read. """
|
||||
|
@ -442,5 +532,3 @@ class test_mail(common.TransactionCase):
|
|||
msg1.refresh()
|
||||
self.assertEqual(5, len(group_pigs.message_ids), 'group should contain 5 messages')
|
||||
self.assertEqual(2, len(msg1.child_ids), 'msg1 should have 2 children now')
|
||||
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
##############################################################################
|
||||
|
||||
import re
|
||||
|
||||
import tools
|
||||
|
||||
from osv import osv
|
||||
from osv import fields
|
||||
from tools.safe_eval import safe_eval as eval
|
||||
|
@ -68,17 +68,19 @@ class mail_compose_message(osv.TransientModel):
|
|||
result = super(mail_compose_message, self).default_get(cr, uid, fields, context=context)
|
||||
|
||||
# get some important values from context
|
||||
composition_mode = context.get('mail.compose.message.mode')
|
||||
composition_mode = context.get('default_composition_mode', context.get('mail.compose.message.mode'))
|
||||
model = context.get('default_model', context.get('active_model'))
|
||||
res_id = context.get('default_res_id', context.get('active_id'))
|
||||
active_id = context.get('active_id')
|
||||
active_ids = context.get('active_ids')
|
||||
|
||||
# get default values according to the composition mode
|
||||
if composition_mode in ['reply']:
|
||||
if composition_mode == 'reply':
|
||||
vals = self.get_message_data(cr, uid, active_id, context=context)
|
||||
elif composition_mode in ['comment', 'mass_mail'] and model and res_id:
|
||||
elif composition_mode == 'comment' and model and res_id:
|
||||
vals = self.get_record_data(cr, uid, model, res_id, context=context)
|
||||
elif composition_mode == 'mass_mail' and model and active_ids:
|
||||
vals = {'model': model, 'res_id': res_id, 'content_subtype': 'html'}
|
||||
else:
|
||||
vals = {'model': model, 'res_id': res_id}
|
||||
if composition_mode:
|
||||
|
@ -189,91 +191,107 @@ class mail_compose_message(osv.TransientModel):
|
|||
""" onchange_content_subtype (values: 'plain' or 'html'). This onchange
|
||||
on the subtype allows to have some specific behavior when switching
|
||||
between text or html mode.
|
||||
Basically, subject is reset when going out of html mode.
|
||||
This method can be overridden for models that want to have their
|
||||
specific behavior.
|
||||
"""
|
||||
specific behavior. """
|
||||
return {'value': {'content_subtype': value}}
|
||||
|
||||
def _verify_partner_email(self, cr, uid, partner_ids, context=None):
|
||||
""" Verify that selected partner_ids have an email_address defined.
|
||||
Otherwise throw a warning. """
|
||||
partner_wo_email_lst = []
|
||||
for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids, context=context):
|
||||
if not partner.email:
|
||||
partner_wo_email_lst.append(partner)
|
||||
if not partner_wo_email_lst:
|
||||
return {}
|
||||
warning_msg = _('The following partners chosen as recipients for the email have no email address linked :')
|
||||
for partner in partner_wo_email_lst:
|
||||
warning_msg += '\n- %s' % (partner.name)
|
||||
return {'warning': {
|
||||
'title': _('Partners email addresses not found'),
|
||||
'message': warning_msg }
|
||||
}
|
||||
|
||||
def onchange_partner_ids(self, cr, uid, ids, value, context=None):
|
||||
""" onchange_partner_ids (value format: [[6, False, [3, 4]]]). The
|
||||
basic purpose of this method is to check that destination partners
|
||||
effectively have email addresses. Otherwise a warning is thrown.
|
||||
"""
|
||||
partner_ids = value[0][2]
|
||||
partner_wo_email_lst = []
|
||||
for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids, context=context):
|
||||
if not partner.email:
|
||||
partner_wo_email_lst.append(partner)
|
||||
if not partner_wo_email_lst:
|
||||
return {'value': {}}
|
||||
warning_msg = _('The following partners chosen as recipients for the email have no email address linked :')
|
||||
for partner in partner_wo_email_lst:
|
||||
warning_msg += '\n- %s' % (partner.name)
|
||||
warning = {
|
||||
'title': _('Partners email addresses not found'),
|
||||
'message': warning_msg,
|
||||
}
|
||||
return {'warning': warning, 'value': {}}
|
||||
res = {'value': {}}
|
||||
if not value or not value[0] or not value[0][0] == 6:
|
||||
return
|
||||
res.update(self._verify_partner_email(cr, uid, value[0][2], context=context))
|
||||
return res
|
||||
|
||||
def send_mail(self, cr, uid, ids, context=None):
|
||||
""" Process the wizard content and proceed with sending the related
|
||||
email(s), rendering any template patterns on the fly if needed. """
|
||||
if context is None:
|
||||
context = {}
|
||||
active_ids = context.get('active_ids')
|
||||
|
||||
for wizard in self.browse(cr, uid, ids, context=context):
|
||||
mass_mail_mode = wizard.composition_mode == 'mass_mail'
|
||||
|
||||
attachment = {}
|
||||
for attach in wizard.attachment_ids:
|
||||
attachment[attach.datas_fname] = attach.datas and attach.datas or False
|
||||
|
||||
# default values, according to the wizard options
|
||||
subject = wizard.subject if wizard.content_subtype == 'html' else False
|
||||
partner_ids = [(4, partner.id) for partner in wizard.partner_ids]
|
||||
body = wizard.body if wizard.content_subtype == 'html' else wizard.body_text
|
||||
|
||||
active_model_pool = self.pool.get(wizard.model if wizard.model else 'mail.thread')
|
||||
|
||||
#TODO: TDE: WIP: have to check for mass mail and templates - no time anymore today
|
||||
if context.get('mail.compose.message.mode') == 'mass_mail' and context.get('default_model', False) and context.get('default_res_id', False):
|
||||
active_model = context.get('default_model', False)
|
||||
active_model_pool = self.pool.get(active_model)
|
||||
subject = self.render_template(cr, uid, subject, active_model, active_id)
|
||||
body = self.render_template(cr, uid, wizard.body, active_model, active_id)
|
||||
|
||||
# TODO TDE: find partner_ids
|
||||
# if email_to: find or create a partner
|
||||
if values['email_to']:
|
||||
partner_id = self.pool.get('mail.thread').message_partner_by_email(cr, uid, values['email_to'], context=context)['partner_id']
|
||||
if not partner_id:
|
||||
partner_id = self.pool.get('res.partner').name_create(cr, uid, values['email_to'], context=context)
|
||||
values['partner_ids'] = [partner_id]
|
||||
|
||||
# determine the ids we are commenting
|
||||
if mass_mail_mode:
|
||||
res_ids = context.get('active_ids', [])
|
||||
else:
|
||||
res_ids = [wizard.res_id]
|
||||
active_model_pool.message_post(cr, uid, res_ids, body=body, subject=subject, msg_type='comment',
|
||||
attachments=attachment, context=context, partner_ids=partner_ids)
|
||||
# wizard works in batch mode: [res_id] or active_ids
|
||||
res_ids = active_ids if mass_mail_mode and wizard.model and active_ids else [wizard.res_id]
|
||||
for res_id in res_ids:
|
||||
# default values, according to the wizard options
|
||||
post_values = {
|
||||
'subject': wizard.subject if wizard.content_subtype == 'html' else False,
|
||||
'body': wizard.body if wizard.content_subtype == 'html' else '<pre>%s</pre>' % tools.ustr(wizard.body_text),
|
||||
'partner_ids': [(4, partner.id) for partner in wizard.partner_ids],
|
||||
'attachments': [(attach.datas_fname, attach.datas) for attach in wizard.attachment_ids],
|
||||
}
|
||||
# mass mailing: render and override default values
|
||||
if mass_mail_mode and wizard.model:
|
||||
email_dict = self.render_message(cr, uid, wizard, wizard.model, res_id, context=context)
|
||||
post_values['subject'] = email_dict.get('subject', False)
|
||||
post_values['body'] = email_dict.get('body', '')
|
||||
if email_dict.get('partner_ids'):
|
||||
post_values['partner_ids'] += [(4, id) for id in email_dict.get('partner_ids')]
|
||||
if email_dict.get('attachments'):
|
||||
post_values['attachments'] += [(attach.datas_fname, attach.datas) for attach in email_dict.get('attachments')]
|
||||
# post the message
|
||||
active_model_pool.message_post(cr, uid, res_ids, msg_type='comment', context=context, **post_values)
|
||||
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
def render_message(self, cr, uid, wizard, model, res_id, context=None):
|
||||
""" Generate an email from the template for given (model, res_id) pair.
|
||||
This method is meant to be inherited by email_template that will
|
||||
produce a more complete dictionary, with email_to, ...
|
||||
"""
|
||||
# TDE: TODO: to move into mail.compose.message in email template
|
||||
# mails = tools.email_split(email_dict.get('email_to', '')) + tools.email_split(email_dict.get('email_cc', ''))
|
||||
# for mail in mails:
|
||||
# partner_search_ids = self.pool.get('res.partner').search(cr, uid, [('email', 'ilike', email)], context=context)
|
||||
# if partner_search_ids:
|
||||
# partner_ids.append((4, 0, partner_search_ids[0]))
|
||||
# else:
|
||||
# partner_id = self.pool.get('res.partner').name_create(cr, uid, values['email_to'], context=context)
|
||||
# partner_ids.append((4, 0, partner_id))
|
||||
return {
|
||||
'subject': self.render_template(cr, uid, wizard.subject, model, res_id, context),
|
||||
'body': self.render_template(cr, uid, wizard.body, model, res_id, context),
|
||||
'partner_ids': [],
|
||||
'attachment_ids': [],
|
||||
}
|
||||
|
||||
def render_template(self, cr, uid, template, model, res_id, context=None):
|
||||
"""Render the given template text, replace mako-like expressions ``${expr}``
|
||||
with the result of evaluating these expressions with an evaluation context
|
||||
containing:
|
||||
""" Render the given template text, replace mako-like expressions ``${expr}``
|
||||
with the result of evaluating these expressions with an evaluation context
|
||||
containing:
|
||||
|
||||
* ``user``: browse_record of the current user
|
||||
* ``object``: browse_record of the document record this mail is
|
||||
related to
|
||||
* ``context``: the context passed to the mail composition wizard
|
||||
|
||||
:param str template: the template text to render
|
||||
:param str model: model name of the document record this mail is related to.
|
||||
:param int res_id: id of the document record this mail is related to.
|
||||
:param str template: the template text to render
|
||||
:param str model: model name of the document record this mail is related to.
|
||||
:param int res_id: id of the document record this mail is related to.
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Compose Email" version="7.0">
|
||||
<group>
|
||||
<field name="composition_mode" invisible="1"/>
|
||||
<field name="model" invisible="1"/>
|
||||
<field name="res_id" invisible="1"/>
|
||||
<field name="author_id"/>
|
||||
|
@ -38,11 +39,11 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Compose Email" version="7.0" >
|
||||
<group>
|
||||
<!-- truly invisible fields for control and options -->
|
||||
<field name="composition_mode" colspan="2" nolabel="1" invisible="1"/>
|
||||
<field name="model" colspan="2" nolabel="1" invisible="1"/>
|
||||
<field name="res_id" colspan="2" nolabel="1" invisible="1"/>
|
||||
<field name="parent_id" colspan="2" nolabel="1" invisible="1"/>
|
||||
<!-- truly invisible fields for control and options -->
|
||||
<field name="content_subtype" colspan="2" nolabel="1" invisible="1"/>
|
||||
<!-- visible wizard -->
|
||||
<field name="subject" colspan="2" nolabel="1" placeholder="Subject..."
|
||||
|
@ -63,14 +64,15 @@
|
|||
class="oe_mail_compose_message_attachment_ids"/>
|
||||
<!-- void div to display attachments, Chatter-controlled -->
|
||||
<div colspan="2" class="oe_mail_compose_message_attachments"/>
|
||||
<!-- buttons, mostly Chatter-controlled -->
|
||||
<!-- buttons, with as few Chatter logic as possible -->
|
||||
<div>
|
||||
<button name="send_mail" string="Post" type="object"
|
||||
class="oe_mail_compose_message_button_send"/>
|
||||
</div>
|
||||
<div class='oe_mail_compose_message_icons'>
|
||||
<button icon="/mail/static/src/img/attachment.png" name="dummy"
|
||||
<button icon="/mail/static/src/img/attachment.png"
|
||||
class="oe_mail_compose_message_attachment" string=""
|
||||
name="dummy"
|
||||
help="Add an attachment"/>
|
||||
<button icon="/mail/static/src/img/formatting.png"
|
||||
class="oe_mail_compose_message_formatting" string=""
|
||||
|
@ -100,6 +102,6 @@
|
|||
target="new"
|
||||
key2="client_action_multi"
|
||||
id="base.action_partner_mass_mail"
|
||||
context="{'mail.compose.message.mode':'mass_mail'}"/>
|
||||
context="{'default_composition_mode': 'mass_mail'}"/>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -2,14 +2,16 @@
|
|||
<openerp>
|
||||
<data noupdate="1">
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Manage your manufacturing process in OpenERP by defining bill of materials (BoM), routings and work centers. This module supports complete integration and planification of stockable goods, consumable, and services.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">MRP application installed!</field>
|
||||
<field name="body">Manage your manufacturing process with OpenERP by defining your bills of materials (BoM), routings and work centers.
|
||||
This application supports complete integration and production scheduling for stockable goods, consumables, and services.
|
||||
|
||||
From the Manufacturing Settings, you can choose to compute production schedules periodically or just-in-time.</value>
|
||||
<value>Module MRP has been installed</value>
|
||||
</function>
|
||||
From the Manufacturing Settings, you can choose to compute production schedules periodically or just-in-time.</field>
|
||||
</record>
|
||||
|
||||
<record id="sequence_mrp_prod_type" model="ir.sequence.type">
|
||||
<field name="name">Production order</field>
|
||||
|
|
|
@ -362,6 +362,10 @@
|
|||
</group>
|
||||
<group>
|
||||
<field name="type"/>
|
||||
<p colspan="2" class="oe_grey" attrs="{'invisible': [('type','=','normal')]}">
|
||||
When processing a sale order for this product, the delivery order
|
||||
will contain the raw materials, instead of the finished product.
|
||||
</p>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
<label for="product_uos_qty" groups="product.group_uos"/>
|
||||
<div groups="product.group_uos" >
|
||||
|
@ -678,11 +682,11 @@
|
|||
</group>
|
||||
<notebook>
|
||||
<page string="Consumed Products">
|
||||
<group groups="stock.group_locations">
|
||||
<group>
|
||||
<group>
|
||||
<field name="bom_id" domain="[('product_id','=',product_id)]" context="{'default_product_id': product_id}" on_change="bom_id_change(bom_id)"/>
|
||||
</group>
|
||||
<group>
|
||||
<group groups="stock.group_locations">
|
||||
<field name="location_src_id" domain="[('usage','=','internal')]" on_change="location_id_change(location_src_id,location_dest_id)"/>
|
||||
<field name="location_dest_id" domain="[('usage','=','internal')]"/>
|
||||
</group>
|
||||
|
@ -981,43 +985,14 @@
|
|||
</data>
|
||||
</field>
|
||||
</record>
|
||||
<record id="product_normal_form_supply_view" model="ir.ui.view">
|
||||
<record id="product_normal_form_supply_view" model="ir.ui.view">
|
||||
<field name="name">product.normal.form.mrp.inherit</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='procure_method']" position="after">
|
||||
<field name="supply_method" groups="base.group_user"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_normal_form_view" model="ir.ui.view">
|
||||
<field name="name">product.normal.form.mrp.inherit</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="stock.view_normal_procurement_locations_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<page string="Procurement & Locations" position="inside">
|
||||
<separator string="Bill of Materials"/>
|
||||
<field name="bom_ids" widget="one2many_list" mode="tree" context="{'default_product_id': active_id}">
|
||||
<tree string="Bill of Materials">
|
||||
<field name="name" string="Component Name"/>
|
||||
<field name="bom_id"/>
|
||||
<field name="product_qty" string="Quantity of Product"/>
|
||||
<field name="type"/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_stop"/>
|
||||
</tree>
|
||||
<form string="Bill of Material">
|
||||
<field name="name" string="Component Name"/>
|
||||
<field name="bom_id"/>
|
||||
<field name="product_qty" string="Quantity of Product"/>
|
||||
<field name="type"/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_stop"/>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
<xpath expr="//field[@name='procure_method']" position="after">
|
||||
<field name="supply_method" groups="base.group_user"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -1075,5 +1050,24 @@
|
|||
id="menu_mrp_production_order_action" name="Orders Planning"
|
||||
parent="menu_mrp_planning" sequence="1"/>
|
||||
|
||||
|
||||
<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="res_model">mrp.bom</field>
|
||||
</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"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -26,7 +26,7 @@ from tools.translate import _
|
|||
class product_product(osv.osv):
|
||||
_inherit = "product.product"
|
||||
_columns = {
|
||||
"bom_ids": fields.one2many('mrp.bom', 'product_id','Bill of Materials'),
|
||||
"bom_ids": fields.one2many('mrp.bom', 'product_id','Bill of Materials', domain=[('bom_id','=',False)]),
|
||||
}
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if not default:
|
||||
|
|
|
@ -12,6 +12,8 @@ class pad_common(osv.osv_memory):
|
|||
def pad_generate_url(self, cr, uid, context=None):
|
||||
pad_server = self.pool.get('res.users').browse(cr, uid, uid, context).company_id.pad_server
|
||||
# make sure pad server in the form of http://hostname
|
||||
if not pad_server:
|
||||
return ''
|
||||
if not pad_server.startswith('http'):
|
||||
pad_server = 'http://' + pad_server
|
||||
pad_server = pad_server.rstrip('/')
|
||||
|
|
|
@ -27,15 +27,10 @@ class account_journal(osv.osv):
|
|||
_columns = {
|
||||
'journal_user': fields.boolean('PoS Payment Method', help="Check this box if this journal define a payment method that can be used in point of sales."),
|
||||
|
||||
'opening_control': fields.boolean('Opening Control', help="If you want the journal should be control at opening, check this option"),
|
||||
'closing_control': fields.boolean('Closing Control', help="If you want the journal should be control at closing, check this option"),
|
||||
|
||||
'amount_authorized_diff' : fields.float('Amount Authorized Difference'),
|
||||
'self_checkout_payment_method' : fields.boolean('Self Checkout Payment Method'),
|
||||
}
|
||||
_defaults = {
|
||||
'opening_control' : False,
|
||||
'closing_control' : False,
|
||||
'self_checkout_payment_method' : False,
|
||||
}
|
||||
|
||||
|
@ -46,6 +41,7 @@ class account_cash_statement(osv.osv):
|
|||
_columns = {
|
||||
'pos_session_id' : fields.many2one('pos.session'),
|
||||
}
|
||||
|
||||
account_cash_statement()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
<page string="Point of Sale">
|
||||
<group col="4" colspan="4">
|
||||
<field name="journal_user"/>
|
||||
<field name="opening_control"/>
|
||||
<field name="closing_control"/>
|
||||
<field name="amount_authorized_diff"/>
|
||||
<field name="self_checkout_payment_method" />
|
||||
</group>
|
||||
|
@ -113,37 +111,5 @@
|
|||
<field name="view_id" ref="account.view_bank_statement_form2"/>
|
||||
<field name="act_window_id" ref="action_new_bank_statement_all_tree"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
<menuitem name="Cash Register Management" parent="point_of_sale.menu_point_root"
|
||||
id="menu_point_open_config" sequence="10"/>
|
||||
<menuitem
|
||||
name="Open Cash Registers" parent="menu_point_open_config"
|
||||
string="Open Cash Registers"
|
||||
action="action_pos_open_statement"
|
||||
id="menu_open_statement" sequence="1" />
|
||||
|
||||
<menuitem
|
||||
name="Close Cash Registers" parent="menu_point_open_config"
|
||||
string="Close Cash Registers"
|
||||
action="action_pos_close_statement"
|
||||
id="menu_close_statement" sequence="2" />
|
||||
|
||||
<menuitem
|
||||
parent="menu_point_open_config"
|
||||
action="action_pos_confirm"
|
||||
id="menu_wizard_pos_confirm" sequence="8" />
|
||||
|
||||
|
||||
<menuitem
|
||||
name="List of Cash Registers"
|
||||
parent="menu_point_open_config"
|
||||
action="action_new_bank_statement_all_tree"
|
||||
id="menu_all_menu_all_register"
|
||||
sequence="4"
|
||||
/>
|
||||
-->
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -74,6 +74,26 @@ class pos_config(osv.osv):
|
|||
'group_by' : fields.boolean('Group Journal Items', help="Check this if you want to group the Journal Items by Product while closing a Session"),
|
||||
}
|
||||
|
||||
def _check_cash_control(self, cr, uid, ids, context=None):
|
||||
return all(
|
||||
(sum(int(journal.cash_control) for journal in record.journal_ids) <= 1)
|
||||
for record in self.browse(cr, uid, ids, context=context)
|
||||
)
|
||||
|
||||
_constraints = [
|
||||
(_check_cash_control, "You cannot have two cash controls in one Point Of Sale !", ['journal_ids']),
|
||||
]
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if not default:
|
||||
default = {}
|
||||
d = {
|
||||
'sequence_id' : False,
|
||||
}
|
||||
d.update(default)
|
||||
return super(pos_order, self).copy(cr, uid, id, d, context=context)
|
||||
|
||||
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
result = []
|
||||
states = {
|
||||
|
@ -90,11 +110,6 @@ class pos_config(osv.osv):
|
|||
result.append((record.id, record.name + ' ('+session.user_id.name+')')) #, '+states[session.state]+')'))
|
||||
return result
|
||||
|
||||
|
||||
def _default_payment_journal(self, cr, uid, context=None):
|
||||
res = self.pool.get('account.journal').search(cr, uid, [('type', 'in', ('bank','cash'))], limit=2)
|
||||
return res or []
|
||||
|
||||
def _default_sale_journal(self, cr, uid, context=None):
|
||||
res = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'sale')], limit=1)
|
||||
return res and res[0] or False
|
||||
|
@ -107,7 +122,6 @@ class pos_config(osv.osv):
|
|||
'state' : POS_CONFIG_STATE[0][0],
|
||||
'shop_id': _default_shop,
|
||||
'journal_id': _default_sale_journal,
|
||||
'journal_ids': _default_payment_journal,
|
||||
'group_by' : True,
|
||||
}
|
||||
|
||||
|
@ -148,45 +162,20 @@ class pos_session(osv.osv):
|
|||
('closed', 'Closed & Posted'),
|
||||
]
|
||||
|
||||
def _compute_cash_journal_id(self, cr, uid, ids, fieldnames, args, context=None):
|
||||
result = dict.fromkeys(ids, False)
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
for st in record.statement_ids:
|
||||
if st.journal_id.type == 'cash':
|
||||
result[record.id] = st.journal_id.id
|
||||
break
|
||||
return result
|
||||
|
||||
def _compute_cash_register_id(self, cr, uid, ids, fieldnames, args, context=None):
|
||||
result = dict.fromkeys(ids, False)
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
for st in record.statement_ids:
|
||||
if st.journal_id.type == 'cash':
|
||||
result[record.id] = st.id
|
||||
break
|
||||
return result
|
||||
|
||||
def _compute_controls(self, cr, uid, ids, fieldnames, args, context=None):
|
||||
result = {}
|
||||
def _compute_cash_all(self, cr, uid, ids, fieldnames, args, context=None):
|
||||
result = dict()
|
||||
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
has_opening_control = False
|
||||
has_closing_control = False
|
||||
|
||||
for journal in record.config_id.journal_ids:
|
||||
if journal.opening_control == True:
|
||||
has_opening_control = True
|
||||
if journal.closing_control == True:
|
||||
has_closing_control = True
|
||||
|
||||
if has_opening_control and has_closing_control:
|
||||
break
|
||||
|
||||
values = {
|
||||
'has_opening_control': has_opening_control,
|
||||
'has_closing_control': has_closing_control,
|
||||
result[record.id] = {
|
||||
'cash_journal_id' : False,
|
||||
'cash_register_id' : False,
|
||||
'cash_control' : False,
|
||||
}
|
||||
result[record.id] = values
|
||||
for st in record.statement_ids:
|
||||
if st.journal_id.cash_control == True:
|
||||
result[record.id]['cash_control'] = True
|
||||
result[record.id]['cash_journal_id'] = st.journal_id.id
|
||||
result[record.id]['cash_register_id'] = st.id
|
||||
|
||||
return result
|
||||
|
||||
|
@ -212,12 +201,17 @@ class pos_session(osv.osv):
|
|||
required=True, readonly=True,
|
||||
select=1),
|
||||
|
||||
'cash_journal_id' : fields.function(_compute_cash_journal_id, method=True,
|
||||
type='many2one', relation='account.journal',
|
||||
string='Cash Journal', store=True),
|
||||
'cash_register_id' : fields.function(_compute_cash_register_id, method=True,
|
||||
type='many2one', relation='account.bank.statement',
|
||||
string='Cash Register', store=True),
|
||||
'cash_control' : fields.function(_compute_cash_all,
|
||||
multi='cash',
|
||||
type='boolean', string='Has Cash Control'),
|
||||
'cash_journal_id' : fields.function(_compute_cash_all,
|
||||
multi='cash',
|
||||
type='many2one', relation='account.journal',
|
||||
string='Cash Journal', store=True),
|
||||
'cash_register_id' : fields.function(_compute_cash_all,
|
||||
multi='cash',
|
||||
type='many2one', relation='account.bank.statement',
|
||||
string='Cash Register', store=True),
|
||||
|
||||
'opening_details_ids' : fields.related('cash_register_id', 'opening_details_ids',
|
||||
type='one2many', relation='account.cashbox.line',
|
||||
|
@ -261,8 +255,6 @@ class pos_session(osv.osv):
|
|||
'order_ids' : fields.one2many('pos.order', 'session_id', 'Orders'),
|
||||
|
||||
'statement_ids' : fields.one2many('account.bank.statement', 'pos_session_id', 'Bank Statement', readonly=True),
|
||||
'has_opening_control' : fields.function(_compute_controls, string='Has Opening Control', multi='control', type='boolean'),
|
||||
'has_closing_control' : fields.function(_compute_controls, string='Has Closing Control', multi='control', type='boolean'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
@ -372,10 +364,8 @@ class pos_session(osv.osv):
|
|||
def wkf_action_closing_control(self, cr, uid, ids, context=None):
|
||||
for session in self.browse(cr, uid, ids, context=context):
|
||||
for statement in session.statement_ids:
|
||||
if statement.id <> session.cash_register_id.id:
|
||||
if statement.balance_end<>statement.balance_end_real:
|
||||
self.pool.get('account.bank.statement').write(cr, uid,
|
||||
[statement.id], {'balance_end_real': statement.balance_end})
|
||||
if statement != session.cash_register_id and statement.balance_end != statement.balance_end_real:
|
||||
self.pool.get('account.bank.statement').write(cr, uid, [statement.id], {'balance_end_real': statement.balance_end})
|
||||
return self.write(cr, uid, ids, {'state' : 'closing_control', 'stop_at' : time.strftime('%Y-%m-%d %H:%M:%S')}, context=context)
|
||||
|
||||
def wkf_action_close(self, cr, uid, ids, context=None):
|
||||
|
@ -388,7 +378,7 @@ class pos_session(osv.osv):
|
|||
if not self.pool.get('ir.model.access').check_groups(cr, uid, "point_of_sale.group_pos_manager"):
|
||||
raise osv.except_osv( _('Error!'),
|
||||
_("Your ending balance is too different from the theorical cash closing (%.2f), the maximum allowed is: %.2f. You can contact your manager to force it.") % (st.difference, st.journal_id.amount_authorized_diff))
|
||||
if st.difference:
|
||||
if st.difference and st.journal_id.cash_control == True:
|
||||
if st.difference > 0.0:
|
||||
name= _('Point of Sale Profit')
|
||||
account_id = st.journal_id.profit_account_id.id
|
||||
|
@ -406,6 +396,9 @@ class pos_session(osv.osv):
|
|||
'account_id': account_id
|
||||
}, context=context)
|
||||
|
||||
if st.journal_id.type == 'bank':
|
||||
st.write({'balance_end_real' : st.balance_end})
|
||||
|
||||
getattr(st, 'button_confirm_%s' % st.journal_id.type)(context=context)
|
||||
self._confirm_orders(cr, uid, ids, context=context)
|
||||
self.write(cr, uid, ids, {'state' : 'closed'}, context=context)
|
||||
|
@ -731,7 +724,7 @@ class pos_order(osv.osv):
|
|||
'pos_statement_id' : order_id,
|
||||
'journal_id' : journal_id,
|
||||
'type' : 'customer',
|
||||
'ref' : order.name,
|
||||
'ref' : order.session_id.name,
|
||||
})
|
||||
|
||||
statement_line_obj.create(cr, uid, args, context=context)
|
||||
|
@ -1084,6 +1077,7 @@ class account_bank_statement_line(osv.osv):
|
|||
_columns= {
|
||||
'pos_statement_id': fields.many2one('pos.order', ondelete='cascade'),
|
||||
}
|
||||
|
||||
account_bank_statement_line()
|
||||
|
||||
class pos_order_line(osv.osv):
|
||||
|
@ -1284,8 +1278,30 @@ class product_product(osv.osv):
|
|||
help="If you want to sell this product through the point of sale, select the category it belongs to."),
|
||||
'to_weight' : fields.boolean('To Weight', help="This category contains products that should be weighted, mainly used for the self-checkout interface"),
|
||||
}
|
||||
|
||||
def _default_pos_categ_id(self, cr, uid, context=None):
|
||||
proxy = self.pool.get('ir.model.data')
|
||||
|
||||
try:
|
||||
category_id = proxy.get_object_reference(cr, uid, 'point_of_sale', 'categ_others')[1]
|
||||
except ValueError:
|
||||
values = {
|
||||
'name' : 'Others',
|
||||
}
|
||||
category_id = self.pool.get('pos.category').create(cr, uid, values, context=context)
|
||||
values = {
|
||||
'name' : 'categ_others',
|
||||
'model' : 'pos.category',
|
||||
'module' : 'point_of_sale',
|
||||
'res_id' : category_id,
|
||||
}
|
||||
proxy.create(cr, uid, values, context=context)
|
||||
|
||||
return category_id
|
||||
|
||||
_defaults = {
|
||||
'to_weight' : False,
|
||||
'pos_categ_id' : _default_pos_categ_id,
|
||||
}
|
||||
|
||||
def edit_ean(self, cr, uid, ids, context):
|
||||
|
|
|
@ -24,14 +24,15 @@
|
|||
|
||||
<data noupdate="1">
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Encode sale orders, register payments, compute money to return, create invoices, and manage refunds of former sales through a specific, web-based, touch-screen user interface.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Point of Sale application installed!</field>
|
||||
<field name="body">Record sale orders, register payments, compute change to return, create invoices, and manage refunds through a specific web touch-screen interface.
|
||||
|
||||
If you install the PoS proxy, you will be able to interface OpenERP with retail materials; barcode scanners, printers, cash registers, weighing machine, credit card payments.</value>
|
||||
<value>Module Point of Sale has been installed</value>
|
||||
</function>
|
||||
If you install the PoS proxy you will be able to interface OpenERP with retail hardware: barcode scanners, printers, cash registers, weighing machines, credit card payment terminals.</field>
|
||||
</record>
|
||||
|
||||
<record id="unreferenced_product" model="product.product">
|
||||
<field name="list_price">1.00</field>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<field name="groups_id" eval="[(4,ref('group_pos_user'))]"/>
|
||||
<field name="ean13">0410200000005</field>
|
||||
</record>
|
||||
<record id="account.cash_journal" model="account.journal">
|
||||
<record id="account.cash_journal" model="account.journal">
|
||||
<field eval="True" name="journal_user"/>
|
||||
</record>
|
||||
<record id="base.user_jsmith" model="res.users">
|
||||
|
@ -36,6 +36,10 @@
|
|||
<field name="groups_id" eval="[(4,ref('group_pos_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record model="pos.config" id="pos_config_main">
|
||||
<field name="journal_ids" eval="[(6, 0, [ref('account.cash_journal'), ref('account.bank_journal')])]" />
|
||||
</record>
|
||||
|
||||
<!-- Resource: pos.category -->
|
||||
|
||||
<record id="beverage" model="pos.category">
|
||||
|
|
|
@ -126,7 +126,7 @@
|
|||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="view_pos_order_tree">
|
||||
<field name="name">Sales</field>
|
||||
<field name="name">Orders</field>
|
||||
<field name="model">pos.order</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="POS Orders" colors="blue:state == 'draft';gray:state in ('done','cancel');black:state not in('done','cancel')">
|
||||
|
@ -138,6 +138,7 @@
|
|||
<field name="amount_total" sum="Amount total"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="state"/>
|
||||
<field name="session_id" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -791,8 +792,7 @@
|
|||
<field name="code" />
|
||||
<field name="name" />
|
||||
<field name="type" />
|
||||
<field name="opening_control" />
|
||||
<field name="closing_control" />
|
||||
<field name="cash_control" />
|
||||
</tree>
|
||||
</field>
|
||||
<group string="Material Interfaces" >
|
||||
|
@ -878,10 +878,10 @@
|
|||
<header>
|
||||
<button name="open" type="workflow" string="Validate & Open Session" states="opening_control" class="oe_highlight"/>
|
||||
<button name="cashbox_control" type="workflow" string="End of Session"
|
||||
attrs="{'invisible' : [('has_closing_control', '=', False),('state', '=', 'opened')]}"
|
||||
attrs="{'invisible' : ['|', ('cash_control', '=', False),('state', '!=', 'opened')]}"
|
||||
class="oe_highlight" />
|
||||
<button name="close" type="workflow" string="Validate Closing & Post Entries"
|
||||
attrs="{'invisible' : [('has_closing_control', '=', True),('state', '=', 'opened')]}"
|
||||
attrs="{'invisible' : ['|', ('cash_control', '=', True),('state', '!=', 'opened')]}"
|
||||
class="oe_highlight" />
|
||||
<button name="close" type="workflow" string="Validate Closing & Post Entries" states="closing_control"
|
||||
class="oe_highlight" />
|
||||
|
@ -900,8 +900,7 @@
|
|||
<field name="name" attrs="{'invisible': [('name','=','/')]}" class="oe_inline"/>
|
||||
</h1>
|
||||
<group>
|
||||
<field name="has_opening_control" invisible="1" />
|
||||
<field name="has_closing_control" invisible="1" />
|
||||
<field name="cash_control" invisible="1" />
|
||||
<group>
|
||||
<field name="user_id"/>
|
||||
<field name="config_id" attrs="{'invisible' : [('config_id', '<>', False)]}"/>
|
||||
|
@ -912,26 +911,26 @@
|
|||
</group>
|
||||
<newline/>
|
||||
|
||||
<group string="Opening Cash Control">
|
||||
<group string="Opening Cash Control" attrs="{'invisible' : ['|', ('cash_control', '=', False),('state', '=', 'closed')]}">
|
||||
<field name="opening_details_ids" nolabel="1" colspan="2" attrs="{'readonly' : [('state', 'not in', ('opening_control',))]}">
|
||||
<tree string="Opening Cashbox Lines" editable="bottom">
|
||||
<field name="pieces" readonly="1" />
|
||||
<field name="number_opening" string="Opening Unit Numbers" on_change="on_change_sub_opening(pieces, number_opening)" />
|
||||
<field name="number_opening" on_change="on_change_sub_opening(pieces, number_opening)" />
|
||||
<field name="subtotal_opening" string="Opening Subtotal" sum="Total"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
<group string="Closing Cash Control" attrs="{'invisible': [('state', '=', 'opening_control')]}">
|
||||
<group string="Closing Cash Control" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '!=', 'closing_control')]}">
|
||||
<field name="details_ids" nolabel="1" colspan="2">
|
||||
<tree string="Cashbox Lines" editable="bottom">
|
||||
<field name="pieces" readonly="1" />
|
||||
<field name="number_closing"/>
|
||||
<field name="number_closing" />
|
||||
<field name="subtotal_closing"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
|
||||
<div>
|
||||
<div attrs="{'invisible': [('state', '=', 'closed')]}">
|
||||
<group class="oe_subtotal_footer oe_right">
|
||||
<field name="cash_register_balance_start" readonly="1" string="Opening Balance" class="oe_subtotal_footer_separator"/>
|
||||
<field name="cash_register_total_entry_encoding" attrs="{'invisible' : [('state', '=', 'opening_control')]}" string="+ Transactions"/>
|
||||
|
@ -948,7 +947,7 @@
|
|||
</div>
|
||||
|
||||
|
||||
<group class="oe_subtotal_footer oe_right" attrs="{'invisible' : [('state', '=', 'opening_control')]}">
|
||||
<group class="oe_subtotal_footer oe_right" attrs="{'invisible' : [('state', 'in', ('opening_control', 'closed'))]}">
|
||||
<field name="cash_register_balance_end_real" class="oe_subtotal_footer_separator"/>
|
||||
<field name="cash_register_difference" class="oe_subtotal_footer_separator"/>
|
||||
</group>
|
||||
|
|
|
@ -126,14 +126,14 @@
|
|||
<field name="act_from" ref="act_start" />
|
||||
<field name="act_to" ref="act_opening_control" />
|
||||
<field name="signal" eval="False" /> <!-- >start_to_opening_control</field> -->
|
||||
<field name="condition">has_opening_control == True</field>
|
||||
<field name="condition">cash_control == True</field>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="trans_start_to_open">
|
||||
<field name="act_from" ref="act_start" />
|
||||
<field name="act_to" ref="act_open" />
|
||||
<field name="signal" eval="False" />
|
||||
<field name="condition">has_opening_control == False</field>
|
||||
<field name="condition">cash_control == False</field>
|
||||
</record>
|
||||
<!-- state:opening_control -> signal:open -> state:opened -> signal:cashbox_control -> state:closing_control -> signal:close -> state:close -->
|
||||
|
||||
|
@ -147,14 +147,14 @@
|
|||
<field name="act_from" ref="act_open" />
|
||||
<field name="act_to" ref="act_closing_control" />
|
||||
<field name="signal">cashbox_control</field>
|
||||
<field name="condition">has_closing_control == True</field>
|
||||
<field name="condition">cash_control == True</field>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="trans_open_to_close">
|
||||
<field name="act_from" ref="act_open" />
|
||||
<field name="act_to" ref="act_close" />
|
||||
<field name="signal">close</field>
|
||||
<field name="condition">has_closing_control == False</field>
|
||||
<field name="condition">cash_control == False</field>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="trans_closing_control_to_close">
|
||||
|
|
|
@ -65,7 +65,7 @@ class pos_open_statement(osv.osv_memory):
|
|||
statement_id = statement_obj.create(cr, uid, data, context=context)
|
||||
st_ids.append(int(statement_id))
|
||||
|
||||
if journal.opening_control:
|
||||
if journal.cash_control:
|
||||
statement_obj.button_open(cr, uid, [statement_id], context)
|
||||
|
||||
tree_res = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_cash_statement_pos_tree')
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
<field name="name">Portal</field>
|
||||
<field name="group_id" ref="group_portal_member"/>
|
||||
<field name="override_menu" eval="False"/>
|
||||
<!-- Insert the template user from auth_signup in the portal members group -->
|
||||
<field name="users" eval="[(4,ref('auth_signup.default_template_user'))]"/>
|
||||
</record>
|
||||
|
||||
<!-- Mail group for the company's news -->
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
|
||||
"PO-Revision-Date: 2011-03-16 07:09+0000\n"
|
||||
"PO-Revision-Date: 2012-08-30 18:15+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: Russian <ru@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-08-28 06:36+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: procurement
|
||||
#: view:make.procurement:0
|
||||
|
@ -376,7 +376,7 @@ msgstr "Ссылки"
|
|||
#: view:product.product:0
|
||||
#: field:product.product,orderpoint_ids:0
|
||||
msgid "Minimum Stock Rule"
|
||||
msgstr ""
|
||||
msgstr "Правило минимальных запасов"
|
||||
|
||||
#. module: procurement
|
||||
#: view:res.company:0
|
||||
|
@ -390,6 +390,8 @@ msgid ""
|
|||
"Please check the quantity in procurement order(s), it should not be 0 or "
|
||||
"less!"
|
||||
msgstr ""
|
||||
"Пожалуйста, проверьте количество в заказе на снабжение, оно не должно быть "
|
||||
"нулевым или отрицательным!"
|
||||
|
||||
#. module: procurement
|
||||
#: help:procurement.order,procure_method:0
|
||||
|
@ -615,7 +617,7 @@ msgstr "Правило минимума ТМЦ"
|
|||
#. module: procurement
|
||||
#: help:stock.warehouse.orderpoint,qty_multiple:0
|
||||
msgid "The procurement quantity will be rounded up to this multiple."
|
||||
msgstr ""
|
||||
msgstr "Количество в заказе будет округляться до этого значения."
|
||||
|
||||
#. module: procurement
|
||||
#: model:ir.model,name:procurement.model_res_company
|
||||
|
@ -655,7 +657,7 @@ msgstr "Заказ по максимуму"
|
|||
#. module: procurement
|
||||
#: sql_constraint:stock.picking:0
|
||||
msgid "Reference must be unique per Company!"
|
||||
msgstr ""
|
||||
msgstr "Ссылка должна быть уникальна для каждой компании!"
|
||||
|
||||
#. module: procurement
|
||||
#: field:procurement.order,date_close:0
|
||||
|
@ -896,7 +898,7 @@ msgstr ""
|
|||
#. module: procurement
|
||||
#: sql_constraint:res.company:0
|
||||
msgid "The company name must be unique !"
|
||||
msgstr ""
|
||||
msgstr "Название компании должно быть уникальным!"
|
||||
|
||||
#. module: procurement
|
||||
#: field:mrp.property,name:0
|
||||
|
@ -995,7 +997,7 @@ msgstr ""
|
|||
#. module: procurement
|
||||
#: constraint:product.product:0
|
||||
msgid "Error: Invalid ean code"
|
||||
msgstr ""
|
||||
msgstr "Ошибка: Неверный штрих-код"
|
||||
|
||||
#. module: procurement
|
||||
#: code:addons/procurement/schedulers.py:152
|
||||
|
|
|
@ -261,12 +261,12 @@
|
|||
</record>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_warehouse_id': active_id, 'default_warehouse_id': active_id}"
|
||||
id="act_stock_warehouse_2_stock_warehouse_orderpoint"
|
||||
name="Reordering Rules"
|
||||
res_model="stock.warehouse.orderpoint"
|
||||
src_model="stock.warehouse"
|
||||
groups="stock.group_stock_user"/>
|
||||
context="{'search_default_warehouse_id': active_id, 'default_warehouse_id': active_id}"
|
||||
id="act_stock_warehouse_2_stock_warehouse_orderpoint"
|
||||
name="Reordering Rules"
|
||||
res_model="stock.warehouse.orderpoint"
|
||||
src_model="stock.warehouse"
|
||||
groups="stock.group_stock_user"/>
|
||||
|
||||
<act_window
|
||||
context="{'product_uom': locals().has_key('uom_id') and uom_id, 'default_procurement_id': active_id}"
|
||||
|
@ -283,23 +283,11 @@
|
|||
<menuitem id="menu_stock_procurement" name="Automatic Procurements" parent="stock.menu_stock_configuration" sequence="5"/>
|
||||
<menuitem action="action_orderpoint_form" id="menu_stock_order_points" parent="stock.menu_stock_configuration" sequence="10"/>
|
||||
|
||||
<record id="product_normal_form_view" model="ir.ui.view">
|
||||
<field name="name">product.normal.form.orderpoint.inherit</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="stock.view_normal_procurement_locations_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<page string="Procurement & Locations" position="inside">
|
||||
<separator string="Minimum Stock Rules"/>
|
||||
<field name="orderpoint_ids" widget="one2many_list" mode="tree" context="{'default_product_id': active_id}">
|
||||
<tree string="Reordering Rules">
|
||||
<field name="name"/>
|
||||
<field name="warehouse_id"/>
|
||||
<field name="product_min_qty"/>
|
||||
<field name="product_max_qty"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</field>
|
||||
|
||||
<record model="ir.actions.act_window" id="product_open_orderpoint">
|
||||
<field name="context">{'default_product_id': active_id, 'search_default_product_id': active_id}</field>
|
||||
<field name="name">Orderpoints</field>
|
||||
<field name="res_model">stock.warehouse.orderpoint</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="product_form_view_procurement_button">
|
||||
|
@ -307,10 +295,9 @@
|
|||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='image_medium']" position="after">
|
||||
<div class='oe_right oe_button_box'>
|
||||
<button string="Procurement Request" name="%(act_make_procurement)d" type="action"/>
|
||||
</div>
|
||||
<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"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
|
||||
"PO-Revision-Date: 2012-07-26 16:28+0000\n"
|
||||
"Last-Translator: Michael Otcheskih <otma@mail.ru>\n"
|
||||
"PO-Revision-Date: 2012-08-30 18:22+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-28 06:18+0000\n"
|
||||
"X-Generator: Launchpad (build 15864)\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
||||
"X-Generator: Launchpad (build 15887)\n"
|
||||
|
||||
#. module: product
|
||||
#: model:product.template,name:product.product_product_ram512_product_template
|
||||
|
@ -968,7 +968,7 @@ msgstr "Итоговый вес пакета"
|
|||
#. module: product
|
||||
#: field:product.template,seller_info_id:0
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
msgstr "неизвесно"
|
||||
|
||||
#. module: product
|
||||
#: help:product.packaging,code:0
|
||||
|
@ -1893,7 +1893,7 @@ msgstr "Другие ТМЦ"
|
|||
#. module: product
|
||||
#: field:product.product,color:0
|
||||
msgid "Color Index"
|
||||
msgstr ""
|
||||
msgstr "Цветовая палитра"
|
||||
|
||||
#. module: product
|
||||
#: view:product.product:0
|
||||
|
@ -1919,7 +1919,7 @@ msgstr "Каталог поставщика"
|
|||
#: code:addons/product/product.py:175
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
msgstr "Внимание"
|
||||
|
||||
#. module: product
|
||||
#: field:product.pricelist.item,base:0
|
||||
|
@ -2007,7 +2007,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:product.product_uom_categ_form_action
|
||||
#: model:ir.ui.menu,name:product.menu_product_uom_categ_form_action
|
||||
msgid "UoM Categories"
|
||||
msgstr ""
|
||||
msgstr "Категории единиц"
|
||||
|
||||
#. module: product
|
||||
#: field:product.template,seller_delay:0
|
||||
|
@ -2088,7 +2088,7 @@ msgstr "Поставщик ТМЦ"
|
|||
#. module: product
|
||||
#: field:product.product,product_image:0
|
||||
msgid "Image"
|
||||
msgstr ""
|
||||
msgstr "Изображение"
|
||||
|
||||
#. module: product
|
||||
#: field:product.uom,uom_type:0
|
||||
|
|
|
@ -72,6 +72,8 @@
|
|||
<label for="categ_id" class="oe_edit_only"/>
|
||||
<h2><field name="categ_id"/></h2>
|
||||
</div>
|
||||
<div class="oe_right oe_button_box" name="buttons">
|
||||
</div>
|
||||
<notebook>
|
||||
<page string="Information">
|
||||
<group>
|
||||
|
|
|
@ -193,7 +193,7 @@ class project(osv.osv):
|
|||
'complete_name': fields.function(_complete_name, string="Project Name", type='char', size=250),
|
||||
'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the project without removing it."),
|
||||
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of Projects."),
|
||||
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc.", ondelete="cascade", required=True),
|
||||
'analytic_account_id': fields.many2one('account.analytic.account', 'Contract/Analytic', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc.", ondelete="cascade", required=True),
|
||||
'priority': fields.integer('Sequence', help="Gives the sequence order when displaying the list of projects"),
|
||||
'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members',
|
||||
help="Project's members are users who can have an access to the tasks related to this project.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
|
||||
|
@ -1245,7 +1245,7 @@ class account_analytic_account(osv.osv):
|
|||
_inherit = 'account.analytic.account'
|
||||
_description = 'Analytic Account'
|
||||
_columns = {
|
||||
'use_tasks': fields.boolean('Tasks Mgmt.',help="If check,this contract will be available in the project menu and you will be able to manage tasks or track issues"),
|
||||
'use_tasks': fields.boolean('Tasks',help="If check,this contract will be available in the project menu and you will be able to manage tasks or track issues"),
|
||||
'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'),
|
||||
}
|
||||
|
||||
|
|
|
@ -124,13 +124,15 @@
|
|||
</record>
|
||||
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Manage multi-level projects and tasks. You can delegate tasks, track the work done on tasks, and review your planning based on the entered data.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Project Management application installed!</field>
|
||||
<field name="body">Manage multi-level projects and tasks. You can delegate tasks, track task work, and review your planning.
|
||||
|
||||
You can manage todo lists on tasks by installing the module "Todo Lists", which supports the methodology Getting Things Done (GTD). You can also manage issues/bugs in projects by installing the module "Issues Tracker."</value>
|
||||
<value>Module Project Management has been installed</value>
|
||||
</function>
|
||||
You can manage todo lists on tasks by installing the "Todo Lists" application, supporting the Getting Things Done (GTD) methodology.
|
||||
You can also manage issues/bugs in projects by installing the "Issue Tracker" application.</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -76,33 +76,29 @@
|
|||
</header>
|
||||
<sheet string="Project">
|
||||
<field name="analytic_account_id" invisible="1" required="0"/>
|
||||
<label for="name" class="oe_edit_only" string="Project Name"/>
|
||||
<h1>
|
||||
<field name="name" string="Project Name"/>
|
||||
</h1>
|
||||
<div attrs="{'invisible': [('alias_domain', '=', False)]}">
|
||||
<field name="alias_id" invisible="1" required="0"/>
|
||||
<label for="alias_name" class="oe_edit_only "/>
|
||||
<field name="alias_name" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" class="oe_inline"/>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only" string="Project Name"/>
|
||||
<h1>
|
||||
<field name="name" string="Project Name"/>
|
||||
</h1>
|
||||
<div name="options_active">
|
||||
<field name="use_tasks" class="oe_inline"/>
|
||||
<label for="use_tasks"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_right oe_button_box" name="buttons">
|
||||
<button name="%(act_project_project_2_project_task_all)d" string="Tasks"
|
||||
type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"/>
|
||||
<button name="%(base.action_attachment)d" string="Documents" type="action"/>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="user_id" string="Project Manager" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>
|
||||
<field name="partner_id" string="Contact" on_change="onchange_partner_id(partner_id)"/>
|
||||
<field name="privacy_visibility"/>
|
||||
<field name="analytic_account_id" invisible="1" required="0"/>
|
||||
</group>
|
||||
<group>
|
||||
<table>
|
||||
<tr name="use_tasks_row">
|
||||
<td><group><field name="use_tasks"/></group></td>
|
||||
<td><button icon="terp-gtk-go-back-rtl" name="%(act_project_project_2_project_task_all)d" string="Tasks" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"/></td>
|
||||
</tr>
|
||||
<tr name="use_attachment_row">
|
||||
<td/>
|
||||
<td><button icon="terp-gtk-go-back-rtl" class="oe_btn_width" name="%(base.action_attachment)d" string="Documents" type="action"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
<field name="privacy_visibility"/>
|
||||
<field name="analytic_account_id" readonly="1" required="0"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
|
@ -126,6 +122,13 @@
|
|||
</field>
|
||||
</page>
|
||||
<page string="Other Info">
|
||||
<group string="Email Interface" colspan="2">
|
||||
<div attrs="{'invisible': [('alias_domain', '=', False)]}">
|
||||
<field name="alias_id" invisible="1" required="0"/>
|
||||
<label for="alias_name" class="oe_edit_only "/>
|
||||
<field name="alias_name" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/>@<field name="alias_domain" class="oe_inline"/>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<group string="Administration">
|
||||
<field name="planned_hours" widget="float_time"/>
|
||||
|
@ -133,11 +136,11 @@
|
|||
<field name="resource_calendar_id"/>
|
||||
</group>
|
||||
<group string="Miscellaneous" name="misc">
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection" required="1"/>
|
||||
<field name="parent_id" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/>
|
||||
<field name="priority"/>
|
||||
<field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
|
||||
<field name="currency_id" groups="base.group_multi_company" required="1"/>
|
||||
<field name="parent_id" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection" required="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
@ -312,7 +315,7 @@
|
|||
<field name="search_view_id" ref="view_project_project_filter"/>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_form_nocontent_create">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to start a new project.
|
||||
</p>
|
||||
<p>
|
||||
|
|
|
@ -26,11 +26,14 @@
|
|||
|
||||
<data noupdate="1">
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Add todo items on project tasks, to help you organize your work. This module supports the methodology Getting Things Done (GTD), created by David Allen, and described in the book of the same name.</value>
|
||||
<value>Module Todo Lists has been installed</value>
|
||||
</function>
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Todo Lists application installed!</field>
|
||||
<field name="body">Add todo items on project tasks, to help you organize your work.
|
||||
This application supports the Getting Things Done (GTD) methodology, based on David Allen's book.</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -21,11 +21,11 @@
|
|||
##############################################################################
|
||||
|
||||
{
|
||||
'name': 'Issues Tracker',
|
||||
'name': 'Issue Tracker',
|
||||
'version': '1.0',
|
||||
'category': 'Project Management',
|
||||
'sequence': 22,
|
||||
'summary': 'Support, Bug Traker, Helpdesk',
|
||||
'summary': 'Support, Bug Tracker, Helpdesk',
|
||||
'description': """
|
||||
This module provides Issues/Bugs Management in Project.
|
||||
=======================================================
|
||||
|
|
|
@ -562,7 +562,7 @@ class account_analytic_account(osv.osv):
|
|||
_description = 'Analytic Account'
|
||||
|
||||
_columns = {
|
||||
'use_issues' : fields.boolean('Issues Tracking', help="Check this field if this project manages issues"),
|
||||
'use_issues' : fields.boolean('Issues', help="Check this field if this project manages issues"),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
|
|
|
@ -32,13 +32,15 @@
|
|||
</record>
|
||||
|
||||
<!-- notify all employees of module installation -->
|
||||
<function model="mail.group" name="message_post">
|
||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
||||
<value eval="[ref('mail.group_all_employees')]"/>
|
||||
<value>Manage the issues you might face in a project, like bugs in a system, client complaints or material breakdowns. You can record issues, assign them to some responsible person, and keep track of their status as they evolve over time.
|
||||
<record model="mail.message" id="module_install_notification">
|
||||
<field name="model">mail.group</field>
|
||||
<field name="res_id" ref="mail.group_all_employees"/>
|
||||
<field name="type">notification</field>
|
||||
<field name="subject">Issue Tracker application installed!</field>
|
||||
<field name="body">Manage the issues you might face in a project, such as bugs in a system, client complaints or material breakdowns.
|
||||
You can record issues, assign them to a responsible person, and keep track of their status as they evolve over time.
|
||||
Access all issues from the top Project menu, and access the issues of a specific project via the projects gallery view.</field>
|
||||
</record>
|
||||
|
||||
You can access issues from the top menu Project, and access the issues of a specific project from the projects gallery view.</value>
|
||||
<value>Module Issues Tracker has been installed.</value>
|
||||
</function>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -355,11 +355,12 @@
|
|||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//tr[@name="use_tasks_row"]' position='after'>
|
||||
<tr>
|
||||
<td><group><field name="use_issues"/></group></td>
|
||||
<td><button icon="terp-gtk-go-back-rtl" name="%(act_project_project_2_project_issue_all)d" string="Issues" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"/></td>
|
||||
</tr>
|
||||
<xpath expr='//div[@name="options_active"]' position='inside'>
|
||||
<field name="use_issues" class="oe_inline"/>
|
||||
<label for="use_issues"/>
|
||||
</xpath>
|
||||
<xpath expr='//div[@name="buttons"]' position='inside'>
|
||||
<button name="%(act_project_project_2_project_issue_all)d" string="Issues" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"/>
|
||||
</xpath>
|
||||
<field name="priority" position="before">
|
||||
<field name="project_escalation_id"/>
|
||||
|
@ -382,7 +383,7 @@
|
|||
<xpath expr="//div[contains(@class, 'oe_kanban_project_list')]" position="inside">
|
||||
<a t-if="record.use_issues.raw_value"
|
||||
name="%(act_project_project_2_project_issue_all)d" type="action">
|
||||
Issues(<field name="issue_count"/>)</a>
|
||||
<field name="issue_count"/> Issues</a>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -273,9 +273,9 @@ class account_analytic_account(osv.osv):
|
|||
_inherit = 'account.analytic.account'
|
||||
_description = 'Analytic Account'
|
||||
_columns = {
|
||||
'use_phases': fields.boolean('Phases Planing', help="Check this field if project manages phases"),
|
||||
'use_phases': fields.boolean('Phases', help="Check this field if you plan to use phase-based scheduling"),
|
||||
}
|
||||
|
||||
|
||||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
|
||||
if template_id and 'value' in res:
|
||||
|
|
|
@ -96,11 +96,14 @@
|
|||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//tr[@name="use_tasks_row"]' position='after'>
|
||||
<tr>
|
||||
<td><group><field name="use_phases"/></group></td>
|
||||
<td><button icon="terp-gtk-go-back-rtl" name="%(act_project_phases)d" string="Phases" type="action" attrs="{'invisible':[('use_phases','=', 0)]}"/></td>
|
||||
</tr>
|
||||
<xpath expr="//div[@name='options_active']" position='inside'>
|
||||
<field name="use_phases" class="oe_inline"/>
|
||||
<label for="use_phases"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='buttons']" position='inside'>
|
||||
<button icon="terp-gtk-go-back-rtl" name="%(act_project_phases)d"
|
||||
string="Phases" type="action"
|
||||
attrs="{'invisible':[('use_phases','=', 0)]}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -347,11 +350,9 @@
|
|||
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
|
||||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//separator[@name="project_sep"]' position='replace'>
|
||||
<separator name="project_sep" string="Project Management" colspan="4"/> <!-- removal of invisible attribute -->
|
||||
</xpath>
|
||||
<xpath expr='//separator[@name="project_sep"]' position='after'>
|
||||
<xpath expr='//div[@name="project"]' position='inside'>
|
||||
<field name="use_phases"/>
|
||||
<label for="use_phases"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -48,7 +48,7 @@ with the effect of creating, editing and deleting either ways.
|
|||
'test/work_timesheet.yml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'auto_install': True,
|
||||
'certificate': '0075123647453',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -28,33 +28,6 @@ from tools.translate import _
|
|||
|
||||
class project_project(osv.osv):
|
||||
_inherit = 'project.project'
|
||||
|
||||
def _to_invoice(self, cr, uid, ids, field_name, arg, context=None):
|
||||
account_analytic_line = self.pool.get("account.analytic.line")
|
||||
res = {}
|
||||
for project in self.browse(cr,uid,ids,context=context):
|
||||
line_ids = account_analytic_line.search(cr, uid, [('account_id', '=', project.analytic_account_id.id), ('to_invoice','=',1), ('invoice_id','=',False)])
|
||||
lines = account_analytic_line.browse(cr, uid, line_ids, context)
|
||||
res[project.id] = {
|
||||
'amount_to_invoice': sum(line.amount for line in lines),
|
||||
'time_to_invoice': sum(line.unit_amount for line in lines),
|
||||
}
|
||||
return res
|
||||
|
||||
def _timesheet_count(self, cr, uid, ids, field_name, arg, context=None):
|
||||
account_analytic_line = self.pool.get('account.analytic.line')
|
||||
res = {}
|
||||
for project in self.browse(cr, uid, ids, context):
|
||||
line_ids = account_analytic_line.search(cr, uid, [('account_id', '=', project.analytic_account_id.id)])
|
||||
res[project.id] = len(line_ids)
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'amount_to_invoice': fields.function(_to_invoice, string="Amount to Invoice", multi="sums"),
|
||||
'time_to_invoice': fields.function(_to_invoice, string="Time to Invoice", multi="sums"),
|
||||
'timesheet_count': fields.function(_timesheet_count, type='integer', string="Issue"),
|
||||
}
|
||||
|
||||
def onchange_partner_id(self, cr, uid, ids, part=False, context=None):
|
||||
res = super(project_project, self).onchange_partner_id(cr, uid, ids, part, context)
|
||||
if part and res and ('value' in res):
|
||||
|
@ -66,6 +39,31 @@ class project_project(osv.osv):
|
|||
res['value'].update({'to_invoice': factor_id})
|
||||
return res
|
||||
|
||||
_defaults = {
|
||||
'use_timesheets': True,
|
||||
}
|
||||
|
||||
def open_timesheets(self, cr, uid, ids, context=None):
|
||||
""" open Timesheets view """
|
||||
project = self.browse(cr, uid, ids[0], context)
|
||||
try:
|
||||
journal_id = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_timesheet', 'analytic_journal').id
|
||||
except ValueError:
|
||||
journal_id = False
|
||||
view_context = {
|
||||
'search_default_account_id': [project.analytic_account_id.id],
|
||||
'default_account_id': project.analytic_account_id.id,
|
||||
'default_journal_id': journal_id,
|
||||
}
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('Bill Tasks Works'),
|
||||
'res_model': 'account.analytic.line',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'context': view_context,
|
||||
'nodestroy': True,
|
||||
}
|
||||
project_project()
|
||||
|
||||
class project_work(osv.osv):
|
||||
|
|
|
@ -9,36 +9,29 @@
|
|||
<field name="arch" type="xml">
|
||||
<field name="use_tasks" position="after">
|
||||
<field name="use_timesheets"/>
|
||||
<field name="timesheet_count"/>
|
||||
<field name="hours_quantity"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="partner_id"/>
|
||||
</field>
|
||||
<xpath expr="//div[contains(@class, 'oe_kanban_project_list')]" position="inside">
|
||||
<a t-if="record.use_timesheets.raw_value"
|
||||
name="open_timesheets" type="object">Timesheets(<field name="timesheet_count"/>)</a>
|
||||
</xpath>
|
||||
<xpath expr="//tr[contains(@class, 'oe_kanban_project_deadline')]" position="before">
|
||||
|
||||
<tr class="oe_kanban_project_fields oe_kanban_project_invoice" t-if="record.partner_id.raw_value">
|
||||
<th>Amount to invoice</th>
|
||||
<td><field name="amount_to_invoice"/> <t t-esc="record.currency_id.raw_value[1].split(' ')[1][1]"/></td>
|
||||
</tr>
|
||||
<tr class="oe_kanban_project_fields oe_kanban_project_invoice" t-if="record.partner_id.raw_value">
|
||||
<th>Time to Invoice</th>
|
||||
<td><field name="time_to_invoice"/> <field name="company_uom_id"/></td>
|
||||
</tr>
|
||||
name="open_timesheets" type="object"><field name="hours_quantity"/> Timesheets</a>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="project_invoice_form_cutomer" model="ir.ui.view">
|
||||
<field name="name">Inherit project form : Customer</field>
|
||||
<record id="project_invoice_form" model="ir.ui.view">
|
||||
<field name="name">Inherit project form : Invoicing Data</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="analytic_contract_project.project_invoice_form"/>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="replace">
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id)" string="Contact" attrs="{'required':[('to_invoice','!=',False)]}"/>
|
||||
</field>
|
||||
<xpath expr='//div[@name="options_active"]' position='inside'>
|
||||
<field name="use_timesheets" class="oe_inline"/>
|
||||
<label for="use_timesheets"/>
|
||||
</xpath>
|
||||
<xpath expr='//div[@name="buttons"]' position="inside">
|
||||
<button name="open_timesheets" string="Timesheets" type="object" attrs="{'invisible':[('use_timesheets','=', 0)]}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -48,7 +41,6 @@
|
|||
<field name="inherit_id" ref="project.view_project_project_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//filter[@string="Project(s) Manager"]' position='after'>
|
||||
<separator/>
|
||||
<filter icon="terp-camera_test" string="Billable" domain="[('to_invoice','!=', False)]" help="Billable Project"/>
|
||||
</xpath>
|
||||
</field>
|
||||
|
@ -98,7 +90,7 @@
|
|||
Click to add a work to invoice.
|
||||
</p><p>
|
||||
You will find here all works made on tasks that you can
|
||||
invoice.
|
||||
invoice.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue