[MERGE]sync with trunk
bzr revid: sgo@tinyerp.com-20130626111029-e6szwugpewn3cd2g
This commit is contained in:
commit
2e272a7687
|
@ -65,12 +65,11 @@ class bank(osv.osv):
|
|||
# Find the code and parent of the bank account to create
|
||||
dig = 6
|
||||
current_num = 1
|
||||
ids = obj_acc.search(cr, uid, [('type','=','liquidity'), ('company_id', '=', bank.company_id.id)], context=context)
|
||||
ids = obj_acc.search(cr, uid, [('type','=','liquidity'), ('company_id', '=', bank.company_id.id), ('parent_id', '!=', False)], context=context)
|
||||
# No liquidity account exists, no template available
|
||||
if not ids: continue
|
||||
|
||||
ref_acc_bank_temp = obj_acc.browse(cr, uid, ids[0], context=context)
|
||||
ref_acc_bank = ref_acc_bank_temp.parent_id
|
||||
ref_acc_bank = obj_acc.browse(cr, uid, ids[0], context=context).parent_id
|
||||
while True:
|
||||
new_code = str(ref_acc_bank.code.ljust(dig-len(str(current_num)), '0')) + str(current_num)
|
||||
ids = obj_acc.search(cr, uid, [('code', '=', new_code), ('company_id', '=', bank.company_id.id)])
|
||||
|
@ -82,7 +81,7 @@ class bank(osv.osv):
|
|||
'name': name,
|
||||
'code': new_code,
|
||||
'type': 'liquidity',
|
||||
'user_type': ref_acc_bank_temp.user_type.id,
|
||||
'user_type': ref_acc_bank.user_type.id,
|
||||
'reconcile': False,
|
||||
'parent_id': ref_acc_bank.id,
|
||||
'company_id': bank.company_id.id,
|
||||
|
|
|
@ -51,9 +51,12 @@ class account_invoice(osv.osv):
|
|||
company_id = context.get('company_id', user.company_id.id)
|
||||
type2journal = {'out_invoice': 'sale', 'in_invoice': 'purchase', 'out_refund': 'sale_refund', 'in_refund': 'purchase_refund'}
|
||||
journal_obj = self.pool.get('account.journal')
|
||||
res = journal_obj.search(cr, uid, [('type', '=', type2journal.get(type_inv, 'sale')),
|
||||
('company_id', '=', company_id)],
|
||||
limit=1)
|
||||
domain = [('company_id', '=', company_id)]
|
||||
if isinstance(type_inv, list):
|
||||
domain.append(('type', 'in', [type2journal.get(type) for type in type_inv if type2journal.get(type)]))
|
||||
else:
|
||||
domain.append(('type', '=', type2journal.get(type_inv, 'sale')))
|
||||
res = journal_obj.search(cr, uid, domain, limit=1)
|
||||
return res and res[0] or False
|
||||
|
||||
def _get_currency(self, cr, uid, context=None):
|
||||
|
@ -578,6 +581,10 @@ class account_invoice(osv.osv):
|
|||
return {'value': {}}
|
||||
|
||||
def onchange_company_id(self, cr, uid, ids, company_id, part_id, type, invoice_line, currency_id, context=None):
|
||||
#TODO: add the missing context parameter when forward-porting in trunk so we can remove
|
||||
# this hack!
|
||||
context = self.pool['res.users'].context_get(cr, uid)
|
||||
|
||||
val = {}
|
||||
dom = {}
|
||||
obj_journal = self.pool.get('account.journal')
|
||||
|
@ -634,14 +641,13 @@ class account_invoice(osv.osv):
|
|||
else:
|
||||
continue
|
||||
if company_id and type:
|
||||
if type in ('out_invoice'):
|
||||
journal_type = 'sale'
|
||||
elif type in ('out_refund'):
|
||||
journal_type = 'sale_refund'
|
||||
elif type in ('in_refund'):
|
||||
journal_type = 'purchase_refund'
|
||||
else:
|
||||
journal_type = 'purchase'
|
||||
journal_mapping = {
|
||||
'out_invoice': 'sale',
|
||||
'out_refund': 'sale_refund',
|
||||
'in_refund': 'purchase_refund',
|
||||
'in_invoice': 'purchase',
|
||||
}
|
||||
journal_type = journal_mapping[type]
|
||||
journal_ids = obj_journal.search(cr, uid, [('company_id','=',company_id), ('type', '=', journal_type)])
|
||||
if journal_ids:
|
||||
val['journal_id'] = journal_ids[0]
|
||||
|
@ -651,7 +657,12 @@ class account_invoice(osv.osv):
|
|||
if r[1] == 'journal_id' and r[2] in journal_ids:
|
||||
val['journal_id'] = r[2]
|
||||
if not val.get('journal_id', False):
|
||||
raise osv.except_osv(_('Configuration Error!'), (_('Cannot find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration\Journals\Journals.') % (journal_type)))
|
||||
journal_type_map = dict(obj_journal._columns['type'].selection)
|
||||
journal_type_label = self.pool['ir.translation']._get_source(cr, uid, None, ('code','selection'),
|
||||
context.get('lang'),
|
||||
journal_type_map.get(journal_type))
|
||||
raise osv.except_osv(_('Configuration Error!'),
|
||||
_('Cannot find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration\Journals\Journals.') % ('"%s"' % journal_type_label))
|
||||
dom = {'journal_id': [('id', 'in', journal_ids)]}
|
||||
else:
|
||||
journal_ids = obj_journal.search(cr, uid, [])
|
||||
|
@ -968,7 +979,7 @@ class account_invoice(osv.osv):
|
|||
total, total_currency, iml = self.compute_invoice_totals(cr, uid, inv, company_currency, ref, iml, context=ctx)
|
||||
acc_id = inv.account_id.id
|
||||
|
||||
name = inv['name'] or '/'
|
||||
name = inv['name'] or inv['supplier_invoice_number'] or '/'
|
||||
totlines = False
|
||||
if inv.payment_term:
|
||||
totlines = payment_term_obj.compute(cr,
|
||||
|
@ -1167,12 +1178,12 @@ class account_invoice(osv.osv):
|
|||
if not ids:
|
||||
return []
|
||||
types = {
|
||||
'out_invoice': 'Invoice ',
|
||||
'in_invoice': 'Sup. Invoice ',
|
||||
'out_refund': 'Refund ',
|
||||
'in_refund': 'Supplier Refund ',
|
||||
'out_invoice': _('Invoice'),
|
||||
'in_invoice': _('Supplier Invoice'),
|
||||
'out_refund': _('Refund'),
|
||||
'in_refund': _('Supplier Refund'),
|
||||
}
|
||||
return [(r['id'], (r['number']) or types[r['type']] + (r['name'] or '')) for r in self.read(cr, uid, ids, ['type', 'number', 'name'], context, load='_classic_write')]
|
||||
return [(r['id'], '%s %s' % (r['number'] or types[r['type']], r['name'] or '')) for r in self.read(cr, uid, ids, ['type', 'number', 'name'], context, load='_classic_write')]
|
||||
|
||||
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
|
||||
if not args:
|
||||
|
|
|
@ -1066,12 +1066,12 @@ class account_move_line(osv.osv):
|
|||
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
ctx = context.copy()
|
||||
if ('journal_id' not in ctx):
|
||||
if not ctx.get('journal_id'):
|
||||
if line.move_id:
|
||||
ctx['journal_id'] = line.move_id.journal_id.id
|
||||
else:
|
||||
ctx['journal_id'] = line.journal_id.id
|
||||
if ('period_id' not in ctx):
|
||||
if not ctx.get('period_id'):
|
||||
if line.move_id:
|
||||
ctx['period_id'] = line.move_id.period_id.id
|
||||
else:
|
||||
|
|
|
@ -585,7 +585,10 @@
|
|||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="ref"/>
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="['|',('parent_id','=',False),('is_company','=',True)]"/>
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[
|
||||
'&',
|
||||
'|',('parent_id','=',False),('is_company','=',True),
|
||||
'|',('customer','=',True),('supplier','=',True)]"/>
|
||||
<field name="type" on_change="onchange_type(partner_id, type)"/>
|
||||
<field name="account_id" options='{"no_open":True}' domain="[('journal_id','=',parent.journal_id), ('company_id', '=', parent.company_id)]"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '<>', 'view')]"/>
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-06-07 12:52+0000\n"
|
||||
"PO-Revision-Date: 2013-06-19 11:49+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-08 05:52+0000\n"
|
||||
"X-Generator: Launchpad (build 16667)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
|
||||
|
@ -134,10 +134,10 @@ msgstr ""
|
|||
#: code:addons/account/account.py:686
|
||||
#: code:addons/account/account.py:781
|
||||
#: code:addons/account/account.py:1058
|
||||
#: code:addons/account/account_invoice.py:817
|
||||
#: code:addons/account/account_invoice.py:820
|
||||
#: code:addons/account/account_invoice.py:823
|
||||
#: code:addons/account/account_invoice.py:1542
|
||||
#: code:addons/account/account_invoice.py:826
|
||||
#: code:addons/account/account_invoice.py:1545
|
||||
#: code:addons/account/account_move_line.py:98
|
||||
#: code:addons/account/account_move_line.py:771
|
||||
#: code:addons/account/account_move_line.py:824
|
||||
|
@ -257,7 +257,8 @@ msgid ""
|
|||
"entries."
|
||||
msgstr ""
|
||||
"Тип счета используется в информационных целях, при создании официальных "
|
||||
"отчетов для конкретной страны, определении правил"
|
||||
"отчетов для конкретной страны, определении правил закрытия финансового года "
|
||||
"и проводок открытия."
|
||||
|
||||
#. module: account
|
||||
#: field:account.config.settings,sale_refund_sequence_next:0
|
||||
|
@ -285,7 +286,7 @@ msgstr "Разрешить списание"
|
|||
#. module: account
|
||||
#: view:account.analytic.chart:0
|
||||
msgid "Select the Period for Analysis"
|
||||
msgstr "Выберите период для проведения анализа"
|
||||
msgstr "Выберите период для анализа"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,help:account.action_invoice_tree3
|
||||
|
@ -355,7 +356,7 @@ msgid "Allow multi currencies"
|
|||
msgstr "Разрешить мульти-валютность"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:74
|
||||
#: code:addons/account/account_invoice.py:77
|
||||
#, python-format
|
||||
msgid "You must define an analytic journal of type '%s'!"
|
||||
msgstr "Вы должны определить журнал аналитики типа '%s'!"
|
||||
|
@ -757,7 +758,9 @@ msgstr ""
|
|||
#: selection:account.common.partner.report,result_selection:0
|
||||
#: selection:account.partner.balance,result_selection:0
|
||||
#: selection:account.partner.ledger,result_selection:0
|
||||
#: report:account.third_party_ledger:0
|
||||
#: code:addons/account/report/account_partner_balance.py:297
|
||||
#: code:addons/account/report/account_partner_ledger.py:272
|
||||
#, python-format
|
||||
msgid "Receivable Accounts"
|
||||
msgstr "Счета к получению"
|
||||
|
@ -797,7 +800,7 @@ msgid "Are you sure you want to create entries?"
|
|||
msgstr "Вы действительно хотите создать проводки?"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:1358
|
||||
#: code:addons/account/account_invoice.py:1361
|
||||
#, python-format
|
||||
msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)."
|
||||
msgstr "Счет частично оплачен: %s%s из %s%s (%s%s остаток)."
|
||||
|
@ -866,7 +869,7 @@ msgid "Type"
|
|||
msgstr "Тип"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:823
|
||||
#: code:addons/account/account_invoice.py:826
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Taxes are missing!\n"
|
||||
|
@ -1052,7 +1055,7 @@ msgid "Liability"
|
|||
msgstr "Обязательства"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:896
|
||||
#: code:addons/account/account_invoice.py:899
|
||||
#, python-format
|
||||
msgid "Please define sequence on the journal related to this invoice."
|
||||
msgstr "Пожалуйста, определите нумерацию в журнале, связанном с этим счетом."
|
||||
|
@ -1128,8 +1131,8 @@ msgstr "Возможности"
|
|||
#. module: account
|
||||
#: code:addons/account/account.py:2346
|
||||
#: code:addons/account/account_bank_statement.py:424
|
||||
#: code:addons/account/account_invoice.py:74
|
||||
#: code:addons/account/account_invoice.py:772
|
||||
#: code:addons/account/account_invoice.py:77
|
||||
#: code:addons/account/account_invoice.py:775
|
||||
#: code:addons/account/account_move_line.py:195
|
||||
#, python-format
|
||||
msgid "No Analytic Journal !"
|
||||
|
@ -1168,7 +1171,7 @@ msgstr "Название счета."
|
|||
#. module: account
|
||||
#: field:account.journal,with_last_closing_balance:0
|
||||
msgid "Opening With Last Closing Balance"
|
||||
msgstr ""
|
||||
msgstr "Открыть с предыдущим остатком"
|
||||
|
||||
#. module: account
|
||||
#: help:account.tax.code,notprintable:0
|
||||
|
@ -1567,8 +1570,10 @@ msgid "%s (copy)"
|
|||
msgstr "%s (копия)"
|
||||
|
||||
#. module: account
|
||||
#: report:account.account.balance:0
|
||||
#: selection:account.balance.report,display_account:0
|
||||
#: selection:account.common.account.report,display_account:0
|
||||
#: report:account.general.ledger_landscape:0
|
||||
#: selection:account.partner.balance,display_partner:0
|
||||
#: selection:account.report.general.ledger,display_account:0
|
||||
msgid "With balance is not equal to 0"
|
||||
|
@ -1803,7 +1808,7 @@ msgstr ""
|
|||
#: view:account.invoice:0
|
||||
#: view:account.invoice.report:0
|
||||
#: field:account.move.line,invoice:0
|
||||
#: code:addons/account/account_invoice.py:1154
|
||||
#: code:addons/account/account_invoice.py:1157
|
||||
#: model:ir.model,name:account.model_account_invoice
|
||||
#: model:res.request.link,name:account.req_link_invoice
|
||||
#, python-format
|
||||
|
@ -2029,6 +2034,12 @@ msgid ""
|
|||
"useful because it enables you to preview at any time the tax that you owe at "
|
||||
"the start and end of the month or quarter."
|
||||
msgstr ""
|
||||
"Это меню печати налоговой декларации на основе счетов и платежей. Выберите "
|
||||
"один или несколько периодов финансового года. Информация, необходимая для "
|
||||
"налоговой декларации генерируется автоматически OpenERP из счета (или "
|
||||
"платежей, в некоторых странах). Эти данные обновляются в режиме реального "
|
||||
"времени. Это очень полезно, потому что позволяет просматривать в любое время "
|
||||
"налоги, которые вы должны в начале и в конце месяца или квартала."
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:409
|
||||
|
@ -2057,9 +2068,9 @@ msgstr ""
|
|||
#: code:addons/account/account_bank_statement.py:419
|
||||
#: code:addons/account/account_cash_statement.py:256
|
||||
#: code:addons/account/account_cash_statement.py:300
|
||||
#: code:addons/account/account_invoice.py:896
|
||||
#: code:addons/account/account_invoice.py:930
|
||||
#: code:addons/account/account_invoice.py:1121
|
||||
#: code:addons/account/account_invoice.py:899
|
||||
#: code:addons/account/account_invoice.py:933
|
||||
#: code:addons/account/account_invoice.py:1124
|
||||
#: code:addons/account/account_move_line.py:579
|
||||
#: code:addons/account/account_move_line.py:828
|
||||
#: code:addons/account/account_move_line.py:851
|
||||
|
@ -2104,7 +2115,7 @@ msgstr ""
|
|||
" </p><p>\n"
|
||||
" Вы можете управлять счетом от поставщика в соответствии с\n"
|
||||
" тем, что вы приобрели. OpenERP также может создавать\n"
|
||||
" черновые счета автоматически из заказов на закупку.\n"
|
||||
" черновые счета автоматически из заказов закупки.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
|
@ -2230,7 +2241,7 @@ msgstr "Счет - печать журнала"
|
|||
#. module: account
|
||||
#: model:ir.model,name:account.model_product_category
|
||||
msgid "Product Category"
|
||||
msgstr "Категория ТМЦ"
|
||||
msgstr "Категория продукции"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:656
|
||||
|
@ -2307,7 +2318,9 @@ msgstr "Управление активами"
|
|||
#: selection:account.common.partner.report,result_selection:0
|
||||
#: selection:account.partner.balance,result_selection:0
|
||||
#: selection:account.partner.ledger,result_selection:0
|
||||
#: report:account.third_party_ledger:0
|
||||
#: code:addons/account/report/account_partner_balance.py:299
|
||||
#: code:addons/account/report/account_partner_ledger.py:274
|
||||
#, python-format
|
||||
msgid "Payable Accounts"
|
||||
msgstr "Кредиторская задолженность"
|
||||
|
@ -2600,7 +2613,7 @@ msgstr "Учетный год"
|
|||
#: help:accounting.report,fiscalyear_id:0
|
||||
#: help:accounting.report,fiscalyear_id_cmp:0
|
||||
msgid "Keep empty for all open fiscal year"
|
||||
msgstr "Keep empty for all open fiscal year"
|
||||
msgstr "Оставьте пустым для всех открытых финансовых лет"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:653
|
||||
|
@ -2623,7 +2636,7 @@ msgid "Create an Account Based on this Template"
|
|||
msgstr "Создать счет на основе этого шаблона"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:930
|
||||
#: code:addons/account/account_invoice.py:933
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot create the invoice.\n"
|
||||
|
@ -2896,11 +2909,11 @@ msgstr "Счета"
|
|||
#. module: account
|
||||
#: code:addons/account/account.py:3541
|
||||
#: code:addons/account/account_bank_statement.py:405
|
||||
#: code:addons/account/account_invoice.py:504
|
||||
#: code:addons/account/account_invoice.py:606
|
||||
#: code:addons/account/account_invoice.py:621
|
||||
#: code:addons/account/account_invoice.py:629
|
||||
#: code:addons/account/account_invoice.py:654
|
||||
#: code:addons/account/account_invoice.py:507
|
||||
#: code:addons/account/account_invoice.py:609
|
||||
#: code:addons/account/account_invoice.py:624
|
||||
#: code:addons/account/account_invoice.py:632
|
||||
#: code:addons/account/account_invoice.py:657
|
||||
#: code:addons/account/account_move_line.py:536
|
||||
#, python-format
|
||||
msgid "Configuration Error!"
|
||||
|
@ -2932,7 +2945,7 @@ msgstr "Метка"
|
|||
#. module: account
|
||||
#: view:res.partner.bank:0
|
||||
msgid "Accounting Information"
|
||||
msgstr "Бухгалтерская информация"
|
||||
msgstr "Учетная информация"
|
||||
|
||||
#. module: account
|
||||
#: view:account.tax:0
|
||||
|
@ -3098,6 +3111,8 @@ msgid ""
|
|||
"Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-"
|
||||
"Forma' state."
|
||||
msgstr ""
|
||||
"Выбранные счета нельзя подтвердить, так как состояние не \"Черновик\" и не "
|
||||
"\"Проформа\""
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:1071
|
||||
|
@ -3130,7 +3145,7 @@ msgstr "Журнал продаж"
|
|||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:2346
|
||||
#: code:addons/account/account_invoice.py:772
|
||||
#: code:addons/account/account_invoice.py:775
|
||||
#: code:addons/account/account_move_line.py:195
|
||||
#, python-format
|
||||
msgid "You have to define an analytic journal on the '%s' journal!"
|
||||
|
@ -3299,7 +3314,7 @@ msgid "Fiscal Position"
|
|||
msgstr "Система налогообложения"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:820
|
||||
#: code:addons/account/account_invoice.py:823
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Tax base different!\n"
|
||||
|
@ -3464,7 +3479,7 @@ msgstr "Вид"
|
|||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:3460
|
||||
#: code:addons/account/account_bank.py:95
|
||||
#: code:addons/account/account_bank.py:94
|
||||
#, python-format
|
||||
msgid "BNK"
|
||||
msgstr "BNK"
|
||||
|
@ -3734,7 +3749,7 @@ msgstr ""
|
|||
"иметь названия как и у самого документа"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:1013
|
||||
#: code:addons/account/account_invoice.py:1016
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot create an invoice on a centralized journal. Uncheck the "
|
||||
|
@ -3749,7 +3764,7 @@ msgid "Starting Balance"
|
|||
msgstr "Начальный баланс"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:1462
|
||||
#: code:addons/account/account_invoice.py:1465
|
||||
#, python-format
|
||||
msgid "No Partner Defined !"
|
||||
msgstr "Партнер не определен!"
|
||||
|
@ -4040,9 +4055,13 @@ msgid "VAT :"
|
|||
msgstr "НДС:"
|
||||
|
||||
#. module: account
|
||||
#: report:account.account.balance:0
|
||||
#: report:account.central.journal:0
|
||||
#: view:account.config.settings:0
|
||||
#: report:account.general.journal:0
|
||||
#: report:account.general.ledger:0
|
||||
#: report:account.general.ledger_landscape:0
|
||||
#: report:account.journal.period.print:0
|
||||
#: report:account.partner.balance:0
|
||||
#: report:account.third_party_ledger:0
|
||||
#: report:account.third_party_ledger_other:0
|
||||
|
@ -4145,8 +4164,10 @@ msgstr ""
|
|||
"условии оплаты контрагента."
|
||||
|
||||
#. module: account
|
||||
#: report:account.account.balance:0
|
||||
#: selection:account.balance.report,display_account:0
|
||||
#: selection:account.common.account.report,display_account:0
|
||||
#: report:account.general.ledger_landscape:0
|
||||
#: selection:account.report.general.ledger,display_account:0
|
||||
#: selection:account.tax,type_tax_use:0
|
||||
#: selection:account.tax.template,type_tax_use:0
|
||||
|
@ -4283,7 +4304,7 @@ msgstr "Открыть счет"
|
|||
#. module: account
|
||||
#: field:account.invoice.tax,factor_tax:0
|
||||
msgid "Multipication factor Tax code"
|
||||
msgstr ""
|
||||
msgstr "Коэффициент кода налога"
|
||||
|
||||
#. module: account
|
||||
#: field:account.config.settings,complete_tax_set:0
|
||||
|
@ -4409,7 +4430,7 @@ msgid "Consolidated Children"
|
|||
msgstr "Субсчета"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:570
|
||||
#: code:addons/account/account_invoice.py:573
|
||||
#: code:addons/account/wizard/account_invoice_refund.py:146
|
||||
#, python-format
|
||||
msgid "Insufficient Data!"
|
||||
|
@ -4592,7 +4613,7 @@ msgstr ""
|
|||
#: field:account.account,shortcut:0
|
||||
#: field:account.account.template,shortcut:0
|
||||
msgid "Shortcut"
|
||||
msgstr "Горячая клвиша"
|
||||
msgstr "Закладка"
|
||||
|
||||
#. module: account
|
||||
#: view:account.account:0
|
||||
|
@ -4666,6 +4687,8 @@ msgid ""
|
|||
"Error!\n"
|
||||
"The duration of the Period(s) is/are invalid."
|
||||
msgstr ""
|
||||
"Ошибка!\n"
|
||||
"Не допустимая продолжительность периода."
|
||||
|
||||
#. module: account
|
||||
#: field:account.entries.report,month:0
|
||||
|
@ -4690,8 +4713,8 @@ msgid "Supplier invoice sequence"
|
|||
msgstr "Нумерация счетов поставщиков"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:607
|
||||
#: code:addons/account/account_invoice.py:622
|
||||
#: code:addons/account/account_invoice.py:610
|
||||
#: code:addons/account/account_invoice.py:625
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot find a chart of account, you should create one from Settings\\"
|
||||
|
@ -4826,7 +4849,7 @@ msgstr "Документ из счета или платежа"
|
|||
msgid ""
|
||||
"There is currently no company without chart of account. The wizard will "
|
||||
"therefore not be executed."
|
||||
msgstr ""
|
||||
msgstr "Не ни одной компании без плана счетов. Мастер не будет запущен."
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_wizard_multi_chart
|
||||
|
@ -4971,7 +4994,7 @@ msgstr ""
|
|||
"Нельзя создать счет, который имеет родительский счет другой компании."
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:655
|
||||
#: code:addons/account/account_invoice.py:658
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot find any account journal of %s type for this company.\n"
|
||||
|
@ -5019,7 +5042,7 @@ msgstr "Контроль типа"
|
|||
#. module: account
|
||||
#: help:account.journal,default_credit_account_id:0
|
||||
msgid "It acts as a default account for credit amount"
|
||||
msgstr "Выступает в качестве счета по умолчанию для сумм по кредиту"
|
||||
msgstr "Используется как кредитовый счет по умолчанию"
|
||||
|
||||
#. module: account
|
||||
#: view:cash.box.out:0
|
||||
|
@ -5036,7 +5059,7 @@ msgstr "Отменено"
|
|||
#. module: account
|
||||
#: help:account.config.settings,group_proforma_invoices:0
|
||||
msgid "Allows you to put invoices in pro-forma state."
|
||||
msgstr ""
|
||||
msgstr "Позволяет устанавливать статус \"Проформа\" для счетов."
|
||||
|
||||
#. module: account
|
||||
#: view:account.journal:0
|
||||
|
@ -5050,6 +5073,7 @@ msgid ""
|
|||
"It adds the currency column on report if the currency differs from the "
|
||||
"company currency."
|
||||
msgstr ""
|
||||
"Добавляет колонку валюты в отчет, если валюта отлична от валюты компании."
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:3394
|
||||
|
@ -5281,7 +5305,7 @@ msgstr "Проводки журнала для проверки"
|
|||
#. module: account
|
||||
#: selection:res.company,tax_calculation_rounding_method:0
|
||||
msgid "Round Globally"
|
||||
msgstr ""
|
||||
msgstr "Глобальное округление"
|
||||
|
||||
#. module: account
|
||||
#: view:account.bank.statement:0
|
||||
|
@ -5295,7 +5319,7 @@ msgid "Tax Application"
|
|||
msgstr "Применение налога"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:919
|
||||
#: code:addons/account/account_invoice.py:922
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please verify the price of the invoice !\n"
|
||||
|
@ -5561,7 +5585,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: view:account.invoice:0
|
||||
msgid "Pro Forma Invoice "
|
||||
msgstr "Предварительный счет "
|
||||
msgstr "Проформа счета "
|
||||
|
||||
#. module: account
|
||||
#: selection:account.subscription,period_type:0
|
||||
|
@ -5597,7 +5621,7 @@ msgstr "Прибыль и убыток (счет доходов)"
|
|||
#. module: account
|
||||
#: field:account.journal,allow_date:0
|
||||
msgid "Check Date in Period"
|
||||
msgstr ""
|
||||
msgstr "Проверка даты в периоде"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.ui.menu,name:account.final_accounting_reports
|
||||
|
@ -5622,7 +5646,7 @@ msgid "Compute Code (if type=code)"
|
|||
msgstr "Вычислить код (если тип=код)"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:505
|
||||
#: code:addons/account/account_invoice.py:508
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot find a chart of accounts for this company, you should create one."
|
||||
|
@ -5973,7 +5997,7 @@ msgstr "Сумма в валюте"
|
|||
#. module: account
|
||||
#: selection:res.company,tax_calculation_rounding_method:0
|
||||
msgid "Round per Line"
|
||||
msgstr ""
|
||||
msgstr "Округление каждой позиции"
|
||||
|
||||
#. module: account
|
||||
#: report:account.analytic.account.balance:0
|
||||
|
@ -6063,7 +6087,7 @@ msgstr "Открыть кассу"
|
|||
#. module: account
|
||||
#: selection:account.financial.report,style_overwrite:0
|
||||
msgid "Automatic formatting"
|
||||
msgstr ""
|
||||
msgstr "Автоматическое форматирование"
|
||||
|
||||
#. module: account
|
||||
#: view:account.move.line.reconcile:0
|
||||
|
@ -6166,7 +6190,7 @@ msgstr "Доход"
|
|||
#: view:account.config.settings:0
|
||||
#: view:account.invoice:0
|
||||
#: view:account.invoice.report:0
|
||||
#: code:addons/account/account_invoice.py:387
|
||||
#: code:addons/account/account_invoice.py:390
|
||||
#, python-format
|
||||
msgid "Supplier"
|
||||
msgstr "Поставщик"
|
||||
|
@ -6186,7 +6210,7 @@ msgid "Account n°"
|
|||
msgstr "№ счета"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:92
|
||||
#: code:addons/account/account_invoice.py:95
|
||||
#, python-format
|
||||
msgid "Free Reference"
|
||||
msgstr "Свободная Ссылка"
|
||||
|
@ -6196,7 +6220,9 @@ msgstr "Свободная Ссылка"
|
|||
#: selection:account.common.partner.report,result_selection:0
|
||||
#: selection:account.partner.balance,result_selection:0
|
||||
#: selection:account.partner.ledger,result_selection:0
|
||||
#: report:account.third_party_ledger:0
|
||||
#: code:addons/account/report/account_partner_balance.py:301
|
||||
#: code:addons/account/report/account_partner_ledger.py:276
|
||||
#, python-format
|
||||
msgid "Receivable and Payable Accounts"
|
||||
msgstr "Счета дебиторской и кредиторской задолженности"
|
||||
|
@ -6323,7 +6349,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:account.journal,loss_account_id:0
|
||||
msgid "Loss Account"
|
||||
msgstr ""
|
||||
msgstr "Счет убытков"
|
||||
|
||||
#. module: account
|
||||
#: field:account.tax,account_collected_id:0
|
||||
|
@ -6501,7 +6527,7 @@ msgid "Models"
|
|||
msgstr ""
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:1121
|
||||
#: code:addons/account/account_invoice.py:1124
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot cancel an invoice which is partially paid. You need to "
|
||||
|
@ -6673,7 +6699,7 @@ msgid "You cannot create journal items on closed account."
|
|||
msgstr ""
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:630
|
||||
#: code:addons/account/account_invoice.py:633
|
||||
#, python-format
|
||||
msgid "Invoice line account's company and invoice's compnay does not match."
|
||||
msgstr ""
|
||||
|
@ -6718,7 +6744,7 @@ msgstr "Собственные средства"
|
|||
#. module: account
|
||||
#: field:account.journal,internal_account_id:0
|
||||
msgid "Internal Transfers Account"
|
||||
msgstr ""
|
||||
msgstr "Счет внутренних переводов"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/wizard/pos_box.py:32
|
||||
|
@ -6734,7 +6760,7 @@ msgstr "Процент"
|
|||
#. module: account
|
||||
#: selection:account.config.settings,tax_calculation_rounding_method:0
|
||||
msgid "Round globally"
|
||||
msgstr ""
|
||||
msgstr "Глобальное округление"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.report.general.ledger,sortby:0
|
||||
|
@ -6825,7 +6851,7 @@ msgstr ""
|
|||
#: code:addons/account/account.py:1453
|
||||
#: code:addons/account/account.py:1482
|
||||
#: code:addons/account/account.py:1489
|
||||
#: code:addons/account/account_invoice.py:1012
|
||||
#: code:addons/account/account_invoice.py:1015
|
||||
#: code:addons/account/account_move_line.py:1005
|
||||
#: code:addons/account/wizard/account_automatic_reconcile.py:148
|
||||
#: code:addons/account/wizard/account_fiscalyear_close.py:88
|
||||
|
@ -6912,7 +6938,7 @@ msgstr ""
|
|||
#: report:account.invoice:0
|
||||
#: selection:account.invoice,type:0
|
||||
#: selection:account.invoice.report,type:0
|
||||
#: code:addons/account/account_invoice.py:1157
|
||||
#: code:addons/account/account_invoice.py:1160
|
||||
#: selection:report.invoice.created,type:0
|
||||
#, python-format
|
||||
msgid "Supplier Refund"
|
||||
|
@ -7553,7 +7579,7 @@ msgstr "Для процентных налогов, введите % как чи
|
|||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_account_report_tree_hierarchy
|
||||
msgid "Financial Reports Hierarchy"
|
||||
msgstr ""
|
||||
msgstr "Структура финансовых отчетов"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.act_account_invoice_partner_relation
|
||||
|
@ -7718,7 +7744,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:account.config.settings,group_proforma_invoices:0
|
||||
msgid "Allow pro-forma invoices"
|
||||
msgstr ""
|
||||
msgstr "Разрешить проформы счетов"
|
||||
|
||||
#. module: account
|
||||
#: view:account.bank.statement:0
|
||||
|
@ -7789,7 +7815,7 @@ msgstr "Журнал счета"
|
|||
#. module: account
|
||||
#: field:account.config.settings,tax_calculation_rounding_method:0
|
||||
msgid "Tax calculation rounding method"
|
||||
msgstr ""
|
||||
msgstr "Метод округления при расчете налога"
|
||||
|
||||
#. module: account
|
||||
#: model:process.node,name:account.process_node_paidinvoice0
|
||||
|
@ -7912,7 +7938,7 @@ msgstr "Нормальный"
|
|||
#: model:ir.actions.act_window,name:account.action_email_templates
|
||||
#: model:ir.ui.menu,name:account.menu_email_templates
|
||||
msgid "Email Templates"
|
||||
msgstr ""
|
||||
msgstr "Шаблоны писем"
|
||||
|
||||
#. module: account
|
||||
#: view:account.move.line:0
|
||||
|
@ -7974,7 +8000,7 @@ msgstr "Нет номера части !"
|
|||
#: view:account.financial.report:0
|
||||
#: model:ir.ui.menu,name:account.menu_account_report_tree_hierarchy
|
||||
msgid "Account Reports Hierarchy"
|
||||
msgstr ""
|
||||
msgstr "Структура отчетов по счетам"
|
||||
|
||||
#. module: account
|
||||
#: help:account.account.template,chart_template_id:0
|
||||
|
@ -8050,6 +8076,8 @@ msgstr "Отмена выбранных счетов"
|
|||
msgid ""
|
||||
"This field is used to generate legal reports: profit and loss, balance sheet."
|
||||
msgstr ""
|
||||
"Это поле используется для генерации официальных отчетов: прибыль и убыток, "
|
||||
"баланс."
|
||||
|
||||
#. module: account
|
||||
#: selection:account.entries.report,month:0
|
||||
|
@ -8061,7 +8089,7 @@ msgid "May"
|
|||
msgstr "Май"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:817
|
||||
#: code:addons/account/account_invoice.py:820
|
||||
#, python-format
|
||||
msgid "Global taxes defined, but they are not in invoice lines !"
|
||||
msgstr ""
|
||||
|
@ -8102,7 +8130,7 @@ msgstr "Провести записи журнала"
|
|||
#: view:account.config.settings:0
|
||||
#: view:account.invoice:0
|
||||
#: view:account.invoice.report:0
|
||||
#: code:addons/account/account_invoice.py:385
|
||||
#: code:addons/account/account_invoice.py:388
|
||||
#, python-format
|
||||
msgid "Customer"
|
||||
msgstr "Заказчик"
|
||||
|
@ -8303,7 +8331,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:res.company,tax_calculation_rounding_method:0
|
||||
msgid "Tax Calculation Rounding Method"
|
||||
msgstr ""
|
||||
msgstr "Метод округления при расчете налога"
|
||||
|
||||
#. module: account
|
||||
#: field:account.entries.report,move_line_state:0
|
||||
|
@ -8357,7 +8385,7 @@ msgid "Select a currency to apply on the invoice"
|
|||
msgstr "Выбрать валюту применяемую в счете"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:898
|
||||
#: code:addons/account/account_invoice.py:901
|
||||
#, python-format
|
||||
msgid "No Invoice Lines !"
|
||||
msgstr "Нет позиций в счете !"
|
||||
|
@ -8433,7 +8461,7 @@ msgid "Associated Partner"
|
|||
msgstr "Связанный контрагент"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:1462
|
||||
#: code:addons/account/account_invoice.py:1465
|
||||
#, python-format
|
||||
msgid "You must first select a partner !"
|
||||
msgstr "Сначала вы должны выбрать партнера !"
|
||||
|
@ -8998,7 +9026,7 @@ msgstr "Вы уверены?"
|
|||
#. module: account
|
||||
#: view:account.journal:0
|
||||
msgid "Accounts Allowed (empty for no control)"
|
||||
msgstr "Разрешенные счета (остваьте пустым для снятия проверок)"
|
||||
msgstr "Разрешенные счета (оставьте пустым для снятия проверок)"
|
||||
|
||||
#. module: account
|
||||
#: field:account.config.settings,sale_tax_rate:0
|
||||
|
@ -9384,7 +9412,7 @@ msgid "Purchase Tax(%)"
|
|||
msgstr "Налог на покупку(%)"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:898
|
||||
#: code:addons/account/account_invoice.py:901
|
||||
#, python-format
|
||||
msgid "Please create some invoice lines."
|
||||
msgstr "Пожалуйста, создайте позиции счета"
|
||||
|
@ -9396,6 +9424,8 @@ msgid ""
|
|||
"Please check that the field 'Internal Transfers Account' is set on the "
|
||||
"payment method '%s'."
|
||||
msgstr ""
|
||||
"Пожалуйста, проверьте , что поле \"Счет внутренних переводов\" установлено "
|
||||
"для способа оплаты '%s'."
|
||||
|
||||
#. module: account
|
||||
#: field:account.vat.declaration,display_detail:0
|
||||
|
@ -9448,7 +9478,7 @@ msgstr "Конец периода"
|
|||
#: model:ir.actions.act_window,name:account.action_account_report
|
||||
#: model:ir.ui.menu,name:account.menu_account_reports
|
||||
msgid "Financial Reports"
|
||||
msgstr ""
|
||||
msgstr "Финансовые отчеты"
|
||||
|
||||
#. module: account
|
||||
#: model:account.account.type,name:account.account_type_liability_view1
|
||||
|
@ -9737,6 +9767,7 @@ msgid ""
|
|||
"This field contains the information related to the numbering of the journal "
|
||||
"entries of this journal."
|
||||
msgstr ""
|
||||
"Это поле содержит информацию, связанную с нумерацией проводок этого журнала."
|
||||
|
||||
#. module: account
|
||||
#: field:account.invoice,sent:0
|
||||
|
@ -9768,7 +9799,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: model:ir.ui.menu,name:account.menu_finance_periodical_processing
|
||||
msgid "Periodic Processing"
|
||||
msgstr ""
|
||||
msgstr "Периодическая обработка"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice.report:0
|
||||
|
@ -9940,7 +9971,7 @@ msgid "Unreconciled"
|
|||
msgstr "Не сверенные"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:919
|
||||
#: code:addons/account/account_invoice.py:922
|
||||
#, python-format
|
||||
msgid "Bad total !"
|
||||
msgstr "Плохой итог !"
|
||||
|
@ -10046,7 +10077,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:account.bank.statement.line,name:0
|
||||
msgid "OBI"
|
||||
msgstr ""
|
||||
msgstr "Назначение"
|
||||
|
||||
#. module: account
|
||||
#: help:res.partner,property_account_payable:0
|
||||
|
@ -10196,7 +10227,7 @@ msgstr "Апрель"
|
|||
#. module: account
|
||||
#: model:account.financial.report,name:account.account_financial_report_profitloss_toreport0
|
||||
msgid "Profit (Loss) to report"
|
||||
msgstr ""
|
||||
msgstr "Прибыль (убыток) в отчет"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:379
|
||||
|
@ -10401,7 +10432,7 @@ msgstr "Всего"
|
|||
#: code:addons/account/wizard/account_invoice_refund.py:109
|
||||
#, python-format
|
||||
msgid "Cannot %s draft/proforma/cancel invoice."
|
||||
msgstr ""
|
||||
msgstr "Нельзя %s черновик/проформу/закрытый счет."
|
||||
|
||||
#. module: account
|
||||
#: field:account.tax,account_analytic_paid_id:0
|
||||
|
@ -10415,6 +10446,7 @@ msgstr "Открыть для банковской сверки"
|
|||
|
||||
#. module: account
|
||||
#: field:account.account,company_id:0
|
||||
#: report:account.account.balance:0
|
||||
#: field:account.aged.trial.balance,company_id:0
|
||||
#: field:account.analytic.journal,company_id:0
|
||||
#: field:account.balance.report,company_id:0
|
||||
|
@ -10430,7 +10462,9 @@ msgstr "Открыть для банковской сверки"
|
|||
#: field:account.entries.report,company_id:0
|
||||
#: field:account.fiscal.position,company_id:0
|
||||
#: field:account.fiscalyear,company_id:0
|
||||
#: report:account.general.journal:0
|
||||
#: field:account.general.journal,company_id:0
|
||||
#: report:account.general.ledger_landscape:0
|
||||
#: field:account.installer,company_id:0
|
||||
#: field:account.invoice,company_id:0
|
||||
#: field:account.invoice.line,company_id:0
|
||||
|
@ -10439,6 +10473,7 @@ msgstr "Открыть для банковской сверки"
|
|||
#: field:account.invoice.tax,company_id:0
|
||||
#: field:account.journal,company_id:0
|
||||
#: field:account.journal.period,company_id:0
|
||||
#: report:account.journal.period.print:0
|
||||
#: field:account.model,company_id:0
|
||||
#: field:account.move,company_id:0
|
||||
#: field:account.move.line,company_id:0
|
||||
|
@ -10603,7 +10638,7 @@ msgstr "Счета системы налогообложения"
|
|||
#: view:account.invoice:0
|
||||
#: selection:account.invoice,type:0
|
||||
#: selection:account.invoice.report,type:0
|
||||
#: code:addons/account/account_invoice.py:1155
|
||||
#: code:addons/account/account_invoice.py:1158
|
||||
#: model:process.process,name:account.process_process_supplierinvoiceprocess0
|
||||
#: selection:report.invoice.created,type:0
|
||||
#, python-format
|
||||
|
@ -10692,8 +10727,10 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#. module: account
|
||||
#: report:account.account.balance:0
|
||||
#: selection:account.balance.report,display_account:0
|
||||
#: selection:account.common.account.report,display_account:0
|
||||
#: report:account.general.ledger_landscape:0
|
||||
#: selection:account.report.general.ledger,display_account:0
|
||||
msgid "With movements"
|
||||
msgstr "С движением"
|
||||
|
@ -10789,7 +10826,7 @@ msgid "Entries Sorted by"
|
|||
msgstr ""
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:1543
|
||||
#: code:addons/account/account_invoice.py:1546
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The selected unit of measure is not compatible with the unit of measure of "
|
||||
|
@ -10870,7 +10907,7 @@ msgstr "Искать счет"
|
|||
#: report:account.invoice:0
|
||||
#: view:account.invoice:0
|
||||
#: view:account.invoice.report:0
|
||||
#: code:addons/account/account_invoice.py:1156
|
||||
#: code:addons/account/account_invoice.py:1159
|
||||
#, python-format
|
||||
msgid "Refund"
|
||||
msgstr "Возвраты"
|
||||
|
@ -10942,7 +10979,7 @@ msgid "Manual Invoice Taxes"
|
|||
msgstr ""
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_invoice.py:570
|
||||
#: code:addons/account/account_invoice.py:573
|
||||
#, python-format
|
||||
msgid "The payment term of supplier does not have a payment term line."
|
||||
msgstr ""
|
||||
|
@ -11096,7 +11133,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: selection:account.config.settings,tax_calculation_rounding_method:0
|
||||
msgid "Round per line"
|
||||
msgstr ""
|
||||
msgstr "Округление каждой позиции"
|
||||
|
||||
#. module: account
|
||||
#: help:account.move.line,amount_residual_currency:0
|
||||
|
|
|
@ -189,44 +189,34 @@ class res_partner(osv.osv):
|
|||
'debit': fields.function(_credit_debit_get, fnct_search=_debit_search, string='Total Payable', multi='dc', help="Total amount you have to pay to this supplier."),
|
||||
'debit_limit': fields.float('Payable Limit'),
|
||||
'property_account_payable': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Account Payable",
|
||||
view_load=True,
|
||||
domain="[('type', '=', 'payable')]",
|
||||
help="This account will be used instead of the default one as the payable account for the current partner",
|
||||
required=True),
|
||||
'property_account_receivable': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Account Receivable",
|
||||
view_load=True,
|
||||
domain="[('type', '=', 'receivable')]",
|
||||
help="This account will be used instead of the default one as the receivable account for the current partner",
|
||||
required=True),
|
||||
'property_account_position': fields.property(
|
||||
'account.fiscal.position',
|
||||
type='many2one',
|
||||
relation='account.fiscal.position',
|
||||
string="Fiscal Position",
|
||||
view_load=True,
|
||||
help="The fiscal position will determine taxes and accounts used for the partner.",
|
||||
),
|
||||
'property_payment_term': fields.property(
|
||||
'account.payment.term',
|
||||
type='many2one',
|
||||
relation='account.payment.term',
|
||||
string ='Customer Payment Term',
|
||||
view_load=True,
|
||||
help="This payment term will be used instead of the default one for sale orders and customer invoices"),
|
||||
'property_supplier_payment_term': fields.property(
|
||||
'account.payment.term',
|
||||
type='many2one',
|
||||
relation='account.payment.term',
|
||||
string ='Supplier Payment Term',
|
||||
view_load=True,
|
||||
help="This payment term will be used instead of the default one for purchase orders and supplier invoices"),
|
||||
'ref_companies': fields.one2many('res.company', 'partner_id',
|
||||
'Companies that refers to partner'),
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
<field name="name">partner.view.buttons</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button type="action" string="Invoices"
|
||||
|
@ -96,7 +96,7 @@
|
|||
<field name="priority">2</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<page string="History" position="before" version="7.0">
|
||||
<page name="sales_purchases" position="after" version="7.0">
|
||||
<page string="Accounting" col="4" name="accounting" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}">
|
||||
<group>
|
||||
<group>
|
||||
|
|
|
@ -25,18 +25,14 @@ class product_category(osv.osv):
|
|||
_inherit = "product.category"
|
||||
_columns = {
|
||||
'property_account_income_categ': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Income Account",
|
||||
view_load=True,
|
||||
help="This account will be used for invoices to value sales."),
|
||||
'property_account_expense_categ': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Expense Account",
|
||||
view_load=True,
|
||||
help="This account will be used for invoices to value expenses."),
|
||||
}
|
||||
|
||||
|
@ -54,18 +50,14 @@ class product_template(osv.osv):
|
|||
'product_supplier_taxes_rel', 'prod_id', 'tax_id',
|
||||
'Supplier Taxes', domain=[('parent_id', '=', False),('type_tax_use','in',['purchase','all'])]),
|
||||
'property_account_income': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Income Account",
|
||||
view_load=True,
|
||||
help="This account will be used for invoices instead of the default one to value sales for the current product."),
|
||||
'property_account_expense': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Expense Account",
|
||||
view_load=True,
|
||||
help="This account will be used for invoices instead of the default one to value expenses for the current product."),
|
||||
}
|
||||
|
||||
|
|
|
@ -363,7 +363,7 @@
|
|||
<field name="inherit_id" ref="account.view_account_journal_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="type" position="after">
|
||||
<field name="analytic_journal_id"/>
|
||||
<field name="analytic_journal_id" groups="analytic.group_analytic_accounting"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -239,7 +239,7 @@
|
|||
<td><para style="terp_default_8">[[ line.account_id.code ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.partner_id and strip_name(line.partner_id.name,15) ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ strip_name(line.name,25) ]]</para></td>
|
||||
<td><para style="P8">[[ line.tax_code_id and (line.tax_code_id.code + ':') ]]</para></td>
|
||||
<td><para style="P8">[[ line.tax_code_id and line.tax_code_id.code and (line.tax_code_id.code + ':') ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.tax_amount and formatLang(line.tax_amount, currency_obj=company.currency_id) ]]</para></td>
|
||||
<td><para style="P8">[[ formatLang(line.debit, currency_obj=company.currency_id) ]]</para></td>
|
||||
<td><para style="P8">[[ formatLang(line.credit, currency_obj=company.currency_id) ]]</para></td>
|
||||
|
@ -292,7 +292,7 @@
|
|||
<td><para style="terp_default_8">[[ line.account_id.code ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.partner_id and strip_name(line.partner_id.name,12) ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ strip_name(line.name,16) ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.tax_code_id and (line.tax_code_id.code + ':') ]]</para></td>
|
||||
<td><para style="terp_default_8">[[ line.tax_code_id and line.tax_code_id.code and (line.tax_code_id.code + ':') ]]</para></td>
|
||||
<td><para style="P8">[[ line.tax_amount and formatLang(line.tax_amount, currency_obj=company.currency_id) ]]</para></td>
|
||||
<td><para style="P8">[[ formatLang(line.debit, currency_obj=company.currency_id) ]]</para></td>
|
||||
<td><para style="P8">[[ formatLang(line.credit, currency_obj=company.currency_id) ]]</para></td>
|
||||
|
|
|
@ -38,7 +38,7 @@ class account_fiscalyear_close(osv.osv_memory):
|
|||
'report_name': fields.char('Name of new entries',size=64, required=True, help="Give name of the new entries"),
|
||||
}
|
||||
_defaults = {
|
||||
'report_name': _('End of Fiscal Year Entry'),
|
||||
'report_name': lambda self, cr, uid, context: _('End of Fiscal Year Entry'),
|
||||
}
|
||||
|
||||
def data_save(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -7,19 +7,19 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-05-31 07:35+0000\n"
|
||||
"PO-Revision-Date: 2013-06-19 13:43+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-01 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16660)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "No order to invoice, create"
|
||||
msgstr ""
|
||||
msgstr "Нет заказа для счета, создать"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
|
@ -39,7 +39,7 @@ msgstr "Остаётся"
|
|||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Contracts in progress"
|
||||
msgstr ""
|
||||
msgstr "Незавершенные контракты"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,last_worked_invoiced_date:0
|
||||
|
@ -88,7 +88,7 @@ msgstr "Дата последнего счета расходов"
|
|||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,fix_price_to_invoice:0
|
||||
msgid "Sum of quotations for this contract."
|
||||
msgstr ""
|
||||
msgstr "Сумма предложений по этому контракту."
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,ca_invoiced:0
|
||||
|
@ -98,18 +98,18 @@ msgstr "Итого сумма к оплате заказчику для этог
|
|||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,timesheet_ca_invoiced:0
|
||||
msgid "Sum of timesheet lines invoiced for this contract."
|
||||
msgstr ""
|
||||
msgstr "Сумма позиций табеля выставленная в счет за этот контракт ."
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: code:addons/account_analytic_analysis/account_analytic_analysis.py:466
|
||||
#: code:addons/account_analytic_analysis/account_analytic_analysis.py:464
|
||||
#, python-format
|
||||
msgid "Sales Order Lines of %s"
|
||||
msgstr ""
|
||||
msgstr "Позиции заказа продаж %s"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,revenue_per_hour:0
|
||||
msgid "Computed using the formula: Invoiced Amount / Total Time"
|
||||
msgstr ""
|
||||
msgstr "Рассчитанный по формуле: Сумма по счетам / Итоговое время"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account_analytic_analysis.summary.month,account_id:0
|
||||
|
@ -126,7 +126,7 @@ msgstr "Партнёр"
|
|||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Contracts that are not assigned to an account manager."
|
||||
msgstr ""
|
||||
msgstr "Контракты, которые не назначены бухгалтеру."
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue
|
||||
|
@ -161,6 +161,7 @@ msgstr "Управляющий счётом"
|
|||
#: help:account.analytic.account,remaining_hours_to_invoice:0
|
||||
msgid "Computed using the formula: Maximum Time - Total Invoiced Time"
|
||||
msgstr ""
|
||||
"Рассчитанный по формуле: Максимальное время - Всё время выставленное в счетах"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
|
@ -170,12 +171,12 @@ msgstr "Ожидается"
|
|||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Contracts not assigned"
|
||||
msgstr ""
|
||||
msgstr "Контракты не назначены"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: help:account.analytic.account,theorical_margin:0
|
||||
msgid "Computed using the formula: Theoretical Revenue - Total Costs"
|
||||
msgstr ""
|
||||
msgstr "Рассчитанный по формуле: теоретическая выручка - общие издержки"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,hours_qtt_invoiced:0
|
||||
|
@ -219,17 +220,17 @@ msgstr ""
|
|||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Nothing to invoice, create"
|
||||
msgstr ""
|
||||
msgstr "Нечего выставить в счете, создать"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: model:res.groups,name:account_analytic_analysis.group_template_required
|
||||
msgid "Mandatory use of templates in contracts"
|
||||
msgstr ""
|
||||
msgstr "Обязательное использование шаблонов в контрактах"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,hours_quantity:0
|
||||
msgid "Total Worked Time"
|
||||
msgstr ""
|
||||
msgstr "Всё отработанное время"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,real_margin:0
|
||||
|
@ -249,12 +250,12 @@ msgstr "Вычисляется по формуле: (Реальная маржа
|
|||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "or view"
|
||||
msgstr ""
|
||||
msgstr "или вид"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Customer Contracts"
|
||||
msgstr ""
|
||||
msgstr "Контакты заказчика"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
|
@ -271,7 +272,7 @@ msgstr "Месяц"
|
|||
#: model:ir.actions.act_window,name:account_analytic_analysis.action_hr_tree_invoiced_all
|
||||
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_hr_tree_invoiced_all
|
||||
msgid "Time & Materials to Invoice"
|
||||
msgstr ""
|
||||
msgstr "Время и материалы в счет"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
|
@ -343,9 +344,10 @@ msgstr "К продлению"
|
|||
#: view:account.analytic.account:0
|
||||
msgid ""
|
||||
"A contract in OpenERP is an analytic account having a partner set on it."
|
||||
msgstr ""
|
||||
msgstr "Контракт в OpenERP это аналитический счет с установленным партнером."
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: view:account.analytic.account:0
|
||||
#: model:ir.actions.act_window,name:account_analytic_analysis.action_sales_order
|
||||
msgid "Sales Orders"
|
||||
msgstr "Заказы продаж"
|
||||
|
@ -412,7 +414,7 @@ msgstr ""
|
|||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,revenue_per_hour:0
|
||||
msgid "Revenue per Time (real)"
|
||||
msgstr ""
|
||||
msgstr "Выручка за время (реальная)"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue_all
|
||||
|
@ -578,7 +580,7 @@ msgstr ""
|
|||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,est_total:0
|
||||
msgid "Total Estimation"
|
||||
msgstr ""
|
||||
msgstr "Общая оценка"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
#: field:account.analytic.account,remaining_ca:0
|
||||
|
|
|
@ -72,8 +72,8 @@ class account_invoice_line(osv.osv):
|
|||
_inherit = "account.invoice.line"
|
||||
_description = "Invoice Line"
|
||||
|
||||
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, currency_id=False, context=None, company_id=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, currency_id=currency_id, context=context, company_id=company_id)
|
||||
def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None):
|
||||
res_prod = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit, currency_id=currency_id, context=context, company_id=company_id)
|
||||
rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context=context)
|
||||
if rec:
|
||||
res_prod['value'].update({'account_analytic_id': rec.analytic_id.id})
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<field name="inherit_id" ref="account.view_account_journal_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="centralisation" position="before">
|
||||
<field name="plan_id" />
|
||||
<field name="plan_id" groups="analytic.group_analytic_accounting"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -43,7 +43,8 @@ account.""",
|
|||
'depends': ['product', 'purchase'],
|
||||
'category': 'Accounting & Finance',
|
||||
'demo': [],
|
||||
'data': ['product_view.xml',],
|
||||
'data': ['product_view.xml'],
|
||||
'test': ['test/anglo_saxon.yml', 'test/anglo_saxon_avg_fifo.yml'],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
}
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -117,28 +117,34 @@ class account_invoice_line(osv.osv):
|
|||
for line in res:
|
||||
if a == line['account_id'] and i_line.product_id.id == line['product_id']:
|
||||
uom = i_line.product_id.uos_id or i_line.product_id.uom_id
|
||||
standard_price = self.pool.get('product.uom')._compute_price(cr, uid, uom.id, i_line.product_id.standard_price, i_line.uos_id.id)
|
||||
if standard_price != i_line.price_unit and line['price_unit'] == i_line.price_unit and acc:
|
||||
price_diff = i_line.price_unit - standard_price
|
||||
line.update({'price':standard_price * line['quantity']})
|
||||
valuation_price_unit = self.pool.get('product.uom')._compute_price(cr, uid, uom.id, i_line.product_id.standard_price, i_line.uos_id.id)
|
||||
if i_line.product_id.cost_method != 'standard' and i_line.purchase_line_id:
|
||||
#for average/fifo/lifo costing method, fetch real cost price from incomming moves
|
||||
stock_move_obj = self.pool.get('stock.move')
|
||||
valuation_stock_move = stock_move_obj.search(cr, uid, [('purchase_line_id', '=', i_line.purchase_line_id.id)], limit=1, context=context)
|
||||
if valuation_stock_move:
|
||||
valuation_price_unit = stock_move_obj.browse(cr, uid, valuation_stock_move[0], context=context).price_unit
|
||||
if valuation_price_unit != i_line.price_unit and line['price_unit'] == i_line.price_unit and acc:
|
||||
price_diff = i_line.price_unit - valuation_price_unit
|
||||
line.update({'price': valuation_price_unit * line['quantity']})
|
||||
diff_res.append({
|
||||
'type':'src',
|
||||
'type': 'src',
|
||||
'name': i_line.name[:64],
|
||||
'price_unit':price_diff,
|
||||
'quantity':line['quantity'],
|
||||
'price_unit': price_diff,
|
||||
'quantity': line['quantity'],
|
||||
'price': price_diff * line['quantity'],
|
||||
'account_id':acc,
|
||||
'product_id':line['product_id'],
|
||||
'uos_id':line['uos_id'],
|
||||
'account_analytic_id':line['account_analytic_id'],
|
||||
'taxes':line.get('taxes',[]),
|
||||
'account_id': acc,
|
||||
'product_id': line['product_id'],
|
||||
'uos_id': line['uos_id'],
|
||||
'account_analytic_id': line['account_analytic_id'],
|
||||
'taxes': line.get('taxes', []),
|
||||
})
|
||||
res += diff_res
|
||||
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, currency_id=False, context=None, company_id=None):
|
||||
def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None):
|
||||
fiscal_pool = self.pool.get('account.fiscal.position')
|
||||
res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, currency_id, context, company_id)
|
||||
res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit, currency_id, context, company_id)
|
||||
if not product:
|
||||
return res
|
||||
if type in ('in_invoice','in_refund'):
|
||||
|
|
|
@ -24,27 +24,21 @@ class product_category(osv.osv):
|
|||
_inherit = "product.category"
|
||||
_columns = {
|
||||
'property_account_creditor_price_difference_categ': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Price Difference Account",
|
||||
view_load=True,
|
||||
help="This account will be used to value price difference between purchase price and cost price."),
|
||||
|
||||
#Redefine fields to change help text for anglo saxon methodology.
|
||||
'property_account_income_categ': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Income Account",
|
||||
view_load=True,
|
||||
help="This account will be used to value outgoing stock using sale price."),
|
||||
'property_account_expense_categ': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Expense Account",
|
||||
view_load=True,
|
||||
help="This account will be used to value outgoing stock using cost price."),
|
||||
|
||||
}
|
||||
|
@ -53,27 +47,21 @@ class product_template(osv.osv):
|
|||
_inherit = "product.template"
|
||||
_columns = {
|
||||
'property_account_creditor_price_difference': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Price Difference Account",
|
||||
view_load=True,
|
||||
help="This account will be used to value price difference between purchase price and cost price."),
|
||||
|
||||
#Redefine fields to change help text for anglo saxon methodology.
|
||||
'property_account_income': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Income Account",
|
||||
view_load=True,
|
||||
help="This account will be used to value outgoing stock using sale price."),
|
||||
'property_account_expense': fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Expense Account",
|
||||
view_load=True,
|
||||
help="This account will be used to value outgoing stock using cost price."),
|
||||
|
||||
}
|
||||
|
|
|
@ -26,16 +26,15 @@ class purchase_order(osv.osv):
|
|||
_inherit = "purchase.order"
|
||||
_description = "Purchase Order"
|
||||
|
||||
def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None):
|
||||
line = super(purchase_order, self)._prepare_inv_line(cr, uid, account_id, order_line, context=context)
|
||||
def _choose_account_from_po_line(self, cr, uid, order_line, context=None):
|
||||
account_id = super(purchase_order, self)._choose_account_from_po_line(cr, uid, order_line, context=context)
|
||||
if order_line.product_id and not order_line.product_id.type == 'service':
|
||||
acc_id = order_line.product_id.property_stock_account_input and order_line.product_id.property_stock_account_input.id
|
||||
if not acc_id:
|
||||
acc_id = order_line.product_id.categ_id.property_stock_account_input_categ and order_line.product_id.categ_id.property_stock_account_input_categ.id
|
||||
if acc_id:
|
||||
fpos = order_line.order_id.fiscal_position or False
|
||||
new_account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id)
|
||||
line.update({'account_id': new_account_id})
|
||||
return line
|
||||
account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id)
|
||||
return account_id
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -0,0 +1,299 @@
|
|||
-
|
||||
In order to test anglo_saxon Configure Different Accounts.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_valuation}:
|
||||
code: X3000
|
||||
name: Stock Valuation Account- (test)
|
||||
parent_id: account.cas
|
||||
type: other
|
||||
user_type: account.data_account_type_asset
|
||||
-
|
||||
Configure Stock Interim account (Received).
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_input}:
|
||||
code: X2800
|
||||
name: Stock Interim account (Received)
|
||||
parent_id: account.cos
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Stock Interim account (Delivered).
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_output}:
|
||||
code: X2801
|
||||
name: Stock Interim account (Delivered)
|
||||
parent_id: account.rev
|
||||
type: other
|
||||
user_type: account.data_account_type_income
|
||||
-
|
||||
Configure Price difference creditor Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_price_difference}:
|
||||
code: X7095
|
||||
name: Price difference creditor Account
|
||||
parent_id: account.cos
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Cash Bank Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_cash}:
|
||||
code: X5000
|
||||
name: Cash/Bank Account
|
||||
parent_id: account.cash
|
||||
type: other
|
||||
user_type: account.data_account_type_asset
|
||||
-
|
||||
Configure Creditor Account Payable.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_payable}:
|
||||
code: X440001
|
||||
name: Creditor Account Payable
|
||||
parent_id: account.a_pay
|
||||
type: other
|
||||
user_type: account.data_account_type_payable
|
||||
-
|
||||
Configure Debtor Account Receivable.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_receivable}:
|
||||
code: X400001
|
||||
name: Debtor Account Receivable
|
||||
parent_id: account.a_recv
|
||||
type: other
|
||||
user_type: account.data_account_type_receivable
|
||||
-
|
||||
Configure Cost of Good sale Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_cogs}:
|
||||
code: X7000
|
||||
name: Cost of goods sale account
|
||||
parent_id: account.o_expense
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Income Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_income}:
|
||||
code: X8000
|
||||
name: Income Account
|
||||
parent_id: account.o_income
|
||||
type: other
|
||||
user_type: account.data_account_type_income
|
||||
-
|
||||
I configure the account receivable of supplier
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_3}:
|
||||
property_account_payable: account_anglo_payable
|
||||
property_account_receivable: account_anglo_receivable
|
||||
-
|
||||
I configure the account receivable of Customer.
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_13}:
|
||||
property_account_payable: account_anglo_payable
|
||||
property_account_receivable: account_anglo_receivable
|
||||
-
|
||||
I configure the product category with stock valuation account.
|
||||
-
|
||||
!record {model: product.category, id: product.product_category_4}:
|
||||
property_stock_valuation_account_id: account_anglo_stock_valuation
|
||||
-
|
||||
I configure the product with required accounts, and cost method = standard
|
||||
-
|
||||
!python {model: product.product}: |
|
||||
self.write(cr, uid, [ref('product.product_product_3')], {'list_price': 20.00,'standard_price': 9,'categ_id': ref('product.product_category_4'),'valuation': 'real_time',
|
||||
'property_account_income': ref('account_anglo_income'),'property_account_expense': ref('account_anglo_cogs'),
|
||||
'property_account_creditor_price_difference': ref('account_anglo_price_difference'),'property_stock_account_input': ref('account_anglo_stock_input'),
|
||||
'property_stock_account_output': ref('account_anglo_stock_output'), 'cost_method': 'standard'})
|
||||
-
|
||||
I create a draft Purchase Order.
|
||||
-
|
||||
!record {model: purchase.order, id: purchase_order_001}:
|
||||
partner_id: base.res_partner_3
|
||||
location_id: stock.stock_location_stock
|
||||
pricelist_id: 1
|
||||
order_line:
|
||||
- product_id: product.product_product_3
|
||||
product_qty: 1
|
||||
price_unit: 10
|
||||
date_planned: '2013-08-31'
|
||||
-
|
||||
I confirm the purchase order.
|
||||
-
|
||||
!workflow {model: purchase.order, ref: purchase_order_001, action: purchase_confirm}
|
||||
-
|
||||
Reception is ready for process so now done the reception.
|
||||
-
|
||||
!python {model: stock.partial.picking}: |
|
||||
pick_ids = self.pool.get('purchase.order').browse(cr, uid, ref("purchase_order_001")).picking_ids
|
||||
partial_id = self.create(cr, uid, {},context={'active_model': 'stock.picking','active_ids': [pick_ids[0].id]})
|
||||
self.do_partial(cr, uid, [partial_id])
|
||||
-
|
||||
I check the Stock Interim account (Received) is credited successfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_input, string : Stock Interim account (Received) is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
I check the Stock valuation account is debited sucessfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_valuation, string : Stock valuation account is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I Validate Invoice of Purchase Order.
|
||||
-
|
||||
!python {model: purchase.order}: |
|
||||
invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_001")).invoice_ids]
|
||||
self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids)
|
||||
-
|
||||
I check the Stock Interim account (Received) is debited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_input, string : Stock Interim account (Received) is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check the Price difference creditor Account is debited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_price_difference, string : Price difference creditor Account is not debited successfully.}:
|
||||
- debit == 1
|
||||
-
|
||||
I check Payable(creditor) Account is Credited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_payable, string : Payable(creditor) Account is not Credited successfully.}:
|
||||
- credit == 10
|
||||
-
|
||||
I open the Invoice.
|
||||
-
|
||||
!python {model: purchase.order}: |
|
||||
po = self.browse(cr, uid, ref("purchase_order_001"))
|
||||
for invoice in po.invoice_ids:
|
||||
self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id])
|
||||
-
|
||||
I pay the invoice.
|
||||
-
|
||||
!python {model: purchase.order}: |
|
||||
invoice_ids = self.browse(cr, uid, ref("purchase_order_001")).invoice_ids
|
||||
order = self.browse(cr, uid, ref("purchase_order_001"))
|
||||
journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', order.company_id.id)], limit=1)
|
||||
for invoice in invoice_ids:
|
||||
invoice.pay_and_reconcile(invoice.amount_total, ref('account_anglo_cash'), ref('account.period_8'), journal_ids[0], ref('account_anglo_cash'), ref('account.period_8'), journal_ids[0], name='test')
|
||||
-
|
||||
I check Payable(Creditors) Account is Debited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_payable, string : Payable(Creditors) Account is not Debited successfully.}:
|
||||
- debit == 10
|
||||
-
|
||||
I check Bank/Cash account is credited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cash, string: Bank/Cash account is not credited successfully.}:
|
||||
- credit == 10
|
||||
-
|
||||
I create an Outgoing Picking order
|
||||
-
|
||||
!record {model: stock.picking, id: stock_picking_out001}:
|
||||
partner_id: base.res_partner_13
|
||||
invoice_state: 2binvoiced
|
||||
move_lines:
|
||||
- company_id: base.main_company
|
||||
location_id: stock.stock_location_stock
|
||||
product_id: product.product_product_3
|
||||
product_qty: 1.0
|
||||
product_uom: product.product_uom_unit
|
||||
location_dest_id: stock.stock_location_customers
|
||||
move_type: direct
|
||||
type: out
|
||||
-
|
||||
I need to check the availability of the product, So I make my picking order for processing later.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.draft_force_assign(cr, uid, [ref("stock_picking_out001")], {"lang": "en_US", "search_default_available":
|
||||
1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner",
|
||||
"active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"),
|
||||
})
|
||||
-
|
||||
I check the product availability, Product is available in the stock and ready to be sent.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.action_assign(cr, uid, [ref("stock_picking_out001")], {"lang": "en_US", "search_default_available":
|
||||
1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner",
|
||||
"active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"),
|
||||
})
|
||||
-
|
||||
I process the delivery.
|
||||
-
|
||||
!python {model: stock.partial.picking}: |
|
||||
partial_id = self.create(cr, uid, {}, context={'active_model':'stock.picking','active_ids':[ref('stock_picking_out001')]})
|
||||
self.do_partial(cr, uid, [partial_id])
|
||||
-
|
||||
I check Stock Interim account (Delivery) is debited successfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_output, string : Stock Interim account (Delivery) is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check the Stock valuation account is credited sucessfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_valuation, string : Stock valuation account is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
As the Invoice state of the picking order is To be invoiced. I create invoice for my outgoing picking order.
|
||||
-
|
||||
!python {model: stock.invoice.onshipping}: |
|
||||
wiz_id = self.create(cr, uid, {'invoice_date': '2013-03-04', 'journal_id': ref('account.sales_journal')},
|
||||
{'active_ids': [ref("stock_picking_out001")], "active_model": "stock.picking"})
|
||||
self.create_invoice(cr, uid, [wiz_id], {"lang": "en_US",
|
||||
"search_default_available": 1, "tz": False, "active_model": "stock.picking",
|
||||
"contact_display": "partner", "active_ids": [ref("stock_picking_out001")], "active_id": ref("stock_picking_out001")})
|
||||
-
|
||||
I check that the customer invoice is created successfully.
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
partner_id = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).partner_id.id
|
||||
inv_ids = self.search(cr, uid, [('type','=','out_invoice'),('partner_id','=',partner_id)])
|
||||
assert inv_ids, 'No Invoice is generated!'
|
||||
-
|
||||
I open the Invoice.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).name
|
||||
account_invoice = self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)])
|
||||
self.pool.get('account.invoice').signal_invoice_open(cr, uid, account_invoice)
|
||||
-
|
||||
I check Income Account is Credited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_income, string : Income Account is not Credited successfully.}:
|
||||
- credit == 20
|
||||
-
|
||||
I check Cost of goods sold account for debit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cogs, string : Cost of goods sale is not Debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check Stock Interim account (Delivery)
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_output, string : Stock Interim account (Delivery) is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
I check Receivable(Debtor) Account for debit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_receivable, string : Receivable(Debtors) Account is not Debited successfully.}:
|
||||
- debit == 20
|
||||
-
|
||||
I pay the invoice.
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).name
|
||||
account_invoice= self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)])
|
||||
journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')], limit=1)
|
||||
pay = self.pay_and_reconcile(cr, uid, account_invoice,
|
||||
20.0, ref('account_anglo_cash'), ref('account.period_8'),
|
||||
journal_ids[0], ref('account_anglo_cash'),
|
||||
ref('account.period_8'), journal_ids[0],
|
||||
name='Payment for test customer invoice')
|
||||
assert (pay == True), "Incorrect Payment."
|
||||
-
|
||||
I check Receivable(Debtor) Account for credit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_receivable, string : Receivable(Debtors) Account is not Credited successfully.}:
|
||||
- credit == 20
|
||||
-
|
||||
I check Bank/Cash account is debited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cash, string: Bank/Cash account is not successfully credited.}:
|
||||
- debit == 20
|
|
@ -0,0 +1,304 @@
|
|||
-
|
||||
In order to test anglo_saxon Configure Different Accounts.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_valuation_fifo}:
|
||||
code: X3000f
|
||||
name: Stock Valuation Account- (test)
|
||||
parent_id: account.cas
|
||||
type: other
|
||||
user_type: account.data_account_type_asset
|
||||
-
|
||||
Configure Stock Interim account (Received).
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_input_fifo}:
|
||||
code: X2800f
|
||||
name: Stock Interim account (Received)
|
||||
parent_id: account.cos
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Stock Interim account (Delivered).
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_stock_output_fifo}:
|
||||
code: X2801f
|
||||
name: Stock Interim account (Delivered)
|
||||
parent_id: account.rev
|
||||
type: other
|
||||
user_type: account.data_account_type_income
|
||||
-
|
||||
Configure Price difference creditor Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_price_difference_fifo}:
|
||||
code: X7095f
|
||||
name: Price difference creditor Account
|
||||
parent_id: account.cos
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Cash Bank Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_cash_fifo}:
|
||||
code: X5000f
|
||||
name: Cash/Bank Account
|
||||
parent_id: account.cash
|
||||
type: other
|
||||
user_type: account.data_account_type_asset
|
||||
-
|
||||
Configure Creditor Account Payable.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_payable_fifo}:
|
||||
code: X440001f
|
||||
name: Creditor Account Payable
|
||||
parent_id: account.a_pay
|
||||
type: other
|
||||
user_type: account.data_account_type_payable
|
||||
-
|
||||
Configure Debtor Account Receivable.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_receivable_fifo}:
|
||||
code: X400001f
|
||||
name: Debtor Account Receivable
|
||||
parent_id: account.a_recv
|
||||
type: other
|
||||
user_type: account.data_account_type_receivable
|
||||
-
|
||||
Configure Cost of Good sale Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_cogs_fifo}:
|
||||
code: X7000f
|
||||
name: Cost of goods sale account
|
||||
parent_id: account.o_expense
|
||||
type: other
|
||||
user_type: account.data_account_type_expense
|
||||
-
|
||||
Configure Income Account.
|
||||
-
|
||||
!record {model: account.account, id: account_anglo_income_fifo}:
|
||||
code: X8000f
|
||||
name: Income Account
|
||||
parent_id: account.o_income
|
||||
type: other
|
||||
user_type: account.data_account_type_income
|
||||
-
|
||||
I configure the account receivable of supplier
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_3}:
|
||||
property_account_payable: account_anglo_payable_fifo
|
||||
property_account_receivable: account_anglo_receivable_fifo
|
||||
-
|
||||
I configure the account receivable of Customer.
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_13}:
|
||||
property_account_payable: account_anglo_payable_fifo
|
||||
property_account_receivable: account_anglo_receivable_fifo
|
||||
-
|
||||
I configure the product category with stock valuation account.
|
||||
-
|
||||
!record {model: product.category, id: product.product_category_4}:
|
||||
property_stock_valuation_account_id: account_anglo_stock_valuation_fifo
|
||||
-
|
||||
I create a product with required accounts, and cost method average (but same applies for fifo)
|
||||
-
|
||||
!record {model: product.product, id: product_fifo_anglo_saxon}:
|
||||
name: 'FIFO product for anglo saxon tests'
|
||||
list_price: 20.00
|
||||
standard_price: 0
|
||||
categ_id: product.product_category_4
|
||||
valuation: 'real_time'
|
||||
property_account_income: account_anglo_income_fifo
|
||||
property_account_expense: account_anglo_cogs_fifo
|
||||
property_account_creditor_price_difference: account_anglo_price_difference_fifo
|
||||
property_stock_account_input: account_anglo_stock_input_fifo
|
||||
property_stock_account_output: account_anglo_stock_output_fifo
|
||||
cost_method: 'average'
|
||||
-
|
||||
I create a draft Purchase Order.
|
||||
-
|
||||
!record {model: purchase.order, id: purchase_order_001_fifo}:
|
||||
partner_id: base.res_partner_3
|
||||
location_id: stock.stock_location_stock
|
||||
pricelist_id: 1
|
||||
order_line:
|
||||
- product_id: product_fifo_anglo_saxon
|
||||
product_qty: 1
|
||||
price_unit: 9
|
||||
date_planned: '2013-08-31'
|
||||
taxes_id: []
|
||||
-
|
||||
I confirm the purchase order.
|
||||
-
|
||||
!workflow {model: purchase.order, ref: purchase_order_001_fifo, action: purchase_confirm}
|
||||
-
|
||||
Reception is ready for process so now done the reception.
|
||||
-
|
||||
!python {model: stock.partial.picking}: |
|
||||
pick_ids = self.pool.get('purchase.order').browse(cr, uid, ref("purchase_order_001_fifo")).picking_ids
|
||||
partial_id = self.create(cr, uid, {},context={'active_model': 'stock.picking','active_ids': [pick_ids[0].id]})
|
||||
self.do_partial(cr, uid, [partial_id])
|
||||
-
|
||||
I check the Stock Interim account (Received) is credit successfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_input_fifo, string : Stock Interim account (Received) is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
I check the Stock valuation account is debit sucessfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_valuation_fifo, string : Stock valuation account is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I Validate Invoice of Purchase Order after having changed the price to 10.
|
||||
-
|
||||
!python {model: purchase.order}: |
|
||||
invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_001_fifo")).invoice_ids]
|
||||
line_ids = self.pool.get('account.invoice.line').search(cr, uid, [('invoice_id', 'in', invoice_ids)])
|
||||
self.pool.get('account.invoice.line').write(cr, uid, line_ids, {'price_unit': 10})
|
||||
self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids)
|
||||
-
|
||||
I check the Stock Interim account (Received) is debited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_input_fifo, string : Stock Interim account (Received) is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check the Price difference creditor Account is debited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_price_difference_fifo, string : Price difference creditor Account is not debited successfully.}:
|
||||
- debit == 1
|
||||
-
|
||||
I check Payable(creditor) Account is Credited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_payable_fifo, string : Payable(creditor) Account is not Credited successfully.}:
|
||||
- credit == 10
|
||||
-
|
||||
I pay the invoice.
|
||||
-
|
||||
!python {model: purchase.order}: |
|
||||
invoice_ids = self.browse(cr, uid, ref("purchase_order_001_fifo")).invoice_ids
|
||||
order = self.browse(cr, uid, ref("purchase_order_001_fifo"))
|
||||
journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', order.company_id.id)], limit=1)
|
||||
for invoice in invoice_ids:
|
||||
invoice.pay_and_reconcile(invoice.amount_total, ref('account_anglo_cash_fifo'), ref('account.period_8'), journal_ids[0], ref('account_anglo_cash_fifo'), ref('account.period_8'), journal_ids[0], name='test')
|
||||
-
|
||||
I check Payable(Creditors) Account is Debited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_payable_fifo, string : Payable(Creditors) Account is not Debited successfully.}:
|
||||
- debit == 10
|
||||
-
|
||||
I check Bank/Cash account is credited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cash_fifo, string: Bank/Cash account is not credited successfully.}:
|
||||
- credit == 10
|
||||
-
|
||||
I create an Outgoing Picking order
|
||||
-
|
||||
!record {model: stock.picking, id: stock_picking_out001_fifo}:
|
||||
partner_id: base.res_partner_13
|
||||
invoice_state: 2binvoiced
|
||||
move_lines:
|
||||
- company_id: base.main_company
|
||||
location_id: stock.stock_location_stock
|
||||
product_id: product_fifo_anglo_saxon
|
||||
product_qty: 1.0
|
||||
location_dest_id: stock.stock_location_customers
|
||||
move_type: direct
|
||||
type: out
|
||||
-
|
||||
I need to check the availability of the product, So I make my picking order for processing later.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.draft_force_assign(cr, uid, [ref("stock_picking_out001_fifo")], {"lang": "en_US", "search_default_available":
|
||||
1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner",
|
||||
"active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"),
|
||||
})
|
||||
-
|
||||
I check the product availability, Product is available in the stock and ready to be sent.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
self.action_assign(cr, uid, [ref("stock_picking_out001_fifo")], {"lang": "en_US", "search_default_available":
|
||||
1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner",
|
||||
"active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"),
|
||||
})
|
||||
-
|
||||
I process the delivery.
|
||||
-
|
||||
!python {model: stock.partial.picking}: |
|
||||
partial_id = self.create(cr, uid, {}, context={'active_model':'stock.picking','active_ids':[ref('stock_picking_out001_fifo')]})
|
||||
self.do_partial(cr, uid, [partial_id])
|
||||
-
|
||||
I check Stock Interim account (Delivery) is debited successfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_output_fifo, string : Stock Interim account (Delivery) is not debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check the Stock valuation account is credited sucessfully.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_valuation_fifo, string : Stock valuation account is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
As the Invoice state of the picking order is To be invoiced. I create invoice for my outgoing picking order.
|
||||
-
|
||||
!python {model: stock.invoice.onshipping}: |
|
||||
wiz_id = self.create(cr, uid, {'invoice_date': '2013-03-04', 'journal_id': ref('account.sales_journal')},
|
||||
{'active_ids': [ref("stock_picking_out001_fifo")], "active_model": "stock.picking"})
|
||||
self.create_invoice(cr, uid, [wiz_id], {"lang": "en_US",
|
||||
"search_default_available": 1, "tz": False, "active_model": "stock.picking",
|
||||
"contact_display": "partner", "active_ids": [ref("stock_picking_out001_fifo")], "active_id": ref("stock_picking_out001_fifo")})
|
||||
-
|
||||
I check that the customer invoice is created successfully.
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
partner_id = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001_fifo')).partner_id.id
|
||||
inv_ids = self.search(cr, uid, [('type','=','out_invoice'),('partner_id','=',partner_id)])
|
||||
assert inv_ids, 'No Invoice is generated!'
|
||||
-
|
||||
I open the Invoice.
|
||||
-
|
||||
!python {model: stock.picking}: |
|
||||
move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001_fifo')).name
|
||||
account_invoice = self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)])
|
||||
account_invoice_line = self.pool.get('account.invoice.line').search(cr, uid, [('invoice_id', 'in', account_invoice)])
|
||||
self.pool.get('account.invoice.line').write(cr, uid, account_invoice_line, {'invoice_line_tax_id': [(6, 0, [])]})
|
||||
self.pool.get('account.invoice').button_reset_taxes(cr, uid, account_invoice)
|
||||
self.pool.get('account.invoice').signal_invoice_open(cr, uid, account_invoice)
|
||||
-
|
||||
I check Income Account is Credited sucessfully when Invoice validated.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_income_fifo, string : Income Account is not Credited successfully.}:
|
||||
- credit == 20
|
||||
-
|
||||
I check Cost of goods sold account for debit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cogs_fifo, string : Cost of goods sale is not Debited successfully.}:
|
||||
- debit == 9
|
||||
-
|
||||
I check Stock Interim account (Delivery)
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_stock_output_fifo, string : Stock Interim account (Delivery) is not credited successfully.}:
|
||||
- credit == 9
|
||||
-
|
||||
I check Receivable(Debtor) Account for debit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_receivable_fifo, string : Receivable(Debtors) Account is not Debited successfully.}:
|
||||
- debit == 20
|
||||
-
|
||||
I pay the invoice.
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001_fifo')).name
|
||||
account_invoice= self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)])
|
||||
journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')], limit=1)
|
||||
pay = self.pay_and_reconcile(cr, uid, account_invoice,
|
||||
20.0, ref('account_anglo_cash_fifo'), ref('account.period_8'),
|
||||
journal_ids[0], ref('account_anglo_cash_fifo'),
|
||||
ref('account.period_8'), journal_ids[0],
|
||||
name='Payment for test customer invoice')
|
||||
assert (pay == True), "Incorrect Payment."
|
||||
-
|
||||
I check Receivable(Debtor) Account for credit.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_receivable_fifo, string : Receivable(Debtors) Account is not Credited successfully.}:
|
||||
- credit == 20
|
||||
-
|
||||
I check Bank/Cash account is debited sucessfully after invoice paid.
|
||||
-
|
||||
!assert {model: account.account, id : account_anglo_cash_fifo, string: Bank/Cash account is not successfully credited.}:
|
||||
- debit == 20
|
|
@ -13,6 +13,17 @@
|
|||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_invoice_asset_category">
|
||||
<field name="name">account.invoice.supplier.form</field>
|
||||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="account.invoice_supplier_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='invoice_line']/tree/field[@name='quantity']" position="before">
|
||||
<field name="asset_category_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -203,7 +203,9 @@
|
|||
<field name="view_id" ref="crossovered_budget_view_tree"/>
|
||||
<field name="search_view_id" ref="view_crossovered_budget_search"/>
|
||||
<field name="help" type="html">
|
||||
<p>
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new budget.
|
||||
</p><p>
|
||||
A budget is a forecast of your company's income and/or expenses
|
||||
expected for a period in the future. A budget is defined on some
|
||||
financial accounts and/or analytic accounts (that may represent
|
||||
|
|
|
@ -3,5 +3,5 @@ access_account_followup_followup_line,account_followup.followup.line,model_accou
|
|||
access_account_followup_followup_line_manager,account_followup.followup.line.manager,model_account_followup_followup_line,account.group_account_manager,1,1,1,1
|
||||
access_account_followup_followup_accountant,account_followup.followup user,model_account_followup_followup,account.group_account_invoice,1,0,0,0
|
||||
access_account_followup_followup_manager,account_followup.followup.manager,model_account_followup_followup,account.group_account_manager,1,1,1,1
|
||||
access_account_followup_stat_invoice,account_followup.stat.invoice,model_account_followup_stat,account.group_account_invoice,1,1,1,1
|
||||
access_account_followup_stat_by_partner_manager,account_followup.stat.by.partner,model_account_followup_stat_by_partner,account.group_account_user,1,1,1,1
|
||||
access_account_followup_stat_invoice,account_followup.stat.invoice,model_account_followup_stat,account.group_account_invoice,1,1,0,0
|
||||
access_account_followup_stat_by_partner_manager,account_followup.stat.by.partner,model_account_followup_stat_by_partner,account.group_account_user,1,1,0,0
|
||||
|
|
|
|
@ -88,6 +88,7 @@ class payment_order_create(osv.osv_memory):
|
|||
'order_id': payment.id,
|
||||
'partner_id': line.partner_id and line.partner_id.id or False,
|
||||
'communication': line.ref or '/',
|
||||
'state': line.invoice and line.invoice.reference_type != 'none' and 'structured' or 'normal',
|
||||
'date': date_to_pay,
|
||||
'currency': (line.invoice and line.invoice.currency_id.id) or line.journal_id.currency.id or line.journal_id.company_id.currency_id.id,
|
||||
}, context=context)
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-05-29 13:17+0000\n"
|
||||
"PO-Revision-Date: 2013-06-13 11:30+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-30 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 16652)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-14 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16667)\n"
|
||||
|
||||
#. module: account_voucher
|
||||
#: field:account.bank.statement.line,voucher_id:0
|
||||
|
@ -27,7 +27,7 @@ msgid "account.config.settings"
|
|||
msgstr "account.config.settings"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:369
|
||||
#: code:addons/account_voucher/account_voucher.py:417
|
||||
#, python-format
|
||||
msgid "Write-Off"
|
||||
msgstr "Списание"
|
||||
|
@ -129,7 +129,7 @@ msgid "Voucher Statistics"
|
|||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1547
|
||||
#: code:addons/account_voucher/account_voucher.py:1641
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can not change the journal as you already reconciled some statement "
|
||||
|
@ -223,8 +223,8 @@ msgid "Journal Item"
|
|||
msgstr "Элемент журнала"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:508
|
||||
#: code:addons/account_voucher/account_voucher.py:981
|
||||
#: code:addons/account_voucher/account_voucher.py:558
|
||||
#: code:addons/account_voucher/account_voucher.py:1073
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr "Ошибка!"
|
||||
|
@ -251,7 +251,7 @@ msgid "Cancelled"
|
|||
msgstr "Отменено"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1153
|
||||
#: code:addons/account_voucher/account_voucher.py:1249
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have to configure account base code and account tax code on the '%s' tax!"
|
||||
|
@ -295,7 +295,7 @@ msgid "Tax"
|
|||
msgstr "Налог"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:879
|
||||
#: code:addons/account_voucher/account_voucher.py:971
|
||||
#, python-format
|
||||
msgid "Invalid Action!"
|
||||
msgstr "Неверное действие!"
|
||||
|
@ -348,7 +348,7 @@ msgid "Import Invoices"
|
|||
msgstr "Импорт счетов"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1112
|
||||
#: code:addons/account_voucher/account_voucher.py:1208
|
||||
#, python-format
|
||||
msgid "Wrong voucher line"
|
||||
msgstr ""
|
||||
|
@ -367,7 +367,7 @@ msgid "Receipt"
|
|||
msgstr "Приход"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1018
|
||||
#: code:addons/account_voucher/account_voucher.py:1110
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You should configure the 'Gain Exchange Rate Account' in the accounting "
|
||||
|
@ -388,7 +388,7 @@ msgstr "Период"
|
|||
|
||||
#. module: account_voucher
|
||||
#: view:account.voucher:0
|
||||
#: code:addons/account_voucher/account_voucher.py:211
|
||||
#: code:addons/account_voucher/account_voucher.py:231
|
||||
#, python-format
|
||||
msgid "Supplier"
|
||||
msgstr "Поставщик"
|
||||
|
@ -409,7 +409,7 @@ msgid "Debit"
|
|||
msgstr "Дебет"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1547
|
||||
#: code:addons/account_voucher/account_voucher.py:1641
|
||||
#, python-format
|
||||
msgid "Unable to change journal !"
|
||||
msgstr "Невозможно изменить журнал!"
|
||||
|
@ -515,7 +515,7 @@ msgid "Pay Invoice"
|
|||
msgstr "Оплата счета"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1153
|
||||
#: code:addons/account_voucher/account_voucher.py:1249
|
||||
#, python-format
|
||||
msgid "No Account Base Code and Account Tax Code!"
|
||||
msgstr ""
|
||||
|
@ -569,15 +569,15 @@ msgid "To Review"
|
|||
msgstr "Для проверки"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1025
|
||||
#: code:addons/account_voucher/account_voucher.py:1039
|
||||
#: code:addons/account_voucher/account_voucher.py:1194
|
||||
#: code:addons/account_voucher/account_voucher.py:1120
|
||||
#: code:addons/account_voucher/account_voucher.py:1134
|
||||
#: code:addons/account_voucher/account_voucher.py:1286
|
||||
#, python-format
|
||||
msgid "change"
|
||||
msgstr "изменить"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1014
|
||||
#: code:addons/account_voucher/account_voucher.py:1106
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You should configure the 'Loss Exchange Rate Account' in the accounting "
|
||||
|
@ -631,6 +631,7 @@ msgstr "Месяц"
|
|||
#. module: account_voucher
|
||||
#: field:account.voucher,currency_id:0
|
||||
#: field:account.voucher.line,currency_id:0
|
||||
#: model:ir.model,name:account_voucher.model_res_currency
|
||||
#: field:sale.receipt.report,currency_id:0
|
||||
msgid "Currency"
|
||||
msgstr "Валюта"
|
||||
|
@ -674,7 +675,7 @@ msgid "Reconcile Payment Balance"
|
|||
msgstr "Сверка платежного баланса"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:975
|
||||
#: code:addons/account_voucher/account_voucher.py:1067
|
||||
#, python-format
|
||||
msgid "Configuration Error !"
|
||||
msgstr "Ошибка конфигурации !"
|
||||
|
@ -739,7 +740,7 @@ msgid "October"
|
|||
msgstr "Октябрь"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:976
|
||||
#: code:addons/account_voucher/account_voucher.py:1068
|
||||
#, python-format
|
||||
msgid "Please activate the sequence of selected journal !"
|
||||
msgstr "Пожалуйста, включите нумерацию выбранного журнала!"
|
||||
|
@ -819,7 +820,7 @@ msgid "Previous Payments ?"
|
|||
msgstr "Предыдущие платежи ?"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1112
|
||||
#: code:addons/account_voucher/account_voucher.py:1208
|
||||
#, python-format
|
||||
msgid "The invoice you are willing to pay is not valid anymore."
|
||||
msgstr "Счет, который вы готовы платить, уже не актуален ."
|
||||
|
@ -851,7 +852,7 @@ msgid "Active"
|
|||
msgstr "Активно"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:982
|
||||
#: code:addons/account_voucher/account_voucher.py:1074
|
||||
#, python-format
|
||||
msgid "Please define a sequence on the journal."
|
||||
msgstr "Пожалуйста, определите нумерацию журнала."
|
||||
|
@ -861,7 +862,7 @@ msgstr "Пожалуйста, определите нумерацию журна
|
|||
#: model:ir.actions.act_window,name:account_voucher.action_vendor_receipt
|
||||
#: model:ir.ui.menu,name:account_voucher.menu_action_vendor_receipt
|
||||
msgid "Customer Payments"
|
||||
msgstr "Платежи клиентов"
|
||||
msgstr "Платежи заказчиков"
|
||||
|
||||
#. module: account_voucher
|
||||
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt_report_all
|
||||
|
@ -979,7 +980,7 @@ msgid "Journal Items"
|
|||
msgstr "Элементы журнала"
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:508
|
||||
#: code:addons/account_voucher/account_voucher.py:558
|
||||
#, python-format
|
||||
msgid "Please define default credit/debit accounts on the journal \"%s\"."
|
||||
msgstr ""
|
||||
|
@ -1188,7 +1189,7 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:879
|
||||
#: code:addons/account_voucher/account_voucher.py:971
|
||||
#, python-format
|
||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||
msgstr ""
|
||||
|
@ -1251,8 +1252,8 @@ msgid "Status <b>changed</b>"
|
|||
msgstr ""
|
||||
|
||||
#. module: account_voucher
|
||||
#: code:addons/account_voucher/account_voucher.py:1014
|
||||
#: code:addons/account_voucher/account_voucher.py:1018
|
||||
#: code:addons/account_voucher/account_voucher.py:1106
|
||||
#: code:addons/account_voucher/account_voucher.py:1110
|
||||
#, python-format
|
||||
msgid "Insufficient Configuration!"
|
||||
msgstr ""
|
||||
|
|
|
@ -7,7 +7,8 @@ from werkzeug.exceptions import BadRequest
|
|||
|
||||
import openerp
|
||||
from openerp import SUPERUSER_ID
|
||||
import openerp.addons.web.http as oeweb
|
||||
import openerp.addons.web.http as http
|
||||
from openerp.addons.web.http import request
|
||||
from openerp.addons.web.controllers.main import db_monodb, set_cookie_and_redirect, login_and_redirect
|
||||
from openerp.modules.registry import RegistryManager
|
||||
|
||||
|
@ -18,7 +19,7 @@ _logger = logging.getLogger(__name__)
|
|||
#----------------------------------------------------------
|
||||
def fragment_to_query_string(func):
|
||||
@functools.wraps(func)
|
||||
def wrapper(self, req, **kw):
|
||||
def wrapper(self, **kw):
|
||||
if not kw:
|
||||
return """<html><head><script>
|
||||
var l = window.location;
|
||||
|
@ -30,18 +31,17 @@ def fragment_to_query_string(func):
|
|||
}
|
||||
window.location = r;
|
||||
</script></head><body></body></html>"""
|
||||
return func(self, req, **kw)
|
||||
return func(self, **kw)
|
||||
return wrapper
|
||||
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Controller
|
||||
#----------------------------------------------------------
|
||||
class OAuthController(oeweb.Controller):
|
||||
_cp_path = '/auth_oauth'
|
||||
class OAuthController(http.Controller):
|
||||
|
||||
@oeweb.jsonrequest
|
||||
def list_providers(self, req, dbname):
|
||||
@http.route('/auth_oauth/list_providers', type='json', auth='none')
|
||||
def list_providers(self, dbname):
|
||||
try:
|
||||
registry = RegistryManager.get(dbname)
|
||||
with registry.cursor() as cr:
|
||||
|
@ -51,9 +51,9 @@ class OAuthController(oeweb.Controller):
|
|||
l = []
|
||||
return l
|
||||
|
||||
@oeweb.httprequest
|
||||
@http.route('/auth_oauth/signin', type='http', auth='none')
|
||||
@fragment_to_query_string
|
||||
def signin(self, req, **kw):
|
||||
def signin(self, **kw):
|
||||
state = simplejson.loads(kw['state'])
|
||||
dbname = state['d']
|
||||
provider = state['p']
|
||||
|
@ -71,7 +71,7 @@ class OAuthController(oeweb.Controller):
|
|||
url = '/#action=%s' % action
|
||||
elif menu:
|
||||
url = '/#menu_id=%s' % menu
|
||||
return login_and_redirect(req, *credentials, redirect_url=url)
|
||||
return login_and_redirect(*credentials, redirect_url=url)
|
||||
except AttributeError:
|
||||
# auth_signup is not installed
|
||||
_logger.error("auth_signup not installed on database %s: oauth sign up cancelled." % (dbname,))
|
||||
|
@ -88,21 +88,24 @@ class OAuthController(oeweb.Controller):
|
|||
_logger.exception("OAuth2: %s" % str(e))
|
||||
url = "/#action=login&oauth_error=2"
|
||||
|
||||
return set_cookie_and_redirect(req, url)
|
||||
return set_cookie_and_redirect(url)
|
||||
|
||||
@oeweb.httprequest
|
||||
def oea(self, req, **kw):
|
||||
@http.route('/auth_oauth/oea', type='http', auth='none')
|
||||
def oea(self, **kw):
|
||||
"""login user via OpenERP Account provider"""
|
||||
dbname = kw.pop('db', None)
|
||||
if not dbname:
|
||||
dbname = db_monodb(req)
|
||||
dbname = db_monodb()
|
||||
if not dbname:
|
||||
return BadRequest()
|
||||
|
||||
registry = RegistryManager.get(dbname)
|
||||
with registry.cursor() as cr:
|
||||
IMD = registry['ir.model.data']
|
||||
model, provider_id = IMD.get_object_reference(cr, SUPERUSER_ID, 'auth_oauth', 'provider_openerp')
|
||||
try:
|
||||
model, provider_id = IMD.get_object_reference(cr, SUPERUSER_ID, 'auth_oauth', 'provider_openerp')
|
||||
except ValueError:
|
||||
return set_cookie_and_redirect('/?db=%s' % dbname)
|
||||
assert model == 'auth.oauth.provider'
|
||||
|
||||
state = {
|
||||
|
@ -112,6 +115,6 @@ class OAuthController(oeweb.Controller):
|
|||
}
|
||||
|
||||
kw['state'] = simplejson.dumps(state)
|
||||
return self.signin(req, **kw)
|
||||
return self.signin(**kw)
|
||||
|
||||
# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -38,6 +38,8 @@ import openerp
|
|||
from openerp import SUPERUSER_ID
|
||||
from openerp.modules.registry import RegistryManager
|
||||
from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect
|
||||
import openerp.addons.web.http as http
|
||||
from openerp.addons.web.http import request
|
||||
|
||||
from .. import utils
|
||||
|
||||
|
@ -88,20 +90,19 @@ class GoogleAppsAwareConsumer(consumer.GenericConsumer):
|
|||
return super(GoogleAppsAwareConsumer, self).complete(message, endpoint, return_to)
|
||||
|
||||
|
||||
class OpenIDController(openerp.addons.web.http.Controller):
|
||||
_cp_path = '/auth_openid/login'
|
||||
class OpenIDController(http.Controller):
|
||||
|
||||
_store = filestore.FileOpenIDStore(_storedir)
|
||||
|
||||
_REQUIRED_ATTRIBUTES = ['email']
|
||||
_OPTIONAL_ATTRIBUTES = 'nickname fullname postcode country language timezone'.split()
|
||||
|
||||
def _add_extensions(self, request):
|
||||
"""Add extensions to the request"""
|
||||
def _add_extensions(self, oidrequest):
|
||||
"""Add extensions to the oidrequest"""
|
||||
|
||||
sreg_request = sreg.SRegRequest(required=self._REQUIRED_ATTRIBUTES,
|
||||
optional=self._OPTIONAL_ATTRIBUTES)
|
||||
request.addExtension(sreg_request)
|
||||
oidrequest.addExtension(sreg_request)
|
||||
|
||||
ax_request = ax.FetchRequest()
|
||||
for alias in self._REQUIRED_ATTRIBUTES:
|
||||
|
@ -111,7 +112,7 @@ class OpenIDController(openerp.addons.web.http.Controller):
|
|||
uri = utils.SREG2AX[alias]
|
||||
ax_request.add(ax.AttrInfo(uri, required=False, alias=alias))
|
||||
|
||||
request.addExtension(ax_request)
|
||||
oidrequest.addExtension(ax_request)
|
||||
|
||||
def _get_attributes_from_success_response(self, success_response):
|
||||
attrs = {}
|
||||
|
@ -133,58 +134,58 @@ class OpenIDController(openerp.addons.web.http.Controller):
|
|||
attrs[attr] = value
|
||||
return attrs
|
||||
|
||||
def _get_realm(self, req):
|
||||
return req.httprequest.host_url
|
||||
def _get_realm(self):
|
||||
return request.httprequest.host_url
|
||||
|
||||
@openerp.addons.web.http.httprequest
|
||||
def verify_direct(self, req, db, url):
|
||||
result = self._verify(req, db, url)
|
||||
@http.route('/auth_openid/login/verify_direct', type='http', auth='none')
|
||||
def verify_direct(self, db, url):
|
||||
result = self._verify(db, url)
|
||||
if 'error' in result:
|
||||
return werkzeug.exceptions.BadRequest(result['error'])
|
||||
if result['action'] == 'redirect':
|
||||
return werkzeug.utils.redirect(result['value'])
|
||||
return result['value']
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def verify(self, req, db, url):
|
||||
return self._verify(req, db, url)
|
||||
@http.route('/auth_openid/login/verify', type='json', auth='none')
|
||||
def verify(self, db, url):
|
||||
return self._verify(db, url)
|
||||
|
||||
def _verify(self, req, db, url):
|
||||
redirect_to = werkzeug.urls.Href(req.httprequest.host_url + 'auth_openid/login/process')(session_id=req.session_id)
|
||||
realm = self._get_realm(req)
|
||||
def _verify(self, db, url):
|
||||
redirect_to = werkzeug.urls.Href(request.httprequest.host_url + 'auth_openid/login/process')(session_id=request.session_id)
|
||||
realm = self._get_realm()
|
||||
|
||||
session = dict(dbname=db, openid_url=url) # TODO add origin page ?
|
||||
oidconsumer = consumer.Consumer(session, self._store)
|
||||
|
||||
try:
|
||||
request = oidconsumer.begin(url)
|
||||
oidrequest = oidconsumer.begin(url)
|
||||
except consumer.DiscoveryFailure, exc:
|
||||
fetch_error_string = 'Error in discovery: %s' % (str(exc[0]),)
|
||||
return {'error': fetch_error_string, 'title': 'OpenID Error'}
|
||||
|
||||
if request is None:
|
||||
if oidrequest is None:
|
||||
return {'error': 'No OpenID services found', 'title': 'OpenID Error'}
|
||||
|
||||
req.session.openid_session = session
|
||||
self._add_extensions(request)
|
||||
request.session.openid_session = session
|
||||
self._add_extensions(oidrequest)
|
||||
|
||||
if request.shouldSendRedirect():
|
||||
redirect_url = request.redirectURL(realm, redirect_to)
|
||||
return {'action': 'redirect', 'value': redirect_url, 'session_id': req.session_id}
|
||||
if oidrequest.shouldSendRedirect():
|
||||
redirect_url = oidrequest.redirectURL(realm, redirect_to)
|
||||
return {'action': 'redirect', 'value': redirect_url, 'session_id': request.session_id}
|
||||
else:
|
||||
form_html = request.htmlMarkup(realm, redirect_to)
|
||||
return {'action': 'post', 'value': form_html, 'session_id': req.session_id}
|
||||
form_html = oidrequest.htmlMarkup(realm, redirect_to)
|
||||
return {'action': 'post', 'value': form_html, 'session_id': request.session_id}
|
||||
|
||||
@openerp.addons.web.http.httprequest
|
||||
def process(self, req, **kw):
|
||||
session = getattr(req.session, 'openid_session', None)
|
||||
@http.route('/auth_openid/login/process', type='http', auth='none')
|
||||
def process(self, **kw):
|
||||
session = getattr(request.session, 'openid_session', None)
|
||||
if not session:
|
||||
return set_cookie_and_redirect(req, '/')
|
||||
return set_cookie_and_redirect('/')
|
||||
|
||||
oidconsumer = consumer.Consumer(session, self._store, consumer_class=GoogleAppsAwareConsumer)
|
||||
|
||||
query = req.httprequest.args
|
||||
info = oidconsumer.complete(query, req.httprequest.base_url)
|
||||
query = request.httprequest.args
|
||||
info = oidconsumer.complete(query, request.httprequest.base_url)
|
||||
display_identifier = info.getDisplayIdentifier()
|
||||
|
||||
session['status'] = info.status
|
||||
|
@ -225,7 +226,7 @@ class OpenIDController(openerp.addons.web.http.Controller):
|
|||
# TODO fill empty fields with the ones from sreg/ax
|
||||
cr.commit()
|
||||
|
||||
return login_and_redirect(req, dbname, login, key)
|
||||
return login_and_redirect(dbname, login, key)
|
||||
|
||||
session['message'] = 'This OpenID identifier is not associated to any active users'
|
||||
|
||||
|
@ -241,11 +242,11 @@ class OpenIDController(openerp.addons.web.http.Controller):
|
|||
# information in a log.
|
||||
session['message'] = 'Verification failed.'
|
||||
|
||||
return set_cookie_and_redirect(req, '/#action=login&loginerror=1')
|
||||
return set_cookie_and_redirect('/#action=login&loginerror=1')
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def status(self, req):
|
||||
session = getattr(req.session, 'openid_session', {})
|
||||
@http.route('/auth_openid/login/status', type='json', auth='none')
|
||||
def status(self):
|
||||
session = getattr(request.session, 'openid_session', {})
|
||||
return {'status': session.get('status'), 'message': session.get('message')}
|
||||
|
||||
|
||||
|
|
|
@ -23,14 +23,15 @@ import logging
|
|||
import openerp
|
||||
from openerp.modules.registry import RegistryManager
|
||||
from ..res_users import SignupError
|
||||
import openerp.addons.web.http as http
|
||||
from openerp.addons.web.http import request
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
class Controller(openerp.addons.web.http.Controller):
|
||||
_cp_path = '/auth_signup'
|
||||
class Controller(http.Controller):
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def get_config(self, req, dbname):
|
||||
@http.route('/auth_signup/get_config', type='json', auth="none")
|
||||
def get_config(self, dbname):
|
||||
""" retrieve the module config (which features are enabled) for the login page """
|
||||
registry = RegistryManager.get(dbname)
|
||||
with registry.cursor() as cr:
|
||||
|
@ -41,8 +42,8 @@ class Controller(openerp.addons.web.http.Controller):
|
|||
}
|
||||
return config
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def retrieve(self, req, dbname, token):
|
||||
@http.route('/auth_signup/retrieve', type='json', auth="user")
|
||||
def retrieve(self, dbname, token):
|
||||
""" retrieve the user info (name, login or email) corresponding to a signup token """
|
||||
registry = RegistryManager.get(dbname)
|
||||
with registry.cursor() as cr:
|
||||
|
@ -50,23 +51,23 @@ class Controller(openerp.addons.web.http.Controller):
|
|||
user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
|
||||
return user_info
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def signup(self, req, dbname, token, **values):
|
||||
@http.route('/auth_signup/signup', type='json', auth="user")
|
||||
def signup(self, dbname, token, **values):
|
||||
""" sign up a user (new or existing)"""
|
||||
try:
|
||||
self._signup_with_values(req, dbname, token, values)
|
||||
self._signup_with_values(dbname, token, values)
|
||||
except SignupError, e:
|
||||
return {'error': openerp.tools.exception_to_unicode(e)}
|
||||
return {}
|
||||
|
||||
def _signup_with_values(self, req, dbname, token, values):
|
||||
def _signup_with_values(self, dbname, token, values):
|
||||
registry = RegistryManager.get(dbname)
|
||||
with registry.cursor() as cr:
|
||||
res_users = registry.get('res.users')
|
||||
res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def reset_password(self, req, dbname, login):
|
||||
@http.route('/auth_signup/reset_password', type='json', auth="user")
|
||||
def reset_password(self, dbname, login):
|
||||
""" retrieve user, and perform reset password """
|
||||
registry = RegistryManager.get(dbname)
|
||||
with registry.cursor() as cr:
|
||||
|
|
|
@ -60,7 +60,7 @@ class crm_meeting(base_state, osv.Model):
|
|||
'categ_ids': fields.many2many('crm.meeting.type', 'meeting_category_rel',
|
||||
'event_id', 'type_id', 'Tags'),
|
||||
'attendee_ids': fields.many2many('calendar.attendee', 'meeting_attendee_rel',\
|
||||
'event_id', 'attendee_id', 'Attendees', states={'done': [('readonly', True)]}),
|
||||
'event_id', 'attendee_id', 'Invited People', states={'done': [('readonly', True)]}),
|
||||
}
|
||||
_defaults = {
|
||||
'state': 'open',
|
||||
|
|
|
@ -0,0 +1,249 @@
|
|||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-20 13:54+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-21 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16677)\n"
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Comments for Translator"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,job_id:0
|
||||
msgid "Gengo Job ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:114
|
||||
#, python-format
|
||||
msgid "This language is not supported by the Gengo translation services."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_comment:0
|
||||
msgid "Comments"
|
||||
msgstr "ความคิดเห็น"
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_private_key:0
|
||||
msgid "Gengo Private Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_base_gengo_translations
|
||||
msgid "base.gengo.translations"
|
||||
msgstr "base.gengo.translations"
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:res.company,gengo_auto_approve:0
|
||||
msgid "Jobs are Automatically Approved by Gengo."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:base.gengo.translations,lang_id:0
|
||||
msgid "Language"
|
||||
msgstr "ภาษา"
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,gengo_comment:0
|
||||
msgid "Comments & Activity Linked to Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:124
|
||||
#, python-format
|
||||
msgid "Gengo Sync Translation (Response)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:72
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Gengo `Public Key` or `Private Key` are missing. Enter your Gengo "
|
||||
"authentication parameters under `Settings > Companies > Gengo Parameters`."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Translation By Machine"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:155
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
"\n"
|
||||
"--\n"
|
||||
" Commented on %s by %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,gengo_translation:0
|
||||
msgid "Gengo Translation Service Level"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: constraint:ir.translation:0
|
||||
msgid ""
|
||||
"The Gengo translation service selected is not supported for this language."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:ir.translation,gengo_translation:0
|
||||
msgid ""
|
||||
"You can select here the service level you want for an automatic translation "
|
||||
"using Gengo."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:base.gengo.translations,restart_send_job:0
|
||||
msgid "Restart Sending Job"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "To Approve In Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Private Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Public Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_public_key:0
|
||||
msgid "Gengo Public Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:123
|
||||
#, python-format
|
||||
msgid "Gengo Sync Translation (Request)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "Translations"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_auto_approve:0
|
||||
msgid "Auto Approve Translation ?"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.actions.act_window,name:base_gengo.action_wizard_base_gengo_translations
|
||||
#: model:ir.ui.menu,name:base_gengo.menu_action_wizard_base_gengo_translations
|
||||
msgid "Gengo: Manual Request of Translation"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/ir_translation.py:62
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:109
|
||||
#, python-format
|
||||
msgid "Gengo Authentication Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid ""
|
||||
"Note: If the translation state is 'In Progress', it means that the "
|
||||
"translation has to be approved to be uploaded in this system. You are "
|
||||
"supposed to do that directly by using your Gengo Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:82
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Gengo connection failed with this message:\n"
|
||||
"``%s``"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Gengo Parameters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Ultra"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_ir_translation
|
||||
msgid "ir.translation"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "Gengo Translation Service"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Pro"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Gengo Request Form"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:114
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:res.company,gengo_comment:0
|
||||
msgid ""
|
||||
"This comment will be automatically be enclosed in each an every request sent "
|
||||
"to Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "or"
|
||||
msgstr ""
|
|
@ -0,0 +1,9 @@
|
|||
Name,Is a company,Related company,Address type,Customer,Supplier,Street,ZIP,City,State,Country
|
||||
Aurora Shelves,1,,,1,0,25 Pacific Road,95101,San José,CA,United States
|
||||
Roger Martins,0,Aurora Shelves,Invoice,1,0,27 Pacific Road,95102,San José,CA,United States
|
||||
House Sales Direct,1,,,1,0,104 Saint Mary Avenue,94059,Redwood,CA,United States
|
||||
Yvan Holiday,0,House Sales Direct,Default,1,0,104 Saint Mary Avenue,94060,Redwood,CA,United States
|
||||
Jack Unsworth,0,House Sales Direct,Invoice,1,0,227 Jackson Road,94061,Redwood,CA,United States
|
||||
Michael Mason,0,,,1,0,16 5th Avenue,94104,San Francisco,CA,United States
|
||||
International Wood,1,,,1,0,748 White House Boulevard,20004,Washington,DC,United States
|
||||
Sharon Pecker,0,International Wood,Invoice,1,0,755 White House Boulevard,20005,Washington,DC,United States
|
|
|
@ -1,8 +0,0 @@
|
|||
Name,Address type,Street,City,Country,Tags,Supplier,Customer,Is a company,Companies that refers to partner / Parent company
|
||||
Wood y Wood Pecker,,"Snow Street, 25",Kainuu,Finland,Supplier,1,0,1,
|
||||
Roger Pecker,Default,"Snow Street, 27",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
|
||||
Sharon Pecker,Delivery,"Snow Street, 28",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
|
||||
Thomas Pecker,Contact,"Snow Street, 27",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
|
||||
Vicking Direct,,"Atonium Street, 45a",Brussels,Belgium,Supplier,1,0,1,
|
||||
Yvan Holiday,Invoice,"Atonium Street, 45b",Brussels,Belgium,Supplier,1,0,0,Vicking Direct
|
||||
Jack Unsworth,Contact,"Atonium Street, 45a",Brussels,Belgium,Supplier,1,0,0,Vicking Direct
|
|
|
@ -229,8 +229,8 @@
|
|||
orders with their respective purchase order lines:</p>
|
||||
<a href="/base_import/static/csv/o2m_purchase_order_lines.csv">Purchase orders with their respective purchase order lines</a>
|
||||
<p>The following CSV file shows how to import
|
||||
suppliers and their respective contacts</p>
|
||||
<a href="/base_import/static/csv/o2m_suppliers_contacts.csv">Suppliers and their respective contacts</a>
|
||||
customers and their respective contacts</p>
|
||||
<a href="/base_import/static/csv/o2m_customers_contacts.csv">Customers and their respective contacts</a>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
|
|
@ -14,9 +14,13 @@
|
|||
<label string="This plug-in allows you to create/modify OpenERP Reports into OpenOffice Writer."/>
|
||||
</separator>
|
||||
<xpath expr="//button[@string='Install Modules']" position="replace">
|
||||
<button name="action_next" icon="gtk-go-forward" type="object" string="Configure" invisible="context.get('menu',False)" class="oe_highlight"/>
|
||||
<button name="action_next" type="object" string="Configure" invisible="context.get('menu',False)" class="oe_highlight"/>
|
||||
<label string="or" invisible="context.get('menu',False)" class="oe_inline"/>
|
||||
</xpath>
|
||||
<xpath expr="//button[@string='Skip']" position="replace">
|
||||
<button string="Ok" class="oe_highlight" special="cancel" invisible="context.get('active_model',False)"/>
|
||||
<button string="Skip" class="oe_link" special="cancel" invisible="context.get('menu',False)"/>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//separator[@string='title']" position="after">
|
||||
<group colspan="8" height="450" width="750">
|
||||
<field name="name" invisible="1"/>
|
||||
|
|
|
@ -61,8 +61,8 @@ class RPCSession(object):
|
|||
protocol = m.group(1)
|
||||
if not m:
|
||||
return -1
|
||||
if protocol == 'http://' or protocol == 'http://':
|
||||
self.gateway = XMLRPCGateway(host, port, 'http')
|
||||
if protocol == 'http://' or protocol == 'https://':
|
||||
self.gateway = XMLRPCGateway(host, port, protocol[:-3])
|
||||
elif protocol == 'socket://':
|
||||
|
||||
self.gateway = NETRPCGateway(host, port)
|
||||
|
|
Binary file not shown.
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-05-27 12:19+0000\n"
|
||||
"Last-Translator: leksei <lirgus@gmail.com>\n"
|
||||
"PO-Revision-Date: 2013-06-17 10:30+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-05-28 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16640)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: base_setup
|
||||
#: view:sale.config.settings:0
|
||||
|
@ -92,7 +92,7 @@ msgstr "Общие настройки"
|
|||
#. module: base_setup
|
||||
#: selection:base.setup.terminology,partner:0
|
||||
msgid "Donor"
|
||||
msgstr ""
|
||||
msgstr "Спонсор"
|
||||
|
||||
#. module: base_setup
|
||||
#: view:base.config.settings:0
|
||||
|
@ -147,7 +147,7 @@ msgstr "res_config_contents"
|
|||
#. module: base_setup
|
||||
#: view:sale.config.settings:0
|
||||
msgid "Customer Features"
|
||||
msgstr ""
|
||||
msgstr "Свойства заказчика"
|
||||
|
||||
#. module: base_setup
|
||||
#: view:base.config.settings:0
|
||||
|
@ -157,7 +157,7 @@ msgstr "Импорт / Экспорт"
|
|||
#. module: base_setup
|
||||
#: view:sale.config.settings:0
|
||||
msgid "Sale Features"
|
||||
msgstr ""
|
||||
msgstr "Свойства продаж"
|
||||
|
||||
#. module: base_setup
|
||||
#: field:sale.config.settings,module_plugin_outlook:0
|
||||
|
@ -232,7 +232,7 @@ msgstr ""
|
|||
#. module: base_setup
|
||||
#: model:ir.model,name:base_setup.model_sale_config_settings
|
||||
msgid "sale.config.settings"
|
||||
msgstr ""
|
||||
msgstr "sale.config.settings"
|
||||
|
||||
#. module: base_setup
|
||||
#: field:base.setup.terminology,partner:0
|
||||
|
@ -263,7 +263,7 @@ msgstr ""
|
|||
#. module: base_setup
|
||||
#: model:ir.model,name:base_setup.model_base_setup_terminology
|
||||
msgid "base.setup.terminology"
|
||||
msgstr ""
|
||||
msgstr "base.setup.terminology"
|
||||
|
||||
#. module: base_setup
|
||||
#: selection:base.setup.terminology,partner:0
|
||||
|
|
|
@ -31,7 +31,7 @@ Lets the user create a custom dashboard.
|
|||
Allows users to create custom dashboard.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['base'],
|
||||
'depends': ['base', 'web'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'board_view.xml',
|
||||
|
|
|
@ -344,7 +344,7 @@ instance.board.AddToDashboard = instance.web.search.Input.extend({
|
|||
},
|
||||
load_data:function(){
|
||||
var board = new instance.web.Model('board.board');
|
||||
return board.call('list');
|
||||
return board.call('list', [board.context()]);
|
||||
},
|
||||
_x:function() {
|
||||
if (!instance.webclient) { return $.Deferred().reject(); }
|
||||
|
|
|
@ -222,17 +222,13 @@ class crm_case_section(osv.osv):
|
|||
return res
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
mail_alias = self.pool.get('mail.alias')
|
||||
if not vals.get('alias_id'):
|
||||
alias_name = vals.pop('alias_name', None) or vals.get('name') # prevent errors during copy()
|
||||
alias_id = mail_alias.create_unique_alias(cr, uid,
|
||||
{'alias_name': alias_name},
|
||||
model_name="crm.lead",
|
||||
context=context)
|
||||
vals['alias_id'] = alias_id
|
||||
res = super(crm_case_section, self).create(cr, uid, vals, context)
|
||||
mail_alias.write(cr, uid, [vals['alias_id']], {'alias_defaults': {'section_id': res, 'type': 'lead'}}, context)
|
||||
return res
|
||||
if context is None:
|
||||
context = {}
|
||||
create_context = dict(context, alias_model_name='crm.lead', alias_parent_model_name=self._name)
|
||||
section_id = super(crm_case_section, self).create(cr, uid, vals, context=create_context)
|
||||
section = self.browse(cr, uid, section_id, context=context)
|
||||
self.pool.get('mail.alias').write(cr, uid, [section.alias_id.id], {'alias_parent_thread_id': section_id, 'alias_defaults': {'section_id': section_id, 'type': 'lead'}}, context=context)
|
||||
return section_id
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
# Cascade-delete mail aliases as well, as they should not exist without the sales team.
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
<div class="oe_kanban_content">
|
||||
<h4 class="oe_center"><field name="name"/></h4>
|
||||
<div class="oe_kanban_alias oe_center" t-if="record.use_leads.raw_value and record.alias_id.value">
|
||||
<small><span class="oe_e" style="float: none;">%%</span><t t-raw="record.alias_id.raw_value[1]"/></small>
|
||||
<small><span class="oe_e oe_e_alias" style="float: none;">%%</span><t t-raw="record.alias_id.raw_value[1]"/></small>
|
||||
</div>
|
||||
<div class="oe_items_list">
|
||||
<div class="oe_salesteams_leads" t-if="record.use_leads.raw_value">
|
||||
|
@ -168,17 +168,6 @@
|
|||
<h1>
|
||||
<field name="name" string="Salesteam"/>
|
||||
</h1>
|
||||
<div name="group_alias"
|
||||
attrs="{'invisible': [('alias_domain', '=', False)]}">
|
||||
<label for="alias_id" string="Email Alias"/>
|
||||
<field name="alias_id" class="oe_inline oe_read_only" required="0" nolabel="1"/>
|
||||
<span name="edit_alias" class="oe_edit_only">
|
||||
<field name="alias_name" class="oe_inline"
|
||||
attrs="{'required': [('use_leads', '=', True), ('alias_id', '!=', False)]}"/>
|
||||
@
|
||||
<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
</span>
|
||||
</div>
|
||||
<div name="options_active">
|
||||
<field name="use_leads" class="oe_inline"/><label for="use_leads"/>
|
||||
</div>
|
||||
|
@ -187,12 +176,25 @@
|
|||
<group>
|
||||
<field name="user_id"/>
|
||||
<field name="code"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="parent_id"/>
|
||||
<field name="change_responsible"/>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
<group>
|
||||
<label for="alias_name" string="Email Alias"
|
||||
attrs="{'invisible': [('alias_domain', '=', False)]}"/>
|
||||
<div name="alias_def"
|
||||
attrs="{'invisible': [('alias_domain', '=', False)]}">
|
||||
<field name="alias_id" class="oe_read_only oe_inline"
|
||||
string="Email Alias" required="0"/>
|
||||
<div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" >
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="alias_contact" class="oe_inline"
|
||||
string="Accept Emails From"
|
||||
attrs="{'invisible': [('alias_domain', '=', False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Team Members">
|
||||
|
|
|
@ -719,7 +719,6 @@ class crm_lead(base_stage, format_address, osv.osv):
|
|||
continue
|
||||
vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context)
|
||||
self.write(cr, uid, [lead.id], vals, context=context)
|
||||
self.message_post(cr, uid, ids, body=_("Lead <b>converted into an Opportunity</b>"), subtype="crm.mt_lead_convert_to_opportunity", context=context)
|
||||
|
||||
if user_ids or section_id:
|
||||
self.allocate_salesman(cr, uid, ids, user_ids, section_id, context=context)
|
||||
|
|
|
@ -163,12 +163,6 @@
|
|||
<field name="default" eval="False"/>
|
||||
<field name="description">Opportunity created</field>
|
||||
</record>
|
||||
<record id="mt_lead_convert_to_opportunity" model="mail.message.subtype">
|
||||
<field name="name">Lead to Opportunity</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Lead converted into an opportunity</field>
|
||||
</record>
|
||||
<record id="mt_lead_stage" model="mail.message.subtype">
|
||||
<field name="name">Stage Changed</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
|
@ -195,13 +189,6 @@
|
|||
<field name="parent_id" eval="ref('mt_lead_create')"/>
|
||||
<field name="relation_field">section_id</field>
|
||||
</record>
|
||||
<record id="mt_salesteam_lead_opportunity" model="mail.message.subtype">
|
||||
<field name="name">Lead to Opportunity</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="res_model">crm.case.section</field>
|
||||
<field name="parent_id" eval="ref('mt_lead_convert_to_opportunity')"/>
|
||||
<field name="relation_field">section_id</field>
|
||||
</record>
|
||||
<record id="mt_salesteam_lead_stage" model="mail.message.subtype">
|
||||
<field name="name">Opportunity Stage Changed</field>
|
||||
<field name="res_model">crm.case.section</field>
|
||||
|
|
|
@ -601,7 +601,9 @@
|
|||
'default_email_to':'{$object.email or \'\'}',
|
||||
'default_use_template': True,
|
||||
'default_template_id': ref('crm.email_template_opportunity_mail'),
|
||||
}"/>
|
||||
}"
|
||||
groups="base.group_sale_salesman"
|
||||
/>
|
||||
|
||||
<!--Update of email_template defined in crm_lead_data, to add ref_ir_act_window
|
||||
allowing to have a well formed email template (context action considered as set). -->
|
||||
|
@ -617,6 +619,7 @@
|
|||
if context.get('active_model') == 'crm.lead' and context.get('active_ids'):
|
||||
self.case_cancel(cr, uid, context['active_ids'], context=context)
|
||||
</field>
|
||||
<field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="ir_mark_as_lost" model="ir.values">
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-04-13 08:42+0000\n"
|
||||
"PO-Revision-Date: 2013-06-21 07:11+0000\n"
|
||||
"Last-Translator: krnkris <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: 2013-04-14 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 16564)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-22 05:36+0000\n"
|
||||
"X-Generator: Launchpad (build 16677)\n"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
|
@ -31,7 +31,7 @@ msgstr ""
|
|||
"létrehozását a bejövő levelekből."
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:881
|
||||
#: code:addons/crm/crm_lead.py:898
|
||||
#: selection:crm.case.stage,type:0
|
||||
#: view:crm.lead:0
|
||||
#: selection:crm.lead,type:0
|
||||
|
@ -192,8 +192,8 @@ msgstr ""
|
|||
"direkt HTML formátumú ahhoz hogy beilleszthető legyen a kanban nézetekbe."
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:624
|
||||
#: code:addons/crm/crm_lead.py:744
|
||||
#: code:addons/crm/crm_lead.py:640
|
||||
#: code:addons/crm/crm_lead.py:761
|
||||
#: code:addons/crm/crm_phonecall.py:280
|
||||
#, python-format
|
||||
msgid "Warning!"
|
||||
|
@ -304,7 +304,7 @@ msgid "Prospect Partner"
|
|||
msgstr "Leendő partner"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:982
|
||||
#: code:addons/crm/crm_lead.py:1002
|
||||
#, python-format
|
||||
msgid "No Subject"
|
||||
msgstr "Nincs tárgy"
|
||||
|
@ -482,7 +482,7 @@ msgid "#Opportunities"
|
|||
msgstr "Lehetőségek száma"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:624
|
||||
#: code:addons/crm/crm_lead.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please select more than one element (lead or opportunity) from the list view."
|
||||
|
@ -782,7 +782,7 @@ msgid "Statistics Dashboard"
|
|||
msgstr "Statisztika vezérlőpult"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:861
|
||||
#: code:addons/crm/crm_lead.py:878
|
||||
#: model:crm.case.stage,name:crm.stage_lead2
|
||||
#: selection:crm.case.stage,type:0
|
||||
#: view:crm.lead:0
|
||||
|
@ -844,7 +844,7 @@ msgid "Exclusive"
|
|||
msgstr "Kizárólagos"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:584
|
||||
#: code:addons/crm/crm_lead.py:600
|
||||
#, python-format
|
||||
msgid "From %s : %s"
|
||||
msgstr "Ettől %s : %s"
|
||||
|
@ -1016,7 +1016,7 @@ msgid "Next Action"
|
|||
msgstr "Következő művelet"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:763
|
||||
#: code:addons/crm/crm_lead.py:780
|
||||
#, python-format
|
||||
msgid "<b>Partner</b> set to <em>%s</em>."
|
||||
msgstr "<b>Partner</b> beállítva mint <em>%s</em>."
|
||||
|
@ -1109,7 +1109,7 @@ msgid "Creation Date"
|
|||
msgstr "Létrehozás dátuma"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:698
|
||||
#: code:addons/crm/crm_lead.py:715
|
||||
#, python-format
|
||||
msgid "Lead <b>converted into an Opportunity</b>"
|
||||
msgstr "Tervezet <b>lehetőséggé átalakítva lehetőséggé</b>"
|
||||
|
@ -1324,7 +1324,9 @@ msgid "Days to Close"
|
|||
msgstr "Lezárásig hátralévő napok"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:1057
|
||||
#: field:crm.case.section,complete_name:0
|
||||
#, python-format
|
||||
msgid "unknown"
|
||||
msgstr "Ismeretlen"
|
||||
|
||||
|
@ -1415,7 +1417,7 @@ msgid "Lead Description"
|
|||
msgstr "Érdeklődés leírása"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:565
|
||||
#: code:addons/crm/crm_lead.py:581
|
||||
#, python-format
|
||||
msgid "Merged opportunities"
|
||||
msgstr "Lehetőségek összefésülése"
|
||||
|
@ -1989,7 +1991,7 @@ msgid "Leads"
|
|||
msgstr "Érdeklődők"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:563
|
||||
#: code:addons/crm/crm_lead.py:579
|
||||
#, python-format
|
||||
msgid "Merged leads"
|
||||
msgstr "Össztefésült érdeklődések"
|
||||
|
@ -2085,7 +2087,6 @@ msgid "Global CC"
|
|||
msgstr "Globális CC /másolat/"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
#: view:crm.phonecall:0
|
||||
#: model:ir.actions.act_window,name:crm.crm_case_categ_phone0
|
||||
#: model:ir.ui.menu,name:crm.menu_crm_case_phone
|
||||
|
@ -2399,7 +2400,7 @@ msgstr "Érdeklődés átalakítva egy lehetőséggé"
|
|||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
msgid "Unassigned Leads"
|
||||
msgstr "Nem iktatott rdeklődések"
|
||||
msgstr "Nem iktatott érdeklődések"
|
||||
|
||||
#. module: crm
|
||||
#: model:mail.message.subtype,description:crm.mt_lead_won
|
||||
|
@ -3100,7 +3101,7 @@ msgid "Working Hours"
|
|||
msgstr "Munkaórák"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:968
|
||||
#: code:addons/crm/crm_lead.py:986
|
||||
#: view:crm.lead:0
|
||||
#: field:crm.lead2opportunity.partner,partner_id:0
|
||||
#: field:crm.lead2opportunity.partner.mass,partner_id:0
|
||||
|
|
|
@ -2,19 +2,6 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Add section_id (Sales Team) to res.partner -->
|
||||
<record id="view_partners_form_crm1" model="ir.ui.view">
|
||||
<field name="name">view.res.partner.form.crm.inherited1</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="section_id" completion="1" groups="base.group_multi_salesteams"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- open meetings related to given partner -->
|
||||
<record id="crm_meeting_partner" model="ir.actions.act_window">
|
||||
<field name="name">Meetings</field>
|
||||
|
@ -91,24 +78,31 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="res_partner_view_buttons">
|
||||
<field name="name">res.partner.view.buttons</field>
|
||||
<!-- Add section_id (SalesTeam) and contextual button on partner form view -->
|
||||
<record id="view_partners_form_crm1" model="ir.ui.view">
|
||||
<field name="name">view.res.partner.form.crm.inherited1</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button type="action"
|
||||
string="Meetings"
|
||||
name="%(base_calendar.action_crm_meeting)d"
|
||||
context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/>
|
||||
<button type="action" string="Calls"
|
||||
name="%(crm.crm_case_categ_phone_incoming0)d"
|
||||
context="{'search_default_partner_id': active_id, 'default_duration': 1.0}" />
|
||||
<button type="action" string="Opportunities" attrs="{'invisible': [('customer', '=', False)]}"
|
||||
name="%(crm.crm_case_category_act_oppor11)d" context="{'search_default_partner_id': active_id}"/>
|
||||
</xpath>
|
||||
<data>
|
||||
<field name="user_id" position="after">
|
||||
<field name="section_id" completion="1" groups="base.group_multi_salesteams"/>
|
||||
</field>
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button class="oe_inline" type="action" string="Opportunities"
|
||||
attrs="{'invisible': [('customer', '=', False)]}"
|
||||
name="%(crm.crm_case_category_act_oppor11)d"
|
||||
context="{'search_default_partner_id': active_id}"/>
|
||||
<button class="oe_inline" type="action"
|
||||
string="Meetings"
|
||||
name="%(base_calendar.action_crm_meeting)d"
|
||||
context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/>
|
||||
<button class="oe_inline" type="action" string="Calls"
|
||||
name="%(crm.crm_case_categ_phone_incoming0)d"
|
||||
context="{'search_default_partner_id': active_id, 'default_duration': 1.0}" />
|
||||
</xpath>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -102,7 +102,9 @@
|
|||
res_model="crm.lead2opportunity.partner.mass" src_model="crm.lead"
|
||||
view_mode="form" target="new" view_type="form"
|
||||
context="{'mass_convert' : True}"
|
||||
view_id="view_crm_lead2opportunity_partner_mass"/>
|
||||
view_id="view_crm_lead2opportunity_partner_mass"
|
||||
groups="base.group_sale_salesman"
|
||||
/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -45,7 +45,9 @@
|
|||
multi="True"
|
||||
key2="client_action_multi" name="Merge leads/opportunities"
|
||||
res_model="crm.merge.opportunity" src_model="crm.lead"
|
||||
view_mode="form" target="new" view_type="form"/>
|
||||
view_mode="form" target="new" view_type="form"
|
||||
groups="base.group_sale_salesman"
|
||||
/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -42,14 +42,20 @@ automatically new claims based on incoming emails.
|
|||
'security/ir.model.access.csv',
|
||||
'report/crm_claim_report_view.xml',
|
||||
'crm_claim_data.xml',
|
||||
'res_partner_view.xml',
|
||||
],
|
||||
'demo': ['crm_claim_demo.xml'],
|
||||
'test': ['test/process/claim.yml',
|
||||
'test/ui/claim_demo.yml'
|
||||
'test': [
|
||||
'test/process/claim.yml',
|
||||
'test/ui/claim_demo.yml'
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/claim_categories.jpeg','images/claim_stages.jpeg','images/claims.jpeg'],
|
||||
'images': [
|
||||
'images/claim_categories.jpeg',
|
||||
'images/claim_stages.jpeg',
|
||||
'images/claims.jpeg'
|
||||
],
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -15,7 +15,11 @@
|
|||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="context">{"search_default_user_id":uid, "stage_type":'claim'}</field>
|
||||
<field name="search_view_id" ref="crm_claim.view_crm_case_claims_filter"/>
|
||||
<field name="help">Record and track your customers' claims. Claims may be linked to a sales order or a lot. You can send emails with attachments and keep the full history for a claim (emails sent, intervention type and so on). Claims may automatically be linked to an email address using the mail gateway module.</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Record and track your customers' claims. Claims may be linked to a sales order or a lot.You can send emails with attachments and keep the full history for a claim (emails sent, intervention type and so on).Claims may automatically be linked to an email address using the mail gateway module.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_claim0">
|
||||
|
|
|
@ -216,35 +216,5 @@
|
|||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_claim_partner_info_form1" model="ir.ui.view">
|
||||
<field name="name">res.partner.claim.info.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='page_history']" position="attributes">
|
||||
<attribute name="invisible">False</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='page_history']" position="inside">
|
||||
<group name="grp_claim" string="Claims">
|
||||
<field name="claims_ids" colspan="4" nolabel="1">
|
||||
<tree string="Partners Claim" editable="bottom">
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_partner_id': [active_id], 'default_partner_id': active_id}"
|
||||
id="act_claim_partner"
|
||||
name="Claims"
|
||||
view_mode="tree,form"
|
||||
res_model="crm.claim"
|
||||
src_model="res.partner"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- Partners inherited form -->
|
||||
<record id="view_claim_res_partner_info_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.claim.info.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="priority" eval="50"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button class="oe_inline" type="action"
|
||||
name="%(crm_case_categ_claim0)d"
|
||||
string="Claims"
|
||||
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
|
||||
groups="base.group_sale_salesman" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -20,6 +20,7 @@
|
|||
##############################################################################
|
||||
|
||||
import crm_partner_assign
|
||||
import crm_lead
|
||||
import wizard
|
||||
import report
|
||||
|
||||
|
|
|
@ -37,17 +37,23 @@ The most appropriate partner can be assigned.
|
|||
You can also use the geolocalization without using the GPS coordinates.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['crm', 'account'],
|
||||
'depends': ['crm', 'account', 'portal'],
|
||||
'demo': ['res_partner_demo.xml'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'res_partner_view.xml',
|
||||
'wizard/crm_forward_to_partner_view.xml',
|
||||
'wizard/crm_channel_interested_view.xml',
|
||||
'crm_lead_view.xml',
|
||||
'crm_partner_assign_data.xml',
|
||||
'crm_portal_view.xml',
|
||||
'portal_data.xml',
|
||||
'report/crm_lead_report_view.xml',
|
||||
'report/crm_partner_report_view.xml',
|
||||
],
|
||||
'js': [
|
||||
'static/src/js/next.js',
|
||||
],
|
||||
'test': ['test/partner_assign.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp.osv import osv
|
||||
from openerp.tools.translate import _
|
||||
|
||||
|
||||
class crm_lead(osv.osv):
|
||||
_inherit = 'crm.lead'
|
||||
|
||||
def get_interested_action(self, cr, uid, interested, context=None):
|
||||
try:
|
||||
model, action_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'crm_lead_channel_interested_act')
|
||||
except ValueError:
|
||||
raise osv.except_osv(_('Error!'), _("The CRM Channel Interested Action is missing"))
|
||||
action = self.pool[model].read(cr, uid, action_id, context=context)
|
||||
action_context = eval(action['context'])
|
||||
action_context['interested'] = interested
|
||||
action['context'] = str(action_context)
|
||||
return action
|
||||
|
||||
def case_interested(self, cr, uid, ids, context=None):
|
||||
return self.get_interested_action(cr, uid, True, context=context)
|
||||
|
||||
def case_disinterested(self, cr, uid, ids, context=None):
|
||||
return self.get_interested_action(cr, uid, False, context=context)
|
|
@ -8,27 +8,33 @@
|
|||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//notebook/page[@string='Lead']" position="after">
|
||||
<page string="Assignation">
|
||||
<page string="Assigned Partner" groups="base.group_sale_manager">
|
||||
<group name="partner_assign_group">
|
||||
<group string="Partner Assignation">
|
||||
<field name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/>
|
||||
<label for="date_assign"/>
|
||||
<group string="Partner Assignation" col="3" colspan="1">
|
||||
<label for="partner_latitude" string="Geolocation" />
|
||||
<div class="oe_title">
|
||||
<h3>
|
||||
<span class="oe_grey">( </span>
|
||||
<field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline"/>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span>
|
||||
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1"/>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span>
|
||||
<span class="oe_grey">) </span>
|
||||
</h3>
|
||||
</div>
|
||||
<button string="Automatic Assignation" name="action_assign_partner" type="object" colspan="1"
|
||||
class="oe_inline"/>
|
||||
<field name="partner_assigned_id" class="oe_inline" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/>
|
||||
<div>
|
||||
<field name="date_assign"/>
|
||||
<button string="Forward"
|
||||
<button string="Send Email"
|
||||
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
|
||||
name="%(crm_lead_forward_to_partner_act)d"
|
||||
icon="terp-mail-forward" type="action"
|
||||
context="{'default_composition_mode': 'forward', 'default_partner_ids': [partner_assigned_id]}"/>
|
||||
type="action"
|
||||
context="{'default_composition_mode': 'forward','hide_forward_type': 1 , 'default_partner_ids': [partner_assigned_id]}"/>
|
||||
</div>
|
||||
</group>
|
||||
<group string="Geo Assignation">
|
||||
<field name="partner_latitude"/>
|
||||
<field name="partner_longitude"/>
|
||||
<span/>
|
||||
<button string="Geo Assign" name="action_assign_partner" type="object" colspan="1"
|
||||
icon="gtk-apply"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
|
@ -43,7 +49,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="after">
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -55,41 +61,46 @@
|
|||
<filter string="Team" position="after">
|
||||
<filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
|
||||
</filter>
|
||||
|
||||
<field name="partner_id" position="after">
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_lead_geo_assign_form" model="ir.ui.view">
|
||||
<record id="view_crm_lead_geo_assign_form" model="ir.ui.view">
|
||||
<field name="name">crm.lead.lead.geo_assign.inherit</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="inherit_id" ref="crm.crm_case_form_view_leads"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//notebook/page[@string='Extra Info']" position="after">
|
||||
<page string="Assignation">
|
||||
<page string="Assigned Partner" groups="base.group_sale_manager">
|
||||
<group name="partner_assign_group">
|
||||
<group string="Partner Assignation">
|
||||
<field name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/>
|
||||
<label for="date_assign"/>
|
||||
<group string="Partner Assignation" col="3">
|
||||
<label for="partner_latitude" string="Geolocation" />
|
||||
<div>
|
||||
<field name="date_assign"/>
|
||||
<button string="Forward"
|
||||
<h3>
|
||||
<span class="oe_grey">( </span>
|
||||
<field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline"/>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span>
|
||||
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1"/>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span>
|
||||
<span class="oe_grey">) </span>
|
||||
</h3>
|
||||
</div>
|
||||
<button string="Automatic Assignation" name="action_assign_partner" type="object" colspan="1"
|
||||
class="oe_inline" />
|
||||
<field name="partner_assigned_id" class="oe_inline" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/>
|
||||
<div>
|
||||
<button string="Send Email"
|
||||
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
|
||||
name="%(crm_lead_forward_to_partner_act)d"
|
||||
icon="terp-mail-forward" type="action"
|
||||
context="{'default_composition_mode': 'forward', 'default_partner_ids': [partner_assigned_id]}"/>
|
||||
type="action"
|
||||
context="{'default_composition_mode': 'forward','hide_forward_type': 1 , 'default_partner_ids': [partner_assigned_id]}"/>
|
||||
</div>
|
||||
</group>
|
||||
<group string="Geo Assignation">
|
||||
<field name="partner_latitude"/>
|
||||
<field name="partner_longitude"/>
|
||||
<span/>
|
||||
<button string="Geo Assign" name="action_assign_partner" type="object" colspan="1"
|
||||
icon="gtk-apply"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
|
@ -104,7 +115,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="after">
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -116,12 +127,11 @@
|
|||
<filter string="Team" position="after">
|
||||
<filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
|
||||
</filter>
|
||||
|
||||
<field name="partner_id" position="after">
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -66,10 +66,13 @@ class res_partner_grade(osv.osv):
|
|||
_columns = {
|
||||
'sequence': fields.integer('Sequence'),
|
||||
'active': fields.boolean('Active'),
|
||||
'name': fields.char('Grade Name', size=32)
|
||||
'name': fields.char('Grade Name', size=32),
|
||||
'partner_weight': fields.integer('Grade Weight',
|
||||
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *args: 1
|
||||
'active': lambda *args: 1,
|
||||
'partner_weight':1
|
||||
}
|
||||
|
||||
class res_partner_activation(osv.osv):
|
||||
|
@ -88,11 +91,11 @@ class res_partner(osv.osv):
|
|||
'partner_latitude': fields.float('Geo Latitude'),
|
||||
'partner_longitude': fields.float('Geo Longitude'),
|
||||
'date_localization': fields.date('Geo Localization Date'),
|
||||
'partner_weight': fields.integer('Weight',
|
||||
'partner_weight': fields.integer('Grade Weight',
|
||||
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
|
||||
'opportunity_assigned_ids': fields.one2many('crm.lead', 'partner_assigned_id',\
|
||||
'Assigned Opportunities'),
|
||||
'grade_id': fields.many2one('res.partner.grade', 'Partner Level'),
|
||||
'grade_id': fields.many2one('res.partner.grade', 'Grade'),
|
||||
'activation' : fields.many2one('res.partner.activation', 'Activation', select=1),
|
||||
'date_partnership' : fields.date('Partnership Date'),
|
||||
'date_review' : fields.date('Latest Partner Review'),
|
||||
|
@ -101,6 +104,13 @@ class res_partner(osv.osv):
|
|||
_defaults = {
|
||||
'partner_weight': lambda *args: 0
|
||||
}
|
||||
|
||||
def onchange_grade_id(self, cr, uid, ids, grade_id, context=None):
|
||||
res = {'value' :{'partner_weight':0}}
|
||||
if grade_id:
|
||||
partner_grade = self.pool.get('res.partner.grade').browse(cr, uid, grade_id)
|
||||
res['value']['partner_weight'] = partner_grade.partner_weight
|
||||
return res
|
||||
def geo_localize(self, cr, uid, ids, context=None):
|
||||
# Don't pass context to browse()! We need country names in english below
|
||||
for partner in self.browse(cr, uid, ids):
|
||||
|
@ -124,7 +134,7 @@ class crm_lead(osv.osv):
|
|||
_columns = {
|
||||
'partner_latitude': fields.float('Geo Latitude'),
|
||||
'partner_longitude': fields.float('Geo Longitude'),
|
||||
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner', help="Partner this case has been forwarded/assigned to.", select=True),
|
||||
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner',track_visibility='onchange' , help="Partner this case has been forwarded/assigned to.", select=True),
|
||||
'date_assign': fields.date('Assignation Date', help="Last date this case was forwarded/assigned to a partner"),
|
||||
}
|
||||
def _merge_data(self, cr, uid, ids, oldest, fields, context=None):
|
||||
|
@ -134,6 +144,7 @@ class crm_lead(osv.osv):
|
|||
def onchange_assign_id(self, cr, uid, ids, partner_assigned_id, context=None):
|
||||
"""This function updates the "assignation date" automatically, when manually assign a partner in the geo assign tab
|
||||
"""
|
||||
|
||||
if not partner_assigned_id:
|
||||
return {'value':{'date_assign': False}}
|
||||
else:
|
||||
|
@ -261,4 +272,3 @@ class crm_lead(osv.osv):
|
|||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -1,44 +1,59 @@
|
|||
<?xml version="1.0" encoding='UTF-8'?>
|
||||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="crm_partner_assign_email_template" model="email.template">
|
||||
<field name="name">Lead forward</field>
|
||||
<field name="email_from"></field>
|
||||
<field name="subject">Fwd: Lead: ${object.name}</field>
|
||||
<field name="email_to"></field>
|
||||
<field name="lang"></field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<record model="crm.case.stage" id="stage_portal_lead_assigned">
|
||||
<field name="name">Assigned</field>
|
||||
<field eval="1" name="case_default"/>
|
||||
<field eval="0" name="probability"/>
|
||||
<field eval="12" name="sequence"/>
|
||||
<field name="type">lead</field>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="stage_portal_lead_recycle">
|
||||
<field name="name">To Recycle</field>
|
||||
<field eval="1" name="case_default"/>
|
||||
<field eval="0" name="probability"/>
|
||||
<field eval="11" name="sequence"/>
|
||||
<field name="type">lead</field>
|
||||
</record>
|
||||
<record id="email_template_lead_forward_mail" model="email.template">
|
||||
<field name="name">Lead Mass Mail</field>
|
||||
<field name="model_id" model="ir.model" search="[('name', '=', 'crm.lead.forward.to.partner')]"></field>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
<field name="email_to">${ctx['partner_id'].email}</field>
|
||||
<field name="email_from">${user.email or ''}</field>
|
||||
<field name="subject">Fwd: Lead: ${ctx['partner_id'].name}</field>
|
||||
<field name="body_html"><![CDATA[
|
||||
Hello ${object.partner_assigned_id.name},
|
||||
<p>
|
||||
Here is a lead that might interest you.
|
||||
</p>
|
||||
<p>
|
||||
Please keep me informed about your actions about it so that I can keep an
|
||||
accurate follow-up of it and help you in the sale cycle.
|
||||
</p>
|
||||
<p>
|
||||
Your account manager,<br/>
|
||||
${object.user_id.name},<br/>
|
||||
${object.user_id.email}
|
||||
</p>
|
||||
|
||||
<p>Hello,</p>
|
||||
|
||||
<p>
|
||||
${ctx["mail_body"].replace('\n','<br>') | safe}
|
||||
</p>
|
||||
|
||||
% if ctx["history_mode"] in ('whole'):
|
||||
% for message in object.message_ids:
|
||||
---- Original Message (${message.date or ''}) ----<br/>
|
||||
${message.body | safe}
|
||||
% endfor
|
||||
<p>We have been contacted by those prospects that are in your region. Thus, the following leads have been assigned to ${ctx['partner_id'].name}:</p>
|
||||
|
||||
<ol>
|
||||
% for lead in ctx['partner_leads']:
|
||||
<li><a href="${lead.lead_link}">${lead.lead_id.name or 'Subject Undefined'}</a>, ${lead.lead_id.contact_name or 'Contact Name Undefined'}, ${lead.lead_id.country_id and lead.lead_id.country_id.name or 'Country Undefined' }, ${lead.lead_id.email_from or 'Email Undefined'}, ${lead.lead_id.phone or ''} </li></br>
|
||||
% endfor
|
||||
</ol>
|
||||
|
||||
% if ctx.get('partner_in_portal'):
|
||||
<p>Please connect to your <a href="${object.get_portal_url()}">Partner Portal</a> to get details. On each lead are two buttons on the top left corner that you should press after having contacted the lead: "I'm interested" & "I'm not interested".</p>
|
||||
% else:
|
||||
<p>
|
||||
You do not have yet a portal access to our database. Please contact
|
||||
${ctx['partner_id'].user_id and ctx['partner_id'].user_id.email and 'your account manager %s (%s)' % (ctx['partner_id'].user_id.name,ctx['partner_id'].user_id.email) or 'us'}.
|
||||
</p>
|
||||
% endif
|
||||
% if ctx['history_mode'] == 'latest':
|
||||
---- Original Message (${object.message_ids[0].date or ''}) ----<br/>
|
||||
${object.message_ids[0].body | safe}
|
||||
<p>The lead will be sent to another partner if you do not contact the lead before 20 days.</p>
|
||||
|
||||
<p>Thanks,</p>
|
||||
|
||||
<pre>
|
||||
${ctx['partner_id'].user_id and ctx['partner_id'].user_id.signature or ''}
|
||||
</pre>
|
||||
% if not ctx['partner_id'].user_id:
|
||||
PS: It looks like you do not have an account manager assigned to you, please contact us.
|
||||
% endif
|
||||
]]></field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
|
@ -0,0 +1,209 @@
|
|||
<openerp>
|
||||
<data>
|
||||
<!-- lead views-->
|
||||
<record model="ir.ui.view" id="crm_lead_portal_tree">
|
||||
<field name="name">partner lead</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority" eval="32"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Leads" colors="blue:state=='pending';grey:state in ('cancel', 'done');red:stage_id[1]=='Disinterested';black:stage_id[1]=='Interested'">
|
||||
<field name="date_deadline" invisible="1"/>
|
||||
<field name="create_date"/>
|
||||
<field name="name" string="Subject"/>
|
||||
<field name="contact_name"/>
|
||||
<field name="country_id" invisible="context.get('invisible_country', True)" />
|
||||
<field name="email_from"/>
|
||||
<field name="phone"/>
|
||||
<field name="stage_id" invisible="1"/>
|
||||
<field name="type_id" invisible="1"/>
|
||||
<field name="referred" invisible="1"/>
|
||||
<field name="channel_id" invisible="1"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
||||
|
||||
<button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/>
|
||||
<button string="I'm not interested" name="case_disinterested" icon="gtk-close" type="object"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model= "ir.ui.view" id="crm_lead_portal_form">
|
||||
<field name="name">crm_portal_form</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority" eval="32"/>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Leads" version="7.0">
|
||||
<header>
|
||||
<button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/>
|
||||
<button string="I'm not interested" name="case_disinterested" icon="gtk-close" type="object"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="partner_name" string="Partner Name" readonly="1"/>
|
||||
<field name="title" widget="selection" readonly="1"/>
|
||||
<field name="contact_name" readonly="1"/>
|
||||
<field name="function" readonly="1"/>
|
||||
<field name="email_from" readonly="1"/>
|
||||
<field name="phone" readonly="1"/>
|
||||
<field name="fax" readonly="1"/>
|
||||
<field name="mobile" readonly="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="street" readonly="1"/>
|
||||
<field name="street2" readonly="1"/>
|
||||
<field name="zip" readonly="1"/>
|
||||
<field name="city" readonly="1"/>
|
||||
<field name="country_id" readonly="1"/>
|
||||
<field name="state_id" readonly="1"/>
|
||||
</group>
|
||||
<label for="description" colspan="2"/>
|
||||
<field name="description" nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<!-- opportunity views-->
|
||||
<record model="ir.ui.view" id="crm_opportunity_portal_tree">
|
||||
<field name="name">partner lead</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority" eval="32"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Leads" colors="blue:state=='pending';grey:state in ('cancel', 'done')">
|
||||
<field name="date_deadline" invisible="1"/>
|
||||
<field name="create_date" groups="base.group_no_one"/>
|
||||
<field name="name" string="Opportunity"/>
|
||||
<field name="partner_id" string="Customer"/>
|
||||
<field name="country_id" invisible="context.get('invisible_country', True)" />
|
||||
<field name="date_action"/>
|
||||
<field name="title_action" />
|
||||
<field name="channel_id" invisible="1"/>
|
||||
<field name="type_id" invisible="1"/>
|
||||
<field name="planned_revenue" sum="Expected Revenues"/>
|
||||
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
|
||||
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
||||
<field name="priority" invisible="1"/>
|
||||
<field name="state" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model= "ir.ui.view" id="crm_opportunity_portal_form">
|
||||
<field name="name">crm_portal_form</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="priority" eval="32"/>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Leads" version="7.0">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name" required="1" string="Opportunity"/>
|
||||
<field name="planned_revenue" readonly="1"/>
|
||||
<field name="probability" readonly="1"/>
|
||||
<field name="date_deadline"/>
|
||||
<newline/>
|
||||
<field name="date_action" readonly="1"/>
|
||||
<field name="title_action" readonly="1"/>
|
||||
<field name="priority" string="Priority" readonly="1"/>
|
||||
<newline/>
|
||||
<field name="type" invisible="1" readonly="1"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Opportunity">
|
||||
<group col="2">
|
||||
<separator string="Contact" colspan="2"/>
|
||||
<group col="2">
|
||||
<field name="partner_id" select="1"
|
||||
on_change="onchange_partner_id(partner_id, email_from)" string="Customer"
|
||||
colspan="2" readonly="1"/>
|
||||
<field name="partner_name" string="Customer Name" readonly="1"/>
|
||||
<field domain="[('domain', '=', 'contact')]" name="title" widget="selection" readonly="1"/>
|
||||
<field name="function" readonly="1"/>
|
||||
<field name="street" readonly="1"/>
|
||||
<field name="street2" readonly="1"/>
|
||||
</group>
|
||||
<group col="2">
|
||||
<field name="zip" readonly="1"/>
|
||||
<field name="city" readonly="1"/>
|
||||
<field name="country_id" readonly="1"/>
|
||||
<field name="state_id" readonly="1"/>
|
||||
<field name="phone" readonly="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="2">
|
||||
<group col="2">
|
||||
<separator string="Communication" colspan="2"/>
|
||||
<field name="email_from" readonly="1"/>
|
||||
<field name="phone" readonly="1"/>
|
||||
<field name="fax" readonly="1"/>
|
||||
<field name="mobile" readonly="1"/>
|
||||
</group>
|
||||
<group col="2">
|
||||
<separator string="Categorization" colspan="2"/>
|
||||
<field name="type_id" widget="selection" readonly="1"/>
|
||||
<field name="channel_id" widget="selection" readonly="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Details" />
|
||||
<field name="description" nolabel="1" colspan="4"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- leads -->
|
||||
|
||||
<record id="action_portal_leads" model="ir.actions.act_window">
|
||||
<field name="name">Leads</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="crm_lead_portal_tree"/>
|
||||
<field name="domain">[('type','like','lead')]</field>
|
||||
</record>
|
||||
|
||||
<record id="action_portal_lead_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="crm_lead_portal_tree"/>
|
||||
<field name="act_window_id" ref="action_portal_leads"/>
|
||||
</record>
|
||||
|
||||
<record id="action_portal_lead_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_lead_portal_form"/>
|
||||
<field name="act_window_id" ref="action_portal_leads"/>
|
||||
</record>
|
||||
|
||||
<!-- opportunities -->
|
||||
|
||||
<record id="action_portal_opportunities" model="ir.actions.act_window">
|
||||
<field name="name">Opportunities</field>
|
||||
<field name="res_model">crm.lead</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="crm_opportunity_portal_tree"/>
|
||||
<field name="domain">[('type','like','opportunity')]</field>
|
||||
</record>
|
||||
|
||||
<record id="action_portal_opportunities_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="crm_opportunity_portal_tree"/>
|
||||
<field name="act_window_id" ref="action_portal_opportunities"/>
|
||||
</record>
|
||||
|
||||
<record id="action_portal_opportunities_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_opportunity_portal_form"/>
|
||||
<field name="act_window_id" ref="action_portal_opportunities"/>
|
||||
</record>
|
||||
|
||||
<!--menus-->
|
||||
<menuitem name="Leads & Opportunities" id="portal_leads" parent="portal.portal_menu" sequence="25"/>
|
||||
<menuitem action="action_portal_leads" sequence="0" id="openerp_portal_menu_sales_leads_current" parent="portal_leads"/>
|
||||
<menuitem action="action_portal_opportunities" sequence="1" id="openerp_portal_menu_sales_leads_current1" parent="portal_leads"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Partner and address -->
|
||||
<record id="res_partner_access" model="ir.model.access">
|
||||
<field name="name">openerp.portal.res.partner</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="group_id" ref="portal.group_portal"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_create" eval="0"/>
|
||||
<field name="perm_write" eval="0"/>
|
||||
<field name="perm_unlink" eval="0"/>
|
||||
</record>
|
||||
<record id="res_partner_rule" model="ir.rule">
|
||||
<field name="name">openerp.portal.res.partner</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="groups" eval="[(6,0,[ref('portal.group_portal')])]"/>
|
||||
<field name="domain_force">[('id','child_of',user.commercial_partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="res_partner_grade_access" model="ir.model.access">
|
||||
<field name="name">openerp.portal.res.partner.grade</field>
|
||||
<field name="model_id" ref="crm_partner_assign.model_res_partner_grade"/>
|
||||
<field name="group_id" ref="portal.group_portal"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_create" eval="0"/>
|
||||
<field name="perm_write" eval="0"/>
|
||||
<field name="perm_unlink" eval="0"/>
|
||||
</record>
|
||||
|
||||
<!-- CRM Lead portal -->
|
||||
<record id="assigned_lead_portal_rule_1" model="ir.rule">
|
||||
<field name="name">openerp.portal.crm.lead</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="groups" eval="[(6,0,[ref('portal.group_portal')])]"/>
|
||||
<field name="domain_force">[('partner_assigned_id','child_of',user.commercial_partner_id.id)]</field>
|
||||
</record>
|
||||
<record id="lead_portal_access" model="ir.model.access">
|
||||
<field name="name">openerp.portal.crm.lead</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="group_id" ref="portal.group_portal"/>
|
||||
<field name="perm_read" eval="1"/>
|
||||
<field name="perm_create" eval="0"/>
|
||||
<field name="perm_write" eval="1"/>
|
||||
<field name="perm_unlink" eval="0"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -2,7 +2,7 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<!--Partner Activation -->
|
||||
<!--Partner Activation -->
|
||||
|
||||
<record model="ir.ui.view" id="res_partner_activation_form">
|
||||
<field name="name">openerp_custom.res.partner.activation.form</field>
|
||||
|
@ -33,145 +33,134 @@
|
|||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="res_partner_activation_config_mi" parent="base.menu_config_address_book" action="res_partner_activation_act" groups="base.group_no_one"/>
|
||||
<menuitem id="res_partner_activation_config_mi" parent="base.menu_config_address_book" action="res_partner_activation_act" groups="base.group_no_one" />
|
||||
|
||||
<!--Partner Grade -->
|
||||
<!--Partner Grade -->
|
||||
|
||||
|
||||
<record id="view_partner_grade_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.grade.tree</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Partner Grade">
|
||||
<field name="sequence" invisible="1"/>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_partner_grade_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.grade.form</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Partner Grade" version="7.0">
|
||||
<group col="4">
|
||||
<field name="name"/>
|
||||
<field name="sequence"/>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="res_partner_grade_action" model="ir.actions.act_window">
|
||||
<field name="name">Partner Grade</field>
|
||||
<field name="res_model">res.partner.grade</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<menuitem action="res_partner_grade_action" id="menu_res_partner_grade_action"
|
||||
groups="base.group_no_one"
|
||||
parent="base.menu_crm_config_lead" />
|
||||
|
||||
<!-- Partner form -->
|
||||
<record id="view_res_partner_filter_assign_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit.tree</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="date_review_next"/>
|
||||
<field name="grade_id"/>
|
||||
<field name="activation"/>
|
||||
<record id="view_partner_grade_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.grade.tree</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Partner Grade">
|
||||
<field name="sequence" invisible="1" />
|
||||
<field name="name" />
|
||||
</tree>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_res_partner_filter_assign" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit.search</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_res_partner_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<filter string="Salesperson" position="after">
|
||||
<filter string="Activation" context="{'group_by' : 'activation'}" domain="[]" icon="terp-personal" />
|
||||
</filter>
|
||||
<field name="category_id" position="after">
|
||||
<field name="grade_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_partner_geo_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//notebook[last()]" position="inside">
|
||||
<page string="Geo Localization">
|
||||
<group>
|
||||
</record>
|
||||
<record id="view_partner_grade_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.grade.form</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Partner Grade" version="7.0">
|
||||
<group col="4">
|
||||
<group>
|
||||
<separator string="Partner Activation" colspan="2"/>
|
||||
<field name="grade_id" widget="selection"/>
|
||||
<field name="activation" widget="selection"/>
|
||||
<field name="partner_weight"/>
|
||||
<field name="name" />
|
||||
<field name="partner_weight" />
|
||||
<div>
|
||||
<p class="oe_grey">
|
||||
Define a weight to this grade. The weight will be used as default in the partner form to compute the chance for this partner to get leads. For instance, for business purpose, you can define a target revenue for each grade. To give the same chance to each partner to get leads, keep 1 in this field.
|
||||
</p>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<separator string="Partner Review" colspan="2"/>
|
||||
<field name="date_review"/>
|
||||
<field name="date_review_next"/>
|
||||
<field name="date_partnership"/>
|
||||
<field name="sequence" />
|
||||
<field name="active" />
|
||||
</group>
|
||||
</group>
|
||||
<group colspan="2" col="2">
|
||||
<separator string="Geo Localization" colspan="2"/>
|
||||
<button
|
||||
string="Geo Localize"
|
||||
name="geo_localize"
|
||||
colspan="2"
|
||||
icon="gtk-apply"
|
||||
type="object"/>
|
||||
<field name="partner_latitude"/>
|
||||
<field name="partner_longitude"/>
|
||||
<field name="date_localization"/>
|
||||
</group>
|
||||
<newline/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="res_partner_grade_action" model="ir.actions.act_window">
|
||||
<field name="name">Partner Grade</field>
|
||||
<field name="res_model">res.partner.grade</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<menuitem action="res_partner_grade_action" id="menu_res_partner_grade_action" groups="base.group_no_one" parent="base.menu_crm_config_lead" />
|
||||
|
||||
<field name="opportunity_assigned_ids" colspan="4" nolabel="1">
|
||||
<tree string="Assigned Opportunities" colors="blue:state=='pending';gray:state=='cancel'">
|
||||
<field name="create_date"/>
|
||||
<field name="name"/>
|
||||
<field name="type"/>
|
||||
<field name="stage_id"/>
|
||||
<button name="stage_previous" string="Previous"
|
||||
states="open,pending" type="object" icon="gtk-go-back" />
|
||||
<button name="stage_next" string="Next"
|
||||
states="open,pending" type="object"
|
||||
icon="gtk-go-forward" />
|
||||
<field name="section_id"
|
||||
invisible="context.get('invisible_section', True)"
|
||||
groups="base.group_multi_salesteams"/>
|
||||
<field name="user_id" />
|
||||
<field name="state" />
|
||||
<button name="case_cancel" string="Cancel"
|
||||
states="draft,open,pending" type="object"
|
||||
icon="gtk-cancel" />
|
||||
<button name="case_open" string="Open"
|
||||
states="draft,pending" type="object"
|
||||
icon="gtk-go-forward" />
|
||||
<button name="case_close" string="Close"
|
||||
states="open,draft,pending" type="object"
|
||||
icon="gtk-close" />
|
||||
<button string="Convert to Opportunity"
|
||||
name="convert_opportunity"
|
||||
states="draft,open,pending" icon="gtk-index"
|
||||
type="object" attrs="{'invisible':[('type','=','opportunity')]}" />
|
||||
<button name="case_escalate" string="Escalate"
|
||||
states="open,draft,pending" type="object"
|
||||
icon="gtk-go-up" />
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<!-- Partner form -->
|
||||
<record id="view_res_partner_filter_assign_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit.tree</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_tree" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="date_review_next" />
|
||||
<field name="grade_id" />
|
||||
<field name="activation" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_res_partner_filter_assign" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit.search</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_res_partner_filter" />
|
||||
<field name="arch" type="xml">
|
||||
<filter string="Salesperson" position="after">
|
||||
<filter string="Activation" context="{'group_by' : 'activation'}" domain="[]" icon="terp-personal" />
|
||||
</filter>
|
||||
<field name="category_id" position="after">
|
||||
<field name="grade_id" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_partner_geo_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.geo.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//notebook[last()]" position="inside">
|
||||
<page string="Forwarded Leads">
|
||||
<group>
|
||||
<group string="Partner Activation">
|
||||
<label for="partner_latitude" string="Geolocalisation" />
|
||||
<div class="oe_title oe_inline">
|
||||
<h3 class="oe_inline">
|
||||
<span class="oe_grey">( </span>
|
||||
<field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline" />
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span>
|
||||
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1" />
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span>
|
||||
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span>
|
||||
<span class="oe_grey">) </span>
|
||||
</h3>
|
||||
<button string="Geolocalize" name="geo_localize" class="oe_inline" type="object" />
|
||||
</div>
|
||||
<field name="grade_id" widget="selection" on_change="onchange_grade_id(grade_id)" />
|
||||
<field name="partner_weight" class="oe_inline" />
|
||||
<div colspan="2">
|
||||
<p class="oe_grey">
|
||||
Higher is the value, higher is the probability for this partner to get more leads.
|
||||
</p>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<separator string="Partner Review" colspan="2" />
|
||||
<field name="date_review" />
|
||||
<field name="date_review_next" />
|
||||
<field name="date_partnership" />
|
||||
</group>
|
||||
<group>
|
||||
</group>
|
||||
</group>
|
||||
<newline />
|
||||
<separator string="Forwarded Leads" colspan="2" />
|
||||
<field name="opportunity_assigned_ids" colspan="4" nolabel="1">
|
||||
<tree string="Assigned Opportunities" colors="blue:state=='pending';gray:state=='cancel'">
|
||||
<field name="name" />
|
||||
<field name="contact_name" />
|
||||
<field name="email_from" />
|
||||
<field name="phone" />
|
||||
<field name="stage_id" />
|
||||
<field name="state" invisible="1" />
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -5,3 +5,4 @@ access_crm_partner_report,crm.partner.report.assign.all,model_crm_partner_report
|
|||
access_res_partner_grade,res.partner.grade,model_res_partner_grade,base.group_sale_salesman,1,1,1,0
|
||||
access_res_partner_grade_manager,res.partner.grade.manager,model_res_partner_grade,base.group_sale_manager,1,1,1,1
|
||||
"access_partner_activation_manager","res.partner.activation.manager","model_res_partner_activation","base.group_partner_manager",1,1,1,1
|
||||
partner_access_crm_lead,crm.lead,model_crm_lead,portal.group_portal,1,1,0,0
|
|
|
@ -0,0 +1,13 @@
|
|||
openerp.crm_partner_assign = function (instance) {
|
||||
instance.crm_partner_assign = instance.crm_partner_assign || {};
|
||||
instance.crm_partner_assign.next_or_list = function(parent) {
|
||||
var form = parent.inner_widget.views.form.controller;
|
||||
form.dataset.remove_ids([form.dataset.ids[form.dataset.index]]);
|
||||
form.reload();
|
||||
if (!form.dataset.ids.length){
|
||||
parent.inner_widget.switch_mode('list');
|
||||
}
|
||||
parent.do_action({ type: 'ir.actions.act_window_close' });
|
||||
};
|
||||
instance.web.client_actions.add("next_or_list", "instance.crm_partner_assign.next_or_list");
|
||||
}
|
|
@ -20,3 +20,4 @@
|
|||
##############################################################################
|
||||
|
||||
import crm_forward_to_partner
|
||||
import crm_channel_interested
|
|
@ -0,0 +1,76 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 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 Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
from openerp import SUPERUSER_ID
|
||||
|
||||
|
||||
class crm_lead_forward_to_partner(osv.TransientModel):
|
||||
""" Forward info history to partners. """
|
||||
_name = 'crm.lead.channel.interested'
|
||||
_columns = {
|
||||
'interested': fields.boolean('Interested by this lead'),
|
||||
'contacted': fields.boolean('Did you contact the lead?', help="The lead has been contacted"),
|
||||
'comment': fields.text('Comment', help="What are the elements that have led to this decision?", required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'interested': lambda self, cr, uid, c: c.get('interested', True),
|
||||
'contacted': False,
|
||||
}
|
||||
|
||||
def action_confirm(self, cr, uid, ids, context=None):
|
||||
wizard = self.browse(cr, uid, ids[0], context=context)
|
||||
if wizard.interested and not wizard.contacted:
|
||||
raise osv.except_osv(_('Error!'), _("You must contact the lead before saying that you are interested"))
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
lead_obj.check_access_rights(cr, uid, 'write')
|
||||
if wizard.interested:
|
||||
message = _('<p>I am interested by this lead.</p>')
|
||||
values = {}
|
||||
else:
|
||||
stage = 'stage_portal_lead_recycle'
|
||||
message = _('<p>I am not interested by this lead. I %scontacted the lead.</p>') % (not wizard.contacted and 'have not ' or '')
|
||||
values = {'partner_assigned_id': False}
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||
partner_ids = self.pool.get('res.partner').search(cr, SUPERUSER_ID, [('id', 'child_of', user.partner_id.commercial_partner_id.id)], context=context)
|
||||
lead_obj.message_unsubscribe(cr, SUPERUSER_ID, context.get('active_ids'), partner_ids, context=None)
|
||||
try:
|
||||
stage_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', stage)[1]
|
||||
except ValueError:
|
||||
stage_id = False
|
||||
if stage_id:
|
||||
values.update({'stage_id': stage_id})
|
||||
if wizard.comment:
|
||||
message += '<p>%s</p>' % wizard.comment
|
||||
lead_obj.message_post(cr, uid, context.get('active_ids'), body=message, context=context)
|
||||
if values:
|
||||
lead_obj.write(cr, SUPERUSER_ID, context.get('active_ids'), values)
|
||||
if wizard.interested:
|
||||
for lead in lead_obj.browse(cr, uid, context.get('active_ids'), context=context):
|
||||
lead_obj.convert_opportunity(cr, SUPERUSER_ID, [lead.id], lead.partner_id and lead.partner_id.id or None, context=None)
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'next_or_list',
|
||||
'params': {
|
||||
},
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="crm_lead_channel_interested_form">
|
||||
<field name="name">crm_lead_channel_interested</field>
|
||||
<field name="model">crm.lead.channel.interested</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Send Mail" version="7.0">
|
||||
<group col="1">
|
||||
<field name="interested" nolabel="1" invisible="1"/>
|
||||
<div>
|
||||
<div invisible="context.get('interested', True)">
|
||||
<label for="comment" string="Why aren't you interested by this lead?" />
|
||||
</div>
|
||||
<div invisible="not context.get('interested', True)">
|
||||
<label for="comment" string="What is the next action? When? What is the expected revenue?" />
|
||||
</div>
|
||||
</div>
|
||||
<field name="comment" nolabel="1"/>
|
||||
<div class="oe_inline">
|
||||
<field name="contacted" nolabel="1" string="Do you have contacted the customer?"/>
|
||||
<label for="contacted" />
|
||||
</div>
|
||||
<p class="oe_grey" invisible="not context.get('interested', True)">
|
||||
Once the lead is processed, it will be in your "Opportunities" menu.
|
||||
</p>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_confirm" string="Confirm" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" special="cancel" class="oe_link"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="crm_lead_channel_interested_act">
|
||||
<field name="name">Lead Feedback</field>
|
||||
<field name="res_model">crm.lead.channel.interested</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_lead_channel_interested_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -27,107 +27,182 @@ from openerp.tools.translate import _
|
|||
class crm_lead_forward_to_partner(osv.TransientModel):
|
||||
""" Forward info history to partners. """
|
||||
_name = 'crm.lead.forward.to.partner'
|
||||
_inherit = "mail.compose.message"
|
||||
|
||||
def _get_composition_mode_selection(self, cr, uid, context=None):
|
||||
composition_mode = super(crm_lead_forward_to_partner, self)._get_composition_mode_selection(cr, uid, context=context)
|
||||
composition_mode.append(('forward', 'Forward'))
|
||||
return composition_mode
|
||||
|
||||
_columns = {
|
||||
'partner_ids': fields.many2many('res.partner',
|
||||
'lead_forward_to_partner_res_partner_rel',
|
||||
'wizard_id', 'partner_id', 'Additional contacts'),
|
||||
'attachment_ids': fields.many2many('ir.attachment',
|
||||
'lead_forward_to_partner_attachment_rel',
|
||||
'wizard_id', 'attachment_id', 'Attachments'),
|
||||
'history_mode': fields.selection([('info', 'Internal notes'),
|
||||
('latest', 'Latest email'), ('whole', 'Whole Story')],
|
||||
'Send history', required=True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'history_mode': 'info',
|
||||
}
|
||||
def _convert_to_assignation_line(self, cr, uid, lead, partner, context=None):
|
||||
lead_location = []
|
||||
partner_location = []
|
||||
if lead.country_id:
|
||||
lead_location.append(lead.country_id.name)
|
||||
if lead.city:
|
||||
lead_location.append(lead.city)
|
||||
if partner:
|
||||
if partner.country_id:
|
||||
partner_location.append(partner.country_id.name)
|
||||
if partner.city:
|
||||
partner_location.append(partner.city)
|
||||
return {'lead_id': lead.id,
|
||||
'lead_location': ", ".join(lead_location),
|
||||
'partner_assigned_id': partner and partner.id or False,
|
||||
'partner_location': ", ".join(partner_location),
|
||||
'lead_link': self.get_lead_portal_url(cr, uid, lead.id, lead.type, context=context),
|
||||
}
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
# set as comment, perform overrided document-like action that calls get_record_data
|
||||
old_mode = context.get('default_composition_mode', 'forward')
|
||||
context['default_composition_mode'] = 'comment'
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
email_template_obj = self.pool.get('email.template')
|
||||
try:
|
||||
template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'email_template_lead_forward_mail')[1]
|
||||
except ValueError:
|
||||
template_id = False
|
||||
res = super(crm_lead_forward_to_partner, self).default_get(cr, uid, fields, context=context)
|
||||
# back to forward mode
|
||||
context['default_composition_mode'] = old_mode
|
||||
res['composition_mode'] = context['default_composition_mode']
|
||||
active_ids = context.get('active_ids')
|
||||
default_composition_mode = context.get('default_composition_mode')
|
||||
res['assignation_lines'] = []
|
||||
if template_id:
|
||||
res['body'] = email_template_obj.get_email_template(cr, uid, template_id).body_html
|
||||
if active_ids:
|
||||
lead_ids = lead_obj.browse(cr, uid, active_ids, context=context)
|
||||
if default_composition_mode == 'mass_mail':
|
||||
partner_assigned_ids = lead_obj.search_geo_partner(cr, uid, active_ids, context=context)
|
||||
else:
|
||||
partner_assigned_ids = dict((lead.id, lead.partner_assigned_id and lead.partner_assigned_id.id or False) for lead in lead_ids)
|
||||
res['partner_id'] = lead_ids[0].partner_assigned_id.id
|
||||
for lead in lead_ids:
|
||||
partner_id = partner_assigned_ids.get(lead.id) or False
|
||||
partner = False
|
||||
if partner_id:
|
||||
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||
res['assignation_lines'].append(self._convert_to_assignation_line(cr, uid, lead, partner))
|
||||
return res
|
||||
|
||||
def get_record_data(self, cr, uid, model, res_id, context=None):
|
||||
""" Override of mail.compose.message, to add default values coming
|
||||
form the related lead.
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
res = super(crm_lead_forward_to_partner, self).get_record_data(cr, uid, model, res_id, context=context)
|
||||
if model not in ('crm.lead') or not res_id:
|
||||
return res
|
||||
template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'crm_partner_assign_email_template')[1]
|
||||
context['history_mode'] = context.get('history_mode','whole')
|
||||
mail_body_fields = ['partner_id', 'partner_name', 'title', 'function', 'street', 'street2', 'zip', 'city', 'country_id', 'state_id', 'email_from', 'phone', 'fax', 'mobile', 'description']
|
||||
lead = self.pool.get('crm.lead').browse(cr, uid, res_id, context=context)
|
||||
context['mail_body'] = self.pool.get('crm.lead')._mail_body(cr, uid, lead, mail_body_fields, context=context)
|
||||
template = self.generate_email_for_composer(cr, uid, template_id, res_id, context)
|
||||
res['subject'] = template['subject']
|
||||
res['body'] = template['body']
|
||||
return res
|
||||
|
||||
def on_change_history_mode(self, cr, uid, ids, history_mode, model, res_id, context=None):
|
||||
""" Update body when changing history_mode """
|
||||
if context is None:
|
||||
context = {}
|
||||
if model and model == 'crm.lead' and res_id:
|
||||
lead = self.pool[model].browse(cr, uid, res_id, context=context)
|
||||
context['history_mode'] = history_mode
|
||||
body = self.get_record_data(cr, uid, 'crm.lead', res_id, context=context)['body']
|
||||
return {'value': {'body': body}}
|
||||
|
||||
def create(self, cr, uid, values, context=None):
|
||||
""" TDE-HACK: remove 'type' from context, because when viewing an
|
||||
opportunity form view, a default_type is set and propagated
|
||||
to the wizard, that has a not matching type field. """
|
||||
default_type = context.pop('default_type', None)
|
||||
new_id = super(crm_lead_forward_to_partner, self).create(cr, uid, values, context=context)
|
||||
if default_type:
|
||||
context['default_type'] = default_type
|
||||
return new_id
|
||||
|
||||
def action_forward(self, cr, uid, ids, context=None):
|
||||
""" Forward the lead to a partner """
|
||||
if context is None:
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
record = self.browse(cr, uid, ids[0], context=context)
|
||||
email_template_obj = self.pool.get('email.template')
|
||||
try:
|
||||
template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'email_template_lead_forward_mail')[1]
|
||||
except ValueError:
|
||||
raise osv.except_osv(_('Email Template Error'),
|
||||
_('The Forward Email Template is not in the database'))
|
||||
try:
|
||||
portal_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'portal', 'group_portal')[1]
|
||||
except ValueError:
|
||||
raise osv.except_osv(_('Portal Group Error'),
|
||||
_('The Portal group cannot be found'))
|
||||
|
||||
local_context = context.copy()
|
||||
if not (record.forward_type == 'single'):
|
||||
no_email = set()
|
||||
for lead in record.assignation_lines:
|
||||
if lead.partner_assigned_id and not lead.partner_assigned_id.email:
|
||||
no_email.add(lead.partner_assigned_id.name)
|
||||
if no_email:
|
||||
raise osv.except_osv(_('Email Error'),
|
||||
('Set an email address for the partner(s): %s' % ", ".join(no_email)))
|
||||
if record.forward_type == 'single' and not record.partner_id.email:
|
||||
raise osv.except_osv(_('Email Error'),
|
||||
('Set an email address for the partner %s' % record.partner_id.name))
|
||||
|
||||
partners_leads = {}
|
||||
for lead in record.assignation_lines:
|
||||
partner = record.forward_type == 'single' and record.partner_id or lead.partner_assigned_id
|
||||
lead_details = {
|
||||
'lead_link': lead.lead_link,
|
||||
'lead_id': lead.lead_id,
|
||||
}
|
||||
if partner:
|
||||
partner_leads = partners_leads.get(partner.id)
|
||||
if partner_leads:
|
||||
partner_leads['leads'].append(lead_details)
|
||||
else:
|
||||
partners_leads[partner.id] = {'partner': partner, 'leads': [lead_details]}
|
||||
stage_id = False
|
||||
if record.assignation_lines and record.assignation_lines[0].lead_id.type == 'lead':
|
||||
try:
|
||||
stage_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'stage_portal_lead_assigned')[1]
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
for partner_id, partner_leads in partners_leads.items():
|
||||
in_portal = False
|
||||
for contact in (partner.child_ids or [partner]):
|
||||
if contact.user_ids:
|
||||
in_portal = portal_id in [g.id for g in contact.user_ids[0].groups_id]
|
||||
|
||||
local_context['partner_id'] = partner_leads['partner']
|
||||
local_context['partner_leads'] = partner_leads['leads']
|
||||
local_context['partner_in_portal'] = in_portal
|
||||
email_template_obj.send_mail(cr, uid, template_id, ids[0], context=local_context)
|
||||
lead_ids = [lead['lead_id'].id for lead in partner_leads['leads']]
|
||||
values = {'partner_assigned_id': partner_id, 'user_id': partner_leads['partner'].user_id.id}
|
||||
if stage_id:
|
||||
values['stage_id'] = stage_id
|
||||
lead_obj.write(cr, uid, lead_ids, values)
|
||||
self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner_id], context=context)
|
||||
return True
|
||||
|
||||
def get_lead_portal_url(self, cr, uid, lead_id, type, context=None):
|
||||
action = type == 'opportunity' and 'action_portal_opportunities' or 'action_portal_leads'
|
||||
try:
|
||||
action_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', action)[1]
|
||||
except ValueError:
|
||||
action_id = False
|
||||
portal_link = "%s/?db=%s#id=%s&action=%s&view_type=form" % (self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url'), cr.dbname, lead_id, action_id)
|
||||
return portal_link
|
||||
|
||||
def get_portal_url(self, cr, uid, ids, context=None):
|
||||
portal_link = "%s/?db=%s" % (self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url'), cr.dbname)
|
||||
return portal_link
|
||||
|
||||
_columns = {
|
||||
'forward_type': fields.selection([('single', 'a single partner: manual selection of partner'), ('assigned', "several partners: automatic assignation, using GPS coordinates and partner's grades"), ], 'Forward selected leads to'),
|
||||
'partner_id': fields.many2one('res.partner', 'Forward Leads To'),
|
||||
'assignation_lines': fields.one2many('crm.lead.assignation', 'forward_id', 'Partner Assignation'),
|
||||
'body': fields.html('Contents', help='Automatically sanitized HTML contents'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'forward_type': lambda self, cr, uid, c: c.get('forward_type') or 'single',
|
||||
}
|
||||
|
||||
|
||||
class crm_lead_assignation (osv.TransientModel):
|
||||
_name = 'crm.lead.assignation'
|
||||
_columns = {
|
||||
'forward_id': fields.many2one('crm.lead.forward.to.partner', 'Partner Assignation'),
|
||||
'lead_id': fields.many2one('crm.lead', 'Lead'),
|
||||
'lead_location': fields.char('Lead Location', size=128),
|
||||
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner'),
|
||||
'partner_location': fields.char('Partner Location', size=128),
|
||||
'lead_link': fields.char('Lead Single Links', size=128),
|
||||
}
|
||||
|
||||
def on_change_lead_id(self, cr, uid, ids, lead_id, context=None):
|
||||
if not context:
|
||||
context = {}
|
||||
# TDE FIX in 7.0: force mass_mailing mode; this way, the message will be
|
||||
# send only to partners; default subtype of mass_mailing is indeed False
|
||||
# Chatter will show 'logged a note', but partner_ids (aka, the assigned partner)
|
||||
# will effectively receive the message if present in the composition window
|
||||
self.write(cr, uid, ids, {'composition_mode': 'mass_mail'}, context=context)
|
||||
res = {'type': 'ir.actions.act_window_close'}
|
||||
wizard = self.browse(cr, uid, ids[0], context=context)
|
||||
if wizard.model not in ('crm.lead'):
|
||||
return res
|
||||
if context.get('active_ids') is None:
|
||||
context['active_ids'] = [wizard.res_id]
|
||||
if not lead_id:
|
||||
return {'value': {'lead_location': False}}
|
||||
lead = self.pool.get('crm.lead').browse(cr, uid, lead_id, context=context)
|
||||
lead_location = []
|
||||
if lead.country_id:
|
||||
lead_location.append(lead.country_id.name)
|
||||
if lead.city:
|
||||
lead_location.append(lead.city)
|
||||
return {'value': {'lead_location': ", ".join(lead_location)}}
|
||||
|
||||
lead = self.pool[wizard.model]
|
||||
lead_ids = wizard.res_id and [wizard.res_id] or []
|
||||
def on_change_partner_assigned_id(self, cr, uid, ids, partner_assigned_id, context=None):
|
||||
if not context:
|
||||
context = {}
|
||||
if not partner_assigned_id:
|
||||
return {'value': {'lead_location': False}}
|
||||
partner = self.pool.get('res.partner').browse(cr, uid, partner_assigned_id, context=context)
|
||||
partner_location = []
|
||||
if partner.country_id:
|
||||
partner_location.append(partner.country_id.name)
|
||||
if partner.city:
|
||||
partner_location.append(partner.city)
|
||||
return {'value': {'partner_location': ", ".join(partner_location)}}
|
||||
|
||||
if wizard.composition_mode == 'mass_mail':
|
||||
lead_ids = context and context.get('active_ids', []) or []
|
||||
value = self.default_get(cr, uid, ['body', 'email_to', 'email_cc', 'subject', 'history_mode'], context=context)
|
||||
value.pop('composition_mode')
|
||||
self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner.id for partner in wizard.partner_ids], context=context)
|
||||
self.write(cr, uid, ids, value, context=context)
|
||||
|
||||
return self.send_mail(cr, uid, ids, context=context)
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -1,36 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="ir.ui.view" id="crm_lead_forward_to_partner_form">
|
||||
<field name="name">crm_lead_forward_to_partner</field>
|
||||
<field name="model">crm.lead.forward.to.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Send Mail" version="7.0">
|
||||
<field name="composition_mode" colspan="2" nolabel="1" invisible="1"/>
|
||||
<field name="model" colspan="2" nolabel="1" invisible="1"/>
|
||||
<field name="res_id" colspan="2" nolabel="1" invisible="1"/>
|
||||
<separator string="Forward to Partner" colspan="4"/>
|
||||
<group col="4">
|
||||
<field name="history_mode" colspan="4"
|
||||
on_change="on_change_history_mode(history_mode, model, res_id)"/>
|
||||
<field name="subject" colspan="4"/>
|
||||
<field name="partner_ids" colspan="4" widget="many2many_tags_email"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Body">
|
||||
<field name="body"/>
|
||||
</page>
|
||||
<page string="Attachments">
|
||||
<field name="attachment_ids"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<group>
|
||||
<field name="forward_type" widget="radio" invisible="context.get('hide_forward_type',False)"/>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="partner_id" attrs="{'invisible': [('forward_type', 'in', ['assigned',False])], 'required': [('forward_type', '=', 'single')]}" />
|
||||
</group>
|
||||
<group>
|
||||
</group>
|
||||
</group>
|
||||
<field name="assignation_lines" attrs="{'invisible': [('forward_type', 'in', ['single',False])]}">
|
||||
<tree create="false" editable="bottom">
|
||||
<field name="lead_id" readonly="1" on_change="on_change_lead_id(lead_id)"/>
|
||||
<field name="lead_location" readonly="1"/>
|
||||
<field name="partner_assigned_id" on_change="on_change_partner_assigned_id(partner_assigned_id)"/>
|
||||
<field name="partner_location" readonly="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
<notebook colspan="4" groups="base.group_no_one">
|
||||
<page string="Email Template">
|
||||
<field name="body" readonly="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<footer>
|
||||
<button name="action_forward" string="Send" type="object"
|
||||
class="oe_highlight"/>
|
||||
<button name="action_forward" string="Send" type="object" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" special="cancel"
|
||||
class="oe_link"/>
|
||||
<button string="Cancel" special="cancel" class="oe_link"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
@ -45,14 +47,11 @@
|
|||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<act_window id="action_crm_send_mass_forward"
|
||||
multi="True"
|
||||
key2="client_action_multi" name="Mass forward to partner"
|
||||
res_model="crm.lead.forward.to.partner" src_model="crm.lead"
|
||||
view_mode="form" target="new" view_type="form"
|
||||
context="{'default_composition_mode' : 'mass_mail'}"
|
||||
view_id="crm_lead_forward_to_partner_form"
|
||||
/>
|
||||
<act_window id="action_crm_send_mass_forward" multi="True"
|
||||
key2="client_action_multi" name="Forward to Partner" res_model="crm.lead.forward.to.partner"
|
||||
src_model="crm.lead" view_mode="form" target="new" view_type="form"
|
||||
groups="base.group_sale_manager"
|
||||
context="{'default_composition_mode' : 'mass_mail'}" view_id="crm_lead_forward_to_partner_form" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
# Danish translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-19 17:34+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.model,name:crm_todo.model_project_task
|
||||
msgid "Task"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Timebox"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Lead"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "For cancelling the task"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
||||
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
||||
msgid "My Tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
#: field:crm.lead,task_ids:0
|
||||
msgid "Tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.model,name:crm_todo.model_crm_lead
|
||||
msgid "Lead/Opportunity"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: field:project.task,lead_id:0
|
||||
msgid "Lead / Opportunity"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "For changing to done state"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Previous"
|
||||
msgstr ""
|
|
@ -25,11 +25,9 @@ class res_partner(osv.osv):
|
|||
_inherit = 'res.partner'
|
||||
_columns = {
|
||||
'property_delivery_carrier': fields.property(
|
||||
'delivery.carrier',
|
||||
type='many2one',
|
||||
relation='delivery.carrier',
|
||||
string="Delivery Method",
|
||||
view_load=True,
|
||||
help="This delivery method will be used when invoicing from picking."),
|
||||
}
|
||||
|
||||
|
|
|
@ -88,7 +88,11 @@
|
|||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_wiki_tree"/>
|
||||
<field name="search_view_id" ref="view_wiki_filter"/>
|
||||
<field name="help">Create web pages</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new web page.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<menuitem id="menu_page" parent="menu_wiki" name="Pages" action="action_page" sequence="10"/>
|
||||
<record id="action_category" model="ir.actions.act_window">
|
||||
|
|
|
@ -24,8 +24,8 @@ import base64
|
|||
import logging
|
||||
|
||||
import openerp
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp.osv import osv, fields
|
||||
from openerp.osv import fields
|
||||
from openerp import tools
|
||||
from openerp.tools.translate import _
|
||||
from urllib import urlencode, quote as quote
|
||||
|
@ -191,7 +191,6 @@ class email_template(osv.osv):
|
|||
}
|
||||
|
||||
def create_action(self, cr, uid, ids, context=None):
|
||||
vals = {}
|
||||
action_obj = self.pool.get('ir.actions.act_window')
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
for template in self.browse(cr, uid, ids, context=context):
|
||||
|
@ -199,7 +198,7 @@ class email_template(osv.osv):
|
|||
model_data_id = data_obj._get_id(cr, uid, 'mail', 'email_compose_message_wizard_form')
|
||||
res_id = data_obj.browse(cr, uid, model_data_id, context=context).res_id
|
||||
button_name = _('Send Mail (%s)') % template.name
|
||||
vals['ref_ir_act_window'] = action_obj.create(cr, uid, {
|
||||
act_id = action_obj.create(cr, SUPERUSER_ID, {
|
||||
'name': button_name,
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'mail.compose.message',
|
||||
|
@ -211,27 +210,29 @@ class email_template(osv.osv):
|
|||
'target': 'new',
|
||||
'auto_refresh':1
|
||||
}, context)
|
||||
vals['ref_ir_value'] = self.pool.get('ir.values').create(cr, uid, {
|
||||
ir_values_id = self.pool.get('ir.values').create(cr, SUPERUSER_ID, {
|
||||
'name': button_name,
|
||||
'model': src_obj,
|
||||
'key2': 'client_action_multi',
|
||||
'value': "ir.actions.act_window," + str(vals['ref_ir_act_window']),
|
||||
'value': "ir.actions.act_window,%s" % act_id,
|
||||
'object': True,
|
||||
}, context)
|
||||
self.write(cr, uid, ids, {
|
||||
'ref_ir_act_window': vals.get('ref_ir_act_window',False),
|
||||
'ref_ir_value': vals.get('ref_ir_value',False),
|
||||
}, context)
|
||||
|
||||
template.write({
|
||||
'ref_ir_act_window': act_id,
|
||||
'ref_ir_value': ir_values_id,
|
||||
})
|
||||
|
||||
return True
|
||||
|
||||
def unlink_action(self, cr, uid, ids, context=None):
|
||||
for template in self.browse(cr, uid, ids, context=context):
|
||||
try:
|
||||
if template.ref_ir_act_window:
|
||||
self.pool.get('ir.actions.act_window').unlink(cr, uid, template.ref_ir_act_window.id, context)
|
||||
self.pool.get('ir.actions.act_window').unlink(cr, SUPERUSER_ID, template.ref_ir_act_window.id, context)
|
||||
if template.ref_ir_value:
|
||||
ir_values_obj = self.pool.get('ir.values')
|
||||
ir_values_obj.unlink(cr, uid, template.ref_ir_value.id, context)
|
||||
ir_values_obj.unlink(cr, SUPERUSER_ID, template.ref_ir_value.id, context)
|
||||
except Exception:
|
||||
raise osv.except_osv(_("Warning"), _("Deletion of the action record failed."))
|
||||
return True
|
||||
|
|
|
@ -54,18 +54,22 @@ class mail_compose_message(osv.TransientModel):
|
|||
Indeed, basic mail.compose.message wizard duplicates attachments in mass
|
||||
mailing mode. But in 'single post' mode, attachments of an email template
|
||||
also have to be duplicated to avoid changing their ownership. """
|
||||
if context is None:
|
||||
context = {}
|
||||
wizard_context = dict(context)
|
||||
for wizard in self.browse(cr, uid, ids, context=context):
|
||||
if wizard.template_id and not wizard.template_id.user_signature:
|
||||
wizard_context['mail_notify_user_signature'] = False # template user_signature is added when generating body_html
|
||||
if not wizard.attachment_ids or wizard.composition_mode == 'mass_mail' or not wizard.template_id:
|
||||
continue
|
||||
template = self.pool.get('email.template').browse(cr, uid, wizard.template_id.id, context=context)
|
||||
new_attachment_ids = []
|
||||
for attachment in wizard.attachment_ids:
|
||||
if attachment in template.attachment_ids:
|
||||
if attachment in wizard.template_id.attachment_ids:
|
||||
new_attachment_ids.append(self.pool.get('ir.attachment').copy(cr, uid, attachment.id, {'res_model': 'mail.compose.message', 'res_id': wizard.id}, context=context))
|
||||
else:
|
||||
new_attachment_ids.append(attachment.id)
|
||||
self.write(cr, uid, wizard.id, {'attachment_ids': [(6, 0, new_attachment_ids)]}, context=context)
|
||||
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
|
||||
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=wizard_context)
|
||||
|
||||
def onchange_template_id(self, cr, uid, ids, template_id, composition_mode, model, res_id, context=None):
|
||||
""" - mass_mailing: we cannot render, so return the template values
|
||||
|
|
|
@ -172,6 +172,12 @@ class event_event(osv.osv):
|
|||
continue
|
||||
return res
|
||||
|
||||
def _get_visibility_selection(self, cr, uid, context=None):
|
||||
return [('public', 'All Users'),
|
||||
('employees', 'Employees Only')]
|
||||
# Lambda indirection method to avoid passing a copy of the overridable method when declaring the field
|
||||
_visibility_selection = lambda self, *args, **kwargs: self._get_visibility_selection(*args, **kwargs)
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}),
|
||||
'user_id': fields.many2one('res.users', 'Responsible User', readonly=False, states={'done': [('readonly', True)]}),
|
||||
|
@ -209,11 +215,14 @@ class event_event(osv.osv):
|
|||
'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}),
|
||||
'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'),
|
||||
'visibility': fields.selection(_visibility_selection, 'Privacy / Visibility',
|
||||
select=True, required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'state': 'draft',
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'event.event', context=c),
|
||||
'user_id': lambda obj, cr, uid, context: uid,
|
||||
'visibility': 'employees',
|
||||
}
|
||||
|
||||
def subscribe_to_event(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -76,6 +76,7 @@
|
|||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1><field name="name"/></h1>
|
||||
<field name="visibility"/>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
|
|
|
@ -21,15 +21,13 @@
|
|||
|
||||
from openerp.osv import fields, osv
|
||||
|
||||
|
||||
class res_partner(osv.osv):
|
||||
_inherit = 'res.partner'
|
||||
|
||||
_columns = {
|
||||
'speaker': fields.boolean('Speaker', help="Check this box if this contact is a speaker."),
|
||||
'event_ids': fields.one2many('event.event','main_speaker_id', readonly=True),
|
||||
'event_registration_ids': fields.one2many('event.registration','partner_id', readonly=True),
|
||||
}
|
||||
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -2,9 +2,8 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Partners inherited form -->
|
||||
|
||||
<record id="view_event_partner_info_form" model="ir.ui.view">
|
||||
<!-- Partners inherited form -->
|
||||
<record id="view_event_partner_info_form" model="ir.ui.view">
|
||||
<field name="name">res.partner.event.info.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
|
@ -12,34 +11,8 @@
|
|||
<field name="supplier" position="after">
|
||||
<field name="speaker"/>
|
||||
</field>
|
||||
<xpath expr="//page[@name='page_history']" position="attributes">
|
||||
<attribute name="invisible">False</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='page_history']" position="inside">
|
||||
<group name="grp_event" string="Events">
|
||||
<field name="event_ids" colspan="4" nolabel="1">
|
||||
<tree string="Events">
|
||||
<field name="name" string="Event"/>
|
||||
<field name="main_speaker_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
<group name="grp_registration" string="Registrations">
|
||||
<field name="event_registration_ids" colspan="4" nolabel="1">
|
||||
<tree string="Events Registration">
|
||||
<field name="event_begin_date" string="Date"/>
|
||||
<field name="event_id" />
|
||||
<field name="nb_register"/>
|
||||
<field name="state"/>
|
||||
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
|
||||
<button name="button_reg_close" string="Close Registration" states="open" type="object" icon="gtk-close"/>
|
||||
<button name="check_confirm" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -26,25 +26,35 @@
|
|||
<data noupdate="1">
|
||||
|
||||
<!-- Multi - Company Rules -->
|
||||
<record model="ir.rule" id="event_event_comp_rule">
|
||||
<field name="name">Event multi-company</field>
|
||||
<record model="ir.rule" id="event_event_company_rule">
|
||||
<field name="name">Event: multi-company</field>
|
||||
<field name="model_id" ref="model_event_event"/>
|
||||
<field name="global" eval="True"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
<field name="domain_force">['|',
|
||||
('company_id', '=', False),
|
||||
('company_id', 'child_of', [user.company_id.id]),
|
||||
]
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="event_registration_comp_rule">
|
||||
<field name="name">Event Registration multi-company</field>
|
||||
<record model="ir.rule" id="event_registration_company_rule">
|
||||
<field name="name">Event/Registration: multi-company</field>
|
||||
<field name="model_id" ref="model_event_registration"/>
|
||||
<field name="global" eval="True"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
<field name="domain_force">['|',
|
||||
('company_id', '=', False),
|
||||
('company_id', 'child_of', [user.company_id.id]),
|
||||
]
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="report_event_registration_comp_rule">
|
||||
<field name="name">Report Event Registration multi-company</field>
|
||||
<record model="ir.rule" id="report_event_registration_company_rule">
|
||||
<field name="name">Event/Report Registration: multi-company</field>
|
||||
<field name="model_id" ref="model_report_event_registration"/>
|
||||
<field name="global" eval="True"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
<field name="domain_force">['|',
|
||||
('company_id', '=', False),
|
||||
('company_id', 'child_of', [user.company_id.id]),
|
||||
]
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
# Danish translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-19 17:36+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16673)\n"
|
||||
|
||||
#. module: event_sale
|
||||
#: model:ir.model,name:event_sale.model_product_product
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: help:product.product,event_ok:0
|
||||
msgid ""
|
||||
"Determine if a product needs to create automatically an event registration "
|
||||
"at the confirmation of a sales order line."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: help:sale.order.line,event_id:0
|
||||
msgid ""
|
||||
"Choose an event and it will automatically create a registration for this "
|
||||
"event."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: model:event.event,name:event_sale.event_technical_training
|
||||
msgid "Technical training in Grand-Rosiere"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: help:product.product,event_type_id:0
|
||||
msgid ""
|
||||
"Select event types so when we use this product in sales order lines, it will "
|
||||
"filter events of this type only."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:product.product,event_type_id:0
|
||||
msgid "Type of Event"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_ok:0
|
||||
msgid "event_ok"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:product.product,event_ok:0
|
||||
msgid "Event Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_type_id:0
|
||||
msgid "Event Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: model:product.template,name:event_sale.event_product_product_template
|
||||
msgid "Technical Training"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: code:addons/event_sale/event_sale.py:88
|
||||
#, python-format
|
||||
msgid "The registration %s has been created from the Sales Order %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_id:0
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: model:ir.model,name:event_sale.model_sale_order_line
|
||||
msgid "Sales Order Line"
|
||||
msgstr ""
|
|
@ -591,6 +591,9 @@
|
|||
<field name="view_mode">tree,graph</field>
|
||||
<field name="context">{"search_default_groupby_vehicle" : True}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new odometer log.
|
||||
</p>
|
||||
<p>
|
||||
Here you can add various odometer entries for all vehicles.
|
||||
You can also show odometer value for a particular vehicle using
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -23,5 +23,6 @@ import hr_department
|
|||
import hr
|
||||
|
||||
import res_config
|
||||
import res_users
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -59,6 +59,8 @@ You can manage:
|
|||
'hr_installer.xml',
|
||||
'hr_data.xml',
|
||||
'res_config_view.xml',
|
||||
'mail_hr_view.xml',
|
||||
'res_users_view.xml',
|
||||
],
|
||||
'demo': ['hr_demo.xml'],
|
||||
'test': [
|
||||
|
@ -70,5 +72,7 @@ You can manage:
|
|||
'application': True,
|
||||
'auto_install': False,
|
||||
'css': [ 'static/src/css/hr.css' ],
|
||||
'js': [ 'static/src/js/suggestions.js' ],
|
||||
'qweb': [ 'static/src/xml/suggestions.xml' ],
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
107
addons/hr/hr.py
107
addons/hr/hr.py
|
@ -25,9 +25,11 @@ from openerp.modules.module import get_module_resource
|
|||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
from openerp import tools
|
||||
from openerp.tools.translate import _
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class hr_employee_category(osv.osv):
|
||||
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
|
@ -150,6 +152,7 @@ class hr_job(osv.osv):
|
|||
class hr_employee(osv.osv):
|
||||
_name = "hr.employee"
|
||||
_description = "Employee"
|
||||
_order = 'name_related'
|
||||
_inherits = {'resource.resource': "resource_id"}
|
||||
_inherit = ['mail.thread']
|
||||
|
||||
|
@ -158,10 +161,10 @@ class hr_employee(osv.osv):
|
|||
for obj in self.browse(cr, uid, ids, context=context):
|
||||
result[obj.id] = tools.image_get_resized_images(obj.image)
|
||||
return result
|
||||
|
||||
|
||||
def _set_image(self, cr, uid, id, name, value, args, context=None):
|
||||
return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context)
|
||||
|
||||
|
||||
_columns = {
|
||||
#we need a related field in order to be able to sort the employee by name
|
||||
'name_related': fields.related('resource_id', 'name', type='char', string='Name', readonly=True, store=True),
|
||||
|
@ -171,12 +174,12 @@ class hr_employee(osv.osv):
|
|||
'sinid': fields.char('SIN No', size=32, help="Social Insurance Number"),
|
||||
'identification_id': fields.char('Identification No', size=32),
|
||||
'otherid': fields.char('Other Id', size=64),
|
||||
'gender': fields.selection([('male', 'Male'),('female', 'Female')], 'Gender'),
|
||||
'gender': fields.selection([('male', 'Male'), ('female', 'Female')], 'Gender'),
|
||||
'marital': fields.selection([('single', 'Single'), ('married', 'Married'), ('widower', 'Widower'), ('divorced', 'Divorced')], 'Marital Status'),
|
||||
'department_id':fields.many2one('hr.department', 'Department'),
|
||||
'department_id': fields.many2one('hr.department', 'Department'),
|
||||
'address_id': fields.many2one('res.partner', 'Working Address'),
|
||||
'address_home_id': fields.many2one('res.partner', 'Home Address'),
|
||||
'bank_account_id':fields.many2one('res.partner.bank', 'Bank Account Number', domain="[('partner_id','=',address_home_id)]", help="Employee bank salary account"),
|
||||
'bank_account_id': fields.many2one('res.partner.bank', 'Bank Account Number', domain="[('partner_id','=',address_home_id)]", help="Employee bank salary account"),
|
||||
'work_phone': fields.char('Work Phone', size=32, readonly=False),
|
||||
'mobile_phone': fields.char('Work Mobile', size=32, readonly=False),
|
||||
'work_email': fields.char('Work Email', size=240),
|
||||
|
@ -207,25 +210,42 @@ class hr_employee(osv.osv):
|
|||
help="Small-sized photo of the employee. It is automatically "\
|
||||
"resized as a 64x64px image, with aspect ratio preserved. "\
|
||||
"Use this field anywhere a small image is required."),
|
||||
'passport_id':fields.char('Passport No', size=64),
|
||||
'passport_id': fields.char('Passport No', size=64),
|
||||
'color': fields.integer('Color Index'),
|
||||
'city': fields.related('address_id', 'city', type='char', string='City'),
|
||||
'login': fields.related('user_id', 'login', type='char', string='Login', readonly=1),
|
||||
'last_login': fields.related('user_id', 'date', type='datetime', string='Latest Connection', readonly=1),
|
||||
}
|
||||
|
||||
_order='name_related'
|
||||
def _get_default_image(self, cr, uid, context=None):
|
||||
image_path = get_module_resource('hr', 'static/src/img', 'default_image.png')
|
||||
return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64'))
|
||||
|
||||
defaults = {
|
||||
'active': 1,
|
||||
'image': _get_default_image,
|
||||
'color': 0,
|
||||
}
|
||||
|
||||
def create(self, cr, uid, data, context=None):
|
||||
employee_id = super(hr_employee, self).create(cr, uid, data, context=context)
|
||||
try:
|
||||
(model, mail_group_id) = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'mail', 'group_all_employees')
|
||||
employee = self.browse(cr, uid, employee_id, context=context)
|
||||
self.pool.get('mail.group').message_post(cr, uid, [mail_group_id],
|
||||
body=_('Welcome to %s! Please help him/her take the first steps with OpenERP!') % (employee.name),
|
||||
subtype='mail.mt_comment', context=context)
|
||||
except:
|
||||
pass # group deleted: do not push a message
|
||||
if context is None:
|
||||
context = {}
|
||||
create_ctx = dict(context, mail_create_nolog=True)
|
||||
employee_id = super(hr_employee, self).create(cr, uid, data, context=create_ctx)
|
||||
employee = self.browse(cr, uid, employee_id, context=context)
|
||||
if employee.user_id:
|
||||
# send a copy to every user of the company
|
||||
company_id = employee.user_id.partner_id.company_id.id
|
||||
partner_ids = self.pool.get('res.partner').search(cr, uid, [
|
||||
('company_id', '=', company_id),
|
||||
('user_ids', '!=', False)], context=context)
|
||||
else:
|
||||
partner_ids = []
|
||||
self.message_post(cr, uid, [employee_id],
|
||||
body=_('Welcome to %s! Please help him/her take the first steps with OpenERP!') % (employee.name),
|
||||
partner_ids=partner_ids,
|
||||
subtype='mail.mt_comment', context=context
|
||||
)
|
||||
return employee_id
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
|
@ -246,7 +266,7 @@ class hr_employee(osv.osv):
|
|||
company_id = self.pool.get('res.company').browse(cr, uid, company, context=context)
|
||||
address = self.pool.get('res.partner').address_get(cr, uid, [company_id.partner_id.id], ['default'])
|
||||
address_id = address and address['default'] or False
|
||||
return {'value': {'address_id' : address_id}}
|
||||
return {'value': {'address_id': address_id}}
|
||||
|
||||
def onchange_department_id(self, cr, uid, ids, department_id, context=None):
|
||||
value = {'parent_id': False}
|
||||
|
@ -259,17 +279,36 @@ class hr_employee(osv.osv):
|
|||
work_email = False
|
||||
if user_id:
|
||||
work_email = self.pool.get('res.users').browse(cr, uid, user_id, context=context).email
|
||||
return {'value': {'work_email' : work_email}}
|
||||
return {'value': {'work_email': work_email}}
|
||||
|
||||
def _get_default_image(self, cr, uid, context=None):
|
||||
image_path = get_module_resource('hr', 'static/src/img', 'default_image.png')
|
||||
return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64'))
|
||||
def action_follow(self, cr, uid, ids, context=None):
|
||||
""" Wrapper because message_subscribe_users take a user_ids=None
|
||||
that receive the context without the wrapper. """
|
||||
return self.message_subscribe_users(cr, uid, ids, context=context)
|
||||
|
||||
_defaults = {
|
||||
'active': 1,
|
||||
'image': _get_default_image,
|
||||
'color': 0,
|
||||
}
|
||||
def action_unfollow(self, cr, uid, ids, context=None):
|
||||
""" Wrapper because message_unsubscribe_users take a user_ids=None
|
||||
that receive the context without the wrapper. """
|
||||
return self.message_unsubscribe_users(cr, uid, ids, context=context)
|
||||
|
||||
def get_suggested_thread(self, cr, uid, removed_suggested_threads=None, context=None):
|
||||
"""Show the suggestion of employees if display_employees_suggestions if the
|
||||
user perference allows it. """
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid, context)
|
||||
if not user.display_employees_suggestions:
|
||||
return []
|
||||
else:
|
||||
return super(hr_employee, self).get_suggested_thread(cr, uid, removed_suggested_threads, context)
|
||||
|
||||
def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
|
||||
""" Overwrite of the original method to always follow user_id field,
|
||||
even when not track_visibility so that a user will follow it's employee
|
||||
"""
|
||||
user_field_lst = []
|
||||
for name, column_info in self._all_columns.items():
|
||||
if name in auto_follow_fields and name in updated_fields and column_info.column._obj == 'res.users':
|
||||
user_field_lst.append(name)
|
||||
return user_field_lst
|
||||
|
||||
def _check_recursion(self, cr, uid, ids, context=None):
|
||||
level = 100
|
||||
|
@ -285,6 +324,22 @@ class hr_employee(osv.osv):
|
|||
(_check_recursion, 'Error! You cannot create recursive hierarchy of Employee(s).', ['parent_id']),
|
||||
]
|
||||
|
||||
# ---------------------------------------------------
|
||||
# Mail gateway
|
||||
# ---------------------------------------------------
|
||||
|
||||
def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
|
||||
""" mail.message document permission rule: can post a new message if can read
|
||||
because of portal document. """
|
||||
if not model_obj:
|
||||
model_obj = self
|
||||
employee_ids = model_obj.search(cr, uid, [('user_id', '=', uid)], context=context)
|
||||
if employee_ids and operation == 'create':
|
||||
model_obj.check_access_rights(cr, uid, 'read')
|
||||
model_obj.check_access_rule(cr, uid, mids, 'read', context=context)
|
||||
else:
|
||||
return super(hr_employee, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
|
||||
|
||||
|
||||
class hr_department(osv.osv):
|
||||
_description = "Department"
|
||||
|
|
|
@ -27,6 +27,10 @@
|
|||
</h1>
|
||||
<label for="category_ids" class="oe_edit_only" groups="base.group_hr_user"/>
|
||||
<field name="category_ids" widget="many2many_tags" placeholder="e.g. Part Time" groups="base.group_hr_user"/>
|
||||
<label for="work_email" class="oe_edit_only"/>
|
||||
<field name="work_email" widget="email"/>
|
||||
<label for="work_phone" class="oe_edit_only"/>
|
||||
<field name="work_phone"/>
|
||||
</div>
|
||||
<div class="oe_right oe_button_box" name="button_box">
|
||||
<!-- Put here related buttons -->
|
||||
|
@ -36,8 +40,6 @@
|
|||
<group>
|
||||
<group string="Contact Information">
|
||||
<field name="address_id" on_change="onchange_address_id(address_id)" context="{'show_address': 1}" options='{"always_reload": True, "highlight_first_line": True}'/>
|
||||
<field name="work_email" widget="email"/>
|
||||
<field name="work_phone"/>
|
||||
<field name="mobile_phone"/>
|
||||
<field name="work_location"/>
|
||||
</group>
|
||||
|
@ -136,6 +138,9 @@
|
|||
<field name="arch" type="xml">
|
||||
<kanban>
|
||||
<field name="last_login"/>
|
||||
<field name="message_is_follower"/>
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="message_ids"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_employee_vignette">
|
||||
|
@ -154,10 +159,19 @@
|
|||
</li>
|
||||
<li t-if="record.job_id.raw_value"><field name="job_id"/></li>
|
||||
<li t-if="record.work_location.raw_value"><field name="work_location"/></li>
|
||||
<li t-if="record.work_phone.raw_value">Tel: <field name="work_phone"/></li>
|
||||
<li t-if="record.mobile_phone.raw_value">Mobile: <field name="mobile_phone"/></li>
|
||||
<li t-if="record.work_email.raw_value"><a t-attf-href="mailto:#{record.work_email.value}"><field name="work_email"/></a></li>
|
||||
</ul>
|
||||
<div class="oe_kanban_footer_left">
|
||||
<span title='Messages'><span class='oe_e'>9</span><t t-esc="record.message_ids.raw_value.length"/></span>
|
||||
<span title='Followers'><span class='oe_e'>+</span><t t-esc="record.message_follower_ids.raw_value.length"/></span>
|
||||
</div>
|
||||
<div class="oe_followers" groups="base.group_user">
|
||||
<button t-if="record.message_is_follower.raw_value" name="action_unfollow" type="object" class="oe_follower oe_following">
|
||||
<span class="oe_unfollow">Unfollow</span>
|
||||
<span class="oe_following">Following</span>
|
||||
</button>
|
||||
<button t-if="! record.message_is_follower.raw_value" name="action_follow" type="object" class="oe_follower oe_notfollow">Follow</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
|
@ -334,12 +348,10 @@
|
|||
<h1><field name="name" class="oe_inline"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<group name="job_data">
|
||||
<field name="no_of_employee" groups="base.group_user"/>
|
||||
<field name="no_of_recruitment" on_change="on_change_expected_employee(no_of_recruitment,no_of_employee)"/>
|
||||
<field name="expected_employees" groups="base.group_user"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="department_id"/>
|
||||
</group>
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="mail.action_mail_inbox_feeds" model="ir.actions.client">
|
||||
<field name="params" eval=""{
|
||||
'domain': [
|
||||
('to_read', '=', True),
|
||||
('starred', '=', False),
|
||||
],
|
||||
'view_mailbox': True,
|
||||
'view_inbox': True,
|
||||
'read_action': 'read',
|
||||
'show_compose_message': True
|
||||
}""/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1,65 @@
|
|||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
|
||||
|
||||
class res_users(osv.Model):
|
||||
""" Update of res.users class
|
||||
- if adding groups to an user, check if base.group_user is in it
|
||||
(member of 'Employee'), create an employee form linked to it.
|
||||
"""
|
||||
_name = 'res.users'
|
||||
_inherit = ['res.users']
|
||||
|
||||
_columns = {
|
||||
'display_employees_suggestions': fields.boolean("Display Employees Suggestions"),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'display_employees_suggestions': True,
|
||||
}
|
||||
|
||||
def __init__(self, pool, cr):
|
||||
""" Override of __init__ to add access rights on
|
||||
display_employees_suggestions fields. Access rights are disabled by
|
||||
default, but allowed on some specific fields defined in
|
||||
self.SELF_{READ/WRITE}ABLE_FIELDS.
|
||||
"""
|
||||
init_res = super(res_users, self).__init__(pool, cr)
|
||||
# duplicate list to avoid modifying the original reference
|
||||
self.SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS)
|
||||
self.SELF_WRITEABLE_FIELDS.append('display_employees_suggestions')
|
||||
# duplicate list to avoid modifying the original reference
|
||||
self.SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS)
|
||||
self.SELF_READABLE_FIELDS.append('display_employees_suggestions')
|
||||
return init_res
|
||||
|
||||
def stop_showing_employees_suggestions(self, cr, uid, user_id, context=None):
|
||||
"""Update display_employees_suggestions value to False"""
|
||||
if context is None:
|
||||
context = {}
|
||||
self.write(cr, uid, user_id, {"display_employees_suggestions": False}, context)
|
||||
|
||||
def _create_welcome_message(self, cr, uid, user, context=None):
|
||||
"""Do not welcome new users anymore, welcome new employees instead"""
|
||||
return True
|
||||
|
||||
def _message_post_get_eid(self, cr, uid, thread_id, context=None):
|
||||
assert thread_id, "res.users does not support posting global messages"
|
||||
if context and 'thread_model' in context:
|
||||
context['thread_model'] = 'hr.employee'
|
||||
if isinstance(thread_id, (list, tuple)):
|
||||
thread_id = thread_id[0]
|
||||
return self.pool.get('hr.employee').search(cr, uid, [('user_id', '=', thread_id)], context=context)
|
||||
|
||||
def message_post(self, cr, uid, thread_id, context=None, **kwargs):
|
||||
""" Redirect the posting of message on res.users to the related employee.
|
||||
This is done because when giving the context of Chatter on the
|
||||
various mailboxes, we do not have access to the current partner_id. """
|
||||
if kwargs.get('type') == 'email':
|
||||
return super(res_users, self).message_post(cr, uid, thread_id, context=context, **kwargs)
|
||||
employee_ids = self._message_post_get_eid(cr, uid, thread_id, context=context)
|
||||
if not employee_ids:
|
||||
pass # dpo something
|
||||
for employee_id in employee_ids:
|
||||
res = self.pool.get('hr.employee').message_post(cr, uid, employee_id, context=context, **kwargs)
|
||||
return res
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Update user form !-->
|
||||
<record id="view_users_form_mail" model="ir.ui.view">
|
||||
<field name="name">res.users.form.hr</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="mail.view_users_form_mail"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<field name="display_groups_suggestions" position="after">
|
||||
<field name="display_employees_suggestions"/>
|
||||
</field>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -68,3 +68,8 @@
|
|||
margin: 2px 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.openerp .oe_employee_vignette .oe_followers {
|
||||
width: auto;
|
||||
float: none;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
openerp.hr = function(session) {
|
||||
var _t = session.web._t;
|
||||
var QWeb = session.web.qweb;
|
||||
|
||||
var suggestions = session.suggestions;
|
||||
var removed_suggested_employee = session.suggestions.removed_suggested_employee = [];
|
||||
|
||||
suggestions.Employees = session.web.Widget.extend({
|
||||
events: {
|
||||
'click .oe_suggestion_remove.oe_suggestion_employee': 'stop_employee_suggestion',
|
||||
'click .oe_suggestion_remove_item.oe_suggestion_employee': 'remove_employee_suggestion',
|
||||
'click .oe_suggestion_follow': 'follow_employee',
|
||||
},
|
||||
|
||||
init: function () {
|
||||
this._super(this, arguments);
|
||||
this.hr_employee = new session.web.DataSetSearch(this, 'hr.employee');
|
||||
this.res_users = new session.web.DataSetSearch(this, 'res.users');
|
||||
this.employees = [];
|
||||
},
|
||||
|
||||
start: function () {
|
||||
this._super.apply(this, arguments);
|
||||
return this.fetch_suggested_employee();
|
||||
},
|
||||
|
||||
fetch_suggested_employee: function () {
|
||||
var self = this;
|
||||
var employee = self.hr_employee.call('get_suggested_thread', {'removed_suggested_threads': removed_suggested_employee}).then(function (res) {
|
||||
_(res).each(function (result) {
|
||||
result['image']=self.session.url('/web/binary/image', {model: 'hr.employee', field: 'image_small', id: result.id});
|
||||
});
|
||||
self.employees = res;
|
||||
});
|
||||
return $.when(employee).done(this.proxy('display_suggested_employees'));
|
||||
},
|
||||
|
||||
display_suggested_employees: function () {
|
||||
var suggested_employees = this.$('.oe_sidebar_suggestion.oe_suggestion_employee');
|
||||
if (suggested_employees) {
|
||||
suggested_employees.remove();
|
||||
}
|
||||
if (this.employees.length === 0) {
|
||||
return this.$el.empty();
|
||||
}
|
||||
return this.$el.empty().html(QWeb.render('hr.suggestions.employees', {'widget': this}));
|
||||
},
|
||||
|
||||
follow_employee: function (event) {
|
||||
var self = this;
|
||||
var employee_id = parseInt($(event.currentTarget).attr('id'), 10);
|
||||
return this.hr_employee.call('message_subscribe_users', [[employee_id], [this.session.uid], undefined]).then(function(res) {
|
||||
self.fetch_suggested_employee();
|
||||
});
|
||||
},
|
||||
|
||||
remove_employee_suggestion: function (event) {
|
||||
removed_suggested_employee.push($(event.currentTarget).attr('id'));
|
||||
return this.fetch_suggested_employee();
|
||||
},
|
||||
|
||||
stop_employee_suggestion: function (event) {
|
||||
var self = this;
|
||||
return this.res_users.call('stop_showing_employees_suggestions', [this.session.uid]).then(function(res) {
|
||||
self.$(".oe_sidebar_suggestion.oe_suggestion_employee").hide();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
session.mail.WallSidebar.include({
|
||||
start: function () {
|
||||
this._super.apply(this, arguments);
|
||||
var sug_employees = new suggestions.Employees(this);
|
||||
return sug_employees.appendTo(this.$('.oe_suggestions_employees'));
|
||||
},
|
||||
});
|
||||
|
||||
};
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<template>
|
||||
|
||||
<!-- Employees placeholder in sidebar -->
|
||||
<t t-extend="mail.wall.sidebar">
|
||||
<t t-jquery=".oe_mail_wall_sidebar" t-operation="append">
|
||||
<div class="oe_suggestions_employees"></div>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<!-- Suggested employees -->
|
||||
<div t-name="hr.suggestions.employees" class="oe_sidebar_suggestion oe_suggestion_employee">
|
||||
<div class="oe_suggest_title">
|
||||
<a class="oe_suggestion_remove oe_suggestion_employee oe_e">X</a>
|
||||
<h2>Suggested Employees</h2>
|
||||
</div>
|
||||
<div class="oe_suggest_items">
|
||||
<t t-foreach="widget.employees" t-as="result">
|
||||
<div class="oe_suggested_item">
|
||||
<div class="oe_suggested_item_image">
|
||||
<a t-attf-href="#model=hr.employee&id=#{result.id}">
|
||||
<img t-attf-src="{result.image}" t-attf-alt="{result.name}"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="oe_suggested_item_content">
|
||||
<a class="oe_suggestion_item_name" t-attf-href="#model=hr.employee&id=#{result.id}"><t t-esc="result.name"/></a>
|
||||
<a class="oe_suggestion_remove_item oe_suggestion_employee oe_e" t-attf-id="{result.id}">X</a>
|
||||
<br/>
|
||||
<button class="oe_suggestion_follow" t-att-id="result.id">Follow</button>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
|
@ -0,0 +1,466 @@
|
|||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-20 01:48+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-21 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16677)\n"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.model,name:hr_attendance.model_hr_attendance_month
|
||||
msgid "Print Monthly Attendance Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "Hr Attendance Search"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.employee,last_sign:0
|
||||
msgid "Last Sign"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
#: field:hr.employee,state:0
|
||||
#: model:ir.model,name:hr_attendance.model_hr_attendance
|
||||
msgid "Attendance"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#. openerp-web
|
||||
#: code:addons/hr_attendance/static/src/js/attendance.js:34
|
||||
#, python-format
|
||||
msgid "Last sign in: %s,<br />%s.<br />Click to sign out."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: constraint:hr.attendance:0
|
||||
msgid "Error ! Sign in (resp. Sign out) must follow Sign out (resp. Sign in)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: help:hr.action.reason,name:0
|
||||
msgid "Specifies the reason for Signing In/Signing Out."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid ""
|
||||
"(*) A positive delay means that the employee worked less than recorded."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.month:0
|
||||
msgid "Print Attendance Report Monthly"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/report/timesheet.py:120
|
||||
#, python-format
|
||||
msgid "Attendances by Week"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.action.reason,action_type:0
|
||||
msgid "Sign out"
|
||||
msgstr "ลงชื่อออก"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Delay"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "Group By..."
|
||||
msgstr "จัดกลุ่มตาม..."
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "October"
|
||||
msgstr "ตุลาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.employee,attendance_access:0
|
||||
msgid "Attendance Access"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/hr_attendance.py:154
|
||||
#: selection:hr.attendance,action:0
|
||||
#: view:hr.employee:0
|
||||
#, python-format
|
||||
msgid "Sign Out"
|
||||
msgstr "ออกจากระบบ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/wizard/hr_attendance_error.py:49
|
||||
#, python-format
|
||||
msgid "No records are found for your selection!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
#: view:hr.attendance.month:0
|
||||
#: view:hr.attendance.week:0
|
||||
msgid "Print"
|
||||
msgstr "พิมพ์"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
#: field:hr.attendance,employee_id:0
|
||||
#: model:ir.model,name:hr_attendance.model_hr_employee
|
||||
msgid "Employee"
|
||||
msgstr "พนักงาน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.month,month:0
|
||||
msgid "Month"
|
||||
msgstr "เดือน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Date Recorded"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/hr_attendance.py:154
|
||||
#: selection:hr.attendance,action:0
|
||||
#: view:hr.employee:0
|
||||
#, python-format
|
||||
msgid "Sign In"
|
||||
msgstr "เข้าสู่ระบบ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.error,init_date:0
|
||||
#: field:hr.attendance.week,init_date:0
|
||||
msgid "Starting Date"
|
||||
msgstr "วันที่เริ่ม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_hr_attendance
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance
|
||||
msgid "Attendances"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "March"
|
||||
msgstr "มีนาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "August"
|
||||
msgstr "สิงหาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/hr_attendance.py:161
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr "คำเตือน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: help:hr.config.settings,group_hr_attendance:0
|
||||
msgid "Allocates attendance group to all users."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "My Attendance"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "June"
|
||||
msgstr "มิถุนายน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/report/attendance_by_month.py:190
|
||||
#, python-format
|
||||
msgid "Attendances by Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_week
|
||||
msgid "Attendances By Week"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.model,name:hr_attendance.model_hr_attendance_error
|
||||
msgid "Print Error Attendance Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Total period:"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.action.reason,name:0
|
||||
msgid "Reason"
|
||||
msgstr "เหตุผล"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
msgid "Print Attendance Report Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,help:hr_attendance.open_view_attendance
|
||||
msgid ""
|
||||
"The Time Tracking functionality aims to manage employee attendances from "
|
||||
"Sign in/Sign out actions. You can also link this feature to an attendance "
|
||||
"device using OpenERP's web service features."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "Today"
|
||||
msgstr "วันนี้"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Date Signed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,name:0
|
||||
msgid "Date"
|
||||
msgstr "วันที่"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.config.settings,group_hr_attendance:0
|
||||
msgid "Track attendances for all employees"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "July"
|
||||
msgstr "กรกฎาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_error
|
||||
#: model:ir.actions.report.xml,name:hr_attendance.attendance_error_report
|
||||
msgid "Attendance Error Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
#: field:hr.attendance,day:0
|
||||
msgid "Day"
|
||||
msgstr "วัน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.employee,state:0
|
||||
msgid "Present"
|
||||
msgstr "นำเสนอ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.employee,state:0
|
||||
msgid "Absent"
|
||||
msgstr "ขาด"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "February"
|
||||
msgstr "กุมภาพันธ์"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,action_desc:0
|
||||
#: model:ir.model,name:hr_attendance.model_hr_action_reason
|
||||
msgid "Action Reason"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.month,year:0
|
||||
msgid "Year"
|
||||
msgstr "ปี"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Min Delay"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance:0
|
||||
msgid "Employee attendances"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.action.reason:0
|
||||
msgid "Define attendance reason"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.action.reason,action_type:0
|
||||
msgid "Sign in"
|
||||
msgstr "ลงชื่อเข้าใช้"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
msgid "Analysis Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_month
|
||||
msgid "Attendances By Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "January"
|
||||
msgstr "มกราคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/wizard/hr_attendance_error.py:49
|
||||
#, python-format
|
||||
msgid "No Data Available !"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "April"
|
||||
msgstr "เมษายน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.week:0
|
||||
msgid "Print Attendance Report Weekly"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Attendance Errors"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance,action:0
|
||||
#: selection:hr.attendance,action:0
|
||||
msgid "Action"
|
||||
msgstr "ปฏิบัติ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_hr_time_tracking
|
||||
msgid "Time Tracking"
|
||||
msgstr "ติดตามเวลา"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance_reason
|
||||
#: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance_reason
|
||||
msgid "Attendance Reasons"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "November"
|
||||
msgstr "พฤศจิกายน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
msgid "Bellow this delay, the error is considered to be voluntary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.error,max_delay:0
|
||||
msgid "Max. Delay (Min)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.attendance.error,end_date:0
|
||||
#: field:hr.attendance.week,end_date:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "September"
|
||||
msgstr "กันยายน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.action.reason:0
|
||||
msgid "Attendance reasons"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.model,name:hr_attendance.model_hr_attendance_week
|
||||
msgid "Print Week Attendance Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: model:ir.model,name:hr_attendance.model_hr_config_settings
|
||||
msgid "hr.config.settings"
|
||||
msgstr "hr.config.settings"
|
||||
|
||||
#. module: hr_attendance
|
||||
#. openerp-web
|
||||
#: code:addons/hr_attendance/static/src/js/attendance.js:36
|
||||
#, python-format
|
||||
msgid "Click to Sign In at %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: field:hr.action.reason,action_type:0
|
||||
msgid "Action Type"
|
||||
msgstr "ชนิดการทำงาน"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "May"
|
||||
msgstr "พฤษภาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: code:addons/hr_attendance/hr_attendance.py:161
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You tried to %s with a date anterior to another event !\n"
|
||||
"Try to contact the HR Manager to correct attendances."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: selection:hr.attendance.month,month:0
|
||||
msgid "December"
|
||||
msgstr "ธันวาคม"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
#: view:hr.attendance.month:0
|
||||
#: view:hr.attendance.week:0
|
||||
msgid "Cancel"
|
||||
msgstr "ยกเลิก"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid "Operation"
|
||||
msgstr "ปฏิบัติการ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: report:report.hr.timesheet.attendance.error:0
|
||||
msgid ""
|
||||
"(*) A negative delay means that the employee worked more than encoded."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_attendance
|
||||
#: view:hr.attendance.error:0
|
||||
#: view:hr.attendance.month:0
|
||||
#: view:hr.attendance.week:0
|
||||
msgid "or"
|
||||
msgstr "หรือ"
|
||||
|
||||
#. module: hr_attendance
|
||||
#: help:hr.attendance,action_desc:0
|
||||
msgid ""
|
||||
"Specifies the reason for Signing In/Signing Out in case of extra hours."
|
||||
msgstr ""
|
|
@ -0,0 +1,232 @@
|
|||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-06-15 17:09+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-16 04:38+0000\n"
|
||||
"X-Generator: Launchpad (build 16667)\n"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,wage:0
|
||||
msgid "Wage"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Information"
|
||||
msgstr "ข้อมูล"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,trial_date_start:0
|
||||
msgid "Trial Start Date"
|
||||
msgstr "วันที่เริ่มต้นการทดลอง"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,vehicle:0
|
||||
msgid "Company Vehicle"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Group By..."
|
||||
msgstr "จัดกลุ่มตาม..."
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,department_id:0
|
||||
msgid "Department"
|
||||
msgstr "แผนก"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,employee_id:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_employee
|
||||
msgid "Employee"
|
||||
msgstr "พนักงาน"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Search Contract"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: view:hr.employee:0
|
||||
#: field:hr.employee,contract_ids:0
|
||||
#: model:ir.actions.act_window,name:hr_contract.act_hr_employee_2_hr_contract
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract
|
||||
msgid "Contracts"
|
||||
msgstr "สัญญา"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,children:0
|
||||
msgid "Number of Children"
|
||||
msgstr "จำนวนบุตร"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.employee,contract_id:0
|
||||
msgid "Latest contract of the employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Job"
|
||||
msgstr "งาน"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,advantages:0
|
||||
msgid "Advantages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Work Permit"
|
||||
msgstr "ใบอนุญาตทำงาน"
|
||||
|
||||
#. module: hr_contract
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_type
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_type
|
||||
msgid "Contract Types"
|
||||
msgstr "ประเภทสัญญา"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.employee:0
|
||||
msgid "Medical Exam"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,date_end:0
|
||||
msgid "End Date"
|
||||
msgstr "วันสิ้นสุด"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.contract,wage:0
|
||||
msgid "Basic Salary of the employee"
|
||||
msgstr "เงินเดือนของพนักงาน"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,name:0
|
||||
msgid "Contract Reference"
|
||||
msgstr "อ้างอิงตามสัญญา"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.employee,vehicle_distance:0
|
||||
msgid "In kilometers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,notes:0
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,permit_no:0
|
||||
msgid "Work Permit No"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: view:hr.employee:0
|
||||
#: field:hr.employee,contract_id:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract
|
||||
#: model:ir.ui.menu,name:hr_contract.next_id_56
|
||||
msgid "Contract"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,type_id:0
|
||||
#: view:hr.contract.type:0
|
||||
#: field:hr.contract.type,name:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract_type
|
||||
msgid "Contract Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,working_hours:0
|
||||
msgid "Working Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Salary and Advantages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,job_id:0
|
||||
msgid "Job Title"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: constraint:hr.contract:0
|
||||
msgid "Error! Contract start-date must be less than contract end-date."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,manager:0
|
||||
msgid "Is a Manager"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,date_start:0
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,visa_no:0
|
||||
msgid "Visa No"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,vehicle_distance:0
|
||||
msgid "Home-Work Dist."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,place_of_birth:0
|
||||
msgid "Place of Birth"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Trial Period Duration"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Duration"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,visa_expire:0
|
||||
msgid "Visa Expire Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,medic_exam:0
|
||||
msgid "Medical Examination Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,trial_date_end:0
|
||||
msgid "Trial End Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract.type:0
|
||||
msgid "Search Contract Type"
|
||||
msgstr ""
|
|
@ -165,9 +165,14 @@
|
|||
</header>
|
||||
<sheet>
|
||||
<label for="employee_id" class="oe_edit_only"/>
|
||||
<h1><field name="employee_id" on_change="onchange_employee_id(employee_id)" class="oe_inline"/>, <field name="date" class="oe_inline"/></h1>
|
||||
<h1><field name="employee_id" class="oe_inline"
|
||||
attrs="{'readonly': [('state', '=', 'done')]}"
|
||||
on_change="onchange_employee_id(employee_id)"/>,
|
||||
<field name="date"
|
||||
attrs="{'readonly': [('state', '=', 'done')]}"/>
|
||||
</h1>
|
||||
<label for="plan_id" class="oe_edit_only"/>
|
||||
<h2><field name="plan_id"/></h2>
|
||||
<h2><field name="plan_id" attrs="{'readonly': [('state', '=', 'done')]}"/></h2>
|
||||
<group>
|
||||
<group colspan="4" attrs="{'invisible':['|', ('state','=','draft'), ('state', '=', 'wait')]}">
|
||||
<field name="rating" attrs="{'readonly':[('state','<>','progress')]}"/>
|
||||
|
@ -175,7 +180,7 @@
|
|||
</group>
|
||||
</group>
|
||||
<group string="Appraisal Forms" attrs="{'invisible':[('state','=','draft')]}">
|
||||
<field nolabel="1" name="survey_request_ids">
|
||||
<field nolabel="1" name="survey_request_ids" attrs="{'readonly': [('state', '=', 'done')]}">
|
||||
<form string="Interview Appraisal" version="7.0">
|
||||
<div class="oe_right oe_button_box">
|
||||
<button name="%(survey.action_view_survey_question_message)d" string="Answer Survey" type="action" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response,'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
|
||||
|
|
|
@ -210,6 +210,11 @@
|
|||
<field name="context">{"default_hr_expense_ok":1}</field>
|
||||
<field name="domain">[('hr_expense_ok','=',True)]</field>
|
||||
<field name="search_view_id" ref="product.product_search_form_view"/>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new expense category.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_hr_product" name="Expense Categories" parent="hr.menu_hr_configuration" action="hr_expense_product"/>
|
||||
|
|
|
@ -0,0 +1,939 @@
|
|||
# Thai translation for openobject-addons
|
||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-06-20 10:09+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Thai <th@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-21 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 16677)\n"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:process.node,name:hr_expense.process_node_confirmedexpenses0
|
||||
msgid "Confirmed Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.model,name:hr_expense.model_hr_expense_line
|
||||
msgid "Expense Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_reimbursement0
|
||||
msgid "The accoutant reimburse the expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:mail.message.subtype,description:hr_expense.mt_expense_approved
|
||||
msgid "Expense approved"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,date_confirm:0
|
||||
#: field:hr.expense.report,date_confirm:0
|
||||
msgid "Confirmation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Group By..."
|
||||
msgstr "จัดกลุ่มตาม..."
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:product.template,name:hr_expense.air_ticket_product_template
|
||||
msgid "Air Ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Validated By"
|
||||
msgstr "ตรวจสอบโดย"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,department_id:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,department_id:0
|
||||
msgid "Department"
|
||||
msgstr "แผนก"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "New Expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,uom_id:0
|
||||
#: view:product.product:0
|
||||
msgid "Unit of Measure"
|
||||
msgstr "หน่วยของการวัด"
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "March"
|
||||
msgstr "มีนาคม"
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_unread:0
|
||||
msgid "Unread Messages"
|
||||
msgstr "ข้อความที่ไม่ได้อ่าน"
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,company_id:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "บริษัท"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Set to Draft"
|
||||
msgstr "กำหนดให้เป็นแบบร่าง"
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "To Pay"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:172
|
||||
#, python-format
|
||||
msgid ""
|
||||
"No expense journal found. Please make sure you have a journal with type "
|
||||
"'purchase' configured."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.model,name:hr_expense.model_hr_expense_report
|
||||
msgid "Expenses Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Open Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,day:0
|
||||
msgid "Day"
|
||||
msgstr "วัน"
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,date_valid:0
|
||||
msgid ""
|
||||
"Date of the acceptation of the sheet expense. It's filled when the button "
|
||||
"Accept is pressed."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Notes"
|
||||
msgstr "บันทึกย่อ"
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr "ข้อความ"
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:172
|
||||
#: code:addons/hr_expense/hr_expense.py:238
|
||||
#: code:addons/hr_expense/hr_expense.py:240
|
||||
#: code:addons/hr_expense/hr_expense.py:349
|
||||
#: code:addons/hr_expense/hr_expense.py:353
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:mail.message.subtype,description:hr_expense.mt_expense_refused
|
||||
msgid "Expense refused"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.act_window,name:hr_expense.hr_expense_product
|
||||
#: view:product.product:0
|
||||
msgid "Products"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Confirm Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "ยกเลิกแล้ว"
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_refused0
|
||||
msgid "The direct manager refuses the sheet.Reset as draft."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,message_unread:0
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Waiting confirmation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Accepted"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,ref:0
|
||||
msgid "Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Certified honest and conform,"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,state:0
|
||||
msgid ""
|
||||
"When the expense request is created the status is 'Draft'.\n"
|
||||
" It is confirmed by the user and request is sent to admin, the status is "
|
||||
"'Waiting Confirmation'. \n"
|
||||
"If the admin accepts it, the status is 'Accepted'.\n"
|
||||
" If a receipt is made for the expense request, the status is 'Done'."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,date_confirm:0
|
||||
msgid ""
|
||||
"Date of the confirmation of the sheet expense. It's filled when the button "
|
||||
"Confirm is pressed."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,nbr:0
|
||||
msgid "# of Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,message_summary:0
|
||||
msgid ""
|
||||
"Holds the Chatter summary (number of messages, ...). This summary is "
|
||||
"directly in html format in order to be inserted in kanban views."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:453
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "(Date and signature)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Total:"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_refuseexpense0
|
||||
msgid "Refuse expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,price_average:0
|
||||
msgid "Average Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:process.transition.action,name:hr_expense.process_transition_action_confirm0
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_supplierinvoice0
|
||||
msgid "The accoutant validates the sheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,delay_valid:0
|
||||
msgid "Delay to Valid"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.line,sequence:0
|
||||
msgid "Gives the sequence order when displaying a list of expense lines."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,state:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,analytic_account:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,analytic_account:0
|
||||
msgid "Analytic account"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,date:0
|
||||
msgid "Date "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Waiting"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_follower_ids:0
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,employee_id:0
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: selection:hr.expense.expense,state:0
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: field:hr.expense.report,product_qty:0
|
||||
msgid "Qty"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,price_total:0
|
||||
msgid "Total Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_reinvoicing0
|
||||
msgid "Some costs may be reinvoices to the customer"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:238
|
||||
#, python-format
|
||||
msgid "The employee must have a home address."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:board.board:0
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:ir.actions.act_window,name:hr_expense.action_my_expense
|
||||
msgid "My Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Creation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.report.xml,name:hr_expense.hr_expenses
|
||||
msgid "HR expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,id:0
|
||||
msgid "Sheet ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_reimburseexpense0
|
||||
msgid "Reimburse expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,journal_id:0
|
||||
#: field:hr.expense.report,journal_id:0
|
||||
msgid "Force Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,no_of_products:0
|
||||
msgid "# of Products"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_reimburseexpense0
|
||||
msgid "After creating invoice, reimburse expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:121
|
||||
#, python-format
|
||||
msgid "Warning!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,name:hr_expense.process_node_reimbursement0
|
||||
msgid "Reimbursement"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,date_valid:0
|
||||
#: field:hr.expense.report,date_valid:0
|
||||
msgid "Validation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:226
|
||||
#, python-format
|
||||
msgid "Expense Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: model:ir.actions.act_window,name:hr_expense.action_hr_expense_report_all
|
||||
#: model:ir.ui.menu,name:hr_expense.menu_hr_expense_report_all
|
||||
msgid "Expenses Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.line,expense_id:0
|
||||
#: model:ir.model,name:hr_expense.model_hr_expense_expense
|
||||
#: model:process.process,name:hr_expense.process_process_expenseprocess0
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,line_ids:0
|
||||
#: view:hr.expense.line:0
|
||||
msgid "Expense Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,delay_confirm:0
|
||||
msgid "Delay to Confirm"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,month:0
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,currency_id:0
|
||||
#: field:hr.expense.report,currency_id:0
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,voucher_id:0
|
||||
msgid "Employee's Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.expense,state:0
|
||||
msgid "Waiting Approval"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_draftexpenses0
|
||||
msgid "Employee encode all his expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:453
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Selected Unit of Measure does not belong to the same category as the product "
|
||||
"Unit of Measure"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,journal_id:0
|
||||
msgid "The journal used when the expense is done."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,note:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_reimbursereinvoice0
|
||||
msgid "Create Customer invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:353
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please configure Default Expense account for Product purchase: "
|
||||
"`property_account_expense_categ`."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_approveexpense0
|
||||
msgid "Expense is approved."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_approved0
|
||||
msgid "The direct manager approves the sheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,amount:0
|
||||
msgid "Total Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,name:hr_expense.process_node_draftexpenses0
|
||||
msgid "Draft Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_is_follower:0
|
||||
msgid "Is a Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.act_window,name:hr_expense.product_normal_form_view_installer
|
||||
msgid "Review Your Expenses Products"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: field:hr.expense.expense,date:0
|
||||
#: field:hr.expense.line,date_value:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,user_id:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.ui.menu,name:hr_expense.menu_hr_product
|
||||
msgid "Expense Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.act_window,help:hr_expense.expense_all
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to register new expenses. \n"
|
||||
" </p><p>\n"
|
||||
" OpenERP will ensure the whole process is followed; the "
|
||||
"expense\n"
|
||||
" sheet is validated by manager(s), the employee is "
|
||||
"reimbursed\n"
|
||||
" from his expenses, some expenses must be re-invoiced to the\n"
|
||||
" customers.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Generate Accounting Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "HR Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,message_summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:product.template,name:hr_expense.car_travel_product_template
|
||||
msgid "Car Travel Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Submit to Manager"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Done Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_confirmedexpenses0
|
||||
msgid "The employee validates his expense sheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Expenses to Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,name:hr_expense.process_node_supplierinvoice0
|
||||
#: model:process.transition,name:hr_expense.process_transition_approveinvoice0
|
||||
msgid "Supplier Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Expenses Sheet"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,voucher_id:0
|
||||
msgid "Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
msgid "Approved Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: field:hr.expense.line,unit_amount:0
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: selection:hr.expense.report,state:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition.action,name:hr_expense.process_transition_action_supplierinvoice0
|
||||
msgid "Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,year:0
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_reimbursereinvoice0
|
||||
msgid "Reinvoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Expense Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,user_valid:0
|
||||
msgid "Validation By"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:process.transition.action,name:hr_expense.process_transition_action_refuse0
|
||||
msgid "Refuse"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_confirmexpense0
|
||||
msgid "Confirm expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,name:hr_expense.process_transition_approveexpense0
|
||||
msgid "Approve expense"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition.action,name:hr_expense.process_transition_action_accept0
|
||||
msgid "Accept"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "This document must be dated and signed for reimbursement"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_refuseexpense0
|
||||
msgid "Expense is refused."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:ir.actions.act_window,help:hr_expense.product_normal_form_view_installer
|
||||
msgid ""
|
||||
"Define one product for each expense type allowed for an employee (travel by "
|
||||
"car, hostel, restaurant, etc). If you reimburse the employees at a fixed "
|
||||
"rate, set a cost and a unit of measure on the product. If you reimburse "
|
||||
"based on real costs, set the cost at 0.00. The user will set the real price "
|
||||
"when recording his expense sheet."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.expense,state:0
|
||||
#: view:hr.expense.report:0
|
||||
#: model:mail.message.subtype,name:hr_expense.mt_expense_approved
|
||||
#: model:process.node,name:hr_expense.process_node_approved0
|
||||
msgid "Approved"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,product_id:0
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,product_id:0
|
||||
#: model:ir.model,name:hr_expense.model_product_product
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
#: view:hr.expense.expense:0
|
||||
#: field:hr.expense.expense,name:0
|
||||
#: field:hr.expense.line,description:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,unit_quantity:0
|
||||
msgid "Quantities"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,no_of_account:0
|
||||
msgid "# of Accounts"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.expense,state:0
|
||||
#: model:mail.message.subtype,name:hr_expense.mt_expense_refused
|
||||
#: model:process.node,name:hr_expense.process_node_refused0
|
||||
msgid "Refused"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:product.product,hr_expense_ok:0
|
||||
msgid "Can be Expensed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:mail.message.subtype,description:hr_expense.mt_expense_confirmed
|
||||
msgid "Expense confirmed, waiting confirmation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Ref."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.report,employee_id:0
|
||||
msgid "Employee's Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.report:0
|
||||
#: field:hr.expense.report,user_id:0
|
||||
msgid "Validation User"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Accounting Data"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: report:hr.expense:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: code:addons/hr_expense/hr_expense.py:121
|
||||
#, python-format
|
||||
msgid "You can only delete draft expenses!"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.expense,account_move_id:0
|
||||
msgid "Ledger Posting"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_approveinvoice0
|
||||
msgid "Creates supplier invoice."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:product.template,name:hr_expense.hotel_rent_product_template
|
||||
msgid "Hotel Accommodation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: selection:hr.expense.report,month:0
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,name:0
|
||||
msgid "Expense Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Approve"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:hr.expense.expense,message_ids:0
|
||||
msgid "Messages and communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.transition,note:hr_expense.process_transition_confirmexpense0
|
||||
msgid "Expense is confirmed."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:ir.actions.act_window,name:hr_expense.expense_all
|
||||
#: model:ir.ui.menu,name:hr_expense.menu_expense_all
|
||||
#: model:ir.ui.menu,name:hr_expense.next_id_49
|
||||
#: model:product.category,name:hr_expense.cat_expense
|
||||
msgid "Expenses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: help:product.product,hr_expense_ok:0
|
||||
msgid "Specify if the product can be selected in an HR expense line."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
msgid "Accounting"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: model:mail.message.subtype,name:hr_expense.mt_expense_confirmed
|
||||
msgid "To Approve"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: view:hr.expense.expense:0
|
||||
#: view:hr.expense.line:0
|
||||
#: field:hr.expense.line,total_amount:0
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_expense
|
||||
#: model:process.node,name:hr_expense.process_node_reinvoicing0
|
||||
msgid "Reinvoicing"
|
||||
msgstr ""
|
|
@ -146,6 +146,7 @@
|
|||
<field name="number_of_days" string="Allocated Days" sum="Remaining Days"/>
|
||||
<field name="manager_id" invisible="1"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="date_from" invisible="1"/>
|
||||
<!--field name="type"/-->
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2012-12-14 12:51+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2013-06-22 10:54+0000\n"
|
||||
"Last-Translator: Dariusz Kubiak <d.kubiak@macopedia.pl>\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: 2013-03-16 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16532)\n"
|
||||
"X-Launchpad-Export-Date: 2013-06-23 05:13+0000\n"
|
||||
"X-Generator: Launchpad (build 16677)\n"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: selection:hr.holidays.status,color_name:0
|
||||
|
@ -32,7 +32,7 @@ msgid "Waiting Second Approval"
|
|||
msgstr "Oczekuje na drugą aprobatę"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:298
|
||||
#: code:addons/hr_holidays/hr_holidays.py:309
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot modify a leave request that has been approved. Contact a human "
|
||||
|
@ -109,11 +109,13 @@ msgid ""
|
|||
"The default duration interval between the start date and the end date is 8 "
|
||||
"hours. Feel free to adapt it to your needs."
|
||||
msgstr ""
|
||||
"Domyślny odstęp między datą rozpoczęcia i data zakończenia jest 8 godzin. "
|
||||
"Zapraszam do dostosowania go do swoich potrzeb."
|
||||
|
||||
#. module: hr_holidays
|
||||
#: model:mail.message.subtype,description:hr_holidays.mt_holidays_refused
|
||||
msgid "Request refused"
|
||||
msgstr ""
|
||||
msgstr "Wniosek odrzucony"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: field:hr.holidays,number_of_days_temp:0
|
||||
|
@ -274,12 +276,12 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:238
|
||||
#: code:addons/hr_holidays/hr_holidays.py:249
|
||||
#: code:addons/hr_holidays/hr_holidays.py:274
|
||||
#: code:addons/hr_holidays/hr_holidays.py:298
|
||||
#: code:addons/hr_holidays/hr_holidays.py:421
|
||||
#: code:addons/hr_holidays/hr_holidays.py:471
|
||||
#: code:addons/hr_holidays/hr_holidays.py:260
|
||||
#: code:addons/hr_holidays/hr_holidays.py:285
|
||||
#: code:addons/hr_holidays/hr_holidays.py:309
|
||||
#: code:addons/hr_holidays/hr_holidays.py:432
|
||||
#: code:addons/hr_holidays/hr_holidays.py:482
|
||||
#, python-format
|
||||
msgid "Warning!"
|
||||
msgstr "Ostrzeżenie !"
|
||||
|
@ -317,7 +319,7 @@ msgid "Sick Leaves"
|
|||
msgstr "Zwolnienie lekarskie"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:478
|
||||
#: code:addons/hr_holidays/hr_holidays.py:489
|
||||
#, python-format
|
||||
msgid "Leave Request for %s"
|
||||
msgstr "Wniosek urlopowy dla %s"
|
||||
|
@ -341,7 +343,7 @@ msgstr "Pozostało dni urlopu"
|
|||
#. module: hr_holidays
|
||||
#: field:hr.holidays,message_follower_ids:0
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
msgstr "Obserwatorzy"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: model:ir.model,name:hr_holidays.model_hr_holidays_remaining_leaves_user
|
||||
|
@ -388,7 +390,7 @@ msgid "Wheat"
|
|||
msgstr "Pszenny"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:476
|
||||
#: code:addons/hr_holidays/hr_holidays.py:487
|
||||
#, python-format
|
||||
msgid "Allocation for %s"
|
||||
msgstr "Przydział dla %s"
|
||||
|
@ -412,7 +414,7 @@ msgid "Number of Days"
|
|||
msgstr "Liczba dni"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:471
|
||||
#: code:addons/hr_holidays/hr_holidays.py:482
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The feature behind the field 'Remaining Legal Leaves' can only be used when "
|
||||
|
@ -516,7 +518,7 @@ msgid "Start Date"
|
|||
msgstr "Data początkowa"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:421
|
||||
#: code:addons/hr_holidays/hr_holidays.py:432
|
||||
#, python-format
|
||||
msgid ""
|
||||
"There are not enough %s allocated for employee %s; please create an "
|
||||
|
@ -678,7 +680,7 @@ msgstr "Podsumowanie"
|
|||
#. module: hr_holidays
|
||||
#: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid
|
||||
msgid "Unpaid"
|
||||
msgstr "Niezapłacone"
|
||||
msgstr "Bezpłatny"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: xsl:holidays.summary:0
|
||||
|
@ -741,7 +743,7 @@ msgstr "Różne"
|
|||
#. module: hr_holidays
|
||||
#: model:hr.holidays.status,name:hr_holidays.holiday_status_comp
|
||||
msgid "Compensatory Days"
|
||||
msgstr ""
|
||||
msgstr "Urlop wyrównawczy"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: selection:hr.holidays.status,color_name:0
|
||||
|
@ -766,7 +768,7 @@ msgid "Validated"
|
|||
msgstr "Zatwierdzony"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:238
|
||||
#: code:addons/hr_holidays/hr_holidays.py:249
|
||||
#, python-format
|
||||
msgid "You cannot delete a leave which is in %s state."
|
||||
msgstr "Nie możesz usunąć nieobecności, która jest w stanie %s."
|
||||
|
@ -830,7 +832,7 @@ msgid "To Submit"
|
|||
msgstr "Do wysłania"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:343
|
||||
#: code:addons/hr_holidays/hr_holidays.py:354
|
||||
#: view:hr.holidays:0
|
||||
#: selection:hr.holidays,type:0
|
||||
#: field:resource.calendar.leaves,holiday_id:0
|
||||
|
@ -930,8 +932,8 @@ msgid "Messages and communication history"
|
|||
msgstr "Wiadomości i historia komunikacji"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: code:addons/hr_holidays/hr_holidays.py:249
|
||||
#: code:addons/hr_holidays/hr_holidays.py:274
|
||||
#: code:addons/hr_holidays/hr_holidays.py:260
|
||||
#: code:addons/hr_holidays/hr_holidays.py:285
|
||||
#: sql_constraint:hr.holidays:0
|
||||
#, python-format
|
||||
msgid "The start date must be anterior to the end date."
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue