[Merge] lp:openobject-addons

bzr revid: dbr@tinyerp.com-20130620055736-gv2yyszw71hpw94g
bzr revid: dbr@tinyerp.com-20130625060038-6qgd8jz9f5izg3ng
This commit is contained in:
DBR (OpenERP) 2013-06-25 11:30:38 +05:30
commit 10c8a70412
64 changed files with 9322 additions and 635 deletions

View File

@ -7,13 +7,13 @@ 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-17 14:30+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-18 05:46+0000\n"
"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n"
"X-Generator: Launchpad (build 16673)\n"
#. module: account
@ -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
@ -2033,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
@ -2108,7 +2115,7 @@ msgstr ""
" </p><p>\n"
" Вы можете управлять счетом от поставщика в соответствии с\n"
" тем, что вы приобрели. OpenERP также может создавать\n"
" черновые счета автоматически из заказов на закупку.\n"
" черновые счета автоматически из заказов закупки.\n"
" </p>\n"
" "
@ -2234,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
@ -2606,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
@ -2938,7 +2945,7 @@ msgstr "Метка"
#. module: account
#: view:res.partner.bank:0
msgid "Accounting Information"
msgstr "Бухгалтерская информация"
msgstr "Учетная информация"
#. module: account
#: view:account.tax:0
@ -3104,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
@ -4295,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
@ -4604,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
@ -4678,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
@ -4838,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
@ -5031,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
@ -5048,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
@ -5062,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
@ -5293,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
@ -5573,7 +5585,7 @@ msgstr ""
#. module: account
#: view:account.invoice:0
msgid "Pro Forma Invoice "
msgstr "Предварительный счет "
msgstr "Проформа счета "
#. module: account
#: selection:account.subscription,period_type:0
@ -5985,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
@ -6075,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
@ -6748,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
@ -7732,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
@ -7803,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
@ -8064,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
@ -8317,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
@ -9753,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
@ -10417,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
@ -11118,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

View File

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

View File

@ -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."),
}

View File

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

View File

@ -44,7 +44,7 @@ account.""",
'category': 'Accounting & Finance',
'demo': [],
'data': ['product_view.xml'],
'test': ['test/anglo_saxon.yml'],
'test': ['test/anglo_saxon.yml', 'test/anglo_saxon_avg_fifo.yml'],
'auto_install': False,
'installable': True,
}

View File

@ -117,21 +117,27 @@ 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

View File

@ -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."),
}

View File

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

View File

@ -109,7 +109,7 @@
-
!record {model: purchase.order, id: purchase_order_001}:
partner_id: base.res_partner_3
location_id: stock.stock_location_3
location_id: stock.stock_location_stock
pricelist_id: 1
order_line:
- product_id: product.product_product_3
@ -128,12 +128,12 @@
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.
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 debit sucessfully.
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
@ -192,7 +192,7 @@
invoice_state: 2binvoiced
move_lines:
- company_id: base.main_company
location_id: stock.stock_location_3
location_id: stock.stock_location_stock
product_id: product.product_product_3
product_qty: 1.0
product_uom: product.product_uom_unit

View File

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

View File

@ -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,14 +88,14 @@ 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()
@ -105,7 +105,7 @@ class OAuthController(oeweb.Controller):
try:
model, provider_id = IMD.get_object_reference(cr, SUPERUSER_ID, 'auth_oauth', 'provider_openerp')
except ValueError:
return set_cookie_and_redirect(req, '/?db=%s' % dbname)
return set_cookie_and_redirect('/?db=%s' % dbname)
assert model == 'auth.oauth.provider'
state = {
@ -115,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:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -20,6 +20,7 @@
##############################################################################
import crm_partner_assign
import crm_lead
import wizard
import report

View File

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

View File

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

View File

@ -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','&lt;&gt;',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','&lt;=',0)]}">N </span>
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','&gt;=',0)]}">S </span>
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1"/>
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','&lt;=',0)]}">E </span>
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','&gt;=',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','&lt;&gt;',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','&lt;&gt;',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','&lt;=',0)]}">N </span>
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','&gt;=',0)]}">S </span>
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1"/>
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','&lt;=',0)]}">E </span>
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','&gt;=',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','&lt;&gt;',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>

View File

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

View File

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

View File

@ -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 &amp; 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>

View File

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

View File

@ -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','&lt;=',0)]}">N </span>
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','&gt;=',0)]}">S </span>
<field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1" />
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','&lt;=',0)]}">E </span>
<span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','&gt;=',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>

View File

@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
5 access_res_partner_grade res.partner.grade model_res_partner_grade base.group_sale_salesman 1 1 1 0
6 access_res_partner_grade_manager res.partner.grade.manager model_res_partner_grade base.group_sale_manager 1 1 1 1
7 access_partner_activation_manager res.partner.activation.manager model_res_partner_activation base.group_partner_manager 1 1 1 1
8 partner_access_crm_lead crm.lead model_crm_lead portal.group_portal 1 1 0 0

View File

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

View File

@ -20,3 +20,4 @@
##############################################################################
import crm_forward_to_partner
import crm_channel_interested

View File

@ -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': {
},
}

View File

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

View File

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

View File

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

View File

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

View File

@ -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."),
}

View File

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

1912
addons/fleet/i18n/bg.po Normal file

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -22,6 +22,8 @@
import openerp
import openerp.tools.config
import openerp.modules.registry
import openerp.addons.web.http as http
from openerp.addons.web.http import request
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
import datetime
from openerp.osv import osv, fields
@ -90,36 +92,38 @@ POLL_TIMER = 30
DISCONNECTION_TIMER = POLL_TIMER + 5
WATCHER_ERROR_DELAY = 10
class LongPollingController(openerp.addons.web.http.Controller):
_cp_path = '/longpolling/im'
class LongPollingController(http.Controller):
@openerp.addons.web.http.jsonrequest
def poll(self, req, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None):
@http.route('/longpolling/im/poll', type="json", auth="none")
def poll(self, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None):
assert_uuid(uuid)
if not openerp.evented:
raise Exception("Not usable in a server not running gevent")
from openerp.addons.im.watcher import ImWatcher
if db is not None:
req.session._db = db
req.session._uid = uid
req.session._password = password
req.session.model('im.user').im_connect(uuid=uuid, context=req.context)
my_id = req.session.model('im.user').get_by_user_id(uuid or req.session._uid, req.context)["id"]
request.session.authenticate(db=db, uid=uid, password=password)
else:
request.session.authenticate(db=request.session._db, uid=request.session._uid, password=request.session._password)
with request.registry.cursor() as cr:
request.registry.get('im.user').im_connect(cr, request.uid, uuid=uuid, context=request.context)
my_id = request.registry.get('im.user').get_by_user_id(cr, request.uid, uuid or request.session._uid, request.context)["id"]
num = 0
while True:
res = req.session.model('im.message').get_messages(last, users_watch, uuid=uuid, context=req.context)
with request.registry.cursor() as cr:
res = request.registry.get('im.message').get_messages(cr, request.uid, last, users_watch, uuid=uuid, context=request.context)
if num >= 1 or len(res["res"]) > 0:
return res
last = res["last"]
num += 1
ImWatcher.get_watcher(res["dbname"]).stop(my_id, users_watch or [], POLL_TIMER)
@openerp.addons.web.http.jsonrequest
def activated(self, req):
@http.route('/longpolling/im/activated', type="json", auth="none")
def activated(self):
return not not openerp.evented
@openerp.addons.web.http.jsonrequest
def gen_uuid(self, req):
@http.route('/longpolling/im/gen_uuid', type="json", auth="none")
def gen_uuid(self):
import uuid
return "%s" % uuid.uuid1()

View File

@ -26,6 +26,8 @@ import random
import jinja2
from openerp.osv import osv, fields
from openerp import tools
import openerp.addons.web.http as http
from openerp.addons.web.http import request
env = jinja2.Environment(
loader=jinja2.PackageLoader('openerp.addons.im_livechat', "."),
@ -33,48 +35,38 @@ env = jinja2.Environment(
)
env.filters["json"] = json.dumps
class LiveChatController(openerp.addons.web.http.Controller):
_cp_path = '/im_livechat'
class LiveChatController(http.Controller):
@openerp.addons.web.http.httprequest
def loader(self, req, **kwargs):
@http.route('/im_livechat/loader')
def loader(self, **kwargs):
p = json.loads(kwargs["p"])
db = p["db"]
channel = p["channel"]
user_name = p.get("user_name", None)
req.session._db = db
req.session._uid = None
req.session._login = "anonymous"
req.session._password = "anonymous"
info = req.session.model('im_livechat.channel').get_info_for_chat_src(channel)
request.session.authenticate(db=db, login="anonymous", password="anonymous")
info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel)
info["db"] = db
info["channel"] = channel
info["userName"] = user_name
return req.make_response(env.get_template("loader.js").render(info),
return request.make_response(env.get_template("loader.js").render(info),
headers=[('Content-Type', "text/javascript")])
@openerp.addons.web.http.httprequest
def web_page(self, req, **kwargs):
@http.route('/im_livechat/web_page')
def web_page(self, **kwargs):
p = json.loads(kwargs["p"])
db = p["db"]
channel = p["channel"]
req.session._db = db
req.session._uid = None
req.session._login = "anonymous"
req.session._password = "anonymous"
script = req.session.model('im_livechat.channel').read(channel, ["script"])["script"]
info = req.session.model('im_livechat.channel').get_info_for_chat_src(channel)
request.session.authenticate(db=db, login="anonymous", password="anonymous")
script = request.session.model('im_livechat.channel').read(channel, ["script"])["script"]
info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel)
info["script"] = script
return req.make_response(env.get_template("web_page.html").render(info),
return request.make_response(env.get_template("web_page.html").render(info),
headers=[('Content-Type', "text/html")])
@openerp.addons.web.http.jsonrequest
def available(self, req, db, channel):
req.session._db = db
req.session._uid = None
req.session._login = "anonymous"
req.session._password = "anonymous"
return req.session.model('im_livechat.channel').get_available_user(channel) > 0
@http.route('/im_livechat/available', type='json')
def available(self, db, channel):
request.session.authenticate(db=db, login="anonymous", password="anonymous")
return request.session.model('im_livechat.channel').get_available_user(channel) > 0
class im_livechat_channel(osv.osv):
_name = 'im_livechat.channel'

118
addons/knowledge/i18n/th.po Normal file
View File

@ -0,0 +1,118 @@
# 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-21 18:52+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-22 05:36+0000\n"
"X-Generator: Launchpad (build 16677)\n"
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "Documents"
msgstr "เอกสาร"
#. module: knowledge
#: model:ir.model,name:knowledge.model_knowledge_config_settings
msgid "knowledge.config.settings"
msgstr ""
#. module: knowledge
#: help:knowledge.config.settings,module_document_webdav:0
msgid ""
"Access your documents in OpenERP through WebDAV.\n"
" This installs the module document_webdav."
msgstr ""
#. module: knowledge
#: help:knowledge.config.settings,module_document_page:0
msgid "This installs the module document_page."
msgstr ""
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document2
msgid "Collaborative Content"
msgstr ""
#. module: knowledge
#: model:ir.actions.act_window,name:knowledge.action_knowledge_configuration
#: view:knowledge.config.settings:0
msgid "Configure Knowledge"
msgstr ""
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "Knowledge and Documents Management"
msgstr ""
#. module: knowledge
#: help:knowledge.config.settings,module_document:0
msgid ""
"This is a complete document management system, with: user authentication,\n"
" full document search (but pptx and docx are not supported), "
"and a document dashboard.\n"
" This installs the module document."
msgstr ""
#. module: knowledge
#: field:knowledge.config.settings,module_document_page:0
msgid "Create static web pages"
msgstr ""
#. module: knowledge
#: field:knowledge.config.settings,module_document_ftp:0
msgid "Share repositories (FTP)"
msgstr ""
#. module: knowledge
#: field:knowledge.config.settings,module_document:0
msgid "Manage documents"
msgstr ""
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "Cancel"
msgstr ""
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "Apply"
msgstr "ปรับใช้"
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document_configuration
msgid "Configuration"
msgstr "ตั้งค่า"
#. module: knowledge
#: help:knowledge.config.settings,module_document_ftp:0
msgid ""
"Access your documents in OpenERP through an FTP interface.\n"
" This installs the module document_ftp."
msgstr ""
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "or"
msgstr "หรือ"
#. module: knowledge
#: field:knowledge.config.settings,module_document_webdav:0
msgid "Share repositories (WebDAV)"
msgstr ""
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document
#: model:ir.ui.menu,name:knowledge.menu_knowledge_configuration
msgid "Knowledge"
msgstr "ความรู้"

View File

@ -0,0 +1,148 @@
# Chinese (Simplified) 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-11-24 02:53+0000\n"
"PO-Revision-Date: 2013-06-23 05:44+0000\n"
"Last-Translator: Calvin <mceiba@gmail.com>\n"
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-06-24 04:43+0000\n"
"X-Generator: Launchpad (build 16677)\n"
#. module: l10n_be_hr_payroll
#: help:hr.employee,disabled_spouse_bool:0
msgid "if recipient spouse is declared disabled by law"
msgstr ""
#. module: l10n_be_hr_payroll
#: help:hr.employee,disabled_children_bool:0
msgid "if recipient children is/are declared disabled by law"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,misc_onss_deduction:0
msgid "Miscellaneous exempt ONSS "
msgstr ""
#. module: l10n_be_hr_payroll
#: model:ir.model,name:l10n_be_hr_payroll.model_hr_employee
msgid "Employee"
msgstr "员工"
#. module: l10n_be_hr_payroll
#: field:hr.employee,disabled_spouse_bool:0
msgid "Disabled Spouse"
msgstr "残疾人配偶"
#. module: l10n_be_hr_payroll
#: field:hr.contract,retained_net_amount:0
msgid "Net retained "
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.employee,resident_bool:0
msgid "Nonresident"
msgstr "非常住人口"
#. module: l10n_be_hr_payroll
#: help:hr.employee,resident_bool:0
msgid "if recipient lives in a foreign country"
msgstr "如果接受者居住在国外"
#. module: l10n_be_hr_payroll
#: view:hr.employee:0
msgid "if spouse has professionnel income or not"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,insurance_employee_deduction:0
msgid "Insurance Group - by worker "
msgstr ""
#. module: l10n_be_hr_payroll
#: selection:hr.employee,spouse_fiscal_status:0
msgid "With Income"
msgstr "有收入"
#. module: l10n_be_hr_payroll
#: selection:hr.employee,spouse_fiscal_status:0
msgid "Without Income"
msgstr "无收入"
#. module: l10n_be_hr_payroll
#: field:hr.employee,disabled_children_number:0
msgid "Number of disabled children"
msgstr "残疾儿童个数"
#. module: l10n_be_hr_payroll
#: field:hr.contract,additional_net_amount:0
msgid "Net supplements"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,car_company_amount:0
msgid "Company car employer"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,misc_advantage_amount:0
msgid "Benefits of various nature "
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,car_employee_deduction:0
msgid "Company Car Deduction for Worker"
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.employee,disabled_children_bool:0
msgid "Disabled Children"
msgstr "残疾儿童"
#. module: l10n_be_hr_payroll
#: model:ir.model,name:l10n_be_hr_payroll.model_hr_contract
msgid "Contract"
msgstr "合约"
#. module: l10n_be_hr_payroll
#: field:hr.contract,meal_voucher_amount:0
msgid "Check Value Meal "
msgstr ""
#. module: l10n_be_hr_payroll
#: field:hr.contract,travel_reimbursement_amount:0
msgid "Reimbursement of travel expenses"
msgstr "差旅花费补贴"
#. module: l10n_be_hr_payroll
#: constraint:hr.contract:0
msgid "Error! Contract start-date must be less than contract end-date."
msgstr "错误!联系人开始日期必须小于结束日期"
#. module: l10n_be_hr_payroll
#: field:hr.employee,spouse_fiscal_status:0
msgid "Tax status for spouse"
msgstr "配偶缴税状态"
#. module: l10n_be_hr_payroll
#: view:hr.employee:0
msgid "number of dependent children declared as disabled"
msgstr ""
#. module: l10n_be_hr_payroll
#: constraint:hr.employee:0
msgid "Error! You cannot create recursive hierarchy of Employee(s)."
msgstr "错误!,你不能创建循环的员工层次"
#. module: l10n_be_hr_payroll
#: field:hr.contract,meal_voucher_employee_deduction:0
msgid "Check Value Meal - by worker "
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,7 @@
import base64
import openerp
from openerp import SUPERUSER_ID
import openerp.addons.web.http as oeweb
from openerp.addons.web.controllers.main import content_disposition
@ -20,3 +23,18 @@ class MailController(oeweb.Controller):
headers=[('Content-Type', 'application/octet-stream'),
('Content-Disposition', content_disposition(filename, req))])
return req.not_found()
@oeweb.jsonrequest
def receive(self, req):
""" End-point to receive mail from an external SMTP server. """
dbs = req.jsonrequest.get('databases')
for db in dbs:
message = dbs[db].decode('base64')
try:
registry = openerp.registry(db)
with registry.cursor() as cr:
mail_thread = registry['mail.thread']
mail_thread.message_process(cr, SUPERUSER_ID, None, message)
except psycopg2.Error:
pass
return True

512
addons/portal/i18n/th.po Normal file
View File

@ -0,0 +1,512 @@
# 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:55+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: portal
#: view:portal.payment.acquirer:0
msgid "Mako"
msgstr "Mako"
#. module: portal
#: code:addons/portal/wizard/share_wizard.py:50
#, python-format
msgid "Please select at least one user to share with"
msgstr ""
#. module: portal
#: view:portal.wizard:0
msgid ""
"Select which contacts should belong to the portal in the list below.\n"
" The email address of each selected contact must be "
"valid and unique.\n"
" If necessary, you can fix any contact's email "
"address directly in the list."
msgstr ""
#. module: portal
#: model:mail.group,name:portal.company_jobs
msgid "Company Jobs"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid "amount: the total amount to pay, as a float"
msgstr ""
#. module: portal
#: view:portal.wizard.user:0
msgid "Contacts"
msgstr "ที่อยู่ติดต่อ"
#. module: portal
#: view:share.wizard:0
#: field:share.wizard,group_ids:0
msgid "Existing groups"
msgstr ""
#. module: portal
#: view:res.groups:0
msgid "Portal Groups"
msgstr ""
#. module: portal
#: field:portal.wizard,welcome_message:0
msgid "Invitation Message"
msgstr "ข้อความเชื้อเชิญ"
#. module: portal
#: view:res.groups:0
msgid "Non-Portal Groups"
msgstr ""
#. module: portal
#: code:addons/portal/wizard/share_wizard.py:54
#, python-format
msgid "Please select at least one group to share with"
msgstr ""
#. module: portal
#: view:share.wizard:0
msgid "Details"
msgstr "รายละเอียด"
#. module: portal
#: model:ir.ui.menu,name:portal.portal_orders
msgid "Quotations and Sales Orders"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid "reference: the reference number of the document to pay"
msgstr ""
#. module: portal
#: help:portal.payment.acquirer,visible:0
msgid ""
"Make this payment acquirer available in portal forms (Customer invoices, "
"etc.)"
msgstr ""
#. module: portal
#: model:ir.model,name:portal.model_share_wizard
msgid "Share Wizard"
msgstr ""
#. module: portal
#: field:portal.wizard.user,email:0
msgid "Email"
msgstr "อีเมล์"
#. module: portal
#: model:ir.actions.client,help:portal.action_news
msgid ""
"<p>\n"
" Youd don't have unread company's news.\n"
" </p>\n"
" "
msgstr ""
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:194
#, python-format
msgid ""
"You must have an email address in your User Preferences to send emails."
msgstr ""
#. module: portal
#: model:ir.actions.client,name:portal.action_jobs
#: model:ir.ui.menu,name:portal.portal_jobs
msgid "Jobs"
msgstr "งาน"
#. module: portal
#: field:portal.wizard,user_ids:0
msgid "Users"
msgstr "ผู้ใช้งาน"
#. module: portal
#: code:addons/portal/acquirer.py:82
#, python-format
msgid "Pay safely online"
msgstr ""
#. module: portal
#: code:addons/portal/acquirer.py:77
#, python-format
msgid "No online payment acquirers configured"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid ""
"kind: the kind of document on which the payment form is rendered (translated "
"to user language, e.g. \"Invoice\")"
msgstr ""
#. module: portal
#: help:portal.wizard,portal_id:0
msgid "The portal that users can be added in or removed from."
msgstr ""
#. module: portal
#: code:addons/portal/wizard/share_wizard.py:38
#, python-format
msgid "Users you already shared with"
msgstr ""
#. module: portal
#: model:ir.actions.client,help:portal.action_jobs
msgid ""
"<p>\n"
" Youd don't have unread job offers.\n"
" </p>\n"
" "
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid ""
", so it may use Mako expressions.\n"
" The Mako evaluation context provides:"
msgstr ""
#. module: portal
#: model:ir.ui.menu,name:portal.portal_menu
#: field:portal.wizard,portal_id:0
#: field:res.groups,is_portal:0
#: model:res.groups,name:portal.group_portal
msgid "Portal"
msgstr ""
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:34
#, python-format
msgid "Your OpenERP account at %(company)s"
msgstr ""
#. module: portal
#: model:res.groups,name:portal.group_anonymous
msgid "Anonymous"
msgstr "ผู้ใช้นิรนาม"
#. module: portal
#: field:portal.wizard.user,in_portal:0
msgid "In Portal"
msgstr ""
#. module: portal
#: model:ir.actions.client,name:portal.action_news
#: model:ir.ui.menu,name:portal.portal_company_news
msgid "News"
msgstr "ข่าว"
#. module: portal
#: model:ir.ui.menu,name:portal.portal_after_sales
msgid "After Sale Services"
msgstr ""
#. module: portal
#: model:res.groups,comment:portal.group_portal
msgid ""
"Portal members have specific access rights (such as record rules and "
"restricted menus).\n"
" They usually do not belong to the usual OpenERP groups."
msgstr ""
#. module: portal
#: model:ir.actions.act_window,name:portal.action_acquirer_list
#: view:portal.payment.acquirer:0
msgid "Payment Acquirers"
msgstr ""
#. module: portal
#: model:ir.ui.menu,name:portal.portal_projects
msgid "Projects"
msgstr "โครงการ"
#. module: portal
#: model:ir.actions.client,name:portal.action_mail_inbox_feeds_portal
#: model:ir.ui.menu,name:portal.portal_inbox
msgid "Inbox"
msgstr "กล่องขาเข้า"
#. module: portal
#: view:share.wizard:0
#: field:share.wizard,user_ids:0
msgid "Existing users"
msgstr ""
#. module: portal
#: field:portal.wizard.user,wizard_id:0
msgid "Wizard"
msgstr ""
#. module: portal
#: field:portal.payment.acquirer,name:0
msgid "Name"
msgstr "ชื่อ"
#. module: portal
#: model:ir.model,name:portal.model_res_groups
msgid "Access Groups"
msgstr "กลุ่มการเข้าถึง"
#. module: portal
#: view:portal.payment.acquirer:0
msgid "uid: the current user id"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid ""
"quote(): a method to quote special string character to make them suitable "
"for inclusion in a URL"
msgstr ""
#. module: portal
#: help:res.groups,is_portal:0
msgid "If checked, this group is usable as a portal."
msgstr ""
#. module: portal
#: field:portal.payment.acquirer,form_template:0
msgid "Payment form template (HTML)"
msgstr ""
#. module: portal
#: field:portal.wizard.user,partner_id:0
msgid "Contact"
msgstr "ที่อยู่ติดต่อ"
#. module: portal
#: model:ir.model,name:portal.model_mail_mail
msgid "Outgoing Mails"
msgstr ""
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:193
#, python-format
msgid "Email required"
msgstr ""
#. module: portal
#: model:ir.ui.menu,name:portal.portal_messages
msgid "Messaging"
msgstr "Messaging"
#. module: portal
#: model:res.groups,comment:portal.group_anonymous
msgid ""
"Anonymous users have specific access rights (such as record rules and "
"restricted menus).\n"
" They usually do not belong to the usual OpenERP groups."
msgstr ""
#. module: portal
#: model:ir.model,name:portal.model_portal_payment_acquirer
msgid "Online Payment Acquirer"
msgstr ""
#. module: portal
#: model:mail.group,name:portal.company_news_feed
msgid "Company News"
msgstr "ข่าวสารบริษัท"
#. module: portal
#: code:addons/portal/acquirer.py:76
#, python-format
msgid ""
"You can finish the configuration in the <a href=\"%s\">Bank&Cash settings</a>"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid "cr: the current database cursor"
msgstr ""
#. module: portal
#: model:ir.actions.client,help:portal.action_mail_inbox_feeds_portal
msgid ""
"<p>\n"
" <b>Good Job!</b> Your inbox is empty.\n"
" </p><p>\n"
" Your inbox contains private messages or emails sent to "
"you\n"
" as well as information related to documents or people "
"you\n"
" follow.\n"
" </p>\n"
" "
msgstr ""
"<p>\n"
" <b>เยี่ยมยอด!</b> คุณอ่านข้อความหมดแล้ว\n"
" </p><p>\n"
" <b>ขอความร่วมมือ</b> ภาษาไทยสำหรับ OpenERP นั้น "
"ยังไม่สมบรูณ์และถูกต้อง \n"
" <p> เลือกหมวด Translations เพื่อแนะนำการแปลได้ที่ </p>\n"
"\n"
" https://launchpad.net/openobject-addons : business "
"application modules\n"
" https://launchpad.net/openobject-server : the "
"framework\n"
" https://launchpad.net/openerp-web : web "
"modules and frontend\n"
" </p>\n"
" "
#. module: portal
#: view:portal.payment.acquirer:0
msgid ""
"object: the document on which the payment form is rendered (usually an "
"invoice or sales order record)"
msgstr ""
#. module: portal
#: help:portal.wizard,welcome_message:0
msgid "This text is included in the email sent to new users of the portal."
msgstr ""
#. module: portal
#: model:ir.ui.menu,name:portal.portal_company
msgid "About Us"
msgstr "เกี่ยวกับตัวเอง"
#. module: portal
#: view:portal.payment.acquirer:0
msgid ""
"currency: the currency record in which the document is issued (e.g. "
"currency.name could be EUR)"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid "Payment Acquirer"
msgstr ""
#. module: portal
#: code:addons/portal/wizard/portal_wizard.py:35
#, python-format
msgid ""
"Dear %(name)s,\n"
"\n"
"You have been given access to %(portal)s.\n"
"\n"
"Your login account data is:\n"
"Database: %(db)s\n"
"Username: %(login)s\n"
"\n"
"In order to complete the signin process, click on the following url:\n"
"%(url)s\n"
"\n"
"%(welcome_message)s\n"
"\n"
"--\n"
"OpenERP - Open Source Business Applications\n"
"http://www.openerp.com\n"
msgstr ""
#. module: portal
#: view:portal.wizard:0
msgid "or"
msgstr "หรือ"
#. module: portal
#: model:portal.payment.acquirer,form_template:portal.paypal_acquirer
msgid ""
"\n"
"% if object.company_id.paypal_account:\n"
"<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\" "
"target=\"_blank\">\n"
" <input type=\"hidden\" name=\"cmd\" value=\"_xclick\"/>\n"
" <input type=\"hidden\" name=\"business\" "
"value=\"${object.company_id.paypal_account}\"/>\n"
" <input type=\"hidden\" name=\"item_name\" "
"value=\"${object.company_id.name} ${kind.title()} ${reference}\"/>\n"
" <input type=\"hidden\" name=\"amount\" value=\"${amount}\"/>\n"
" <input type=\"hidden\" name=\"currency_code\" "
"value=\"${currency.name}\"/>\n"
" <input type=\"image\" name=\"submit\" "
"src=\"https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif\"/>\n"
"</form>\n"
"% endif\n"
" "
msgstr ""
#. module: portal
#: model:ir.model,name:portal.model_portal_wizard_user
msgid "Portal User Config"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid ""
"If the template renders to an empty result in a certain context it will be "
"ignored, as if it was inactive."
msgstr ""
#. module: portal
#: field:portal.payment.acquirer,visible:0
msgid "Visible"
msgstr "ปรากฏเห็น"
#. module: portal
#: code:addons/portal/wizard/share_wizard.py:39
#, python-format
msgid "Existing Groups (e.g Portal Groups)"
msgstr ""
#. module: portal
#: view:portal.wizard:0
msgid "Cancel"
msgstr "ยกเลิก"
#. module: portal
#: view:portal.wizard:0
msgid "Apply"
msgstr "ใช้งาน"
#. module: portal
#: view:portal.payment.acquirer:0
msgid "ctx: the current context dictionary"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid ""
"This is an HTML form template to submit a payment through this acquirer.\n"
" The template will be rendered with"
msgstr ""
#. module: portal
#: code:addons/portal/mail_mail.py:42
#, python-format
msgid ""
"Access your personal documents through <a href=\"%s\">our Customer Portal</a>"
msgstr ""
#. module: portal
#: view:portal.payment.acquirer:0
msgid "Form Template"
msgstr ""
#. module: portal
#: model:ir.actions.act_window,name:portal.partner_wizard_action
#: model:ir.model,name:portal.model_portal_wizard
#: view:portal.wizard:0
msgid "Portal Access Management"
msgstr ""

View File

@ -0,0 +1,25 @@
# English (Australia) 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-24 01:47+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: English (Australia) <en_AU@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-25 05:14+0000\n"
"X-Generator: Launchpad (build 16677)\n"
#. module: portal_anonymous
#. openerp-web
#: code:addons/portal_anonymous/static/src/xml/portal_anonymous.xml:8
#, python-format
msgid "Login"
msgstr "Login"

View File

@ -0,0 +1,25 @@
# 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 14:03+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: portal_anonymous
#. openerp-web
#: code:addons/portal_anonymous/static/src/xml/portal_anonymous.xml:8
#, python-format
msgid "Login"
msgstr "เข้าระบบ"

View File

@ -0,0 +1,546 @@
# 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 14:52+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: portal_crm
#: selection:portal_crm.crm_contact_us,type:0
msgid "Lead"
msgstr "ผู้นำ"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,title:0
msgid "Title"
msgstr "คำนำหน้าชื่อ"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,probability:0
msgid "Success Rate (%)"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Contact us"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action:0
msgid "Next Action Date"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,fax:0
msgid "Fax"
msgstr "โทรสาร"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,zip:0
msgid "Zip"
msgstr "รหัสไปรษณีย์"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_unread:0
msgid "Unread Messages"
msgstr "ข้อความที่ยังไม่ได้อ่าน"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_id:0
msgid "Company"
msgstr "บริษัท"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,day_open:0
msgid "Days to Open"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Thank you for your interest, we'll respond to your request shortly."
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Highest"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,mobile:0
msgid "Mobile"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,description:0
msgid "Notes"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_ids:0
msgid "Messages"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,color:0
msgid "Color Index"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_latitude:0
msgid "Geo Latitude"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_name:0
msgid "Customer Name"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "Cancelled"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,channel_id:0
msgid "Communication channel (mail, direct, phone, ...)"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,type_id:0
msgid "Campaign"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,ref:0
msgid "Reference"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action_next:0
#: field:portal_crm.crm_contact_us,title_action:0
msgid "Next Action"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,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: portal_crm
#: field:portal_crm.crm_contact_us,partner_id:0
msgid "Partner"
msgstr ""
#. module: portal_crm
#: model:ir.actions.act_window,name:portal_crm.action_contact_us
msgid "Contact Us"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,name:0
msgid "Subject"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,opt_out:0
msgid "Opt-Out"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,priority:0
msgid "Priority"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,state_id:0
msgid "State"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_follower_ids:0
msgid "Followers"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_id:0
msgid "Linked partner (optional). Usually created when converting the lead."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,payment_mode:0
msgid "Payment Mode"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "New"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,type:0
msgid "Type"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,email_from:0
msgid "Email"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,channel_id:0
msgid "Channel"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Name"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Lowest"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,create_date:0
msgid "Creation Date"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Close"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "Pending"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,type:0
msgid "Type is used to separate Leads and Opportunities"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,categ_ids:0
msgid "Categories"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,stage_id:0
msgid "Stage"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_login:0
msgid "User Login"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,opt_out:0
msgid ""
"If opt-out is checked, this contact has refused to receive emails or "
"unsubscribed to a campaign."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,contact_name:0
msgid "Contact Name"
msgstr ""
#. module: portal_crm
#: model:ir.ui.menu,name:portal_crm.portal_company_contact
msgid "Contact"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_address_email:0
msgid "Partner Contact Email"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,planned_revenue:0
msgid "Expected Revenue"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,task_ids:0
msgid "Tasks"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Contact form"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_currency:0
msgid "Currency"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,write_date:0
msgid "Update Date"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_deadline:0
msgid "Expected Closing"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,ref2:0
msgid "Reference 2"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_email:0
msgid "User Email"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_open:0
msgid "Opened"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "In Progress"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_name:0
msgid ""
"The name of the future partner company that will be created while converting "
"the lead into opportunity"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,planned_cost:0
msgid "Planned Costs"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,date_deadline:0
msgid "Estimate of the date on which the opportunity will be won."
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,email_cc:0
msgid ""
"These email addresses will be added to the CC field of all inbound and "
"outbound emails for this record before being sent. Separate multiple email "
"addresses with a comma"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Low"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_closed:0
#: selection:portal_crm.crm_contact_us,state:0
msgid "Closed"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_assign:0
msgid "Assignation Date"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,state:0
msgid "Status"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Normal"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,email_cc:0
msgid "Global CC"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,street2:0
msgid "Street2"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,id:0
msgid "ID"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,phone:0
msgid "Phone"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_is_follower:0
msgid "Is a Follower"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,active:0
msgid "Active"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_id:0
msgid "Salesperson"
msgstr "พนักงานขาย"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,day_close:0
msgid "Days to Close"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_ids:0
msgid "Companies"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_summary:0
msgid "Summary"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,section_id:0
msgid ""
"When sending mails, the default email address is taken from the sales team."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_address_name:0
msgid "Partner Contact Name"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_longitude:0
msgid "Geo Longitude"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,date_assign:0
msgid "Last date this case was forwarded/assigned to a partner"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,email_from:0
msgid "Email address of the contact"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,city:0
msgid "City"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Submit"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,function:0
msgid "Function"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,referred:0
msgid "Referred By"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_assigned_id:0
msgid "Assigned Partner"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,type:0
msgid "Opportunity"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_assigned_id:0
msgid "Partner this case has been forwarded/assigned to."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,country_id:0
msgid "Country"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Thank you"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,state:0
msgid ""
"The Status is set to 'Draft', when a case is created. If the case is in "
"progress the Status is set to 'Open'. When the case is over, the Status is "
"set to 'Done'. If the case needs to be reviewed then the Status is set to "
"'Pending'."
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,message_ids:0
msgid "Messages and communication history"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,type_id:0
msgid ""
"From which campaign (seminar, marketing campaign, mass mailing, ...) did "
"this contact come from?"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "High"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,section_id:0
msgid "Sales Team"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,street:0
msgid "Street"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action_last:0
msgid "Last Action"
msgstr ""
#. module: portal_crm
#: model:ir.model,name:portal_crm.model_portal_crm_crm_contact_us
msgid "Contact form for the portal"
msgstr ""

View File

@ -0,0 +1,95 @@
# 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:57+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: portal_hr_employees
#: view:hr.employee:0
msgid "Coach"
msgstr "โค้ช"
#. module: portal_hr_employees
#: model:ir.actions.act_window,name:portal_hr_employees.action_team
#: view:portal_crm.crm_contact_us:0
msgid "Our Team"
msgstr ""
#. module: portal_hr_employees
#: view:hr.employee:0
msgid "Group By..."
msgstr "จัดกลุ่มตาม..."
#. module: portal_hr_employees
#: view:hr.employee:0
msgid "Company"
msgstr "บริษัท"
#. module: portal_hr_employees
#: selection:hr.employee,visibility:0
msgid "Public"
msgstr "สาธารณะ"
#. module: portal_hr_employees
#: help:hr.employee,visibility:0
msgid "Employee's visibility in the portal's contact page"
msgstr ""
#. module: portal_hr_employees
#: selection:hr.employee,visibility:0
msgid "Private"
msgstr "ส่วนตัว"
#. module: portal_hr_employees
#: view:hr.employee:0
msgid "Manager"
msgstr "ผู้จัดการ"
#. module: portal_hr_employees
#: model:ir.model,name:portal_hr_employees.model_hr_employee
msgid "Employee"
msgstr "พนักงาน"
#. module: portal_hr_employees
#: view:hr.employee:0
msgid "Job"
msgstr "งาน"
#. module: portal_hr_employees
#: field:hr.employee,visibility:0
msgid "Visibility"
msgstr "มองเห็นได้"
#. module: portal_hr_employees
#: field:hr.employee,public_info:0
msgid "Public Info"
msgstr ""
#. module: portal_hr_employees
#: model:ir.model,name:portal_hr_employees.model_portal_crm_crm_contact_us
msgid "Contact form for the portal"
msgstr ""
#. module: portal_hr_employees
#: view:hr.employee:0
msgid "Department"
msgstr "แผนก"
#. module: portal_hr_employees
#: view:hr.employee:0
#: field:portal_crm.crm_contact_us,employee_ids:0
msgid "Employees"
msgstr "พนักงาน"

View File

@ -27,12 +27,10 @@ class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'property_product_pricelist': fields.property(
'product.pricelist',
type='many2one',
relation='product.pricelist',
domain=[('type','=','sale')],
string="Sale Pricelist",
view_load=True,
help="This pricelist will be used, instead of the default one, for sales to the current partner"),
}

View File

@ -321,7 +321,7 @@ class product_template(osv.osv):
'uom_id': fields.many2one('product.uom', 'Unit of Measure', required=True, help="Default Unit of Measure used for all stock operation."),
'uom_po_id': fields.many2one('product.uom', 'Purchase Unit of Measure', required=True, help="Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."),
'uos_id' : fields.many2one('product.uom', 'Unit of Sale',
help='Sepcify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure.'),
help='Specify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure.'),
'uos_coeff': fields.float('Unit of Measure -> UOS Coeff', digits_compute= dp.get_precision('Product UoS'),
help='Coefficient to convert default Unit of Measure to Unit of Sale\n'
' uos = uom * coeff'),

View File

@ -48,12 +48,10 @@ class res_partner(osv.osv):
_columns = {
'property_product_pricelist_purchase': fields.property(
'product.pricelist',
type='many2one',
relation='product.pricelist',
domain=[('type','=','purchase')],
string="Purchase Pricelist",
view_load=True,
help="This pricelist will be used, instead of the default one, for purchases from the current partner"),
'purchase_order_count': fields.function(_purchase_order_count, string='# of Purchase Order', type='integer'),
'purchase_order_ids': fields.one2many('purchase.order','partner_id','Purchase Order')

View File

@ -468,6 +468,20 @@ class purchase_order(osv.osv):
self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid})
return True
def _choose_account_from_po_line(self, cr, uid, po_line, context=None):
fiscal_obj = self.pool.get('account.fiscal.position')
property_obj = self.pool.get('ir.property')
if po_line.product_id:
acc_id = po_line.product_id.property_account_expense.id
if not acc_id:
acc_id = po_line.product_id.categ_id.property_account_expense_categ.id
if not acc_id:
raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,))
else:
acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id
fpos = po_line.order_id.fiscal_position or False
return fiscal_obj.map_account(cr, uid, fpos, acc_id)
def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None):
"""Collects require data from purchase order line that is used to create invoice line
for that purchase order line
@ -485,6 +499,7 @@ class purchase_order(osv.osv):
'uos_id': order_line.product_uom.id or False,
'invoice_line_tax_id': [(6, 0, [x.id for x in order_line.taxes_id])],
'account_analytic_id': order_line.account_analytic_id.id or False,
'purchase_line_id': order_line.id,
}
def action_cancel_draft(self, cr, uid, ids, context=None):
@ -508,8 +523,6 @@ class purchase_order(osv.osv):
journal_obj = self.pool.get('account.journal')
inv_obj = self.pool.get('account.invoice')
inv_line_obj = self.pool.get('account.invoice.line')
fiscal_obj = self.pool.get('account.fiscal.position')
property_obj = self.pool.get('ir.property')
for order in self.browse(cr, uid, ids, context=context):
pay_acc_id = order.partner_id.property_account_payable.id
@ -521,17 +534,7 @@ class purchase_order(osv.osv):
# generate invoice line correspond to PO line and link that to created invoice (inv_id) and PO line
inv_lines = []
for po_line in order.order_line:
if po_line.product_id:
acc_id = po_line.product_id.property_account_expense.id
if not acc_id:
acc_id = po_line.product_id.categ_id.property_account_expense_categ.id
if not acc_id:
raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,))
else:
acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id
fpos = order.fiscal_position or False
acc_id = fiscal_obj.map_account(cr, uid, fpos, acc_id)
acc_id = self._choose_account_from_po_line(cr, uid, po_line, context=context)
inv_line_data = self._prepare_inv_line(cr, uid, acc_id, po_line, context=context)
inv_line_id = inv_line_obj.create(cr, uid, inv_line_data, context=context)
inv_lines.append(inv_line_id)
@ -633,6 +636,7 @@ class purchase_order(osv.osv):
}
def _prepare_order_line_move(self, cr, uid, order, order_line, picking_id, context=None):
''' prepare the stock move data from the PO line '''
return {
'name': order_line.name or '',
'product_id': order_line.product_id.id,
@ -869,7 +873,7 @@ class purchase_order_line(osv.osv):
'invoice_lines': fields.many2many('account.invoice.line', 'purchase_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True),
'invoiced': fields.boolean('Invoiced', readonly=True),
'partner_id': fields.related('order_id','partner_id',string='Partner',readonly=True,type="many2one", relation="res.partner", store=True),
'date_order': fields.related('order_id','date_order',string='Order Date',readonly=True,type="date")
'date_order': fields.related('order_id','date_order',string='Order Date',readonly=True,type="date"),
}
_defaults = {
@ -1246,5 +1250,13 @@ class account_invoice(osv.Model):
purchase_order_obj.message_post(cr, uid, po_ids, body=_("Invoice paid"), context=context)
return res
class account_invoice_line(osv.Model):
""" Override account_invoice_line to add the link to the purchase order line it is related to"""
_inherit = 'account.invoice.line'
_columns = {
'purchase_line_id': fields.many2one('purchase.order.line',
'Purchase Order Line', ondelete='set null', select=True,
readonly=True),
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -48,12 +48,11 @@ class purchase_line_invoice(osv.osv_memory):
if record_ids:
res = False
invoices = {}
invoice_obj=self.pool.get('account.invoice')
purchase_line_obj=self.pool.get('purchase.order.line')
property_obj=self.pool.get('ir.property')
account_fiscal_obj=self.pool.get('account.fiscal.position')
invoice_line_obj=self.pool.get('account.invoice.line')
account_jrnl_obj=self.pool.get('account.journal')
invoice_obj = self.pool.get('account.invoice')
purchase_obj = self.pool.get('purchase.order')
purchase_line_obj = self.pool.get('purchase.order.line')
invoice_line_obj = self.pool.get('account.invoice.line')
account_jrnl_obj = self.pool.get('account.journal')
def multiple_order_invoice_notes(orders):
notes = ""
@ -93,35 +92,14 @@ class purchase_line_invoice(osv.osv_memory):
order.write({'invoice_ids': [(4, inv_id)]})
return inv_id
for line in purchase_line_obj.browse(cr,uid,record_ids):
if (not line.invoiced) and (line.state not in ('draft','cancel')):
for line in purchase_line_obj.browse(cr, uid, record_ids, context=context):
if (not line.invoiced) and (line.state not in ('draft', 'cancel')):
if not line.partner_id.id in invoices:
invoices[line.partner_id.id] = []
if line.product_id:
a = line.product_id.property_account_expense.id
if not a:
a = line.product_id.categ_id.property_account_expense_categ.id
if not a:
raise osv.except_osv(_('Error!'),
_('Define expense account for this product: "%s" (id:%d).') % \
(line.product_id.name, line.product_id.id,))
else:
a = property_obj.get(cr, uid,
'property_account_expense_categ', 'product.category',
context=context).id
fpos = line.order_id.fiscal_position or False
a = account_fiscal_obj.map_account(cr, uid, fpos, a)
inv_id = invoice_line_obj.create(cr, uid, {
'name': line.name,
'origin': line.order_id.name,
'account_id': a,
'price_unit': line.price_unit,
'quantity': line.product_qty,
'uos_id': line.product_uom.id,
'product_id': line.product_id.id or False,
'invoice_line_tax_id': [(6, 0, [x.id for x in line.taxes_id])],
'account_analytic_id': line.account_analytic_id and line.account_analytic_id.id or False,
})
acc_id = purchase_obj._choose_account_from_po_line(cr, uid, line, context=context)
inv_line_data = purchase_obj._prepare_inv_line(cr, uid, acc_id, line, context=context)
inv_line_data.update({'origin': line.order_id.name})
inv_id = invoice_line_obj.create(cr, uid, inv_line_data, context=context)
purchase_line_obj.write(cr, uid, [line.id], {'invoiced': True, 'invoice_lines': [(4, inv_id)]})
invoices[line.partner_id.id].append((line,inv_id))

View File

@ -37,10 +37,10 @@ from webkit_report import WebKitParser
class ir_actions_report_xml(orm.Model):
_inherit = 'ir.actions.report.xml'
_columns = {
'webkit_header': fields.property('ir.header_webkit',
'webkit_header': fields.property(
type='many2one', relation='ir.header_webkit',
string='Webkit Header', help="The header linked to the report",
view_load=True, required=True),
required=True),
'webkit_debug': fields.boolean('Webkit debug',
help="Enable the webkit engine debugger"),
'report_webkit_data': fields.text('Webkit Template',

View File

@ -43,11 +43,9 @@ class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'property_invoice_type': fields.property(
'sale_journal.invoice.type',
type = 'many2one',
relation = 'sale_journal.invoice.type',
string = "Invoicing Type",
view_load = True,
group_name = "Accounting Properties",
help = "This invoicing type will be used, by default, to invoice the current partner."),
}

View File

@ -25,19 +25,15 @@ class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'property_stock_customer': fields.property(
'stock.location',
type='many2one',
relation='stock.location',
string="Customer Location",
view_load=True,
help="This stock location will be used, instead of the default one, as the destination location for goods you send to this partner"),
'property_stock_supplier': fields.property(
'stock.location',
type='many2one',
relation='stock.location',
string="Supplier Location",
view_load=True,
help="This stock location will be used, instead of the default one, as the source location for goods you receive from the current partner"),
}

View File

@ -477,37 +477,33 @@ class product_template(osv.osv):
_inherit = 'product.template'
_columns = {
'property_stock_procurement': fields.property(
'stock.location',
type='many2one',
relation='stock.location',
string="Procurement Location",
view_load=True,
domain=[('usage','like','procurement')],
help="This stock location will be used, instead of the default one, as the source location for stock moves generated by procurements."),
'property_stock_production': fields.property(
'stock.location',
type='many2one',
relation='stock.location',
string="Production Location",
view_load=True,
domain=[('usage','like','production')],
help="This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders."),
'property_stock_inventory': fields.property(
'stock.location',
type='many2one',
relation='stock.location',
string="Inventory Location",
view_load=True,
domain=[('usage','like','inventory')],
help="This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory."),
'property_stock_account_input': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Input Account', view_load=True,
'property_stock_account_input': fields.property(
type='many2one',
relation='account.account',
string='Stock Input Account',
help="When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless "
"there is a specific valuation account set on the source location. When not set on the product, the one from the product category is used."),
'property_stock_account_output': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Output Account', view_load=True,
'property_stock_account_output': fields.property(
type='many2one',
relation='account.account',
string='Stock Output Account',
help="When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless "
"there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used."),
'sale_delay': fields.float('Customer Lead Time', help="The average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."),
@ -524,27 +520,29 @@ class product_category(osv.osv):
_inherit = 'product.category'
_columns = {
'property_stock_journal': fields.property('account.journal',
relation='account.journal', type='many2one',
string='Stock Journal', view_load=True,
'property_stock_journal': fields.property(
relation='account.journal',
type='many2one',
string='Stock Journal',
help="When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed."),
'property_stock_account_input_categ': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Input Account', view_load=True,
'property_stock_account_input_categ': fields.property(
type='many2one',
relation='account.account',
string='Stock Input Account',
help="When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless "
"there is a specific valuation account set on the source location. This is the default value for all products in this category. It "
"can also directly be set on each product"),
'property_stock_account_output_categ': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Output Account', view_load=True,
'property_stock_account_output_categ': fields.property(
type='many2one',
relation='account.account',
string='Stock Output Account',
help="When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless "
"there is a specific valuation account set on the destination location. This is the default value for all products in this category. It "
"can also directly be set on each product"),
'property_stock_valuation_account_id': fields.property('account.account',
'property_stock_valuation_account_id': fields.property(
type='many2one',
relation='account.account',
string="Stock Valuation Account",
view_load=True,
help="When real-time inventory valuation is enabled on a product, this account will hold the current value of the products.",),
}

View File

@ -0,0 +1,377 @@
# 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:06+0000\n"
"PO-Revision-Date: 2013-06-21 04:47+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-22 05:36+0000\n"
"X-Generator: Launchpad (build 16677)\n"
#. module: stock_location
#: help:product.pulled.flow,company_id:0
msgid "Is used to know to which company the pickings and moves belong."
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,picking_type:0
#: selection:stock.location.path,picking_type:0
msgid "Sending Goods"
msgstr ""
#. module: stock_location
#: view:product.product:0
msgid "Pulled Paths"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,type_proc:0
msgid "Move"
msgstr ""
#. module: stock_location
#: model:ir.model,name:stock_location.model_stock_location_path
msgid "Pushed Flows"
msgstr ""
#. module: stock_location
#: selection:stock.location.path,auto:0
msgid "Automatic No Step Added"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,location_src_id:0
#: field:stock.location.path,location_from_id:0
msgid "Source Location"
msgstr ""
#. module: stock_location
#: help:product.pulled.flow,cancel_cascade:0
msgid "Allow you to cancel moves related to the product pull flow"
msgstr ""
#. module: stock_location
#: model:ir.model,name:stock_location.model_product_pulled_flow
#: field:product.product,flow_pull_ids:0
msgid "Pulled Flows"
msgstr ""
#. module: stock_location
#: help:product.pulled.flow,location_src_id:0
msgid "Location used by Destination Location to supply"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,picking_type:0
#: selection:stock.location.path,picking_type:0
msgid "Internal"
msgstr ""
#. module: stock_location
#: code:addons/stock_location/procurement_pull.py:98
#, python-format
msgid ""
"Pulled procurement coming from original location %s, pull rule %s, via "
"original Procurement %s (#%d)"
msgstr ""
#. module: stock_location
#: model:ir.model,name:stock_location.model_stock_location
msgid "Location"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,invoice_state:0
#: field:stock.location.path,invoice_state:0
msgid "Invoice Status"
msgstr ""
#. module: stock_location
#: help:stock.location.path,auto:0
msgid ""
"This is used to define paths the product has to follow within the location "
"tree.\n"
"The 'Automatic Move' value will create a stock move after the current one "
"that will be validated automatically. With 'Manual Operation', the stock "
"move has to be validated by a worker. With 'Automatic No Step Added', the "
"location is replaced in the original move."
msgstr ""
#. module: stock_location
#: view:product.product:0
msgid "Conditions"
msgstr ""
#. module: stock_location
#: model:stock.location,name:stock_location.location_pack_zone
msgid "Pack Zone"
msgstr ""
#. module: stock_location
#: model:stock.location,name:stock_location.location_gate_b
msgid "Gate B"
msgstr ""
#. module: stock_location
#: model:stock.location,name:stock_location.location_gate_a
msgid "Gate A"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,type_proc:0
msgid "Buy"
msgstr ""
#. module: stock_location
#: view:product.product:0
msgid "Pushed flows"
msgstr ""
#. module: stock_location
#: model:stock.location,name:stock_location.location_dispatch_zone
msgid "Dispatch Zone"
msgstr ""
#. module: stock_location
#: view:product.product:0
msgid "Pulled flows"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,company_id:0
#: field:stock.location.path,company_id:0
msgid "Company"
msgstr ""
#. module: stock_location
#: model:ir.model,name:stock_location.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: stock_location
#: help:stock.move,cancel_cascade:0
msgid "If checked, when this move is cancelled, cancel the linked move too"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,type_proc:0
msgid "Produce"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,procure_method:0
msgid "Make to Order"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,procure_method:0
msgid "Make to Stock"
msgstr ""
#. module: stock_location
#: code:addons/stock_location/procurement_pull.py:118
#, python-format
msgid "Pulled from another location."
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,partner_address_id:0
msgid "Partner Address"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,invoice_state:0
#: selection:stock.location.path,invoice_state:0
msgid "To Be Invoiced"
msgstr ""
#. module: stock_location
#: help:stock.location.path,delay:0
msgid "Number of days to do this transition"
msgstr ""
#. module: stock_location
#: help:product.pulled.flow,name:0
msgid "This field will fill the packing Origin and the name of its moves"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,type_proc:0
msgid "Type of Procurement"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,name:0
msgid "Name"
msgstr ""
#. module: stock_location
#: help:product.product,path_ids:0
msgid ""
"These rules set the right path of the product in the whole location tree."
msgstr ""
#. module: stock_location
#: selection:stock.location.path,auto:0
msgid "Manual Operation"
msgstr ""
#. module: stock_location
#: model:ir.model,name:stock_location.model_product_product
#: field:product.pulled.flow,product_id:0
msgid "Product"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,picking_type:0
#: field:stock.location.path,picking_type:0
msgid "Shipping Type"
msgstr ""
#. module: stock_location
#: help:product.pulled.flow,procure_method:0
msgid ""
"'Make to Stock': When needed, take from the stock or wait until re-"
"supplying. 'Make to Order': When needed, purchase or produce for the "
"procurement request."
msgstr ""
#. module: stock_location
#: help:product.pulled.flow,location_id:0
msgid "Is the destination location that needs supplying"
msgstr ""
#. module: stock_location
#: field:stock.location.path,product_id:0
msgid "Products"
msgstr ""
#. module: stock_location
#: model:stock.location,name:stock_location.stock_location_qualitytest0
msgid "Quality Control"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,invoice_state:0
#: selection:stock.location.path,invoice_state:0
msgid "Not Applicable"
msgstr ""
#. module: stock_location
#: field:stock.location.path,delay:0
msgid "Delay (days)"
msgstr ""
#. module: stock_location
#: code:addons/stock_location/procurement_pull.py:67
#, python-format
msgid ""
"Picking for pulled procurement coming from original location %s, pull rule "
"%s, via original Procurement %s (#%d)"
msgstr ""
#. module: stock_location
#: field:product.product,path_ids:0
msgid "Pushed Flow"
msgstr ""
#. module: stock_location
#: code:addons/stock_location/procurement_pull.py:89
#, python-format
msgid ""
"Move for pulled procurement coming from original location %s, pull rule %s, "
"via original Procurement %s (#%d)"
msgstr ""
#. module: stock_location
#: view:product.product:0
msgid "Push Flow"
msgstr ""
#. module: stock_location
#: view:product.product:0
msgid "Pull Flow"
msgstr ""
#. module: stock_location
#: model:ir.model,name:stock_location.model_procurement_order
msgid "Procurement"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,location_id:0
#: field:stock.location.path,location_dest_id:0
msgid "Destination Location"
msgstr ""
#. module: stock_location
#: field:stock.location.path,auto:0
#: selection:stock.location.path,auto:0
msgid "Automatic Move"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,picking_type:0
#: selection:stock.location.path,picking_type:0
msgid "Getting Goods"
msgstr ""
#. module: stock_location
#: view:product.product:0
msgid "Action Type"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,procure_method:0
msgid "Procure Method"
msgstr ""
#. module: stock_location
#: help:product.pulled.flow,picking_type:0
#: help:stock.location.path,picking_type:0
msgid ""
"Depending on the company, choose whatever you want to receive or send "
"products"
msgstr ""
#. module: stock_location
#: model:stock.location,name:stock_location.location_order
msgid "Order Processing"
msgstr ""
#. module: stock_location
#: field:stock.location.path,name:0
msgid "Operation"
msgstr ""
#. module: stock_location
#: view:stock.location.path:0
msgid "Location Paths"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,journal_id:0
#: field:stock.location.path,journal_id:0
msgid "Journal"
msgstr ""
#. module: stock_location
#: field:product.pulled.flow,cancel_cascade:0
#: field:stock.move,cancel_cascade:0
msgid "Cancel Cascade"
msgstr ""
#. module: stock_location
#: selection:product.pulled.flow,invoice_state:0
#: selection:stock.location.path,invoice_state:0
msgid "Invoiced"
msgstr ""