[MERGE]: merting from the same branch

bzr revid: mga@tinyerp.com-20091203132245-gwiatkv8ubfk6zn7
This commit is contained in:
Mantavya Gajjar 2009-12-03 18:52:45 +05:30
commit 452c6c2455
169 changed files with 9115 additions and 2084 deletions

View File

@ -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 = []

View File

@ -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

View File

@ -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',

View File

@ -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">

View File

@ -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')
}

View File

@ -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', '&lt;&gt;', '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">

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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):

View File

@ -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"/>

View File

@ -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

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
67 access_res_currency_rate_account_manager res.currency.rate account manager base.model_res_currency_rate group_account_manager 1 1 1 1
68 access_account_config_wizard_account_manager account.config.wizard account manager model_account_config_wizard group_account_manager 1 1 1 1
69 access_account_config_wizard_system_manager account.config.wizard system manager model_account_config_wizard base.group_system 1 1 1 1
70 access_account_add_tmpl_wizard_account_manager account.addtmpl.wizard account manager model_account_addtmpl_wizard group_account_manager 1 1 1 1
71 access_account_add_tmpl_wizard_system_manager account.addtmpl.wizard system manager model_account_addtmpl_wizard base.group_system 1 1 1 1
72 access_account_invoice_user account.invoice user model_account_invoice base.group_user 1 0 0 0
73 access_account_invoice_user account.invoice.line user model_account_invoice_line base.group_user 1 0 0 0
74 access_account_invoice_user account.invoice.tax user model_account_invoice_tax base.group_user 1 0 0 0

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 "去除最小化的会计科目表"

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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):

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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"/>

View File

@ -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

View File

@ -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 "生日"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 "质量"

View File

@ -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]

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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 ""

View File

@ -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 "过滤器"

View File

@ -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

View File

@ -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 "增值税"

View File

@ -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:

View File

@ -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 &apos;%%&apos; Character" colspan="2"/>
<label align="0.0" string="%% = The &apos;%%&apos; 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&lt;current_date and state=='open'" string="Cases">
<tree colors="red:date_deadline&lt;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','&lt;&gt;','done'),('state','&lt;&gt;','cancel'),('state','&lt;&gt;','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','&lt;&gt;','done'),('state','&lt;&gt;','cancel'),('state','&lt;&gt;','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','&lt;&gt;','done'),('state','&lt;&gt;','cancel'),('state','&lt;&gt;','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>

1530
addons/crm/i18n/sk.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 "内容"

View File

@ -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

View File

@ -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"

View File

@ -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))

View File

@ -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
"""

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"
}

View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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 ""

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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 "新建员工"

View File

@ -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"

View File

@ -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

View File

@ -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