[MERGE]: Merge with lp:openobject-addons-trunk
bzr revid: ksa@tinyerp.co.in-20101005043007-kpz9tr27tlz60473
This commit is contained in:
commit
1793f38630
|
@ -75,6 +75,9 @@ class account_analytic_line(osv.osv):
|
|||
unit=False, journal_id=False, context=None):
|
||||
if context==None:
|
||||
context={}
|
||||
if not journal_id:
|
||||
j_ids = self.pool.get('account.analytic.journal').search(cr, uid, [('type','=','purchase')])
|
||||
j_id = j_ids and j_ids[0] or False
|
||||
if not journal_id or not prod_id:
|
||||
return {}
|
||||
product_obj = self.pool.get('product.product')
|
||||
|
@ -86,7 +89,7 @@ class account_analytic_line(osv.osv):
|
|||
result = 0.0
|
||||
is_purchase = False
|
||||
|
||||
if j_id.type == 'purchase':
|
||||
if j_id.type <> 'sale':
|
||||
a = prod.product_tmpl_id.property_account_expense.id
|
||||
if not a:
|
||||
a = prod.categ_id.property_account_expense_categ.id
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-09-29 08:13+0000\n"
|
||||
"PO-Revision-Date: 2010-10-03 09:42+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: 2010-09-30 04:41+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-04 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
@ -2116,7 +2116,7 @@ msgstr "дней"
|
|||
#. module: account
|
||||
#: selection:account.aged.trial.balance,init,direction_selection:0
|
||||
msgid "Past"
|
||||
msgstr ""
|
||||
msgstr "Прошлые"
|
||||
|
||||
#. module: account
|
||||
#: field:account.analytic.account,company_currency_id:0
|
||||
|
@ -2267,7 +2267,7 @@ msgstr "Создать проводки подписки"
|
|||
#. module: account
|
||||
#: wizard_field:account.fiscalyear.close,init,journal_id:0
|
||||
msgid "Opening Entries Journal"
|
||||
msgstr ""
|
||||
msgstr "Открытие журнала проводок"
|
||||
|
||||
#. module: account
|
||||
#: view:account.config.wizard:0
|
||||
|
@ -3839,7 +3839,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:account.action_wizard_company_setup_form
|
||||
#: view:wizard.company.setup:0
|
||||
msgid "Overdue Payment Report Message"
|
||||
msgstr ""
|
||||
msgstr "Сообщение о просроченном платеже"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.tax,tax_group:0
|
||||
|
@ -3894,12 +3894,12 @@ msgstr "Финансовые журналы"
|
|||
#: selection:account.partner.balance.report,init,state:0
|
||||
#: selection:account.third_party_ledger.report,init,state:0
|
||||
msgid "By Period"
|
||||
msgstr ""
|
||||
msgstr "По периоду"
|
||||
|
||||
#. module: account
|
||||
#: help:account.invoice,date_invoice:0
|
||||
msgid "Keep empty to use the current date"
|
||||
msgstr ""
|
||||
msgstr "Оставьте пустым для текущей даты"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.overdue:0
|
||||
|
@ -3909,7 +3909,7 @@ msgstr "."
|
|||
#. module: account
|
||||
#: field:account.analytic.account,quantity_max:0
|
||||
msgid "Maximum Quantity"
|
||||
msgstr ""
|
||||
msgstr "Максимальное количество"
|
||||
|
||||
#. module: account
|
||||
#: field:account.period,name:0
|
||||
|
@ -3932,7 +3932,7 @@ msgstr "Группы"
|
|||
#. module: account
|
||||
#: rml:account.analytic.account.quantity_cost_ledger:0
|
||||
msgid "Code/Date"
|
||||
msgstr ""
|
||||
msgstr "Код/Дата"
|
||||
|
||||
#. module: account
|
||||
#: field:account.account,active:0
|
||||
|
@ -3953,7 +3953,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: view:account.chart.template:0
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
msgstr "Параметры"
|
||||
|
||||
#. module: account
|
||||
#: view:res.partner:0
|
||||
|
@ -3973,7 +3973,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: wizard_field:account.vat.declaration,init,based_on:0
|
||||
msgid "Base on"
|
||||
msgstr ""
|
||||
msgstr "Основан на"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.move,type:0
|
||||
|
@ -4365,7 +4365,7 @@ msgstr ""
|
|||
#: field:account.config.wizard,date2:0
|
||||
#: field:account.fiscalyear,date_stop:0
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
msgstr "Дата окончания"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.wizard,name:account.wizard_open_closed_fiscalyear
|
||||
|
@ -4381,7 +4381,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:account.payment.term.line,days2:0
|
||||
msgid "Day of the Month"
|
||||
msgstr ""
|
||||
msgstr "День месяца"
|
||||
|
||||
#. module: account
|
||||
#: field:account.analytic.journal,line_ids:0
|
||||
|
@ -4542,7 +4542,7 @@ msgstr "Разрегить сверку"
|
|||
#: selection:account.partner.balance.report,init,state:0
|
||||
#: selection:account.third_party_ledger.report,init,state:0
|
||||
msgid "By Date"
|
||||
msgstr ""
|
||||
msgstr "По дате"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_invoice_tree4
|
||||
|
@ -4558,7 +4558,7 @@ msgstr "Дата сгенерированных проводок"
|
|||
#. module: account
|
||||
#: wizard_button:account.invoice.refund,init,modify_invoice:0
|
||||
msgid "Modify Invoice"
|
||||
msgstr ""
|
||||
msgstr "Изменить счет"
|
||||
|
||||
#. module: account
|
||||
#: view:res.partner:0
|
||||
|
@ -4568,7 +4568,7 @@ msgstr "Настройки бухгалтерского учета для кон
|
|||
#. module: account
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Analytic Account Statistics"
|
||||
msgstr ""
|
||||
msgstr "Статистика счета аналитики"
|
||||
|
||||
#. module: account
|
||||
#: view:wizard.multi.charts.accounts:0
|
||||
|
@ -4598,12 +4598,12 @@ msgstr ""
|
|||
#. module: account
|
||||
#: wizard_field:account.aged.trial.balance,init,result_selection:0
|
||||
msgid "Filter on Partners"
|
||||
msgstr ""
|
||||
msgstr "Фильтр по партнерам"
|
||||
|
||||
#. module: account
|
||||
#: field:account.tax,price_include:0
|
||||
msgid "Tax Included in Price"
|
||||
msgstr ""
|
||||
msgstr "Налог включен в цену"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_account_analytic_journal_tree2
|
||||
|
@ -4684,7 +4684,7 @@ msgstr "Учетные годы"
|
|||
#. module: account
|
||||
#: model:process.node,note:account.process_node_importinvoice0
|
||||
msgid "Import from invoices or payments"
|
||||
msgstr ""
|
||||
msgstr "Импорт из счетов или платежей"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.wizard,name:account.wizard_reconcile_select
|
||||
|
@ -4741,7 +4741,7 @@ msgstr "Адрес выставления счета"
|
|||
#. module: account
|
||||
#: rml:account.analytic.account.analytic.check:0
|
||||
msgid "General Credit"
|
||||
msgstr ""
|
||||
msgstr "Общий кредит"
|
||||
|
||||
#. module: account
|
||||
#: help:account.journal,centralisation:0
|
||||
|
@ -4754,7 +4754,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: selection:account.invoice,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
msgstr "Отменено"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree
|
||||
|
@ -4765,7 +4765,7 @@ msgstr "Черновые выписки"
|
|||
#. module: account
|
||||
#: wizard_field:populate_statement_from_inv,init,date:0
|
||||
msgid "Date payment"
|
||||
msgstr ""
|
||||
msgstr "Дата оплаты"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.journal.period.print:0
|
||||
|
@ -4782,7 +4782,7 @@ msgstr "Расходы и доходы по журналам (текущий м
|
|||
#: selection:account.partner.balance.report,init,result_selection:0
|
||||
#: selection:account.third_party_ledger.report,init,result_selection:0
|
||||
msgid "Receivable Accounts"
|
||||
msgstr ""
|
||||
msgstr "Счета к получению"
|
||||
|
||||
#. module: account
|
||||
#: wizard_button:account.move.line.unreconcile.select,init,open:0
|
||||
|
@ -4838,7 +4838,7 @@ msgstr "НДС:"
|
|||
#: rml:account.general.journal:0
|
||||
#: rml:account.invoice:0
|
||||
msgid "Total:"
|
||||
msgstr ""
|
||||
msgstr "Всего:"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_account_analytic_journal
|
||||
|
@ -4893,7 +4893,7 @@ msgstr ""
|
|||
#: field:account.bank.statement.reconcile,total_amount:0
|
||||
#: field:account.bank.statement.reconcile,total_second_amount:0
|
||||
msgid "Payment amount"
|
||||
msgstr ""
|
||||
msgstr "Сумма оплаты"
|
||||
|
||||
#. module: account
|
||||
#: view:account.analytic.account:0
|
||||
|
@ -4940,7 +4940,7 @@ msgstr "Все месяцы"
|
|||
#. module: account
|
||||
#: wizard_field:account.invoice.refund,init,date:0
|
||||
msgid "Operation date"
|
||||
msgstr ""
|
||||
msgstr "Дата операции"
|
||||
|
||||
#. module: account
|
||||
#: field:account.invoice,invoice_line:0
|
||||
|
@ -4950,7 +4950,7 @@ msgstr "Позиции счета"
|
|||
#. module: account
|
||||
#: field:account.period,date_start:0
|
||||
msgid "Start of Period"
|
||||
msgstr ""
|
||||
msgstr "Начало периода"
|
||||
|
||||
#. module: account
|
||||
#: wizard_field:account.fiscalyear.close,init,report_name:0
|
||||
|
@ -5008,12 +5008,12 @@ msgstr ""
|
|||
#. module: account
|
||||
#: rml:account.account.balance:0
|
||||
msgid "Account Balance -"
|
||||
msgstr ""
|
||||
msgstr "Баланс по счету -"
|
||||
|
||||
#. module: account
|
||||
#: field:account.journal,group_invoice_lines:0
|
||||
msgid "Group invoice lines"
|
||||
msgstr ""
|
||||
msgstr "Группировать позиции счета"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.ui.menu,name:account.menu_finance_configuration
|
||||
|
@ -5058,7 +5058,7 @@ msgstr ""
|
|||
#: wizard_view:account.partner.balance.report,init:0
|
||||
#: wizard_view:account.third_party_ledger.report,init:0
|
||||
msgid "Select Date-Period"
|
||||
msgstr ""
|
||||
msgstr "Выбор даты-периода"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.analytic.account.inverted.balance:0
|
||||
|
@ -5069,7 +5069,7 @@ msgstr ""
|
|||
#: model:process.node,name:account.process_node_paidinvoice0
|
||||
#: model:process.node,name:account.process_node_supplierpaidinvoice0
|
||||
msgid "Paid invoice"
|
||||
msgstr ""
|
||||
msgstr "Оплаченный счет"
|
||||
|
||||
#. module: account
|
||||
#: view:account.tax:0
|
||||
|
@ -5099,7 +5099,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: model:ir.actions.wizard,name:account.wizard_populate_statement_from_inv
|
||||
msgid "Import invoices"
|
||||
msgstr ""
|
||||
msgstr "Импорт счетов"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:account.move.line.unreconcile,init:0
|
||||
|
@ -5143,7 +5143,7 @@ msgstr "Периоды подписки"
|
|||
#. module: account
|
||||
#: model:process.node,name:account.process_node_manually0
|
||||
msgid "Manually"
|
||||
msgstr ""
|
||||
msgstr "Вручную"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice:0
|
||||
|
@ -5162,7 +5162,7 @@ msgstr "Счета"
|
|||
#: selection:account.partner.balance.report,init,result_selection:0
|
||||
#: selection:account.third_party_ledger.report,init,result_selection:0
|
||||
msgid "Payable Accounts"
|
||||
msgstr ""
|
||||
msgstr "Кредиторская задолженность"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice.line:0
|
||||
|
@ -5183,12 +5183,12 @@ msgstr "Полный платеж"
|
|||
#. module: account
|
||||
#: selection:account.move,type:0
|
||||
msgid "Journal Purchase"
|
||||
msgstr ""
|
||||
msgstr "Журнал покупок"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.move,type:0
|
||||
msgid "Cash Receipt"
|
||||
msgstr ""
|
||||
msgstr "Денежное поступление"
|
||||
|
||||
#. module: account
|
||||
#: field:account.fiscal.position.tax,tax_dest_id:0
|
||||
|
@ -5254,12 +5254,12 @@ msgstr ""
|
|||
#: wizard_view:account.partner.balance.report,init:0
|
||||
#: wizard_view:account.third_party_ledger.report,init:0
|
||||
msgid "Date Filter"
|
||||
msgstr ""
|
||||
msgstr "Фильтр дат"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:populate_statement_from_inv,init:0
|
||||
msgid "Choose Journal and Payment Date"
|
||||
msgstr ""
|
||||
msgstr "Выбрать журнал и дату платежа"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.analytic.account,state:0
|
||||
|
@ -5288,7 +5288,7 @@ msgstr "Невыплаченные возвраты клиентам"
|
|||
#. module: account
|
||||
#: help:account.invoice,residual:0
|
||||
msgid "Remaining amount due."
|
||||
msgstr ""
|
||||
msgstr "Оставшиеся суммы"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:account.period.close,init:0
|
||||
|
@ -5304,7 +5304,7 @@ msgstr "Проформа"
|
|||
#. module: account
|
||||
#: field:account.move.reconcile,line_partial_ids:0
|
||||
msgid "Partial Entry lines"
|
||||
msgstr ""
|
||||
msgstr "Частичная проводка"
|
||||
|
||||
#. module: account
|
||||
#: help:account.move.line,statement_id:0
|
||||
|
@ -5319,7 +5319,7 @@ msgstr "Отчетный год"
|
|||
#. module: account
|
||||
#: wizard_button:account.analytic.line,init,open:0
|
||||
msgid "Open Entries"
|
||||
msgstr ""
|
||||
msgstr "Открытые проводки"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.analytic.account,type:0
|
||||
|
@ -5344,7 +5344,7 @@ msgstr ""
|
|||
#: rml:account.third_party_ledger_other:0
|
||||
#: rml:account.vat.declaration:0
|
||||
msgid "Page"
|
||||
msgstr ""
|
||||
msgstr "Страница"
|
||||
|
||||
#. module: account
|
||||
#: view:account.move:0
|
||||
|
@ -5377,7 +5377,7 @@ msgstr "Сверенная сумма"
|
|||
#. module: account
|
||||
#: selection:account.account,currency_mode:0
|
||||
msgid "At Date"
|
||||
msgstr ""
|
||||
msgstr "На дату"
|
||||
|
||||
#. module: account
|
||||
#: help:account.move.line,tax_amount:0
|
||||
|
@ -5419,7 +5419,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:account.subscription,period_total:0
|
||||
msgid "Number of Periods"
|
||||
msgstr ""
|
||||
msgstr "Количество периодов"
|
||||
|
||||
#. module: account
|
||||
#: wizard_field:account.analytic.account.analytic.check.report,init,date2:0
|
||||
|
@ -5488,7 +5488,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:wizard.multi.charts.accounts,bank_accounts_id:0
|
||||
msgid "Bank Accounts"
|
||||
msgstr ""
|
||||
msgstr "Банковские счета"
|
||||
|
||||
#. module: account
|
||||
#: constraint:account.period:0
|
||||
|
@ -5500,7 +5500,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: help:account.journal,invoice_sequence_id:0
|
||||
msgid "The sequence used for invoice numbers in this journal."
|
||||
msgstr ""
|
||||
msgstr "Последовательность используемая для нумерации счетов в этом журнале"
|
||||
|
||||
#. module: account
|
||||
#: view:account.account:0
|
||||
|
@ -5549,7 +5549,7 @@ msgstr "Список счетов"
|
|||
#: view:product.product:0
|
||||
#: view:product.template:0
|
||||
msgid "Sales Properties"
|
||||
msgstr ""
|
||||
msgstr "Свойства продаж"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.general.journal:0
|
||||
|
@ -5565,12 +5565,12 @@ msgstr "Книга расходов (только количество)"
|
|||
#. module: account
|
||||
#: wizard_view:account.move.validate,init:0
|
||||
msgid "Validate Account Entries"
|
||||
msgstr ""
|
||||
msgstr "Утвердить проводки"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.print.journal.report,init,sort_selection:0
|
||||
msgid "Reference Number"
|
||||
msgstr ""
|
||||
msgstr "Ссылка"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.overdue:0
|
||||
|
@ -5586,7 +5586,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_account_analytic_journal_open_form
|
||||
msgid "Entries of Open Analytic Journals"
|
||||
msgstr ""
|
||||
msgstr "Проводки открытых журналов аналитики"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice.tax:0
|
||||
|
@ -5601,7 +5601,7 @@ msgstr "Текущая дата"
|
|||
#. module: account
|
||||
#: selection:account.move,type:0
|
||||
msgid "Journal Sale"
|
||||
msgstr ""
|
||||
msgstr "Журнал продаж"
|
||||
|
||||
#. module: account
|
||||
#: wizard_field:account.fiscalyear.close,init,fy_id:0
|
||||
|
@ -5624,12 +5624,12 @@ msgstr "Начало периода"
|
|||
#. module: account
|
||||
#: model:ir.ui.menu,name:account.account_template_folder
|
||||
msgid "Templates"
|
||||
msgstr ""
|
||||
msgstr "Шаблоны"
|
||||
|
||||
#. module: account
|
||||
#: wizard_button:account.vat.declaration,init,report:0
|
||||
msgid "Print VAT Decl."
|
||||
msgstr ""
|
||||
msgstr "Печать декл. НДС"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.report.xml,name:account.account_intracom
|
||||
|
@ -5682,7 +5682,7 @@ msgstr "Шаблоны для плана счетов"
|
|||
#. module: account
|
||||
#: view:account.config.wizard:0
|
||||
msgid "Account Configure"
|
||||
msgstr ""
|
||||
msgstr "Настройка счета"
|
||||
|
||||
#. module: account
|
||||
#: help:res.partner,property_account_payable:0
|
||||
|
|
|
@ -28,8 +28,8 @@ from osv import osv
|
|||
class account_analytic_journal(osv.osv):
|
||||
_name = 'account.analytic.journal'
|
||||
_columns = {
|
||||
'name' : fields.char('Journal name', size=64, required=True),
|
||||
'code' : fields.char('Journal code', size=8),
|
||||
'name' : fields.char('Journal Name', size=64, required=True),
|
||||
'code' : fields.char('Journal Code', size=8),
|
||||
'active' : fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the analytic journal without removing it."),
|
||||
'type': fields.selection([('sale','Sale'), ('purchase','Purchase'), ('cash','Cash'), ('general','General'), ('situation','Situation')], 'Type', size=32, required=True, help="Gives the type of the analytic journal. When it needs for a document (eg: an invoice) to create analytic entries, OpenERP will look for a matching journal of the same type."),
|
||||
'line_ids' : fields.one2many('account.analytic.line', 'journal_id', 'Lines'),
|
||||
|
|
|
@ -172,19 +172,16 @@
|
|||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="top" string="Analytic Entries">
|
||||
<field name="date" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)"/>
|
||||
<field name="date"/>
|
||||
<field name="ref" invisible="context.get('to_invoice', False)"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total quantity"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
|
||||
<field domain="[('type','=','normal')]" name="account_id" groups="base.group_extended"/>
|
||||
<field invisible="True" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)"/>
|
||||
<field name="amount" sum="Total amount"/>
|
||||
<field name="general_account_id"/>
|
||||
<field name="ref"/>
|
||||
<field name="currency_id" />
|
||||
<field name="amount_currency" />
|
||||
<field name="company_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" groups="base.group_multi_company"/>
|
||||
<field name="journal_id" invisible="context.get('to_invoice', False)"/>
|
||||
<field name="amount" sum="Total" invisible="context.get('to_invoice', False)"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)" invisible="not context.get('to_invoice', False)"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total Quantity" invisible="not context.get('to_invoice', False)"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" invisible="not context.get('to_invoice', False)"/>
|
||||
<field domain="[('type','=','normal')]" name="account_id"/>
|
||||
<field name="general_account_id" invisible="context.get('to_invoice', False)"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -195,22 +192,24 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Search Analytic Lines">
|
||||
<group col='6' colspan='4'>
|
||||
<filter string="Sales" domain="[('journal_id.type','=','sale')]" icon="terp-sale" help="Analytic Journal Items related to a sale journal."/>
|
||||
<filter string="Purchases" domain="[('journal_id.type','=','purchase')]" icon="terp-purchase" help="Analytic Journal Items related to a purchase journal."/>
|
||||
<filter name="sales" string="Sales" domain="[('journal_id.type','=','sale')]" icon="terp-sale" help="Analytic Journal Items related to a sale journal."/>
|
||||
<filter name="purchases" string="Purchases" domain="[('journal_id.type','=','purchase')]" icon="terp-purchase" help="Analytic Journal Items related to a purchase journal."/>
|
||||
<filter name="others" string="Others" domain="[('journal_id.type','in',('cash','general','situation')]" icon="terp-folder-orange"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-today" string="Overdue Accounts" domain="[('account_id.date','<',time.strftime('%%Y-%%m-%%d'))]" help="Analytic Journal Items related to accounts having a past deadline."/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date" select="1"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="account_id" select="1"/>
|
||||
<field name="user_id" widget="selection"/>
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="account_id"/>
|
||||
<field name="user_id">
|
||||
<filter string="My Entries" domain="[('user_id','=',uid)]" icon="terp-personal"/>
|
||||
</field>
|
||||
</group>
|
||||
<newline/>
|
||||
<group string="Group By..." expand="0">
|
||||
<filter string="Analytic Account" context="{'group_by':'account_id'}" groups="base.group_extended" icon="terp-folder-blue"/>
|
||||
<filter string="Analytic Journal" context="{'group_by':'journal_id'}" icon="terp-folder-orange"/>
|
||||
<filter string="Account" context="{'group_by':'account_id'}" groups="base.group_extended" icon="terp-folder-blue"/>
|
||||
<filter string="Journal" context="{'group_by':'journal_id'}" icon="terp-folder-orange"/>
|
||||
<filter string="User" context="{'group_by':'user_id'}" icon="terp-personal"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="General Account" context="{'group_by':'general_account_id'}" icon="terp-folder-green"/>
|
||||
<filter string="Fin.Account" context="{'group_by':'general_account_id'}" icon="terp-folder-green"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Product" context="{'group_by':'product_id'}" icon="terp-accessories-archiver"/>
|
||||
</group>
|
||||
|
|
|
@ -232,10 +232,10 @@
|
|||
<para style="terp_default_Right_9">[[ formatLang(l.price_unit) ]][[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.discount) ]] </para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.discount, digits=get_digits(dp='Account')) ]] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.price_subtotal) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.price_subtotal, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -294,7 +294,7 @@
|
|||
<para style="terp_default_9">Taxes:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -338,7 +338,7 @@
|
|||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount) ]] [[ o.currency_id.symbol ]]</para>
|
||||
|
@ -373,4 +373,4 @@
|
|||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
|
|
@ -21,12 +21,10 @@
|
|||
|
||||
from report import report_sxw
|
||||
import xml.dom.minidom
|
||||
import os, time
|
||||
import time
|
||||
import osv
|
||||
import re
|
||||
import tools
|
||||
import pooler
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
|
|
|
@ -23,6 +23,8 @@ from osv import osv, fields
|
|||
from osv.orm import intersect
|
||||
import tools.sql
|
||||
from tools.translate import _
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class account_analytic_account(osv.osv):
|
||||
_name = "account.analytic.account"
|
||||
|
@ -66,6 +68,8 @@ class account_analytic_account(osv.osv):
|
|||
and invoice_id is not null \
|
||||
GROUP BY account_analytic_line.account_id;", (parent_ids,))
|
||||
for account_id, sum in cr.fetchall():
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = sum
|
||||
for account in accounts:
|
||||
for child in account.child_ids:
|
||||
|
@ -102,6 +106,8 @@ class account_analytic_account(osv.osv):
|
|||
and account_analytic_journal.type in ('purchase','general') \
|
||||
GROUP BY account_analytic_account.id;""", (parent_ids,))
|
||||
for account_id, sum in cr.fetchall():
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = round(sum, dp)
|
||||
|
||||
for account in accounts:
|
||||
|
@ -142,6 +148,8 @@ class account_analytic_account(osv.osv):
|
|||
and invoice_id is null \
|
||||
GROUP BY account_analytic_line.account_id" ,(parent_ids,))
|
||||
for account_id, lwd in cr.fetchall():
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = lwd
|
||||
for account in accounts:
|
||||
for child in account.child_ids:
|
||||
|
@ -161,6 +169,8 @@ class account_analytic_account(osv.osv):
|
|||
AND to_invoice IS NOT NULL \
|
||||
GROUP BY account_analytic_line.account_id;",(parent_ids,))
|
||||
for account_id, sua in cr.fetchall():
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = round(sua, dp)
|
||||
for account in accounts:
|
||||
for child in account.child_ids:
|
||||
|
@ -181,10 +191,14 @@ class account_analytic_account(osv.osv):
|
|||
GROUP BY account_analytic_line.account_id",(parent_ids,))
|
||||
ff = cr.fetchall()
|
||||
for account_id, hq in ff:
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = round(hq, dp)
|
||||
for account in accounts:
|
||||
for child in account.child_ids:
|
||||
if account.id != child.id:
|
||||
if account.id not in res:
|
||||
res[account.id] = {f: 0.0}
|
||||
res[account.id][f] += res.get(child.id, {}).get(f, 0.0)
|
||||
for id in ids:
|
||||
res[id][f] = round(res[id][f], dp)
|
||||
|
@ -223,6 +237,8 @@ class account_analytic_account(osv.osv):
|
|||
res2.setdefault(account.id, 0.0)
|
||||
for child in account.child_ids:
|
||||
if account.id != child.id:
|
||||
if account.id not in res:
|
||||
res[account.id] = {f: 0.0}
|
||||
res[account.id][f] += res.get(child.id, {}).get(f, 0.0)
|
||||
res[account.id][f] += res2.get(child.id, 0.0)
|
||||
|
||||
|
@ -337,22 +353,47 @@ class account_analytic_account(osv.osv):
|
|||
return res
|
||||
|
||||
_columns ={
|
||||
'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced Amount', help="Total customer invoiced amount for this account."),
|
||||
'total_cost': fields.function(_total_cost_calc, method=True, type='float', string='Total Costs', help="Total of costs for this account. It includes real costs (from invoices) and indirect costs, like time spent on timesheets."),
|
||||
'ca_to_invoice': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Amount', help="If invoice from analytic account, the remaining amount you can invoice to the customer based on the total costs."),
|
||||
'ca_theorical': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Theorical Revenue', help="Based on the costs you had on the project, what would have been the revenue if all these costs have been invoiced at the normal sale price provided by the pricelist."),
|
||||
'hours_quantity': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Hours Tot', help="Number of hours you spent on the analytic account (from timesheet). It computes on all journal of type 'general'."),
|
||||
'last_invoice_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Last Invoice Date', help="Date of the last invoice created for this analytic account."),
|
||||
'last_worked_invoiced_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Invoiced Cost', help="If invoice from the costs, this is the date of the latest work or cost that have been invoiced."),
|
||||
'last_worked_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Cost/Work', help="Date of the latest work done on this account."),
|
||||
'hours_qtt_non_invoiced': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Hours', help="Number of hours (from journal of type 'general') that can be invoiced if you invoice based on analytic account."),
|
||||
'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, method=True, type='float', string='Invoiced Hours', help="Number of hours that can be invoiced plus those that already have been invoiced."),
|
||||
'remaining_hours': fields.function(_remaining_hours_calc, method=True, type='float', string='Remaining Hours', help="Computed using the formula: Maximum Quantity - Hours Tot."),
|
||||
'remaining_ca': fields.function(_remaining_ca_calc, method=True, type='float', string='Remaining Revenue', help="Computed using the formula: Max Invoice Price - Invoiced Amount."),
|
||||
'revenue_per_hour': fields.function(_revenue_per_hour_calc, method=True, type='float', string='Revenue per Hours (real)', help="Computed using the formula: Invoiced Amount / Hours Tot."),
|
||||
'real_margin': fields.function(_real_margin_calc, method=True, type='float', string='Real Margin', help="Computed using the formula: Invoiced Amount - Total Costs."),
|
||||
'theorical_margin': fields.function(_theorical_margin_calc, method=True, type='float', string='Theorical Margin', help="Computed using the formula: Theorial Revenue - Total Costs"),
|
||||
'real_margin_rate': fields.function(_real_margin_rate_calc, method=True, type='float', string='Real Margin Rate (%)', help="Computes using the formula: (Real Margin / Total Costs) * 100."),
|
||||
'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced Amount',
|
||||
help="Total customer invoiced amount for this account.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'total_cost': fields.function(_total_cost_calc, method=True, type='float', string='Total Costs',
|
||||
help="Total of costs for this account. It includes real costs (from invoices) and indirect costs, like time spent on timesheets.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'ca_to_invoice': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Amount',
|
||||
help="If invoice from analytic account, the remaining amount you can invoice to the customer based on the total costs.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'ca_theorical': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Theorical Revenue',
|
||||
help="Based on the costs you had on the project, what would have been the revenue if all these costs have been invoiced at the normal sale price provided by the pricelist.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'hours_quantity': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Hours Tot',
|
||||
help="Number of hours you spent on the analytic account (from timesheet). It computes on all journal of type 'general'."),
|
||||
'last_invoice_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Last Invoice Date',
|
||||
help="Date of the last invoice created for this analytic account."),
|
||||
'last_worked_invoiced_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Invoiced Cost',
|
||||
help="If invoice from the costs, this is the date of the latest work or cost that have been invoiced."),
|
||||
'last_worked_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Cost/Work',
|
||||
help="Date of the latest work done on this account."),
|
||||
'hours_qtt_non_invoiced': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Hours',
|
||||
help="Number of hours (from journal of type 'general') that can be invoiced if you invoice based on analytic account."),
|
||||
'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, method=True, type='float', string='Invoiced Hours',
|
||||
help="Number of hours that can be invoiced plus those that already have been invoiced."),
|
||||
'remaining_hours': fields.function(_remaining_hours_calc, method=True, type='float', string='Remaining Hours',
|
||||
help="Computed using the formula: Maximum Quantity - Hours Tot."),
|
||||
'remaining_ca': fields.function(_remaining_ca_calc, method=True, type='float', string='Remaining Revenue',
|
||||
help="Computed using the formula: Max Invoice Price - Invoiced Amount.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'revenue_per_hour': fields.function(_revenue_per_hour_calc, method=True, type='float', string='Revenue per Hours (real)',
|
||||
help="Computed using the formula: Invoiced Amount / Hours Tot.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'real_margin': fields.function(_real_margin_calc, method=True, type='float', string='Real Margin',
|
||||
help="Computed using the formula: Invoiced Amount - Total Costs.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'theorical_margin': fields.function(_theorical_margin_calc, method=True, type='float', string='Theorical Margin',
|
||||
help="Computed using the formula: Theorial Revenue - Total Costs",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'real_margin_rate': fields.function(_real_margin_rate_calc, method=True, type='float', string='Real Margin Rate (%)',
|
||||
help="Computes using the formula: (Real Margin / Total Costs) * 100.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'month_ids': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='many2many', relation='account_analytic_analysis.summary.month', string='Month'),
|
||||
'user_ids': fields.function(_analysis_all, method=True, multi='analytic_analysis', type="many2many", relation='account_analytic_analysis.summary.user', string='User'),
|
||||
}
|
||||
|
|
|
@ -343,7 +343,6 @@ class account_invoice(osv.osv):
|
|||
def _get_analytic_lines(self, cr, uid, id):
|
||||
inv = self.browse(cr, uid, [id])[0]
|
||||
cur_obj = self.pool.get('res.currency')
|
||||
|
||||
company_currency = inv.company_id.currency_id.id
|
||||
if inv.type in ('out_invoice', 'in_refund'):
|
||||
sign = 1
|
||||
|
@ -354,7 +353,7 @@ class account_invoice(osv.osv):
|
|||
acct_ins_obj = self.pool.get('account.analytic.plan.instance')
|
||||
|
||||
for il in iml:
|
||||
if il['analytics_id']:
|
||||
if il.get('analytics_id', False):
|
||||
|
||||
if inv.type in ('in_invoice', 'in_refund'):
|
||||
ref = inv.reference
|
||||
|
@ -363,7 +362,7 @@ class account_invoice(osv.osv):
|
|||
obj_move_line = acct_ins_obj.browse(cr, uid, il['analytics_id'])
|
||||
amount_calc = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, il['price'], context={'date': inv.date_invoice}) * sign
|
||||
qty = il['quantity']
|
||||
il['analytic_lines']=[]
|
||||
il['analytic_lines'] = []
|
||||
for line2 in obj_move_line.account_ids:
|
||||
amt = amount_calc * (line2.rate/100)
|
||||
qtty = qty* (line2.rate/100)
|
||||
|
@ -419,5 +418,4 @@ class sale_order_line(osv.osv):
|
|||
|
||||
sale_order_line()
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -130,19 +130,22 @@ class account_invoice_line(osv.osv):
|
|||
default['state'] = self.browse(cr, uid, id).state
|
||||
return super(account_invoice_line, self).copy_data(cr, uid, id, default, context)
|
||||
|
||||
def _fnct(self, cr, uid, id, name, args, context=None):
|
||||
def _fnct(self, cr, uid, ids, name, args, context=None):
|
||||
res = {}
|
||||
for m in self.browse(cr, uid, id):
|
||||
if m.state != 'article':
|
||||
if m.state == 'line':
|
||||
res[m.id] = '-----------------------------------------'
|
||||
elif m.state == 'break':
|
||||
res[m.id] = 'PAGE BREAK'
|
||||
|
||||
lines = self.browse(cr, uid, ids)
|
||||
account_ids = [line.account_id.id for line in lines]
|
||||
account_names = dict(self.pool.get('account.account').name_get(cr, uid, account_ids, context=context))
|
||||
for line in lines:
|
||||
if line.state != 'article':
|
||||
if line.state == 'line':
|
||||
res[line.id] = '-----------------------------------------'
|
||||
elif line.state == 'break':
|
||||
res[line.id] = 'PAGE BREAK'
|
||||
else:
|
||||
res[m.id] = ' '
|
||||
res[line.id] = ' '
|
||||
else:
|
||||
[(temp)] = self.pool.get('account.account').name_get(cr, uid, [m.account_id.id], context=context)
|
||||
res[m.id] = temp[1]
|
||||
res[line.id] = account_names.get(line.account_id.id, '')
|
||||
return res
|
||||
|
||||
_name = "account.invoice.line"
|
||||
|
@ -205,4 +208,4 @@ class account_invoice(osv.osv):
|
|||
|
||||
account_invoice()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -23,6 +23,7 @@ import time
|
|||
|
||||
from report import report_sxw
|
||||
|
||||
|
||||
class account_invoice_1(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(account_invoice_1, self).__init__(cr, uid, name, context=context)
|
||||
|
@ -33,112 +34,111 @@ class account_invoice_1(report_sxw.rml_parse):
|
|||
self.context = context
|
||||
self._node = None
|
||||
|
||||
def invoice_lines(self,invoice):
|
||||
result =[]
|
||||
sub_total={}
|
||||
info=[]
|
||||
invoice_list=[]
|
||||
res={}
|
||||
list_in_seq={}
|
||||
def invoice_lines(self, invoice):
|
||||
result = []
|
||||
sub_total = {}
|
||||
info = []
|
||||
invoice_list = []
|
||||
res = {}
|
||||
list_in_seq = {}
|
||||
ids = self.pool.get('account.invoice.line').search(self.cr, self.uid, [('invoice_id', '=', invoice.id)])
|
||||
ids.sort()
|
||||
for id in range(0,len(ids)):
|
||||
for id in range(0, len(ids)):
|
||||
info = self.pool.get('account.invoice.line').browse(self.cr, self.uid, ids[id], self.context.copy())
|
||||
list_in_seq[info]=info.sequence
|
||||
i=1
|
||||
j=0
|
||||
list_in_seq[info] = info.sequence
|
||||
i = 1
|
||||
j = 0
|
||||
final=sorted(list_in_seq.items(), lambda x, y: cmp(x[1], y[1]))
|
||||
invoice_list=[x[0] for x in final]
|
||||
sum_flag={}
|
||||
sum_flag[j]=-1
|
||||
invoice_list = [x[0] for x in final]
|
||||
sum_flag = {}
|
||||
sum_flag[j] = -1
|
||||
for entry in invoice_list:
|
||||
res={}
|
||||
if entry.state=='article':
|
||||
res = {}
|
||||
if entry.state == 'article':
|
||||
self.cr.execute('select tax_id from account_invoice_line_tax where invoice_line_id=%s', (entry.id,))
|
||||
tax_ids=self.cr.fetchall()
|
||||
if tax_ids==[]:
|
||||
res['tax_types']=''
|
||||
tax_ids = self.cr.fetchall()
|
||||
if tax_ids == []:
|
||||
res['tax_types'] = ''
|
||||
else:
|
||||
tax_names_dict={}
|
||||
for item in range(0,len(tax_ids)) :
|
||||
tax_names_dict = {}
|
||||
for item in range(0, len(tax_ids)):
|
||||
self.cr.execute('select name from account_tax where id=%s', (tax_ids[item][0],))
|
||||
type=self.cr.fetchone()
|
||||
tax_names_dict[item] =type[0]
|
||||
tax_names = ','.join([tax_names_dict[x] for x in range(0,len(tax_names_dict))])
|
||||
res['tax_types']=tax_names
|
||||
res['name']=entry.name
|
||||
res['quantity']="%.2f"%(entry.quantity)
|
||||
res['price_unit']="%.2f"%(entry.price_unit)
|
||||
res['discount']="%.2f"%(entry.discount)
|
||||
res['price_subtotal']="%.2f"%(entry.price_subtotal)
|
||||
sub_total[i]=entry.price_subtotal
|
||||
i=i+1
|
||||
res['note']=entry.note
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['type']=entry.state
|
||||
type = self.cr.fetchone()
|
||||
tax_names_dict[item] = type[0]
|
||||
tax_names = ','.join([tax_names_dict[x] for x in range(0, len(tax_names_dict))])
|
||||
res['tax_types'] = tax_names
|
||||
res['name'] = entry.name
|
||||
res['quantity'] = self.formatLang(entry.quantity, digits=self.get_digits(dp='Account'))
|
||||
res['price_unit'] = self.formatLang(entry.price_unit, digits=self.get_digits(dp='Account'))
|
||||
res['discount'] = self.formatLang(entry.discount, digits=self.get_digits(dp='Account'))
|
||||
res['price_subtotal'] = self.formatLang(entry.price_subtotal, digits=self.get_digits(dp='Account'))
|
||||
sub_total[i] = entry.price_subtotal
|
||||
i = i + 1
|
||||
res['note'] = entry.note
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
res['type'] = entry.state
|
||||
|
||||
if entry.uos_id.id==False:
|
||||
res['uos']=''
|
||||
if entry.uos_id.id == False:
|
||||
res['uos'] = ''
|
||||
else:
|
||||
uos_name = self.pool.get('product.uom').read(self.cr, self.uid, entry.uos_id.id, ['name'], self.context.copy())
|
||||
res['uos'] = uos_name['name']
|
||||
else:
|
||||
res['quantity'] = ''
|
||||
res['price_unit'] = ''
|
||||
res['discount'] = ''
|
||||
res['tax_types'] = ''
|
||||
res['type'] = entry.state
|
||||
res['note'] = entry.note
|
||||
res['uos'] = ''
|
||||
|
||||
res['quantity']=''
|
||||
res['price_unit']=''
|
||||
res['discount']=''
|
||||
res['tax_types']=''
|
||||
res['type']=entry.state
|
||||
res['note']=entry.note
|
||||
res['uos']=''
|
||||
|
||||
if entry.state=='subtotal':
|
||||
res['name']=entry.name
|
||||
sum=0
|
||||
sum_id=0
|
||||
if sum_flag[j]==-1:
|
||||
temp=1
|
||||
if entry.state == 'subtotal':
|
||||
res['name'] = entry.name
|
||||
sum = 0
|
||||
sum_id = 0
|
||||
if sum_flag[j] == -1:
|
||||
temp = 1
|
||||
else:
|
||||
temp=sum_flag[j]
|
||||
temp = sum_flag[j]
|
||||
|
||||
for sum_id in range(temp,len(sub_total)+1):
|
||||
sum+=sub_total[sum_id]
|
||||
sum_flag[j+1]= sum_id +1
|
||||
for sum_id in range(temp, len(sub_total)+1):
|
||||
sum += sub_total[sum_id]
|
||||
sum_flag[j+1] = sum_id +1
|
||||
|
||||
j=j+1
|
||||
res['price_subtotal']="%.2f"%(sum)
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['quantity']=''
|
||||
res['price_unit']=''
|
||||
res['discount']=''
|
||||
res['tax_types']=''
|
||||
res['uos']=''
|
||||
elif entry.state=='title':
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
elif entry.state=='text':
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
elif entry.state=='line':
|
||||
res['quantity']='_______________'
|
||||
res['price_unit']='______________'
|
||||
res['discount']='____________'
|
||||
res['tax_types']='____________________'
|
||||
res['uos']='_____'
|
||||
res['name']='_______________________________________________'
|
||||
res['price_subtotal']='____________'
|
||||
res['currency']='____'
|
||||
elif entry.state=='break':
|
||||
res['type']=entry.state
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
j = j + 1
|
||||
res['price_subtotal'] = "%.2f" % (sum)
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
res['quantity'] = ''
|
||||
res['price_unit'] = ''
|
||||
res['discount'] = ''
|
||||
res['tax_types'] = ''
|
||||
res['uos'] = ''
|
||||
elif entry.state == 'title':
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
elif entry.state == 'text':
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
elif entry.state == 'line':
|
||||
res['quantity'] = '_______________'
|
||||
res['price_unit'] = '______________'
|
||||
res['discount'] = '____________'
|
||||
res['tax_types'] = '____________________'
|
||||
res['uos'] = '_____'
|
||||
res['name'] = '_______________________________________________'
|
||||
res['price_subtotal'] = '____________'
|
||||
res['currency'] = '____'
|
||||
elif entry.state == 'break':
|
||||
res['type'] = entry.state
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
else:
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
|
||||
result.append(res)
|
||||
return result
|
||||
|
|
|
@ -376,7 +376,7 @@
|
|||
<para style="terp_default_9">Net Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -391,7 +391,7 @@
|
|||
<para style="terp_default_9">Taxes:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -406,7 +406,7 @@
|
|||
<para style="terp_default_Bold_9">Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -445,10 +445,10 @@
|
|||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">
|
||||
|
@ -485,4 +485,4 @@
|
|||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
|
|
@ -24,6 +24,7 @@ import time
|
|||
from report import report_sxw
|
||||
import pooler
|
||||
|
||||
|
||||
class account_invoice_with_message(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(account_invoice_with_message, self).__init__(cr, uid, name, context=context)
|
||||
|
@ -40,115 +41,113 @@ class account_invoice_with_message(report_sxw.rml_parse):
|
|||
msg = account_msg_data.msg
|
||||
return msg
|
||||
|
||||
|
||||
def invoice_lines(self,invoice):
|
||||
result =[]
|
||||
sub_total={}
|
||||
info=[]
|
||||
invoice_list=[]
|
||||
res={}
|
||||
list_in_seq={}
|
||||
def invoice_lines(self, invoice):
|
||||
result = []
|
||||
sub_total = {}
|
||||
info = []
|
||||
invoice_list = []
|
||||
res = {}
|
||||
list_in_seq = {}
|
||||
ids = self.pool.get('account.invoice.line').search(self.cr, self.uid, [('invoice_id', '=', invoice.id)])
|
||||
ids.sort()
|
||||
for id in range(0,len(ids)):
|
||||
info = self.pool.get('account.invoice.line').browse(self.cr, self.uid,ids[id], self.context.copy())
|
||||
list_in_seq[info]=info.sequence
|
||||
i=1
|
||||
j=0
|
||||
final=sorted(list_in_seq.items(), lambda x, y: cmp(x[1], y[1]))
|
||||
invoice_list=[x[0] for x in final]
|
||||
sum_flag={}
|
||||
sum_flag[j]=-1
|
||||
for id in range(0, len(ids)):
|
||||
info = self.pool.get('account.invoice.line').browse(self.cr, self.uid, ids[id], self.context.copy())
|
||||
list_in_seq[info] = info.sequence
|
||||
i = 1
|
||||
j = 0
|
||||
final = sorted(list_in_seq.items(), lambda x, y: cmp(x[1], y[1]))
|
||||
invoice_list = [x[0] for x in final]
|
||||
sum_flag = {}
|
||||
sum_flag[j] = -1
|
||||
for entry in invoice_list:
|
||||
res={}
|
||||
res = {}
|
||||
|
||||
if entry.state=='article':
|
||||
if entry.state == 'article':
|
||||
self.cr.execute('select tax_id from account_invoice_line_tax where invoice_line_id=%s', (entry.id,))
|
||||
tax_ids=self.cr.fetchall()
|
||||
tax_ids = self.cr.fetchall()
|
||||
|
||||
if tax_ids==[]:
|
||||
res['tax_types']=''
|
||||
if tax_ids == []:
|
||||
res['tax_types'] = ''
|
||||
else:
|
||||
tax_names_dict={}
|
||||
for item in range(0,len(tax_ids)) :
|
||||
tax_names_dict = {}
|
||||
for item in range(0, len(tax_ids)):
|
||||
self.cr.execute('select name from account_tax where id=%s', (tax_ids[item][0],))
|
||||
type=self.cr.fetchone()
|
||||
tax_names_dict[item] =type[0]
|
||||
tax_names = ','.join([tax_names_dict[x] for x in range(0,len(tax_names_dict))])
|
||||
res['tax_types']=tax_names
|
||||
res['name']=entry.name
|
||||
res['quantity']="%.2f"%(entry.quantity)
|
||||
res['price_unit']="%.2f"%(entry.price_unit)
|
||||
res['discount']="%.2f"%(entry.discount)
|
||||
res['price_subtotal']="%.2f"%(entry.price_subtotal)
|
||||
sub_total[i]=entry.price_subtotal
|
||||
i=i+1
|
||||
res['note']=entry.note
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['type']=entry.state
|
||||
type = self.cr.fetchone()
|
||||
tax_names_dict[item] = type[0]
|
||||
tax_names = ','.join([tax_names_dict[x] for x in range(0, len(tax_names_dict))])
|
||||
res['tax_types'] = tax_names
|
||||
res['name'] = entry.name
|
||||
res['quantity'] = self.formatLang(entry.quantity, digits=self.get_digits(dp='Account'))
|
||||
res['price_unit'] = self.formatLang(entry.price_unit, digits=self.get_digits(dp='Account'))
|
||||
res['discount'] = self.formatLang(entry.discount, digits=self.get_digits(dp='Account'))
|
||||
res['price_subtotal'] = self.formatLang(entry.price_subtotal, digits=self.get_digits(dp='Account'))
|
||||
sub_total[i] = entry.price_subtotal
|
||||
i = i + 1
|
||||
res['note'] = entry.note
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
res['type'] = entry.state
|
||||
|
||||
if entry.uos_id.id==False:
|
||||
res['uos']=''
|
||||
if entry.uos_id.id == False:
|
||||
res['uos'] = ''
|
||||
else:
|
||||
uos_name = self.pool.get('product.uom').read(self.cr, self.uid, entry.uos_id.id, ['name'], self.context.copy())
|
||||
res['uos']=uos_name['name']
|
||||
res['uos'] = uos_name['name']
|
||||
else:
|
||||
res['quantity'] = ''
|
||||
res['price_unit'] = ''
|
||||
res['discount'] = ''
|
||||
res['tax_types'] = ''
|
||||
res['type'] = entry.state
|
||||
res['note'] = entry.note
|
||||
res['uos'] = ''
|
||||
|
||||
res['quantity']=''
|
||||
res['price_unit']=''
|
||||
res['discount']=''
|
||||
res['tax_types']=''
|
||||
res['type']=entry.state
|
||||
res['note']=entry.note
|
||||
res['uos']=''
|
||||
|
||||
if entry.state=='subtotal':
|
||||
res['name']=entry.name
|
||||
sum=0
|
||||
sum_id=0
|
||||
if sum_flag[j]==-1:
|
||||
temp=1
|
||||
if entry.state == 'subtotal':
|
||||
res['name'] = entry.name
|
||||
sum = 0
|
||||
sum_id = 0
|
||||
if sum_flag[j] == -1:
|
||||
temp = 1
|
||||
else:
|
||||
temp=sum_flag[j]
|
||||
temp = sum_flag[j]
|
||||
|
||||
for sum_id in range(temp,len(sub_total)+1):
|
||||
sum+=sub_total[sum_id]
|
||||
sum_flag[j+1]= sum_id +1
|
||||
for sum_id in range(temp, len(sub_total)+1):
|
||||
sum += sub_total[sum_id]
|
||||
sum_flag[j+1] = sum_id +1
|
||||
|
||||
j=j+1
|
||||
res['price_subtotal']="%.2f"%(sum)
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['quantity']=''
|
||||
res['price_unit']=''
|
||||
res['discount']=''
|
||||
res['tax_types']=''
|
||||
res['uos']=''
|
||||
elif entry.state=='title':
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
elif entry.state=='text':
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
elif entry.state=='line':
|
||||
res['quantity']='_______________'
|
||||
res['price_unit']='______________'
|
||||
res['discount']='____________'
|
||||
res['tax_types']='____________________'
|
||||
res['uos']='_____'
|
||||
res['name']='_______________________________________________'
|
||||
res['price_subtotal']='____________'
|
||||
res['currency']='____'
|
||||
elif entry.state=='break':
|
||||
res['type']=entry.state
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
j = j + 1
|
||||
res['price_subtotal'] = "%.2f" % (sum)
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
res['quantity'] = ''
|
||||
res['price_unit'] = ''
|
||||
res['discount'] = ''
|
||||
res['tax_types'] = ''
|
||||
res['uos'] = ''
|
||||
elif entry.state == 'title':
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
elif entry.state == 'text':
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
elif entry.state == 'line':
|
||||
res['quantity'] = '_______________'
|
||||
res['price_unit'] = '______________'
|
||||
res['discount'] = '____________'
|
||||
res['tax_types'] = '____________________'
|
||||
res['uos'] = '_____'
|
||||
res['name'] = '_______________________________________________'
|
||||
res['price_subtotal'] = '____________'
|
||||
res['currency'] = '____'
|
||||
elif entry.state == 'break':
|
||||
res['type'] = entry.state
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
else:
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
|
||||
result.append(res)
|
||||
return result
|
||||
|
|
|
@ -380,7 +380,7 @@
|
|||
<para style="terp_default_9">Net Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -395,7 +395,7 @@
|
|||
<para style="terp_default_9">Taxes:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -410,7 +410,7 @@
|
|||
<para style="terp_default_Bold_9">Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -449,10 +449,10 @@
|
|||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">
|
||||
|
@ -500,4 +500,4 @@
|
|||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
<field name="acc_number">00987654321</field>
|
||||
<field name="partner_id" ref="base.res_partner_agrolait"></field>
|
||||
<field name="state">bank</field>
|
||||
<field name="bank" ref="base.res_bank_1"/>
|
||||
</record>
|
||||
<record id="payment_mode_1" model="payment.mode">
|
||||
<field name="name">Direct Payment</field>
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
partner_id: base.res_partner_9
|
||||
sequence: 0.0
|
||||
state: bank
|
||||
bank: base.res_bank_1
|
||||
|
||||
-
|
||||
I created a new Payment Mode
|
||||
|
|
|
@ -25,6 +25,7 @@ import operator
|
|||
from osv import fields, osv
|
||||
import decimal_precision as dp
|
||||
|
||||
|
||||
class account_analytic_account(osv.osv):
|
||||
_name = 'account.analytic.account'
|
||||
_description = 'Analytic Account'
|
||||
|
@ -272,7 +273,7 @@ class account_analytic_line(osv.osv):
|
|||
_columns = {
|
||||
'name' : fields.char('Description', size=256, required=True),
|
||||
'date' : fields.date('Date', required=True, select=1),
|
||||
'amount' : fields.float('Amount', required=True, help='Calculated by multiplying the quantity and the price given in the Product\'s cost price. Always expressed in the company main currency.'),
|
||||
'amount' : fields.float('Amount', required=True, help='Calculated by multiplying the quantity and the price given in the Product\'s cost price. Always expressed in the company main currency.', digits_compute=dp.get_precision('Account')),
|
||||
'unit_amount' : fields.float('Quantity', help='Specifies the amount of quantity to count.'),
|
||||
'account_id' : fields.many2one('account.analytic.account', 'Analytic Account', required=True, ondelete='cascade', select=True),
|
||||
'user_id' : fields.many2one('res.users', 'User'),
|
||||
|
|
|
@ -99,7 +99,7 @@ class hr_analytic_timesheet(osv.osv):
|
|||
(r.product_id.name, r.product_id.id,))
|
||||
# Compute based on pricetype
|
||||
amount_unit = self.on_change_unit_amount(cr, uid, ids,
|
||||
r.product_id.id, unit_amount, r.product_id.uom_id.id)['value']['amount']
|
||||
r.product_id.id, unit_amount, False, r.product_id.uom_id.id)['value']['amount']
|
||||
|
||||
amount = unit_amount * amount_unit
|
||||
res ['value']['amount']= - round(amount, 2)
|
||||
|
@ -134,7 +134,7 @@ class hr_analytic_timesheet(osv.osv):
|
|||
(r.product_id.name, r.product_id.id,))
|
||||
# Compute based on pricetype
|
||||
amount_unit = self.on_change_unit_amount(cr, uid, ids,
|
||||
r.product_id.id, unit_amount, r.product_id.uom_id.id)['value']['amount']
|
||||
r.product_id.id, unit_amount, False, r.product_id.uom_id.id)['value']['amount']
|
||||
|
||||
amount = unit_amount * amount_unit
|
||||
res ['value']['amount']= - round(amount, 2)
|
||||
|
|
|
@ -724,7 +724,7 @@ true, it will allow you to hide the event alarm information without removing it.
|
|||
if alarm_ids:
|
||||
alarm_obj.unlink(cr, uid, alarm_ids)
|
||||
cr.execute('Update %s set base_calendar_alarm_id=NULL, alarm_id=NULL\
|
||||
where id=%%d' % model_obj._table,(datas.id,))
|
||||
where id=%%s' % model_obj._table,(datas.id,))
|
||||
return True
|
||||
|
||||
res_alarm()
|
||||
|
|
|
@ -8,32 +8,32 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-19 12:50+0000\n"
|
||||
"PO-Revision-Date: 2010-09-16 12:31+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2010-10-03 20:01+0000\n"
|
||||
"Last-Translator: Wouter Schrijvers <Unknown>\n"
|
||||
"Language-Team: Dutch <nl@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: 2010-09-29 05:17+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-04 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,trigger_related:0
|
||||
#: selection:res.alarm,trigger_related:0
|
||||
msgid "The event starts"
|
||||
msgstr ""
|
||||
msgstr "De activiteit begint"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,freq:0
|
||||
#: selection:calendar.event,freq:0
|
||||
#: selection:calendar.todo,freq:0
|
||||
msgid "Hourly"
|
||||
msgstr ""
|
||||
msgstr "Ieder uur"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
msgid "Required to Join"
|
||||
msgstr ""
|
||||
msgstr "Deelname vereist"
|
||||
|
||||
#. module: base_calendar
|
||||
#: help:calendar.event,exdate:0
|
||||
|
@ -42,11 +42,13 @@ msgid ""
|
|||
"This property defines the list of date/time exceptions for a recurring "
|
||||
"calendar component."
|
||||
msgstr ""
|
||||
"Hiermee bepaalt u de datum/tijd-uitzonderingslijst voor een terugkerend "
|
||||
"kalender-item"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event.edit.all,name:0
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
msgstr "Titel"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,freq:0
|
||||
|
@ -55,50 +57,50 @@ msgstr ""
|
|||
#: selection:calendar.todo,freq:0
|
||||
#: selection:calendar.todo,rrule_type:0
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
msgstr "Maandelijks"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
msgid "Invited User"
|
||||
msgstr ""
|
||||
msgstr "Uitgenodigde gebruikers"
|
||||
|
||||
#. module: base_calendar
|
||||
#: model:ir.actions.act_window,name:base_calendar.action_res_alarm_view
|
||||
#: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_avail_alarm
|
||||
msgid "Alarms"
|
||||
msgstr ""
|
||||
msgstr "Herinneringen"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,week_list:0
|
||||
#: selection:calendar.event,week_list:0
|
||||
#: selection:calendar.todo,week_list:0
|
||||
msgid "Sunday"
|
||||
msgstr ""
|
||||
msgstr "zondag"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
#: field:calendar.attendee,role:0
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
msgstr "Functie"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
#: view:calendar.event:0
|
||||
msgid "Invitation details"
|
||||
msgstr ""
|
||||
msgstr "Details uitnodiging"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,byday:0
|
||||
#: selection:calendar.event,byday:0
|
||||
#: selection:calendar.todo,byday:0
|
||||
msgid "Fourth"
|
||||
msgstr ""
|
||||
msgstr "vierde"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event,show_as:0
|
||||
#: field:calendar.todo,show_as:0
|
||||
msgid "Show as"
|
||||
msgstr ""
|
||||
msgstr "Weergeven als"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base.calendar.set.exrule,day:0
|
||||
|
@ -108,52 +110,52 @@ msgstr ""
|
|||
#: field:calendar.todo,day:0
|
||||
#: selection:calendar.todo,select1:0
|
||||
msgid "Date of month"
|
||||
msgstr ""
|
||||
msgstr "Dag van de maand"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.event,class:0
|
||||
#: selection:calendar.todo,class:0
|
||||
msgid "Public"
|
||||
msgstr ""
|
||||
msgstr "Openbaar"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,trigger_interval:0
|
||||
#: selection:res.alarm,trigger_interval:0
|
||||
msgid "Hours"
|
||||
msgstr ""
|
||||
msgstr "Uren"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,month_list:0
|
||||
#: selection:calendar.event,month_list:0
|
||||
#: selection:calendar.todo,month_list:0
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
msgstr "maart"
|
||||
|
||||
#. module: base_calendar
|
||||
#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:0
|
||||
#, python-format
|
||||
msgid "Warning !"
|
||||
msgstr ""
|
||||
msgstr "Waarschuwing !"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,week_list:0
|
||||
#: selection:calendar.event,week_list:0
|
||||
#: selection:calendar.todo,week_list:0
|
||||
msgid "Friday"
|
||||
msgstr ""
|
||||
msgstr "vrijdag"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event,allday:0
|
||||
#: field:calendar.todo,allday:0
|
||||
msgid "All Day"
|
||||
msgstr ""
|
||||
msgstr "Hele dag"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base.calendar.set.exrule,select1:0
|
||||
#: field:calendar.event,select1:0
|
||||
#: field:calendar.todo,select1:0
|
||||
msgid "Option"
|
||||
msgstr ""
|
||||
msgstr "Optie"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.attendee,availability:0
|
||||
|
@ -161,12 +163,12 @@ msgstr ""
|
|||
#: selection:calendar.todo,show_as:0
|
||||
#: selection:res.users,availability:0
|
||||
msgid "Free"
|
||||
msgstr ""
|
||||
msgstr "Vrij"
|
||||
|
||||
#. module: base_calendar
|
||||
#: help:calendar.attendee,rsvp:0
|
||||
msgid "Indicats whether the favor of a reply is requested"
|
||||
msgstr ""
|
||||
msgstr "Geeft aan of een antwoordverzoek gevraagd wordt"
|
||||
|
||||
#. module: base_calendar
|
||||
#: model:ir.model,name:base_calendar.model_ir_attachment
|
||||
|
@ -176,32 +178,32 @@ msgstr ""
|
|||
#. module: base_calendar
|
||||
#: help:calendar.attendee,delegated_to:0
|
||||
msgid "The users that the original request was delegated to"
|
||||
msgstr ""
|
||||
msgstr "De gebruikers aan wie het oorspronkelijke verzoek toegewezen was"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
#: field:calendar.attendee,delegated_to:0
|
||||
msgid "Delegated To"
|
||||
msgstr ""
|
||||
msgstr "Toegewezen aan"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base.calendar.set.exrule,we:0
|
||||
#: field:calendar.event,we:0
|
||||
#: field:calendar.todo,we:0
|
||||
msgid "Wed"
|
||||
msgstr ""
|
||||
msgstr "woe"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.event:0
|
||||
msgid "Show time as"
|
||||
msgstr ""
|
||||
msgstr "Tijd weergeven als"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base.calendar.set.exrule,tu:0
|
||||
#: field:calendar.event,tu:0
|
||||
#: field:calendar.todo,tu:0
|
||||
msgid "Tue"
|
||||
msgstr ""
|
||||
msgstr "din"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,freq:0
|
||||
|
@ -210,43 +212,43 @@ msgstr ""
|
|||
#: selection:calendar.todo,freq:0
|
||||
#: selection:calendar.todo,rrule_type:0
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
msgstr "Jaarlijks"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,trigger_related:0
|
||||
#: selection:res.alarm,trigger_related:0
|
||||
msgid "The event ends"
|
||||
msgstr ""
|
||||
msgstr "De activiteit eindigt"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,byday:0
|
||||
#: selection:calendar.event,byday:0
|
||||
#: selection:calendar.todo,byday:0
|
||||
msgid "Last"
|
||||
msgstr ""
|
||||
msgstr "Laatste"
|
||||
|
||||
#. module: base_calendar
|
||||
#: help:calendar.attendee,state:0
|
||||
msgid "Status of the attendee's participation"
|
||||
msgstr ""
|
||||
msgstr "Deelnamestatus genodigde"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.attendee,cutype:0
|
||||
msgid "Room"
|
||||
msgstr ""
|
||||
msgstr "Zaal"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,trigger_interval:0
|
||||
#: selection:res.alarm,trigger_interval:0
|
||||
msgid "Days"
|
||||
msgstr ""
|
||||
msgstr "dagen"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,freq:0
|
||||
#: selection:calendar.event,freq:0
|
||||
#: selection:calendar.todo,freq:0
|
||||
msgid "No Repeat"
|
||||
msgstr ""
|
||||
msgstr "Niet terugkerend"
|
||||
|
||||
#. module: base_calendar
|
||||
#: code:addons/base_calendar/base_calendar.py:0
|
||||
|
@ -254,74 +256,74 @@ msgstr ""
|
|||
#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:0
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr ""
|
||||
msgstr "Fout!"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.attendee,role:0
|
||||
msgid "Chair Person"
|
||||
msgstr ""
|
||||
msgstr "Voorzitter"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,action:0
|
||||
msgid "Procedure"
|
||||
msgstr ""
|
||||
msgstr "Werkwijze"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.event:0
|
||||
msgid "Select data for Custom Rule"
|
||||
msgstr ""
|
||||
msgstr "Selecteer gegevens voor aangepaste regel"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.event,state:0
|
||||
#: selection:calendar.todo,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
msgstr "Geannuleerd"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,trigger_interval:0
|
||||
#: selection:res.alarm,trigger_interval:0
|
||||
msgid "Minutes"
|
||||
msgstr ""
|
||||
msgstr "Minuten"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,action:0
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
msgstr "Weergave"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.event.edit.all:0
|
||||
msgid "Edit all Occurrences"
|
||||
msgstr ""
|
||||
msgstr "Reeks bewerken"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
msgid "Invitation type"
|
||||
msgstr ""
|
||||
msgstr "Soort uitnodiging"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,freq:0
|
||||
#: selection:calendar.event,freq:0
|
||||
#: selection:calendar.todo,freq:0
|
||||
msgid "Secondly"
|
||||
msgstr ""
|
||||
msgstr "Per seconde"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.alarm,event_date:0
|
||||
#: field:calendar.attendee,event_date:0
|
||||
#: view:calendar.event:0
|
||||
msgid "Event Date"
|
||||
msgstr ""
|
||||
msgstr "Datum activiteit"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
#: view:calendar.event:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
msgstr "Groepeer op.."
|
||||
|
||||
#. module: base_calendar
|
||||
#: help:calendar.attendee,partner_id:0
|
||||
msgid "Partner related to contact"
|
||||
msgstr ""
|
||||
msgstr "Relatie gekoppeld aan contactpersoon"
|
||||
|
||||
#. module: base_calendar
|
||||
#: help:calendar.attendee,cutype:0
|
||||
|
@ -339,34 +341,34 @@ msgstr ""
|
|||
#: field:calendar.alarm,event_end_date:0
|
||||
#: field:calendar.attendee,event_end_date:0
|
||||
msgid "Event End Date"
|
||||
msgstr ""
|
||||
msgstr "Einddatum activiteit"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.attendee,role:0
|
||||
msgid "Optional Participation"
|
||||
msgstr ""
|
||||
msgstr "Deelname optioneel"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event,date_deadline:0
|
||||
#: field:calendar.todo,date_deadline:0
|
||||
msgid "Deadline"
|
||||
msgstr ""
|
||||
msgstr "Uiterste datum"
|
||||
|
||||
#. module: base_calendar
|
||||
#: code:addons/base_calendar/base_calendar.py:0
|
||||
#, python-format
|
||||
msgid "Warning!"
|
||||
msgstr ""
|
||||
msgstr "Waarschuwing!"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:base.calendar.set.exrule:0
|
||||
msgid "_Cancel"
|
||||
msgstr ""
|
||||
msgstr "_Annuleren"
|
||||
|
||||
#. module: base_calendar
|
||||
#: model:ir.module.module,shortdesc:base_calendar.module_meta_information
|
||||
msgid "Basic Calendar Functionality"
|
||||
msgstr ""
|
||||
msgstr "Basis kalender functionaliteit"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event,organizer:0
|
||||
|
@ -374,7 +376,7 @@ msgstr ""
|
|||
#: field:calendar.todo,organizer:0
|
||||
#: field:calendar.todo,organizer_id:0
|
||||
msgid "Organizer"
|
||||
msgstr ""
|
||||
msgstr "Organisator"
|
||||
|
||||
#. module: base_calendar
|
||||
#: code:addons/base_calendar/base_calendar.py:0
|
||||
|
@ -382,76 +384,76 @@ msgstr ""
|
|||
#: model:res.request.link,name:base_calendar.request_link_meeting
|
||||
#, python-format
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
msgstr "Activiteit"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,trigger_occurs:0
|
||||
#: selection:res.alarm,trigger_occurs:0
|
||||
msgid "Before"
|
||||
msgstr ""
|
||||
msgstr "Vóór"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.event:0
|
||||
#: selection:calendar.event,state:0
|
||||
#: selection:calendar.todo,state:0
|
||||
msgid "Confirmed"
|
||||
msgstr ""
|
||||
msgstr "Bevestigd"
|
||||
|
||||
#. module: base_calendar
|
||||
#: model:ir.actions.act_window,name:base_calendar.action_calendar_event_edit_all
|
||||
msgid "Edit all events"
|
||||
msgstr ""
|
||||
msgstr "Reeks bewerken"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.alarm,attendee_ids:0
|
||||
#: field:calendar.event,attendee_ids:0
|
||||
#: field:calendar.todo,attendee_ids:0
|
||||
msgid "Attendees"
|
||||
msgstr ""
|
||||
msgstr "Deelnemers"
|
||||
|
||||
#. module: base_calendar
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Ongeldige modelnaam in de actie-definiëring."
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.event:0
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
msgstr "Bevestigen"
|
||||
|
||||
#. module: base_calendar
|
||||
#: model:ir.model,name:base_calendar.model_calendar_todo
|
||||
msgid "Calendar Task"
|
||||
msgstr ""
|
||||
msgstr "Kalender-taak"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base.calendar.set.exrule,su:0
|
||||
#: field:calendar.event,su:0
|
||||
#: field:calendar.todo,su:0
|
||||
msgid "Sun"
|
||||
msgstr ""
|
||||
msgstr "zon"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.attendee,cutype:0
|
||||
msgid "Invite Type"
|
||||
msgstr ""
|
||||
msgstr "Type uitnodiging"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:res.alarm:0
|
||||
msgid "Reminder details"
|
||||
msgstr ""
|
||||
msgstr "Details herinnering"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.attendee,parent_ids:0
|
||||
msgid "Delegrated From"
|
||||
msgstr ""
|
||||
msgstr "Toegewezen door"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,select1:0
|
||||
#: selection:calendar.event,select1:0
|
||||
#: selection:calendar.todo,select1:0
|
||||
msgid "Day of month"
|
||||
msgstr ""
|
||||
msgstr "Dag van de maand"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.event:0
|
||||
|
@ -459,94 +461,94 @@ msgstr ""
|
|||
#: field:calendar.event.edit.all,location:0
|
||||
#: field:calendar.todo,location:0
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
msgstr "Plaats"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base_calendar.invite.attendee,send_mail:0
|
||||
msgid "Send mail?"
|
||||
msgstr ""
|
||||
msgstr "E-mail sturen?"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base_calendar.invite.attendee,email:0
|
||||
#: selection:calendar.alarm,action:0
|
||||
#: field:calendar.attendee,email:0
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
msgstr "E-mail"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
msgid "Event Detail"
|
||||
msgstr ""
|
||||
msgstr "Detail activiteit"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.alarm,state:0
|
||||
msgid "Run"
|
||||
msgstr ""
|
||||
msgstr "Uitvoeren"
|
||||
|
||||
#. module: base_calendar
|
||||
#: model:ir.model,name:base_calendar.model_calendar_alarm
|
||||
msgid "Event alarm information"
|
||||
msgstr ""
|
||||
msgstr "Informatie herinnering activiteit"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.event,class:0
|
||||
#: selection:calendar.todo,class:0
|
||||
msgid "Confidential"
|
||||
msgstr ""
|
||||
msgstr "Vertrouwelijk"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base.calendar.set.exrule,end_date:0
|
||||
#: field:calendar.event,end_date:0
|
||||
#: field:calendar.todo,end_date:0
|
||||
msgid "Repeat Until"
|
||||
msgstr ""
|
||||
msgstr "Herhaal tot"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.event:0
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "Zichtbaarheid"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.attendee,rsvp:0
|
||||
msgid "Required Reply?"
|
||||
msgstr ""
|
||||
msgstr "Antwoord vereist?"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event,base_calendar_url:0
|
||||
#: field:calendar.todo,base_calendar_url:0
|
||||
msgid "Caldav URL"
|
||||
msgstr ""
|
||||
msgstr "Caldav URL"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event,recurrent_uid:0
|
||||
#: field:calendar.todo,recurrent_uid:0
|
||||
msgid "Recurrent ID"
|
||||
msgstr ""
|
||||
msgstr "Terugkerend ID"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,month_list:0
|
||||
#: selection:calendar.event,month_list:0
|
||||
#: selection:calendar.todo,month_list:0
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
msgstr "juli"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
#: selection:calendar.attendee,state:0
|
||||
msgid "Accepted"
|
||||
msgstr ""
|
||||
msgstr "Geaccepteerd"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base.calendar.set.exrule,th:0
|
||||
#: field:calendar.event,th:0
|
||||
#: field:calendar.todo,th:0
|
||||
msgid "Thu"
|
||||
msgstr ""
|
||||
msgstr "don"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.attendee,child_ids:0
|
||||
msgid "Delegrated To"
|
||||
msgstr ""
|
||||
msgstr "Toegewezen aan"
|
||||
|
||||
#. module: base_calendar
|
||||
#: constraint:ir.cron:0
|
||||
|
@ -556,29 +558,29 @@ msgstr ""
|
|||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
msgid "Required Reply"
|
||||
msgstr ""
|
||||
msgstr "Antwoord vereist"
|
||||
|
||||
#. module: base_calendar
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Ongeldige XML, kan overzicht niet weergeven!"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.attendee,role:0
|
||||
msgid "Participation required"
|
||||
msgstr ""
|
||||
msgstr "Deelname vereist"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event,create_date:0
|
||||
#: field:calendar.todo,create_date:0
|
||||
msgid "Created"
|
||||
msgstr ""
|
||||
msgstr "Aangemaakt"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:calendar.event,class:0
|
||||
#: selection:calendar.todo,class:0
|
||||
msgid "Private"
|
||||
msgstr ""
|
||||
msgstr "Privé"
|
||||
|
||||
#. module: base_calendar
|
||||
#: selection:base.calendar.set.exrule,freq:0
|
||||
|
@ -587,43 +589,43 @@ msgstr ""
|
|||
#: selection:calendar.todo,freq:0
|
||||
#: selection:calendar.todo,rrule_type:0
|
||||
msgid "Daily"
|
||||
msgstr ""
|
||||
msgstr "Dagelijks"
|
||||
|
||||
#. module: base_calendar
|
||||
#: code:addons/base_calendar/base_calendar.py:0
|
||||
#, python-format
|
||||
msgid "Can not Duplicate"
|
||||
msgstr ""
|
||||
msgstr "Kopiëren niet mogelijk"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:calendar.event,class:0
|
||||
#: field:calendar.todo,class:0
|
||||
msgid "Mark as"
|
||||
msgstr ""
|
||||
msgstr "Markeren als"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
#: field:calendar.attendee,partner_address_id:0
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
msgstr "Contactpersoon"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:calendar.attendee:0
|
||||
#: view:calendar.event:0
|
||||
msgid "Delegate"
|
||||
msgstr ""
|
||||
msgstr "Toewijzen"
|
||||
|
||||
#. module: base_calendar
|
||||
#: field:base_calendar.invite.attendee,partner_id:0
|
||||
#: view:calendar.attendee:0
|
||||
#: field:calendar.attendee,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
msgstr "Partner"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:base.calendar.set.exrule:0
|
||||
msgid "Select data for ExRule"
|
||||
msgstr ""
|
||||
msgstr "Selecteer gegevens voor uitzondering regel"
|
||||
|
||||
#. module: base_calendar
|
||||
#: view:base_calendar.invite.attendee:0
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<record id="bank_iban" model="res.partner.bank.type">
|
||||
<field name="name">IBAN Account</field>
|
||||
<field name="code">iban</field>
|
||||
<field name="bank" ref="base.res_bank_1"/>
|
||||
</record>
|
||||
<record id="bank_iban_field" model="res.partner.bank.type.field">
|
||||
<field name="name">iban</field>
|
||||
|
|
|
@ -716,7 +716,7 @@ class basic_calendar_line(osv.osv):
|
|||
"""
|
||||
|
||||
cr.execute("SELECT COUNT(id) FROM basic_calendar_lines \
|
||||
WHERE name='%s' AND calendar_id=%s",
|
||||
WHERE name=%s AND calendar_id=%s",
|
||||
(vals.get('name'), vals.get('calendar_id')))
|
||||
res = cr.fetchone()
|
||||
if res:
|
||||
|
|
|
@ -8,46 +8,47 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-20 05:24+0000\n"
|
||||
"PO-Revision-Date: 2010-09-12 15:18+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2010-10-03 20:06+0000\n"
|
||||
"Last-Translator: Wouter Schrijvers <Unknown>\n"
|
||||
"Language-Team: Dutch <nl@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: 2010-09-29 05:17+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-04 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: field:decimal.precision,digits:0
|
||||
msgid "Digits"
|
||||
msgstr ""
|
||||
msgstr "Cijfers"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Ongeldige XML, kan overzicht niet weergeven!"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"De Objectnaam moet starten met x_ en mag geen speciale tekens bevatten!"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Ongeldige modelnaam in de actie-definiëring."
|
||||
|
||||
#. module: decimal_precision
|
||||
#: view:decimal.precision:0
|
||||
msgid "Decimal Precision"
|
||||
msgstr ""
|
||||
msgstr "Decimale precisie"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: model:ir.actions.act_window,name:decimal_precision.action_decimal_precision_form
|
||||
#: model:ir.ui.menu,name:decimal_precision.menu_decimal_precision_form
|
||||
msgid "Decimal Accuracy Definitions"
|
||||
msgstr ""
|
||||
msgstr "Decimale nauwkeurigheid definities"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: model:ir.module.module,description:decimal_precision.module_meta_information
|
||||
|
@ -63,19 +64,19 @@ msgstr ""
|
|||
#. module: decimal_precision
|
||||
#: constraint:ir.ui.menu:0
|
||||
msgid "Error ! You can not create recursive Menu."
|
||||
msgstr ""
|
||||
msgstr "Fout ! U kunt geen recursief Menu maken."
|
||||
|
||||
#. module: decimal_precision
|
||||
#: field:decimal.precision,name:0
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
msgstr "Gebruik"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: model:ir.module.module,shortdesc:decimal_precision.module_meta_information
|
||||
msgid "Decimal Precision Configuration"
|
||||
msgstr ""
|
||||
msgstr "Decimale precisie configuratie"
|
||||
|
||||
#. module: decimal_precision
|
||||
#: model:ir.model,name:decimal_precision.model_decimal_precision
|
||||
msgid "decimal.precision"
|
||||
msgstr ""
|
||||
msgstr "decimal.precision"
|
||||
|
|
|
@ -28,6 +28,7 @@ import time
|
|||
import tools
|
||||
import decimal_precision as dp
|
||||
|
||||
|
||||
class event_type(osv.osv):
|
||||
""" Event Type """
|
||||
_name = 'event.type'
|
||||
|
@ -225,7 +226,7 @@ class event_event(osv.osv):
|
|||
'product_id': fields.many2one('product.product', 'Product', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="The invoices of this event registration will be created with this Product. Thus it allows you to set the default label and the accounting info you want by default on these invoices."),
|
||||
'note': fields.text('Notes', help="Description or Summary of Event", readonly=False, states={'done': [('readonly', True)]}),
|
||||
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', readonly=True, states={'draft': [('readonly', False)]}, help="Pricelist version for current event."),
|
||||
'unit_price': fields.related('product_id', 'list_price', type='float', string='Registration Cost', readonly=True, states={'draft':[('readonly',False)]}, help="This will be the default price used as registration cost when invoicing this event. Note that you can specify for each registration a specific amount if you want to"),
|
||||
'unit_price': fields.related('product_id', 'list_price', type='float', string='Registration Cost', readonly=True, states={'draft':[('readonly',False)]}, help="This will be the default price used as registration cost when invoicing this event. Note that you can specify for each registration a specific amount if you want to", digits_compute=dp.get_precision('Sale Price')),
|
||||
'main_speaker_id': fields.many2one('res.partner','Main Speaker', readonly=False, states={'done': [('readonly', True)]}, help="Speaker who are giving speech on event."),
|
||||
'speaker_ids':fields.many2many('res.partner', 'event_speaker_rel', 'speaker_id', 'partner_id', 'Other Speakers', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'address_id': fields.many2one('res.partner.address','Location Address', readonly=False, states={'done': [('readonly', True)]}),
|
||||
|
@ -306,8 +307,8 @@ class event_registration(osv.osv):
|
|||
'partner_id': fields.many2one('res.partner', 'Partner', states={'done': [('readonly', True)]}),
|
||||
"partner_invoice_id": fields.many2one('res.partner', 'Partner Invoiced', readonly=True, states={'draft': [('readonly', False)]}),
|
||||
"contact_id": fields.many2one('res.partner.contact', 'Partner Contact', readonly=False, states={'done': [('readonly', True)]}), #TODO: filter only the contacts that have a function into the selected partner_id
|
||||
"unit_price": fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Event Price'), readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute= dp.get_precision('Event Price')),
|
||||
"unit_price": fields.float('Unit Price', required=True, digits_compute=dp.get_precision('Sale Price'), readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute=dp.get_precision('Sale Price')),
|
||||
"badge_ids": fields.one2many('event.registration.badge', 'registration_id', 'Badges', readonly=False, states={'done': [('readonly', True)]}),
|
||||
"event_product": fields.char("Invoice Name", size=128, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
"tobe_invoiced": fields.boolean("To be Invoiced", readonly=True, states={'draft': [('readonly', False)]}),
|
||||
|
|
|
@ -24,6 +24,7 @@ import netsvc
|
|||
import tools
|
||||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class partner_event_registration(osv.osv_memory):
|
||||
|
@ -36,7 +37,7 @@ class partner_event_registration(osv.osv_memory):
|
|||
_columns = {
|
||||
'event_id': fields.many2one('event.event', 'Event'),
|
||||
'event_type': fields.many2one('event.type', 'Type', readonly=True),
|
||||
'unit_price': fields.float('Registration Cost'),
|
||||
'unit_price': fields.float('Registration Cost', digits_compute=dp.get_precision('Sale Price')),
|
||||
'start_date': fields.datetime('Start date', required=True, help="Beginning Date of Event", readonly=True),
|
||||
'end_date': fields.datetime('Closing date', required=True, help="Closing Date of Event", readonly=True),
|
||||
'nb_register': fields.integer('Number of Registration'),
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
sequence: 0.0
|
||||
name: Fortis
|
||||
state: bank
|
||||
bank: base.res_bank_1
|
||||
-
|
||||
I create a new employee “Richard”
|
||||
-
|
||||
|
|
|
@ -57,14 +57,14 @@ class hr_analytic_timesheet(osv.osv):
|
|||
return super(hr_analytic_timesheet, self).unlink(cr, uid, ids, context=context)
|
||||
|
||||
|
||||
def on_change_unit_amount(self, cr, uid, id, prod_id, unit_amount, unit, context=None):
|
||||
def on_change_unit_amount(self, cr, uid, id, prod_id, unit_amount, company_id, unit=False, journal_id=False, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
res = {'value':{}}
|
||||
if prod_id and unit_amount:
|
||||
# find company
|
||||
company_id = self.pool.get('res.company')._company_default_get(cr, uid, 'account.analytic.line', context=context)
|
||||
res.update(self.pool.get('account.analytic.line').on_change_unit_amount(cr, uid, id, prod_id, unit_amount, company_id, unit, context=context))
|
||||
res.update(self.pool.get('account.analytic.line').on_change_unit_amount(cr, uid, id, prod_id, unit_amount, company_id, unit, journal_id, context=context))
|
||||
# update unit of measurement
|
||||
if prod_id:
|
||||
uom = self.pool.get('product.product').browse(cr, uid, prod_id, context=context)
|
||||
|
|
|
@ -12,16 +12,17 @@
|
|||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom" string="Timesheet Lines">
|
||||
<field name="user_id" on_change="on_change_user_id(user_id)" required="1"/>
|
||||
<field name="date" on_change="on_change_date(date)"/>
|
||||
<field domain="[('type','=','normal'),('state', '<>', 'close')]" name="account_id"/>
|
||||
<field name="user_id" on_change="on_change_user_id(user_id)" required="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" required="1" domain="[('type','=','service')]"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" sum="Total time"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="amount" sum="Total cost"/>
|
||||
<field name="general_account_id"/>
|
||||
<field name="journal_id"/>
|
||||
<field domain="[('type','=','normal')]" name="account_id"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" required="1" domain="[('type','=','service')]" invisible="1"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" sum="Total time"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" invisible="1"/>
|
||||
<field name="amount" sum="Total cost" invisible="1"/>
|
||||
<field name="general_account_id" invisible="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -40,9 +41,9 @@
|
|||
<page string="Information">
|
||||
<group colspan="2" col="2">
|
||||
<separator string="Product" colspan="2"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" required="1" domain="[('type','=','service')]"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" required="1" domain="[('type','=','service')]"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
</group>
|
||||
<group colspan="2" col="2">
|
||||
<separator string="Accounting" colspan="2"/>
|
||||
|
@ -67,7 +68,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Timesheet">
|
||||
<group col='8' colspan='4'>
|
||||
<filter icon="terp-go-today" domain="[('date', '=', time.strftime('%%Y-%%m-%%d'))]" string="Today"/>
|
||||
<filter name="today" icon="terp-go-today" domain="[('date', '=', time.strftime('%%Y-%%m-%%d'))]" string="Today"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="user_id"/>
|
||||
<field name="account_id" select="1" widget="selection"/>
|
||||
|
@ -81,32 +82,20 @@
|
|||
<filter string="Anlytic account" icon="terp-folder-green" domain="[]" context="{'group_by':'account_id'}"/>
|
||||
<filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date'}"/>
|
||||
</group>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
||||
</record>
|
||||
|
||||
<record id="act_hr_timesheet_line_me_all_form" model="ir.actions.act_window">
|
||||
<field name="name">My Working Hours</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hr.analytic.timesheet</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('user_id','=',uid)]</field>
|
||||
<field name="filter" eval="True"/>
|
||||
<field name="context">{"search_default_user_id":uid, "search_default_my": 1}</field>
|
||||
<field name="search_view_id" ref="hr_timesheet_line_search"/>
|
||||
</record>
|
||||
|
||||
<record id="act_hr_timesheet_line_evry1_all_form" model="ir.actions.act_window">
|
||||
<field name="name">Working Hours</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hr.analytic.timesheet</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
<field name="context">{"search_default_user_id":uid, "search_default_today":1}</field>
|
||||
<field name="search_view_id" ref="hr_timesheet_line_search"/>
|
||||
<field name="help">This functionality gives you a list of work done by user, product and analytic account (or project). A search tool allows you to make fine-grained analysis.</field>
|
||||
</record>
|
||||
|
|
|
@ -81,7 +81,7 @@ class hr_so_project(osv.osv_memory):
|
|||
|
||||
if not res['product_uom_id']:
|
||||
raise osv.except_osv(_('UserError'), _('No cost unit defined for this employee !'))
|
||||
up = timesheet_obj.on_change_unit_amount(cr, uid, False, res['product_id'], hour, res['product_uom_id'])['value']
|
||||
up = timesheet_obj.on_change_unit_amount(cr, uid, False, res['product_id'], hour,False, res['product_uom_id'])['value']
|
||||
|
||||
res['name'] = data['info']
|
||||
res['account_id'] = data['account_id'].id
|
||||
|
|
|
@ -21,17 +21,6 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<!--record id="view_account_analytic_account_form" model="ir.ui.view">
|
||||
<field name="name">account.analytic.account.form</field>
|
||||
<field name="model">account.analytic.account</field>
|
||||
<field name="inherit_id" ref="account.view_account_analytic_account_form"/>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="company_currency_id" position="replace">
|
||||
<field name="currency_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record-->
|
||||
<record id="hr_timesheet_line_form" model="ir.ui.view">
|
||||
<field name="name">hr.analytic.timesheet.form</field>
|
||||
<field name="model">hr.analytic.timesheet</field>
|
||||
|
@ -83,13 +72,26 @@
|
|||
</record>
|
||||
|
||||
<!-- Inherits for account analytic lines -->
|
||||
<record id="view_account_analytic_line_search_inherit" model="ir.ui.view">
|
||||
<field name="name">account.analytic.line.search.to_invoice</field>
|
||||
<field name="model">account.analytic.line</field>
|
||||
<field name="type">search</field>
|
||||
<field name="inherit_id" ref="account.view_account_analytic_line_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<filter name="others" position="after">
|
||||
<separator orientation="vertical"/>
|
||||
<filter name="to_invoice" string="To Invoice" context="{'to_invoice': 1}" domain="[('invoice_id','=',False),('to_invoice','<>',False)]" icon="terp-sale"/>
|
||||
</filter>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_analytic_line_tree_inherit" model="ir.ui.view">
|
||||
<field name="name">account.analytic.line.tree.to_invoice</field>
|
||||
<field name="model">account.analytic.line</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="inherit_id" ref="account.view_account_analytic_line_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="journal_id" position="after">
|
||||
<field name="account_id" position="after">
|
||||
<field name="to_invoice"/>
|
||||
</field>
|
||||
</field>
|
||||
|
@ -103,18 +105,19 @@
|
|||
<field name="arch" type="xml">
|
||||
<field name="product_uom_id" position="after">
|
||||
<field name="to_invoice"/>
|
||||
<field name="invoice_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Menus -->
|
||||
<record id="action_hr_analytic_timesheet_open_tree" model="ir.actions.act_window">
|
||||
<field name="name">Entries to invoice</field>
|
||||
<field name="name">Costs to Invoice</field>
|
||||
<field name="res_model">account.analytic.line</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('to_invoice','<>',False)]</field>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="context">{'search_default_to_invoice': 1}</field>
|
||||
<field name="help">OpenERP automatically group the entries to be invoiced so you can keep an eye on them on real time in one glance.</field>
|
||||
</record>
|
||||
<menuitem
|
||||
|
@ -123,31 +126,6 @@
|
|||
parent="account.menu_finance_periodical_processing_billing"
|
||||
sequence="1"/>
|
||||
|
||||
<record id="action_hr_analytic_timesheet_tree_invoiced" model="ir.actions.act_window">
|
||||
<field name="name">Uninvoiced Entries</field>
|
||||
<field name="res_model">account.analytic.line</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('invoice_id','=',False),('to_invoice','!=',False)]</field>
|
||||
<field name="filter" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record id="action_open_analytic_accounts" model="ir.actions.act_window">
|
||||
<field name="name">Open Analytic Accounts</field>
|
||||
<field name="res_model">account.analytic.account</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('state','<>','close'),('type','<>','view')]</field>
|
||||
</record>
|
||||
|
||||
<record id="action_open_invoice_analytic_accounts" model="ir.actions.act_window">
|
||||
<field name="name">Unclosed Invoiceable Accounts</field>
|
||||
<field name="res_model">account.analytic.account</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('state','<>','close'),('type','<>','view'),('pricelist_id','<>',False)]</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_timesheet_invoice_factor_form" model="ir.ui.view">
|
||||
<field name="name">hr_timesheet_invoice.factor.form</field>
|
||||
<field name="model">hr_timesheet_invoice.factor</field>
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
from osv import fields,osv
|
||||
import tools
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class report_analytic_account_close(osv.osv):
|
||||
_name = "report.analytic.account.close"
|
||||
|
@ -70,8 +72,8 @@ class report_account_analytic_line_to_invoice(osv.osv):
|
|||
'account_id':fields.many2one('account.analytic.account', 'Analytic account', readonly=True),
|
||||
'product_uom_id':fields.many2one('product.uom', 'UoM', readonly=True),
|
||||
'unit_amount': fields.float('Units', readonly=True),
|
||||
'sale_price': fields.float('Sale price', readonly=True),
|
||||
'amount': fields.float('Amount', readonly=True),
|
||||
'sale_price': fields.float('Sale price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
|
||||
'amount': fields.float('Amount', readonly=True, digits_compute=dp.get_precision('Account')),
|
||||
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
|
||||
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
|||
'accounts': fields.many2many('account.analytic.account', 'invoice_id', 'account_id', 'Analytic Accounts', required=True),
|
||||
'date': fields.boolean('Date', help='The real date of each work will be displayed on the invoice'),
|
||||
'time': fields.boolean('Time spent', help='The time of each work done will be displayed on the invoice'),
|
||||
'name': fields.boolean('Name of entry', help='The detail of each work done will be displayed on the invoice'),
|
||||
'name': fields.boolean('Description', help='The detail of each work done will be displayed on the invoice'),
|
||||
'price': fields.boolean('Cost', help='The cost of each work done will be displayed on the invoice. You probably don\'t want to check this'),
|
||||
'product': fields.many2one('product.product', 'Product', help='Complete this field only if you want to force to use a specific product. Keep empty to use the real product that comes from the cost.'),
|
||||
}
|
||||
|
@ -59,8 +59,10 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
|||
return [x[0] for x in account_ids]
|
||||
|
||||
_defaults = {
|
||||
'accounts': _get_accounts
|
||||
}
|
||||
'accounts': _get_accounts,
|
||||
'date': lambda *args: 1,
|
||||
'name': lambda *args: 1
|
||||
}
|
||||
|
||||
def do_create(self, cr, uid, ids, context=None):
|
||||
mod_obj = self.pool.get('ir.model.data')
|
||||
|
|
|
@ -2,37 +2,33 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_hr_timesheet_invoice_create" model="ir.ui.view">
|
||||
<record id="view_hr_timesheet_invoice_create" model="ir.ui.view">
|
||||
<field name="name">hr.timesheet.invoice.create.form</field>
|
||||
<field name="model">hr.timesheet.invoice.create</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Invoice analytic lines">
|
||||
<group height="280" width="450">
|
||||
<group col="4" colspan="6">
|
||||
<notebook>
|
||||
<page string="Billing Data">
|
||||
<separator string="Do you want to show details of work in invoice ?" colspan="4"/>
|
||||
<field name="date"/>
|
||||
<field name="time"/>
|
||||
<field name="name"/>
|
||||
<field name="price"/>
|
||||
<separator string="Force to use a specific product" colspan="4"/>
|
||||
<field name="product"/>
|
||||
</page>
|
||||
<page string="Filter on Accounts" groups="base.group_extended">
|
||||
<separator string="Choose accounts you want to invoice" colspan="4"/>
|
||||
<field name="accounts" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</group>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
|
||||
<button name="do_create" string="Create Invoices" colspan="1" type="object" icon="gtk-execute"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
<form string="Invoice analytic lines">
|
||||
<notebook colspan="4">
|
||||
<page string="Billing Data">
|
||||
<separator string="Do you want to show details of work in invoice ?" colspan="4"/>
|
||||
<field name="date"/>
|
||||
<field name="time"/>
|
||||
<field name="name"/>
|
||||
<field name="price"/>
|
||||
<separator string="Force to use a specific product" colspan="4"/>
|
||||
<field name="product"/>
|
||||
</page>
|
||||
<page string="Filter on Accounts" groups="base.group_extended">
|
||||
<separator string="Choose accounts you want to invoice" colspan="4"/>
|
||||
<field name="accounts" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
|
||||
<button name="do_create" string="Create Invoices" colspan="1" type="object" icon="gtk-execute"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -45,7 +41,7 @@
|
|||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.values" id="hr_timesheet_invoice_create_values">
|
||||
<record model="ir.values" id="hr_timesheet_invoice_create_values">
|
||||
<field name="model_id" ref="model_account_analytic_line" />
|
||||
<field name="object" eval="1" />
|
||||
<field name="name">Invoice analytic lines</field>
|
||||
|
@ -55,5 +51,5 @@
|
|||
<field name="model">account.analytic.line</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -104,11 +104,11 @@
|
|||
<field invisible="1" name="date"/>
|
||||
<field domain="[('type','=','normal'), ('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id)"/>
|
||||
<field name="name"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" widget="float_time"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
|
||||
<field name="to_invoice"/>
|
||||
<field invisible="1" name="journal_id"/>
|
||||
<field invisible="1" name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field invisible="1" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field invisible="1" name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field invisible="1" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field invisible="1" name="amount"/>
|
||||
<field invisible="1" name="general_account_id"/>
|
||||
<field invisible="1" name="user_id" required="1"/>
|
||||
|
@ -117,11 +117,11 @@
|
|||
<field name="date"/>
|
||||
<field domain="[('type','=','normal'), ('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id)"/>
|
||||
<field name="name"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" widget="float_time"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
|
||||
<field name="to_invoice"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field name="amount"/>
|
||||
<field name="general_account_id"/>
|
||||
<field name="user_id" required="1"/>
|
||||
|
@ -201,8 +201,7 @@
|
|||
id="base.menu_project_management_time_tracking"
|
||||
name="Time Tracking"
|
||||
parent="base.menu_main_pm" sequence="5"/>
|
||||
<menuitem action="hr_timesheet_sheet.act_hr_timesheet_sheet_form" id="menu_act_project_management_timesheet_sheet_form" parent="base.menu_project_management_time_tracking"
|
||||
sequence="5"/>
|
||||
|
||||
<menuitem action="act_hr_timesheet_sheet_form" id="menu_act_hr_timesheet_sheet_form" parent="hr_attendance.menu_hr_time_tracking"
|
||||
sequence="2"/>
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<field name="model">hr.timesheet.current.open</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Current Timesheet">
|
||||
<form string="My Timesheet">
|
||||
<separator string="It will open the your current timesheet" colspan="4" />
|
||||
<group colspan="4" col="6">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
|
@ -17,7 +17,7 @@
|
|||
</record>
|
||||
|
||||
<record id="action_hr_timesheet_current_open" model="ir.actions.act_window">
|
||||
<field name="name">Current Timesheet</field>
|
||||
<field name="name">My Timesheet</field>
|
||||
<field name="res_model">hr.timesheet.current.open</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
|
@ -25,7 +25,11 @@
|
|||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_hr_timesheet_current_open" icon="STOCK_NEW" id="menu_act_hr_timesheet_sheet_form_my_current" name="Current Timesheet" parent="hr_attendance.menu_hr_time_tracking" sequence="1"/>
|
||||
<menuitem action="action_hr_timesheet_current_open" icon="STOCK_NEW" id="menu_act_hr_timesheet_sheet_form_my_current" name="My Timesheet" parent="hr_attendance.menu_hr_time_tracking" sequence="1"/>
|
||||
|
||||
<menuitem action="action_hr_timesheet_current_open"
|
||||
id="menu_act_project_management_timesheet_sheet_form" parent="base.menu_project_management_time_tracking"
|
||||
sequence="5"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -84,8 +84,8 @@
|
|||
<field name="search_view_id" ref="view_campaign_analysis_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Reporting" id="base.menu_report_association" parent="base.marketing_menu"/>
|
||||
<menuitem action="action_campaign_analysis_all" id="menu_action_campaign_analysis_all" parent="base.menu_report_association" sequence="2"/>
|
||||
<menuitem name="Reporting" id="base.menu_report_marketing" parent="base.marketing_menu"/>
|
||||
<menuitem action="action_campaign_analysis_all" id="menu_action_campaign_analysis_all" parent="base.menu_report_marketing" sequence="2"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -687,8 +687,9 @@ class mrp_repair_line(osv.osv, ProductChangeMixin):
|
|||
if type == 'add':
|
||||
stock_id = self.pool.get('stock.location').search(cr, uid, [('name','=','Stock')])[0]
|
||||
to_invoice = False
|
||||
if guarantee_limit and date.today() > datetime.strptime(guarantee_limit, '%Y-%m-%d'):
|
||||
if guarantee_limit and datetime.strptime(date.today().strftime('%Y-%m-%d'), '%Y-%m-%d') > datetime.strptime(guarantee_limit, '%Y-%m-%d'):
|
||||
to_invoice=True
|
||||
|
||||
return {'value': {
|
||||
'to_invoice': to_invoice,
|
||||
'location_id': stock_id,
|
||||
|
|
|
@ -33,9 +33,9 @@ class order(report_sxw.rml_parse):
|
|||
def total(self, repair):
|
||||
total = 0.0
|
||||
for operation in repair.operations:
|
||||
total+=operation.price_subtotal
|
||||
total += operation.price_subtotal
|
||||
for fee in repair.fees_lines:
|
||||
total+=fee.price_subtotal
|
||||
total += fee.price_subtotal
|
||||
total = total + repair.amount_tax
|
||||
return total
|
||||
|
||||
|
|
|
@ -343,7 +343,7 @@
|
|||
<para style="terp_default_9">Net Total :</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P26">[[ formatLang(o.amount_untaxed)]] [[ o.pricelist_id.currency_id. symbol ]]</para>
|
||||
<para style="P26">[[ formatLang(o.amount_untaxed, digits=get_digits(dp='Sale Price'))]] [[ o.pricelist_id.currency_id. symbol ]]</para>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
@ -357,7 +357,7 @@
|
|||
<para style="terp_default_9">Taxes:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P26">[[ formatLang(o.amount_tax)]] [[ o.pricelist_id.currency_id. symbol ]]</para>
|
||||
<para style="P26">[[ formatLang(o.amount_tax, digits=get_digits(dp='Account'))]] [[ o.pricelist_id.currency_id. symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -370,7 +370,7 @@
|
|||
<para style="terp_tblheader_Details">Total :</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_right_bold_9">[[ formatLang(total(o)) ]] [[ o.pricelist_id.currency_id. symbol ]]</para>
|
||||
<para style="terp_default_right_bold_9">[[ formatLang(total(o), digits=get_digits(dp='Sale Price')) ]] [[ o.pricelist_id.currency_id. symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -391,4 +391,4 @@
|
|||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-12-08 11:46+0000\n"
|
||||
"PO-Revision-Date: 2010-08-03 08:13+0000\n"
|
||||
"Last-Translator: mga (Open ERP) <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-03 15:55+0000\n"
|
||||
"Last-Translator: Naven <naven@ipv4.pl>\n"
|
||||
"Language-Team: Polish <pl@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: 2010-09-29 05:16+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-04 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: multi_company
|
||||
|
@ -83,6 +83,9 @@ msgid ""
|
|||
" the default value for each object\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Ten moduł daje możliwość łatwego zarządzania \n"
|
||||
" standardową wartością dla każdego objektu\n"
|
||||
" "
|
||||
|
||||
#. module: multi_company
|
||||
#: field:multi_company.default,company_id:0
|
||||
|
|
|
@ -31,10 +31,21 @@ class account_statement(report_sxw.rml_parse):
|
|||
self.localcontext.update({
|
||||
'time': time,
|
||||
'get_total':self._get_total,
|
||||
'get_data':self._get_data,
|
||||
})
|
||||
|
||||
def _get_data(self, statement):
|
||||
lines = []
|
||||
for line in statement.line_ids:
|
||||
lines.append(line)
|
||||
|
||||
return lines
|
||||
|
||||
def _get_total(self, statement_line_ids):
|
||||
total = 0.0
|
||||
for line in statement_line_ids:
|
||||
total += line.amount
|
||||
return total
|
||||
|
||||
report_sxw.report_sxw('report.account.statement', 'account.bank.statement', 'addons/statement/report/account_statement.rml', parser=account_statement,header='internal')
|
||||
|
||||
|
|
|
@ -216,10 +216,10 @@
|
|||
<para style="terp_default_Centre_8">[[ formatLang(statement.closing_date,date=True) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_8">[[ formatLang(statement.balance_start) ]][[ company.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Centre_8">[[ formatLang(statement.balance_start, digits=get_digits(dp='Account')) ]][[ company.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_8">[[ formatLang(statement.balance_end_real) ]][[ company.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Centre_8">[[ formatLang(statement.balance_end_real, digits=get_digits(dp='Account')) ]][[ company.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -247,13 +247,14 @@
|
|||
<td>
|
||||
<para style="P2">[[ repeatIn(statement.line_ids,'line_ids') and ' ' or removeParentNode('blockTable') ]]</para>
|
||||
<para style="P2">[[ repeatIn(get_data(statement), 'line_ids')]]</para>
|
||||
<para style="terp_default_9">[[ line_ids.name ]]</para>
|
||||
<!--<para style="terp_default_9">[[ line_ids.name ]]</para>-->
|
||||
<para style="terp_default_9">[[ line_ids['name'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ line_ids.partner_id.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(line_ids.amount) ]][[ company.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(line_ids.amount, digits=get_digits(dp='Account')) ]][[ company.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -268,7 +269,7 @@
|
|||
<para style="terp_default_Right_9_Bold">Total :</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(get_total(statement.line_ids)) ]][[ company.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(get_total(statement.line_ids), digits=get_digits(dp='Account')) ]][[ company.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -282,4 +283,4 @@
|
|||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
|
|
@ -222,7 +222,7 @@ class product_pricelist(osv.osv):
|
|||
price = 0.0
|
||||
else:
|
||||
price_tmp = self.price_get(cr, uid,
|
||||
[res['base_pricelist_id']], prod_id,
|
||||
[res['base_pricelist_id']], product_id,
|
||||
qty)[res['base_pricelist_id']]
|
||||
ptype_src = self.browse(cr, uid, res['base_pricelist_id']).currency_id.id
|
||||
price = currency_obj.compute(cr, uid, ptype_src, res['currency_id'], price_tmp, round=False)
|
||||
|
@ -388,7 +388,7 @@ class product_pricelist(osv.osv):
|
|||
price = 0.0
|
||||
else:
|
||||
price_tmp = self.price_get(cr, uid,
|
||||
[res['base_pricelist_id']], prod_id,
|
||||
[res['base_pricelist_id']], product_id,
|
||||
qty)[res['base_pricelist_id']]
|
||||
ptype_src = self.browse(cr, uid, res['base_pricelist_id']).currency_id.id
|
||||
price = currency_obj.compute(cr, uid, ptype_src, res['currency_id'], price_tmp, round=False)
|
||||
|
|
|
@ -190,7 +190,6 @@ class project(osv.osv):
|
|||
'active': True,
|
||||
'priority': 1,
|
||||
'sequence': 10,
|
||||
'warn_manager': True,
|
||||
}
|
||||
|
||||
def _check_dates(self, cr, uid, ids):
|
||||
|
@ -373,6 +372,11 @@ class task(osv.osv):
|
|||
return res
|
||||
|
||||
|
||||
def onchange_remaining(self, cr, uid, ids, remaining=0.0, planned = 0.0):
|
||||
if remaining and not planned:
|
||||
return {'value':{'planned_hours': remaining}}
|
||||
return {}
|
||||
|
||||
def onchange_planned(self, cr, uid, ids, planned = 0.0, effective = 0.0):
|
||||
return {'value':{'remaining_hours': planned - effective}}
|
||||
|
||||
|
@ -482,7 +486,6 @@ class task(osv.osv):
|
|||
return True
|
||||
|
||||
_constraints = [
|
||||
(_check_dates, 'Error! Task start-date must be lower then task end-date.', ['date_start', 'date_end']),
|
||||
(_check_recursion, _('Error ! You cannot create recursive tasks.'), ['parent_ids'])
|
||||
]
|
||||
#
|
||||
|
@ -615,7 +618,10 @@ class task(osv.osv):
|
|||
def do_open(self, cr, uid, ids, *args):
|
||||
tasks= self.browse(cr,uid,ids)
|
||||
for t in tasks:
|
||||
self.write(cr, uid, [t.id], {'state': 'open', 'date_start': time.strftime('%Y-%m-%d %H:%M:%S'),})
|
||||
data = {'state': 'open'}
|
||||
if not t.date_start:
|
||||
data['date_start'] = time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
self.write(cr, uid, [t.id], data)
|
||||
message = _('Task ') + " '" + t.name + "' "+ _("is Open.")
|
||||
self.log(cr, uid, t.id, message)
|
||||
return True
|
||||
|
@ -680,7 +686,7 @@ class task(osv.osv):
|
|||
def prev_type(self, cr, uid, ids, *args):
|
||||
for task in self.browse(cr, uid, ids):
|
||||
typeid = task.type_id.id
|
||||
types = map(lambda x:x.id, task.project_id.type_ids)
|
||||
types = map(lambda x:x.id, task.project_id and task.project_id.type_ids or [])
|
||||
if types:
|
||||
if typeid and typeid in types:
|
||||
index = types.index(typeid)
|
||||
|
|
|
@ -207,7 +207,7 @@
|
|||
<form string="Task edition">
|
||||
<group colspan="6" col="6">
|
||||
<field name="name" select="1"/>
|
||||
<field name="project_id" required="1" select="1" domain="[('user_id','=',uid)]"/>
|
||||
<field name="project_id" select="1" domain="[('user_id','=',uid)]"/>
|
||||
<field name="total_hours" widget="float_time"/>
|
||||
<field name="date_deadline" attrs="{'readonly':[('state','in',['done', 'cancelled'])]}"/>
|
||||
<field name="user_id" select="1" attrs="{'readonly':[('state','in',['done', 'cancelled'])]}"/>
|
||||
|
@ -303,15 +303,13 @@
|
|||
<field eval="2" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="grey:state in ('cancelled','done');blue:remaining_hours<0 and state in ('pending');red:date_deadline and (date_deadline>current_date) and (state in ('draft','open'));black:state not in ('cancelled','done')" string="Tasks">
|
||||
<field name="id"/>
|
||||
<field name="sequence" invisible="not context.get('seq_visible', False)"/>
|
||||
<field name="name"/>
|
||||
<field name="project_id" icon="gtk-indent" domain="['|',('user_id','=',uid),('members','=',uid)]"/>
|
||||
<field name="user_id"/>
|
||||
<field name="project_id" icon="gtk-indent" domain="['|',('user_id','=',uid),('members','=',uid)]" invisible="context.get('user_invisible', False)"/>
|
||||
<field name="user_id" invisible="context.get('user_invisible', False)"/>
|
||||
<field name="delegated_user_id" invisible="context.get('show_delegated', True)"/>
|
||||
<field name="planned_hours"/>
|
||||
<field name="remaining_hours" widget="float_time" sum="Remaining Hours" invisible="context.get('set_visible',False)"/>
|
||||
<field name="delay_hours"/>
|
||||
<field name="remaining_hours" widget="float_time" sum="Remaining Hours" on_change="onchange_remaining(remaining_hours,planned_hours)"/>
|
||||
<field name="planned_hours" widget="float_time" invisible="1"/>
|
||||
<field name="date_deadline" invisible="context.get('set_visible',False)"/>
|
||||
<field name="type_id" groups="base.group_extended" invisible="context.get('set_visible',False)"/>
|
||||
<button name="next_type" invisible="context.get('set_visible',False)"
|
||||
|
@ -384,10 +382,10 @@
|
|||
<filter string="In Progress" domain="[('state','=','open')]" help="In Progress Tasks" icon="terp-camera_test"/>
|
||||
<filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter name="edit"
|
||||
string="Edit" context="{'set_editable':True,'seq_visible': True}"
|
||||
icon="gtk-execute"
|
||||
groups="base.group_extended"/>
|
||||
<filter name="edit"
|
||||
string="Edit" context="{'set_editable':True,'seq_visible': True}"
|
||||
icon="gtk-execute"
|
||||
groups="base.group_extended"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Deadlines" domain="[('date_deadline','<>',False)]" help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/>
|
||||
<separator orientation="vertical"/>
|
||||
|
@ -486,7 +484,7 @@
|
|||
</record>
|
||||
|
||||
<record id="open_task_type_form" model="ir.actions.act_window">
|
||||
<field name="name">Task Stages</field>
|
||||
<field name="name">Stages</field>
|
||||
<field name="res_model">project.task.type</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="task_type_tree"/>
|
||||
|
@ -498,7 +496,7 @@
|
|||
<act_window context="{'search_default_user_id': [active_id]}" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/>
|
||||
|
||||
<act_window
|
||||
context="{'search_default_project_id': [active_id]}"
|
||||
context="{'search_default_project_id': [active_id]}"
|
||||
id="act_project_project_2_project_task_all"
|
||||
name="Tasks"
|
||||
res_model="project.task"
|
||||
|
|
|
@ -106,19 +106,19 @@ class project_task(osv.osv):
|
|||
timebox_obj = self.pool.get('project.gtd.timebox')
|
||||
if res['type'] == 'search':
|
||||
tt = timebox_obj.browse(cr, uid, timebox_obj.search(cr,uid,[]))
|
||||
search_extended ='''<newline/><group col="%d" expand="0" string="%s" groups="project_gtd.group_project_getting">''' % (len(tt)+7,_('Getting Things Done'))
|
||||
search_extended += '''<filter domain="[('timebox_id','=', False)]" context="{'set_editable':True,'set_visible':True,'gtd_visible':True}" icon="gtk-new" help="Undefined Timebox" string="%s"/>''' % (_('Inbox'),)
|
||||
search_extended ='''<newline/><group col="%d" expand="1" string="%s" groups="project_gtd.group_project_getting">''' % (len(tt)+7,_('Getting Things Done'))
|
||||
search_extended += '''<filter domain="[('timebox_id','=', False)]" context="{'set_editable':True,'set_visible':True,'gtd_visible':True,'user_invisible':True}" icon="gtk-new" help="Undefined Timebox" string="%s"/>''' % (_('Inbox'),)
|
||||
search_extended += '''<filter context="{'set_editable':True,'set_visible':True,'gtd_visible':True,'user_invisible':True}" icon="gtk-new" help="Undefined Timebox" string="%s"/>''' % (_('GTD'),)
|
||||
search_extended += '''<separator orientation="vertical"/>'''
|
||||
for time in tt:
|
||||
if time.icon:
|
||||
icon = time.icon
|
||||
else :
|
||||
icon=""
|
||||
search_extended += '''<filter domain="[('timebox_id','=', ''' + str(time.id) + ''')]" icon="''' + icon + '''" string="''' + time.name + '''" context="{'gtd_visible':True}"/>'''
|
||||
search_extended += '''<filter domain="[('timebox_id','=', ''' + str(time.id) + ''')]" icon="''' + icon + '''" string="''' + time.name + '''" context="{'gtd_visible':True, 'user_invisible': True}"/>'''
|
||||
search_extended += '''
|
||||
<separator orientation="vertical"/>
|
||||
<field name="context_id" select="1" widget="selection" />
|
||||
<field name="priority" select="1" />
|
||||
<field name="context_id" select="1" widget="selection"/>
|
||||
</group>
|
||||
</search> '''
|
||||
if search_extended:
|
||||
|
|
|
@ -77,9 +77,10 @@
|
|||
<field name="inherit_id" ref="project.view_task_tree2" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="remaining_hours" position="after">
|
||||
<button name="prev_timebox" type="object" icon="gtk-go-back" string="Previous" states="draft,pending,open" groups="project_gtd.group_project_getting" invisible=" not context.get('gtd_visible',False)"/>
|
||||
<field string="Timebox" name="timebox_id" groups="project_gtd.group_project_getting" invisible=" not context.get('gtd_visible', False)"/>
|
||||
<button name="prev_timebox" type="object" icon="gtk-go-back" string="Previous" states="draft,pending,open" groups="project_gtd.group_project_getting" invisible=" not context.get('gtd_visible',False)"/>
|
||||
<button name="next_timebox" type="object" icon="gtk-go-forward" string="Next" states="draft,pending,open" groups="project_gtd.group_project_getting" invisible=" not context.get('gtd_visible',False)"/>
|
||||
<field name="context_id" groups="project_gtd.group_project_getting" invisible="not context.get('gtd_visible', False)" widget="selection"/>
|
||||
<button name="do_reopen" states="done,cancelled" string="Reactivate" type="object" icon="gtk-convert" help="For reopening the tasks" invisible="not context.get('set_visible',False)"/>
|
||||
</field>
|
||||
</field>
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
'depends': [
|
||||
'crm',
|
||||
'project',
|
||||
'hr_timesheet_sheet',
|
||||
],
|
||||
'init_xml': [
|
||||
'project_issue_data.xml'
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph orientation="vertical" string="Project Issue" type="bar">
|
||||
<field name="stage_id"/>
|
||||
<field name="type_id"/>
|
||||
<field name="nbr" operator="+"/>
|
||||
<field group="True" name="user_id"/>
|
||||
</graph>
|
||||
|
|
|
@ -144,7 +144,7 @@ class project_issue(crm.crm_case, osv.osv):
|
|||
|
||||
_columns = {
|
||||
'id': fields.integer('ID'),
|
||||
'name': fields.char('Name', size=128, required=True),
|
||||
'name': fields.char('Issue', size=128, required=True),
|
||||
'active': fields.boolean('Active', required=False),
|
||||
'create_date': fields.datetime('Creation Date', readonly=True),
|
||||
'write_date': fields.datetime('Update Date', readonly=True),
|
||||
|
@ -177,7 +177,7 @@ class project_issue(crm.crm_case, osv.osv):
|
|||
'partner_name': fields.char("Employee's Name", size=64),
|
||||
'partner_mobile': fields.char('Mobile', size=32),
|
||||
'partner_phone': fields.char('Phone', size=32),
|
||||
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'project.issue')]"),
|
||||
'type_id': fields.many2one ('project.task.type', 'Resolution', domain="[('object_id.model', '=', 'project.issue')]"),
|
||||
'project_id':fields.many2one('project.project', 'Project'),
|
||||
'duration': fields.float('Duration'),
|
||||
'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"),
|
||||
|
@ -279,16 +279,29 @@ class project_issue(crm.crm_case, osv.osv):
|
|||
def convert_to_bug(self, cr, uid, ids, context=None):
|
||||
return self._convert(cr, uid, ids, 'bug_categ', context=context)
|
||||
|
||||
def onchange_stage_id(self, cr, uid, ids, stage_id, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
if not stage_id:
|
||||
return {'value':{}}
|
||||
stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context)
|
||||
if not stage.on_change:
|
||||
return {'value':{}}
|
||||
return {'value':{}}
|
||||
|
||||
|
||||
def next_type(self, cr, uid, ids, *args):
|
||||
for task in self.browse(cr, uid, ids):
|
||||
typeid = task.type_id.id
|
||||
types = map(lambda x:x.id, task.project_id.type_ids or [])
|
||||
if types:
|
||||
if not typeid:
|
||||
self.write(cr, uid, task.id, {'type_id': types[0]})
|
||||
elif typeid and typeid in types and types.index(typeid) != len(types)-1 :
|
||||
index = types.index(typeid)
|
||||
self.write(cr, uid, task.id, {'type_id': types[index+1]})
|
||||
return True
|
||||
|
||||
def prev_type(self, cr, uid, ids, *args):
|
||||
for task in self.browse(cr, uid, ids):
|
||||
typeid = task.type_id.id
|
||||
types = map(lambda x:x.id, task.project_id and task.project_id.type_ids or [])
|
||||
if types:
|
||||
if typeid and typeid in types:
|
||||
index = types.index(typeid)
|
||||
self.write(cr, uid, task.id, {'type_id': index and types[index-1] or False})
|
||||
return True
|
||||
|
||||
def onchange_task_id(self, cr, uid, ids, task_id, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
@ -370,31 +383,6 @@ class project_issue(crm.crm_case, osv.osv):
|
|||
|
||||
return res
|
||||
|
||||
def get_stage_dict(self, cr, uid, ids, context=None):
|
||||
"""This function gives dictionary for stage according to stage levels
|
||||
@param self: The object pointer
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param ids: List of case IDs
|
||||
@param context: A standard dictionary for contextual values"""
|
||||
if not context:
|
||||
context = {}
|
||||
stage_obj = self.pool.get('crm.case.stage')
|
||||
domain = [('object_id.model', '=', self._name)]
|
||||
if 'force_domain' in context and context['force_domain']:
|
||||
domain += context['force_domain']
|
||||
sid = stage_obj.search(cr, uid, domain, context=context)
|
||||
s = {}
|
||||
previous = {}
|
||||
section = self._name
|
||||
|
||||
for stage in stage_obj.browse(cr, uid, sid, context=context):
|
||||
s.setdefault(section, {})
|
||||
s[section][previous.get(section, False)] = stage.id
|
||||
previous[section] = stage.id
|
||||
return s
|
||||
|
||||
|
||||
def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
|
|
@ -31,39 +31,5 @@
|
|||
<field name="name">v3.0</field>
|
||||
</record>
|
||||
|
||||
<!-- Case Stage -->
|
||||
<!-- For Bugs -->
|
||||
|
||||
<record model="crm.case.stage" id="stage1">
|
||||
<field name="name">Accepted as Bug</field>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="stage2">
|
||||
<field name="name">Fixed</field>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="stage3">
|
||||
<field name="name">Won't fix</field>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="stage4">
|
||||
<field name="name">Invalid</field>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="stage5">
|
||||
<field name="name">Awaiting Response</field>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/>
|
||||
</record>
|
||||
<record model="crm.case.stage" id="stage6">
|
||||
<field name="name">Works For Me</field>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="1" name="active"/>
|
||||
<field name="categ_id" ref="bug_categ"/>
|
||||
<field name="stage_id" ref="stage1"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
<field eval="15.0" name="duration"/>
|
||||
<field eval=""Bug in Accounts module"" name="name"/>
|
||||
|
@ -30,7 +29,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="3.5" name="duration"/>
|
||||
<field name="categ_id" ref="bug_categ"/>
|
||||
<field name="stage_id" ref="stage2"/>
|
||||
<field eval=""Program not giving proper output"" name="name"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
</record>
|
||||
|
@ -45,7 +43,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="2.3" name="duration"/>
|
||||
<field name="categ_id" ref="bug_categ"/>
|
||||
<field name="stage_id" ref="stage3"/>
|
||||
<field name="project_id" ref="project.project_project_23"/>
|
||||
<field eval=""Output incorrect"" name="name"/>
|
||||
</record>
|
||||
|
@ -61,7 +58,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="4.0" name="duration"/>
|
||||
<field name="categ_id" ref="bug_categ"/>
|
||||
<field name="stage_id" ref="stage4"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
<field eval=""Problem loading page"" name="name"/>
|
||||
</record>
|
||||
|
@ -76,7 +72,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="1.0" name="duration"/>
|
||||
<field name="categ_id" ref="bug_categ"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
<field eval=""Page not Found"" name="name"/>
|
||||
</record>
|
||||
|
@ -92,7 +87,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="4.0" name="duration"/>
|
||||
<field name="categ_id" ref="bug_categ"/>
|
||||
<field name="stage_id" ref="stage6"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
<field eval=""Programming Error"" name="name"/>
|
||||
</record>
|
||||
|
@ -108,7 +102,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="2.0" name="duration"/>
|
||||
<field name="categ_id" ref="bug_categ"/>
|
||||
<field name="stage_id" ref="stage6"/>
|
||||
<field name="project_id" ref="project.project_project_9"/>
|
||||
<field eval=""Logical Error in Program"" name="name"/>
|
||||
</record>
|
||||
|
@ -124,7 +117,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="7.3" name="duration"/>
|
||||
<field name="categ_id" ref="bug_categ"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field name="project_id" ref="project.project_project_9"/>
|
||||
<field eval=""Constraint Error"" name="name"/>
|
||||
</record>
|
||||
|
@ -139,7 +131,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="1.3" name="duration"/>
|
||||
<field name="categ_id" ref="feature_request_categ"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
<field eval=""Error in Program"" name="name"/>
|
||||
</record>
|
||||
|
@ -155,7 +146,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="13.0" name="duration"/>
|
||||
<field name="categ_id" ref="feature_request_categ"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field name="project_id" ref="project.project_project_9"/>
|
||||
<field eval=""Patches Error in Program"" name="name"/>
|
||||
</record>
|
||||
|
@ -171,7 +161,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="3.2" name="duration"/>
|
||||
<field name="categ_id" ref="feature_request_categ"/>
|
||||
<field name="stage_id" ref="stage1"/>
|
||||
<field name="project_id" ref="project.project_project_21"/>
|
||||
<field eval=""New Features To Be Added"" name="name"/>
|
||||
</record>
|
||||
|
@ -187,7 +176,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="3.0" name="duration"/>
|
||||
<field name="categ_id" ref="feature_request_categ"/>
|
||||
<field name="stage_id" ref="stage2"/>
|
||||
<field name="project_id" ref="project.project_project_21"/>
|
||||
<field eval=""Add menus to the module"" name="name"/>
|
||||
<field eval=""info@opensides.be"" name="email_from"/>
|
||||
|
@ -204,7 +192,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="2.0" name="duration"/>
|
||||
<field name="categ_id" ref="feature_request_categ"/>
|
||||
<field name="stage_id" ref="stage3"/>
|
||||
<field name="project_id" ref="project.project_project_9"/>
|
||||
<field eval=""Include Attendance sheet in Project"" name="name"/>
|
||||
<field eval=""contact@tecsas.fr"" name="email_from"/>
|
||||
|
@ -222,7 +209,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="2.45" name="duration"/>
|
||||
<field name="categ_id" ref="feature_request_categ"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
<field eval=""Create new object"" name="name"/>
|
||||
</record>
|
||||
|
@ -238,7 +224,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="15.0" name="duration"/>
|
||||
<field name="categ_id" ref="feature_request_categ"/>
|
||||
<field name="stage_id" ref="stage6"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
<field eval=""Improve Reports in HRMS"" name="name"/>
|
||||
</record>
|
||||
|
@ -254,7 +239,6 @@
|
|||
<field eval="1" name="active"/>
|
||||
<field eval="06.15" name="duration"/>
|
||||
<field name="categ_id" ref="feature_request_categ"/>
|
||||
<field name="stage_id" ref="stage5"/>
|
||||
<field name="project_id" ref="project.project_project_22"/>
|
||||
<field eval=""Improve Reports in PMS"" name="name"/>
|
||||
</record>
|
||||
|
|
|
@ -44,17 +44,6 @@
|
|||
|
||||
<menuitem action="project_issue_categ_action" name="Categories" id="menu_project_issue_category_act" parent="menu_project_confi" />
|
||||
|
||||
<record id="project_issue_stage_act" model="ir.actions.act_window">
|
||||
<field name="name">Issue Stages</field>
|
||||
<field name="res_model">crm.case.stage</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm.crm_case_stage_tree"/>
|
||||
<field name="domain">[('object_id.model', '=', 'project.issue')]</field>
|
||||
<field name="context">{'object_id':'project.issue'}</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="project_issue_stage_act" name="Stages" id="menu_project_issue_stage_act" parent="menu_project_confi"/>
|
||||
|
||||
<record model="ir.ui.view" id="project_issue_form_view">
|
||||
<field name="name">Project Issue Tracker Form</field>
|
||||
<field name="model">project.issue</field>
|
||||
|
@ -68,9 +57,9 @@
|
|||
<field name="user_id"/>
|
||||
<field name="assigned_to" />
|
||||
<group colspan="2" col="4">
|
||||
<field name="stage_id" on_change="onchange_stage_id(stage_id)" domain="[('object_id.model', '=', 'project.issue')]" widget="selection" readonly="1"/>
|
||||
<button icon="gtk-go-back" string="" name="stage_previous" type="object"/>
|
||||
<button icon="gtk-go-forward" string="" name="stage_next" type="object"/>
|
||||
<field name="type_id" widget="selection" readonly="1"/>
|
||||
<button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/>
|
||||
<button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
|
@ -191,14 +180,12 @@
|
|||
<field name="id"/>
|
||||
<field name="create_date"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="partner_id" groups="base.group_extended"/>
|
||||
<field name="project_id" />
|
||||
<field name="priority" string="Priority"/>
|
||||
<field name="stage_id" string="Resolution"/>
|
||||
<button icon="gtk-go-back" string="" name="stage_previous" type="object"
|
||||
states="open,draft,pending,done,cancel" />
|
||||
<button icon="gtk-go-forward" string="" name="stage_next" type="object"
|
||||
states="open,draft,pending,done,cancel" />
|
||||
<field name="type_id" widget="selection" readonly="1"/>
|
||||
<button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/>
|
||||
<button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/>
|
||||
<field name="version_id" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
<field name="assigned_to"/>
|
||||
|
@ -227,16 +214,20 @@
|
|||
<filter string="Pending" domain="[('state','=','pending')]" help="Pending Issues" icon="terp-gtk-media-pause"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-today" string="Today" separator="1" domain="[('create_date','=',time.strftime('%%Y-%%m-%%d'))]" help="Today's bugs" />
|
||||
<filter icon="terp-go-week" string="7 Days" separator="1"
|
||||
domain="[('create_date','<', time.strftime('%%Y-%%m-%%d')), ('create_date', '>=', (datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Bugs during last 7 days"
|
||||
/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name" string="Name"/>
|
||||
<field name="partner_id" string="Partner" />
|
||||
<field name="user_id"/>
|
||||
<field name="project_id" string="Project"/>
|
||||
<field name="categ_id"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id" groups="base.group_extended"/>
|
||||
<field name="user_id">
|
||||
<filter domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-" separator="1"/>
|
||||
</field>
|
||||
<field name="project_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Extended Filters..." groups="base.group_extended">
|
||||
<field name="categ_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]"/>
|
||||
<field name="version_id" widget="selection"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." groups="base.group_extended">
|
||||
|
@ -255,7 +246,7 @@
|
|||
<filter string="Priority" icon="terp-rating-rated" domain="[]"
|
||||
context="{'group_by':'priority'}" />
|
||||
<filter string="Stage" icon="terp-stage" domain="[]"
|
||||
context="{'group_by':'stage_id'}" />
|
||||
context="{'group_by':'type_id'}" />
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]"
|
||||
context="{'group_by':'state'}" />
|
||||
<separator orientation="vertical" />
|
||||
|
@ -291,13 +282,11 @@
|
|||
<tree string="Feature Tracker Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
<field name="id"/>
|
||||
<field name="name" string="Feature description"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="partner_id" groups="base.group_extended"/>
|
||||
<field name="priority" string="Priority"/>
|
||||
<field name="stage_id" string="Resolution"/>
|
||||
<button icon="gtk-go-back" string="" name="stage_previous" type="object"
|
||||
states="open,draft,pending,done,cancel" />
|
||||
<button icon="gtk-go-forward" string="" name="stage_next" type="object"
|
||||
states="open,draft,pending,done,cancel" />
|
||||
<field name="type_id" widget="selection" readonly="1"/>
|
||||
<button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/>
|
||||
<button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/>
|
||||
<field name="version_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="state"/>
|
||||
|
@ -317,12 +306,8 @@
|
|||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Feature Tracker Search">
|
||||
<group>
|
||||
<filter icon="terp-go-today" string=" Today " separator="1"
|
||||
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]" help="Today's features"/>
|
||||
<filter icon="terp-go-week" string=" 7 Days " separator="1"
|
||||
domain="[('date','<', time.strftime('%%Y-%%m-%%d')), ('date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" help="Features during last 7 days"/>
|
||||
</group>
|
||||
<filter icon="terp-go-today" string="Today" separator="1"
|
||||
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]" help="Today's features"/>
|
||||
<separator orientation="vertical"/>
|
||||
<group>
|
||||
<field name="name" select='1' string="Feature description"/>
|
||||
|
|
|
@ -75,7 +75,7 @@ class project_issue_report(osv.osv):
|
|||
'creation_date': fields.date('Creation Date', readonly=True),
|
||||
'date_closed': fields.date('Date of Closing', readonly=True),
|
||||
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"),
|
||||
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'project.issue')]"),
|
||||
'type_id': fields.many2one ('project.task.type', 'Stage'),
|
||||
'nbr': fields.integer('# of Issues', readonly=True),
|
||||
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True),
|
||||
'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True),
|
||||
|
@ -111,7 +111,7 @@ class project_issue_report(osv.osv):
|
|||
c.working_hours_close,
|
||||
c.section_id,
|
||||
c.categ_id,
|
||||
c.stage_id,
|
||||
c.type_id,
|
||||
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
|
||||
c.company_id as company_id,
|
||||
c.priority as priority,
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<field name="name" invisible="1"/>
|
||||
<field name="month" invisible="1"/>
|
||||
<field name="project_id" invisible="1"/>
|
||||
<field name="stage_id" invisible="1"/>
|
||||
<field name="type_id" invisible="1"/>
|
||||
<field name="version_id" string="Version" invisible="1"/>
|
||||
<field name="priority" invisible="1"/>
|
||||
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
|
||||
|
@ -101,7 +101,7 @@
|
|||
<separator orientation="vertical"/>
|
||||
<field name="version_id" widget="selection" />
|
||||
<field name="categ_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]"/>
|
||||
<field name="stage_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]" />
|
||||
<field name="type_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]" />
|
||||
<separator orientation="vertical"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<newline/>
|
||||
|
@ -129,7 +129,7 @@
|
|||
<filter string="Version" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'version_id'}"/>
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
||||
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'type_id'}"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize"
|
||||
domain="[]" context="{'group_by':'state'}" />
|
||||
<separator orientation="vertical"/>
|
||||
|
|
|
@ -8,15 +8,7 @@
|
|||
"access_crm_case_categ_supp","crm.case.categ","crm.model_crm_case_categ","project_issue.group_project_supporter",1,0,0,0
|
||||
"access_project_issue_version_project","project_issue_version manager","model_project_issue_version","project.group_project_manager",1,1,1,1
|
||||
"access_project_issue_version","project_issue_version manager","model_project_issue_version","project_issue.group_project_supporter",1,0,0,0
|
||||
"access_crm_case_stage_manager_suppo","crm.case.stage","crm.model_crm_case_stage","project_issue.group_project_supporter",1,0,0,0
|
||||
"access_project_issue_system","project.issue system","model_project_issue","base.group_system",1,0,0,0
|
||||
"access_crm_case_stage_manager_system","crm.case.stage system","crm.model_crm_case_stage","base.group_system",1,1,1,1
|
||||
"access_project_issue_report_system","project.issue.report system","model_project_issue_report","base.group_system",1,0,0,0
|
||||
"access_crm_case_section_system","crm.case.section system","crm.model_crm_case_section","base.group_system",1,1,1,1
|
||||
"access_project_issue_report_user","project.issue.report user","model_project_issue_report","project.group_project_user",1,0,0,0
|
||||
"access_hr_timesheet_sheet_sheet_project_user","hr_timesheet_sheet.sheet user","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_user",1,1,1,0
|
||||
"access_hr_analytic_timesheet_project_user","hr_analytic_timesheet user","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_user",1,1,1,0
|
||||
"access_hr_analytic_timesheet_project_manager","hr_analytic_timesheet manager","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_manager",1,0,0,0
|
||||
"access_hr_timesheet_sheet_sheet_project_manager","hr_timesheet_sheet.sheet manager","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_manager",1,0,0,0
|
||||
"access_hr_analytic_timesheet_system","hr_analytic_timesheet system","hr_timesheet_sheet.model_hr_analytic_timesheet","base.group_system",1,0,0,0
|
||||
"access_hr_timesheet_sheet_sheet_project_system","hr_timesheet_sheet.sheet system","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","base.group_system",1,0,0,0
|
||||
|
|
|
|
@ -37,6 +37,7 @@
|
|||
],
|
||||
'update_xml': [
|
||||
'project_issue_sheet_view.xml',
|
||||
'security/ir.model.access.csv',
|
||||
],
|
||||
'demo_xml': [
|
||||
],
|
||||
|
|
|
@ -13,13 +13,13 @@
|
|||
<field name="timesheet_ids" colspan="4" nolabel="1" context="{'default_user_id' : user_id, 'default_account_id' : analytic_account_id}">
|
||||
<tree editable="top" string="Timesheet">
|
||||
<field name="name"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" widget="float_time"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
|
||||
<field name="account_id" invisible="0" domain="[('partner_id', '=', parent.partner_id)]" on_change="on_change_account_id(account_id)"/>
|
||||
<field name="date"/>
|
||||
<field name="user_id"/>
|
||||
<field invisible="1" name="journal_id"/>
|
||||
<field invisible="1" name="product_id"/>
|
||||
<field invisible="1" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field invisible="1" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field invisible="1" name="amount"/>
|
||||
<field invisible="1" name="general_account_id"/>
|
||||
</tree>
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_hr_timesheet_sheet_sheet_project_user","hr_timesheet_sheet.sheet user","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_user",1,1,1,0
|
||||
"access_hr_analytic_timesheet_project_user","hr_analytic_timesheet user","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_user",1,1,1,0
|
||||
"access_hr_analytic_timesheet_project_manager","hr_analytic_timesheet manager","hr_timesheet_sheet.model_hr_analytic_timesheet","project.group_project_manager",1,0,0,0
|
||||
"access_hr_timesheet_sheet_sheet_project_manager","hr_timesheet_sheet.sheet manager","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","project.group_project_manager",1,0,0,0
|
||||
"access_hr_analytic_timesheet_system","hr_analytic_timesheet system","hr_timesheet_sheet.model_hr_analytic_timesheet","base.group_system",1,0,0,0
|
||||
"access_hr_timesheet_sheet_sheet_project_system","hr_timesheet_sheet.sheet system","hr_timesheet_sheet.model_hr_timesheet_sheet_sheet","base.group_system",1,0,0,0
|
||||
|
|
|
@ -98,7 +98,7 @@ class project_work(osv.osv):
|
|||
|
||||
# Compute based on pricetype
|
||||
amount_unit = obj_timesheet.on_change_unit_amount(cr, uid, timeline_id,
|
||||
prod_id, amount, unit, context=context)
|
||||
prod_id, amount, False, unit, context=context)
|
||||
if amount_unit and 'amount' in amount_unit.get('value',{}):
|
||||
updv = { 'amount': amount_unit['value']['amount'] }
|
||||
obj_timesheet.write(cr, uid, [timeline_id], updv, context=context)
|
||||
|
@ -112,6 +112,7 @@ class project_work(osv.osv):
|
|||
timesheet_obj = self.pool.get('hr.analytic.timesheet')
|
||||
project_obj = self.pool.get('project.project')
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
result = {}
|
||||
|
||||
if isinstance(ids, (long, int)):
|
||||
ids = [ids,]
|
||||
|
@ -139,13 +140,13 @@ class project_work(osv.osv):
|
|||
vals_line['unit_amount'] = vals['hours']
|
||||
prod_id = vals_line.get('product_id', line_id.product_id.id) # False may be set
|
||||
|
||||
if result['product_uom_id'] and (not result['product_uom_id'] == default_uom):
|
||||
if result.get('product_uom_id',False) and (not result['product_uom_id'] == default_uom):
|
||||
vals_line['unit_amount'] = uom_obj._compute_qty(cr, uid, default_uom, vals['hours'], result['product_uom_id'])
|
||||
|
||||
# Compute based on pricetype
|
||||
amount_unit = obj.on_change_unit_amount(cr, uid, line_id.id,
|
||||
prod_id=prod_id,
|
||||
unit_amount=vals_line['unit_amount'], unit=False, context=context)
|
||||
quantity=vals_line['unit_amount'], unit=False, context=context)
|
||||
|
||||
if amount_unit and 'amount' in amount_unit.get('value',{}):
|
||||
vals_line['amount'] = amount_unit['value']['amount']
|
||||
|
|
|
@ -31,5 +31,10 @@
|
|||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_project_billing" name="Billing"
|
||||
parent="base.menu_main_pm" sequence="5"/>
|
||||
<menuitem id="menu_project_billing_line" name="Bill Tasks Work"
|
||||
parent="menu_project_billing" action="hr_timesheet_invoice.action_hr_analytic_timesheet_open_tree"/>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -488,7 +488,7 @@
|
|||
<blockTable colWidths="530.0" style="Table_Main_Table">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_8">[[ format(o.amount_tax or removeParentNode('blockTable')) ]]</para>
|
||||
<para style="terp_default_8">[[ o.amount_tax and formatLang(o.amount_tax, digits=get_digits(dp='Account')) or removeParentNode('blockTable') ]]</para>
|
||||
<blockTable colWidths="54.0,58.0,67.0" style="Table_Tax_Header">
|
||||
<tr>
|
||||
<td>
|
||||
|
@ -516,10 +516,10 @@
|
|||
<para style="terp_default_Centre_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.amount) or 0.00 ]]</para>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.amount, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
from osv import osv, fields
|
||||
from tools.sql import drop_view_if_exists
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class res_country(osv.osv):
|
||||
|
@ -69,7 +70,7 @@ class report_intrastat(osv.osv):
|
|||
'code': fields.char('Country code', size=2, readonly=True),
|
||||
'intrastat_id': fields.many2one('report.intrastat.code', 'Intrastat code', readonly=True),
|
||||
'weight': fields.float('Weight', readonly=True),
|
||||
'value': fields.float('Value', readonly=True),
|
||||
'value': fields.float('Value', readonly=True, digits_compute=dp.get_precision('Account')),
|
||||
'type': fields.selection([('import', 'Import'), ('export', 'Export')], 'Type'),
|
||||
'currency_id': fields.many2one('res.currency', "Currency", readonly=True),
|
||||
}
|
||||
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-10-02 08:58+0000\n"
|
||||
"PO-Revision-Date: 2010-10-03 07:41+0000\n"
|
||||
"Last-Translator: Phong Nguyen <Unknown>\n"
|
||||
"Language-Team: Vietnamese <vi@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: 2010-10-03 04:57+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-04 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: sale
|
||||
|
@ -570,7 +570,7 @@ msgstr ""
|
|||
#. module: sale
|
||||
#: wizard_view:sale.advance_payment_inv,create:0
|
||||
msgid "Invoices"
|
||||
msgstr ""
|
||||
msgstr "Hóa đơn"
|
||||
|
||||
#. module: sale
|
||||
#: view:sale.order:0
|
||||
|
@ -595,7 +595,7 @@ msgstr ""
|
|||
#. module: sale
|
||||
#: field:sale.order.line,product_packaging:0
|
||||
msgid "Packaging"
|
||||
msgstr ""
|
||||
msgstr "Đóng gói"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.module.module,shortdesc:sale.module_meta_information
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -15,12 +15,14 @@
|
|||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
import tools
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class sale_journal_picking_report(osv.osv):
|
||||
"""
|
||||
|
@ -30,32 +32,32 @@ class sale_journal_picking_report(osv.osv):
|
|||
_description = "Picking lists"
|
||||
_auto = False
|
||||
_columns = {
|
||||
'name': fields.char('Year', size=64, required=False, readonly=True),
|
||||
'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'), ('05', 'May'), ('06', 'June'),
|
||||
('07', 'July'), ('08', 'August'), ('09', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True),
|
||||
'name': fields.char('Year', size=64, required=False, readonly=True),
|
||||
'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'), ('05', 'May'), ('06', 'June'),
|
||||
('07', 'July'), ('08', 'August'), ('09', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True),
|
||||
|
||||
'invoice_state':fields.selection([
|
||||
("invoiced", "invoiced"),
|
||||
("2binvoiced", "to be invoiced"),
|
||||
("invoiced", "invoiced"),
|
||||
("2binvoiced", "to be invoiced"),
|
||||
("none", "None")
|
||||
], "Invoice state", readonly=True),
|
||||
], "Invoice state", readonly=True),
|
||||
'state': fields.selection([
|
||||
('draft', 'draft'),
|
||||
('auto', 'waiting'),
|
||||
('confirmed', 'confirmed'),
|
||||
('assigned', 'assigned'),
|
||||
('done', 'done'),
|
||||
('cancel', 'cancel'),
|
||||
], 'State', readonly=True),
|
||||
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoicing method', readonly=True),
|
||||
'journal_id': fields.many2one('sale_journal.picking.journal', 'Journal', readonly=True),
|
||||
'quantity': fields.float('Quantities', readonly=True),
|
||||
'price_total': fields.float('Total Price', readonly=True),
|
||||
'price_average': fields.float('Average Price', readonly=True),
|
||||
'count': fields.integer('# of Lines', readonly=True),
|
||||
('draft', 'draft'),
|
||||
('auto', 'waiting'),
|
||||
('confirmed', 'confirmed'),
|
||||
('assigned', 'assigned'),
|
||||
('done', 'done'),
|
||||
('cancel', 'cancel'),
|
||||
], 'State', readonly=True),
|
||||
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoicing method', readonly=True),
|
||||
'journal_id': fields.many2one('sale_journal.picking.journal', 'Journal', readonly=True),
|
||||
'quantity': fields.float('Quantities', readonly=True),
|
||||
'price_total': fields.float('Total Price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
|
||||
'price_average': fields.float('Average Price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
|
||||
'count': fields.integer('# of Lines', readonly=True),
|
||||
}
|
||||
_order = 'journal_id, name desc, price_total desc'
|
||||
|
||||
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'sale_journal_picking_report')
|
||||
|
||||
|
@ -80,7 +82,7 @@ class sale_journal_picking_report(osv.osv):
|
|||
order by s.invoice_type_id, s.invoice_state, s.state
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
sale_journal_picking_report()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -318,7 +318,7 @@ class product_product(osv.osv):
|
|||
'track_outgoing': fields.boolean('Track Outgoing Lots', help="Forces to specify a Production Lot for all moves containing this product and going to a Customer Location"),
|
||||
'location_id': fields.dummy(string='Stock Location', relation='stock.location', type='many2one'),
|
||||
'valuation':fields.selection([('manual_periodic', 'Periodic (manual)'),
|
||||
('real_time','Real Time (automatized)'),], 'Stock Valuation', help="Decide if the system must automatically creates account moves based on stock moves", required=True),
|
||||
('real_time','Real Time (automatized)'),], 'Stock Valuation', help="Decide if the system must automatically create account moves based on stock moves", required=True),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
|
|
@ -167,10 +167,10 @@
|
|||
<para style="terp_default_Right_9">[[formatLang( p['prod_qty']) ]] [[ p['uom'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(p['price']) ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(p['price'], digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(p['price_value']) ]] [[ o.company_id.currency_id.symbol]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(p['price_value'], digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -184,7 +184,7 @@
|
|||
<para style="terp_default_Bold_9">Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang(price_total()) ]] [[ o.company_id.currency_id.symbol ]]</para>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang(price_total(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -201,7 +201,7 @@
|
|||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang(grand_total_price()) ]] [[ o.company_id.currency_id.symbol ]]</para>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang(grand_total_price(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -209,4 +209,4 @@
|
|||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
|
|
@ -167,10 +167,10 @@
|
|||
<para style="terp_default_Right_9">[[formatLang( p['prod_qty']) ]] [[ p['uom'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(p['price']) ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(p['price'], digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(p['price_value']) ]] [[ o.company_id.currency_id.symbol]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(p['price_value'], digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -184,7 +184,7 @@
|
|||
<para style="terp_default_Bold_9">Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang(price_total()) ]] [[ o.company_id.currency_id.symbol ]]</para>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang(price_total(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -201,7 +201,7 @@
|
|||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang(grand_total_price()) ]] [[ o.company_id.currency_id.symbol ]]</para>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang(grand_total_price(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
@ -209,4 +209,4 @@
|
|||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
import tools
|
||||
from osv import fields,osv
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class report_stock_move(osv.osv):
|
||||
|
@ -44,7 +45,7 @@ class report_stock_move(osv.osv):
|
|||
'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True),
|
||||
'product_qty_in':fields.integer('In Qty',readonly=True),
|
||||
'product_qty_out':fields.integer('Out Qty',readonly=True),
|
||||
'value' : fields.float('Total Value', required=True),
|
||||
'value' : fields.float('Total Value', required=True, digits_compute=dp.get_precision('Sale Price')),
|
||||
'day_diff2':fields.float('Delay (Days)',readonly=True, digits=(16,2), group_operator="avg"),
|
||||
'day_diff1':fields.float('Planned (Days)',readonly=True, digits=(16,2), group_operator="avg"),
|
||||
'day_diff':fields.float('Real (Days)',readonly=True, digits=(16,2), group_operator="avg"),
|
||||
|
@ -136,7 +137,7 @@ class report_stock_inventory(osv.osv):
|
|||
'prodlot_id': fields.many2one('stock.production.lot', 'Lot', readonly=True),
|
||||
'company_id': fields.many2one('res.company', 'Company', readonly=True),
|
||||
'product_qty':fields.float('Qty', digits=(16,2), readonly=True),
|
||||
'value' : fields.float('Total Value', digits=(16,2), required=True),
|
||||
'value' : fields.float('Total Value', digits=(16,2), required=True, digits_compute=dp.get_precision('Sale Price')),
|
||||
'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
|
||||
help='When the stock move is created it is in the \'Draft\' state.\n After that it is set to \'Confirmed\' state.\n If stock is available state is set to \'Avaiable\'.\n When the picking it done the state is \'Done\'.\
|
||||
\nThe state is \'Waiting\' if the move is waiting for another one.'),
|
||||
|
|
|
@ -110,7 +110,6 @@ class stock_location(osv.osv):
|
|||
@param field_names: Name of field
|
||||
@return: Dictionary of values
|
||||
"""
|
||||
result = dict([(i, {}.fromkeys(field_names, 0.0)) for i in ids])
|
||||
|
||||
product_product_obj = self.pool.get('product.product')
|
||||
|
||||
|
@ -118,6 +117,9 @@ class stock_location(osv.osv):
|
|||
res_products_by_location = sorted(cr.dictfetchall(), key=itemgetter('location_id'))
|
||||
products_by_location = dict((k, [v['product_id'] for v in itr]) for k, itr in groupby(res_products_by_location, itemgetter('location_id')))
|
||||
|
||||
result = dict([(i, {}.fromkeys(field_names, 0.0)) for i in ids])
|
||||
result.update(dict([(i, {}.fromkeys(field_names, 0.0)) for i in list(set([aaa['location_id'] for aaa in res_products_by_location]))]))
|
||||
|
||||
currency_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
|
||||
currency_obj = self.pool.get('res.currency')
|
||||
currency = self.pool.get('res.currency').browse(cr, uid, currency_id)
|
||||
|
@ -129,6 +131,8 @@ class stock_location(osv.osv):
|
|||
for prod in product_product_obj.browse(cr, uid, product_ids, context=c):
|
||||
for f in field_names:
|
||||
if f == 'stock_real':
|
||||
if loc_id not in result:
|
||||
result[loc_id] = {}
|
||||
result[loc_id][f] += prod.qty_available
|
||||
elif f == 'stock_virtual':
|
||||
result[loc_id][f] += prod.virtual_available
|
||||
|
|
Loading…
Reference in New Issue