[MERGE]: merting from the same branch
bzr revid: mga@tinyerp.com-20091203132245-gwiatkv8ubfk6zn7
This commit is contained in:
commit
452c6c2455
|
@ -320,7 +320,8 @@ class account_account(osv.osv):
|
|||
'company_id': _default_company,
|
||||
'active': lambda *a: True,
|
||||
'check_history': lambda *a: True,
|
||||
'currency_mode': lambda *a: 'current'
|
||||
'currency_mode': lambda *a: 'current',
|
||||
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'account.account', c),
|
||||
}
|
||||
|
||||
def _check_recursion(self, cr, uid, ids):
|
||||
|
@ -641,7 +642,7 @@ class account_period(osv.osv):
|
|||
#CHECKME: shouldn't we check the state of the period?
|
||||
ids = self.search(cr, uid, [('date_start','<=',dt),('date_stop','>=',dt)])
|
||||
if not ids:
|
||||
raise osv.except_osv(_('Error !'), _('No period defined for this date !\nPlease create a fiscal year.'))
|
||||
raise osv.except_osv(_('Error !'), _('No period defined for this date: %s !\nPlease create a fiscal year.')%dt)
|
||||
return ids
|
||||
|
||||
def action_draft(self, cr, uid, ids, *args):
|
||||
|
@ -781,7 +782,7 @@ class account_move(osv.osv):
|
|||
('journal_pur_voucher','Journal Purchase'),
|
||||
('journal_voucher','Journal Voucher'),
|
||||
],'Type', readonly=True, select=True, states={'draft':[('readonly',False)]}),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True),
|
||||
'company_id': fields.related('journal_id','company_id',type='many2one',relation='res.company',string='Company'),
|
||||
}
|
||||
_defaults = {
|
||||
'name': lambda *a: '/',
|
||||
|
@ -919,7 +920,10 @@ class account_move(osv.osv):
|
|||
amount+= (line.debit - line.credit)
|
||||
return amount
|
||||
|
||||
def _centralise(self, cr, uid, move, mode):
|
||||
def _centralise(self, cr, uid, move, mode, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
if mode=='credit':
|
||||
account_id = move.journal_id.default_debit_account_id.id
|
||||
mode2 = 'debit'
|
||||
|
@ -942,8 +946,9 @@ class account_move(osv.osv):
|
|||
if res:
|
||||
line_id = res[0]
|
||||
else:
|
||||
context.update({'journal_id': move.journal_id.id, 'period_id': move.period_id.id})
|
||||
line_id = self.pool.get('account.move.line').create(cr, uid, {
|
||||
'name': 'Centralisation '+mode,
|
||||
'name': _t(cr, None, 'selection', context.get('lang'), source=(mode.capitalize()+' Centralisation')) or (mode.capitalize()+' Centralisation'),
|
||||
'centralisation': mode,
|
||||
'account_id': account_id,
|
||||
'move_id': move.id,
|
||||
|
@ -952,7 +957,7 @@ class account_move(osv.osv):
|
|||
'date': move.period_id.date_stop,
|
||||
'debit': 0.0,
|
||||
'credit': 0.0,
|
||||
}, {'journal_id': move.journal_id.id, 'period_id': move.period_id.id})
|
||||
}, context)
|
||||
|
||||
# find the first line of this move with the other mode
|
||||
# so that we can exclude it from our calculation
|
||||
|
@ -1034,8 +1039,8 @@ class account_move(osv.osv):
|
|||
#
|
||||
continue
|
||||
if journal.centralisation:
|
||||
self._centralise(cr, uid, move, 'debit')
|
||||
self._centralise(cr, uid, move, 'credit')
|
||||
self._centralise(cr, uid, move, 'debit', context=context)
|
||||
self._centralise(cr, uid, move, 'credit', context=context)
|
||||
self.pool.get('account.move.line').write(cr, uid, line_draft_ids, {
|
||||
'state': 'valid'
|
||||
}, context, check=False)
|
||||
|
@ -1049,11 +1054,11 @@ class account_move(osv.osv):
|
|||
'state': 'draft'
|
||||
}, context, check=False)
|
||||
ok = False
|
||||
if ok:
|
||||
list_ids = []
|
||||
for tmp in move.line_id:
|
||||
list_ids.append(tmp.id)
|
||||
self.pool.get('account.move.line').create_analytic_lines(cr, uid, list_ids, context)
|
||||
if ok:
|
||||
list_ids = []
|
||||
for tmp in move.line_id:
|
||||
list_ids.append(tmp.id)
|
||||
self.pool.get('account.move.line').create_analytic_lines(cr, uid, list_ids, context)
|
||||
return ok
|
||||
account_move()
|
||||
|
||||
|
@ -1814,11 +1819,13 @@ class account_account_template(osv.osv):
|
|||
'parent_id': fields.many2one('account.account.template','Parent Account Template', ondelete='cascade'),
|
||||
'child_parent_ids':fields.one2many('account.account.template','parent_id','Children'),
|
||||
'tax_ids': fields.many2many('account.tax.template', 'account_account_template_tax_rel','account_id','tax_id', 'Default Taxes'),
|
||||
'nocreate': fields.boolean('Optional create', help="If checked, the new chart of accounts will not contain this by default."),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'reconcile': lambda *a: False,
|
||||
'type' : lambda *a :'view',
|
||||
'nocreate': lambda *a: False,
|
||||
}
|
||||
|
||||
def _check_recursion(self, cr, uid, ids):
|
||||
|
@ -1850,6 +1857,67 @@ class account_account_template(osv.osv):
|
|||
|
||||
account_account_template()
|
||||
|
||||
class account_add_tmpl_wizard(osv.osv_memory):
|
||||
"""Add one more account from the template.
|
||||
|
||||
With the 'nocreate' option, some accounts may not be created. Use this to add them later."""
|
||||
_name = 'account.addtmpl.wizard'
|
||||
|
||||
def _get_def_cparent(self, cr, uid, context):
|
||||
acc_obj=self.pool.get('account.account')
|
||||
tmpl_obj=self.pool.get('account.account.template')
|
||||
#print "Searching for ",context
|
||||
tids=tmpl_obj.read(cr, uid, [context['tmpl_ids']],['parent_id'])
|
||||
if not tids or not tids[0]['parent_id']:
|
||||
return False
|
||||
ptids = tmpl_obj.read(cr, uid, [tids[0]['parent_id'][0]],['code'])
|
||||
if not ptids or not ptids[0]['code']:
|
||||
raise osv.except_osv(_('Error !'), _('Cannot locate parent code for template account!'))
|
||||
res = acc_obj.search(cr,uid,[('code','=',ptids[0]['code'])])
|
||||
if res:
|
||||
return res[0]
|
||||
else:
|
||||
return False
|
||||
|
||||
_columns = {
|
||||
'cparent_id':fields.many2one('account.account', 'Parent target', help="Create an account with the selected template under this existing parent.", required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'cparent_id': _get_def_cparent,
|
||||
}
|
||||
|
||||
def action_create(self,cr,uid,ids,context=None):
|
||||
acc_obj=self.pool.get('account.account')
|
||||
tmpl_obj=self.pool.get('account.account.template')
|
||||
data= self.read(cr,uid,ids)
|
||||
company_id = acc_obj.read(cr,uid,[data[0]['cparent_id']],['company_id'])[0]['company_id'][0]
|
||||
account_template = tmpl_obj.browse(cr,uid,context['tmpl_ids'])
|
||||
#tax_ids = []
|
||||
#for tax in account_template.tax_ids:
|
||||
# tax_ids.append(tax_template_ref[tax.id])
|
||||
vals={
|
||||
'name': account_template.name,
|
||||
#'sign': account_template.sign,
|
||||
'currency_id': account_template.currency_id and account_template.currency_id.id or False,
|
||||
'code': account_template.code,
|
||||
'type': account_template.type,
|
||||
'user_type': account_template.user_type and account_template.user_type.id or False,
|
||||
'reconcile': account_template.reconcile,
|
||||
'shortcut': account_template.shortcut,
|
||||
'note': account_template.note,
|
||||
'parent_id': data[0]['cparent_id'],
|
||||
# 'tax_ids': [(6,0,tax_ids)], todo!!
|
||||
'company_id': company_id,
|
||||
}
|
||||
# print "Creating:", vals
|
||||
new_account = acc_obj.create(cr,uid,vals)
|
||||
return {'type':'state', 'state': 'end' }
|
||||
|
||||
def action_cancel(self,cr,uid,ids,context=None):
|
||||
return { 'type': 'state', 'state': 'end' }
|
||||
|
||||
account_add_tmpl_wizard()
|
||||
|
||||
class account_tax_code_template(osv.osv):
|
||||
|
||||
_name = 'account.tax.code.template'
|
||||
|
@ -2145,7 +2213,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
|
|||
#deactivate the parent_store functionnality on account_account for rapidity purpose
|
||||
self.pool._init = True
|
||||
|
||||
children_acc_template = obj_acc_template.search(cr, uid, [('parent_id','child_of',[obj_acc_root.id])])
|
||||
children_acc_template = obj_acc_template.search(cr, uid, [('parent_id','child_of',[obj_acc_root.id]),('nocreate','!=',True)])
|
||||
children_acc_template.sort()
|
||||
for account_template in obj_acc_template.browse(cr, uid, children_acc_template):
|
||||
tax_ids = []
|
||||
|
|
|
@ -97,9 +97,11 @@ class account_analytic_line(osv.osv):
|
|||
|
||||
def view_header_get(self, cr, user, view_id, view_type, context):
|
||||
if context.get('account_id', False):
|
||||
# account_id in context may also be pointing to an account.account.id
|
||||
cr.execute('select name from account_analytic_account where id=%s', (context['account_id'],))
|
||||
res = cr.fetchone()
|
||||
res = _('Entries: ')+ (res[0] or '')
|
||||
if res:
|
||||
res = _('Entries: ')+ (res[0] or '')
|
||||
return res
|
||||
return False
|
||||
|
||||
|
|
|
@ -578,7 +578,7 @@ class account_bank_statement_line(osv.osv):
|
|||
'account_id': fields.many2one('account.account','Account',
|
||||
required=True),
|
||||
'statement_id': fields.many2one('account.bank.statement', 'Statement',
|
||||
select=True, required=True),
|
||||
select=True, required=True, ondelete='cascade'),
|
||||
'reconcile_id': fields.many2one('account.bank.statement.reconcile',
|
||||
'Reconcile', states={'confirm':[('readonly',True)]}),
|
||||
'move_ids': fields.many2many('account.move',
|
||||
|
|
|
@ -425,6 +425,20 @@
|
|||
<field name="context">{'type':'out_refund'}</field>
|
||||
<field name="search_view_id" ref="view_account_invoice_filter"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree3_view1" model="ir.actions.act_window.view">
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="act_window_id" ref="action_invoice_tree3"/>
|
||||
</record>
|
||||
|
||||
<record id="action_invoice_tree3_view2" model="ir.actions.act_window.view">
|
||||
<field eval="2" name="sequence"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="invoice_form"/>
|
||||
<field name="act_window_id" ref="action_invoice_tree3"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_invoice_tree3" id="menu_action_invoice_tree3" parent="account.menu_finance_invoice"/>
|
||||
|
||||
<record id="action_invoice_tree3_new" model="ir.actions.act_window">
|
||||
|
|
|
@ -103,9 +103,10 @@ class account_move_line(osv.osv):
|
|||
|
||||
total_new=0.00
|
||||
for i in context['lines']:
|
||||
total_new +=(i[2]['debit'] or 0.00)- (i[2]['credit'] or 0.00)
|
||||
for item in i[2]:
|
||||
data[item]=i[2][item]
|
||||
if i[2]:
|
||||
total_new +=(i[2]['debit'] or 0.00)- (i[2]['credit'] or 0.00)
|
||||
for item in i[2]:
|
||||
data[item]=i[2][item]
|
||||
if context['journal']:
|
||||
journal_obj=self.pool.get('account.journal').browse(cr,uid,context['journal'])
|
||||
if journal_obj.type == 'purchase':
|
||||
|
@ -388,7 +389,7 @@ class account_move_line(osv.osv):
|
|||
'analytic_account_id' : fields.many2one('account.analytic.account', 'Analytic Account'),
|
||||
#TODO: remove this
|
||||
'amount_taxed':fields.float("Taxed Amount",digits=(16,int(tools.config['price_accuracy']))),
|
||||
'company_id': fields.related('move_id','company_id',type='many2one',object='res.company',string='Company')
|
||||
'company_id': fields.related('account_id','company_id',type='many2one',object='res.company',string='Company')
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
<field name="code" select="1"/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_stop"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="company_id" groups="base.group_multi_company,base.group_extended"/>
|
||||
<field name="fiscalyear_id"/>
|
||||
<field name="special"/>
|
||||
<separator colspan="4" string="States"/>
|
||||
|
@ -340,7 +340,6 @@
|
|||
<field name="date"/>
|
||||
<field name="ref"/>
|
||||
<field name="name"/>
|
||||
<field name="account_id"/>
|
||||
<field name="type"/>
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id, type, parent.currency)"/>
|
||||
<field domain="[('journal_id','=',parent.journal_id)]" name="account_id"/>
|
||||
|
@ -351,7 +350,6 @@
|
|||
<form string="Statement lines">
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="account_id"/>
|
||||
<field name="type"/>
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id, type, parent.currency)"/>
|
||||
<field domain="[('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]" name="account_id"/>
|
||||
|
@ -792,9 +790,9 @@
|
|||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_move_line_filter" model="ir.ui.view">
|
||||
<field name="name">account.move.line.select</field>
|
||||
|
||||
<record id="view_account_move_line_filter" model="ir.ui.view">
|
||||
<field name="name">Entry Lines</field>
|
||||
<field name="model">account.move.line</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
|
@ -1479,8 +1477,28 @@
|
|||
</record>
|
||||
|
||||
|
||||
<record id="view_account_addtmpl_wizard_form" model="ir.ui.view">
|
||||
<field name="name">Account Add wizard</field>
|
||||
<field name="model">account.addtmpl.wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Account Add">
|
||||
<separator col="4" colspan="4" string="Select the common parent for the accounts"/>
|
||||
<field name="cparent_id"/>
|
||||
<group col="2" colspan="2">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel" name="action_cancel" type="object"/>
|
||||
<button icon="gtk-ok" name="action_create" string="Add" type="object"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<act_window domain="[]" id="action_account_addtmpl_wizard_form"
|
||||
name="Add account Wizard"
|
||||
res_model="account.addtmpl.wizard"
|
||||
context="{'tmpl_ids': active_id}"
|
||||
src_model="account.account.template"
|
||||
view_type="form" view_mode="form"/>
|
||||
|
||||
<!-- register configuration wizard -->
|
||||
|
||||
|
@ -1493,7 +1511,11 @@
|
|||
|
||||
|
||||
<!-- Account Templates -->
|
||||
<menuitem id="account_template_folder" name="Templates" parent="account.menu_finance_accounting"/>
|
||||
<menuitem
|
||||
id="account_template_folder"
|
||||
name="Templates"
|
||||
parent="account.menu_finance_accounting"
|
||||
groups="base.group_multi_company"/>
|
||||
|
||||
|
||||
<record id="view_account_template_form" model="ir.ui.view">
|
||||
|
|
|
@ -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: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-26 13:54+0000\n"
|
||||
"PO-Revision-Date: 2009-11-30 12:59+0000\n"
|
||||
"Last-Translator: Simon Vidmar <Unknown>\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: 2009-11-27 04:51+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
@ -2978,7 +2978,7 @@ msgstr "Davčna stopnja"
|
|||
#. module: account
|
||||
#: rml:account.analytic.account.journal:0
|
||||
msgid "Analytic Journal -"
|
||||
msgstr ""
|
||||
msgstr "Analitični dnevnik"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.analytic.account.analytic.check:0
|
||||
|
@ -4756,7 +4756,7 @@ msgstr ""
|
|||
#: selection:account.partner.balance.report,init,result_selection:0
|
||||
#: selection:account.third_party_ledger.report,init,result_selection:0
|
||||
msgid "Receivable Accounts"
|
||||
msgstr ""
|
||||
msgstr "Konti terjatev"
|
||||
|
||||
#. module: account
|
||||
#: wizard_button:account.move.line.unreconcile.select,init,open:0
|
||||
|
@ -5292,7 +5292,7 @@ msgstr "Poslovno leto"
|
|||
#. module: account
|
||||
#: wizard_button:account.analytic.line,init,open:0
|
||||
msgid "Open Entries"
|
||||
msgstr ""
|
||||
msgstr "Odprte postavke"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.analytic.account,type:0
|
||||
|
|
|
@ -61,9 +61,15 @@ class account_invoice(osv.osv):
|
|||
if context is None:
|
||||
context = {}
|
||||
type_inv = context.get('type', 'out_invoice')
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid)
|
||||
company_id = context.get('company_id', user.company_id.id)
|
||||
type2journal = {'out_invoice': 'sale', 'in_invoice': 'purchase', 'out_refund': 'sale', 'in_refund': 'purchase'}
|
||||
journal_obj = self.pool.get('account.journal')
|
||||
res = journal_obj.search(cr, uid, [('type', '=', type2journal.get(type_inv, 'sale'))], limit=1)
|
||||
res = journal_obj.search(cr, uid, [('type', '=', type2journal.get(type_inv, 'sale')),
|
||||
('company_id', '=', company_id)],
|
||||
limit=1)
|
||||
print "XXX",context
|
||||
print "XXX",res
|
||||
if res:
|
||||
return res[0]
|
||||
else:
|
||||
|
@ -226,7 +232,7 @@ class account_invoice(osv.osv):
|
|||
('in_invoice','Supplier Invoice'),
|
||||
('out_refund','Customer Refund'),
|
||||
('in_refund','Supplier Refund'),
|
||||
],'Type', readonly=True, select=True),
|
||||
],'Type', readonly=True, select=True, change_default=True),
|
||||
|
||||
'number': fields.char('Invoice Number', size=32, readonly=True, help="Unique number of the invoice, computed automatically when the invoice is created."),
|
||||
'reference': fields.char('Invoice Reference', size=64, help="The partner reference of this invoice."),
|
||||
|
@ -284,7 +290,7 @@ class account_invoice(osv.osv):
|
|||
multi='all'),
|
||||
'currency_id': fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'journal_id': fields.many2one('account.journal', 'Journal', required=True,readonly=True, states={'draft':[('readonly',False)]}),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True, change_default=True),
|
||||
'check_total': fields.float('Total', digits=(16, int(config['price_accuracy'])), states={'open':[('readonly',True)],'close':[('readonly',True)]}),
|
||||
'reconciled': fields.function(_reconciled, method=True, string='Paid/Reconciled', type='boolean',
|
||||
store={
|
||||
|
@ -758,7 +764,7 @@ class account_invoice(osv.osv):
|
|||
for i in line:
|
||||
i[2]['period_id'] = period_id
|
||||
|
||||
move_id = self.pool.get('account.move').create(cr, uid, move)
|
||||
move_id = self.pool.get('account.move').create(cr, uid, move, context=context)
|
||||
new_move_name = self.pool.get('account.move').browse(cr, uid, move_id).name
|
||||
# make the invoice point to that move
|
||||
self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name})
|
||||
|
@ -989,6 +995,7 @@ class account_invoice(osv.osv):
|
|||
'date': date,
|
||||
'currency_id':currency_id,
|
||||
'amount_currency':amount_currency and direction * amount_currency or 0.0,
|
||||
'company_id': invoice.company_id.id,
|
||||
}
|
||||
l2 = {
|
||||
'debit': direction * pay_amount<0 and - direction * pay_amount,
|
||||
|
@ -999,6 +1006,7 @@ class account_invoice(osv.osv):
|
|||
'date': date,
|
||||
'currency_id':currency_id,
|
||||
'amount_currency':amount_currency and - direction * amount_currency or 0.0,
|
||||
'company_id': invoice.company_id.id,
|
||||
}
|
||||
|
||||
if not name:
|
||||
|
@ -1013,7 +1021,10 @@ class account_invoice(osv.osv):
|
|||
line_ids = []
|
||||
total = 0.0
|
||||
line = self.pool.get('account.move.line')
|
||||
cr.execute('select id from account_move_line where move_id in ('+str(move_id)+','+str(invoice.move_id.id)+')')
|
||||
move_ids = [move_id,]
|
||||
if invoice.move_id:
|
||||
move_ids.append(invoice.move_id.id)
|
||||
cr.execute('SELECT id FROM account_move_line WHERE move_id = ANY(%s)',(move_ids,))
|
||||
lines = line.browse(cr, uid, map(lambda x: x[0], cr.fetchall()) )
|
||||
for l in lines+invoice.payment_ids:
|
||||
if l.account_id.id==src_account_id:
|
||||
|
@ -1292,6 +1303,7 @@ class account_invoice_tax(osv.osv):
|
|||
'base_amount': fields.float('Base Code Amount', digits=(16,int(config['price_accuracy']))),
|
||||
'tax_code_id': fields.many2one('account.tax.code', 'Tax Code', help="The tax basis of the tax declaration."),
|
||||
'tax_amount': fields.float('Tax Code Amount', digits=(16,int(config['price_accuracy']))),
|
||||
'company_id': fields.related('account_id','company_id',type='many2one',relation='res.company',string='Company'),
|
||||
}
|
||||
|
||||
def base_change(self, cr, uid, ids, base,currency_id=False,company_id=False,date_invoice=False):
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Account Data">
|
||||
<field name="partner_id"/>
|
||||
<field name="partner_id" select="1"/>
|
||||
<newline/>
|
||||
<field name="date_start"/>
|
||||
<field name="date" select="2"/>
|
||||
|
|
|
@ -67,6 +67,8 @@
|
|||
"access_res_currency_rate_account_manager","res.currency.rate account manager","base.model_res_currency_rate","group_account_manager",1,1,1,1
|
||||
"access_account_config_wizard_account_manager","account.config.wizard account manager","model_account_config_wizard","group_account_manager",1,1,1,1
|
||||
"access_account_config_wizard_system_manager","account.config.wizard system manager","model_account_config_wizard","base.group_system",1,1,1,1
|
||||
"access_account_add_tmpl_wizard_account_manager","account.addtmpl.wizard account manager","model_account_addtmpl_wizard","group_account_manager",1,1,1,1
|
||||
"access_account_add_tmpl_wizard_system_manager","account.addtmpl.wizard system manager","model_account_addtmpl_wizard","base.group_system",1,1,1,1
|
||||
"access_account_invoice_user","account.invoice user","model_account_invoice","base.group_user",1,0,0,0
|
||||
"access_account_invoice_user","account.invoice.line user","model_account_invoice_line","base.group_user",1,0,0,0
|
||||
"access_account_invoice_user","account.invoice.tax user","model_account_invoice_tax","base.group_user",1,0,0,0
|
||||
|
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-18 06:21+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 18:07+0000\n"
|
||||
"Last-Translator: T Kortehisto <Unknown>\n"
|
||||
"Language-Team: Finnish <fi@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: 2009-11-19 04:36+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
|
@ -239,7 +239,7 @@ msgstr "Laskuttamaton määrä"
|
|||
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_all_pending
|
||||
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_all_pending
|
||||
msgid "Pending Analytic Accounts"
|
||||
msgstr ""
|
||||
msgstr "Vireillä olevat analyyttiset tilit"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,hours_qtt_invoiced:0
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
|
|
|
@ -70,7 +70,7 @@ account_analytic_default()
|
|||
class account_invoice_line(osv.osv):
|
||||
_inherit = 'account.invoice.line'
|
||||
_description = 'account invoice line'
|
||||
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition=False, price_unit=False, address_invoice_id=False, context={}):
|
||||
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition=False, price_unit=False, address_invoice_id=False, context=None):
|
||||
res_prod = super(account_invoice_line,self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition, price_unit, address_invoice_id, context)
|
||||
rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context)
|
||||
if rec:
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_analytic_default
|
||||
|
|
|
@ -253,12 +253,12 @@ class account_invoice_line(osv.osv):
|
|||
vals['analytics_id'] = vals['analytics_id'][0]
|
||||
return super(account_invoice_line, self).create(cr, uid, vals, context)
|
||||
|
||||
def move_line_get_item(self, cr, uid, line, context={}):
|
||||
def move_line_get_item(self, cr, uid, line, context=None):
|
||||
res= super(account_invoice_line,self).move_line_get_item(cr, uid, line, context={})
|
||||
res ['analytics_id']=line.analytics_id and line.analytics_id.id or False
|
||||
return res
|
||||
|
||||
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, context={}):
|
||||
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, context=None):
|
||||
res_prod = super(account_invoice_line,self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, context)
|
||||
rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context)
|
||||
if rec and rec.analytics_id:
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_analytic_plans
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_balance
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_budget
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_chart
|
||||
|
|
|
@ -7,16 +7,16 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-28 07:28+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:49+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 05:19+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_chart
|
||||
#: model:ir.module.module,description:account_chart.module_meta_information
|
||||
msgid "Remove minimal account chart"
|
||||
msgstr ""
|
||||
msgstr "去除最小化的会计科目表"
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_date_check
|
||||
|
|
|
@ -7,20 +7,19 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-17 09:32+0000\n"
|
||||
"Last-Translator: Jordi Esteve - http://www.zikzakmedia.com "
|
||||
"<jesteve@zikzakmedia.com>\n"
|
||||
"PO-Revision-Date: 2009-11-30 18:05+0000\n"
|
||||
"Last-Translator: Hesed Franquet <Unknown>\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: 2009-11-18 04:36+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Date :"
|
||||
msgstr ""
|
||||
msgstr "Fecha :"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,next,partner_ids:0
|
||||
|
@ -30,7 +29,7 @@ msgstr "Empresas"
|
|||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Customer Ref :"
|
||||
msgstr ""
|
||||
msgstr "Ref. cliente :"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.actions.act_window,name:account_followup.act_account_partner_account_move_payable_all
|
||||
|
@ -51,7 +50,7 @@ msgstr "Mensaje impreso"
|
|||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Amount In Currency"
|
||||
msgstr ""
|
||||
msgstr "Importe en divisa"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
|
@ -88,7 +87,7 @@ msgstr "Debe"
|
|||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "Email Settings"
|
||||
msgstr ""
|
||||
msgstr "Configuración de correo electrónico"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,account_type:0
|
||||
|
@ -125,7 +124,7 @@ msgstr "Seguimientos"
|
|||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,init,date:0
|
||||
msgid "Follow-up Sending Date"
|
||||
msgstr ""
|
||||
msgstr "Fecha envío del seguimiento"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup:0
|
||||
|
@ -152,7 +151,7 @@ msgstr "Compañía"
|
|||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Invoice Date"
|
||||
msgstr ""
|
||||
msgstr "Fecha factura"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,next,email_subject:0
|
||||
|
@ -187,7 +186,7 @@ msgstr "Criterios de seguimientos"
|
|||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "Partner Selection"
|
||||
msgstr ""
|
||||
msgstr "Selección empresa"
|
||||
|
||||
#. module: account_followup
|
||||
#: constraint:ir.ui.view:0
|
||||
|
@ -202,7 +201,7 @@ msgstr "Tipo de plazo"
|
|||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,init:0
|
||||
msgid "Follow-up and Date Selection"
|
||||
msgstr ""
|
||||
msgstr "Selección seguimiento y fecha"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
|
@ -231,6 +230,19 @@ msgid ""
|
|||
"Best Regards,\n"
|
||||
"\t\t\t"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Estimado %(partner_name)s,\n"
|
||||
"\n"
|
||||
"Salvo si hubiera un error por parte nuestra, parece que los siguientes "
|
||||
"importes están pendientes de pago. Por favor, tome las medidas apropiadas "
|
||||
"para llevar a cabo este pago en los próximos 8 días.\n"
|
||||
"\n"
|
||||
"Si el pago hubiera sido realizado después de enviar este correo, por favor "
|
||||
"no lo tenga en cuenta. No dude en ponerse en contacto con nuestro "
|
||||
"departamento de contabilidad.\n"
|
||||
"\n"
|
||||
"Saludos cordiales,\n"
|
||||
"\t\t\t"
|
||||
|
||||
#. module: account_followup
|
||||
#: constraint:ir.model:0
|
||||
|
@ -243,7 +255,7 @@ msgstr ""
|
|||
#. module: account_followup
|
||||
#: wizard_button:account_followup.followup.print.all,summary,end:0
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
msgstr "Ok"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.followup,name:0
|
||||
|
@ -265,7 +277,7 @@ msgstr "Fin de mes"
|
|||
#: view:account_followup.followup.line:0
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(company_name)s: User's Company name"
|
||||
msgstr ""
|
||||
msgstr "%(company_name): Nombre de la compañía del usuario"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.actions.act_window,name:account_followup.act_account_partner_account_move_all
|
||||
|
@ -307,23 +319,23 @@ msgstr "Continuar"
|
|||
#. module: account_followup
|
||||
#: model:ir.module.module,shortdesc:account_followup.module_meta_information
|
||||
msgid "Accounting follow-ups management"
|
||||
msgstr ""
|
||||
msgstr "Gestión de los seguimientos/avisos contables"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,summary:0
|
||||
#: wizard_field:account_followup.followup.print.all,summary,summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
msgstr "Resumen"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup.line:0
|
||||
msgid "Follow-Up Lines"
|
||||
msgstr ""
|
||||
msgstr "Líneas de seguimiento"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Document : Customer account statement"
|
||||
msgstr ""
|
||||
msgstr "Documento: Estado contable del cliente"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.stat:0
|
||||
|
@ -333,7 +345,7 @@ msgstr "Líneas de seguimiento"
|
|||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(company_currency)s: User's Company Currency"
|
||||
msgstr ""
|
||||
msgstr "%(company_currency)s: Divisa de la compañía del usuario"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,balance:0
|
||||
|
@ -345,6 +357,8 @@ msgstr "Saldo pendiente"
|
|||
msgid ""
|
||||
"This field allow you to select a forecast date to plan your follow-ups"
|
||||
msgstr ""
|
||||
"Este campo le permite seleccionar una fecha de previsión para planificar sus "
|
||||
"seguimientos"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account.move.line:0
|
||||
|
@ -375,6 +389,26 @@ msgid ""
|
|||
"Best Regards,\n"
|
||||
"\t\t\t"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Estimado %(partner_name)s,\n"
|
||||
"\n"
|
||||
"Estamos preocupados de ver que, a pesar de enviar un recordatorio, los pagos "
|
||||
"de su cuenta están ahora muy atrasados.\n"
|
||||
"\n"
|
||||
"Es esencial que realice el pago de forma inmediata, de lo contrario tendrá "
|
||||
"que considerar la suspensión de su cuenta, lo que significa que no seremos "
|
||||
"capaces de suministrar productos/servicios a su empresa.\n"
|
||||
"Por favor, tome las medidas apropiadas para llevar a cabo este pago en los "
|
||||
"próximos 8 días.\n"
|
||||
"\n"
|
||||
"Si hay un problema con el pago de la(s) factura(s) que desconocemos, no dude "
|
||||
"en ponerse en contacto con nuestro departamento de contabilidad de manera "
|
||||
"que podamos resolver el asunto lo más rápido posible.\n"
|
||||
"\n"
|
||||
"Los detalles de los pagos pendientes se listan a continuación.\n"
|
||||
"\n"
|
||||
"Saludos cordiales,\n"
|
||||
"\t\t\t"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
|
@ -436,11 +470,28 @@ msgid ""
|
|||
"Best Regards,\n"
|
||||
"\t\t\t"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Estimado %(partner_name)s,\n"
|
||||
"\n"
|
||||
"A pesar de varios recordatorios, la deuda de su cuenta todavía no está "
|
||||
"resuelta.\n"
|
||||
"\n"
|
||||
"A menos que el pago total se realice en los próximos 8 días, las acciones "
|
||||
"legales para el cobro de la deuda se tomarán sin más aviso.\n"
|
||||
"\n"
|
||||
"Confiamos en que esta medida será innecesaria y los detalles de los pagos "
|
||||
"pendientes se listan a continuación.\n"
|
||||
"\n"
|
||||
"En caso de cualquier consulta relativa a este asunto, no dude en ponerse en "
|
||||
"contacto con nuestro departamento de contabilidad.\n"
|
||||
"\n"
|
||||
"Saludos cordiales,\n"
|
||||
"\t\t\t"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Maturity Date"
|
||||
msgstr ""
|
||||
msgstr "Fecha vencimiento"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup.line:0
|
||||
|
@ -472,7 +523,7 @@ msgstr "Enviar correo electrónico de confirmación"
|
|||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,init,followup_id:0
|
||||
msgid "Follow-up"
|
||||
msgstr ""
|
||||
msgstr "Seguimiento"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,name:0
|
||||
|
@ -493,4 +544,4 @@ msgstr "Días de demora"
|
|||
#. module: account_followup
|
||||
#: wizard_button:account_followup.followup.print.all,next,print:0
|
||||
msgid "Print Follow Ups & Send Mails"
|
||||
msgstr ""
|
||||
msgstr "Imprimir seguimientos & Enviar correos"
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_followup
|
||||
|
|
|
@ -46,6 +46,8 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/notebook/page/field[@name='invoice_line']" position="replace">
|
||||
<!-- keep the original fields, because other views position on that, too -->
|
||||
<field name="invoice_line" invisible="True"/>
|
||||
<field name="abstract_line_ids" colspan="4" nolabel="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_payment
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_report
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-08 15:18+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:54+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 04:52+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_report
|
||||
|
@ -21,42 +21,42 @@ msgstr ""
|
|||
#: selection:account.report.report,type:0
|
||||
#: model:ir.model,name:account_report.model_account_report_history
|
||||
msgid "Indicator"
|
||||
msgstr ""
|
||||
msgstr "进度条"
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_field:print.indicators.pdf,init,file:0
|
||||
msgid "Select a PDF File"
|
||||
msgstr ""
|
||||
msgstr "选择一个 PDF 文件"
|
||||
|
||||
#. module: account_report
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Operators:"
|
||||
msgstr ""
|
||||
msgstr "运算符"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,parent_id:0
|
||||
msgid "Parent"
|
||||
msgstr ""
|
||||
msgstr "上级"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,disp_graph:0
|
||||
msgid "Display As Graph"
|
||||
msgstr ""
|
||||
msgstr "显示图形"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Account Debit:"
|
||||
msgstr ""
|
||||
msgstr "借方科目:"
|
||||
|
||||
#. module: account_report
|
||||
#: selection:account.report.report,type:0
|
||||
msgid "Others"
|
||||
msgstr ""
|
||||
msgstr "其它"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
|
@ -71,7 +71,7 @@ msgstr ""
|
|||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
msgstr "备注"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
|
@ -87,7 +87,7 @@ msgstr ""
|
|||
#: field:account.report.history,val:0
|
||||
#: field:account.report.report,amount:0
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
msgstr "值"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
|
@ -98,7 +98,7 @@ msgstr ""
|
|||
#: view:account.report.report:0
|
||||
#: selection:account.report.report,status:0
|
||||
msgid "Bad"
|
||||
msgstr ""
|
||||
msgstr "差"
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_view:print.indicators.pdf,init:0
|
||||
|
@ -118,7 +118,7 @@ msgstr ""
|
|||
#. module: account_report
|
||||
#: selection:account.report.report,status:0
|
||||
msgid "Very Bad"
|
||||
msgstr ""
|
||||
msgstr "很差"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.act_window,name:account_report.account_report_history_record_structure
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_reporting
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_tax_include
|
||||
|
|
|
@ -141,10 +141,14 @@ class account_invoice_line(osv.osv):
|
|||
|
||||
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, context=None):
|
||||
# note: will call product_id_change_unit_price_inv with context...
|
||||
if context is None:
|
||||
context = {}
|
||||
context.update({'price_type': context.get('price_type','tax_excluded')})
|
||||
return super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, context=context)
|
||||
|
||||
# Temporary trap, for bad context that came from koo:
|
||||
# if isinstance(context, str):
|
||||
# print "str context:", context
|
||||
|
||||
ctx = (context and context.copy()) or {}
|
||||
ctx.update({'price_type': ctx.get('price_type','tax_excluded')})
|
||||
return super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, context=ctx)
|
||||
account_invoice_line()
|
||||
|
||||
class account_invoice_tax(osv.osv):
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_voucher
|
||||
|
|
|
@ -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: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_budget_crossover
|
||||
|
|
|
@ -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: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: association_vertical
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_doc_rst
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: analytic_journal_billing_rate
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: analytic_user_function
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: auction
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: audittrail
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-28 18:55+0000\n"
|
||||
"Last-Translator: geopop65 <Unknown>\n"
|
||||
"PO-Revision-Date: 2009-12-01 23:56+0000\n"
|
||||
"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@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: 2009-11-29 04:35+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: audittrail
|
||||
|
@ -26,7 +26,7 @@ msgstr "Traseu de audit"
|
|||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"Numele obiectului trebuie să înceapă cu x_ şi să nu conţină nici un caracter "
|
||||
"Numele obiectului trebuie să înceapă cu x_ și să nu conțină nici un caracter "
|
||||
"special !"
|
||||
|
||||
#. module: audittrail
|
||||
|
@ -72,7 +72,7 @@ msgstr "Valoare veche"
|
|||
#. module: audittrail
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr "Nume invalid de model în definirea acţiunii"
|
||||
msgstr "Nume invalid de model în definirea acțiunii"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.actions.wizard,name:audittrail.wizard_audittrail_log
|
||||
|
@ -158,10 +158,10 @@ msgid ""
|
|||
" Subscribe Rules for read, write, create and delete on objects and check "
|
||||
"logs"
|
||||
msgstr ""
|
||||
"Permite administratorului să urmărească toate operaţiile utilizatorilor "
|
||||
"Permite administratorului să urmărească toate operațiile utilizatorilor "
|
||||
"asupra obiectelor din sistem\n"
|
||||
" Reguli de subscriere pentru citire, scriere, creare şi ştergere a "
|
||||
"obiectelor şi jurnalelor de verificări"
|
||||
" Reguli de subscriere pentru citire, scriere, creare și ștergere a "
|
||||
"obiectelor și jurnalelor de verificări"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,timestamp:0
|
||||
|
@ -236,7 +236,7 @@ msgstr "Descriere câmp"
|
|||
#. module: audittrail
|
||||
#: selection:audittrail.log,method:0
|
||||
msgid "Delete"
|
||||
msgstr "Ştergere"
|
||||
msgstr "Ștergere"
|
||||
|
||||
#. module: audittrail
|
||||
#: wizard_button:audittrail.view.log,init,open:0
|
||||
|
@ -271,7 +271,7 @@ msgstr "Valoare nouă"
|
|||
#. module: audittrail
|
||||
#: model:ir.ui.menu,name:audittrail.menu_action_log_tree2
|
||||
msgid "View Logs"
|
||||
msgstr "Jurnal afişare"
|
||||
msgstr "Afișeaza jurnalele"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_create:0
|
||||
|
@ -306,9 +306,9 @@ msgstr "Valoare text veche"
|
|||
#. module: audittrail
|
||||
#: wizard_button:audittrail.view.log,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr "Revocare"
|
||||
msgstr "Renunță"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_unlink:0
|
||||
msgid "Log deletes"
|
||||
msgstr "Jurnal ştergeri"
|
||||
msgstr "Jurnal ștergeri"
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
<field name="partner_id" invisible="1" select="1"/>
|
||||
<field name="title" select="1"/>
|
||||
<field name="function_id" invisible="1" select="2"/>
|
||||
<field name="email"/>
|
||||
<field name="lang_id"/>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
|
@ -50,6 +51,9 @@
|
|||
<field name="name" colspan="4"/>
|
||||
<field name="address_id" colspan="4"/>
|
||||
<field name="function_id" colspan="4"/>
|
||||
<field name="fax"/>
|
||||
<field name="extension"/>
|
||||
<field name="other"/>
|
||||
<field name="date_start" />
|
||||
<field name="date_stop" />
|
||||
<field name="state" />
|
||||
|
@ -163,6 +167,8 @@
|
|||
<group string="Communication" colspan="2" col="2">
|
||||
<field name="phone"/>
|
||||
<field name="fax"/>
|
||||
<field name="extension"/>
|
||||
<field name="other"/>
|
||||
<field name="email" widget="email"/>
|
||||
<field name="extension"/>
|
||||
<field name="other"/>
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_contact
|
||||
|
|
|
@ -7,19 +7,19 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-08 16:09+0000\n"
|
||||
"PO-Revision-Date: 2009-12-01 14:36+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 04:56+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,sequence_contact:0
|
||||
msgid "Contact Seq."
|
||||
msgstr ""
|
||||
msgstr "联系人序号"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.model,name:base_contact.model_res_partner_contact
|
||||
|
@ -30,12 +30,12 @@ msgstr ""
|
|||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名必须以“x_”开始且不能包含任何特殊字符!"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,function_id:0
|
||||
msgid "Partner Function"
|
||||
msgstr ""
|
||||
msgstr "业务伙伴职能"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.actions.act_window,name:base_contact.action_partner_contact_form
|
||||
|
@ -45,97 +45,97 @@ msgstr ""
|
|||
#: view:res.partner.address:0
|
||||
#: field:res.partner.address,job_ids:0
|
||||
msgid "Contacts"
|
||||
msgstr "联系人"
|
||||
msgstr "联系人列表"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,sequence_partner:0
|
||||
msgid "Partner Seq."
|
||||
msgstr ""
|
||||
msgstr "业务伙伴序号"
|
||||
|
||||
#. module: base_contact
|
||||
#: selection:res.partner.job,state:0
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
msgstr "当前"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,first_name:0
|
||||
msgid "First Name"
|
||||
msgstr ""
|
||||
msgstr "名"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.model,name:base_contact.model_res_partner_job
|
||||
msgid "Contact Partner Function"
|
||||
msgstr ""
|
||||
msgstr "联系人业务伙伴职能"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,other:0
|
||||
msgid "Other"
|
||||
msgstr ""
|
||||
msgstr "其它"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,name:base_contact.process_transition_contacttofunction0
|
||||
msgid "Contact to function"
|
||||
msgstr ""
|
||||
msgstr "联系人到职能"
|
||||
|
||||
#. module: base_contact
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,name:base_contact.process_transition_partnertoaddress0
|
||||
msgid "Partner to address"
|
||||
msgstr ""
|
||||
msgstr "业务伙伴到地址"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.address:0
|
||||
msgid "# of Contacts"
|
||||
msgstr ""
|
||||
msgstr "个联系人"
|
||||
|
||||
#. module: base_contact
|
||||
#: help:res.partner.job,other:0
|
||||
msgid "Additional phone field"
|
||||
msgstr ""
|
||||
msgstr "附加电话字段"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,name:base_contact.process_node_function0
|
||||
msgid "Function"
|
||||
msgstr ""
|
||||
msgstr "职能"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,fax:0
|
||||
msgid "Fax"
|
||||
msgstr ""
|
||||
msgstr "传真"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,lang_id:0
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
msgstr "语言"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,phone:0
|
||||
msgid "Phone"
|
||||
msgstr ""
|
||||
msgstr "电话"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,note:base_contact.process_transition_contacttofunction0
|
||||
msgid "Defines contacts and functions."
|
||||
msgstr ""
|
||||
msgstr "定义联系人和职能"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,title:0
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
msgstr "称谓"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.job:0
|
||||
msgid "Contact Functions"
|
||||
msgstr ""
|
||||
msgstr "联系人职能"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.module.module,shortdesc:base_contact.module_meta_information
|
||||
msgid "Base Contact"
|
||||
msgstr ""
|
||||
msgstr "基本联系人管理模块"
|
||||
|
||||
#. module: base_contact
|
||||
#: help:res.partner.job,sequence_partner:0
|
||||
|
@ -148,29 +148,29 @@ msgstr ""
|
|||
#: field:res.partner.contact,email:0
|
||||
#: field:res.partner.job,email:0
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
msgstr "电子邮件"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,date_stop:0
|
||||
msgid "Date Stop"
|
||||
msgstr ""
|
||||
msgstr "停止时间"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner:0
|
||||
#: field:res.partner.job,address_id:0
|
||||
msgid "Address"
|
||||
msgstr ""
|
||||
msgstr "地址:"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.actions.act_window,name:base_contact.action_res_partner_job
|
||||
#: model:ir.ui.menu,name:base_contact.menu_action_res_partner_job
|
||||
msgid "Contact's Jobs"
|
||||
msgstr ""
|
||||
msgstr "联系人工作"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,country_id:0
|
||||
msgid "Nationality"
|
||||
msgstr ""
|
||||
msgstr "国籍"
|
||||
|
||||
#. module: base_contact
|
||||
#: help:res.partner.job,sequence_contact:0
|
||||
|
@ -183,7 +183,7 @@ msgstr ""
|
|||
#: field:res.partner.address,job_id:0
|
||||
#: field:res.partner.contact,job_id:0
|
||||
msgid "Main Job"
|
||||
msgstr ""
|
||||
msgstr "主业"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner:0
|
||||
|
@ -193,27 +193,27 @@ msgstr "分类"
|
|||
#. module: base_contact
|
||||
#: field:res.partner.contact,function_id:0
|
||||
msgid "Main Function"
|
||||
msgstr ""
|
||||
msgstr "主要职能"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,note:base_contact.process_transition_partnertoaddress0
|
||||
msgid "Define partners and their addresses."
|
||||
msgstr ""
|
||||
msgstr "定义业务伙伴和地址"
|
||||
|
||||
#. module: base_contact
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图结构"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.process,name:base_contact.process_process_basecontactprocess0
|
||||
msgid "Base Contact Process"
|
||||
msgstr ""
|
||||
msgstr "基本联系人流程"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
msgid "Seq."
|
||||
msgstr ""
|
||||
msgstr "序号"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,extension:0
|
||||
|
@ -223,132 +223,132 @@ msgstr ""
|
|||
#. module: base_contact
|
||||
#: field:res.partner.contact,mobile:0
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
msgstr "手机"
|
||||
|
||||
#. module: base_contact
|
||||
#: help:res.partner.job,extension:0
|
||||
msgid "Internal/External extension phone number"
|
||||
msgstr ""
|
||||
msgstr "内部或外部扩充电话号码"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,note:base_contact.process_node_contacts0
|
||||
msgid "People you work with."
|
||||
msgstr ""
|
||||
msgstr "与你工作的人"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
msgid "Extra Information"
|
||||
msgstr ""
|
||||
msgstr "额外信息"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
#: field:res.partner.contact,job_ids:0
|
||||
msgid "Functions and Addresses"
|
||||
msgstr ""
|
||||
msgstr "职能与地址"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "有效"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,contact_id:0
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
msgstr "联系人"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,note:base_contact.process_node_partners0
|
||||
msgid "Companies you work with."
|
||||
msgstr ""
|
||||
msgstr "您一起工作的公司。"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,partner_id:0
|
||||
msgid "Main Employer"
|
||||
msgstr ""
|
||||
msgstr "主要雇主"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,name:base_contact.process_transition_functiontoaddress0
|
||||
msgid "Function to address"
|
||||
msgstr ""
|
||||
msgstr "职能到地址"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.actions.act_window,name:base_contact.act_res_partner_jobs
|
||||
msgid "Partner Contacts"
|
||||
msgstr ""
|
||||
msgstr "业务伙伴联系人"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
msgid "Partner Contact"
|
||||
msgstr ""
|
||||
msgstr "业务伙伴联系人"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,name:base_contact.process_node_partners0
|
||||
msgid "Partners"
|
||||
msgstr ""
|
||||
msgstr "业务伙伴列表"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,name:base_contact.process_node_addresses0
|
||||
#: view:res.partner:0
|
||||
msgid "Addresses"
|
||||
msgstr ""
|
||||
msgstr "地址"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,note:base_contact.process_node_addresses0
|
||||
msgid "Working and private addresses."
|
||||
msgstr ""
|
||||
msgstr "工作和私人地址"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,name:0
|
||||
msgid "Last Name"
|
||||
msgstr ""
|
||||
msgstr "姓"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "省/ 州"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
#: view:res.partner.job:0
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
msgstr "常规"
|
||||
|
||||
#. module: base_contact
|
||||
#: selection:res.partner.job,state:0
|
||||
msgid "Past"
|
||||
msgstr ""
|
||||
msgstr "过去"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
msgid "General Information"
|
||||
msgstr ""
|
||||
msgstr "常规信息"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,note:base_contact.process_node_function0
|
||||
msgid "Jobs at a same partner address."
|
||||
msgstr ""
|
||||
msgstr "相同业务伙伴地址的工作"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,name:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
msgstr "业务伙伴"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,date_start:0
|
||||
msgid "Date Start"
|
||||
msgstr ""
|
||||
msgstr "开始时间"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,note:base_contact.process_transition_functiontoaddress0
|
||||
msgid "Define functions and address."
|
||||
msgstr ""
|
||||
msgstr "定义职能与地址。"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,website:0
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
msgstr "网站"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,birthdate:0
|
||||
msgid "Birth Date"
|
||||
msgstr ""
|
||||
msgstr "生日"
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_iban
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_merge
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_publish
|
||||
|
|
|
@ -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: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_quality
|
||||
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-18 12:32+0000\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:33+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.com>\n"
|
||||
"Language-Team: Simplified Chinese <zh_CN@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: 2009-11-17 05:19+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_quality
|
||||
|
@ -26,37 +26,37 @@ msgstr ""
|
|||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名必须以“x_”开始且不能包含任何特殊字符!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.module.module,shortdesc:base_module_quality.module_meta_information
|
||||
msgid "Base module quality"
|
||||
msgstr ""
|
||||
msgstr "基本模块质量"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,name:0
|
||||
msgid "Rated Module"
|
||||
msgstr ""
|
||||
msgstr "相关模块"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
msgstr "详细信息"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,note:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
msgstr "备注"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "状态"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
msgstr "详细信息"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,ponderation:0
|
||||
|
@ -74,12 +74,12 @@ msgstr ""
|
|||
#: view:module.quality.check:0
|
||||
#: field:module.quality.check,check_detail_ids:0
|
||||
msgid "Tests"
|
||||
msgstr ""
|
||||
msgstr "测试"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: selection:module.quality.detail,state:0
|
||||
msgid "Skipped"
|
||||
msgstr ""
|
||||
msgstr "已跳过"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: help:module.quality.detail,state:0
|
||||
|
@ -91,7 +91,7 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图结构"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_module_quality_check
|
||||
|
@ -101,17 +101,17 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "名称"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: wizard_field:quality_detail_save,init,module_file:0
|
||||
msgid "Save report"
|
||||
msgstr ""
|
||||
msgstr "保存报告"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: wizard_field:quality_detail_save,init,name:0
|
||||
msgid "File name"
|
||||
msgstr ""
|
||||
msgstr "文件名"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,score:0
|
||||
|
@ -121,13 +121,13 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: help:quality_detail_save,init,name:0
|
||||
msgid "Save report as .html format"
|
||||
msgstr ""
|
||||
msgstr "保存报告为 .HTML 格式"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
#: field:module.quality.detail,summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
msgstr "概要"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.actions.wizard,name:base_module_quality.quality_detail_save
|
||||
|
@ -142,12 +142,12 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Save Report"
|
||||
msgstr ""
|
||||
msgstr "保存报告"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.actions.wizard,name:base_module_quality.create_quality_check_id
|
||||
msgid "Quality Check"
|
||||
msgstr ""
|
||||
msgstr "质量检查"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_module_quality_detail
|
||||
|
@ -157,25 +157,25 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: selection:module.quality.detail,state:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
msgstr "完成"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
msgstr "结果"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: wizard_button:quality_detail_save,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "取消"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,message:0
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
msgstr "消息"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check_id:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
msgstr "质量"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -15,19 +15,19 @@
|
|||
# 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 xml.dom import minidom
|
||||
from osv.osv import osv_pool
|
||||
from osv import fields,osv
|
||||
import netsvc
|
||||
import pooler
|
||||
import string
|
||||
import tools
|
||||
|
||||
objects_proxy = netsvc.SERVICES['object'].__class__
|
||||
|
||||
objects_proxy = netsvc.ExportService.getService('object').__class__
|
||||
class recording_objects_proxy(objects_proxy):
|
||||
def execute(self, *args, **argv):
|
||||
if len(args) >= 6 and isinstance(args[5], dict):
|
||||
|
@ -55,6 +55,22 @@ class recording_objects_proxy(objects_proxy):
|
|||
|
||||
recording_objects_proxy()
|
||||
|
||||
class xElement(minidom.Element):
|
||||
"""dom.Element with compact print
|
||||
The Element in minidom has a problem: if printed, adds whitespace
|
||||
around the text nodes. The standard will not ignore that whitespace.
|
||||
This class simply prints the contained nodes in their compact form, w/o
|
||||
added spaces.
|
||||
"""
|
||||
def writexml(self, writer, indent="", addindent="", newl=""):
|
||||
writer.write(indent)
|
||||
minidom.Element.writexml(self, writer, indent='', addindent='', newl='')
|
||||
writer.write(newl)
|
||||
|
||||
def doc_createXElement(xdoc, tagName):
|
||||
e = xElement(tagName)
|
||||
e.ownerDocument = xdoc
|
||||
return e
|
||||
|
||||
class base_module_record(osv.osv):
|
||||
_name = "ir.module.record"
|
||||
|
@ -145,7 +161,7 @@ class base_module_record(osv.osv):
|
|||
if not newid:
|
||||
newid = self._create_id(cr, uid, fields[key]['relation'], valitem[2])
|
||||
self.ids[(fields[key]['relation'], valitem[1])] = newid
|
||||
|
||||
|
||||
childrecord, update = self._create_record(cr, uid, doc, fields[key]['relation'],valitem[2], newid)
|
||||
noupdate = noupdate or update
|
||||
record_list += childrecord
|
||||
|
@ -165,15 +181,11 @@ class base_module_record(osv.osv):
|
|||
field.setAttribute("eval", "[(6,0,["+','.join(map(lambda x: "ref('%s')" % (x,), res))+'])]')
|
||||
record.appendChild(field)
|
||||
else:
|
||||
field = doc.createElement('field')
|
||||
field = doc_createXElement(doc, 'field')
|
||||
field.setAttribute("name", key)
|
||||
|
||||
if not isinstance(val, basestring):
|
||||
val = str(val)
|
||||
|
||||
val = val and ('"""%s"""' % val.replace('\\', '\\\\').replace('"', '\"')) or 'False'
|
||||
field.setAttribute(u"eval", tools.ustr(val))
|
||||
field.appendChild(doc.createTextNode(val))
|
||||
record.appendChild(field)
|
||||
|
||||
return record_list, noupdate
|
||||
|
||||
def get_copy_data(self, cr, uid, model, id, result):
|
||||
|
@ -198,7 +210,7 @@ class base_module_record(osv.osv):
|
|||
if type(data[key])==type(True) or type(data[key])==type(1):
|
||||
result[key]=data[key]
|
||||
elif not data[key]:
|
||||
result[key] = False
|
||||
result[key] = False
|
||||
else:
|
||||
result[key]=data[key][0]
|
||||
|
||||
|
|
|
@ -21,5 +21,18 @@
|
|||
action="wizard_base_module_record_objects"
|
||||
id="menu_wizard_base_module_record_objects"/>
|
||||
|
||||
<wizard
|
||||
id="wizard_base_module_record_data"
|
||||
string="Export Customizations As Data File"
|
||||
model="ir.module.module"
|
||||
multi="True"
|
||||
name="base_module_record.module_record_data"/>
|
||||
<menuitem
|
||||
parent="menu_wizard_base_mod_rec"
|
||||
name="Export Customizations As Data File"
|
||||
type="wizard"
|
||||
action="wizard_base_module_record_data"
|
||||
id="menu_wizard_base_module_record_data"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_record
|
||||
|
|
|
@ -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: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-23 10:08+0000\n"
|
||||
"PO-Revision-Date: 2009-11-30 13:44+0000\n"
|
||||
"Last-Translator: Simon Vidmar <Unknown>\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: 2009-11-24 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_record
|
||||
|
@ -61,7 +61,7 @@ msgstr "Ime imenika"
|
|||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,init,filter_cond:0
|
||||
msgid "Records only"
|
||||
msgstr ""
|
||||
msgstr "Samo posnetki"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_record_objects,intro,data_kind:0
|
||||
|
@ -89,13 +89,13 @@ msgstr "Zapisovanje predmetov"
|
|||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,init,check_date:0
|
||||
msgid "Record from Date"
|
||||
msgstr ""
|
||||
msgstr "Posnami od dne"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,stop:0
|
||||
#: wizard_view:base_module_record.module_save,init:0
|
||||
msgid "Recording Information"
|
||||
msgstr ""
|
||||
msgstr "Podatki o posnetku"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_save,init,info_status:0
|
||||
|
@ -118,7 +118,7 @@ msgstr "Snemanje modulov"
|
|||
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record_objects
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record_objects
|
||||
msgid "Export Customizations As a Module"
|
||||
msgstr ""
|
||||
msgstr "Izvozi prilagoditev kot moduk"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||
|
@ -129,7 +129,7 @@ msgstr "Vnaprej hvala za vaš prispevek."
|
|||
#. module: base_module_record
|
||||
#: help:base_module_record.module_record_objects,init,objects:0
|
||||
msgid "List of objects to be recorded"
|
||||
msgstr ""
|
||||
msgstr "Seznam predmetov za snemanje"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_button:base_module_record.module_record,start,start_confirm:0
|
||||
|
@ -190,12 +190,12 @@ msgstr "Ustvarjeno"
|
|||
#: wizard_view:base_module_record.module_record_objects,end:0
|
||||
#: wizard_view:base_module_record.module_save,end:0
|
||||
msgid "Thanks For using Module Recorder"
|
||||
msgstr ""
|
||||
msgstr "Hvala ker uporabljate snemalnik modulov"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record,start,continue:0
|
||||
msgid "Continue Previous Session"
|
||||
msgstr ""
|
||||
msgstr "Nadaljuj prejšnjo sejo"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,website:0
|
||||
|
@ -230,7 +230,7 @@ msgstr "Nadaljuj"
|
|||
#: model:ir.module.module,shortdesc:base_module_record.module_meta_information
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_mod_rec_rec
|
||||
msgid "Module Recorder"
|
||||
msgstr ""
|
||||
msgstr "Snemalnik modulov"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_record_objects,intro,data_kind:0
|
||||
|
@ -267,12 +267,12 @@ msgstr ""
|
|||
#. module: base_module_record
|
||||
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record
|
||||
msgid "Record module"
|
||||
msgstr ""
|
||||
msgstr "Posnemi modul"
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_mod_rec
|
||||
msgid "Module Creation"
|
||||
msgstr ""
|
||||
msgstr "Izdelava modula"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,stop:0
|
||||
|
@ -297,13 +297,13 @@ msgstr "Informacije o modulu"
|
|||
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_save
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_save
|
||||
msgid "Save Recorded Module"
|
||||
msgstr ""
|
||||
msgstr "Shrani posneti modul"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,stop:0
|
||||
msgid ""
|
||||
"Open ERP recording is stopped. Don't forget to save the recorded module."
|
||||
msgstr ""
|
||||
msgstr "Snemanje OpenERP je zaustavljeno. Ne pozabite posneti modula."
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_button:base_module_record.module_record,start,end:0
|
||||
|
|
|
@ -7,27 +7,27 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-01-30 12:44+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:51+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 04:56+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,category:0
|
||||
#: wizard_field:base_module_record.module_save,info,category:0
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "分类"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||
#: wizard_field:base_module_record.module_save,init,info_text:0
|
||||
#: wizard_view:base_module_record.module_save,save:0
|
||||
msgid "Information"
|
||||
msgstr ""
|
||||
msgstr "信息"
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.model,name:base_module_record.model_ir_module_record
|
||||
|
@ -38,7 +38,7 @@ msgstr ""
|
|||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名必须以“x_”开始且不能包含任何特殊字符!"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,init:0
|
||||
|
@ -49,13 +49,13 @@ msgstr ""
|
|||
#: wizard_field:base_module_record.module_record_objects,intro,author:0
|
||||
#: wizard_field:base_module_record.module_save,info,author:0
|
||||
msgid "Author"
|
||||
msgstr ""
|
||||
msgstr "作者"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,directory_name:0
|
||||
#: wizard_field:base_module_record.module_save,info,directory_name:0
|
||||
msgid "Directory Name"
|
||||
msgstr ""
|
||||
msgstr "目录名"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,init,filter_cond:0
|
||||
|
@ -66,19 +66,19 @@ msgstr ""
|
|||
#: selection:base_module_record.module_record_objects,intro,data_kind:0
|
||||
#: selection:base_module_record.module_save,info,data_kind:0
|
||||
msgid "Demo Data"
|
||||
msgstr ""
|
||||
msgstr "演示数据"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,save,module_filename:0
|
||||
#: wizard_field:base_module_record.module_save,save,module_filename:0
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
msgstr "文件名"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,version:0
|
||||
#: wizard_field:base_module_record.module_save,info,version:0
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
msgstr "版本"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,init:0
|
||||
|
@ -99,7 +99,7 @@ msgstr ""
|
|||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_save,init,info_status:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "状态"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,stop:0
|
||||
|
@ -134,7 +134,7 @@ msgstr ""
|
|||
#: wizard_button:base_module_record.module_record,start,start_confirm:0
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record
|
||||
msgid "Start Recording"
|
||||
msgstr ""
|
||||
msgstr "开始录制"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_save,init,info_status:0
|
||||
|
|
|
@ -21,5 +21,6 @@
|
|||
|
||||
import base_module_save
|
||||
import base_module_record_objects
|
||||
import base_module_record_data
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -0,0 +1,148 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||
# $Id$
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import wizard
|
||||
import osv
|
||||
import pooler
|
||||
import time
|
||||
|
||||
info = '''<?xml version="1.0"?>
|
||||
<form string="Module Recording">
|
||||
<label string="Thanks For using Module Recorder" colspan="4" align="0.0"/>
|
||||
</form>'''
|
||||
|
||||
intro_start_form = '''<?xml version="1.0"?>
|
||||
<form string="Objects Recording">
|
||||
<field name="check_date"/>
|
||||
<newline/>
|
||||
<field name="filter_cond"/>
|
||||
<separator string="Choose objects to record" colspan="4"/>
|
||||
<field name="objects" colspan="4" nolabel="1"/>
|
||||
|
||||
</form>'''
|
||||
|
||||
intro_start_fields = {
|
||||
'check_date': {'string':"Record from Date",'type':'datetime','required':True, 'default': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S')},
|
||||
'objects':{'string': 'Objects', 'type': 'many2many', 'relation': 'ir.model', 'help': 'List of objects to be recorded'},
|
||||
'filter_cond':{'string':'Records only', 'type':'selection','selection':[('created','Created'),('modified','Modified'),('created_modified','Created & Modified')], 'required':True, 'default': lambda *args:'created'},
|
||||
|
||||
}
|
||||
|
||||
exp_form = '''<?xml version="1.0"?>
|
||||
<form string="Objects Recording">
|
||||
<separator string="Result, paste this to your module's xml" colspan="4" />
|
||||
<field name="res_text" nolabel="1" colspan="4"/>
|
||||
</form>'''
|
||||
|
||||
exp_fields = {
|
||||
'res_text': {'string':"Result",'type':'text', },
|
||||
}
|
||||
|
||||
def _info_default(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod = pool.get('ir.model')
|
||||
list=('ir.ui.view','ir.ui.menu','ir.model','ir.model.fields','ir.model.access',\
|
||||
'res.partner','res.partner.address','res.partner.category','workflow',\
|
||||
'workflow.activity','workflow.transition','ir.actions.server','ir.server.object.lines')
|
||||
data['form']['objects']=mod.search(cr,uid,[('model','in',list)])
|
||||
cr.execute('select max(create_date) from ir_model_data')
|
||||
c=(cr.fetchone())[0].split('.')[0]
|
||||
c = time.strptime(c,"%Y-%m-%d %H:%M:%S")
|
||||
sec=c.tm_sec + 1
|
||||
c=(c[0],c[1],c[2],c[3],c[4],sec,c[6],c[7],c[8])
|
||||
data['form']['check_date']=time.strftime("%Y-%m-%d %H:%M:%S",c)
|
||||
return data['form']
|
||||
|
||||
def _record_objects(self, cr, uid, data, context):
|
||||
check_date=data['form']['check_date']
|
||||
filter=data['form']['filter_cond']
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
user=(pool.get('res.users').browse(cr,uid,uid)).login
|
||||
mod = pool.get('ir.module.record')
|
||||
mod_obj = pool.get('ir.model')
|
||||
mod.recording_data = []
|
||||
|
||||
for id in data['form']['objects'][0][2]:
|
||||
obj_name=(mod_obj.browse(cr,uid,id)).model
|
||||
obj_pool=pool.get(obj_name)
|
||||
if filter =='created':
|
||||
search_condition =[('create_date','>',check_date)]
|
||||
elif filter =='modified':
|
||||
search_condition =[('write_date','>',check_date)]
|
||||
elif filter =='created_modified':
|
||||
search_condition =['|',('create_date','>',check_date),('write_date','>',check_date)]
|
||||
if '_log_access' in dir(obj_pool):
|
||||
if not (obj_pool._log_access):
|
||||
search_condition=[]
|
||||
if '_auto' in dir(obj_pool):
|
||||
if not obj_pool._auto:
|
||||
continue
|
||||
search_ids=obj_pool.search(cr,uid,search_condition)
|
||||
for s_id in search_ids:
|
||||
args=(cr.dbname,uid,user,obj_name,'copy',s_id,{},context)
|
||||
mod.recording_data.append(('query',args, {}, s_id))
|
||||
return {}
|
||||
|
||||
def _create_xml(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
mod = pool.get('ir.module.record')
|
||||
res_xml = mod.generate_xml(cr, uid)
|
||||
return { 'res_text': res_xml }
|
||||
|
||||
class base_module_record_objects(wizard.interface):
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [_info_default],
|
||||
'result': {
|
||||
'type':'form',
|
||||
'arch':intro_start_form,
|
||||
'fields': intro_start_fields,
|
||||
'state':[
|
||||
('end', 'Cancel', 'gtk-cancel'),
|
||||
('record', 'Record', 'gtk-ok'),
|
||||
]
|
||||
}
|
||||
},
|
||||
'record': {
|
||||
'actions': [],
|
||||
'result': {'type':'action','action':_record_objects,'state':'intro'}
|
||||
},
|
||||
'intro': {
|
||||
'actions': [ _create_xml ],
|
||||
'result': {
|
||||
'type':'form',
|
||||
'arch': exp_form,
|
||||
'fields':exp_fields,
|
||||
'state':[
|
||||
('end', 'End', 'gtk-cancel'),
|
||||
]
|
||||
},
|
||||
},
|
||||
'end': {
|
||||
'actions': [],
|
||||
'result': {'type':'form', 'arch':info, 'fields':{}, 'state':[('end','OK')]}
|
||||
},
|
||||
}
|
||||
base_module_record_objects('base_module_record.module_record_data')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,491 @@
|
|||
# Slovak translation for openobject-addons
|
||||
# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-12-01 08:02+0000\n"
|
||||
"Last-Translator: Radoslav Sloboda <rado.sloboda@gmail.com>\n"
|
||||
"Language-Team: Slovak <sk@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: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: help:base_report_creator.report.filter,expression:0
|
||||
msgid ""
|
||||
"Provide an expression for the field based on which you want to filter the "
|
||||
"records.\n"
|
||||
" e.g. res_partner.id=3"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_graph_type:0
|
||||
msgid "Graph Type"
|
||||
msgstr "Typ grafu"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Used View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,set_value_select_field:0
|
||||
msgid "Filter Values"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "Graph Mode"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Graph View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,expression:0
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_set_filter_fields
|
||||
msgid "Set Filter Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_filter
|
||||
msgid "Report Filters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,sql_query:0
|
||||
msgid "SQL Query"
|
||||
msgstr "SQL Query"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: wizard_button:base_report_creator.report.menu.create,init,create_menu:0
|
||||
msgid "Create Menu"
|
||||
msgstr "Vytvorenie ponuky"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Minimum"
|
||||
msgstr "Minimum"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,operator:0
|
||||
msgid "Operator"
|
||||
msgstr "Operátor"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.filter,condition:0
|
||||
#: selection:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "OR"
|
||||
msgstr "OR"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.ui.menu,name:base_report_creator.menu_base_report_creator_action
|
||||
#: model:ir.ui.menu,name:base_report_creator.menu_base_report_creator_action_config
|
||||
msgid "Custom Reports"
|
||||
msgstr "Vlastné reporty"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report.menu.create,init:0
|
||||
msgid "Menu Information"
|
||||
msgstr "Informácia ponuky"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Sum"
|
||||
msgstr "Suma"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,model_ids:0
|
||||
msgid "Reported Objects"
|
||||
msgstr "Report objektov"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Field List"
|
||||
msgstr "Zoznam polí"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,type:0
|
||||
msgid "Report Type"
|
||||
msgstr "Typ výkazu"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "State"
|
||||
msgstr "Štát"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,state:0
|
||||
msgid "Valid"
|
||||
msgstr "Platný"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Add filter"
|
||||
msgstr "Pridať filter"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_menu_create
|
||||
msgid "Create Menu for Report"
|
||||
msgstr "Vytvoriť ponuku pre výkaz"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Form"
|
||||
msgstr "Formulár"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,report_id:0
|
||||
#: field:base_report_creator.report.filter,report_id:0
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report
|
||||
msgid "Report"
|
||||
msgstr "Výkaz"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Starting Date"
|
||||
msgstr "Počiatočný dátum"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Neplatný súbor XML pre zobrazenie architektúry!"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Tree"
|
||||
msgstr "Stromová štruktúra"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,group_ids:0
|
||||
msgid "Authorized Groups"
|
||||
msgstr "Autorizované skupiny"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Graph Orientation"
|
||||
msgstr "Orientácia grafu"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Authorized Groups (empty for all)"
|
||||
msgstr "Autorizované skupiny (ponechať prázdne pre všetky)"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Security"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report.menu.create,init,menu_name:0
|
||||
msgid "Menu Name"
|
||||
msgstr "Názov ponuky"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.filter,condition:0
|
||||
#: selection:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "AND"
|
||||
msgstr "AND"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Calendar Mode"
|
||||
msgstr "Režim kalandára"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_fields
|
||||
msgid "Display Fields"
|
||||
msgstr "Zobraziť polia"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "Y Axis"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Graph"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,field_id:0
|
||||
msgid "Field Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,set_value_select_field:0
|
||||
msgid "Set Filter Values"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Vertical"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,type:0
|
||||
msgid "Rows And Columns Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "General Configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,init:0
|
||||
msgid "Select Field to filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Horizontal"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,group_method:0
|
||||
msgid "Grouping Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,condition:0
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "X Axis"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report.menu.create,init,menu_parent_id:0
|
||||
msgid "Parent Menu"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,set_value_select_field,set_value:0
|
||||
msgid "Confirm Filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,name:0
|
||||
msgid "Filter Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_report_open
|
||||
msgid "Open Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Grouped"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: model:ir.module.module,shortdesc:base_report_creator.module_meta_information
|
||||
msgid "Report Creator"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report.menu.create,init,end:0
|
||||
#: wizard_button:base_report_creator.report_filter.fields,init,end:0
|
||||
#: wizard_button:base_report_creator.report_filter.fields,set_value_select_field,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type1:0
|
||||
msgid "First View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Delay"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,field_id:0
|
||||
msgid "Field"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Filters on Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_type:0
|
||||
msgid "Pie Chart"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type3:0
|
||||
msgid "Third View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.module.module,description:base_report_creator.module_meta_information
|
||||
msgid ""
|
||||
"This modules allows you to create any statistic\n"
|
||||
"report on several object. It's a SQL query builder and browser\n"
|
||||
"for and users.\n"
|
||||
"\n"
|
||||
"After installing the module, it adds a menu to define custom report in\n"
|
||||
"the \"Dashboard\" menu.\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Uniq Colors"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,name:0
|
||||
msgid "Report Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Fields"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Average"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Reports"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Maximum"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,init,set_value_select_field:0
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,value:0
|
||||
msgid "Values"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_type:0
|
||||
msgid "Bar Chart"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type2:0
|
||||
msgid "Second View"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report.menu.create,init:0
|
||||
msgid "Create Menu For This Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "View parameters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,init,field_id:0
|
||||
msgid "Filter Field"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,field_ids:0
|
||||
msgid "Fields to Display"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,filter_ids:0
|
||||
msgid "Filters"
|
||||
msgstr ""
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-08 16:19+0000\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:37+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 05:13+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_report_creator
|
||||
|
@ -27,374 +27,374 @@ msgstr ""
|
|||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_graph_type:0
|
||||
msgid "Graph Type"
|
||||
msgstr ""
|
||||
msgstr "图表类型"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Used View"
|
||||
msgstr ""
|
||||
msgstr "已使用的视图"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,set_value_select_field:0
|
||||
msgid "Filter Values"
|
||||
msgstr ""
|
||||
msgstr "过滤值"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "Graph Mode"
|
||||
msgstr ""
|
||||
msgstr "图表模式"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Graph View"
|
||||
msgstr ""
|
||||
msgstr "图表视图"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,expression:0
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
msgstr "值"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_set_filter_fields
|
||||
msgid "Set Filter Fields"
|
||||
msgstr ""
|
||||
msgstr "设置过滤字段"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
msgstr "结束时间"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_filter
|
||||
msgid "Report Filters"
|
||||
msgstr ""
|
||||
msgstr "报表过滤器"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,sql_query:0
|
||||
msgid "SQL Query"
|
||||
msgstr ""
|
||||
msgstr "SQL 查询"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: wizard_button:base_report_creator.report.menu.create,init,create_menu:0
|
||||
msgid "Create Menu"
|
||||
msgstr ""
|
||||
msgstr "创建菜单"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Minimum"
|
||||
msgstr ""
|
||||
msgstr "最小值"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,operator:0
|
||||
msgid "Operator"
|
||||
msgstr ""
|
||||
msgstr "运算符"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.filter,condition:0
|
||||
#: selection:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "OR"
|
||||
msgstr ""
|
||||
msgstr "或(OR)"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.ui.menu,name:base_report_creator.menu_base_report_creator_action
|
||||
#: model:ir.ui.menu,name:base_report_creator.menu_base_report_creator_action_config
|
||||
msgid "Custom Reports"
|
||||
msgstr ""
|
||||
msgstr "自定义报表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report.menu.create,init:0
|
||||
msgid "Menu Information"
|
||||
msgstr ""
|
||||
msgstr "菜单信息"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Sum"
|
||||
msgstr ""
|
||||
msgstr "求和"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,model_ids:0
|
||||
msgid "Reported Objects"
|
||||
msgstr ""
|
||||
msgstr "以添加到报表的对象"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Field List"
|
||||
msgstr ""
|
||||
msgstr "字段列表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,type:0
|
||||
msgid "Report Type"
|
||||
msgstr ""
|
||||
msgstr "报表类型"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "状态"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,state:0
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
msgstr "验证"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Add filter"
|
||||
msgstr ""
|
||||
msgstr "添加过滤条件"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_menu_create
|
||||
msgid "Create Menu for Report"
|
||||
msgstr ""
|
||||
msgstr "为报表创建菜单"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Form"
|
||||
msgstr ""
|
||||
msgstr "表单"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "/"
|
||||
msgstr ""
|
||||
msgstr "/"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,report_id:0
|
||||
#: field:base_report_creator.report.filter,report_id:0
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report
|
||||
msgid "Report"
|
||||
msgstr ""
|
||||
msgstr "报表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Starting Date"
|
||||
msgstr ""
|
||||
msgstr "开始时间"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图架构!"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Tree"
|
||||
msgstr ""
|
||||
msgstr "树形列表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,group_ids:0
|
||||
msgid "Authorized Groups"
|
||||
msgstr ""
|
||||
msgstr "已授权的用户组"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Graph Orientation"
|
||||
msgstr ""
|
||||
msgstr "图表方向"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Authorized Groups (empty for all)"
|
||||
msgstr ""
|
||||
msgstr "已授权的用户组(如果为空则授权给所有用户组)"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Security"
|
||||
msgstr ""
|
||||
msgstr "安全设定"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report.menu.create,init,menu_name:0
|
||||
msgid "Menu Name"
|
||||
msgstr ""
|
||||
msgstr "菜单名称"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.filter,condition:0
|
||||
#: selection:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "AND"
|
||||
msgstr ""
|
||||
msgstr "与(AND)"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Calendar Mode"
|
||||
msgstr ""
|
||||
msgstr "日历模式"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_fields
|
||||
msgid "Display Fields"
|
||||
msgstr ""
|
||||
msgstr "显示的字段"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "Y Axis"
|
||||
msgstr ""
|
||||
msgstr "Y 轴"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
msgstr "日历"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Graph"
|
||||
msgstr ""
|
||||
msgstr "图表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,field_id:0
|
||||
msgid "Field Name"
|
||||
msgstr ""
|
||||
msgstr "字段名称"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
msgstr "草稿"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,set_value_select_field:0
|
||||
msgid "Set Filter Values"
|
||||
msgstr ""
|
||||
msgstr "设置过滤值"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "状态"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Vertical"
|
||||
msgstr ""
|
||||
msgstr "垂直的"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,type:0
|
||||
msgid "Rows And Columns Report"
|
||||
msgstr ""
|
||||
msgstr "行列报表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "General Configuration"
|
||||
msgstr ""
|
||||
msgstr "通用设置"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,init:0
|
||||
msgid "Select Field to filter"
|
||||
msgstr ""
|
||||
msgstr "选择要过滤的字段"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "可用"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Horizontal"
|
||||
msgstr ""
|
||||
msgstr "水平的"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,group_method:0
|
||||
msgid "Grouping Method"
|
||||
msgstr ""
|
||||
msgstr "分组方法"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,condition:0
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "条件"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
msgstr "计数"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "X Axis"
|
||||
msgstr ""
|
||||
msgstr "X 轴"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report.menu.create,init,menu_parent_id:0
|
||||
msgid "Parent Menu"
|
||||
msgstr ""
|
||||
msgstr "上级菜单"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,set_value_select_field,set_value:0
|
||||
msgid "Confirm Filter"
|
||||
msgstr ""
|
||||
msgstr "确认过滤器"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,name:0
|
||||
msgid "Filter Name"
|
||||
msgstr ""
|
||||
msgstr "过滤器名称"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_report_open
|
||||
msgid "Open Report"
|
||||
msgstr ""
|
||||
msgstr "打开报表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Grouped"
|
||||
msgstr ""
|
||||
msgstr "已分组"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: model:ir.module.module,shortdesc:base_report_creator.module_meta_information
|
||||
msgid "Report Creator"
|
||||
msgstr ""
|
||||
msgstr "报表创建器"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report.menu.create,init,end:0
|
||||
#: wizard_button:base_report_creator.report_filter.fields,init,end:0
|
||||
#: wizard_button:base_report_creator.report_filter.fields,set_value_select_field,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "取消"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名称必须以“x_”起头且不能包含任何特殊字符!"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type1:0
|
||||
msgid "First View"
|
||||
msgstr ""
|
||||
msgstr "第一视图"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Delay"
|
||||
msgstr ""
|
||||
msgstr "延迟"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,field_id:0
|
||||
msgid "Field"
|
||||
msgstr ""
|
||||
msgstr "字段"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Filters on Fields"
|
||||
msgstr ""
|
||||
msgstr "字段上的过滤器"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_type:0
|
||||
msgid "Pie Chart"
|
||||
msgstr ""
|
||||
msgstr "饼图"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type3:0
|
||||
msgid "Third View"
|
||||
msgstr ""
|
||||
msgstr "第三视图"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.module.module,description:base_report_creator.module_meta_information
|
||||
|
@ -410,81 +410,81 @@ msgstr ""
|
|||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Uniq Colors"
|
||||
msgstr ""
|
||||
msgstr "唯一的颜色"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,name:0
|
||||
msgid "Report Name"
|
||||
msgstr ""
|
||||
msgstr "报表名称"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Fields"
|
||||
msgstr ""
|
||||
msgstr "字段列表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Average"
|
||||
msgstr ""
|
||||
msgstr "平均值"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Reports"
|
||||
msgstr ""
|
||||
msgstr "报表列表"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Maximum"
|
||||
msgstr ""
|
||||
msgstr "最大值"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,init,set_value_select_field:0
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "继续"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,value:0
|
||||
msgid "Values"
|
||||
msgstr ""
|
||||
msgstr "值"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_type:0
|
||||
msgid "Bar Chart"
|
||||
msgstr ""
|
||||
msgstr "柱状图"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type2:0
|
||||
msgid "Second View"
|
||||
msgstr ""
|
||||
msgstr "第二视图"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report.menu.create,init:0
|
||||
msgid "Create Menu For This Report"
|
||||
msgstr ""
|
||||
msgstr "为此报表创建菜单"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "View parameters"
|
||||
msgstr ""
|
||||
msgstr "视图参数"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
msgstr "顺序"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,init,field_id:0
|
||||
msgid "Filter Field"
|
||||
msgstr ""
|
||||
msgstr "过滤字段"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,field_ids:0
|
||||
msgid "Fields to Display"
|
||||
msgstr ""
|
||||
msgstr "要显示的字段"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,filter_ids:0
|
||||
msgid "Filters"
|
||||
msgstr ""
|
||||
msgstr "过滤器"
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-09 16:48+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 14:09+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 04:58+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_setup
|
||||
|
@ -28,7 +28,7 @@ msgstr "城市"
|
|||
msgid ""
|
||||
"You can start configuring the system or connect directly to the database "
|
||||
"using the default setup."
|
||||
msgstr ""
|
||||
msgstr "您可以对系统进行配置或者直接使用默认设置。"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_field:base_setup.base_setup,company,zip:0
|
||||
|
@ -40,7 +40,7 @@ msgstr "邮编"
|
|||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,init:0
|
||||
msgid "Select a Profile"
|
||||
msgstr ""
|
||||
msgstr "选择一个配置"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,company:0
|
||||
|
@ -50,13 +50,13 @@ msgstr "报表头"
|
|||
#. module: base_setup
|
||||
#: wizard_button:base_setup.base_setup,finish,config:0
|
||||
msgid "Start Configuration"
|
||||
msgstr ""
|
||||
msgstr "开始配置"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,init:0
|
||||
msgid ""
|
||||
"You'll be able to install more modules later through the Administration menu."
|
||||
msgstr ""
|
||||
msgstr "您可以之后通过管理菜单,安装更多的模块。"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,init:0
|
||||
|
@ -64,7 +64,7 @@ msgid ""
|
|||
"A profile sets a pre-selection of modules for specific needs. These profiles "
|
||||
"have been setup to help you discover the different aspects of OpenERP. This "
|
||||
"is just an overview, we have 300+ available modules."
|
||||
msgstr ""
|
||||
msgstr "配置文件设定了一套预选模块为满足特有的需求.这些配置帮助您发现系统的不同特征.这是一个概要而已,一共有300多个模块."
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_button:base_setup.base_setup,company,update:0
|
||||
|
@ -115,7 +115,7 @@ msgstr "报告脚注2"
|
|||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,company:0
|
||||
msgid "General Information"
|
||||
msgstr ""
|
||||
msgstr "一般信息"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_field:base_setup.base_setup,company,street2:0
|
||||
|
@ -127,7 +127,7 @@ msgstr "街区地址5"
|
|||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,company:0
|
||||
msgid "Report Information"
|
||||
msgstr ""
|
||||
msgstr "报表信息"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_field:base_setup.base_setup,company,phone:0
|
||||
|
@ -139,7 +139,7 @@ msgstr "电话"
|
|||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,company:0
|
||||
msgid "Define Main Company"
|
||||
msgstr ""
|
||||
msgstr "定义总公司"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_field:base_setup.base_setup,company,name:0
|
||||
|
@ -157,6 +157,9 @@ msgid ""
|
|||
"We suggest you to put bank information here:\n"
|
||||
"IBAN: BE74 1262 0121 6907 - SWIFT: CPDF BE71 - VAT: BE0477.472.701"
|
||||
msgstr ""
|
||||
"该语句将显示在您的报表底部,\n"
|
||||
"我们建议您填写银行信息显示,如:\n"
|
||||
"IBAN: BE74 1262 0121 6907 - SWIFT: CPDF BE71 - VAT: BE0477.472.701"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_field:base_setup.base_setup,company,country_id:0
|
||||
|
@ -184,6 +187,9 @@ msgid ""
|
|||
"We suggest you to write legal sentences here:\n"
|
||||
"Web: http://openerp.com - Fax: +32.81.73.35.01 - Fortis Bank: 126-2013269-07"
|
||||
msgstr ""
|
||||
"这语句将会显示在您报表的底部。\n"
|
||||
"我们建议您在此输入法律信息,如:\n"
|
||||
"网址: http://openerp.com - 传真: +32.81.73.35.01 - 银行帐号:126-2013269-07"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,update:0
|
||||
|
@ -198,7 +204,7 @@ msgstr "安装"
|
|||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,finish:0
|
||||
msgid "Installation Done"
|
||||
msgstr ""
|
||||
msgstr "安装完成"
|
||||
|
||||
#. module: base_setup
|
||||
#: help:base_setup.base_setup,company,rml_header1:0
|
||||
|
@ -209,6 +215,9 @@ msgid ""
|
|||
"We suggest you to put a slogan here:\n"
|
||||
"\"Open Source Business Solutions\"."
|
||||
msgstr ""
|
||||
"这些将显示在您的报表的右上角。\n"
|
||||
"我们建议您在这里写句口号:\n"
|
||||
"“开源业务解决方案”"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_field:base_setup.base_setup,company,rml_header1:0
|
||||
|
@ -220,7 +229,7 @@ msgstr "报表头"
|
|||
#. module: base_setup
|
||||
#: wizard_view:base_setup.base_setup,company:0
|
||||
msgid "Your Logo - Use a size of about 450x150 pixels."
|
||||
msgstr ""
|
||||
msgstr "您的徽标——使用大小约为 450x150 像素的图片"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_field:base_setup.base_setup,company,currency:0
|
||||
|
@ -239,7 +248,7 @@ msgstr "街区地址"
|
|||
#. module: base_setup
|
||||
#: wizard_button:base_setup.base_setup,finish,menu:0
|
||||
msgid "Use Directly"
|
||||
msgstr ""
|
||||
msgstr "直接开始使用"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_button:base_setup.base_setup,init,menu:0
|
||||
|
@ -251,12 +260,12 @@ msgstr "取消"
|
|||
#: wizard_field:base_setup.base_setup,init,logo:0
|
||||
#: wizard_field:base_setup.base_setup,update,logo:0
|
||||
msgid "Logo"
|
||||
msgstr ""
|
||||
msgstr "徽标"
|
||||
|
||||
#. module: base_setup
|
||||
#: model:ir.module.module,shortdesc:base_setup.module_meta_information
|
||||
msgid "Base Setup"
|
||||
msgstr ""
|
||||
msgstr "基本设置"
|
||||
|
||||
#. module: base_setup
|
||||
#: wizard_button:base_setup.base_setup,company,init:0
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-08 13:29+0000\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:36+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 04:56+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_vat
|
||||
|
@ -25,14 +25,14 @@ msgstr ""
|
|||
#. module: base_vat
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图结构"
|
||||
|
||||
#. module: base_vat
|
||||
#: field:res.partner,vat_subjected:0
|
||||
msgid "VAT Legal Statement"
|
||||
msgstr ""
|
||||
msgstr "增值税法律申明"
|
||||
|
||||
#. module: base_vat
|
||||
#: model:ir.module.module,shortdesc:base_vat.module_meta_information
|
||||
msgid "VAT"
|
||||
msgstr ""
|
||||
msgstr "增值税"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -15,7 +15,7 @@
|
|||
# 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
@ -74,9 +74,8 @@ class crm_case_section(osv.osv):
|
|||
'reply_to': fields.char('Reply-To', size=64, help="The email address put in the 'Reply-To' of all emails sent by Open ERP about cases in this section"),
|
||||
'parent_id': fields.many2one('crm.case.section', 'Parent Section'),
|
||||
'child_ids': fields.one2many('crm.case.section', 'parent_id', 'Child Sections'),
|
||||
"gateway_ids" : fields.one2many("crm.email.gateway",'section_id',"Email Gateway"),
|
||||
'calendar' : fields.boolean('Calendar', help='Allow to show calendar'),
|
||||
|
||||
"gateway_ids" : fields.one2many("crm.email.gateway",'section_id',"Email Gateways"),
|
||||
'calendar' : fields.boolean('Calendar', help='Allow to show calendar'),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
|
@ -212,37 +211,37 @@ crm_case_section()
|
|||
|
||||
class crm_email_gateway_server(osv.osv):
|
||||
_name = "crm.email.gateway.server"
|
||||
_description = "Email Gateway Server"
|
||||
_description = "Email Gateway Server"
|
||||
_columns = {
|
||||
'name': fields.char('Server Address',size=64,required=True ,help="IMAP/POP Address Of Email gateway Server"),
|
||||
'login': fields.char('User',size=64,required=True,help="User Login Id of Email gateway"),
|
||||
'password': fields.char('Password',size=64,required=True,help="User Password Of Email gateway"),
|
||||
'server_type': fields.selection([("pop","POP"),("imap","Imap")],"Type of Server", required=True, help="Type of Email gateway Server"),
|
||||
'password': fields.char('Password',size=64,required=True,help="User Password Of Email gateway"),
|
||||
'server_type': fields.selection([("pop","POP"),("imap","Imap")],"Type of Server", required=True, help="Type of Email gateway Server"),
|
||||
'port': fields.integer("Port" , help="Port Of Email gateway Server. If port is omitted, the standard POP3 port (110) is used for POP EMail Server and the standard IMAP4 port (143) is used for IMAP Sever."),
|
||||
'ssl': fields.boolean('SSL',help ="Use Secure Authentication"),
|
||||
'active': fields.boolean('Active'),
|
||||
'active': fields.boolean('Active'),
|
||||
}
|
||||
_defaults = {
|
||||
'server_type':lambda * a:'pop',
|
||||
'active':lambda * a:True,
|
||||
}
|
||||
_defaults = {
|
||||
'server_type':lambda * a:'pop',
|
||||
'active':lambda * a:True,
|
||||
}
|
||||
crm_email_gateway_server()
|
||||
|
||||
|
||||
|
||||
|
||||
class crm_email_gateway(osv.osv):
|
||||
_name = "crm.email.gateway"
|
||||
_description = "Email Gateway"
|
||||
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name',size=64,help="Name of Mail Gateway."),
|
||||
'server_id': fields.many2one('crm.email.gateway.server',"Gateway Server", required=True),
|
||||
'to_email_id': fields.char('TO', size=64, help="Email address used in the From field of outgoing messages"),
|
||||
'cc_email_id': fields.char('CC',size=64,help="Default eMail in case of any trouble."),
|
||||
'section_id': fields.many2one('crm.case.section',"Section",required=True),
|
||||
'cc_email_id': fields.char('CC',size=64,help="Default eMail in case of any trouble."),
|
||||
'section_id': fields.many2one('crm.case.section',"Section",required=True),
|
||||
'mail_history': fields.one2many("crm.email.history","gateway_id","History", readonly=True)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
def _fetch_mails(self, cr, uid, ids=False, context={}):
|
||||
'''
|
||||
Function called by the scheduler to fetch mails
|
||||
|
@ -250,36 +249,36 @@ class crm_email_gateway(osv.osv):
|
|||
cr.execute('select * from crm_email_gateway gateway \
|
||||
inner join crm_email_gateway_server server \
|
||||
on server.id = gateway.server_id where server.active = True')
|
||||
ids2 = map(lambda x: x[0], cr.fetchall() or [])
|
||||
ids2 = map(lambda x: x[0], cr.fetchall() or [])
|
||||
return self.fetch_mails(cr, uid, ids=ids2, context=context)
|
||||
|
||||
def parse_mail(self, cr, uid, gateway_id, email_message, email_parser=None, context={}):
|
||||
msg_id = case_id = note = False
|
||||
user_obj = self.pool.get('res.users')
|
||||
mail_history_obj = self.pool.get('crm.email.history')
|
||||
|
||||
def parse_mail(self, cr, uid, gateway_id, email_message, email_parser=None, context={}):
|
||||
msg_id = case_id = note = False
|
||||
user_obj = self.pool.get('res.users')
|
||||
mail_history_obj = self.pool.get('crm.email.history')
|
||||
users = user_obj.read(cr, uid, uid, ['password'])
|
||||
mailgateway = self.browse(cr, uid, gateway_id, context=context)
|
||||
try :
|
||||
if not email_parser:
|
||||
email_parser = openerp_mailgate.email_parser(uid, users['password'], mailgateway.section_id.id,
|
||||
mailgateway.to_email_id or '', mailgateway.cc_email_id or '', dbname=cr.dbname,
|
||||
host=tools.config['interface'] or 'localhost', port=tools.config['port'] or '8069')
|
||||
|
||||
msg_txt = email.message_from_string(email_message)
|
||||
msg_id = msg_txt['Message-ID']
|
||||
case_id = email_parser.parse(msg_txt)[0]
|
||||
email_parser = openerp_mailgate.email_parser(uid, users['password'], mailgateway.section_id.id,
|
||||
mailgateway.to_email_id or '', mailgateway.cc_email_id or '', dbname=cr.dbname,
|
||||
host=tools.config['interface'] or 'localhost', port=tools.config['port'] or '8069')
|
||||
|
||||
msg_txt = email.message_from_string(email_message)
|
||||
msg_id = msg_txt['Message-ID']
|
||||
case_id = email_parser.parse(msg_txt)[0]
|
||||
except Exception, e:
|
||||
note = "Error in Parsing Mail: %s " %(str(e))
|
||||
netsvc.Logger().notifyChannel('Emailgate:Parsing mail:%s' % (mailgateway.name or
|
||||
note = "Error in Parsing Mail: %s " %(str(e))
|
||||
netsvc.Logger().notifyChannel('Emailgate:Parsing mail:%s' % (mailgateway.name or
|
||||
'%s (%s)'%(mailgateway.server_id.login, mailgateway.server_id.name)), netsvc.LOG_ERROR, str(e))
|
||||
|
||||
mail_history_obj.create(cr, uid, {'name':msg_id, 'case_id': case_id, 'gateway_id':mailgateway.id, 'note':note})
|
||||
|
||||
mail_history_obj.create(cr, uid, {'name':msg_id, 'case_id': case_id, 'gateway_id':mailgateway.id, 'note':note})
|
||||
return case_id,note
|
||||
|
||||
def fetch_mails(self, cr, uid, ids=[], section_ids=[], context={}):
|
||||
|
||||
def fetch_mails(self, cr, uid, ids=[], section_ids=[], context={}):
|
||||
if len(section_ids):
|
||||
casesection_obj = self.pool.get('crm.case.section')
|
||||
for section in casesection_obj.read(cr, uid, section_ids, ['gateway_ids']):
|
||||
casesection_obj = self.pool.get('crm.case.section')
|
||||
for section in casesection_obj.read(cr, uid, section_ids, ['gateway_ids']):
|
||||
ids += section['gateway_ids']
|
||||
log_messages = []
|
||||
for mailgateway in self.browse(cr, uid, ids):
|
||||
|
@ -287,58 +286,58 @@ class crm_email_gateway(osv.osv):
|
|||
mailgate_server = mailgateway.server_id
|
||||
if not mailgate_server.active:
|
||||
continue
|
||||
mailgate_name = mailgateway.name or "%s (%s)" % (mailgate_server.login, mailgate_server.name)
|
||||
mailgate_name = mailgateway.name or "%s (%s)" % (mailgate_server.login, mailgate_server.name)
|
||||
log_messages.append("Mail Server : %s" % mailgate_name)
|
||||
log_messages.append("="*40)
|
||||
new_messages = []
|
||||
log_messages.append("="*40)
|
||||
new_messages = []
|
||||
if mailgate_server.server_type == 'pop':
|
||||
if mailgate_server.ssl:
|
||||
pop_server = POP3_SSL(mailgate_server.name or 'localhost', mailgate_server.port or 110)
|
||||
else:
|
||||
pop_server = POP3(mailgate_server.name or 'localhost', mailgate_server.port or 110)
|
||||
pop_server = POP3(mailgate_server.name or 'localhost', mailgate_server.port or 110)
|
||||
pop_server.user(mailgate_server.login)
|
||||
pop_server.pass_(mailgate_server.password)
|
||||
pop_server.list()
|
||||
(numMsgs, totalSize) = pop_server.stat()
|
||||
for i in range(1, numMsgs + 1):
|
||||
(header, msges, octets) = pop_server.retr(i)
|
||||
(numMsgs, totalSize) = pop_server.stat()
|
||||
for i in range(1, numMsgs + 1):
|
||||
(header, msges, octets) = pop_server.retr(i)
|
||||
case_id, note = self.parse_mail(cr, uid, mailgateway.id, '\n'.join(msges))
|
||||
log = ''
|
||||
log = ''
|
||||
if case_id:
|
||||
log = _('Case Successfull Created : %d'% case_id)
|
||||
if note:
|
||||
log = note
|
||||
if note:
|
||||
log = note
|
||||
log_messages.append(log)
|
||||
new_messages.append(i)
|
||||
pop_server.quit()
|
||||
|
||||
pop_server.quit()
|
||||
|
||||
elif mailgate_server.server_type == 'imap':
|
||||
if mailgate_server.ssl:
|
||||
imap_server = IMAP4_SSL(mailgate_server.name or 'localhost', mailgate_server.port or 143)
|
||||
else:
|
||||
imap_server = IMAP4(mailgate_server.name or 'localhost', mailgate_server.port or 143)
|
||||
imap_server = IMAP4(mailgate_server.name or 'localhost', mailgate_server.port or 143)
|
||||
imap_server.login(mailgate_server.login, mailgate_server.password)
|
||||
imap_server.select()
|
||||
typ, data = imap_server.search(None, '(UNSEEN)')
|
||||
for num in data[0].split():
|
||||
typ, data = imap_server.fetch(num, '(RFC822)')
|
||||
for num in data[0].split():
|
||||
typ, data = imap_server.fetch(num, '(RFC822)')
|
||||
case_id, note = self.parse_mail(cr, uid, mailgateway.id, data[0][1])
|
||||
log = ''
|
||||
log = ''
|
||||
if case_id:
|
||||
log = 'Case Successfully Created : %d'% case_id
|
||||
if note:
|
||||
log = note
|
||||
if note:
|
||||
log = note
|
||||
log_messages.append(log)
|
||||
new_messages.append(num)
|
||||
imap_server.close()
|
||||
imap_server.logout()
|
||||
|
||||
except Exception, e:
|
||||
log_messages.append("Error in Fetching Mail: %s " %(str(e)))
|
||||
|
||||
except Exception, e:
|
||||
log_messages.append("Error in Fetching Mail: %s " %(str(e)))
|
||||
netsvc.Logger().notifyChannel('Emailgate:Fetching mail:[%d]%s' % (mailgate_server.id, mailgate_server.name), netsvc.LOG_ERROR, str(e))
|
||||
|
||||
log_messages.append("-"*25)
|
||||
log_messages.append("Total Read Mail: %d\n\n" %(len(new_messages)))
|
||||
|
||||
log_messages.append("-"*25)
|
||||
log_messages.append("Total Read Mail: %d\n\n" %(len(new_messages)))
|
||||
return log_messages
|
||||
|
||||
crm_email_gateway()
|
||||
|
@ -507,7 +506,7 @@ class crm_case(osv.osv):
|
|||
'date_deadline': fields.datetime('Deadline'),
|
||||
'date_closed': fields.datetime('Closed', readonly=True),
|
||||
'canal_id': fields.many2one('res.partner.canal', 'Channel',help="The channels represent the different communication modes available with the customer." \
|
||||
" With each commercial opportunity, you can indicate the canall which is this opportunity source."),
|
||||
" With each commercial opportunity, you can indicate the canall which is this opportunity source."),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
'history_line': fields.one2many('crm.case.history', 'case_id', 'Communication', readonly=1),
|
||||
'log_ids': fields.one2many('crm.case.log', 'case_id', 'Logs History', readonly=1),
|
||||
|
@ -599,9 +598,9 @@ class crm_case(osv.osv):
|
|||
_result = ptrn.search(str(case.name))
|
||||
if not _result:
|
||||
result_name = False
|
||||
regex_n = not reg_name or result_name
|
||||
regex_n = not reg_name or result_name
|
||||
ok = ok and regex_n
|
||||
|
||||
|
||||
reg_history = action.regex_history
|
||||
result_history = True
|
||||
if reg_history:
|
||||
|
@ -610,9 +609,9 @@ class crm_case(osv.osv):
|
|||
_result = ptrn.search(str(case.history_line[0].description))
|
||||
if not _result:
|
||||
result_history = False
|
||||
regex_h = not reg_history or result_history
|
||||
regex_h = not reg_history or result_history
|
||||
ok = ok and regex_h
|
||||
|
||||
|
||||
if not ok:
|
||||
continue
|
||||
|
||||
|
@ -652,7 +651,7 @@ class crm_case(osv.osv):
|
|||
if ok:
|
||||
if action.server_action_id:
|
||||
context.update({'active_id':case.id,'active_ids':[case.id]})
|
||||
self.pool.get('ir.actions.server').run(cr, uid, [action.server_action_id.id], context)
|
||||
self.pool.get('ir.actions.server').run(cr, uid, [action.server_action_id.id], context)
|
||||
write = {}
|
||||
if action.act_state:
|
||||
case.state = action.act_state
|
||||
|
@ -694,7 +693,7 @@ class crm_case(osv.osv):
|
|||
emails += (action.act_mail_to_email or '').split(',')
|
||||
emails = filter(None, emails)
|
||||
if len(emails) and action.act_mail_body:
|
||||
emails = list(set(emails))
|
||||
emails = list(set(emails))
|
||||
self.email_send(cr, uid, case, emails, action.act_mail_body)
|
||||
break
|
||||
action_ids = newactions
|
||||
|
@ -800,10 +799,12 @@ class crm_case(osv.osv):
|
|||
if not case.section_id.reply_to:
|
||||
raise osv.except_osv(_('Error!'),("Reply TO is not specified in Section"))
|
||||
if not case.email_from:
|
||||
raise osv.except_osv(_('Error!'),("Partner Email is not specified in Case"))
|
||||
raise osv.except_osv(_('Error!'),("Partner Email is not specified in Case"))
|
||||
if case.section_id.reply_to and case.email_from:
|
||||
src = case.email_from
|
||||
|
||||
if not src:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_("No E-Mail ID Found for the Responsible Partner or missing reply address in section!"))
|
||||
dest = case.section_id.reply_to
|
||||
body = case.email_last or case.description
|
||||
if not destination:
|
||||
|
@ -818,7 +819,7 @@ class crm_case(osv.osv):
|
|||
attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', 'crm.case'), ('res_id', '=', case.id)])
|
||||
attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname','datas'])
|
||||
attach_to_send = map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send)
|
||||
|
||||
|
||||
# Send an email
|
||||
flag = tools.email_send(
|
||||
src,
|
||||
|
@ -830,8 +831,8 @@ class crm_case(osv.osv):
|
|||
attach=attach_to_send
|
||||
)
|
||||
if flag:
|
||||
raise osv.except_osv(_('Email!'),("Email Successfully Sent"))
|
||||
else:
|
||||
raise osv.except_osv(_('Email!'),("Email Successfully Sent"))
|
||||
else:
|
||||
raise osv.except_osv(_('Email Fail!'),("Email is not sent successfully"))
|
||||
return True
|
||||
|
||||
|
@ -874,12 +875,12 @@ class crm_case(osv.osv):
|
|||
body = case.description or ''
|
||||
if case.user_id.signature:
|
||||
body += '\n\n%s' % (case.user_id.signature)
|
||||
|
||||
|
||||
emailfrom = case.user_id.address_id and case.user_id.address_id.email or False
|
||||
if not emailfrom:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_("No E-Mail ID Found for your Company address!"))
|
||||
|
||||
|
||||
tools.email_send(
|
||||
emailfrom,
|
||||
emails,
|
||||
|
@ -1055,7 +1056,7 @@ class crm_email_add_cc_wizard(osv.osv_memory):
|
|||
'email': fields.char('Email', size=32),
|
||||
'subject': fields.char('Subject', size=32),
|
||||
}
|
||||
|
||||
|
||||
def change_email(self, cr, uid, ids, user, partner):
|
||||
if (not partner and not user):
|
||||
return {'value':{'email': False}}
|
||||
|
@ -1069,8 +1070,8 @@ class crm_email_add_cc_wizard(osv.osv_memory):
|
|||
if addr:
|
||||
email = self.pool.get('res.partner.address').read(cr, uid,addr[0] , ['email'])['email']
|
||||
return {'value':{'email': email}}
|
||||
|
||||
|
||||
|
||||
|
||||
def add_cc(self, cr, uid, ids, context={}):
|
||||
data = self.read(cr, uid, ids[0])
|
||||
email = data['email']
|
||||
|
@ -1081,7 +1082,7 @@ class crm_email_add_cc_wizard(osv.osv_memory):
|
|||
history_line = self.pool.get('crm.case.history').browse(cr, uid, context['active_id'])
|
||||
crm_case = self.pool.get('crm.case')
|
||||
case = history_line.log_id.case_id
|
||||
body = history_line.description.replace('\n','\n> ')
|
||||
body = history_line.description.replace('\n','\n> ')
|
||||
flag = tools.email_send(
|
||||
case.user_id.address_id.email,
|
||||
[case.email_from],
|
||||
|
@ -1091,11 +1092,11 @@ class crm_email_add_cc_wizard(osv.osv_memory):
|
|||
tinycrm=str(case.id)
|
||||
)
|
||||
if flag:
|
||||
crm_case.write(cr, uid, case.id, {'email_cc' : case.email_cc and case.email_cc +','+ email or email})
|
||||
else:
|
||||
raise osv.except_osv(_('Email Fail!'),("Lastest Email is not sent successfully"))
|
||||
crm_case.write(cr, uid, case.id, {'email_cc' : case.email_cc and case.email_cc +','+ email or email})
|
||||
else:
|
||||
raise osv.except_osv(_('Email Fail!'),("Lastest Email is not sent successfully"))
|
||||
return {}
|
||||
|
||||
|
||||
crm_email_add_cc_wizard()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<menuitem id="menu_crm_configuration" name="Configuration" parent="crm.menu_crm" sequence="0"/>
|
||||
<menuitem action="wizard_case_section_menu" id="menu_wizard_case_section_menu" parent="crm.menu_crm_configuration" type="wizard"/>
|
||||
<wizard id="wizard_crm_send_mail" model="crm.case.history" name="crm.send.mail" string="Send Mail" menu="False"/>
|
||||
<wizard id="wizard_crm_new_send_mail" model="crm.case" name="crm.new.send.mail" string="Send New Mail" menu="False"/>
|
||||
<wizard id="wizard_crm_new_send_mail" model="crm.case" name="crm.new.send.mail" string="Send New Mail" menu="False"/>
|
||||
|
||||
<record id="res_partner_events-wopartner-view" model="ir.ui.view">
|
||||
<field name="name">res.partner.events.form</field>
|
||||
|
@ -44,28 +44,28 @@
|
|||
</group>
|
||||
<field name="reply_to" select="2"/>
|
||||
<field name="gateway_ids" widget="one2many_list" nolabel="1" colspan="4">
|
||||
<tree string="Email Gateway" editable="bottom">
|
||||
<field name="name" />
|
||||
<field name="server_id" />
|
||||
<tree string="Email Gateway" editable="bottom">
|
||||
<field name="name" />
|
||||
<field name="server_id" />
|
||||
</tree>
|
||||
<form string="Email Gateway">
|
||||
<field name="name"/>
|
||||
<field name="server_id" />
|
||||
<field name="to_email_id"/>
|
||||
<field name="cc_email_id" />
|
||||
<field name="mail_history" widget="one2many_list" nolabel="1" colspan="4">
|
||||
<tree string="Email History">
|
||||
<field name="name"/>
|
||||
<field name="name"/>
|
||||
<field name="server_id" />
|
||||
<field name="to_email_id"/>
|
||||
<field name="cc_email_id" />
|
||||
<field name="mail_history" widget="one2many_list" nolabel="1" colspan="4">
|
||||
<tree string="Email History">
|
||||
<field name="name"/>
|
||||
<field name="case_id"/>
|
||||
<field name="note"/>
|
||||
</tree>
|
||||
<form string="Email History">
|
||||
<field name="name"/>
|
||||
<form string="Email History">
|
||||
<field name="name"/>
|
||||
<field name="case_id"/>
|
||||
<separator colspan="4" string="Notes"/>
|
||||
<field name="note" nolabel="1" colspan="4"/>
|
||||
</form>
|
||||
</field>
|
||||
<field name="note" nolabel="1" colspan="4"/>
|
||||
</form>
|
||||
</field>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
|
@ -155,7 +155,7 @@
|
|||
<field name="trg_state_to" select="2"/>
|
||||
|
||||
<separator colspan="4" string="Conditions on Case Fields"/>
|
||||
<field name="regex_name" string="Regex on Case Name" colspan="2"/>
|
||||
<field name="regex_name" string="Regex on Case Name" colspan="2"/>
|
||||
<field name="trg_section_id" select="1" widget="selection"/>
|
||||
<field name="trg_categ_id"/>
|
||||
<field name="trg_user_id" select="2"/>
|
||||
|
@ -173,7 +173,7 @@
|
|||
<field name="trg_date_range_type" nolabel="1"/>
|
||||
</group>
|
||||
<separator colspan="4" string="Condition on Communication History"/>
|
||||
<field name="regex_history" string="Regex on Communication History"/>
|
||||
<field name="regex_history" string="Regex on Communication History"/>
|
||||
<field name="trg_max_history"/>
|
||||
<separator colspan="4" string="Note"/>
|
||||
<label align="0.0" string="The rule use a AND operator. The case must match all non empty fields so that the rule execute the action described in the 'Actions' tab." colspan="4"/>
|
||||
|
@ -190,7 +190,7 @@
|
|||
<field name="act_remind_attach"/>
|
||||
<field colspan="4" name="act_email_cc"/>
|
||||
<separator colspan="4" string="Server Action to be Triggered"/>
|
||||
<field name="server_action_id"/>
|
||||
<field name="server_action_id"/>
|
||||
<!--
|
||||
<field name="act_method" colspan="4" readonly="1"/>
|
||||
-->
|
||||
|
@ -214,7 +214,7 @@
|
|||
<label align="0.0" string="%%(case_user)s = Responsible name" colspan="2"/>
|
||||
<label align="0.0" string="%%(case_user_email)s = Responsible email" colspan="2"/>
|
||||
<label align="0.0" string="%%(case_user_phone)s = Responsible phone" colspan="2"/>
|
||||
<label align="0.0" string="%% = The '%%' Character" colspan="2"/>
|
||||
<label align="0.0" string="%% = The '%%' Character" colspan="2"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
|
@ -269,7 +269,7 @@
|
|||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Cases -->
|
||||
<record id="crm_case_log_tree-view" model="ir.ui.view">
|
||||
<field name="name">crm.case.log.tree</field>
|
||||
|
@ -322,7 +322,7 @@
|
|||
<field name="model">crm.case</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="red:date_deadline<current_date and state=='open'" string="Cases">
|
||||
<tree colors="red:date_deadline<current_date and state=='open'" string="Cases">
|
||||
<field name="id"/>
|
||||
<field name="section_id"/>
|
||||
<field name="date"/>
|
||||
|
@ -339,7 +339,7 @@
|
|||
<button name="case_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel"/>
|
||||
<button name="case_pending" states="draft,open" string="Pending" type="object" icon="gtk-media-pause"/>
|
||||
<button name="case_escalate" states="open,draft,pending" string="Escalate" type="object" icon="gtk-go-up"/>
|
||||
<button name="case_reset" states="done,cancel" string="Reset to Draft" type="object" icon="gtk-convert"/>
|
||||
<button name="case_reset" states="done,cancel" string="Reset to Draft" type="object" icon="gtk-convert"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -436,7 +436,7 @@
|
|||
</tree>
|
||||
</field>
|
||||
<button colspan="4" string="Send New Email" name="%(wizard_crm_new_send_mail)d" context="{'mail':'new'}" icon="gtk-go-forward" type="action"/>
|
||||
</page>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
|
@ -471,7 +471,7 @@
|
|||
<field name="res_model">crm.case</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_case_tree-view"/>
|
||||
<field name="search_view_id" ref="view_crm_case_filter"/>
|
||||
<field name="search_view_id" ref="view_crm_case_filter"/>
|
||||
</record>
|
||||
<menuitem action="crm_case_categ0-act" id="menu_crm_case_categ0-act" parent="crm.next_id_52"/>
|
||||
|
||||
|
@ -480,7 +480,7 @@
|
|||
<field name="res_model">crm.case</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="domain">[('state','<>','done'),('state','<>','cancel'),('state','<>','pending')]</field>
|
||||
<field name="search_view_id" ref="view_crm_case_filter"/>
|
||||
<field name="search_view_id" ref="view_crm_case_filter"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_categ0-act_my" model="ir.actions.act_window">
|
||||
|
@ -489,7 +489,7 @@
|
|||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,calendar</field>
|
||||
<field name="domain">[('user_id','=',uid)]</field>
|
||||
<field name="search_view_id" ref="view_crm_case_filter"/>
|
||||
<field name="search_view_id" ref="view_crm_case_filter"/>
|
||||
</record>
|
||||
<menuitem action="crm_case_categ0-act_my" id="menu_crm_case_categ0-act_my" parent="crm.next_id_52" groups="base.group_extended"/>
|
||||
<record id="crm_case_categ0-act_my_open" model="ir.actions.act_window">
|
||||
|
@ -498,7 +498,7 @@
|
|||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,calendar</field>
|
||||
<field name="domain">[('user_id','=',uid),('state','<>','done'),('state','<>','cancel'),('state','<>','pending')]</field>
|
||||
<field name="search_view_id" ref="view_crm_case_filter"/>
|
||||
<field name="search_view_id" ref="view_crm_case_filter"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_section_open_act" model="ir.actions.act_window">
|
||||
|
@ -589,9 +589,9 @@
|
|||
<field name="model">crm.segmentation</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Partner Segmentation">
|
||||
<form string="Partner Segmentation">
|
||||
<field name="name" select="1"/>
|
||||
<field name="exclusif"/>
|
||||
<field name="exclusif"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Segmentation">
|
||||
<separator colspan="4" string="Segmentation Description"/>
|
||||
|
@ -660,23 +660,23 @@
|
|||
|
||||
<act_window domain="[('user_id', '=', active_id),('state','<>','done'),('state','<>','cancel'),('state','<>','pending')]" id="act_res_users_2_crm_case_opened" name="Open cases" res_model="crm.case" src_model="res.users" view_mode="tree,form,calendar" view_type="form"/>
|
||||
|
||||
|
||||
|
||||
<record id="crm_email_gateway_server_form" model="ir.ui.view">
|
||||
<field name="name">crm.email.gateway.server.form</field>
|
||||
<field name="model">crm.email.gateway.server</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Email Gateway Server">
|
||||
<field name="server_type"/>
|
||||
<form string="Email Gateway Server">
|
||||
<field name="server_type"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Server Info">
|
||||
<page string="Server Info">
|
||||
<field name="name"/>
|
||||
<field name="port" />
|
||||
<field name="login" />
|
||||
<field name="password" password="True"/>
|
||||
<field name="ssl" />
|
||||
<field name="active" />
|
||||
</page>
|
||||
<field name="password" password="True"/>
|
||||
<field name="ssl" />
|
||||
<field name="active" />
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
|
@ -687,16 +687,16 @@
|
|||
<field name="model">crm.email.gateway.server</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Email Gateway Server">
|
||||
<field name="name"/>
|
||||
<tree string="Email Gateway Server">
|
||||
<field name="name"/>
|
||||
<field name="port" />
|
||||
<field name="server_type"/>
|
||||
<field name="ssl" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
|
||||
<record id="crm_email_gateway_server_act" model="ir.actions.act_window">
|
||||
<field name="name">Email Gateway Server</field>
|
||||
<field name="res_model">crm.email.gateway.server</field>
|
||||
|
@ -704,8 +704,7 @@
|
|||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="crm_email_gateway_server_tree"/>
|
||||
</record>
|
||||
<menuitem id="crm_email_gateway_server_menu" name="Email Gateway Server" parent="next_id_51" action="crm_email_gateway_server_act" />
|
||||
|
||||
|
||||
<menuitem id="crm_email_gateway_server_menu" name="Email Gateway Server" parent="next_id_51" action="crm_email_gateway_server_act" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-17 07:49+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-11-30 14:01+0000\n"
|
||||
"Last-Translator: Simon Vidmar <Unknown>\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: 2009-11-18 04:36+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: crm
|
||||
|
@ -25,12 +25,12 @@ msgstr ""
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu7:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu7_option:0
|
||||
msgid "My Draft "
|
||||
msgstr ""
|
||||
msgstr "Moj osnutek "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Add Last Mail for Replying"
|
||||
msgstr ""
|
||||
msgstr "Dodaj zadnje sporočilo v odgovor"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -42,7 +42,7 @@ msgstr ""
|
|||
#: model:ir.ui.menu,name:crm.menu_crm_case_categ0-act
|
||||
#: model:ir.ui.menu,name:crm.next_id_52
|
||||
msgid "All Cases"
|
||||
msgstr ""
|
||||
msgstr "Vsi primeri"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
|
@ -52,7 +52,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case.rule,act_remind_partner:0
|
||||
msgid "Remind Partner"
|
||||
msgstr ""
|
||||
msgstr "Opomni partnerja"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
|
@ -68,7 +68,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Napačno ime modela v definiciji dejanja."
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation,sales_purchase_active:0
|
||||
|
@ -79,7 +79,7 @@ msgstr ""
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu13:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu13_option:0
|
||||
msgid "All Open "
|
||||
msgstr ""
|
||||
msgstr "Vse odprto "
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,som_interval_default:0
|
||||
|
@ -101,7 +101,7 @@ msgstr "E-pošta"
|
|||
#. module: crm
|
||||
#: selection:crm.segmentation.line,expr_name:0
|
||||
msgid "Purchase Amount"
|
||||
msgstr ""
|
||||
msgstr "Unesek nakupa"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.wizard,name:crm.wizard_case_section_menu
|
||||
|
@ -112,17 +112,17 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Template of Email to Send"
|
||||
msgstr ""
|
||||
msgstr "Predloga za pošiljanje poštnega sporočila"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,trg_state_to:0
|
||||
msgid "Button Pressed"
|
||||
msgstr ""
|
||||
msgstr "Pritisnjeni gumb"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Planned costs"
|
||||
msgstr ""
|
||||
msgstr "Načrtovani stroški"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.ui.menu,name:crm.menu_crm
|
||||
|
@ -142,7 +142,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case.section,allow_unlink:0
|
||||
msgid "Allow Delete"
|
||||
msgstr ""
|
||||
msgstr "Dovoli brisanje"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_email_cc:0
|
||||
|
@ -153,14 +153,14 @@ msgstr ""
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu1:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu1_option:0
|
||||
msgid "My "
|
||||
msgstr ""
|
||||
msgstr "Moj "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
#: view:crm.case.history:0
|
||||
#: model:ir.ui.menu,name:crm.next_id_51
|
||||
msgid "Cases"
|
||||
msgstr ""
|
||||
msgstr "Primeri"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case,priority:0
|
||||
|
@ -204,17 +204,17 @@ msgstr "Vrednost"
|
|||
#. module: crm
|
||||
#: field:crm.case,planned_cost:0
|
||||
msgid "Planned Costs"
|
||||
msgstr ""
|
||||
msgstr "Načrtovani stroški"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_crm_case_history
|
||||
msgid "Case history"
|
||||
msgstr ""
|
||||
msgstr "Zgodovina primera"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_state:0
|
||||
msgid "Set state to"
|
||||
msgstr ""
|
||||
msgstr "Nastavi stanje na"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.categ,name:0
|
||||
|
@ -245,7 +245,7 @@ msgstr "Minut"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu16:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu16_option:0
|
||||
msgid "All Unclosed and Unassigned "
|
||||
msgstr ""
|
||||
msgstr "Vsi nezaprti in nerazporejeni "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -278,7 +278,7 @@ msgstr "Nov "
|
|||
#. module: crm
|
||||
#: view:res.partner.events:0
|
||||
msgid "Partner Events"
|
||||
msgstr ""
|
||||
msgstr "Partnerjevi dogodki"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -299,12 +299,12 @@ msgstr ""
|
|||
#: field:crm.case,date_deadline:0
|
||||
#: selection:crm.case.rule,trg_date_type:0
|
||||
msgid "Deadline"
|
||||
msgstr ""
|
||||
msgstr "Rok"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation.line,expr_operator:0
|
||||
msgid "Operator"
|
||||
msgstr ""
|
||||
msgstr "Operater"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case,state:0
|
||||
|
@ -332,7 +332,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Extra Info"
|
||||
msgstr ""
|
||||
msgstr "Dodatne informacije"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -372,7 +372,7 @@ msgstr ""
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu5:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu5_option:0
|
||||
msgid "My Open "
|
||||
msgstr ""
|
||||
msgstr "Moji odprti "
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
|
@ -394,7 +394,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case.rule,act_mail_to_email:0
|
||||
msgid "Mail to these emails"
|
||||
msgstr ""
|
||||
msgstr "Pošlji na te naslove"
|
||||
|
||||
#. module: crm
|
||||
#: constraint:ir.ui.view:0
|
||||
|
@ -430,7 +430,7 @@ msgstr "Pogoji"
|
|||
#. module: crm
|
||||
#: field:crm.case,description:0
|
||||
msgid "Your action"
|
||||
msgstr ""
|
||||
msgstr "Vaše dejanje"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -519,7 +519,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: selection:crm.case.rule,trg_date_type:0
|
||||
msgid "Last Action Date"
|
||||
msgstr ""
|
||||
msgstr "Datum zadnjega dejanja"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case.rule,trg_date_range_type:0
|
||||
|
@ -530,7 +530,7 @@ msgstr "Ur"
|
|||
#: model:ir.actions.act_window,name:crm.crm_case_categ0-act_my_open
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_categ0-act_my_open
|
||||
msgid "My Open Cases"
|
||||
msgstr ""
|
||||
msgstr "Moje odprte zadeve"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_remind_attach:0
|
||||
|
@ -541,13 +541,13 @@ msgstr ""
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu10:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu10_option:0
|
||||
msgid "All Late "
|
||||
msgstr ""
|
||||
msgstr "Vse pozne "
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu3:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu3_option:0
|
||||
msgid "My Late "
|
||||
msgstr ""
|
||||
msgstr "Moje pozne "
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_configuration
|
||||
|
@ -561,7 +561,7 @@ msgstr "Konfiguracija"
|
|||
#: model:ir.actions.act_window,name:crm.act_res_partner_canal_2_crm_case_opened
|
||||
#: model:ir.actions.act_window,name:crm.act_res_users_2_crm_case_opened
|
||||
msgid "Open cases"
|
||||
msgstr ""
|
||||
msgstr "Odprti primeri"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_categ-act
|
||||
|
@ -573,7 +573,7 @@ msgstr "Kategorije"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu2:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu2_option:0
|
||||
msgid "My Unclosed "
|
||||
msgstr ""
|
||||
msgstr "Moji nezaprti "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -657,7 +657,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case,history_line:0
|
||||
msgid "Communication"
|
||||
msgstr ""
|
||||
msgstr "Sporočanje"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation,partner_id:0
|
||||
|
@ -687,7 +687,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm.crm_case_rule-act
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_rule-act
|
||||
msgid "Rules"
|
||||
msgstr ""
|
||||
msgstr "Pravila"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_method:0
|
||||
|
@ -698,7 +698,7 @@ msgstr ""
|
|||
#: view:crm.segmentation:0
|
||||
#: field:crm.segmentation.line,segmentation_id:0
|
||||
msgid "Segmentation"
|
||||
msgstr ""
|
||||
msgstr "Razčlenjenost"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation,som_interval:0
|
||||
|
@ -724,17 +724,17 @@ msgstr ""
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
msgstr "Koledar"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,ref:0
|
||||
msgid "Reference"
|
||||
msgstr ""
|
||||
msgstr "Sklic"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,ref2:0
|
||||
msgid "Reference 2"
|
||||
msgstr ""
|
||||
msgstr "Sklic 2"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -745,12 +745,12 @@ msgstr ""
|
|||
#: field:crm.case,categ_id:0
|
||||
#: field:crm.case.rule,trg_categ_id:0
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "Kategorija"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.history,log_id:0
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
msgstr "Dnevnik"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.case.rule,act_email_cc:0
|
||||
|
@ -824,7 +824,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,view_calendar:0
|
||||
msgid "Calendar View"
|
||||
msgstr ""
|
||||
msgstr "Pogled koledarja"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case,priority:0
|
||||
|
@ -832,12 +832,12 @@ msgstr ""
|
|||
#: selection:crm.case.rule,trg_priority_from:0
|
||||
#: selection:crm.case.rule,trg_priority_to:0
|
||||
msgid "Low"
|
||||
msgstr ""
|
||||
msgstr "Nizko"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,date_closed:0
|
||||
msgid "Closed"
|
||||
msgstr ""
|
||||
msgstr "Zaprto"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -859,7 +859,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Conditions"
|
||||
msgstr ""
|
||||
msgstr "Pogoji"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_categ0-act_open
|
||||
|
@ -874,7 +874,7 @@ msgstr ""
|
|||
#: selection:crm.case.rule,trg_state_from:0
|
||||
#: selection:crm.case.rule,trg_state_to:0
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
msgstr "Na čakanju"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
|
@ -885,7 +885,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "Stanje"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_remind_user:0
|
||||
|
@ -918,7 +918,7 @@ msgstr ""
|
|||
#: selection:crm.case.rule,trg_priority_from:0
|
||||
#: selection:crm.case.rule,trg_priority_to:0
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
msgstr "Navadno"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -950,14 +950,14 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case,planned_revenue:0
|
||||
msgid "Planned Revenue"
|
||||
msgstr ""
|
||||
msgstr "Načrtovani prihodki"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,active:0
|
||||
#: field:crm.case.rule,active:0
|
||||
#: field:crm.case.section,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "Aktivno"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu9:0
|
||||
|
@ -980,7 +980,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: selection:crm.segmentation.line,expr_operator:0
|
||||
msgid ">"
|
||||
msgstr ""
|
||||
msgstr ">"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.section,parent_id:0
|
||||
|
@ -990,17 +990,17 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,menu_parent_id:0
|
||||
msgid "Parent Menu"
|
||||
msgstr ""
|
||||
msgstr "Nadmenu"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation,exclusif:0
|
||||
msgid "Exclusive"
|
||||
msgstr ""
|
||||
msgstr "Ekskluzivno"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Included Answers :"
|
||||
msgstr ""
|
||||
msgstr "Vključeni odgovori:"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1010,7 +1010,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: selection:crm.case.rule,trg_date_type:0
|
||||
msgid "Creation Date"
|
||||
msgstr ""
|
||||
msgstr "Ustvarjeno dne"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case.section.menu,design_menu,menu10_option:0
|
||||
|
@ -1031,7 +1031,7 @@ msgstr ""
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "Don't Create"
|
||||
msgstr ""
|
||||
msgstr "Ne izdelaj"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,menu_name:0
|
||||
|
@ -1048,7 +1048,7 @@ msgstr ""
|
|||
#: field:crm.case.log,date:0
|
||||
#: selection:crm.case.rule,trg_date_type:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
msgstr "Datum"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,design_menu:0
|
||||
|
@ -1058,7 +1058,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case.log,name:0
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
msgstr "Dejanje"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.categ:0
|
||||
|
@ -1078,12 +1078,12 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
msgstr "Zgodovina"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,partner_address_id:0
|
||||
msgid "Partner Contact"
|
||||
msgstr ""
|
||||
msgstr "Stik partnerja"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu12:0
|
||||
|
@ -1095,7 +1095,7 @@ msgstr ""
|
|||
#: field:crm.case.rule,sequence:0
|
||||
#: field:crm.case.section,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
msgstr "Zaporedje"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1105,7 +1105,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
msgstr "Splošno"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -1127,7 +1127,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Communication history"
|
||||
msgstr ""
|
||||
msgstr "Zgodovina komunikacije"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -1138,7 +1138,7 @@ msgstr ""
|
|||
#: wizard_button:crm.case.section.menu,design_menu,end:0
|
||||
#: wizard_button:crm.case.section.menu,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Prekliči"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -1147,12 +1147,12 @@ msgstr ""
|
|||
#: selection:crm.case.rule,trg_state_from:0
|
||||
#: selection:crm.case.rule,trg_state_to:0
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "Zapri"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.report.xml,name:crm.crm_business_opportunities_report
|
||||
msgid "Business Opportunities"
|
||||
msgstr ""
|
||||
msgstr "Poslovne priložnosti"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -1161,12 +1161,12 @@ msgstr ""
|
|||
#: selection:crm.case.rule,trg_state_from:0
|
||||
#: selection:crm.case.rule,trg_state_to:0
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "Odpri"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,view_tree:0
|
||||
msgid "Tree View"
|
||||
msgstr ""
|
||||
msgstr "Drevesni prikaz"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1181,7 +1181,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case.section,user_id:0
|
||||
msgid "Responsible User"
|
||||
msgstr ""
|
||||
msgstr "Odgovorni uporabnik"
|
||||
|
||||
#. module: crm
|
||||
#: constraint:ir.model:0
|
||||
|
@ -1193,13 +1193,13 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:res.partner.events:0
|
||||
msgid "General Description"
|
||||
msgstr ""
|
||||
msgstr "Splošni opis"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,user_id:0
|
||||
#: field:crm.case.rule,trg_user_id:0
|
||||
msgid "Responsible"
|
||||
msgstr ""
|
||||
msgstr "Odgovoren"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
|
@ -1233,7 +1233,7 @@ msgstr ""
|
|||
#: field:crm.case.log,som:0
|
||||
#: selection:crm.segmentation.line,expr_name:0
|
||||
msgid "State of Mind"
|
||||
msgstr ""
|
||||
msgstr "Razpoloženje partnerja"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_priority:0
|
||||
|
@ -1246,7 +1246,7 @@ msgstr ""
|
|||
#: field:crm.case.history,note:0
|
||||
#: field:crm.segmentation,description:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
msgstr "Opis"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,trg_max_history:0
|
||||
|
@ -1320,19 +1320,19 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: selection:crm.segmentation.line,expr_operator:0
|
||||
msgid "="
|
||||
msgstr ""
|
||||
msgstr "="
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.log,case_id:0
|
||||
#: model:ir.model,name:crm.model_crm_case
|
||||
#: model:res.request.link,name:crm.req_link_case
|
||||
msgid "Case"
|
||||
msgstr ""
|
||||
msgstr "Primer"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case.rule,trg_date_range_type:0
|
||||
msgid "Months"
|
||||
msgstr ""
|
||||
msgstr "Meseci"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1342,7 +1342,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.segmentation,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,som_interval_decrease:0
|
||||
|
@ -1355,7 +1355,7 @@ msgstr ""
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu8:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu8_option:0
|
||||
msgid "All "
|
||||
msgstr ""
|
||||
msgstr "Vse "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1386,7 +1386,7 @@ msgstr ""
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "List"
|
||||
msgstr ""
|
||||
msgstr "Seznam"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -1428,7 +1428,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case,id:0
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
msgstr "Oznaka"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,exclusif:0
|
||||
|
@ -1446,7 +1446,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,view_form:0
|
||||
msgid "Form View"
|
||||
msgstr ""
|
||||
msgstr "Prikaz obrazca"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1456,7 +1456,7 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Planned revenue"
|
||||
msgstr ""
|
||||
msgstr "Načrtovani prihodki"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -1482,7 +1482,7 @@ msgstr ""
|
|||
#: view:crm.case:0
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
msgstr "Dejanja"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case,priority:0
|
||||
|
@ -1490,7 +1490,7 @@ msgstr ""
|
|||
#: selection:crm.case.rule,trg_priority_from:0
|
||||
#: selection:crm.case.rule,trg_priority_to:0
|
||||
msgid "High"
|
||||
msgstr ""
|
||||
msgstr "Visoka"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation.line,expr_name:0
|
||||
|
@ -1512,7 +1512,7 @@ msgstr ""
|
|||
#: field:crm.case,partner_id:0
|
||||
#: field:crm.case.rule,trg_partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
msgstr "Partner"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1527,4 +1527,4 @@ msgstr ""
|
|||
#. module: crm
|
||||
#: field:crm.case.rule,trg_date_type:0
|
||||
msgid "Trigger Date"
|
||||
msgstr ""
|
||||
msgstr "Sproženo dne"
|
||||
|
|
|
@ -7,42 +7,42 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-29 05:22+0000\n"
|
||||
"Last-Translator: Jeroen Vet <Unknown>\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:32+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Delay After Trigger Date:"
|
||||
msgstr ""
|
||||
msgstr "触发日期后延迟"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu7:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu7_option:0
|
||||
msgid "My Draft "
|
||||
msgstr ""
|
||||
msgstr "我的草稿 "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Add Last Mail for Replying"
|
||||
msgstr ""
|
||||
msgstr "添加要回复的最新邮件"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
msgid "State of Mind Computation"
|
||||
msgstr "满意度 计算"
|
||||
msgstr "满意度计算"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_categ0-act
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_categ0-act
|
||||
#: model:ir.ui.menu,name:crm.next_id_52
|
||||
msgid "All Cases"
|
||||
msgstr ""
|
||||
msgstr "所有案例"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
|
@ -52,12 +52,12 @@ msgstr "该向导会创建属于选定菜单的所有子菜单"
|
|||
#. module: crm
|
||||
#: field:crm.case.rule,act_remind_partner:0
|
||||
msgid "Remind Partner"
|
||||
msgstr ""
|
||||
msgstr "提醒业务伙伴"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
msgid "Base Information"
|
||||
msgstr ""
|
||||
msgstr "基本信息"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,trg_partner_categ_id:0
|
||||
|
@ -68,25 +68,25 @@ msgstr "业务伙伴分类"
|
|||
#. module: crm
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation,sales_purchase_active:0
|
||||
msgid "Use The Sales Purchase Rules"
|
||||
msgstr ""
|
||||
msgstr "使用销售采购规则"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu13:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu13_option:0
|
||||
msgid "All Open "
|
||||
msgstr ""
|
||||
msgstr "所有待办的 "
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,som_interval_default:0
|
||||
msgid ""
|
||||
"Default state of mind for period preceeding the 'Max Interval' computation. "
|
||||
"This is the starting state of mind by default if the partner has no event."
|
||||
msgstr ""
|
||||
msgstr "在‘最大间隔’计算之前周期的默认满意度。如果该业务伙伴无事件则默认开始满意度。"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.segmentation,state:0
|
||||
|
@ -96,7 +96,7 @@ msgstr "运行中"
|
|||
#. module: crm
|
||||
#: field:crm.case.history,email:0
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
msgstr "电子邮件"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.segmentation.line,expr_name:0
|
||||
|
@ -107,17 +107,17 @@ msgstr "采购金额"
|
|||
#: model:ir.actions.wizard,name:crm.wizard_case_section_menu
|
||||
#: model:ir.ui.menu,name:crm.menu_wizard_case_section_menu
|
||||
msgid "Create menus for a case section"
|
||||
msgstr ""
|
||||
msgstr "为案例栏目创建菜单"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Template of Email to Send"
|
||||
msgstr ""
|
||||
msgstr "要发送的电子邮件模板"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,trg_state_to:0
|
||||
msgid "Button Pressed"
|
||||
msgstr ""
|
||||
msgstr "按下按钮"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -127,22 +127,22 @@ msgstr "计划费用"
|
|||
#. module: crm
|
||||
#: model:ir.ui.menu,name:crm.menu_crm
|
||||
msgid "CRM & SRM"
|
||||
msgstr ""
|
||||
msgstr "业务关系管理"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Segmentation Description"
|
||||
msgstr "细分说明"
|
||||
msgstr "分割说明"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "%(case_user)s = Responsible name"
|
||||
msgstr "%(case_user)s = Responsible name"
|
||||
msgstr "%(case_user)s = 负责人"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.section,allow_unlink:0
|
||||
msgid "Allow Delete"
|
||||
msgstr ""
|
||||
msgstr "允许删除"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_email_cc:0
|
||||
|
@ -153,14 +153,14 @@ msgstr "添加关注者(Cc)"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu1:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu1_option:0
|
||||
msgid "My "
|
||||
msgstr ""
|
||||
msgstr "我的 "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
#: view:crm.case.history:0
|
||||
#: model:ir.ui.menu,name:crm.next_id_51
|
||||
msgid "Cases"
|
||||
msgstr "事务"
|
||||
msgstr "案例"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case,priority:0
|
||||
|
@ -178,18 +178,18 @@ msgstr "<"
|
|||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "%(case_description)s = Case description"
|
||||
msgstr ""
|
||||
msgstr "%(case_description)s = 案例描述"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,email_cc:0
|
||||
msgid "Watchers Emails"
|
||||
msgstr "关注者Email"
|
||||
msgstr "关注者的电子邮件"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_button:crm.case.section.menu,design_menu,create:0
|
||||
#: wizard_button:crm.case.section.menu,init,design_menu:0
|
||||
msgid "Create menu Entries"
|
||||
msgstr ""
|
||||
msgstr "创建菜单条目"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case.rule,trg_date_range_type:0
|
||||
|
@ -209,17 +209,17 @@ msgstr "计划成本"
|
|||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_crm_case_history
|
||||
msgid "Case history"
|
||||
msgstr "事务记录"
|
||||
msgstr "案例记录"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_state:0
|
||||
msgid "Set state to"
|
||||
msgstr "设置状态至"
|
||||
msgstr "设置状态为"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.categ,name:0
|
||||
msgid "Case Category Name"
|
||||
msgstr "事务类别名称"
|
||||
msgstr "案例分类名称"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case.rule,trg_date_type:0
|
||||
|
@ -229,28 +229,28 @@ msgstr "无"
|
|||
#. module: crm
|
||||
#: field:crm.segmentation,som_interval_max:0
|
||||
msgid "Max Interval"
|
||||
msgstr "最大计算期间数"
|
||||
msgstr "最长时间间隔"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.section,reply_to:0
|
||||
msgid "Reply-To"
|
||||
msgstr "回复:"
|
||||
msgstr "回复到"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case.rule,trg_date_range_type:0
|
||||
msgid "Minutes"
|
||||
msgstr "分钟"
|
||||
msgstr "分"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu16:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu16_option:0
|
||||
msgid "All Unclosed and Unassigned "
|
||||
msgstr ""
|
||||
msgstr "所有未关闭和未分配的 "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
msgstr "备注"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,name:0
|
||||
|
@ -262,28 +262,28 @@ msgstr "规则名称"
|
|||
#: help:crm.case.rule,act_remind_partner:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to send a reminder by email to the partner."
|
||||
msgstr ""
|
||||
msgstr "如果您希望该规则发送提醒邮件给业务伙伴的话请选中此项。"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,trg_priority_to:0
|
||||
msgid "Maximim Priority"
|
||||
msgstr ""
|
||||
msgstr "最高优先级"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu17:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu17_option:0
|
||||
msgid "New "
|
||||
msgstr ""
|
||||
msgstr "新建 "
|
||||
|
||||
#. module: crm
|
||||
#: view:res.partner.events:0
|
||||
msgid "Partner Events"
|
||||
msgstr "业务伙伴活动"
|
||||
msgstr "业务伙伴事件"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Conditions on Case Fields"
|
||||
msgstr ""
|
||||
msgstr "案例字段条件"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,date_action_next:0
|
||||
|
@ -317,7 +317,7 @@ msgstr "草稿"
|
|||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_crm_case_log
|
||||
msgid "Case Communication History"
|
||||
msgstr ""
|
||||
msgstr "案例通讯记录"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.model,name:crm.model_crm_case_categ
|
||||
|
@ -332,7 +332,7 @@ msgstr "估计"
|
|||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Extra Info"
|
||||
msgstr ""
|
||||
msgstr "附加信息"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -367,22 +367,38 @@ msgid ""
|
|||
"The CRM module has a email gateway for the synchronisation interface\n"
|
||||
"between mails and Open ERP."
|
||||
msgstr ""
|
||||
"使用范围广泛的Open ERP客户关系管理\n"
|
||||
"系统使群体用户能够有效率地和智能地管理销售线索、\n"
|
||||
"商机、任务、问题、要求、故障、推广活动、索取等。\n"
|
||||
"它管理关键任务如沟通,识别,优先化,分配,\n"
|
||||
"决定和通知。\n"
|
||||
"\n"
|
||||
"系统使用户,客户和供应商能够跟踪 所有案例。\n"
|
||||
"它根据企业自己的规则能自动发送提醒,提升请求,\n"
|
||||
"触发特定的秩序和其它行动。\n"
|
||||
"系统最大优势是用户不需要做任何特殊事件。\n"
|
||||
"他们只需发送邮件发给请求追踪器。系统将回感谢信,\n"
|
||||
"自动发送邮件发到 相关人员那,并确保以后正确地\n"
|
||||
"传递相关信件。\n"
|
||||
"\n"
|
||||
"客户关系管理模块有一个邮件和ERP系统之间的\n"
|
||||
"同步接口邮件网关。"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu5:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu5_option:0
|
||||
msgid "My Open "
|
||||
msgstr ""
|
||||
msgstr "我的待办案例 "
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
msgid "Select Views (empty for default)"
|
||||
msgstr ""
|
||||
msgstr "选择视图(为空表示默认)"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,trg_state_from:0
|
||||
msgid "Case State"
|
||||
msgstr ""
|
||||
msgstr "案例状态"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,section_id:0
|
||||
|
@ -399,12 +415,12 @@ msgstr "发送email"
|
|||
#. module: crm
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图架构!"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Special Keywords to Be Used in The Body"
|
||||
msgstr ""
|
||||
msgstr "指定正文里的关键字"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,priority:0
|
||||
|
@ -435,13 +451,13 @@ msgstr "说明"
|
|||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Excluded Answers :"
|
||||
msgstr ""
|
||||
msgstr "已排除的答案:"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_section_act
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_section_act
|
||||
msgid "Sections"
|
||||
msgstr ""
|
||||
msgstr "分部"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.section:0
|
||||
|
@ -470,22 +486,22 @@ msgstr "最低"
|
|||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "E-Mail Reminders (includes the content of the case)"
|
||||
msgstr ""
|
||||
msgstr "电子邮件提醒(包含案例内容)"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Profiling"
|
||||
msgstr ""
|
||||
msgstr "归类"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Fields to Change"
|
||||
msgstr ""
|
||||
msgstr "要更改的字段"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_history-act_main
|
||||
msgid "Cases Histories"
|
||||
msgstr ""
|
||||
msgstr "案例历史记录"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_categ0-act_my
|
||||
|
@ -497,14 +513,14 @@ msgstr "我的事务"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu15:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu15_option:0
|
||||
msgid "All Draft "
|
||||
msgstr ""
|
||||
msgstr "所有草稿 "
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,som_interval_max:0
|
||||
msgid ""
|
||||
"The computation is made on all events that occured during this interval, the "
|
||||
"past X periods."
|
||||
msgstr ""
|
||||
msgstr "计算是建立在此时间间隔发生的所有事件。在过去 X 周期内。"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -541,13 +557,13 @@ msgstr "提醒并附附件"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu10:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu10_option:0
|
||||
msgid "All Late "
|
||||
msgstr ""
|
||||
msgstr "所有延迟的 "
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu3:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu3_option:0
|
||||
msgid "My Late "
|
||||
msgstr ""
|
||||
msgstr "我的延迟的 "
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_configuration
|
||||
|
@ -573,7 +589,7 @@ msgstr "事务分类"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu2:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu2_option:0
|
||||
msgid "My Unclosed "
|
||||
msgstr ""
|
||||
msgstr "我的未关闭的 "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -603,13 +619,13 @@ msgstr "发送邮件至负责人"
|
|||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Profiling Options"
|
||||
msgstr ""
|
||||
msgstr "归类选项"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu6:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu6_option:0
|
||||
msgid "My Pending "
|
||||
msgstr ""
|
||||
msgstr "我的待结案例 "
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case.section.menu,design_menu,menu10_option:0
|
||||
|
@ -630,7 +646,7 @@ msgstr ""
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "New Form"
|
||||
msgstr ""
|
||||
msgstr "新建表单"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -652,7 +668,7 @@ msgstr "设置负责人"
|
|||
msgid ""
|
||||
"The rule use a AND operator. The case must match all non empty fields so "
|
||||
"that the rule execute the action described in the 'Actions' tab."
|
||||
msgstr ""
|
||||
msgstr "该规则使用逻辑积算符。案例必须匹配所有非空字段,以便在执行规则的'操作'标签中描述的行动。"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,history_line:0
|
||||
|
@ -667,7 +683,7 @@ msgstr "已处理最大伙伴ID"
|
|||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Condition on Communication History"
|
||||
msgstr ""
|
||||
msgstr "通讯历史的条件"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -687,7 +703,7 @@ msgstr "事务属性"
|
|||
#: model:ir.actions.act_window,name:crm.crm_case_rule-act
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_rule-act
|
||||
msgid "Rules"
|
||||
msgstr ""
|
||||
msgstr "规则"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_method:0
|
||||
|
@ -724,7 +740,7 @@ msgstr "计算间隔天数"
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
msgstr "日历"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,ref:0
|
||||
|
@ -739,7 +755,7 @@ msgstr "参考2"
|
|||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Sales Purchase"
|
||||
msgstr ""
|
||||
msgstr "销售采购"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,categ_id:0
|
||||
|
@ -757,12 +773,12 @@ msgstr "记录"
|
|||
msgid ""
|
||||
"These people will receive a copy of the futur communication between partner "
|
||||
"and users by email"
|
||||
msgstr ""
|
||||
msgstr "这些人将收到业务伙伴和用户之间未来通过电子邮件沟通的副本"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Historize"
|
||||
msgstr ""
|
||||
msgstr "存档"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -788,7 +804,7 @@ msgstr "%(partner)s = Partner name"
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "New With Calendar"
|
||||
msgstr ""
|
||||
msgstr "带日历创建"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.segmentation,state:0
|
||||
|
@ -814,7 +830,7 @@ msgstr "未运行"
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "List With Calendar"
|
||||
msgstr ""
|
||||
msgstr "带日历列表"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -824,7 +840,7 @@ msgstr "操作信息"
|
|||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,view_calendar:0
|
||||
msgid "Calendar View"
|
||||
msgstr ""
|
||||
msgstr "日历视图"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case,priority:0
|
||||
|
@ -854,12 +870,12 @@ msgstr "启动日期后的延迟"
|
|||
msgid ""
|
||||
"Check 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
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Conditions"
|
||||
msgstr ""
|
||||
msgstr "条件"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_categ0-act_open
|
||||
|
@ -885,7 +901,7 @@ msgstr "为了包含所创建的菜单,您可能要建立一份母菜单。"
|
|||
#. module: crm
|
||||
#: field:crm.case,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "状态"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_remind_user:0
|
||||
|
@ -900,7 +916,7 @@ msgstr "设置属性为"
|
|||
#. module: crm
|
||||
#: field:crm.segmentation,state:0
|
||||
msgid "Execution Status"
|
||||
msgstr ""
|
||||
msgstr "执行状态"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,som_interval:0
|
||||
|
@ -911,6 +927,7 @@ msgid ""
|
|||
"has decreased because he probably bought goods to another supplier. Use this "
|
||||
"functionality for recurring businesses."
|
||||
msgstr ""
|
||||
"周期是指销售或客户两次采购之间的平均天数。它主要用于察觉一个业务伙伴长时间没有采购,我们推测是其满意度下降而寻找了另一供应商。此功能适用于经常性的业务。"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.case,priority:0
|
||||
|
@ -930,12 +947,12 @@ msgstr "提升"
|
|||
#. module: crm
|
||||
#: model:ir.module.module,shortdesc:crm.module_meta_information
|
||||
msgid "Customer & Supplier Relationship Management"
|
||||
msgstr ""
|
||||
msgstr "客户与供应商关系管理"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,trg_priority_from:0
|
||||
msgid "Minimum Priority"
|
||||
msgstr ""
|
||||
msgstr "最低优先级"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation,som_interval_default:0
|
||||
|
@ -963,14 +980,14 @@ msgstr "有效"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu9:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "All Unassigned "
|
||||
msgstr ""
|
||||
msgstr "所有未分配的 "
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.case.rule,act_remind_attach:0
|
||||
msgid ""
|
||||
"Check this if you want that all documents attached to the case be attached "
|
||||
"to the reminder email sent."
|
||||
msgstr ""
|
||||
msgstr "如果您想将案例的所有附属文档附在提醒电子邮件上选中此项。"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.segmentation.line,operator:0
|
||||
|
@ -990,7 +1007,7 @@ msgstr "上级单元"
|
|||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,menu_parent_id:0
|
||||
msgid "Parent Menu"
|
||||
msgstr ""
|
||||
msgstr "上级菜单"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation,exclusif:0
|
||||
|
@ -1000,7 +1017,7 @@ msgstr "选择性排除"
|
|||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Included Answers :"
|
||||
msgstr ""
|
||||
msgstr "包括的回答:"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1031,17 +1048,17 @@ msgstr "创建日期"
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "Don't Create"
|
||||
msgstr ""
|
||||
msgstr "不要创建"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,menu_name:0
|
||||
msgid "Base Menu Name"
|
||||
msgstr ""
|
||||
msgstr "基本菜单名称"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.section,child_ids:0
|
||||
msgid "Child Sections"
|
||||
msgstr ""
|
||||
msgstr "下级分部"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,date:0
|
||||
|
@ -1053,7 +1070,7 @@ msgstr "日期"
|
|||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,design_menu:0
|
||||
msgid "Created Menus"
|
||||
msgstr ""
|
||||
msgstr "已创建菜单"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.log,name:0
|
||||
|
@ -1089,7 +1106,7 @@ msgstr "业务伙伴联系人"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu12:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu12_option:0
|
||||
msgid "All Unclosed "
|
||||
msgstr ""
|
||||
msgstr "所有未关闭的 "
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,sequence:0
|
||||
|
@ -1122,12 +1139,12 @@ msgstr "如果使用此邮件网关请填写完整"
|
|||
msgid ""
|
||||
"The partner category that will be added to partners that match the "
|
||||
"segmentation criterions after computation."
|
||||
msgstr ""
|
||||
msgstr "计算之后,与分割条件匹配的业务伙伴将属于该分类。"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Communication history"
|
||||
msgstr ""
|
||||
msgstr "通讯记录"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -1166,28 +1183,28 @@ msgstr "未结"
|
|||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,view_tree:0
|
||||
msgid "Tree View"
|
||||
msgstr ""
|
||||
msgstr "树形视图"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Conditions on Case Partner"
|
||||
msgstr ""
|
||||
msgstr "案例业务伙伴条件"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.section,code:0
|
||||
msgid "Section Code"
|
||||
msgstr ""
|
||||
msgstr "分部编码"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.section,user_id:0
|
||||
msgid "Responsible User"
|
||||
msgstr ""
|
||||
msgstr "负责用户"
|
||||
|
||||
#. module: crm
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名称不能以“x_”起头且不能包含任何特殊字符!"
|
||||
|
||||
#. module: crm
|
||||
#: view:res.partner.events:0
|
||||
|
@ -1203,7 +1220,7 @@ msgstr "负责人"
|
|||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,init:0
|
||||
msgid "Create Menus For Cases"
|
||||
msgstr ""
|
||||
msgstr "为案例创建菜单"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_mail_to_partner:0
|
||||
|
@ -1219,7 +1236,7 @@ msgstr "业务伙伴的Email"
|
|||
#: wizard_field:crm.case.section.menu,design_menu,menu14:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu14_option:0
|
||||
msgid "All Pending "
|
||||
msgstr ""
|
||||
msgstr "所有未结的 "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -1250,18 +1267,18 @@ msgstr "说明"
|
|||
#. module: crm
|
||||
#: field:crm.case.rule,trg_max_history:0
|
||||
msgid "Maximum Communication History"
|
||||
msgstr ""
|
||||
msgstr "最大通讯记录"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu11:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu11_option:0
|
||||
msgid "All Canceled "
|
||||
msgstr ""
|
||||
msgstr "所有已取消的 "
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.segmentation,name:0
|
||||
msgid "The name of the segmentation."
|
||||
msgstr ""
|
||||
msgstr "该分割的名称。"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,act_mail_body:0
|
||||
|
@ -1272,13 +1289,13 @@ msgstr "邮件内容"
|
|||
#: help:crm.case.rule,act_remind_user:0
|
||||
msgid ""
|
||||
"Check this if you want the rule to send a reminder by email to the user."
|
||||
msgstr ""
|
||||
msgstr "如果您想要此规则发送提醒邮件给用户的话请选中此项。"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,probability:0
|
||||
#: field:crm.case.categ,probability:0
|
||||
msgid "Probability (%)"
|
||||
msgstr ""
|
||||
msgstr "可能性(%)"
|
||||
|
||||
#. module: crm
|
||||
#: model:ir.actions.act_window,name:crm.crm_segmentation-act
|
||||
|
@ -1286,12 +1303,12 @@ msgstr ""
|
|||
#: model:ir.ui.menu,name:crm.menu_crm_segmentation-act
|
||||
#: model:ir.ui.menu,name:crm.next_id_53
|
||||
msgid "Segmentations"
|
||||
msgstr ""
|
||||
msgstr "分割"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation.line,operator:0
|
||||
msgid "Mandatory / Optional"
|
||||
msgstr ""
|
||||
msgstr "不可省略的/可选择的"
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.segmentation.line,expr_name:0
|
||||
|
@ -1303,7 +1320,7 @@ msgstr "销售金额"
|
|||
msgid ""
|
||||
"The email address put in the 'Reply-To' of all emails sent by Open ERP about "
|
||||
"cases in this section"
|
||||
msgstr ""
|
||||
msgstr "被设定'回复至‘的电子邮件地址含在所有由系统发送的关于这分部案例的电子邮件中。"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
|
@ -1336,7 +1353,7 @@ msgstr "月"
|
|||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Conditions on Priority Range"
|
||||
msgstr ""
|
||||
msgstr "优先级范围条件"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.segmentation,name:0
|
||||
|
@ -1348,18 +1365,18 @@ msgstr "分类名称"
|
|||
msgid ""
|
||||
"If the partner has not purchased (or buied) during a period, decrease the "
|
||||
"state of mind by this factor. It's a multiplication"
|
||||
msgstr ""
|
||||
msgstr "如果业务伙伴在指定周期内没有购物,则由此乘法系数减少满意度。"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu8:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu8_option:0
|
||||
msgid "All "
|
||||
msgstr ""
|
||||
msgstr "全部 "
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "E-Mail Actions"
|
||||
msgstr ""
|
||||
msgstr "电子邮件动作"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
|
@ -1385,12 +1402,12 @@ msgstr "停止处理"
|
|||
#: selection:crm.case.section.menu,design_menu,menu8_option:0
|
||||
#: selection:crm.case.section.menu,design_menu,menu9_option:0
|
||||
msgid "List"
|
||||
msgstr ""
|
||||
msgstr "列表"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
msgid "Send Partner & Historize"
|
||||
msgstr ""
|
||||
msgstr "发送给业务伙伴并存档"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.log,user_id:0
|
||||
|
@ -1401,18 +1418,18 @@ msgstr "负责用户"
|
|||
#: model:ir.actions.act_window,name:crm.crm_case_history-act
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_history-act
|
||||
msgid "All Histories"
|
||||
msgstr ""
|
||||
msgstr "所有历史记录"
|
||||
|
||||
#. module: crm
|
||||
#: help:crm.case.section,allow_unlink:0
|
||||
msgid "Allows to delete non draft cases"
|
||||
msgstr ""
|
||||
msgstr "允许删除非草稿案例"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu4:0
|
||||
#: wizard_field:crm.case.section.menu,design_menu,menu4_option:0
|
||||
msgid "My Canceled "
|
||||
msgstr ""
|
||||
msgstr "我已取消的 "
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,email_last:0
|
||||
|
@ -1435,7 +1452,7 @@ msgid ""
|
|||
"Check if the category is limited to partners that match the segmentation "
|
||||
"criterions. If checked, remove the category from partners that doesn't match "
|
||||
"segmentation criterions"
|
||||
msgstr ""
|
||||
msgstr "如果分类仅限于业务伙伴匹配分割条件,请选中。如选中,将在分类中移去不匹配分割条件的业务伙伴。"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case,log_ids:0
|
||||
|
@ -1445,12 +1462,12 @@ msgstr "记录"
|
|||
#. module: crm
|
||||
#: wizard_field:crm.case.section.menu,init,view_form:0
|
||||
msgid "Form View"
|
||||
msgstr ""
|
||||
msgstr "表单视图"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Conditions on Timing"
|
||||
msgstr ""
|
||||
msgstr "时间条件"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case:0
|
||||
|
@ -1516,12 +1533,12 @@ msgstr "业务伙伴"
|
|||
#. module: crm
|
||||
#: view:crm.case.rule:0
|
||||
msgid "Conditions on States"
|
||||
msgstr ""
|
||||
msgstr "状态条件"
|
||||
|
||||
#. module: crm
|
||||
#: wizard_view:crm.case.section.menu,design_menu:0
|
||||
msgid "Update The Proposed Menus To Be Created"
|
||||
msgstr ""
|
||||
msgstr "更新拟议创建的菜单"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.rule,trg_date_type:0
|
||||
|
|
|
@ -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: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-17 07:41+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-11-30 14:09+0000\n"
|
||||
"Last-Translator: Simon Vidmar <Unknown>\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: 2009-11-18 04:43+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: crm_configuration
|
||||
|
@ -40,7 +40,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Napačno ime modela v definiciji dejanja."
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_categ0_act_all3
|
||||
|
@ -51,7 +51,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: help:crm.menu.config_wizard,helpdesk:0
|
||||
msgid "Manages an Helpdesk service."
|
||||
msgstr ""
|
||||
msgstr "Upravlja s storitvijo pomoči uporabnikom"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: field:crm.case.stage,name:0
|
||||
|
@ -78,7 +78,7 @@ msgstr "Znesek"
|
|||
#: model:crm.case.stage,name:crm_configuration.stage_claim2
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_meet1
|
||||
msgid "Fixed"
|
||||
msgstr ""
|
||||
msgstr "Popravljeno"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.categ,name:crm_configuration.categ_oppor5
|
||||
|
@ -95,7 +95,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: wizard_field:crm.case.meeting,init,duration:0
|
||||
msgid "Duration (Hours)"
|
||||
msgstr ""
|
||||
msgstr "Trajanje (v urah)"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -164,7 +164,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_all2
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ0_act_all2
|
||||
msgid "Open Bugs"
|
||||
msgstr ""
|
||||
msgstr "Odpre napake"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -189,7 +189,7 @@ msgstr "Stik"
|
|||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Next Interview"
|
||||
msgstr ""
|
||||
msgstr "Naslednji intervju"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:process.transition,name:crm_configuration.process_transition_opportunitymeeting0
|
||||
|
@ -212,7 +212,7 @@ msgstr ""
|
|||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ_phone_incoming2
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ_phone_outgoing2
|
||||
msgid "Planned Calls"
|
||||
msgstr ""
|
||||
msgstr "Načrtovani klici"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_helpdesk_act_all0
|
||||
|
@ -245,7 +245,7 @@ msgstr "Domov"
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_categ_phone_incoming1
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ_phone_incoming1
|
||||
msgid "New Incoming Call"
|
||||
msgstr ""
|
||||
msgstr "Novi prejeti klic"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -317,12 +317,12 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ_meet
|
||||
msgid "All Meetings"
|
||||
msgstr ""
|
||||
msgstr "Vsi sestanki"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.section,name:crm_configuration.section_support_help
|
||||
msgid "HelpDesk"
|
||||
msgstr ""
|
||||
msgstr "Pomoč uporabnikom"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_categ_phone_outgoing4
|
||||
|
@ -474,7 +474,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_oppor
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_action_report_crm_case_oppor
|
||||
msgid "Opportunity"
|
||||
msgstr ""
|
||||
msgstr "Priložnost"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.category_lead7
|
||||
|
@ -515,7 +515,7 @@ msgstr "Popravki"
|
|||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Add Last Mail for Replying"
|
||||
msgstr ""
|
||||
msgstr "Dodaj zadnje sporočilo v odgovor"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -528,7 +528,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: field:crm.menu.config_wizard,document_ics:0
|
||||
msgid "Shared Calendar"
|
||||
msgstr ""
|
||||
msgstr "Deljeni koledar"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -565,7 +565,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_fund_my1
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_category_act_fund_my1
|
||||
msgid "My Funds"
|
||||
msgstr ""
|
||||
msgstr "Moja sredstva"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: field:crm.case,partner_mobile:0
|
||||
|
@ -784,7 +784,7 @@ msgstr ""
|
|||
#: view:crm.case:0
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_fund1
|
||||
msgid "Funds"
|
||||
msgstr ""
|
||||
msgstr "Sredstva"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.stage,name:crm_configuration.stage5
|
||||
|
@ -885,7 +885,7 @@ msgstr "Drugo"
|
|||
#. module: crm_configuration
|
||||
#: help:crm.menu.config_wizard,bugs:0
|
||||
msgid "Used by companies to track bugs and support requests on softwares"
|
||||
msgstr ""
|
||||
msgstr "Uporabljajo programerska podjetja za sledenje napakam in zahtevkom"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.category_lead2
|
||||
|
@ -950,7 +950,7 @@ msgstr ""
|
|||
#: field:crm.menu.config_wizard,bugs:0
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_bug_track
|
||||
msgid "Bug Tracking"
|
||||
msgstr ""
|
||||
msgstr "Sledenje napakam"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -996,7 +996,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_hr
|
||||
msgid "Human Resources"
|
||||
msgstr ""
|
||||
msgstr "Človeški viri"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.category_job1
|
||||
|
@ -1030,7 +1030,7 @@ msgstr "Vhodno"
|
|||
#. module: crm_configuration
|
||||
#: constraint:crm.case.section:0
|
||||
msgid "Error ! You cannot create recursive sections."
|
||||
msgstr ""
|
||||
msgstr "Napaka! Ne morete oblikovati rekurzivnih oddelkov."
|
||||
|
||||
#. module: crm_configuration
|
||||
#: help:crm.menu.config_wizard,document_ics:0
|
||||
|
@ -1082,7 +1082,7 @@ msgstr ""
|
|||
#: field:report.crm.case.section.categ2,nbr:0
|
||||
#: field:report.crm.case.section.stage,nbr:0
|
||||
msgid "# of Cases"
|
||||
msgstr ""
|
||||
msgstr "# primerov"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: field:report.crm.case.section.categ2,amount_revenue:0
|
||||
|
@ -1099,7 +1099,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_my0
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ0_act_my0
|
||||
msgid "My Bugs"
|
||||
msgstr ""
|
||||
msgstr "Moji napake"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -1294,7 +1294,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.categ2_fund3
|
||||
msgid "Credit Card"
|
||||
msgstr ""
|
||||
msgstr "Kreditna kartica"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -1321,7 +1321,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: field:crm.case,note:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
msgstr "Opomba"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: field:report.crm.case.section.categ.categ2,delay_close:0
|
||||
|
@ -1337,7 +1337,7 @@ msgstr ""
|
|||
#: selection:report.crm.case.section.categ2,state:0
|
||||
#: selection:report.crm.case.section.stage,state:0
|
||||
msgid "Closed"
|
||||
msgstr ""
|
||||
msgstr "Zaprto"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_all4
|
||||
|
@ -1374,7 +1374,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_categ_phone0
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_phone
|
||||
msgid "Phone Calls"
|
||||
msgstr ""
|
||||
msgstr "Telefonski klici"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -1390,12 +1390,12 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: field:crm.case,partner_phone:0
|
||||
msgid "Phone"
|
||||
msgstr ""
|
||||
msgstr "Telefon"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.categ2_fund2
|
||||
msgid "Cheque"
|
||||
msgstr ""
|
||||
msgstr "Ček"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:process.node,note:crm_configuration.process_node_opportunities0
|
||||
|
@ -1415,7 +1415,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_claim1
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_claims
|
||||
msgid "Claims"
|
||||
msgstr ""
|
||||
msgstr "Zahtevki"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.model,name:crm_configuration.model_crm_case_category2
|
||||
|
@ -1436,32 +1436,32 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_presale
|
||||
msgid "Sales"
|
||||
msgstr ""
|
||||
msgstr "Prodaja"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
msgstr "Splošno"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_lead2
|
||||
msgid "Assigned"
|
||||
msgstr ""
|
||||
msgstr "Dodeljeno"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_lead5
|
||||
msgid "Recycled"
|
||||
msgstr ""
|
||||
msgstr "Recikliran"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
msgstr "Zaključeno"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Communication"
|
||||
msgstr ""
|
||||
msgstr "Sporočanje"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_oppor11
|
||||
|
@ -1476,7 +1476,7 @@ msgstr ""
|
|||
#: selection:report.crm.case.section.categ2,state:0
|
||||
#: selection:report.crm.case.section.stage,state:0
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "Odpri"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: constraint:ir.model:0
|
||||
|
@ -1488,12 +1488,12 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: field:crm.menu.config_wizard,helpdesk:0
|
||||
msgid "Helpdesk"
|
||||
msgstr ""
|
||||
msgstr "Pomoč uporabnikom"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Responsible"
|
||||
msgstr ""
|
||||
msgstr "Odgovoren"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_leads_my1
|
||||
|
@ -1506,7 +1506,7 @@ msgstr ""
|
|||
#: model:crm.case.stage,name:crm_configuration.stage_claim4
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_meet3
|
||||
msgid "Invalid"
|
||||
msgstr ""
|
||||
msgstr "Neveljaveno"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: wizard_button:crm.case.meeting,init,order:0
|
||||
|
@ -1516,7 +1516,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: field:crm.menu.config_wizard,meeting:0
|
||||
msgid "Calendar of Meetings"
|
||||
msgstr ""
|
||||
msgstr "Koledar sestankov"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_oppor2
|
||||
|
@ -1601,7 +1601,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: field:crm.case,duration:0
|
||||
msgid "Duration"
|
||||
msgstr ""
|
||||
msgstr "Trajanje"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_f1
|
||||
|
@ -1622,7 +1622,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: field:crm.menu.config_wizard,jobs:0
|
||||
msgid "Jobs Hiring Process"
|
||||
msgstr ""
|
||||
msgstr "Proces zaposlovanja"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_categ0_act_all2
|
||||
|
@ -1639,7 +1639,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Deadlines"
|
||||
msgstr ""
|
||||
msgstr "Roki"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_action_report_crm_case_lead_categ
|
||||
|
@ -1672,7 +1672,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_lead3
|
||||
msgid "In Process"
|
||||
msgstr ""
|
||||
msgstr "V obdelavi"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_leads_unassigned
|
||||
|
@ -1712,7 +1712,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Relevant"
|
||||
msgstr ""
|
||||
msgstr "Pomembno"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -1765,17 +1765,17 @@ msgstr ""
|
|||
#: model:crm.case.categ,name:crm_configuration.categ_lead3
|
||||
#: model:crm.case.categ,name:crm_configuration.categ_oppor3
|
||||
msgid "Employee"
|
||||
msgstr ""
|
||||
msgstr "Zaposlenec"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_lead1
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
msgstr "Novo"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.category_lead3
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
msgstr "E-pošta"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -1799,7 +1799,7 @@ msgstr ""
|
|||
#: selection:report.crm.case.section.categ2,state:0
|
||||
#: selection:report.crm.case.section.stage,state:0
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
msgstr "Na čakanju"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -1838,7 +1838,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_phone1
|
||||
msgid "Planned"
|
||||
msgstr ""
|
||||
msgstr "Načrtovano"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.category_meet3
|
||||
|
@ -1874,7 +1874,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Communication history"
|
||||
msgstr ""
|
||||
msgstr "Zgodovina komunikacije"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -1887,7 +1887,7 @@ msgstr ""
|
|||
#: selection:report.crm.case.section.categ2,state:0
|
||||
#: selection:report.crm.case.section.stage,state:0
|
||||
msgid "Canceled"
|
||||
msgstr ""
|
||||
msgstr "Preklicano"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.category_oppor1
|
||||
|
@ -1898,17 +1898,17 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_fund_all1
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ0_act_fund_all1
|
||||
msgid "All Funds"
|
||||
msgstr ""
|
||||
msgstr "Vsa sredstva"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_category_act_meetings
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
msgstr "Koledar"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.categ,name:crm_configuration.categ_job1
|
||||
msgid "Salesman"
|
||||
msgstr ""
|
||||
msgstr "Prodajalec"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_oppor6
|
||||
|
@ -1937,7 +1937,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_categ_phone_outgoing0
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ_phone_outgoing0
|
||||
msgid "Outbound"
|
||||
msgstr ""
|
||||
msgstr "Izhodno"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.todo,note:crm_configuration.config_wizard_step_case_section_menu
|
||||
|
@ -1957,13 +1957,13 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: field:crm.case,category2_id:0
|
||||
msgid "Category Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv kategorije"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
#: model:process.node,name:crm_configuration.process_node_meeting0
|
||||
msgid "Meeting"
|
||||
msgstr ""
|
||||
msgstr "Sestanek"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_f2
|
||||
|
@ -1992,7 +1992,7 @@ msgstr ""
|
|||
#: field:report.crm.case.section.categ2,user_id:0
|
||||
#: field:report.crm.case.section.stage,user_id:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
msgstr "Uporabnik"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_action_report_crm_case_lead_categ_categ2
|
||||
|
@ -2039,7 +2039,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:crm.case.categ,name:crm_configuration.categ_fund3
|
||||
msgid "Healthcare"
|
||||
msgstr ""
|
||||
msgstr "Zdravstveno varstvo"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.stage,name:crm_configuration.stage1
|
||||
|
@ -2060,7 +2060,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.category_meet1
|
||||
msgid "Office"
|
||||
msgstr ""
|
||||
msgstr "Pisarna"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.model,name:crm_configuration.model_crm_case_stage
|
||||
|
@ -2109,18 +2109,18 @@ msgstr ""
|
|||
#: selection:report.crm.case.section.categ2,state:0
|
||||
#: selection:report.crm.case.section.stage,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
msgstr "Osnutek"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_categ_claim0
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ_claim0
|
||||
msgid "All Claims"
|
||||
msgstr ""
|
||||
msgstr "Vsi zahtevki"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
msgstr "Opis"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: view:crm.case:0
|
||||
|
@ -2130,7 +2130,7 @@ msgstr ""
|
|||
#. module: crm_configuration
|
||||
#: model:crm.case.section,name:crm_configuration.section_support0
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
msgstr "Zaposlitve"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: wizard_view:crm.case.meeting,init:0
|
||||
|
@ -2156,23 +2156,23 @@ msgstr ""
|
|||
#: model:crm.case.stage,name:crm_configuration.stage7
|
||||
#: model:crm.case.stage,name:crm_configuration.stage_meet5
|
||||
msgid "Future"
|
||||
msgstr ""
|
||||
msgstr "Prihodnost"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.actions.act_window,name:crm_configuration.crm_case_category_act_all8
|
||||
#: model:ir.ui.menu,name:crm_configuration.menu_crm_case_categ0_act_all8
|
||||
msgid "Old Bugs"
|
||||
msgstr ""
|
||||
msgstr "Stare napake"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:ir.model,name:crm_configuration.model_crm_menu_config_wizard
|
||||
msgid "crm.menu.config_wizard"
|
||||
msgstr ""
|
||||
msgstr "crm.menu.config_wizard"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: field:crm.case.stage,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
msgstr "Zaporedje"
|
||||
|
||||
#. module: crm_configuration
|
||||
#: model:crm.case.category2,name:crm_configuration.category_lead8
|
||||
|
|
|
@ -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: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-26 13:48+0000\n"
|
||||
"PO-Revision-Date: 2009-11-30 13:48+0000\n"
|
||||
"Last-Translator: Simon Vidmar <Unknown>\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: 2009-11-27 04:51+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: crm_profiling
|
||||
|
@ -33,7 +33,7 @@ msgstr "Vprašanje"
|
|||
#. module: crm_profiling
|
||||
#: wizard_button:open_questionnaire,init,open:0
|
||||
msgid "Open Questionnaire"
|
||||
msgstr ""
|
||||
msgstr "Odpri vprašalnik"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,child_ids:0
|
||||
|
|
|
@ -7,20 +7,20 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-16 15:38+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:39+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 04:53+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: delivery
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名必须以“x_”开始且不能包含任何特殊字符!"
|
||||
|
||||
#. module: delivery
|
||||
#: selection:delivery.grid.line,operator:0
|
||||
|
@ -30,7 +30,7 @@ msgstr ">="
|
|||
#. module: delivery
|
||||
#: view:res.partner:0
|
||||
msgid "Sales & Purchases"
|
||||
msgstr ""
|
||||
msgstr "销售与采购"
|
||||
|
||||
#. module: delivery
|
||||
#: view:delivery.grid:0
|
||||
|
@ -40,17 +40,17 @@ msgstr "目的地"
|
|||
#. module: delivery
|
||||
#: model:product.template,name:delivery.delivery_product_product_template
|
||||
msgid "Delivery by Poste"
|
||||
msgstr ""
|
||||
msgstr "由邮政运输"
|
||||
|
||||
#. module: delivery
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图结构"
|
||||
|
||||
#. module: delivery
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You can not create recursive associated members."
|
||||
msgstr ""
|
||||
msgstr "错误!您不能创建循环的关联成员。"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,state_ids:0
|
||||
|
@ -60,7 +60,7 @@ msgstr "状态"
|
|||
#. module: delivery
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: delivery
|
||||
#: help:res.partner,property_delivery_carrier:0
|
||||
|
@ -91,13 +91,13 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:delivery.action_delivery_grid_form
|
||||
#: model:ir.ui.menu,name:delivery.menu_action_delivery_grid_form
|
||||
msgid "Delivery Pricelist"
|
||||
msgstr ""
|
||||
msgstr "货运价格表"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.act_window,name:delivery.action_picking_tree5
|
||||
#: model:ir.ui.menu,name:delivery.menu_action_picking_tree5
|
||||
msgid "Generate Draft Invoices On Receptions"
|
||||
msgstr ""
|
||||
msgstr "收货时产生发票草稿"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_delivery_grid_line
|
||||
|
@ -122,7 +122,7 @@ msgstr ""
|
|||
#. module: delivery
|
||||
#: view:res.partner:0
|
||||
msgid "Deliveries Properties"
|
||||
msgstr ""
|
||||
msgstr "运输属性"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.carrier,active:0
|
||||
|
@ -164,7 +164,7 @@ msgstr "货运公司"
|
|||
#. module: delivery
|
||||
#: field:delivery.grid.line,standard_price:0
|
||||
msgid "Cost Price"
|
||||
msgstr ""
|
||||
msgstr "成本价"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,name:0
|
||||
|
@ -174,7 +174,7 @@ msgstr "名称"
|
|||
#. module: delivery
|
||||
#: constraint:product.template:0
|
||||
msgid "Error: UOS must be in a different category than the UOM"
|
||||
msgstr ""
|
||||
msgstr "错误:销售单位必须和计量单位在不同的分类。"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,country_ids:0
|
||||
|
@ -185,7 +185,7 @@ msgstr "国家"
|
|||
#: constraint:product.template:0
|
||||
msgid ""
|
||||
"Error: The default UOM and the purchase UOM must be in the same category."
|
||||
msgstr ""
|
||||
msgstr "错误:默认计量单位和采购计量单位必须在同一分类中。"
|
||||
|
||||
#. module: delivery
|
||||
#: view:sale.order:0
|
||||
|
@ -231,7 +231,7 @@ msgstr "最大值"
|
|||
#. module: delivery
|
||||
#: wizard_button:delivery.sale.order,init,delivery:0
|
||||
msgid "Add Delivery Costs"
|
||||
msgstr ""
|
||||
msgstr "添加运输费用"
|
||||
|
||||
#. module: delivery
|
||||
#: wizard_field:delivery.sale.order,init,carrier_id:0
|
||||
|
@ -244,7 +244,7 @@ msgstr "运输方式"
|
|||
#. module: delivery
|
||||
#: field:sale.order,id:0
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
msgstr "编号"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,operator:0
|
||||
|
@ -276,7 +276,7 @@ msgstr "序号"
|
|||
#. module: delivery
|
||||
#: field:delivery.carrier,partner_id:0
|
||||
msgid "Carrier Partner"
|
||||
msgstr ""
|
||||
msgstr "承运业务伙伴"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.module.module,description:delivery.module_meta_information
|
||||
|
@ -306,17 +306,17 @@ msgstr ""
|
|||
#. module: delivery
|
||||
#: model:ir.actions.wizard,name:delivery.wizard_deliver_line_add
|
||||
msgid "Delivery Costs"
|
||||
msgstr ""
|
||||
msgstr "运输成本"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,list_price:0
|
||||
msgid "Sale Price"
|
||||
msgstr ""
|
||||
msgstr "售价"
|
||||
|
||||
#. module: delivery
|
||||
#: constraint:product.product:0
|
||||
msgid "Error: Invalid ean code"
|
||||
msgstr ""
|
||||
msgstr "错误:无效的条码"
|
||||
|
||||
#. module: delivery
|
||||
#: view:delivery.grid:0
|
||||
|
@ -343,7 +343,7 @@ msgstr "价格"
|
|||
#. module: delivery
|
||||
#: constraint:res.partner:0
|
||||
msgid "The VAT doesn't seem to be correct."
|
||||
msgstr ""
|
||||
msgstr "增值税似乎不正确。"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,price_type:0
|
||||
|
|
|
@ -141,8 +141,8 @@ class abstracted_fs:
|
|||
# Ok
|
||||
def db_list(self):
|
||||
#return pooler.pool_dic.keys()
|
||||
s = netsvc.LocalService('db')
|
||||
result = s.list()
|
||||
s = netsvc.ExportService.getService('db')
|
||||
result = s.exp_list()
|
||||
self.db_name_list = []
|
||||
for db_name in result:
|
||||
db, cr = None, None
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: document
|
||||
|
|
|
@ -7,263 +7,263 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-16 15:42+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 14:25+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 05:18+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,create_date:0
|
||||
msgid "Date Created"
|
||||
msgstr ""
|
||||
msgstr "创建时间"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,ressource_id:0
|
||||
msgid "Resource ID"
|
||||
msgstr ""
|
||||
msgstr "资源标识符"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,include_name:0
|
||||
msgid "Include Record Name"
|
||||
msgstr ""
|
||||
msgstr "包含记录名称"
|
||||
|
||||
#. module: document
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名必须以“x_”开始且不能包含任何特殊字符!"
|
||||
|
||||
#. module: document
|
||||
#: field:ir.actions.report.xml,model_id:0
|
||||
msgid "Model Id"
|
||||
msgstr ""
|
||||
msgstr "模型标识符"
|
||||
|
||||
#. module: document
|
||||
#: constraint:document.directory:0
|
||||
msgid "Error! You can not create recursive Directories."
|
||||
msgstr ""
|
||||
msgstr "错误!您不能创建循环目录。"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.ui.menu,name:document.menu_document_configuration
|
||||
msgid "Document Configuration"
|
||||
msgstr ""
|
||||
msgstr "文档管理系统配置"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
msgstr "预览"
|
||||
|
||||
#. module: document
|
||||
#: field:ir.attachment,store_method:0
|
||||
msgid "Storing Method"
|
||||
msgstr ""
|
||||
msgstr "储存方法"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.action_config_auto_directory
|
||||
msgid "Auto Configure Directory"
|
||||
msgstr ""
|
||||
msgstr "自动配置目录"
|
||||
|
||||
#. module: document
|
||||
#: field:ir.attachment,file_size:0
|
||||
msgid "File Size"
|
||||
msgstr ""
|
||||
msgstr "文件大小"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory.content,include_name:0
|
||||
msgid ""
|
||||
"Check this field if you want that the name of the file start by the record "
|
||||
"name."
|
||||
msgstr ""
|
||||
msgstr "如果您想要文件名以记录名起头的话请选中该字段。"
|
||||
|
||||
#. module: document
|
||||
#: selection:document.directory,type:0
|
||||
msgid "Other Resources"
|
||||
msgstr ""
|
||||
msgstr "其它资源"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,ressource_parent_type_id:0
|
||||
msgid "Parent Model"
|
||||
msgstr ""
|
||||
msgstr "上级模型"
|
||||
|
||||
#. module: document
|
||||
#: view:document.configuration.wizard:0
|
||||
msgid "Document Management System."
|
||||
msgstr ""
|
||||
msgstr "文档管理系统"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Attachment"
|
||||
msgstr ""
|
||||
msgstr "附件"
|
||||
|
||||
#. module: document
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: document
|
||||
#: selection:document.directory,type:0
|
||||
msgid "Static Directory"
|
||||
msgstr ""
|
||||
msgstr "静态目录"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_document_directory_content_type
|
||||
msgid "Directory Content Type"
|
||||
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
|
||||
#: 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
|
||||
#: field:document.directory,type:0
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
msgstr "类型"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.act_window,name:document.action_document_directory_tree
|
||||
#: model:ir.ui.menu,name:document.menu_document_directories_tree
|
||||
msgid "Directorie's Structure"
|
||||
msgstr ""
|
||||
msgstr "目录结构"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,parent_id:0
|
||||
msgid "Parent Item"
|
||||
msgstr ""
|
||||
msgstr "上级条目"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "File Information"
|
||||
msgstr ""
|
||||
msgstr "文件信息"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,file_ids:0
|
||||
#: view:ir.attachment:0
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
msgstr "文件列表"
|
||||
|
||||
#. module: document
|
||||
#: field:ir.attachment,store_fname:0
|
||||
msgid "Stored Filename"
|
||||
msgstr ""
|
||||
msgstr "储存的文件名"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,write_uid:0
|
||||
#: field:ir.attachment,write_uid:0
|
||||
msgid "Last Modification User"
|
||||
msgstr ""
|
||||
msgstr "最近修改用户"
|
||||
|
||||
#. module: document
|
||||
#: view:document.configuration.wizard:0
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
msgstr "配置"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,ressource_tree:0
|
||||
msgid "Tree Structure"
|
||||
msgstr ""
|
||||
msgstr "树结构"
|
||||
|
||||
#. module: document
|
||||
#: field:ir.attachment,title:0
|
||||
msgid "Resource Title"
|
||||
msgstr ""
|
||||
msgstr "资源标题"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.todo,note:document.config_auto_directory
|
||||
msgid ""
|
||||
"This wizard will configure the URL of the server of the document management "
|
||||
"system."
|
||||
msgstr ""
|
||||
msgstr "本向导将配置文档管理系统服务器的 URL。"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_document_directory_content
|
||||
msgid "Directory Content"
|
||||
msgstr ""
|
||||
msgstr "目录内容"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory,ressource_parent_type_id:0
|
||||
msgid ""
|
||||
"If you put an object here, this directory template will appear bellow all of "
|
||||
"these objects. Don't put a parent directory if you select a parent model."
|
||||
msgstr ""
|
||||
msgstr "如果您在这填上对象则目录模板将作为这些对象的下级出现。如果您选择了一个上级模型的话不要填写上级目录。"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.ui.menu,name:document.menu_document
|
||||
msgid "Document Management"
|
||||
msgstr ""
|
||||
msgstr "文档管理"
|
||||
|
||||
#. module: document
|
||||
#: selection:ir.attachment,store_method:0
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
msgstr "链接"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Directory Type"
|
||||
msgstr ""
|
||||
msgstr "目录类型"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,group_ids:0
|
||||
#: field:ir.attachment,group_ids:0
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
msgstr "用户组"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,report_id:0
|
||||
msgid "Report"
|
||||
msgstr ""
|
||||
msgstr "报表"
|
||||
|
||||
#. module: document
|
||||
#: help:document.configuration.wizard,host:0
|
||||
msgid ""
|
||||
"Put here the server address or IP. Keep localhost if you don't know what to "
|
||||
"write."
|
||||
msgstr ""
|
||||
msgstr "在此输入服务器的地址或 IP。如果您不知道如何填写,请保留 localhost"
|
||||
|
||||
#. module: document
|
||||
#: view:document.configuration.wizard:0
|
||||
msgid ""
|
||||
"This wizard will automatically configure the document management system "
|
||||
"according to modules installed on your system."
|
||||
msgstr ""
|
||||
msgstr "本向导将依据您已安装的模块来自动配置文档管理系统。"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Data"
|
||||
msgstr ""
|
||||
msgstr "数据"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Notes"
|
||||
msgstr "注解"
|
||||
msgstr "备注"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
#: field:ir.attachment,index_content:0
|
||||
msgid "Indexed Content"
|
||||
msgstr ""
|
||||
msgstr "已索引内容"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Definition"
|
||||
msgstr ""
|
||||
msgstr "定义"
|
||||
|
||||
#. module: document
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图结构"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.module.module,description:document.module_meta_information
|
||||
|
@ -273,54 +273,58 @@ msgid ""
|
|||
" * User Authentication\n"
|
||||
" * Document Indexation\n"
|
||||
msgstr ""
|
||||
"这是完善的文档管理系统,其特性包括:\n"
|
||||
" * FTP 界面\n"
|
||||
" * 用户验证\n"
|
||||
" * 文档索引\n"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "名称"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content.type,code:0
|
||||
msgid "Extension"
|
||||
msgstr ""
|
||||
msgstr "扩展名"
|
||||
|
||||
#. module: document
|
||||
#: selection:ir.attachment,store_method:0
|
||||
msgid "Database"
|
||||
msgstr ""
|
||||
msgstr "数据库"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,content_ids:0
|
||||
msgid "Virtual Files"
|
||||
msgstr ""
|
||||
msgstr "虚拟文件"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
#: model:ir.ui.menu,name:document.menu_document_directories
|
||||
msgid "Directories"
|
||||
msgstr ""
|
||||
msgstr "目录列表"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Seq."
|
||||
msgstr ""
|
||||
msgstr "序号"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.module.module,shortdesc:document.module_meta_information
|
||||
msgid "Integrated Document Management System"
|
||||
msgstr ""
|
||||
msgstr "集成文档管理系统"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,directory_id:0
|
||||
#: field:ir.attachment,parent_id:0
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
msgstr "目录"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,user_id:0
|
||||
#: field:ir.attachment,user_id:0
|
||||
msgid "Owner"
|
||||
msgstr ""
|
||||
msgstr "所有者"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_document_configuration_wizard
|
||||
|
@ -330,141 +334,141 @@ msgstr ""
|
|||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Attached To"
|
||||
msgstr ""
|
||||
msgstr "附加到"
|
||||
|
||||
#. module: document
|
||||
#: selection:ir.attachment,store_method:0
|
||||
msgid "Filesystem"
|
||||
msgstr ""
|
||||
msgstr "文件系统"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,file_type:0
|
||||
#: field:document.directory.content.type,name:0
|
||||
#: field:ir.attachment,file_type:0
|
||||
msgid "Content Type"
|
||||
msgstr ""
|
||||
msgstr "内容类型"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
#: view:ir.attachment:0
|
||||
msgid "Security"
|
||||
msgstr ""
|
||||
msgstr "安全设置"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.ui.menu,name:document.menu_document_browse
|
||||
msgid "Browse Files Using FTP"
|
||||
msgstr ""
|
||||
msgstr "通过 FTP 浏览文件"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,ressource_type_id:0
|
||||
msgid "Directories Mapped to Objects"
|
||||
msgstr ""
|
||||
msgstr "目录映射到对象"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
msgstr "历史记录"
|
||||
|
||||
#. module: document
|
||||
#: help:document.directory,ressource_type_id:0
|
||||
msgid ""
|
||||
"Select an object here and Open ERP will create a mapping for each of these "
|
||||
"objects, using the given domain, when browsing through FTP."
|
||||
msgstr ""
|
||||
msgstr "在此选定一个对象,当您通过 FTP 浏览时系统将创建使用给定的域为这些对象创建映射。"
|
||||
|
||||
#. module: document
|
||||
#: view:ir.attachment:0
|
||||
msgid "Others Info"
|
||||
msgstr ""
|
||||
msgstr "其他信息"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,domain:0
|
||||
msgid "Domain"
|
||||
msgstr ""
|
||||
msgstr "域"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,write_date:0
|
||||
#: field:ir.attachment,write_date:0
|
||||
msgid "Date Modified"
|
||||
msgstr ""
|
||||
msgstr "修改时间"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,suffix:0
|
||||
msgid "Suffix"
|
||||
msgstr ""
|
||||
msgstr "后缀"
|
||||
|
||||
#. module: document
|
||||
#: field:document.configuration.wizard,host:0
|
||||
msgid "Server Address"
|
||||
msgstr ""
|
||||
msgstr "服务器地址"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.actions.url,name:document.action_document_browse
|
||||
msgid "Browse Files"
|
||||
msgstr ""
|
||||
msgstr "浏览文件"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,name:0
|
||||
msgid "Content Name"
|
||||
msgstr ""
|
||||
msgstr "内容名称"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.model,name:document.model_document_directory
|
||||
#: field:process.node,directory_id:0
|
||||
msgid "Document directory"
|
||||
msgstr ""
|
||||
msgstr "文档目录"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,create_uid:0
|
||||
msgid "Creator"
|
||||
msgstr ""
|
||||
msgstr "创建者"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Auto-Generated Files"
|
||||
msgstr ""
|
||||
msgstr "自动生成的文件"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
msgstr "序号"
|
||||
|
||||
#. module: document
|
||||
#: model:ir.ui.menu,name:document.menu_document_files
|
||||
msgid "Search a File"
|
||||
msgstr ""
|
||||
msgstr "搜索文件"
|
||||
|
||||
#. module: document
|
||||
#: view:document.configuration.wizard:0
|
||||
msgid "Auto Configure"
|
||||
msgstr ""
|
||||
msgstr "自动配置"
|
||||
|
||||
#. module: document
|
||||
#: view:document.configuration.wizard:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "取消"
|
||||
|
||||
#. module: document
|
||||
#: field:ir.attachment,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
msgstr "业务伙伴"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "PDF Report"
|
||||
msgstr ""
|
||||
msgstr "PDF 报表"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory.content,extension:0
|
||||
msgid "Document Type"
|
||||
msgstr ""
|
||||
msgstr "文档类型"
|
||||
|
||||
#. module: document
|
||||
#: field:document.directory,child_ids:0
|
||||
msgid "Children"
|
||||
msgstr ""
|
||||
msgstr "下级目录"
|
||||
|
||||
#. module: document
|
||||
#: view:document.directory:0
|
||||
msgid "Contents"
|
||||
msgstr ""
|
||||
msgstr "内容"
|
||||
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-10-08 08:10+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 18:35+0000\n"
|
||||
"Last-Translator: T Kortehisto <Unknown>\n"
|
||||
"Language-Team: Finnish <fi@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: 2009-11-17 05:17+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: document_ics
|
||||
|
@ -31,12 +31,12 @@ msgstr "tunnus"
|
|||
#. module: document_ics
|
||||
#: constraint:document.directory:0
|
||||
msgid "Error! You can not create recursive Directories."
|
||||
msgstr ""
|
||||
msgstr "Virhe! Et voi luoda rekursiivisia kansioita."
|
||||
|
||||
#. module: document_ics
|
||||
#: field:document.ics.crm.wizard,jobs:0
|
||||
msgid "Jobs Hiring Process"
|
||||
msgstr ""
|
||||
msgstr "Rekrytointiprosessi"
|
||||
|
||||
#. module: document_ics
|
||||
#: view:document.ics.crm.wizard:0
|
||||
|
@ -71,7 +71,7 @@ msgstr "Kokouskalenteri"
|
|||
#. module: document_ics
|
||||
#: model:crm.case.section,name:document_ics.section_meeting
|
||||
msgid "Shared Calendar Meetings"
|
||||
msgstr ""
|
||||
msgstr "Kalenterin jaetut tapaamiset"
|
||||
|
||||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
|
@ -81,12 +81,14 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Virheellinen mallin nimi toimenpiteen määrittelyssä."
|
||||
|
||||
#. module: document_ics
|
||||
#: help:document.ics.crm.wizard,bugs:0
|
||||
msgid "Used by companies to track bugs and support requests on softwares"
|
||||
msgstr ""
|
||||
"Yritykset käyttävät ohjelmointivirheiden ja ohjelmien tukipyyntöjen "
|
||||
"jäljittämiseen"
|
||||
|
||||
#. module: document_ics
|
||||
#: model:ir.actions.todo,note:document_ics.config_wizard_step_case_section_menu
|
||||
|
@ -106,11 +108,13 @@ msgid ""
|
|||
"Help you to organise the jobs hiring process: evaluation, meetings, email "
|
||||
"integration..."
|
||||
msgstr ""
|
||||
"Auttaa sinua organisoimaan rekrytoinnin: arvioinnit, tapaamiset, sähköposti-"
|
||||
"integraation jne."
|
||||
|
||||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
msgid "description"
|
||||
msgstr ""
|
||||
msgstr "kuvaus"
|
||||
|
||||
#. module: document_ics
|
||||
#: model:ir.actions.act_window,name:document_ics.action_view_document_ics_config_directories
|
||||
|
@ -126,27 +130,27 @@ msgstr ""
|
|||
#: help:document.ics.crm.wizard,fund:0
|
||||
msgid ""
|
||||
"This may help associations in their fund raising process and tracking."
|
||||
msgstr ""
|
||||
msgstr "Tämä saattaa auttaa yhteisöjä varainhankinnassa ja sen seurannassa."
|
||||
|
||||
#. module: document_ics
|
||||
#: help:document.ics.crm.wizard,helpdesk:0
|
||||
msgid "Manages an Helpdesk service."
|
||||
msgstr ""
|
||||
msgstr "Hallinnoi Helpdesk-palvelua."
|
||||
|
||||
#. module: document_ics
|
||||
#: field:document.ics.crm.wizard,fund:0
|
||||
msgid "Fund Raising Operations"
|
||||
msgstr ""
|
||||
msgstr "Varojenkeräystoiminnot"
|
||||
|
||||
#. module: document_ics
|
||||
#: field:document.directory.content,ics_object_id:0
|
||||
msgid "Object"
|
||||
msgstr ""
|
||||
msgstr "Objekti"
|
||||
|
||||
#. module: document_ics
|
||||
#: constraint:crm.case.section:0
|
||||
msgid "Error ! You cannot create recursive sections."
|
||||
msgstr ""
|
||||
msgstr "Virhe! Et voi luoda rekursiivisia osioita."
|
||||
|
||||
#. module: document_ics
|
||||
#: model:ir.module.module,shortdesc:document_ics.module_meta_information
|
||||
|
@ -156,27 +160,27 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
msgid "location"
|
||||
msgstr ""
|
||||
msgstr "sijainti"
|
||||
|
||||
#. module: document_ics
|
||||
#: view:document.directory:0
|
||||
msgid "ICS Calendar"
|
||||
msgstr ""
|
||||
msgstr "ICS-kalenteri"
|
||||
|
||||
#. module: document_ics
|
||||
#: field:document.directory.ics.fields,name:0
|
||||
msgid "ICS Value"
|
||||
msgstr ""
|
||||
msgstr "ICS-arvo"
|
||||
|
||||
#. module: document_ics
|
||||
#: model:ir.module.module,description:document_ics.module_meta_information
|
||||
msgid "Allows to synchronise calendars with others applications."
|
||||
msgstr ""
|
||||
msgstr "Sallii kalenterien synkronoinnin muiden sovellusten kanssa."
|
||||
|
||||
#. module: document_ics
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Virheellinen XML näkymäarkkitehtuurille!"
|
||||
|
||||
#. module: document_ics
|
||||
#: help:document.ics.crm.wizard,lead:0
|
||||
|
@ -188,17 +192,17 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: field:document.ics.crm.wizard,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "Nimi"
|
||||
|
||||
#. module: document_ics
|
||||
#: help:document.ics.crm.wizard,meeting:0
|
||||
msgid "Manages the calendar of meetings of the users."
|
||||
msgstr ""
|
||||
msgstr "Hallinnoi käyttäjien tapaamiskalenteria"
|
||||
|
||||
#. module: document_ics
|
||||
#: field:document.directory.content,ics_domain:0
|
||||
msgid "Domain"
|
||||
msgstr ""
|
||||
msgstr "Toimialue"
|
||||
|
||||
#. module: document_ics
|
||||
#: help:document.ics.crm.wizard,claims:0
|
||||
|
@ -210,7 +214,7 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
msgid "last-modified"
|
||||
msgstr ""
|
||||
msgstr "muokattu viimeksi"
|
||||
|
||||
#. module: document_ics
|
||||
#: view:document.directory:0
|
||||
|
@ -220,12 +224,12 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: view:crm.case:0
|
||||
msgid "Duration(In Hour)"
|
||||
msgstr ""
|
||||
msgstr "Kesto tunneissa"
|
||||
|
||||
#. module: document_ics
|
||||
#: field:document.ics.crm.wizard,document_ics:0
|
||||
msgid "Shared Calendar"
|
||||
msgstr ""
|
||||
msgstr "Jaettu kalenteri"
|
||||
|
||||
#. module: document_ics
|
||||
#: field:document.ics.crm.wizard,claims:0
|
||||
|
@ -247,12 +251,12 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: field:document.ics.crm.wizard,phonecall:0
|
||||
msgid "Phone Calls"
|
||||
msgstr ""
|
||||
msgstr "Puhelut"
|
||||
|
||||
#. module: document_ics
|
||||
#: field:document.ics.crm.wizard,bugs:0
|
||||
msgid "Bug Tracking"
|
||||
msgstr ""
|
||||
msgstr "Ohjelmointivirheiden jäljitys"
|
||||
|
||||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
|
@ -272,7 +276,7 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
msgid "created"
|
||||
msgstr ""
|
||||
msgstr "luotu"
|
||||
|
||||
#. module: document_ics
|
||||
#: field:crm.case,code:0
|
||||
|
@ -282,7 +286,7 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
msgid "summary"
|
||||
msgstr ""
|
||||
msgstr "yhteenveto"
|
||||
|
||||
#. module: document_ics
|
||||
#: model:ir.model,name:document_ics.model_document_ics_crm_wizard
|
||||
|
@ -292,7 +296,7 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
msgid "attendee"
|
||||
msgstr ""
|
||||
msgstr "osallistuja"
|
||||
|
||||
#. module: document_ics
|
||||
#: model:ir.model,name:document_ics.model_document_directory_ics_fields
|
||||
|
@ -312,7 +316,7 @@ msgstr ""
|
|||
#. module: document_ics
|
||||
#: field:document.ics.crm.wizard,opportunity:0
|
||||
msgid "Business Opportunities"
|
||||
msgstr ""
|
||||
msgstr "Liiketoimintamahdollisuudet"
|
||||
|
||||
#. module: document_ics
|
||||
#: selection:document.directory.ics.fields,name:0
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
Buffering HTTP Server
|
||||
Copyright (C) 1999 Christian Scholz (ruebe@aachen.heimat.de)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
"""
|
||||
|
||||
|
||||
from utils import VERSION, AUTHOR
|
||||
__version__ = VERSION
|
||||
__author__ = AUTHOR
|
||||
|
||||
from BaseHTTPServer import BaseHTTPRequestHandler
|
||||
import os
|
||||
class BufferedHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||
"""
|
||||
Buffering HTTP Request Handler
|
||||
|
||||
This class is an extension to the BaseHTTPRequestHandler
|
||||
class which buffers the whole output and sends it at once
|
||||
after the processing if the request is finished.
|
||||
|
||||
This makes it possible to work together with some clients
|
||||
which otherwise would break (e.g. cadaver)
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def _init_buffer(self):
|
||||
"""initialize the buffer.
|
||||
|
||||
If you override the handle() method remember to call
|
||||
this (see below)
|
||||
"""
|
||||
self.__buffer=""
|
||||
self.__outfp=os.tmpfile()
|
||||
|
||||
def _append(self,s):
|
||||
""" append a string to the buffer """
|
||||
self.__buffer=self.__buffer+s
|
||||
|
||||
def _flush(self):
|
||||
""" flush the buffer to wfile """
|
||||
self.wfile.write(self.__buffer)
|
||||
self.__outfp.write(self.__buffer)
|
||||
self.__outfp.flush()
|
||||
self.wfile.flush()
|
||||
self.__buffer=""
|
||||
|
||||
def handle(self):
|
||||
""" Handle a HTTP request """
|
||||
self._init_buffer()
|
||||
BaseHTTPRequestHandler.handle(self)
|
||||
self._flush()
|
||||
|
||||
def send_header(self, keyword, value):
|
||||
"""Send a MIME header."""
|
||||
if self.request_version != 'HTTP/0.9':
|
||||
self._append("%s: %s\r\n" % (keyword, value))
|
||||
|
||||
def end_headers(self):
|
||||
"""Send the blank line ending the MIME headers."""
|
||||
if self.request_version != 'HTTP/0.9':
|
||||
self._append("\r\n")
|
||||
|
||||
def send_response(self, code, message=None):
|
||||
self.log_request(code)
|
||||
|
||||
if message is None:
|
||||
if self.responses.has_key(code):
|
||||
message = self.responses[code][0]
|
||||
else:
|
||||
message = ''
|
||||
|
||||
if self.request_version != 'HTTP/0.9':
|
||||
self._append("%s %s %s\r\n" %
|
||||
(self.protocol_version, str(code), message))
|
||||
|
||||
self.send_header('Server', self.version_string())
|
||||
self.send_header('Connection', 'close')
|
||||
self.send_header('Date', self.date_time_string())
|
||||
|
||||
protocol_version="HTTP/1.1"
|
||||
|
|
@ -0,0 +1,379 @@
|
|||
"""
|
||||
Python WebDAV Server.
|
||||
Copyright (C) 1999 Christian Scholz (ruebe@aachen.heimat.de)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
This module builds on AuthServer by implementing the standard DAV
|
||||
methods.
|
||||
|
||||
Subclass this class and specify an IFACE_CLASS. See example.
|
||||
|
||||
"""
|
||||
|
||||
DEBUG=None
|
||||
|
||||
from utils import VERSION, AUTHOR
|
||||
__version__ = VERSION
|
||||
__author__ = AUTHOR
|
||||
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import socket
|
||||
import string
|
||||
import posixpath
|
||||
import base64
|
||||
import urlparse
|
||||
import urllib
|
||||
|
||||
from propfind import PROPFIND
|
||||
from delete import DELETE
|
||||
from davcopy import COPY
|
||||
from davmove import MOVE
|
||||
|
||||
from string import atoi,split
|
||||
from status import STATUS_CODES
|
||||
from errors import *
|
||||
|
||||
import BaseHTTPServer
|
||||
|
||||
class DAVRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||||
"""Simple DAV request handler with
|
||||
|
||||
- GET
|
||||
- HEAD
|
||||
- PUT
|
||||
- OPTIONS
|
||||
- PROPFIND
|
||||
- PROPPATCH
|
||||
- MKCOL
|
||||
|
||||
It uses the resource/collection classes for serving and
|
||||
storing content.
|
||||
|
||||
"""
|
||||
|
||||
server_version = "DAV/" + __version__
|
||||
protocol_version = 'HTTP/1.1'
|
||||
|
||||
### utility functions
|
||||
def _log(self, message):
|
||||
pass
|
||||
|
||||
def _append(self,s):
|
||||
""" write the string to wfile """
|
||||
self.wfile.write(s)
|
||||
|
||||
def send_body(self,DATA,code,msg,desc,ctype='application/octet-stream',headers=None):
|
||||
""" send a body in one part """
|
||||
|
||||
if not headers:
|
||||
headers = {}
|
||||
self.send_response(code,message=msg)
|
||||
self.send_header("Connection", "keep-alive")
|
||||
self.send_header("Accept-Ranges", "bytes")
|
||||
|
||||
for a,v in headers.items():
|
||||
self.send_header(a,v)
|
||||
|
||||
if DATA:
|
||||
self.send_header("Content-Length", str(len(DATA)))
|
||||
self.send_header("Content-Type", ctype)
|
||||
else:
|
||||
self.send_header("Content-Length", "0")
|
||||
|
||||
self.end_headers()
|
||||
if DATA:
|
||||
self._append(DATA)
|
||||
|
||||
def send_body_chunks(self,DATA,code,msg,desc,ctype='text/xml; encoding="utf-8"'):
|
||||
""" send a body in chunks """
|
||||
|
||||
self.responses[207]=(msg,desc)
|
||||
self.send_response(code,message=msg)
|
||||
self.send_header("Content-type", ctype)
|
||||
self.send_header("Connection", "keep-alive")
|
||||
self.send_header("Transfer-Encoding", "chunked")
|
||||
self.end_headers()
|
||||
self._append(hex(len(DATA))[2:]+"\r\n")
|
||||
self._append(DATA)
|
||||
self._append("\r\n")
|
||||
self._append("0\r\n")
|
||||
self._append("\r\n")
|
||||
|
||||
### HTTP METHODS
|
||||
|
||||
def do_OPTIONS(self):
|
||||
"""return the list of capabilities """
|
||||
self.send_response(200)
|
||||
self.send_header("Allow", "GET, HEAD, COPY, MOVE, POST, PUT, PROPFIND, PROPPATCH, OPTIONS, MKCOL, DELETE, TRACE")
|
||||
self.send_header("Content-Type", "text/plain")
|
||||
self.send_header("Connection", "keep-alive")
|
||||
self.send_header("DAV", "1")
|
||||
self.end_headers()
|
||||
|
||||
def do_PROPFIND(self):
|
||||
|
||||
dc=self.IFACE_CLASS
|
||||
# read the body
|
||||
body=None
|
||||
if self.headers.has_key("Content-Length"):
|
||||
l=self.headers['Content-Length']
|
||||
body=self.rfile.read(atoi(l))
|
||||
alt_body = """<?xml version="1.0" encoding="utf-8"?>
|
||||
<propfind xmlns="DAV:"><prop>
|
||||
<getcontentlength xmlns="DAV:"/>
|
||||
<getlastmodified xmlns="DAV:"/>
|
||||
<getcreationdate xmlns="DAV:"/>
|
||||
<checked-in xmlns="DAV:"/>
|
||||
<executable xmlns="http://apache.org/dav/props/"/>
|
||||
<displayname xmlns="DAV:"/>
|
||||
<resourcetype xmlns="DAV:"/>
|
||||
<checked-out xmlns="DAV:"/>
|
||||
</prop></propfind>"""
|
||||
#self.wfile.write(body)
|
||||
|
||||
# which Depth?
|
||||
if self.headers.has_key('Depth'):
|
||||
d=self.headers['Depth']
|
||||
else:
|
||||
d="infinity"
|
||||
|
||||
uri=self.geturi()
|
||||
pf=PROPFIND(uri,dc,d)
|
||||
|
||||
if body:
|
||||
pf.read_propfind(body)
|
||||
|
||||
try:
|
||||
DATA=pf.createResponse()
|
||||
DATA=DATA+"\n"
|
||||
# print "Data:", DATA
|
||||
except DAV_NotFound,(ec,dd):
|
||||
return self.send_notFound(dd, uri)
|
||||
except DAV_Error, (ec,dd):
|
||||
return self.send_error(ec,dd)
|
||||
|
||||
self.send_body_chunks(DATA,207,"Multi-Status","Multiple responses")
|
||||
|
||||
def geturi(self):
|
||||
buri = self.IFACE_CLASS.baseuri
|
||||
if buri[-1] == '/':
|
||||
return urllib.unquote(buri[:-1]+self.path)
|
||||
else:
|
||||
return urllib.unquote(buri+self.path)
|
||||
|
||||
def do_GET(self):
|
||||
"""Serve a GET request."""
|
||||
dc=self.IFACE_CLASS
|
||||
uri=self.geturi()
|
||||
|
||||
# get the last modified date
|
||||
try:
|
||||
lm=dc.get_prop(uri,"DAV:","getlastmodified")
|
||||
except:
|
||||
lm="Sun, 01 Dec 2014 00:00:00 GMT" # dummy!
|
||||
headers={"Last-Modified":lm , "Connection": "keep-alive"}
|
||||
|
||||
# get the content type
|
||||
try:
|
||||
ct=dc.get_prop(uri,"DAV:","getcontenttype")
|
||||
except:
|
||||
ct="application/octet-stream"
|
||||
|
||||
# get the data
|
||||
try:
|
||||
data=dc.get_data(uri)
|
||||
except DAV_Error, (ec,dd):
|
||||
self.send_status(ec)
|
||||
return
|
||||
|
||||
# send the data
|
||||
self.send_body(data,200,"OK","OK",ct,headers)
|
||||
|
||||
def do_HEAD(self):
|
||||
""" Send a HEAD response """
|
||||
dc=self.IFACE_CLASS
|
||||
uri=self.geturi()
|
||||
|
||||
# get the last modified date
|
||||
try:
|
||||
lm=dc.get_prop(uri,"DAV:","getlastmodified")
|
||||
except:
|
||||
lm="Sun, 01 Dec 2014 00:00:00 GMT" # dummy!
|
||||
|
||||
headers={"Last-Modified":lm, "Connection": "keep-alive"}
|
||||
|
||||
# get the content type
|
||||
try:
|
||||
ct=dc.get_prop(uri,"DAV:","getcontenttype")
|
||||
except:
|
||||
ct="application/octet-stream"
|
||||
|
||||
try:
|
||||
data=dc.get_data(uri)
|
||||
headers["Content-Length"]=str(len(data))
|
||||
except DAV_NotFound:
|
||||
self.send_body(None,404,"Not Found","")
|
||||
return
|
||||
|
||||
self.send_body(None,200,"OK","OK",ct,headers)
|
||||
|
||||
def do_POST(self):
|
||||
self.send_error(404,"File not found")
|
||||
|
||||
def do_MKCOL(self):
|
||||
""" create a new collection """
|
||||
|
||||
dc=self.IFACE_CLASS
|
||||
uri=self.geturi()
|
||||
try:
|
||||
res = dc.mkcol(uri)
|
||||
if res:
|
||||
self.send_body(None,201,"Created",'')
|
||||
else:
|
||||
self.send_body(None,415,"Cannot create",'')
|
||||
#self.send_header("Connection", "keep-alive")
|
||||
# Todo: some content, too
|
||||
except DAV_Error, (ec,dd):
|
||||
self.send_body(None,int(ec),dd,dd)
|
||||
|
||||
def do_DELETE(self):
|
||||
""" delete an resource """
|
||||
dc=self.IFACE_CLASS
|
||||
uri=self.geturi()
|
||||
dl=DELETE(uri,dc)
|
||||
if dc.is_collection(uri):
|
||||
res=dl.delcol()
|
||||
else:
|
||||
res=dl.delone()
|
||||
|
||||
if res:
|
||||
self.send_status(207,body=res)
|
||||
else:
|
||||
self.send_status(204)
|
||||
|
||||
def do_PUT(self):
|
||||
dc=self.IFACE_CLASS
|
||||
|
||||
# read the body
|
||||
body=None
|
||||
if self.headers.has_key("Content-Length"):
|
||||
l=self.headers['Content-Length']
|
||||
body=self.rfile.read(atoi(l))
|
||||
uri=self.geturi()
|
||||
|
||||
ct=None
|
||||
if self.headers.has_key("Content-Type"):
|
||||
ct=self.headers['Content-Type']
|
||||
try:
|
||||
dc.put(uri,body,ct)
|
||||
except DAV_Error, (ec,dd):
|
||||
self.send_status(ec)
|
||||
return
|
||||
self.send_status(201)
|
||||
|
||||
def do_COPY(self):
|
||||
""" copy one resource to another """
|
||||
try:
|
||||
self.copymove(COPY)
|
||||
except DAV_Error, (ec,dd):
|
||||
self.send_status(ec)
|
||||
|
||||
def do_MOVE(self):
|
||||
""" move one resource to another """
|
||||
try:
|
||||
self.copymove(MOVE)
|
||||
except DAV_Error, (ec,dd):
|
||||
self.send_status(ec)
|
||||
|
||||
def copymove(self,CLASS):
|
||||
""" common method for copying or moving objects """
|
||||
dc=self.IFACE_CLASS
|
||||
|
||||
# get the source URI
|
||||
source_uri=self.geturi()
|
||||
|
||||
# get the destination URI
|
||||
dest_uri=self.headers['Destination']
|
||||
dest_uri=urllib.unquote(dest_uri)
|
||||
|
||||
# Overwrite?
|
||||
overwrite=1
|
||||
result_code=204
|
||||
if self.headers.has_key("Overwrite"):
|
||||
if self.headers['Overwrite']=="F":
|
||||
overwrite=None
|
||||
result_code=201
|
||||
|
||||
# instanciate ACTION class
|
||||
cp=CLASS(dc,source_uri,dest_uri,overwrite)
|
||||
|
||||
# Depth?
|
||||
d="infinity"
|
||||
if self.headers.has_key("Depth"):
|
||||
d=self.headers['Depth']
|
||||
|
||||
if d!="0" and d!="infinity":
|
||||
self.send_status(400)
|
||||
return
|
||||
|
||||
if d=="0":
|
||||
res=cp.single_action()
|
||||
self.send_status(res)
|
||||
return
|
||||
|
||||
# now it only can be "infinity" but we nevertheless check for a collection
|
||||
if dc.is_collection(source_uri):
|
||||
try:
|
||||
res=cp.tree_action()
|
||||
except DAV_Error, (ec,dd):
|
||||
self.send_status(ec)
|
||||
return
|
||||
else:
|
||||
try:
|
||||
res=cp.single_action()
|
||||
except DAV_Error, (ec,dd):
|
||||
self.send_status(ec)
|
||||
return
|
||||
|
||||
if res:
|
||||
self.send_body_chunks(res,207,STATUS_CODES[207],STATUS_CODES[207],
|
||||
ctype='text/xml; charset="utf-8"')
|
||||
else:
|
||||
self.send_status(result_code)
|
||||
|
||||
def get_userinfo(self,user,pw):
|
||||
""" Dummy method which lets all users in """
|
||||
|
||||
return 1
|
||||
|
||||
def send_status(self,code=200,mediatype='text/xml; charset="utf-8"', \
|
||||
msg=None,body=None):
|
||||
|
||||
if not msg: msg=STATUS_CODES[code]
|
||||
self.send_body(body,code,STATUS_CODES[code],msg,mediatype)
|
||||
|
||||
def send_notFound(self,descr,uri):
|
||||
body = """<?xml version="1.0" encoding="utf-8" ?>
|
||||
<D:response xmlns:D="DAV:">
|
||||
<D:href>%s</D:href>
|
||||
<D:error/>
|
||||
<D:responsedescription>%s</D:responsedescription>
|
||||
</D:response>
|
||||
"""
|
||||
return self.send_status(404,descr, body=body % (uri,descr))
|
|
@ -0,0 +1,20 @@
|
|||
"""
|
||||
python davserver
|
||||
Copyright (C) 1999 Christian Scholz (ruebe@aachen.heimat.de)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
"""
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
"""
|
||||
|
||||
constants definition
|
||||
|
||||
|
||||
"""
|
||||
|
||||
# definition for resourcetype
|
||||
COLLECTION=1
|
||||
OBJECT=None
|
||||
DAV_PROPS=['creationdate', 'displayname', 'getcontentlanguage', 'getcontentlength', 'getcontenttype', 'getetag', 'getlastmodified', 'lockdiscovery', 'resourcetype', 'source', 'supportedlock']
|
||||
|
||||
|
||||
# Request classes in propfind
|
||||
|
||||
RT_ALLPROP=1
|
||||
RT_PROPNAME=2
|
||||
RT_PROP=3
|
|
@ -0,0 +1,218 @@
|
|||
"""
|
||||
|
||||
davcmd.py
|
||||
---------
|
||||
|
||||
containts commands like copy, move, delete for normal
|
||||
resources and collections
|
||||
|
||||
"""
|
||||
|
||||
from string import split,replace,joinfields
|
||||
import urlparse
|
||||
|
||||
from utils import create_treelist, is_prefix
|
||||
from errors import *
|
||||
|
||||
def deltree(dc,uri,exclude={}):
|
||||
""" delete a tree of resources
|
||||
|
||||
dc -- dataclass to use
|
||||
uri -- root uri to delete
|
||||
exclude -- an optional list of uri:error_code pairs which should not
|
||||
be deleted.
|
||||
|
||||
returns dict of uri:error_code tuples from which
|
||||
another method can create a multistatus xml element.
|
||||
|
||||
Also note that we only know Depth=infinity thus we don't have
|
||||
to test for it.
|
||||
|
||||
"""
|
||||
|
||||
tlist=create_treelist(dc,uri)
|
||||
result={}
|
||||
|
||||
for i in range(len(tlist),0,-1):
|
||||
problem_uris=result.keys()
|
||||
element=tlist[i-1]
|
||||
|
||||
# test here, if an element is a prefix of an uri which
|
||||
# generated an error before.
|
||||
# note that we walk here from childs to parents, thus
|
||||
# we cannot delete a parent if a child made a problem.
|
||||
# (see example in 8.6.2.1)
|
||||
ok=1
|
||||
for p in problem_uris:
|
||||
if is_prefix(element,p):
|
||||
ok=None
|
||||
break
|
||||
|
||||
if not ok: continue
|
||||
|
||||
# here we test for the exclude list which is the other way round!
|
||||
for p in exclude.keys():
|
||||
if is_prefix(p,element):
|
||||
ok=None
|
||||
break
|
||||
|
||||
if not ok: continue
|
||||
|
||||
# now delete stuff
|
||||
try:
|
||||
delone(dc,element)
|
||||
except DAV_Error, (ec,dd):
|
||||
result[element]=ec
|
||||
|
||||
return result
|
||||
|
||||
def delone(dc,uri):
|
||||
""" delete a single object """
|
||||
if dc.is_collection(uri):
|
||||
dc.rmcol(uri) # should be empty
|
||||
else:
|
||||
dc.rm(uri)
|
||||
|
||||
###
|
||||
### COPY
|
||||
###
|
||||
|
||||
# helper function
|
||||
|
||||
def copy(dc,src,dst):
|
||||
""" only copy the element
|
||||
|
||||
This is just a helper method factored out from copy and
|
||||
copytree. It will not handle the overwrite or depth header.
|
||||
|
||||
"""
|
||||
|
||||
# destination should have been deleted before
|
||||
if dc.exists(dst): raise DAV_Error, 412
|
||||
|
||||
# source should exist also
|
||||
if not dc.exists(src): raise DAV_NotFound
|
||||
|
||||
if dc.is_collection(src):
|
||||
dc.copycol(src,dst) # an exception will be passed thru
|
||||
else:
|
||||
dc.copy(src,dst) # an exception will be passed thru
|
||||
|
||||
|
||||
# the main functions
|
||||
|
||||
def copyone(dc,src,dst,overwrite=None):
|
||||
""" copy one resource to a new destination """
|
||||
|
||||
if overwrite and dc.exists(dst):
|
||||
delres=deltree(dc,dst)
|
||||
else:
|
||||
delres={}
|
||||
|
||||
# if we cannot delete everything, then do not copy!
|
||||
if delres: return delres
|
||||
|
||||
try:
|
||||
copy(dc,src,dst) # pass thru exceptions
|
||||
except DAV_Error, (ec,dd):
|
||||
return ec
|
||||
|
||||
def copytree(dc,src,dst,overwrite=None):
|
||||
""" copy a tree of resources to another location
|
||||
|
||||
dc -- dataclass to use
|
||||
src -- src uri from where to copy
|
||||
dst -- dst uri
|
||||
overwrite -- if 1 then delete dst uri before
|
||||
|
||||
returns dict of uri:error_code tuples from which
|
||||
another method can create a multistatus xml element.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
# first delete the destination resource
|
||||
if overwrite and dc.exists(dst):
|
||||
delres=deltree(dc,dst)
|
||||
else:
|
||||
delres={}
|
||||
|
||||
# if we cannot delete everything, then do not copy!
|
||||
if delres: return delres
|
||||
|
||||
# get the tree we have to copy
|
||||
tlist=create_treelist(dc,src)
|
||||
result={}
|
||||
|
||||
# prepare destination URIs (get the prefix)
|
||||
dpath=urlparse.urlparse(dst)[2]
|
||||
|
||||
for element in tlist:
|
||||
problem_uris=result.keys()
|
||||
|
||||
# now URIs get longer and longer thus we have
|
||||
# to test if we had a parent URI which we were not
|
||||
# able to copy in problem_uris which is the prefix
|
||||
# of the actual element. If it is, then we cannot
|
||||
# copy this as well but do not generate another error.
|
||||
ok=1
|
||||
for p in problem_uris:
|
||||
if is_prefix(p,element):
|
||||
ok=None
|
||||
break
|
||||
|
||||
if not ok: continue
|
||||
|
||||
# now create the destination URI which corresponds to
|
||||
# the actual source URI. -> actual_dst
|
||||
# ("subtract" the base src from the URI and prepend the
|
||||
# dst prefix to it.)
|
||||
esrc=replace(element,src,"")
|
||||
actual_dst=dpath+esrc
|
||||
|
||||
# now copy stuff
|
||||
try:
|
||||
copy(dc,element,actual_dst)
|
||||
except DAV_Error, (ec,dd):
|
||||
result[element]=ec
|
||||
|
||||
return result
|
||||
|
||||
|
||||
|
||||
###
|
||||
### MOVE
|
||||
###
|
||||
|
||||
|
||||
def moveone(dc,src,dst,overwrite=None):
|
||||
""" move a single resource
|
||||
|
||||
This is done by first copying it and then deleting
|
||||
the original.
|
||||
"""
|
||||
|
||||
# first copy it
|
||||
copyone(dc,src,dst,overwrite)
|
||||
|
||||
# then delete it
|
||||
dc.rm(src)
|
||||
|
||||
def movetree(dc,src,dst,overwrite=None):
|
||||
""" move a collection
|
||||
|
||||
This is done by first copying it and then deleting
|
||||
the original.
|
||||
|
||||
PROBLEM: if something did not copy then we have a problem
|
||||
when deleting as the original might get deleted!
|
||||
"""
|
||||
|
||||
# first copy it
|
||||
res=copytree(dc,src,dst,overwrite)
|
||||
|
||||
# then delete it
|
||||
res=deltree(dc,src,exclude=res)
|
||||
|
||||
return res
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
python davserver
|
||||
Copyright (C) 1999 Christian Scholz (ruebe@aachen.heimat.de)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
from xml.dom import ext
|
||||
from xml.dom.Document import Document
|
||||
|
||||
import sys
|
||||
import string
|
||||
import urlparse
|
||||
import urllib
|
||||
from StringIO import StringIO
|
||||
|
||||
import utils
|
||||
from constants import COLLECTION, OBJECT, DAV_PROPS, RT_ALLPROP, RT_PROPNAME, RT_PROP
|
||||
from errors import *
|
||||
from utils import create_treelist, quote_uri, gen_estring
|
||||
|
||||
class COPY:
|
||||
""" copy resources and eventually create multistatus responses
|
||||
|
||||
This module implements the COPY class which is responsible for
|
||||
copying resources. Usually the normal copy work is done in the
|
||||
interface class. This class only creates error messages if error
|
||||
occur.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self,dataclass,src_uri,dst_uri,overwrite):
|
||||
self.__dataclass=dataclass
|
||||
self.__src=src_uri
|
||||
self.__dst=dst_uri
|
||||
self.__overwrite=overwrite
|
||||
|
||||
|
||||
def single_action(self):
|
||||
""" copy a normal resources.
|
||||
|
||||
We try to copy it and return the result code.
|
||||
This is for Depth==0
|
||||
|
||||
"""
|
||||
|
||||
dc=self.__dataclass
|
||||
base=self.__src
|
||||
|
||||
### some basic tests
|
||||
# test if dest exists and overwrite is false
|
||||
if dc.exists(self.__dst) and not self.__overwrite: raise DAV_Error, 412
|
||||
# test if src and dst are the same
|
||||
# (we assume that both uris are on the same server!)
|
||||
ps=urlparse.urlparse(self.__src)[2]
|
||||
pd=urlparse.urlparse(self.__dst)[2]
|
||||
if ps==pd: raise DAV_Error, 403
|
||||
|
||||
return dc.copyone(self.__src,self.__dst,self.__overwrite)
|
||||
|
||||
#return copyone(dc,self.__src,self.__dst,self.__overwrite)
|
||||
|
||||
def tree_action(self):
|
||||
""" copy a tree of resources (a collection)
|
||||
|
||||
Here we return a multistatus xml element.
|
||||
|
||||
"""
|
||||
dc=self.__dataclass
|
||||
base=self.__src
|
||||
|
||||
### some basic tests
|
||||
# test if dest exists and overwrite is false
|
||||
if dc.exists(self.__dst) and not self.__overwrite: raise DAV_Error, 412
|
||||
# test if src and dst are the same
|
||||
# (we assume that both uris are on the same server!)
|
||||
ps=urlparse.urlparse(self.__src)[2]
|
||||
pd=urlparse.urlparse(self.__dst)[2]
|
||||
if ps==pd: raise DAV_Error, 403
|
||||
|
||||
|
||||
result=dc.copytree(self.__src,self.__dst,self.__overwrite)
|
||||
#result=copytree(dc,self.__src,self.__dst,self.__overwrite)
|
||||
|
||||
if not result: return None
|
||||
|
||||
###
|
||||
### create the multistatus XML element
|
||||
### (this is also the same as in delete.py.
|
||||
### we might make a common method out of it)
|
||||
###
|
||||
|
||||
doc = Document(None)
|
||||
ms=doc.createElement("D:multistatus")
|
||||
ms.setAttribute("xmlns:D","DAV:")
|
||||
doc.appendChild(ms)
|
||||
|
||||
for el,ec in result.items():
|
||||
re=doc.createElement("D:response")
|
||||
hr=doc.createElement("D:href")
|
||||
st=doc.createElement("D:status")
|
||||
huri=doc.createTextNode(quote_uri(el))
|
||||
t=doc.createTextNode(gen_estring(ec))
|
||||
st.appendChild(t)
|
||||
hr.appendChild(huri)
|
||||
re.appendChild(hr)
|
||||
re.appendChild(st)
|
||||
ms.appendChild(re)
|
||||
|
||||
sfile=StringIO()
|
||||
ext.PrettyPrint(doc,stream=sfile)
|
||||
s=sfile.getvalue()
|
||||
sfile.close()
|
||||
return s
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
python davserver
|
||||
Copyright (C) 1999 Christian Scholz (ruebe@aachen.heimat.de)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
import sys
|
||||
import string
|
||||
import urlparse
|
||||
import urllib
|
||||
from StringIO import StringIO
|
||||
|
||||
import utils
|
||||
from constants import COLLECTION, OBJECT, DAV_PROPS
|
||||
from constants import RT_ALLPROP, RT_PROPNAME, RT_PROP
|
||||
from errors import *
|
||||
from utils import create_treelist, quote_uri, gen_estring, make_xmlresponse
|
||||
from davcmd import moveone, movetree
|
||||
|
||||
class MOVE:
|
||||
""" move resources and eventually create multistatus responses
|
||||
|
||||
This module implements the MOVE class which is responsible for
|
||||
moving resources.
|
||||
|
||||
MOVE is implemented by a COPY followed by a DELETE of the old
|
||||
resource.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self,dataclass,src_uri,dst_uri,overwrite):
|
||||
self.__dataclass=dataclass
|
||||
self.__src=src_uri
|
||||
self.__dst=dst_uri
|
||||
self.__overwrite=overwrite
|
||||
|
||||
|
||||
def single_action(self):
|
||||
""" move a normal resources.
|
||||
|
||||
We try to move it and return the result code.
|
||||
This is for Depth==0
|
||||
|
||||
"""
|
||||
|
||||
dc=self.__dataclass
|
||||
base=self.__src
|
||||
|
||||
### some basic tests
|
||||
# test if dest exists and overwrite is false
|
||||
if dc.exists(self.__dst) and not self.__overwrite: raise DAV_Error, 412
|
||||
# test if src and dst are the same
|
||||
# (we assume that both uris are on the same server!)
|
||||
ps=urlparse.urlparse(self.__src)[2]
|
||||
pd=urlparse.urlparse(self.__dst)[2]
|
||||
if ps==pd: raise DAV_Error, 403
|
||||
|
||||
return dc.moveone(self.__src,self.__dst,self.__overwrite)
|
||||
|
||||
def tree_action(self):
|
||||
""" move a tree of resources (a collection)
|
||||
|
||||
Here we return a multistatus xml element.
|
||||
|
||||
"""
|
||||
dc=self.__dataclass
|
||||
base=self.__src
|
||||
|
||||
### some basic tests
|
||||
# test if dest exists and overwrite is false
|
||||
if dc.exists(self.__dst) and not self.__overwrite: raise DAV_Error, 412
|
||||
# test if src and dst are the same
|
||||
# (we assume that both uris are on the same server!)
|
||||
ps=urlparse.urlparse(self.__src)[2]
|
||||
pd=urlparse.urlparse(self.__dst)[2]
|
||||
if ps==pd: raise DAV_Error, 403
|
||||
|
||||
result=dc.movetree(self.__src,self.__dst,self.__overwrite)
|
||||
if not result: return None
|
||||
|
||||
# create the multistatus XML element
|
||||
return make_xmlresponse(result)
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
|
||||
python davserver
|
||||
Copyright (C) 1999 Christian Scholz (ruebe@aachen.heimat.de)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
"""
|
||||
import os
|
||||
import string
|
||||
import urllib
|
||||
from StringIO import StringIO
|
||||
|
||||
from status import STATUS_CODES
|
||||
from utils import gen_estring, quote_uri, make_xmlresponse
|
||||
from davcmd import deltree
|
||||
|
||||
class DELETE:
|
||||
|
||||
def __init__(self,uri,dataclass):
|
||||
self.__dataclass=dataclass
|
||||
self.__uri=uri
|
||||
|
||||
def delcol(self):
|
||||
""" delete a collection """
|
||||
|
||||
dc=self.__dataclass
|
||||
result=dc.deltree(self.__uri)
|
||||
|
||||
if not len(result.items()):
|
||||
return None # everything ok
|
||||
|
||||
# create the result element
|
||||
return make_xmlresponse(result)
|
||||
|
||||
def delone(self):
|
||||
""" delete a resource """
|
||||
|
||||
dc=self.__dataclass
|
||||
result=dc.delone(self.__uri)
|
||||
|
||||
if not result: return None
|
||||
if not len(result.items()):
|
||||
return None # everything ok
|
||||
|
||||
# create the result element
|
||||
return make_xmlresponse(result)
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env python
|
||||
"""
|
||||
|
||||
Exceptions for the DAVserver implementation
|
||||
|
||||
"""
|
||||
|
||||
class DAV_Error(Exception):
|
||||
""" in general we can have the following arguments:
|
||||
|
||||
1. the error code
|
||||
2. the error result element, e.g. a <multistatus> element
|
||||
"""
|
||||
|
||||
def __init__(self,*args):
|
||||
if len(args)==1:
|
||||
self.args=(args[0],"")
|
||||
else:
|
||||
self.args=args
|
||||
|
||||
class DAV_Secret(DAV_Error):
|
||||
""" the user is not allowed to know anything about it
|
||||
|
||||
returning this for a property value means to exclude it
|
||||
from the response xml element.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
DAV_Error.__init__(self,0)
|
||||
pass
|
||||
|
||||
class DAV_NotFound(DAV_Error):
|
||||
""" a requested property was not found for a resource """
|
||||
|
||||
def __init__(self,*args):
|
||||
if len(args):
|
||||
if isinstance(args[0],list):
|
||||
stre = "Path %s not found!"%('/'.join(args[0]))
|
||||
else:
|
||||
stre = args[0]
|
||||
DAV_Error.__init__(self,404,stre)
|
||||
else:
|
||||
DAV_Error.__init__(self,404)
|
||||
|
||||
pass
|
||||
|
||||
class DAV_Forbidden(DAV_Error):
|
||||
""" a method on a resource is not allowed """
|
||||
|
||||
def __init__(self,*args):
|
||||
if len(args):
|
||||
DAV_Error.__init__(self,403,args[0])
|
||||
else:
|
||||
DAV_Error.__init__(self,403)
|
||||
pass
|
||||
|
|
@ -0,0 +1,263 @@
|
|||
"""
|
||||
|
||||
basic interface class
|
||||
|
||||
use this for subclassing when writing your own interface
|
||||
class.
|
||||
|
||||
"""
|
||||
|
||||
from errors import *
|
||||
|
||||
import time
|
||||
from string import lower
|
||||
|
||||
class dav_interface:
|
||||
""" interface class for implementing DAV servers """
|
||||
|
||||
### defined properties (modify this but let the DAV stuff there!)
|
||||
### the format is namespace: [list of properties]
|
||||
|
||||
PROPS={"DAV:" : ('creationdate',
|
||||
'displayname',
|
||||
'getcontentlanguage',
|
||||
'getcontentlength',
|
||||
'getcontenttype',
|
||||
'getetag',
|
||||
'getlastmodified',
|
||||
'lockdiscovery',
|
||||
'resourcetype',
|
||||
'source',
|
||||
'supportedlock'),
|
||||
"NS2" : ("p1","p2")
|
||||
}
|
||||
|
||||
# here we define which methods handle which namespace
|
||||
# the first item is the namespace URI and the second one
|
||||
# the method prefix
|
||||
# e.g. for DAV:getcontenttype we call dav_getcontenttype()
|
||||
M_NS={"DAV:" : "_get_dav",
|
||||
"NS2" : "ns2" }
|
||||
|
||||
def get_propnames(self,uri):
|
||||
""" return the property names allowed for the given URI
|
||||
|
||||
In this method we simply return the above defined properties
|
||||
assuming that they are valid for any resource.
|
||||
You can override this in order to return a different set
|
||||
of property names for each resource.
|
||||
|
||||
"""
|
||||
return self.PROPS
|
||||
|
||||
def get_prop2(self,uri,ns,pname):
|
||||
""" return the value of a property
|
||||
"""
|
||||
if lower(ns)=="dav:": return self.get_dav(uri,pname)
|
||||
|
||||
raise DAV_NotFound
|
||||
|
||||
def get_prop(self,uri,ns,propname):
|
||||
""" return the value of a given property
|
||||
|
||||
uri -- uri of the object to get the property of
|
||||
ns -- namespace of the property
|
||||
pname -- name of the property
|
||||
"""
|
||||
if self.M_NS.has_key(ns):
|
||||
prefix=self.M_NS[ns]
|
||||
else:
|
||||
print "No namespace:",ns
|
||||
raise DAV_NotFound
|
||||
mname=prefix+"_"+propname
|
||||
if not hasattr(self,mname):
|
||||
raise DAV_NotFound
|
||||
|
||||
try:
|
||||
m=getattr(self,mname)
|
||||
r=m(uri)
|
||||
return r
|
||||
except AttributeError, e:
|
||||
print 'Property %s not supported' % propname
|
||||
print "Exception:", e
|
||||
raise DAV_NotFound
|
||||
|
||||
###
|
||||
### DATA methods (for GET and PUT)
|
||||
###
|
||||
|
||||
def get_data(self,uri):
|
||||
""" return the content of an object
|
||||
|
||||
return data or raise an exception
|
||||
|
||||
"""
|
||||
raise DAV_NotFound
|
||||
|
||||
def put(self,uri,data):
|
||||
""" write an object to the repository
|
||||
|
||||
return a result code or raise an exception
|
||||
"""
|
||||
|
||||
raise DAV_Forbidden
|
||||
|
||||
###
|
||||
### Methods for DAV properties
|
||||
###
|
||||
|
||||
def _get_dav_creationdate(self,uri):
|
||||
""" return the creationdate of a resource """
|
||||
d=self.get_creationdate(uri)
|
||||
# format it
|
||||
if isinstance(d, int) or isinstance(d, float):
|
||||
d = time.localtimetime(d)
|
||||
return time.strftime("%Y-%m-%dT%H:%M:%S%Z",d)
|
||||
|
||||
def _get_dav_getlastmodified(self,uri):
|
||||
""" return the last modified date of a resource """
|
||||
d=self.get_lastmodified(uri)
|
||||
if isinstance(d, int) or isinstance(d, float):
|
||||
d = time.localtime(d)
|
||||
# format it
|
||||
return time.asctime(d)
|
||||
|
||||
|
||||
###
|
||||
### OVERRIDE THESE!
|
||||
###
|
||||
|
||||
def get_creationdate(self,uri):
|
||||
""" return the creationdate of the resource """
|
||||
return time.time()
|
||||
|
||||
def get_lastmodified(self,uri):
|
||||
""" return the last modification date of the resource """
|
||||
return time.time()
|
||||
|
||||
|
||||
###
|
||||
### COPY MOVE DELETE
|
||||
###
|
||||
|
||||
### methods for deleting a resource
|
||||
|
||||
def rmcol(self,uri):
|
||||
""" delete a collection
|
||||
|
||||
This should not delete any children! This is automatically done
|
||||
before by the DELETE class in DAV/delete.py
|
||||
|
||||
return a success code or raise an exception
|
||||
|
||||
"""
|
||||
raise DAV_NotFound
|
||||
|
||||
def rm(self,uri):
|
||||
""" delete a single resource
|
||||
|
||||
return a success code or raise an exception
|
||||
|
||||
"""
|
||||
raise DAV_NotFound
|
||||
|
||||
"""
|
||||
|
||||
COPY/MOVE HANDLER
|
||||
|
||||
These handler are called when a COPY or MOVE method is invoked by
|
||||
a client. In the default implementation it works as follows:
|
||||
|
||||
- the davserver receives a COPY/MOVE method
|
||||
- the davcopy or davmove module will be loaded and the corresponding
|
||||
class will be initialized
|
||||
- this class parses the query and decides which method of the interface class
|
||||
to call:
|
||||
|
||||
copyone for a single resource to copy
|
||||
copytree for a tree to copy (collection)
|
||||
(the same goes for move of course).
|
||||
|
||||
- the interface class has now two options:
|
||||
1. to handle the action directly (e.g. cp or mv on filesystems)
|
||||
2. to let it handle via the copy/move methods in davcmd.
|
||||
|
||||
ad 1) The first approach can be used when we know that no error can
|
||||
happen inside a tree or when the action can exactly tell which
|
||||
element made which error. We have to collect these and return
|
||||
it in a dict of the form {uri: error_code, ...}
|
||||
|
||||
ad 2) The copytree/movetree/... methods of davcmd.py will do the recursion
|
||||
themselves and call for each resource the copy/move method of the
|
||||
interface class. Thus method will then only act on a single resource.
|
||||
(Thus a copycol on a normal unix filesystem actually only needs to do
|
||||
an mkdir as the content will be copied by the davcmd.py function.
|
||||
The davcmd.py method will also automatically collect all errors and
|
||||
return the dictionary described above.
|
||||
When you use 2) you also have to implement the copy() and copycol()
|
||||
methods in your interface class. See the example for details.
|
||||
|
||||
To decide which approach is the best you have to decide if your application
|
||||
is able to generate errors inside a tree. E.g. a function which completely
|
||||
fails on a tree if one of the tree's childs fail is not what we need. Then
|
||||
2) would be your way of doing it.
|
||||
Actually usually 2) is the better solution and should only be replaced by
|
||||
1) if you really need it.
|
||||
|
||||
The remaining question is if we should do the same for the DELETE method.
|
||||
|
||||
"""
|
||||
|
||||
### MOVE handlers
|
||||
|
||||
def moveone(self,src,dst,overwrite):
|
||||
""" move one resource with Depth=0 """
|
||||
return moveone(self,src,dst,overwrite)
|
||||
|
||||
def movetree(self,src,dst,overwrite):
|
||||
""" move a collection with Depth=infinity """
|
||||
return movetree(self,src,dst,overwrite)
|
||||
|
||||
### COPY handlers
|
||||
|
||||
def copyone(self,src,dst,overwrite):
|
||||
""" copy one resource with Depth=0 """
|
||||
return copyone(self,src,dst,overwrite)
|
||||
|
||||
def copytree(self,src,dst,overwrite):
|
||||
""" copy a collection with Depth=infinity """
|
||||
return copytree(self,src,dst,overwrite)
|
||||
|
||||
|
||||
### low level copy methods (you only need these for method 2)
|
||||
def copy(self,src,dst):
|
||||
""" copy a resource with depth==0
|
||||
|
||||
You don't need to bother about overwrite or not.
|
||||
This has been done already.
|
||||
|
||||
return a success code or raise an exception if something fails
|
||||
"""
|
||||
return 201
|
||||
|
||||
|
||||
def copycol(self,src,dst):
|
||||
""" copy a resource with depth==infinity
|
||||
|
||||
You don't need to bother about overwrite or not.
|
||||
This has been done already.
|
||||
|
||||
return a success code or raise an exception if something fails
|
||||
"""
|
||||
return 201
|
||||
|
||||
### some utility functions you need to implement
|
||||
|
||||
def exists(self,uri):
|
||||
""" return 1 or None depending on if a resource exists """
|
||||
return None # no
|
||||
|
||||
def is_collection(self,uri):
|
||||
""" return 1 or None depending on if a resource is a collection """
|
||||
return None # no
|
||||
|
|
@ -0,0 +1,372 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
python davserver
|
||||
Copyright (C) 1999 Christian Scholz (ruebe@aachen.heimat.de)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
"""
|
||||
|
||||
|
||||
from xml.dom import ext
|
||||
from xml.dom.Document import Document
|
||||
|
||||
import sys
|
||||
import string
|
||||
import urlparse
|
||||
import urllib
|
||||
from StringIO import StringIO
|
||||
|
||||
import utils
|
||||
from constants import COLLECTION, OBJECT, DAV_PROPS, RT_ALLPROP, RT_PROPNAME, RT_PROP
|
||||
from errors import *
|
||||
|
||||
def utf8str(st):
|
||||
if isinstance(st,unicode):
|
||||
return st.encode('utf8')
|
||||
else:
|
||||
return str(st)
|
||||
|
||||
class PROPFIND:
|
||||
""" parse a propfind xml element and extract props
|
||||
|
||||
It will set the following instance vars:
|
||||
|
||||
request_class : ALLPROP | PROPNAME | PROP
|
||||
proplist : list of properties
|
||||
nsmap : map of namespaces
|
||||
|
||||
The list of properties will contain tuples of the form
|
||||
(element name, ns_prefix, ns_uri)
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self,uri,dataclass,depth):
|
||||
self.request_type=None
|
||||
self.nsmap={}
|
||||
self.proplist={}
|
||||
self.default_ns=None
|
||||
self.__dataclass=dataclass
|
||||
self.__depth=str(depth)
|
||||
self.__uri=uri
|
||||
self.use_full_urls=True
|
||||
self.__has_body=None # did we parse a body?
|
||||
|
||||
def read_propfind(self,xml_doc):
|
||||
self.request_type,self.proplist,self.namespaces=utils.parse_propfind(xml_doc)
|
||||
|
||||
# a violation of the expected logic: client (korganizer) will ask for DAV:resourcetype
|
||||
# but we also have to return the http://groupdav.org/:resourcetype property!
|
||||
if self.proplist.has_key('DAV:') and 'resourcetype' in self.proplist['DAV:']:
|
||||
if not self.proplist.has_key('http://groupdav.org/'):
|
||||
self.proplist['http://groupdav.org/'] = []
|
||||
self.proplist['http://groupdav.org/'].append('resourcetype')
|
||||
if 'DAV:' in self.namespaces: #TMP
|
||||
self.namespaces.append('http://groupdav.org/')
|
||||
|
||||
def createResponse(self):
|
||||
""" create the multistatus response
|
||||
|
||||
This will be delegated to the specific method
|
||||
depending on which request (allprop, propname, prop)
|
||||
was found.
|
||||
|
||||
If we get a PROPNAME then we simply return the list with empty
|
||||
values which we get from the interface class
|
||||
|
||||
If we get an ALLPROP we first get the list of properties and then
|
||||
we do the same as with a PROP method.
|
||||
|
||||
If the uri doesn't exist, return an xml response with a 404 status
|
||||
|
||||
"""
|
||||
|
||||
if not self.__dataclass.exists(self.__uri):
|
||||
raise DAV_NotFound("Path %s doesn't exist" % self.__uri)
|
||||
|
||||
if self.request_type==RT_ALLPROP:
|
||||
return self.create_allprop()
|
||||
|
||||
if self.request_type==RT_PROPNAME:
|
||||
return self.create_propname()
|
||||
|
||||
if self.request_type==RT_PROP:
|
||||
return self.create_prop()
|
||||
|
||||
# no body means ALLPROP!
|
||||
return self.create_allprop()
|
||||
|
||||
def create_propname(self):
|
||||
""" create a multistatus response for the prop names """
|
||||
|
||||
dc=self.__dataclass
|
||||
# create the document generator
|
||||
doc = Document(None)
|
||||
ms=doc.createElement("D:multistatus")
|
||||
ms.setAttribute("xmlns:D","DAV:")
|
||||
doc.appendChild(ms)
|
||||
|
||||
if self.__depth=="0":
|
||||
pnames=dc.get_propnames(self.__uri)
|
||||
re=self.mk_propname_response(self.__uri,pnames,doc)
|
||||
ms.appendChild(re)
|
||||
|
||||
elif self.__depth=="1":
|
||||
pnames=dc.get_propnames(self.__uri)
|
||||
re=self.mk_propname_response(self.__uri,pnames,doc)
|
||||
ms.appendChild(re)
|
||||
|
||||
for newuri in dc.get_childs(self.__uri):
|
||||
pnames=dc.get_propnames(newuri)
|
||||
re=self.mk_propname_response(newuri,pnames,doc)
|
||||
ms.appendChild(re)
|
||||
# *** depth=="infinity"
|
||||
|
||||
sfile=StringIO()
|
||||
ext.PrettyPrint(doc,stream=sfile)
|
||||
s=sfile.getvalue()
|
||||
sfile.close()
|
||||
return s
|
||||
|
||||
def create_allprop(self):
|
||||
""" return a list of all properties """
|
||||
self.proplist={}
|
||||
self.namespaces=[]
|
||||
for ns,plist in self.__dataclass.get_propnames(self.__uri).items():
|
||||
self.proplist[ns]=plist
|
||||
self.namespaces.append(ns)
|
||||
|
||||
return self.create_prop()
|
||||
|
||||
def create_prop(self):
|
||||
""" handle a <prop> request
|
||||
|
||||
This will
|
||||
|
||||
1. set up the <multistatus>-Framework
|
||||
|
||||
2. read the property values for each URI
|
||||
(which is dependant on the Depth header)
|
||||
This is done by the get_propvalues() method.
|
||||
|
||||
3. For each URI call the append_result() method
|
||||
to append the actual <result>-Tag to the result
|
||||
document.
|
||||
|
||||
We differ between "good" properties, which have been
|
||||
assigned a value by the interface class and "bad"
|
||||
properties, which resulted in an error, either 404
|
||||
(Not Found) or 403 (Forbidden).
|
||||
|
||||
"""
|
||||
|
||||
|
||||
# create the document generator
|
||||
doc = Document(None)
|
||||
ms=doc.createElement("D:multistatus")
|
||||
ms.setAttribute("xmlns:D","DAV:")
|
||||
doc.appendChild(ms)
|
||||
|
||||
if self.__depth=="0":
|
||||
gp,bp=self.get_propvalues(self.__uri)
|
||||
res=self.mk_prop_response(self.__uri,gp,bp,doc)
|
||||
ms.appendChild(res)
|
||||
|
||||
elif self.__depth=="1":
|
||||
gp,bp=self.get_propvalues(self.__uri)
|
||||
res=self.mk_prop_response(self.__uri,gp,bp,doc)
|
||||
ms.appendChild(res)
|
||||
|
||||
try:
|
||||
for newuri in self.__dataclass.get_childs(self.__uri):
|
||||
gp,bp=self.get_propvalues(newuri)
|
||||
res=self.mk_prop_response(newuri,gp,bp,doc)
|
||||
ms.appendChild(res)
|
||||
except DAV_NotFound:
|
||||
# If no children, never mind.
|
||||
pass
|
||||
|
||||
sfile=StringIO()
|
||||
ext.PrettyPrint(doc,stream=sfile)
|
||||
s=sfile.getvalue()
|
||||
sfile.close()
|
||||
return s
|
||||
|
||||
|
||||
def mk_propname_response(self,uri,propnames,doc):
|
||||
""" make a new <prop> result element for a PROPNAME request
|
||||
|
||||
This will simply format the propnames list.
|
||||
propnames should have the format {NS1 : [prop1, prop2, ...], NS2: ...}
|
||||
|
||||
"""
|
||||
re=doc.createElement("D:response")
|
||||
|
||||
# write href information
|
||||
href=doc.createElement("D:href")
|
||||
if self.use_full_urls:
|
||||
huri=doc.createTextNode(uri)
|
||||
else:
|
||||
uparts=urlparse.urlparse(uri)
|
||||
fileloc=uparts[2]
|
||||
huri=doc.createTextNode(urllib.quote(fileloc.encode('utf8')))
|
||||
href.appendChild(huri)
|
||||
re.appendChild(href)
|
||||
|
||||
ps=doc.createElement("D:propstat")
|
||||
nsnum=0
|
||||
|
||||
for ns,plist in propnames.items():
|
||||
# write prop element
|
||||
pr=doc.createElement("D:prop")
|
||||
nsp="ns"+str(nsnum)
|
||||
pr.setAttribute("xmlns:"+nsp,ns)
|
||||
nsnum=nsnum+1
|
||||
|
||||
# write propertynames
|
||||
for p in plist:
|
||||
pe=doc.createElement(nsp+":"+p)
|
||||
pr.appendChild(pe)
|
||||
|
||||
ps.appendChild(pr)
|
||||
|
||||
re.appendChild(ps)
|
||||
|
||||
return re
|
||||
|
||||
def mk_prop_response(self,uri,good_props,bad_props,doc):
|
||||
""" make a new <prop> result element
|
||||
|
||||
We differ between the good props and the bad ones for
|
||||
each generating an extra <propstat>-Node (for each error
|
||||
one, that means).
|
||||
|
||||
"""
|
||||
re=doc.createElement("D:response")
|
||||
# append namespaces to response
|
||||
nsnum=0
|
||||
for nsname in self.namespaces:
|
||||
re.setAttribute("xmlns:ns"+str(nsnum),nsname)
|
||||
nsnum=nsnum+1
|
||||
|
||||
# write href information
|
||||
href=doc.createElement("D:href")
|
||||
if self.use_full_urls:
|
||||
huri=doc.createTextNode(uri)
|
||||
else:
|
||||
uparts=urlparse.urlparse(uri)
|
||||
fileloc=uparts[2]
|
||||
huri=doc.createTextNode(urllib.quote(fileloc.encode('utf8')))
|
||||
href.appendChild(huri)
|
||||
re.appendChild(href)
|
||||
|
||||
# write good properties
|
||||
if good_props and len(good_props.items()):
|
||||
ps=doc.createElement("D:propstat")
|
||||
|
||||
gp=doc.createElement("D:prop")
|
||||
for ns in good_props.keys():
|
||||
ns_prefix="ns"+str(self.namespaces.index(ns))+":"
|
||||
for p,v in good_props[ns].items():
|
||||
pe=doc.createElement(ns_prefix+str(p))
|
||||
if v == None:
|
||||
pass
|
||||
elif ns=='DAV:' and p=="resourcetype":
|
||||
if v == 1:
|
||||
ve=doc.createElement("D:collection")
|
||||
pe.appendChild(ve)
|
||||
elif isinstance(v,tuple) and v[1] == ns:
|
||||
ve=doc.createElement(ns_prefix+v[0])
|
||||
pe.appendChild(ve)
|
||||
else:
|
||||
ve=doc.createTextNode(utf8str(v))
|
||||
pe.appendChild(ve)
|
||||
|
||||
gp.appendChild(pe)
|
||||
if gp.hasChildNodes():
|
||||
re.appendChild(ps)
|
||||
ps.appendChild(gp)
|
||||
s=doc.createElement("D:status")
|
||||
t=doc.createTextNode("HTTP/1.1 200 OK")
|
||||
s.appendChild(t)
|
||||
ps.appendChild(s)
|
||||
re.appendChild(ps)
|
||||
|
||||
# now write the errors!
|
||||
if len(bad_props.items()):
|
||||
|
||||
# write a propstat for each error code
|
||||
for ecode in bad_props.keys():
|
||||
ps=doc.createElement("D:propstat")
|
||||
re.appendChild(ps)
|
||||
bp=doc.createElement("D:prop")
|
||||
ps.appendChild(bp)
|
||||
|
||||
for ns in bad_props[ecode].keys():
|
||||
ns_prefix="ns"+str(self.namespaces.index(ns))+":"
|
||||
|
||||
for p in bad_props[ecode][ns]:
|
||||
pe=doc.createElement(ns_prefix+str(p))
|
||||
bp.appendChild(pe)
|
||||
|
||||
s=doc.createElement("D:status")
|
||||
t=doc.createTextNode(utils.gen_estring(ecode))
|
||||
s.appendChild(t)
|
||||
ps.appendChild(s)
|
||||
re.appendChild(ps)
|
||||
|
||||
# return the new response element
|
||||
return re
|
||||
|
||||
def get_propvalues(self,uri):
|
||||
""" create lists of property values for an URI
|
||||
|
||||
We create two lists for an URI: the properties for
|
||||
which we found a value and the ones for which we
|
||||
only got an error, either because they haven't been
|
||||
found or the user is not allowed to read them.
|
||||
|
||||
"""
|
||||
good_props={}
|
||||
bad_props={}
|
||||
|
||||
for (ns,plist) in self.proplist.items():
|
||||
good_props[ns]={}
|
||||
bad_props={}
|
||||
ec = 0
|
||||
for prop in plist:
|
||||
try:
|
||||
ec = 0
|
||||
r=self.__dataclass.get_prop(uri,ns,prop)
|
||||
good_props[ns][prop]=r
|
||||
except DAV_Error, error_code:
|
||||
ec=error_code[0]
|
||||
|
||||
# ignore props with error_code if 0 (invisible)
|
||||
if ec==0: continue
|
||||
|
||||
if bad_props.has_key(ec):
|
||||
if bad_props[ec].has_key(ns):
|
||||
bad_props[ec][ns].append(prop)
|
||||
else:
|
||||
bad_props[ec][ns]=[prop]
|
||||
else:
|
||||
bad_props[ec]={ns:[prop]}
|
||||
|
||||
return good_props, bad_props
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
"""
|
||||
|
||||
status codes for DAV services
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
STATUS_CODES={
|
||||
102: "Processing",
|
||||
200: "Ok",
|
||||
201: "Created",
|
||||
204: "No Content",
|
||||
207: "Multi-Status",
|
||||
201: "Created",
|
||||
400: "Bad Request",
|
||||
403: "Forbidden",
|
||||
404: "Not Found",
|
||||
405: "Method Not Allowed",
|
||||
409: "Conflict",
|
||||
412: "Precondition failed",
|
||||
423: "Locked",
|
||||
415: "Unsupported Media Type",
|
||||
507: "Insufficient Storage",
|
||||
422: "Unprocessable Entity",
|
||||
423: "Locked",
|
||||
424: "Failed Dependency",
|
||||
502: "Bad Gateway",
|
||||
507: "Insufficient Storage",
|
||||
999: "Some error in Create Method please check the data of create method"
|
||||
}
|
|
@ -0,0 +1,160 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
|
||||
UTILITIES
|
||||
|
||||
- parse a propfind request body into a list of props
|
||||
|
||||
"""
|
||||
|
||||
from xml.dom import ext
|
||||
from xml.dom.Document import Document
|
||||
from xml.dom.ext.reader import PyExpat
|
||||
from xml.dom import Node
|
||||
from xml.dom import NodeIterator, NodeFilter
|
||||
|
||||
from string import lower, split, atoi, joinfields
|
||||
import urlparse
|
||||
from StringIO import StringIO
|
||||
|
||||
from constants import RT_ALLPROP, RT_PROPNAME, RT_PROP
|
||||
from status import STATUS_CODES
|
||||
|
||||
VERSION = '0.6'
|
||||
AUTHOR = 'Simon Pamies <s.pamies@banality.de>'
|
||||
|
||||
|
||||
def gen_estring(ecode):
|
||||
""" generate an error string from the given code """
|
||||
ec=atoi(str(ecode))
|
||||
if STATUS_CODES.has_key(ec):
|
||||
return "HTTP/1.1 %s %s" %(ec,STATUS_CODES[ec])
|
||||
else:
|
||||
return "HTTP/1.1 %s" %(ec)
|
||||
|
||||
def parse_propfind(xml_doc):
|
||||
""" parse an propfind xml file and return a list of props
|
||||
|
||||
returns:
|
||||
|
||||
request_type -- ALLPROP, PROPNAME, PROP
|
||||
proplist -- list of properties found
|
||||
namespaces -- list of namespaces found
|
||||
|
||||
"""
|
||||
doc = PyExpat.Reader().fromString(xml_doc)
|
||||
snit = doc.createNodeIterator(doc, NodeFilter.NodeFilter.SHOW_ELEMENT, None, None)
|
||||
|
||||
request_type=None
|
||||
props={}
|
||||
namespaces=[]
|
||||
|
||||
while 1:
|
||||
curr_elem = snit.nextNode()
|
||||
if not curr_elem: break
|
||||
ename=fname=lower(curr_elem.nodeName)
|
||||
if ":" in fname:
|
||||
ename=split(fname,":")[1]
|
||||
if ename=="prop": request_type=RT_PROP; continue
|
||||
if ename=="propfind": continue
|
||||
if ename=="allprop": request_type=RT_ALLPROP; continue
|
||||
if ename=="propname": request_type=RT_PROPNAME; continue
|
||||
|
||||
# rest should be names of attributes
|
||||
|
||||
ns = curr_elem.namespaceURI
|
||||
if props.has_key(ns):
|
||||
props[ns].append(ename)
|
||||
else:
|
||||
props[ns]=[ename]
|
||||
namespaces.append(ns)
|
||||
|
||||
return request_type,props,namespaces
|
||||
|
||||
|
||||
def create_treelist(dataclass,uri):
|
||||
""" create a list of resources out of a tree
|
||||
|
||||
This function is used for the COPY, MOVE and DELETE methods
|
||||
|
||||
uri - the root of the subtree to flatten
|
||||
|
||||
It will return the flattened tree as list
|
||||
|
||||
"""
|
||||
queue=[uri]
|
||||
list=[uri]
|
||||
while len(queue):
|
||||
element=queue[-1]
|
||||
if dataclass.is_collection(element):
|
||||
childs=dataclass.get_childs(element)
|
||||
else:
|
||||
childs=[]
|
||||
if len(childs):
|
||||
list=list+childs
|
||||
# update queue
|
||||
del queue[-1]
|
||||
if len(childs):
|
||||
queue=queue+childs
|
||||
return list
|
||||
|
||||
def is_prefix(uri1,uri2):
|
||||
""" returns 1 of uri1 is a prefix of uri2 """
|
||||
if uri2[:len(uri1)]==uri1:
|
||||
return 1
|
||||
else:
|
||||
return None
|
||||
|
||||
def quote_uri(uri):
|
||||
""" quote an URL but not the protocol part """
|
||||
import urlparse
|
||||
import urllib
|
||||
|
||||
up=urlparse.urlparse(uri)
|
||||
np=urllib.quote(up[2])
|
||||
return urlparse.urlunparse((up[0],up[1],np,up[3],up[4],up[5]))
|
||||
|
||||
def get_uriparentpath(uri):
|
||||
""" extract the uri path and remove the last element """
|
||||
up=urlparse.urlparse(uri)
|
||||
return joinfields(split(up[2],"/")[:-1],"/")
|
||||
|
||||
def get_urifilename(uri):
|
||||
""" extract the uri path and return the last element """
|
||||
up=urlparse.urlparse(uri)
|
||||
return split(up[2],"/")[-1]
|
||||
|
||||
def get_parenturi(uri):
|
||||
""" return the parent of the given resource"""
|
||||
up=urlparse.urlparse(uri)
|
||||
np=joinfields(split(up[2],"/")[:-1],"/")
|
||||
return urlparse.urlunparse((up[0],up[1],np,up[3],up[4],up[5]))
|
||||
|
||||
### XML utilities
|
||||
|
||||
def make_xmlresponse(result):
|
||||
""" construct a response from a dict of uri:error_code elements """
|
||||
doc = Document.Document(None)
|
||||
ms=doc.createElement("D:multistatus")
|
||||
ms.setAttribute("xmlns:D","DAV:")
|
||||
doc.appendChild(ms)
|
||||
|
||||
for el,ec in result.items():
|
||||
re=doc.createElement("D:response")
|
||||
hr=doc.createElement("D:href")
|
||||
st=doc.createElement("D:status")
|
||||
huri=doc.createTextNode(quote_uri(el))
|
||||
t=doc.createTextNode(gen_estring(ec))
|
||||
st.appendChild(t)
|
||||
hr.appendChild(huri)
|
||||
re.appendChild(hr)
|
||||
re.appendChild(st)
|
||||
ms.appendChild(re)
|
||||
|
||||
sfile=StringIO()
|
||||
ext.PrettyPrint(doc,stream=sfile)
|
||||
s=sfile.getvalue()
|
||||
sfile.close()
|
||||
return s
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2004 TINY SPRL. (http://tiny.be) All Rights Reserved.
|
||||
# Fabien Pinckaers <fp@tiny.Be>
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsability of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# garantees and support are strongly adviced to contract a Free Software
|
||||
# Service Company
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import webdav_server
|
|
@ -0,0 +1,47 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2004 TINY SPRL. (http://tiny.be), 2009 P. Christeas
|
||||
# All Rights Reserved.
|
||||
# Fabien Pinckaers <fp@tiny.Be>
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsability of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# garantees and support are strongly adviced to contract a Free Software
|
||||
# Service Company
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
{
|
||||
"name" : "WebDAV server for Document Management",
|
||||
"version" : "2.0",
|
||||
"author" : "Tiny",
|
||||
"category" : "Generic Modules/Others",
|
||||
"website": "http://www.openerp.com",
|
||||
"description": """ With this module, the WebDAV server for the documents is activated. You can then use any compatible browser to remotely see the attachments of OpenObject.
|
||||
|
||||
After installation, the webDAV server can be controlled by a [webdav] section in the server's config.
|
||||
""",
|
||||
"depends" : ["base", "document"],
|
||||
"init_xml" : [],
|
||||
"update_xml" : [],
|
||||
"demo_xml" : [],
|
||||
"active": False,
|
||||
"installable": True
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
import time
|
||||
import heapq
|
||||
|
||||
def memoize(maxsize):
|
||||
"""decorator to 'memoize' a function - caching its results"""
|
||||
def decorating_function(f):
|
||||
cache = {} # map from key to value
|
||||
heap = [] # list of keys, in LRU heap
|
||||
cursize = 0 # because len() is slow
|
||||
def wrapper(*args):
|
||||
key = repr(args)
|
||||
# performance crap
|
||||
_cache=cache
|
||||
_heap=heap
|
||||
_heappop = heapq.heappop
|
||||
_heappush = heapq.heappush
|
||||
_time = time.time
|
||||
_cursize = cursize
|
||||
_maxsize = maxsize
|
||||
if not _cache.has_key(key):
|
||||
if _cursize == _maxsize:
|
||||
# pop oldest element
|
||||
(_,oldkey) = _heappop(_heap)
|
||||
_cache.pop(oldkey)
|
||||
else:
|
||||
_cursize += 1
|
||||
# insert this element
|
||||
_cache[key] = f(*args)
|
||||
_heappush(_heap,(_time(),key))
|
||||
wrapper.misses += 1
|
||||
else:
|
||||
wrapper.hits += 1
|
||||
return cache[key]
|
||||
wrapper.__doc__ = f.__doc__
|
||||
wrapper.__name__ = f.__name__
|
||||
wrapper.hits = wrapper.misses = 0
|
||||
return wrapper
|
||||
return decorating_function
|
||||
|
|
@ -0,0 +1,653 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2004 TINY SPRL. (http://tiny.be) All Rights Reserved.
|
||||
# Fabien Pinckaers <fp@tiny.Be>
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsability of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# garantees and support are strongly adviced to contract a Free Software
|
||||
# Service Company
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import pooler
|
||||
|
||||
import base64
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
from string import joinfields, split, lower
|
||||
|
||||
from service import security
|
||||
|
||||
import netsvc
|
||||
import urlparse
|
||||
|
||||
from DAV.constants import COLLECTION, OBJECT
|
||||
from DAV.errors import *
|
||||
from DAV.iface import *
|
||||
import urllib
|
||||
|
||||
from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree
|
||||
|
||||
from cache import memoize
|
||||
|
||||
CACHE_SIZE=20000
|
||||
|
||||
#hack for urlparse: add webdav in the net protocols
|
||||
urlparse.uses_netloc.append('webdav')
|
||||
urlparse.uses_netloc.append('webdavs')
|
||||
|
||||
class tinydav_handler(dav_interface):
|
||||
"""
|
||||
This class models a Tiny ERP interface for the DAV server
|
||||
"""
|
||||
PROPS={'DAV:': dav_interface.PROPS['DAV:'], }
|
||||
|
||||
M_NS={ "DAV:" : dav_interface.M_NS['DAV:'], }
|
||||
|
||||
def __init__(self, parent, verbose=False):
|
||||
self.db_name = False
|
||||
self.directory_id=False
|
||||
self.db_name_list=[]
|
||||
self.parent = parent
|
||||
self.baseuri = parent.baseuri
|
||||
|
||||
def get_propnames(self,uri):
|
||||
props = self.PROPS
|
||||
self.parent.log_message('get propnames: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
if not dbname:
|
||||
cr.close()
|
||||
return props
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if node:
|
||||
props.update(node.get_dav_props(cr))
|
||||
cr.close()
|
||||
return props
|
||||
|
||||
def get_prop(self,uri,ns,propname):
|
||||
""" return the value of a given property
|
||||
|
||||
uri -- uri of the object to get the property of
|
||||
ns -- namespace of the property
|
||||
pname -- name of the property
|
||||
"""
|
||||
if self.M_NS.has_key(ns):
|
||||
return dav_interface.get_prop(self,uri,ns,propname)
|
||||
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
if not dbname:
|
||||
cr.close()
|
||||
raise DAV_NotFound
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if not node:
|
||||
cr.close()
|
||||
raise DAV_NotFound
|
||||
res = node.get_dav_eprop(cr,ns,propname)
|
||||
cr.close()
|
||||
return res
|
||||
|
||||
#
|
||||
# def get_db(self,uri):
|
||||
# names=self.uri2local(uri).split('/')
|
||||
# self.db_name=False
|
||||
# if len(names) > 1:
|
||||
# self.db_name=self.uri2local(uri).split('/')[1]
|
||||
# if self.db_name=='':
|
||||
# raise Exception,'Plese specify Database name in folder'
|
||||
# return self.db_name
|
||||
#
|
||||
|
||||
def later_get_db_from_path(self,path):
|
||||
return "aaa"
|
||||
|
||||
def urijoin(self,*ajoin):
|
||||
""" Return the base URI of this request, or even join it with the
|
||||
ajoin path elements
|
||||
"""
|
||||
return self.baseuri+ '/'.join(ajoin)
|
||||
|
||||
@memoize(4)
|
||||
def db_list(self):
|
||||
s = netsvc.LocalService('db')
|
||||
result = s.list()
|
||||
self.db_name_list=[]
|
||||
for db_name in result:
|
||||
db = pooler.get_db_only(db_name)
|
||||
cr = db.cursor()
|
||||
cr.execute("select id from ir_module_module where name = 'document' and state='installed' ")
|
||||
res=cr.fetchone()
|
||||
if res and len(res):
|
||||
self.db_name_list.append(db_name)
|
||||
cr.close()
|
||||
return self.db_name_list
|
||||
|
||||
def get_childs(self,uri):
|
||||
""" return the child objects as self.baseuris for the given URI """
|
||||
self.parent.log_message('get childs: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
|
||||
if not dbname:
|
||||
s = netsvc.LocalService('db')
|
||||
return map(lambda x: self.urijoin(x), self.db_list())
|
||||
result = []
|
||||
node = self.uri2object(cr,uid,pool, uri2[:])
|
||||
if not node:
|
||||
cr.close()
|
||||
raise DAV_NotFound(uri2)
|
||||
else:
|
||||
fp = node.full_path()
|
||||
if fp and len(fp):
|
||||
self.parent.log_message('childs: @%s' % fp)
|
||||
fp = '/'.join(fp)
|
||||
else:
|
||||
fp = None
|
||||
for d in node.children(cr):
|
||||
self.parent.log_message('child: %s' % d.path)
|
||||
if fp:
|
||||
result.append( self.urijoin(dbname,fp,d.path) )
|
||||
else:
|
||||
result.append( self.urijoin(dbname,d.path) )
|
||||
cr.close()
|
||||
return result
|
||||
|
||||
def uri2local(self, uri):
|
||||
uparts=urlparse.urlparse(uri)
|
||||
reluri=uparts[2]
|
||||
if reluri and reluri[-1]=="/":
|
||||
reluri=reluri[:-1]
|
||||
return reluri
|
||||
|
||||
#
|
||||
# pos: -1 to get the parent of the uri
|
||||
#
|
||||
def get_cr(self, uri):
|
||||
pdb = self.parent.auth_proxy.last_auth
|
||||
reluri = self.uri2local(uri)
|
||||
try:
|
||||
dbname = reluri.split('/')[2]
|
||||
except:
|
||||
dbname = False
|
||||
if not dbname:
|
||||
return None, None, None, False, None
|
||||
if not pdb and dbname:
|
||||
# if dbname was in our uri, we should have authenticated
|
||||
# against that.
|
||||
raise Exception("Programming error")
|
||||
assert pdb == dbname, " %s != %s" %(pdb, dbname)
|
||||
user, passwd, dbn2, uid = self.parent.auth_proxy.auth_creds[pdb]
|
||||
db,pool = pooler.get_db_and_pool(dbname)
|
||||
cr = db.cursor()
|
||||
uri2 = reluri.split('/')[3:]
|
||||
return cr, uid, pool, dbname, uri2
|
||||
|
||||
def uri2object(self, cr,uid, pool,uri):
|
||||
if not uid:
|
||||
return None
|
||||
return pool.get('document.directory').get_object(cr, uid, uri)
|
||||
|
||||
def get_data(self,uri):
|
||||
self.parent.log_message('GET: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
try:
|
||||
if not dbname:
|
||||
raise DAV_Error, 409
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if not node:
|
||||
raise DAV_NotFound(uri2)
|
||||
try:
|
||||
datas = node.get_data(cr)
|
||||
except TypeError,e:
|
||||
import traceback
|
||||
self.parent.log_error("GET typeError: %s", str(e))
|
||||
self.parent.log_message("Exc: %s",traceback.format_exc())
|
||||
raise DAV_Forbidden
|
||||
except IndexError,e :
|
||||
self.parent.log_error("GET IndexError: %s", str(e))
|
||||
raise DAV_NotFound(uri2)
|
||||
except Exception,e:
|
||||
import traceback
|
||||
self.parent.log_error("GET exception: %s",str(e))
|
||||
self.parent.log_message("Exc: %s", traceback.format_exc())
|
||||
raise DAV_Error, 409
|
||||
return datas
|
||||
finally:
|
||||
cr.close()
|
||||
|
||||
@memoize(CACHE_SIZE)
|
||||
def _get_dav_resourcetype(self,uri):
|
||||
""" return type of object """
|
||||
self.parent.log_message('get RT: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
try:
|
||||
if not dbname:
|
||||
return COLLECTION
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if not node:
|
||||
raise DAV_NotFound(uri2)
|
||||
if node.type in ('collection','database'):
|
||||
return COLLECTION
|
||||
return OBJECT
|
||||
finally:
|
||||
cr.close()
|
||||
|
||||
def _get_dav_displayname(self,uri):
|
||||
self.parent.log_message('get DN: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
if not dbname:
|
||||
cr.close()
|
||||
return COLLECTION
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if not node:
|
||||
cr.close()
|
||||
raise DAV_NotFound(uri2)
|
||||
cr.close()
|
||||
return node.displayname
|
||||
|
||||
@memoize(CACHE_SIZE)
|
||||
def _get_dav_getcontentlength(self,uri):
|
||||
""" return the content length of an object """
|
||||
self.parent.log_message('get length: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
result = 0
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
if not dbname:
|
||||
cr.close()
|
||||
return '0'
|
||||
node = self.uri2object(cr, uid, pool, uri2)
|
||||
if not node:
|
||||
cr.close()
|
||||
raise DAV_NotFound(uri2)
|
||||
result = node.content_length or 0
|
||||
cr.close()
|
||||
return str(result)
|
||||
|
||||
@memoize(CACHE_SIZE)
|
||||
def _get_dav_getetag(self,uri):
|
||||
""" return the ETag of an object """
|
||||
self.parent.log_message('get etag: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
result = 0
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
if not dbname:
|
||||
cr.close()
|
||||
return '0'
|
||||
node = self.uri2object(cr, uid, pool, uri2)
|
||||
if not node:
|
||||
cr.close()
|
||||
raise DAV_NotFound(uri2)
|
||||
result = node.get_etag(cr)
|
||||
cr.close()
|
||||
return str(result)
|
||||
|
||||
@memoize(CACHE_SIZE)
|
||||
def get_lastmodified(self,uri):
|
||||
""" return the last modified date of the object """
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
today = time.time()
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
try:
|
||||
if not dbname:
|
||||
return today
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if not node:
|
||||
raise DAV_NotFound(uri2)
|
||||
if node.write_date:
|
||||
return time.mktime(time.strptime(node.write_date,'%Y-%m-%d %H:%M:%S'))
|
||||
else:
|
||||
return today
|
||||
finally:
|
||||
cr.close()
|
||||
|
||||
@memoize(CACHE_SIZE)
|
||||
def get_creationdate(self,uri):
|
||||
""" return the last modified date of the object """
|
||||
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
try:
|
||||
if not dbname:
|
||||
raise DAV_Error, 409
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if not node:
|
||||
raise DAV_NotFound(uri2)
|
||||
if node.create_date:
|
||||
result = time.strptime(node.create_date,'%Y-%m-%d %H:%M:%S')
|
||||
else:
|
||||
result = time.gmtime()
|
||||
return result
|
||||
finally:
|
||||
cr.close()
|
||||
|
||||
@memoize(CACHE_SIZE)
|
||||
def _get_dav_getcontenttype(self,uri):
|
||||
self.parent.log_message('get contenttype: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
try:
|
||||
if not dbname:
|
||||
return 'httpd/unix-directory'
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if not node:
|
||||
raise DAV_NotFound(uri2)
|
||||
|
||||
result = 'application/octet-stream'
|
||||
#if node.type=='collection':
|
||||
#result ='httpd/unix-directory'
|
||||
#else:
|
||||
result = node.mimetype
|
||||
return result
|
||||
#raise DAV_NotFound, 'Could not find %s' % path
|
||||
finally:
|
||||
cr.close()
|
||||
|
||||
def mkcol(self,uri):
|
||||
""" create a new collection """
|
||||
self.parent.log_message('MKCOL: %s' % uri)
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
parent='/'.join(uri.split('/')[:-1])
|
||||
if not parent.startswith(self.baseuri):
|
||||
parent=self.baseuri + ''.join(parent[1:])
|
||||
if not uri.startswith(self.baseuri):
|
||||
uri=self.baseuri + ''.join(uri[1:])
|
||||
|
||||
|
||||
cr, uid, pool,dbname, uri2 = self.get_cr(uri)
|
||||
if not dbname:
|
||||
raise DAV_Error, 409
|
||||
node = self.uri2object(cr,uid,pool, uri2[:-1])
|
||||
object2=node and node.object2 or False
|
||||
object=node and node.object or False
|
||||
|
||||
objname = uri2[-1]
|
||||
if not object:
|
||||
pool.get('document.directory').create(cr, uid, {
|
||||
'name': objname,
|
||||
'parent_id': False,
|
||||
'ressource_type_id': False,
|
||||
'ressource_id': False
|
||||
})
|
||||
else:
|
||||
pool.get('document.directory').create(cr, uid, {
|
||||
'name': objname,
|
||||
'parent_id': object.id,
|
||||
'ressource_type_id': object.ressource_type_id.id,
|
||||
'ressource_id': object2 and object2.id or False
|
||||
})
|
||||
|
||||
cr.commit()
|
||||
cr.close()
|
||||
return True
|
||||
|
||||
def put(self,uri,data,content_type=None):
|
||||
""" put the object into the filesystem """
|
||||
self.parent.log_message('Putting %s (%d), %s'%( unicode(uri,'utf8'), len(data), content_type))
|
||||
parent='/'.join(uri.split('/')[:-1])
|
||||
cr, uid, pool,dbname, uri2 = self.get_cr(uri)
|
||||
if not dbname:
|
||||
raise DAV_Forbidden
|
||||
try:
|
||||
node = self.uri2object(cr,uid,pool, uri2[:])
|
||||
except:
|
||||
node = False
|
||||
objname = uri2[-1]
|
||||
ext = objname.find('.') >0 and objname.split('.')[1] or False
|
||||
|
||||
if not node:
|
||||
dir_node = self.uri2object(cr,uid,pool, uri2[:-1])
|
||||
if not dir_node:
|
||||
raise DAV_NotFound('Parent folder not found')
|
||||
try:
|
||||
dir_node.create_child(cr,objname,data)
|
||||
except Exception,e:
|
||||
import traceback
|
||||
self.parent.log_error("Cannot create %s: %s", objname, str(e))
|
||||
self.parent.log_message("Exc: %s",traceback.format_exc())
|
||||
raise DAV_Forbidden
|
||||
else:
|
||||
try:
|
||||
node.set_data(cr,data)
|
||||
except Exception,e:
|
||||
import traceback
|
||||
self.parent.log_error("Cannot save %s: %s", objname, str(e))
|
||||
self.parent.log_message("Exc: %s",traceback.format_exc())
|
||||
raise DAV_Forbidden
|
||||
|
||||
cr.commit()
|
||||
|
||||
return 201
|
||||
|
||||
def rmcol(self,uri):
|
||||
""" delete a collection """
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
|
||||
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
|
||||
if True or not dbname: # *-*
|
||||
raise DAV_Error, 409
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
object2=node and node.object2 or False
|
||||
object=node and node.object or False
|
||||
if object._table_name=='document.directory':
|
||||
if object.child_ids:
|
||||
raise DAV_Forbidden # forbidden
|
||||
if object.file_ids:
|
||||
raise DAV_Forbidden # forbidden
|
||||
res = pool.get('document.directory').unlink(cr, uid, [object.id])
|
||||
|
||||
cr.commit()
|
||||
cr.close()
|
||||
return 204
|
||||
|
||||
def rm(self,uri):
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
|
||||
object=False
|
||||
cr, uid, pool,dbname, uri2 = self.get_cr(uri)
|
||||
#if not dbname:
|
||||
if True:
|
||||
raise DAV_Error, 409
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
object2=node and node.object2 or False
|
||||
object=node and node.object or False
|
||||
if not object:
|
||||
raise DAV_NotFound
|
||||
|
||||
self.parent.log_message(' rm %s "%s"'%(object._table_name,uri))
|
||||
if object._table_name=='ir.attachment':
|
||||
res = pool.get('ir.attachment').unlink(cr, uid, [object.id])
|
||||
else:
|
||||
raise DAV_Forbidden # forbidden
|
||||
parent='/'.join(uri.split('/')[:-1])
|
||||
cr.commit()
|
||||
cr.close()
|
||||
return 204
|
||||
|
||||
### DELETE handlers (examples)
|
||||
### (we use the predefined methods in davcmd instead of doing
|
||||
### a rm directly
|
||||
###
|
||||
|
||||
def delone(self,uri):
|
||||
""" delete a single resource
|
||||
|
||||
You have to return a result dict of the form
|
||||
uri:error_code
|
||||
or None if everything's ok
|
||||
|
||||
"""
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
res=delone(self,uri)
|
||||
parent='/'.join(uri.split('/')[:-1])
|
||||
return res
|
||||
|
||||
def deltree(self,uri):
|
||||
""" delete a collection
|
||||
|
||||
You have to return a result dict of the form
|
||||
uri:error_code
|
||||
or None if everything's ok
|
||||
"""
|
||||
if uri[-1]=='/':uri=uri[:-1]
|
||||
res=deltree(self,uri)
|
||||
parent='/'.join(uri.split('/')[:-1])
|
||||
return res
|
||||
|
||||
|
||||
###
|
||||
### MOVE handlers (examples)
|
||||
###
|
||||
|
||||
def moveone(self,src,dst,overwrite):
|
||||
""" move one resource with Depth=0
|
||||
|
||||
an alternative implementation would be
|
||||
|
||||
result_code=201
|
||||
if overwrite:
|
||||
result_code=204
|
||||
r=os.system("rm -f '%s'" %dst)
|
||||
if r: return 412
|
||||
r=os.system("mv '%s' '%s'" %(src,dst))
|
||||
if r: return 412
|
||||
return result_code
|
||||
|
||||
(untested!). This would not use the davcmd functions
|
||||
and thus can only detect errors directly on the root node.
|
||||
"""
|
||||
res=moveone(self,src,dst,overwrite)
|
||||
return res
|
||||
|
||||
def movetree(self,src,dst,overwrite):
|
||||
""" move a collection with Depth=infinity
|
||||
|
||||
an alternative implementation would be
|
||||
|
||||
result_code=201
|
||||
if overwrite:
|
||||
result_code=204
|
||||
r=os.system("rm -rf '%s'" %dst)
|
||||
if r: return 412
|
||||
r=os.system("mv '%s' '%s'" %(src,dst))
|
||||
if r: return 412
|
||||
return result_code
|
||||
|
||||
(untested!). This would not use the davcmd functions
|
||||
and thus can only detect errors directly on the root node"""
|
||||
|
||||
res=movetree(self,src,dst,overwrite)
|
||||
return res
|
||||
|
||||
###
|
||||
### COPY handlers
|
||||
###
|
||||
|
||||
def copyone(self,src,dst,overwrite):
|
||||
""" copy one resource with Depth=0
|
||||
|
||||
an alternative implementation would be
|
||||
|
||||
result_code=201
|
||||
if overwrite:
|
||||
result_code=204
|
||||
r=os.system("rm -f '%s'" %dst)
|
||||
if r: return 412
|
||||
r=os.system("cp '%s' '%s'" %(src,dst))
|
||||
if r: return 412
|
||||
return result_code
|
||||
|
||||
(untested!). This would not use the davcmd functions
|
||||
and thus can only detect errors directly on the root node.
|
||||
"""
|
||||
res=copyone(self,src,dst,overwrite)
|
||||
return res
|
||||
|
||||
def copytree(self,src,dst,overwrite):
|
||||
""" copy a collection with Depth=infinity
|
||||
|
||||
an alternative implementation would be
|
||||
|
||||
result_code=201
|
||||
if overwrite:
|
||||
result_code=204
|
||||
r=os.system("rm -rf '%s'" %dst)
|
||||
if r: return 412
|
||||
r=os.system("cp -r '%s' '%s'" %(src,dst))
|
||||
if r: return 412
|
||||
return result_code
|
||||
|
||||
(untested!). This would not use the davcmd functions
|
||||
and thus can only detect errors directly on the root node"""
|
||||
res=copytree(self,src,dst,overwrite)
|
||||
return res
|
||||
|
||||
###
|
||||
### copy methods.
|
||||
### This methods actually copy something. low-level
|
||||
### They are called by the davcmd utility functions
|
||||
### copytree and copyone (not the above!)
|
||||
### Look in davcmd.py for further details.
|
||||
###
|
||||
|
||||
def copy(self,src,dst):
|
||||
src=urllib.unquote(src)
|
||||
dst=urllib.unquote(dst)
|
||||
ct = self._get_dav_getcontenttype(src)
|
||||
data = self.get_data(src)
|
||||
self.put(dst,data,ct)
|
||||
return 201
|
||||
|
||||
def copycol(self,src,dst):
|
||||
""" copy a collection.
|
||||
|
||||
As this is not recursive (the davserver recurses itself)
|
||||
we will only create a new directory here. For some more
|
||||
advanced systems we might also have to copy properties from
|
||||
the source to the destination.
|
||||
"""
|
||||
print " copy a collection."
|
||||
return self.mkcol(dst)
|
||||
|
||||
|
||||
def exists(self,uri):
|
||||
""" test if a resource exists """
|
||||
result = False
|
||||
cr, uid, pool,dbname, uri2 = self.get_cr(uri)
|
||||
if not dbname:
|
||||
return True
|
||||
try:
|
||||
node = self.uri2object(cr,uid,pool, uri2)
|
||||
if node:
|
||||
result = True
|
||||
except:
|
||||
pass
|
||||
cr.close()
|
||||
return result
|
||||
|
||||
@memoize(CACHE_SIZE)
|
||||
def is_collection(self,uri):
|
||||
""" test if the given uri is a collection """
|
||||
return self._get_dav_resourcetype(uri)==COLLECTION
|
|
@ -0,0 +1,26 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * document_webdav_old
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-30 15:14:08+0000\n"
|
||||
"PO-Revision-Date: 2009-05-30 15:14:08+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: document_webdav_old
|
||||
#: model:ir.module.module,description:document_webdav_old.module_meta_information
|
||||
msgid "This is a complete document management system:\n"
|
||||
" * WebDav Interface\n"
|
||||
" * User Authentification\n"
|
||||
" * Document Indexation\n"
|
||||
""
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
|
||||
#
|
||||
# Copyright P. Christeas <p_christ@hol.gr> 2008,2009
|
||||
#
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsability of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# garantees and support are strongly adviced to contract a Free Software
|
||||
# Service Company
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
###############################################################################
|
||||
|
||||
|
||||
import netsvc
|
||||
from dav_fs import tinydav_handler
|
||||
from tools.config import config
|
||||
from DAV.WebDAVServer import DAVRequestHandler
|
||||
from service.websrv_lib import HTTPDir,FixSendError
|
||||
|
||||
class DAVHandler(FixSendError,DAVRequestHandler):
|
||||
verbose = False
|
||||
|
||||
def get_userinfo(self,user,pw):
|
||||
print "get_userinfo"
|
||||
return False
|
||||
def _log(self, message):
|
||||
netsvc.Logger().notifyChannel("webdav",netsvc.LOG_DEBUG,message)
|
||||
|
||||
def handle(self):
|
||||
pass
|
||||
|
||||
def finish(self):
|
||||
pass
|
||||
|
||||
def setup(self):
|
||||
davpath = '/'+config.get_misc('webdav','vdir','webdav')+'/'
|
||||
self.baseuri = "http://%s:%d%s"% (self.server.server_name,self.server.server_port,davpath)
|
||||
self.IFACE_CLASS = tinydav_handler(self)
|
||||
pass
|
||||
|
||||
def log_message(self, format, *args):
|
||||
netsvc.Logger().notifyChannel('webdav',netsvc.LOG_DEBUG_RPC,format % args)
|
||||
|
||||
def log_error(self, format, *args):
|
||||
netsvc.Logger().notifyChannel('xmlrpc',netsvc.LOG_WARNING,format % args)
|
||||
|
||||
|
||||
try:
|
||||
from service.http_server import reg_http_service,OpenERPAuthProvider
|
||||
if (config.get_misc('webdav','enable',False)):
|
||||
davpath = '/'+config.get_misc('webdav','vdir','webdav')+'/'
|
||||
handler = DAVHandler
|
||||
handler.verbose = config.get_misc('webdav','verbose',True)
|
||||
handler.debug = config.get_misc('webdav','debug',True)
|
||||
reg_http_service(HTTPDir(davpath,DAVHandler,OpenERPAuthProvider()))
|
||||
netsvc.Logger().notifyChannel('webdav',netsvc.LOG_INFO,"WebDAV service registered at path: %s/ "% davpath)
|
||||
except Exception, e:
|
||||
logger = netsvc.Logger()
|
||||
logger.notifyChannel('webdav', netsvc.LOG_ERROR, 'Cannot launch webdav: %s' % e)
|
||||
|
||||
#eof
|
||||
|
||||
|
||||
|
|
@ -7,20 +7,20 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-08 11:54+0000\n"
|
||||
"PO-Revision-Date: 2009-12-01 15:42+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 04:54+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: event
|
||||
#: field:event.event,date_end:0
|
||||
#: field:report.event.registration,date_end:0
|
||||
msgid "Ending date"
|
||||
msgstr ""
|
||||
msgstr "结束时间"
|
||||
|
||||
#. module: event
|
||||
#: field:event.event,register_min:0
|
||||
|
@ -30,22 +30,22 @@ msgstr ""
|
|||
#. module: event
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: event
|
||||
#: field:event.event,mail_registr:0
|
||||
msgid "Registration Email"
|
||||
msgstr ""
|
||||
msgstr "注册电子邮件"
|
||||
|
||||
#. module: event
|
||||
#: model:crm.case.section,name:event.event_0_crm_case_section
|
||||
msgid "Concert of Bon Jovi"
|
||||
msgstr ""
|
||||
msgstr "邦侨维演唱会"
|
||||
|
||||
#. module: event
|
||||
#: field:event.event,mail_confirm:0
|
||||
msgid "Confirmation Email"
|
||||
msgstr ""
|
||||
msgstr "确认电子邮件"
|
||||
|
||||
#. module: event
|
||||
#: constraint:crm.case.section:0
|
||||
|
@ -55,37 +55,37 @@ msgstr ""
|
|||
#. module: event
|
||||
#: model:ir.model,name:event.model_event_registration
|
||||
msgid "Event Registration"
|
||||
msgstr ""
|
||||
msgstr "事件注册"
|
||||
|
||||
#. module: event
|
||||
#: model:ir.actions.wizard,name:event.event_reg_invoice
|
||||
msgid "Make Invoice"
|
||||
msgstr ""
|
||||
msgstr "生成发票"
|
||||
|
||||
#. module: event
|
||||
#: field:report.event.type.registration,draft_state:0
|
||||
msgid "Draft Registrations"
|
||||
msgstr ""
|
||||
msgstr "草案注册"
|
||||
|
||||
#. module: event
|
||||
#: view:report.event.registration:0
|
||||
msgid "Event on Registration"
|
||||
msgstr ""
|
||||
msgstr "注册的事件"
|
||||
|
||||
#. module: event
|
||||
#: wizard_button:event.reg_make_invoice,init,end:0
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
msgstr "确定"
|
||||
|
||||
#. module: event
|
||||
#: field:event.event,mail_auto_confirm:0
|
||||
msgid "Mail Auto Confirm"
|
||||
msgstr ""
|
||||
msgstr "自动配置邮件"
|
||||
|
||||
#. module: event
|
||||
#: model:product.template,name:event.event_product_1_product_template
|
||||
msgid "Ticket for Opera"
|
||||
msgstr ""
|
||||
msgstr "歌剧门票"
|
||||
|
||||
#. module: event
|
||||
#: wizard_field:event.reg_make_invoice,init,inv_rejected:0
|
||||
|
@ -95,12 +95,12 @@ msgstr ""
|
|||
#. module: event
|
||||
#: view:event.event:0
|
||||
msgid "Confirm Event"
|
||||
msgstr ""
|
||||
msgstr "确认事件"
|
||||
|
||||
#. module: event
|
||||
#: model:crm.case.section,name:event.event_1_crm_case_section
|
||||
msgid "Opera of Verdi"
|
||||
msgstr ""
|
||||
msgstr "威尔第歌剧"
|
||||
|
||||
#. module: event
|
||||
#: field:report.event.registration,draft_state:0
|
||||
|
@ -110,7 +110,7 @@ msgstr ""
|
|||
#. module: event
|
||||
#: wizard_view:event.reg_make_invoice,init:0
|
||||
msgid "Create Invoices"
|
||||
msgstr ""
|
||||
msgstr "创建发票"
|
||||
|
||||
#. module: event
|
||||
#: model:ir.module.module,description:event.module_meta_information
|
||||
|
|
|
@ -150,4 +150,4 @@ class res_users(osv.osv):
|
|||
|
||||
res_users()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-30 04:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr
|
||||
|
|
|
@ -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: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-17 07:23+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-11-30 13:24+0000\n"
|
||||
"Last-Translator: Simon Vidmar <Unknown>\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: 2009-11-18 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr
|
||||
|
@ -42,7 +42,7 @@ msgstr ""
|
|||
#: model:ir.module.module,shortdesc:hr.module_meta_information
|
||||
#: model:ir.ui.menu,name:hr.menu_hr_root
|
||||
msgid "Human Resources"
|
||||
msgstr ""
|
||||
msgstr "Človeški viri"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.timesheet,dayofweek:0
|
||||
|
@ -67,7 +67,7 @@ msgstr "Oddelek"
|
|||
#. module: hr
|
||||
#: model:process.transition,name:hr.process_transition_contactofemployee0
|
||||
msgid "Contact of employee"
|
||||
msgstr ""
|
||||
msgstr "Stik za zaposlenega"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,work_email:0
|
||||
|
@ -174,7 +174,7 @@ msgstr ""
|
|||
#. module: hr
|
||||
#: field:hr.employee,child_ids:0
|
||||
msgid "Subordinates"
|
||||
msgstr ""
|
||||
msgstr "Podrejeni"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.ui.menu,name:hr.menu_hr_reporting
|
||||
|
@ -242,7 +242,7 @@ msgstr "Moški"
|
|||
#. module: hr
|
||||
#: model:process.transition,note:hr.process_transition_employeeuser0
|
||||
msgid "Create openerp user"
|
||||
msgstr ""
|
||||
msgstr "Ustvari uporabnika OpenERP"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee.category:0
|
||||
|
@ -258,7 +258,7 @@ msgstr "torek"
|
|||
#. module: hr
|
||||
#: model:ir.model,name:hr.model_hr_department
|
||||
msgid "hr.department"
|
||||
msgstr ""
|
||||
msgstr "hr.department"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,user_id:0
|
||||
|
@ -315,7 +315,7 @@ msgstr "Aktiven"
|
|||
#. module: hr
|
||||
#: constraint:hr.employee:0
|
||||
msgid "Error ! You cannot create recursive Hierarchy of Employees."
|
||||
msgstr ""
|
||||
msgstr "Napaka! Ne morete izdelati rekurzivne hierarhije zaposlencev."
|
||||
|
||||
#. module: hr
|
||||
#: model:process.process,name:hr.process_process_employeecontractprocess0
|
||||
|
@ -325,7 +325,7 @@ msgstr ""
|
|||
#. module: hr
|
||||
#: model:process.node,note:hr.process_node_openerpuser0
|
||||
msgid "Create OpenERP User"
|
||||
msgstr ""
|
||||
msgstr "Ustvari uporabnika OpenERP"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.node,note:hr.process_node_employee0
|
||||
|
@ -371,7 +371,7 @@ msgstr "Zakonski stan"
|
|||
#. module: hr
|
||||
#: model:ir.model,name:hr.model_hr_timesheet
|
||||
msgid "Timesheet Line"
|
||||
msgstr ""
|
||||
msgstr "Postavka časovnice"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
|
@ -430,7 +430,7 @@ msgstr "Državljanstvo"
|
|||
#. module: hr
|
||||
#: field:hr.employee,otherid:0
|
||||
msgid "Other ID"
|
||||
msgstr ""
|
||||
msgstr "Druga oznaka (identifikator)"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.timesheet,name:0
|
||||
|
|
|
@ -7,36 +7,36 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-09 17:37+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 14:36+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 05:14+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.node,name:hr.process_node_openerpuser0
|
||||
#: model:process.transition,name:hr.process_transition_employeeuser0
|
||||
msgid "Openerp user"
|
||||
msgstr ""
|
||||
msgstr "系统用户"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,name:hr.edit_workgroup
|
||||
#: model:ir.ui.menu,name:hr.menu_edit_workgroup
|
||||
msgid "Working Time Categories"
|
||||
msgstr ""
|
||||
msgstr "工作时间分类"
|
||||
|
||||
#. module: hr
|
||||
#: constraint:hr.department:0
|
||||
msgid "Error! You can not create recursive departments."
|
||||
msgstr ""
|
||||
msgstr "错误!您不能创建循环部门。"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,sinid:0
|
||||
msgid "SIN No"
|
||||
msgstr ""
|
||||
msgstr "社保号"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.module.module,shortdesc:hr.module_meta_information
|
||||
|
@ -57,7 +57,7 @@ msgstr "上级"
|
|||
#. module: hr
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.department:0
|
||||
|
@ -67,12 +67,12 @@ msgstr "部门"
|
|||
#. module: hr
|
||||
#: model:process.transition,name:hr.process_transition_contactofemployee0
|
||||
msgid "Contact of employee"
|
||||
msgstr ""
|
||||
msgstr "员工联系方式"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,work_email:0
|
||||
msgid "Work Email"
|
||||
msgstr ""
|
||||
msgstr "办公电子邮件"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.timesheet.group,name:0
|
||||
|
@ -100,7 +100,7 @@ msgstr "上级部门"
|
|||
#: view:hr.employee:0
|
||||
#: field:hr.employee,notes:0
|
||||
msgid "Notes"
|
||||
msgstr "注解"
|
||||
msgstr "备注"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.timesheet,hour_from:0
|
||||
|
@ -110,7 +110,7 @@ msgstr "工作从"
|
|||
#. module: hr
|
||||
#: model:ir.actions.act_window,name:hr.action2
|
||||
msgid "Employee Hierarchy"
|
||||
msgstr ""
|
||||
msgstr "员工等级"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.ui.menu,name:hr.menu_hr_configuration
|
||||
|
@ -120,43 +120,43 @@ msgstr "设置"
|
|||
#. module: hr
|
||||
#: selection:hr.employee,marital:0
|
||||
msgid "Unmaried"
|
||||
msgstr ""
|
||||
msgstr "未婚"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.employee,gender:0
|
||||
msgid "Female"
|
||||
msgstr ""
|
||||
msgstr "女"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.timesheet.group:0
|
||||
msgid "Working Time Category"
|
||||
msgstr ""
|
||||
msgstr "工作时间分类"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,name:hr.open_view_employee_tree
|
||||
#: model:ir.ui.menu,name:hr.menu_open_view_employee_tree
|
||||
msgid "Employees Structure"
|
||||
msgstr "员工架构"
|
||||
msgstr "员工组织结构"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
msgid "Social IDs"
|
||||
msgstr ""
|
||||
msgstr "其它社会身份号码"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,work_phone:0
|
||||
msgid "Work Phone"
|
||||
msgstr ""
|
||||
msgstr "办公电话"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee.category,child_ids:0
|
||||
msgid "Child Categories"
|
||||
msgstr ""
|
||||
msgstr "下级分类"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,work_location:0
|
||||
msgid "Office Location"
|
||||
msgstr ""
|
||||
msgstr "办公地点"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
|
@ -189,27 +189,27 @@ msgstr "成员"
|
|||
#. module: hr
|
||||
#: field:hr.employee,ssnid:0
|
||||
msgid "SSN No"
|
||||
msgstr ""
|
||||
msgstr "社保号"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.transition,note:hr.process_transition_contactofemployee0
|
||||
msgid "Fill up contact information"
|
||||
msgstr ""
|
||||
msgstr "填写联系方式"
|
||||
|
||||
#. module: hr
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图结构"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.employee,marital:0
|
||||
msgid "Divorced"
|
||||
msgstr ""
|
||||
msgstr "离异"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee.category,parent_id:0
|
||||
msgid "Parent Category"
|
||||
msgstr ""
|
||||
msgstr "上级分类"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.actions.act_window,name:hr.open_module_tree_department
|
||||
|
@ -222,12 +222,12 @@ msgstr "部门"
|
|||
#. module: hr
|
||||
#: model:process.node,name:hr.process_node_employeecontact0
|
||||
msgid "Employee Contact"
|
||||
msgstr ""
|
||||
msgstr "员工联系方式"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.employee,marital:0
|
||||
msgid "Maried"
|
||||
msgstr ""
|
||||
msgstr "已婚"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.timesheet,tgroup_id:0
|
||||
|
@ -237,12 +237,12 @@ msgstr "员工工作时间表"
|
|||
#. module: hr
|
||||
#: selection:hr.employee,gender:0
|
||||
msgid "Male"
|
||||
msgstr ""
|
||||
msgstr "男性"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.transition,note:hr.process_transition_employeeuser0
|
||||
msgid "Create openerp user"
|
||||
msgstr ""
|
||||
msgstr "创建系统用户"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee.category:0
|
||||
|
@ -263,7 +263,7 @@ msgstr "人事部门"
|
|||
#. module: hr
|
||||
#: field:hr.employee,user_id:0
|
||||
msgid "Related User"
|
||||
msgstr ""
|
||||
msgstr "相关用户"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,category_id:0
|
||||
|
@ -279,12 +279,12 @@ msgstr "备注"
|
|||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
msgid "Contact Information"
|
||||
msgstr ""
|
||||
msgstr "联系方式"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "状态"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.timesheet,dayofweek:0
|
||||
|
@ -305,7 +305,7 @@ msgstr "星期"
|
|||
#. module: hr
|
||||
#: field:hr.employee,birthday:0
|
||||
msgid "Birthday"
|
||||
msgstr ""
|
||||
msgstr "生日"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,active:0
|
||||
|
@ -315,22 +315,22 @@ msgstr "有效"
|
|||
#. module: hr
|
||||
#: constraint:hr.employee:0
|
||||
msgid "Error ! You cannot create recursive Hierarchy of Employees."
|
||||
msgstr ""
|
||||
msgstr "错误!您不能创建循环的员工等级。"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.process,name:hr.process_process_employeecontractprocess0
|
||||
msgid "Employee Contract Process"
|
||||
msgstr ""
|
||||
msgstr "员工合同流程"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.node,note:hr.process_node_openerpuser0
|
||||
msgid "Create OpenERP User"
|
||||
msgstr ""
|
||||
msgstr "创建系统用户"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.node,note:hr.process_node_employee0
|
||||
msgid "Employee Complete Form"
|
||||
msgstr ""
|
||||
msgstr "员工完成表单"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.department:0
|
||||
|
@ -346,7 +346,7 @@ msgstr "周三"
|
|||
#: model:ir.actions.act_window,name:hr.open_view_categ_form
|
||||
#: model:ir.ui.menu,name:hr.menu_view_employee_category_form
|
||||
msgid "Categories of Employee"
|
||||
msgstr ""
|
||||
msgstr "员工分类"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.timesheet,date_from:0
|
||||
|
@ -361,12 +361,12 @@ msgstr "上级用户"
|
|||
#. module: hr
|
||||
#: field:hr.employee,address_id:0
|
||||
msgid "Working Address"
|
||||
msgstr ""
|
||||
msgstr "工作地址"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,marital:0
|
||||
msgid "Marital Status"
|
||||
msgstr ""
|
||||
msgstr "婚姻状况"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.model,name:hr.model_hr_timesheet
|
||||
|
@ -376,20 +376,20 @@ msgstr "工作表明细"
|
|||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
msgid "Personal Information"
|
||||
msgstr ""
|
||||
msgstr "个人信息"
|
||||
|
||||
#. module: hr
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名必须以“x_”开始且不能包含任何特殊字符!"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.timesheet:0
|
||||
#: field:hr.timesheet.group,timesheet_id:0
|
||||
#: model:ir.model,name:hr.model_hr_timesheet_group
|
||||
msgid "Working Time"
|
||||
msgstr ""
|
||||
msgstr "工作时间"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.timesheet,dayofweek:0
|
||||
|
@ -404,7 +404,7 @@ msgstr "工作至"
|
|||
#. module: hr
|
||||
#: selection:hr.employee,marital:0
|
||||
msgid "Other"
|
||||
msgstr ""
|
||||
msgstr "其它"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee.category:0
|
||||
|
@ -414,7 +414,7 @@ msgstr "员工分类"
|
|||
#. module: hr
|
||||
#: field:hr.employee,address_home_id:0
|
||||
msgid "Home Address"
|
||||
msgstr ""
|
||||
msgstr "家庭住址"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.department:0
|
||||
|
@ -424,12 +424,12 @@ msgstr "部门"
|
|||
#. module: hr
|
||||
#: field:hr.employee,country_id:0
|
||||
msgid "Nationality"
|
||||
msgstr ""
|
||||
msgstr "国籍"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.employee,otherid:0
|
||||
msgid "Other ID"
|
||||
msgstr ""
|
||||
msgstr "其他证件号"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.timesheet,name:0
|
||||
|
@ -439,14 +439,14 @@ msgstr "名称"
|
|||
#. module: hr
|
||||
#: field:hr.employee,gender:0
|
||||
msgid "Gender"
|
||||
msgstr ""
|
||||
msgstr "性别"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
#: model:ir.actions.act_window,name:hr.open_view_employee_list
|
||||
#: model:ir.ui.menu,name:hr.menu_open_view_employee_list
|
||||
msgid "Employees"
|
||||
msgstr ""
|
||||
msgstr "员工列表"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,name:0
|
||||
|
@ -456,17 +456,17 @@ msgstr "部门名称"
|
|||
#. module: hr
|
||||
#: field:hr.department,child_ids:0
|
||||
msgid "Child Departments"
|
||||
msgstr ""
|
||||
msgstr "下级部门"
|
||||
|
||||
#. module: hr
|
||||
#: view:hr.employee:0
|
||||
msgid "Job Information"
|
||||
msgstr ""
|
||||
msgstr "工作信息"
|
||||
|
||||
#. module: hr
|
||||
#: model:process.node,note:hr.process_node_employeecontact0
|
||||
msgid "Fill up employee's contact information"
|
||||
msgstr ""
|
||||
msgstr "填写员工联系方式信息"
|
||||
|
||||
#. module: hr
|
||||
#: field:hr.department,manager_id:0
|
||||
|
@ -478,7 +478,7 @@ msgstr "经理"
|
|||
#: model:ir.actions.act_window,name:hr.open_view_employee_list_my
|
||||
#: model:ir.ui.menu,name:hr.menu_open_view_employee_list_my
|
||||
msgid "All Employees"
|
||||
msgstr ""
|
||||
msgstr "全部员工"
|
||||
|
||||
#. module: hr
|
||||
#: selection:hr.timesheet,dayofweek:0
|
||||
|
@ -489,4 +489,4 @@ msgstr "周六"
|
|||
#: model:ir.actions.act_window,name:hr.open_view_employee_new
|
||||
#: model:ir.ui.menu,name:hr.menu_open_view_employee_new
|
||||
msgid "New Employee"
|
||||
msgstr ""
|
||||
msgstr "新建员工"
|
||||
|
|
|
@ -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: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-17 07:21+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-11-30 13:35+0000\n"
|
||||
"Last-Translator: Simon Vidmar <Unknown>\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: 2009-11-18 04:43+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr_attendance
|
||||
|
@ -36,7 +36,7 @@ msgstr ""
|
|||
#: model:ir.actions.wizard,name:hr_attendance.si_so
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_si_so
|
||||
msgid "Sign in / Sign out"
|
||||
msgstr ""
|
||||
msgstr "Prijava/Odjava"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: rml:report.hr.timesheet.attendance.error:0
|
||||
|
@ -64,12 +64,12 @@ msgstr ""
|
|||
#: wizard_button:hr.si_so,init,so_test:0
|
||||
#: wizard_button:hr.si_so,so_ask_si,so:0
|
||||
msgid "Sign out"
|
||||
msgstr ""
|
||||
msgstr "Odjavi"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: rml:report.hr.timesheet.attendance.error:0
|
||||
msgid "Delay"
|
||||
msgstr ""
|
||||
msgstr "Zakasnitev"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_field:hr.si_so,init,name:0
|
||||
|
@ -82,7 +82,7 @@ msgstr "Ime zaposlenega"
|
|||
#: wizard_button:hr.attendance.print_month,init,print:0
|
||||
#: wizard_button:hr.attendance.print_week,init,print:0
|
||||
msgid "Print Timesheet"
|
||||
msgstr ""
|
||||
msgstr "Izpiši časovnico"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.wizard,name:hr_attendance.wizard_attendance_error
|
||||
|
@ -92,12 +92,12 @@ msgstr ""
|
|||
#. module: hr_attendance
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Napačno ime modela v definiciji dejanja."
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.wizard,name:hr_attendance.print_week
|
||||
msgid "Print Timesheet by week"
|
||||
msgstr ""
|
||||
msgstr "Izpiši časovnico po tednih"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,employee_id:0
|
||||
|
@ -119,28 +119,28 @@ msgstr ""
|
|||
#: selection:hr.attendance,action:0
|
||||
#: view:hr.employee:0
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
msgstr "Prijava"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: rml:report.hr.timesheet.attendance.error:0
|
||||
msgid "Total period:"
|
||||
msgstr ""
|
||||
msgstr "Skupaj obdobje:"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,action_desc:0
|
||||
#: model:ir.model,name:hr_attendance.model_hr_action_reason
|
||||
msgid "Action reason"
|
||||
msgstr ""
|
||||
msgstr "Razlog dejanja"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
msgstr "marec"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
msgstr "avgust"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
|
@ -150,28 +150,28 @@ msgstr ""
|
|||
#. module: hr_attendance
|
||||
#: wizard_field:hr.si_so,so_ask_si,last_time:0
|
||||
msgid "Your last sign in"
|
||||
msgstr ""
|
||||
msgstr "Zadnja prijava"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
msgstr "junij"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.wizard,name:hr_attendance.print_month
|
||||
msgid "Print Timesheet by month"
|
||||
msgstr ""
|
||||
msgstr "Izpiši časovnico po mesecu"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance,action:0
|
||||
#: view:hr.employee:0
|
||||
msgid "Sign Out"
|
||||
msgstr ""
|
||||
msgstr "Odjavi"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.module.module,shortdesc:hr_attendance.module_meta_information
|
||||
msgid "Attendances Of Employees"
|
||||
msgstr ""
|
||||
msgstr "Prisotnost zaposlencev"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.action.reason,name:0
|
||||
|
@ -186,7 +186,7 @@ msgstr ""
|
|||
#. module: hr_attendance
|
||||
#: rml:report.hr.timesheet.attendance.error:0
|
||||
msgid "Date Signed"
|
||||
msgstr ""
|
||||
msgstr "Datum podpisa"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,name:0
|
||||
|
@ -196,7 +196,7 @@ msgstr "Datum"
|
|||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
msgstr "julij"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_view:hr.si_so,si_ask_so:0
|
||||
|
@ -229,17 +229,17 @@ msgstr "Odsoten"
|
|||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
msgstr "februar"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
msgstr "oktober"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_field:hr.si_so,si_ask_so,last_time:0
|
||||
msgid "Your last sign out"
|
||||
msgstr ""
|
||||
msgstr "Datum zadnje odjave"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: rml:report.hr.timesheet.attendance.error:0
|
||||
|
@ -261,7 +261,7 @@ msgstr ""
|
|||
#: wizard_button:hr.si_so,init,si_test:0
|
||||
#: wizard_button:hr.si_so,si_ask_so,si:0
|
||||
msgid "Sign in"
|
||||
msgstr ""
|
||||
msgstr "Prijavi"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_view:hr.attendance.report,init:0
|
||||
|
@ -276,12 +276,12 @@ msgstr "Trenutno stanje"
|
|||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
msgstr "januar"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
msgstr "april"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance
|
||||
|
@ -299,7 +299,7 @@ msgstr ""
|
|||
#: field:hr.attendance,action:0
|
||||
#: selection:hr.attendance,action:0
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
msgstr "Dejanje"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_button:hr.attendance.report,init,print:0
|
||||
|
@ -315,7 +315,7 @@ msgstr ""
|
|||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
msgstr "november"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_view:hr.attendance.report,init:0
|
||||
|
@ -336,7 +336,7 @@ msgstr ""
|
|||
#: wizard_field:hr.attendance.print_week,init,end_date:0
|
||||
#: wizard_field:hr.attendance.report,init,end_date:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
msgstr "Končni datum"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_view:hr.si_so,so_ask_si:0
|
||||
|
@ -348,12 +348,12 @@ msgstr ""
|
|||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
msgstr "september"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.print_month,init,month:0
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
msgstr "december"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
|
@ -363,12 +363,12 @@ msgstr "Prisotnost zaposlenega"
|
|||
#. module: hr_attendance
|
||||
#: wizard_view:hr.attendance.print_month,init:0
|
||||
msgid "Select a month"
|
||||
msgstr ""
|
||||
msgstr "Izberite mesec"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_field:hr.attendance.print_month,init,month:0
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
msgstr "mesec"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.module.module,description:hr_attendance.module_meta_information
|
||||
|
@ -383,7 +383,7 @@ msgstr ""
|
|||
#. module: hr_attendance
|
||||
#: wizard_field:hr.attendance.print_month,init,year:0
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
msgstr "Leto"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: wizard_button:hr.attendance.print_month,init,end:0
|
||||
|
@ -398,4 +398,4 @@ msgstr "Prekliči"
|
|||
#. module: hr_attendance
|
||||
#: rml:report.hr.timesheet.attendance.error:0
|
||||
msgid "Operation"
|
||||
msgstr ""
|
||||
msgstr "Postopek"
|
||||
|
|
|
@ -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: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-17 07:18+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-11-30 13:20+0000\n"
|
||||
"Last-Translator: Simon Vidmar <Unknown>\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: 2009-11-18 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract.wage.type:0
|
||||
msgid "Hourly cost computation"
|
||||
msgstr ""
|
||||
msgstr "Izračun urne postavke"
|
||||
|
||||
#. module: hr_contract
|
||||
#: selection:hr.contract.wage.type,type:0
|
||||
|
@ -52,7 +52,7 @@ msgstr ""
|
|||
#. module: hr_contract
|
||||
#: view:hr.contract.wage.type:0
|
||||
msgid "Wage Types"
|
||||
msgstr ""
|
||||
msgstr "Vrste plačil"
|
||||
|
||||
#. module: hr_contract
|
||||
#: constraint:ir.actions.act_window:0
|
||||
|
@ -72,12 +72,12 @@ msgstr "Neto"
|
|||
#. module: hr_contract
|
||||
#: model:ir.module.module,shortdesc:hr_contract.module_meta_information
|
||||
msgid "Human Resources Contracts"
|
||||
msgstr ""
|
||||
msgstr "Pogodbe - človeški viri"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type.period,factor_days:0
|
||||
msgid "Hours in the period"
|
||||
msgstr ""
|
||||
msgstr "Ur v obdobju"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,function:0
|
||||
|
@ -125,17 +125,17 @@ msgstr "Naziv obdobja"
|
|||
#. module: hr_contract
|
||||
#: model:ir.model,name:hr_contract.model_hr_employee_marital_status
|
||||
msgid "Employee Marital Status"
|
||||
msgstr ""
|
||||
msgstr "Zakonski stan zaposlenca"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,medic_exam:0
|
||||
msgid "Medical examination date"
|
||||
msgstr ""
|
||||
msgstr "Datum zdravniškega pregleda"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type,name:0
|
||||
msgid "Wage Type Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv vrste plačila"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,working_hours_per_day:0
|
||||
|
@ -177,13 +177,13 @@ msgstr "Pogodba"
|
|||
#. module: hr_contract
|
||||
#: view:hr.contract.type:0
|
||||
msgid "Contract Type"
|
||||
msgstr ""
|
||||
msgstr "Vrsta pogodbe"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type,period_id:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract_wage_type_period
|
||||
msgid "Wage Period"
|
||||
msgstr ""
|
||||
msgstr "Obdobje plačila"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,audiens_num:0
|
||||
|
@ -193,18 +193,18 @@ msgstr ""
|
|||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Remuneration"
|
||||
msgstr ""
|
||||
msgstr "Preštevilčenje"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,name:0
|
||||
msgid "Contract Name"
|
||||
msgstr ""
|
||||
msgstr "Ime pogodbe"
|
||||
|
||||
#. module: hr_contract
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_wage_type
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_wage_type
|
||||
msgid "Contract Wage Type"
|
||||
msgstr ""
|
||||
msgstr "Vrsta plačila po pogodbi"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,place_of_birth:0
|
||||
|
@ -221,7 +221,7 @@ msgstr "Upravitelj"
|
|||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_wage_type_period
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_wage_type_period
|
||||
msgid "Wage period"
|
||||
msgstr ""
|
||||
msgstr "Obdobje plačila"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.contract.wage.type,factor_type:0
|
||||
|
@ -244,7 +244,7 @@ msgstr "Datum začetka"
|
|||
#. module: hr_contract
|
||||
#: field:hr.employee.marital.status,description:0
|
||||
msgid "Status Description"
|
||||
msgstr ""
|
||||
msgstr "Opis statusa"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
|
|
|
@ -7,81 +7,81 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-16 15:51+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2009-12-01 14:19+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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: 2009-11-17 05:12+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract.wage.type:0
|
||||
msgid "Hourly cost computation"
|
||||
msgstr ""
|
||||
msgstr "小时成本计算"
|
||||
|
||||
#. module: hr_contract
|
||||
#: selection:hr.contract.wage.type,type:0
|
||||
msgid "Gross"
|
||||
msgstr ""
|
||||
msgstr "应发"
|
||||
|
||||
#. module: hr_contract
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
msgstr "对象名称必须以“x_”开头且不能包含任何特殊字符!"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: view:hr.employee:0
|
||||
msgid "Generalities"
|
||||
msgstr ""
|
||||
msgstr "概要"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,children:0
|
||||
msgid "Number of children"
|
||||
msgstr ""
|
||||
msgstr "子女数"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type,factor_type:0
|
||||
msgid "Factor for hour cost"
|
||||
msgstr ""
|
||||
msgstr "小时成本系数"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract.wage.type:0
|
||||
msgid "Wage Types"
|
||||
msgstr ""
|
||||
msgstr "薪酬类型"
|
||||
|
||||
#. module: hr_contract
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "操作定义中使用了无效的模式名称。"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,employee_id:0
|
||||
msgid "Employee"
|
||||
msgstr ""
|
||||
msgstr "员工"
|
||||
|
||||
#. module: hr_contract
|
||||
#: selection:hr.contract.wage.type,type:0
|
||||
msgid "Net"
|
||||
msgstr ""
|
||||
msgstr "实发"
|
||||
|
||||
#. module: hr_contract
|
||||
#: model:ir.module.module,shortdesc:hr_contract.module_meta_information
|
||||
msgid "Human Resources Contracts"
|
||||
msgstr ""
|
||||
msgstr "劳动合同"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type.period,factor_days:0
|
||||
msgid "Hours in the period"
|
||||
msgstr ""
|
||||
msgstr "合同期小时数"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,function:0
|
||||
msgid "Function"
|
||||
msgstr ""
|
||||
msgstr "职务"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,marital_status:0
|
||||
|
@ -90,78 +90,78 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:hr_contract.action_hr_marital_status
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_marital_status
|
||||
msgid "Marital Status"
|
||||
msgstr ""
|
||||
msgstr "婚姻状况"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.employee:0
|
||||
msgid "Miscelleanous"
|
||||
msgstr ""
|
||||
msgstr "杂项"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: view:hr.employee:0
|
||||
#: field:hr.employee,contract_ids:0
|
||||
msgid "Contracts"
|
||||
msgstr ""
|
||||
msgstr "劳动合同"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type,type:0
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
msgstr "类型"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,wage_type_id:0
|
||||
#: view:hr.contract.wage.type:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract_wage_type
|
||||
msgid "Wage Type"
|
||||
msgstr ""
|
||||
msgstr "薪酬类型"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type.period,name:0
|
||||
msgid "Period Name"
|
||||
msgstr ""
|
||||
msgstr "合同期名称"
|
||||
|
||||
#. module: hr_contract
|
||||
#: model:ir.model,name:hr_contract.model_hr_employee_marital_status
|
||||
msgid "Employee Marital Status"
|
||||
msgstr ""
|
||||
msgstr "员工婚姻状况"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,medic_exam:0
|
||||
msgid "Medical examination date"
|
||||
msgstr ""
|
||||
msgstr "体检时间"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type,name:0
|
||||
msgid "Wage Type Name"
|
||||
msgstr ""
|
||||
msgstr "薪酬类型名称"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,working_hours_per_day:0
|
||||
msgid "Working hours per day"
|
||||
msgstr ""
|
||||
msgstr "每天工作小时数"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.employee:0
|
||||
msgid "Salary"
|
||||
msgstr ""
|
||||
msgstr "薪水"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,date_end:0
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
msgstr "结束时间"
|
||||
|
||||
#. module: hr_contract
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "无效的 XML 视图架构"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,notes:0
|
||||
#: view:hr.employee:0
|
||||
msgid "Notes"
|
||||
msgstr "注解"
|
||||
msgstr "备注"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
|
@ -171,18 +171,18 @@ msgstr "注解"
|
|||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract
|
||||
#: model:ir.ui.menu,name:hr_contract.next_id_56
|
||||
msgid "Contract"
|
||||
msgstr ""
|
||||
msgstr "劳动合同"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract.type:0
|
||||
msgid "Contract Type"
|
||||
msgstr ""
|
||||
msgstr "劳动合同类型"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract.wage.type,period_id:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract_wage_type_period
|
||||
msgid "Wage Period"
|
||||
msgstr ""
|
||||
msgstr "薪酬支付期"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,audiens_num:0
|
||||
|
@ -192,35 +192,35 @@ msgstr ""
|
|||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Remuneration"
|
||||
msgstr ""
|
||||
msgstr "报酬"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,name:0
|
||||
msgid "Contract Name"
|
||||
msgstr ""
|
||||
msgstr "劳动合同名称"
|
||||
|
||||
#. module: hr_contract
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_wage_type
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_wage_type
|
||||
msgid "Contract Wage Type"
|
||||
msgstr ""
|
||||
msgstr "合同薪酬类型"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,place_of_birth:0
|
||||
msgid "Place of Birth"
|
||||
msgstr ""
|
||||
msgstr "籍贯"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,manager:0
|
||||
msgid "Manager"
|
||||
msgstr ""
|
||||
msgstr "经理"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract.wage.type.period:0
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_wage_type_period
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_wage_type_period
|
||||
msgid "Wage period"
|
||||
msgstr ""
|
||||
msgstr "薪酬支付期"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.contract.wage.type,factor_type:0
|
||||
|
@ -228,25 +228,25 @@ msgstr ""
|
|||
msgid ""
|
||||
"This field is used by the timesheet system to compute the price of an hour "
|
||||
"of work wased on the contract of the employee"
|
||||
msgstr ""
|
||||
msgstr "此字段被时间表系统用于计算该员工劳动合同的每小时成本。"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,wage:0
|
||||
msgid "Wage"
|
||||
msgstr ""
|
||||
msgstr "薪酬"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,date_start:0
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
msgstr "开始时间"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee.marital.status,description:0
|
||||
msgid "Status Description"
|
||||
msgstr ""
|
||||
msgstr "状况描述"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: view:hr.employee:0
|
||||
msgid "Contract Duration"
|
||||
msgstr ""
|
||||
msgstr "合同期"
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue