@@ -378,7 +378,7 @@ class account_bank_statement(osv.osv):
|
||||
self.create_move_from_st_line(cr, uid, st_line.id, company_currency_id, st_line_number, context)
|
||||
|
||||
self.write(cr, uid, [st.id], {'name': st_number}, context=context)
|
||||
self.log(cr, uid, st.id, 'Statement %s is confirmed and entries are created.' % st_number)
|
||||
self.log(cr, uid, st.id, _('Statement %s is confirmed and entries are created.') % st_number)
|
||||
done.append(st.id)
|
||||
return self.write(cr, uid, ids, {'state':'confirm'}, context=context)
|
||||
|
||||
@@ -501,4 +501,4 @@ class account_bank_statement_line(osv.osv):
|
||||
|
||||
account_bank_statement_line()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<form string="Account Board">
|
||||
<hpaned>
|
||||
<child1>
|
||||
<action colspan="4" height="160" width="400" name="%(account.action_invoice_tree1)d" string="Draft Customer Invoices" domain="[('state','=','draft'),('type','=','out_invoice')]"/>
|
||||
<action colspan="4" height="160" width="400" name="%(account.action_invoice_tree1)d" string="Customer Invoices to Validate" domain="[('state','=','draft'),('type','=','out_invoice')]"/>
|
||||
<action colspan="4" height="160" width="400" name="%(action_company_analysis_tree)d" string="Company Analysis" />
|
||||
</child1>
|
||||
<child2>
|
||||
@@ -68,6 +68,6 @@
|
||||
|
||||
<menuitem id="menu_dashboard_acc" name="Dashboard" sequence="2" parent="account.menu_finance_reporting" groups="group_account_user,group_account_manager"/>
|
||||
<menuitem action="open_board_account" icon="terp-graph" id="menu_board_account" parent="menu_dashboard_acc" sequence="1"/>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
+17
-17
@@ -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-15 03:35+0000\n"
|
||||
"Last-Translator: sugi <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-16 04:44+0000\n"
|
||||
"Last-Translator: Гоби <Unknown>\n"
|
||||
"Language-Team: Mongolian <mn@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
@@ -647,7 +647,7 @@ msgstr "Харилцагчийн төлбөрийн нөхцөл"
|
||||
#. module: account
|
||||
#: view:account.move.reconcile:0
|
||||
msgid "Account Entry Reconcile"
|
||||
msgstr "Дансны бичилт гүйцээлт"
|
||||
msgstr "Дансны бичилт бууралт"
|
||||
|
||||
#. module: account
|
||||
#: wizard_button:account.move.bank.reconcile,init,open:0
|
||||
@@ -3119,7 +3119,7 @@ msgstr "Аналитик Журнал"
|
||||
#. module: account
|
||||
#: rml:account.general.ledger:0
|
||||
msgid "Entry Label"
|
||||
msgstr "Бичлэгийн нэр"
|
||||
msgstr "Гүйлгээний нэр"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,note:account.process_transition_paymentreconcile0
|
||||
@@ -4542,7 +4542,7 @@ msgstr "Дансны бичилт"
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.act_account_partner_account_move_unreconciled
|
||||
msgid "Receivables & Payables"
|
||||
msgstr "Авлагын данс болон төлбөр"
|
||||
msgstr "Авлага & Өглөг"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.general.ledger:0
|
||||
@@ -4625,7 +4625,7 @@ msgstr "Нийлүүлэгчийн санхүү бүртгэл"
|
||||
#. module: account
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Analytic Account Statistics"
|
||||
msgstr ""
|
||||
msgstr "Аналитик санхүүгийн статистик"
|
||||
|
||||
#. module: account
|
||||
#: view:wizard.multi.charts.accounts:0
|
||||
@@ -4657,7 +4657,7 @@ 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
|
||||
@@ -4837,7 +4837,7 @@ msgstr "А/к дугаар"
|
||||
#: model:ir.actions.act_window,name:account.report_account_analytic_journal_tree_month
|
||||
#: model:ir.ui.menu,name:account.report_account_analytic_journal_print_month
|
||||
msgid "Account cost and revenue by journal (This Month)"
|
||||
msgstr ""
|
||||
msgstr "Дансны өртөг, орлого журналаар"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.partner.balance.report,init,result_selection:0
|
||||
@@ -5036,7 +5036,7 @@ msgstr "Татварын тайлбар"
|
||||
#. module: account
|
||||
#: help:account.invoice,move_id:0
|
||||
msgid "Link to the automatically generated account moves."
|
||||
msgstr ""
|
||||
msgstr "Дансны автомат үүссэн шилжилтүүд рүү холбох"
|
||||
|
||||
#. module: account
|
||||
#: wizard_field:account.automatic.reconcile,reconcile,reconciled:0
|
||||
@@ -5058,7 +5058,7 @@ msgstr "/"
|
||||
#: model:process.node,note:account.process_node_invoiceinvoice0
|
||||
#: model:process.node,note:account.process_node_supplierinvoiceinvoice0
|
||||
msgid "Have a number and entries are generated"
|
||||
msgstr ""
|
||||
msgstr "Үүсгэгдсэн тоо болон бичлэгүүдийг агуулж байна"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.analytic.account.analytic.check:0
|
||||
@@ -5094,7 +5094,7 @@ msgstr "Журналын бүтэц"
|
||||
#. module: account
|
||||
#: view:account.subscription.line:0
|
||||
msgid "Subscription lines"
|
||||
msgstr ""
|
||||
msgstr "Бүртгэлийн мөрүүд"
|
||||
|
||||
#. module: account
|
||||
#: field:account.chart.template,property_account_income:0
|
||||
@@ -5425,7 +5425,7 @@ msgstr "Төлөлтийн нөхцөл"
|
||||
#. module: account
|
||||
#: selection:account.aged.trial.balance,init,result_selection:0
|
||||
msgid "Receivable and Payable"
|
||||
msgstr ""
|
||||
msgstr "Авлага болон өглөг"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.account.balance:0
|
||||
@@ -5528,7 +5528,7 @@ msgstr "Ерөнхий журнал"
|
||||
#: rml:account.third_party_ledger:0
|
||||
#: rml:account.third_party_ledger_other:0
|
||||
msgid "Balance"
|
||||
msgstr "Тэнцэл"
|
||||
msgstr "Баланс"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.invoice:0
|
||||
@@ -6077,7 +6077,7 @@ msgstr "Үнийн нэхэмжлэл"
|
||||
#. module: account
|
||||
#: view:board.board:0
|
||||
msgid "Aged receivables"
|
||||
msgstr "Насжилтын авлагын данс"
|
||||
msgstr "Авлагын насжилт"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.module.module,shortdesc:account.module_meta_information
|
||||
@@ -6326,7 +6326,7 @@ msgstr "Дансны төрлөөр"
|
||||
#. module: account
|
||||
#: model:ir.model,name:report_account.model_report_aged_receivable
|
||||
msgid "Aged Receivable Till Today"
|
||||
msgstr ""
|
||||
msgstr "Өнөөдрийг хүртэлх авлагын насжилт"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:report_account.model_report_account_receivable
|
||||
@@ -6368,7 +6368,7 @@ msgstr "Үүсгэх огноо"
|
||||
#: model:ir.actions.act_window,name:report_account.action_aged_receivable_graph
|
||||
#: view:report.aged.receivable:0
|
||||
msgid "Aged Receivable"
|
||||
msgstr "Насжилтын авлага"
|
||||
msgstr "Авлагын насжилт"
|
||||
|
||||
#. module: account
|
||||
#: view:report.invoice.created:0
|
||||
|
||||
@@ -375,6 +375,9 @@ class account_invoice(osv.osv):
|
||||
|
||||
def confirm_paid(self, cr, uid, ids, context=None):
|
||||
self.write(cr, uid, ids, {'state':'paid'}, context=context)
|
||||
for inv_id, name in self.name_get(cr, uid, ids, context=context):
|
||||
message = _('Invoice ') + " '" + name + "' "+ _("is marked as paid.")
|
||||
self.log(cr, uid, inv_id, message)
|
||||
return True
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
|
||||
@@ -287,7 +287,7 @@
|
||||
<td><para style="terp_tblheader_Details_Right">Currency</para></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><para style="terp_default_Bold_9">Total:([[ company.currency_id.code]])</para></td>
|
||||
<td><para style="terp_default_Bold_9">Total:</para></td>
|
||||
<td><para style="terp_default_Bold_9"><font color="white"> </font></para></td>
|
||||
<td><para style="terp_default_Bold_9_Right">[[ formatLang(sum_debit()) ]]</para></td>
|
||||
<td><para style="terp_default_Bold_9_Right">[[ formatLang( sum_credit()) ]]</para></td>
|
||||
|
||||
@@ -266,10 +266,10 @@
|
||||
<tr>
|
||||
<td><para style="Standard"><font color="white">[[ '..'*(o.level-1) ]]</font>[[ o.code ]] [[ o.name ]]</para></td>
|
||||
<td><para style="Standard"></para></td>
|
||||
<td alignment="right"><para style="P9b"><u>[[ formatLang(sum_debit_account(o), dp='Account') ]]</u></para></td>
|
||||
<td alignment="right"><para style="P9b"><u>[[ formatLang(sum_credit_account(o), dp='Account') ]]</u></para></td>
|
||||
<td><para style="P9b"><u>[[ formatLang(sum_balance_account(o), dp='Account') ]] [[ company.currency_id.symbol ]]</u></para></td>
|
||||
<td><para style="P9b"><u>[[ o.currency_id and formatLang(sum_currency_amount_account(o), dp='Account') + o.currency_id.code or '' ]]</u></para></td>
|
||||
<td alignment="right"><para style="P9b"><u>[[ formatLang(sum_debit_account(o), digits=get_digits(dp='Account')) ]]</u></para></td>
|
||||
<td alignment="right"><para style="P9b"><u>[[ formatLang(sum_credit_account(o), digits=get_digits(dp='Account')) ]]</u></para></td>
|
||||
<td><para style="P9b"><u>[[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]]</u></para></td>
|
||||
<td><para style="P9b"><u>[[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account')) + o.currency_id.code or '' ]]</u></para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
</td>
|
||||
@@ -292,9 +292,9 @@
|
||||
<td><para style="P2_content">[[ line['move'] ]]</para></td>
|
||||
<td><para style="P3_content">[[ line['lname'] ]]</para></td>
|
||||
<td><para style="P3_content_center">[[ strip_name(line['line_corresp'].replace(', ',','),40) ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['debit'], dp='Account') ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['credit'], dp='Account') ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['progress'], dp='Account') ]] [[ company.currency_id.symbol ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['debit'], digits=get_digits(dp='Account')) ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['credit'], digits=get_digits(dp='Account')) ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['progress'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]]</para></td>
|
||||
<td><para style="P4_content"><font>[[ (line['currency_id']==None or line['amount_currency']==None) and removeParentNode('font') ]] [[ formatLang(line['amount_currency'])]] [[ line['currency_code'] or '']]</font></para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -352,9 +352,9 @@
|
||||
<td><para style="P2_content">[[ line['move'] ]]</para></td>
|
||||
<td><para style="P3_content">[[ line['lname'] ]]</para></td>
|
||||
<td><para style="P3_content_center">[[ strip_name(line['line_corresp'],15) ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['debit'], dp='Account') ]] </para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['credit'], dp='Account') ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['progress'], dp='Account') ]] [[ company.currency_id.symbol ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['debit'], digits=get_digits(dp='Account')) ]] </para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['credit'], digits=get_digits(dp='Account')) ]]</para></td>
|
||||
<td><para style="P4_content">[[ formatLang(line['progress'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]]</para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@ class third_party_ledger(rml_parse.rml_parse, common_report_header):
|
||||
else:
|
||||
RECONCILE_TAG = "AND l.reconcile_id IS NULL"
|
||||
self.cr.execute(
|
||||
"SELECT l.id, l.date, j.code, acc.code as a_code, acc.name as a_name, l.ref, m.name as move_name, l.name, l.debit, l.credit, l.amount_currency, c.symbol AS currency_code " \
|
||||
"SELECT l.id, l.date, j.code, acc.code as a_code, acc.name as a_name, l.ref, m.name as move_name, l.name, l.debit, l.credit, l.amount_currency,l.currency_id, c.symbol AS currency_code " \
|
||||
"FROM account_move_line l " \
|
||||
"LEFT JOIN account_journal j " \
|
||||
"ON (l.journal_id = j.id) " \
|
||||
|
||||
@@ -487,7 +487,7 @@
|
||||
<para style="terp_default_Right_9">[[ formatLang((line['progress'])) ]] [[ company.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(line['amount_currency'] or '') ]] [[ line['currency_code'] or '' ]]</para>
|
||||
<para style="terp_default_Right_9"><font>[[ (line['currency_id']==None or line['amount_currency']==None) and removeParentNode('font') ]] [[ formatLang(line['amount_currency'] ) ]] [[ line['currency_code'] or '' ]]</font></para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
||||
@@ -627,7 +627,7 @@
|
||||
<para style="terp_default_Right_9">[[ formatLang((line['progress'])) ]] [[ company.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(line['amount_currency'] or '') ]] [[ line['currency_code'] or '' ]]</para>
|
||||
<para style="terp_default_Right_9"><font>[[ (line['currency_id']==None or line['amount_currency']==None) and removeParentNode('font') ]] [[ formatLang(line['amount_currency'] ) ]] [[ line['currency_code'] or '' ]]</font></para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<document filename="test.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Invoices" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
|
||||
<document filename="Invoices.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Invoices" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
|
||||
<pageTemplate id="first">
|
||||
<frame id="first" x1="34.0" y1="28.0" width="530" height="786"/>
|
||||
</pageTemplate>
|
||||
@@ -140,18 +140,18 @@
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_8">[[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]</para>
|
||||
<para style="terp_default_8">[[ o.address_invoice_id.street ]]</para>
|
||||
<para style="terp_default_8">[[ o.address_invoice_id.street2 or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">[[ o.address_invoice_id.zip or '' ]] [[ o.address_invoice_id.city or '' ]]</para>
|
||||
<para style="terp_default_8">[[ o.address_invoice_id.state_id and o.address_invoice_id.state_id.name or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">[[ o.address_invoice_id.country_id and o.address_invoice_id.country_id.name or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.street) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.street2) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.zip) or '' ]] [[ (o.address_invoice_id and o.address_invoice_id.city) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.country_id and o.address_invoice_id.country_id.name) or '' ]]</para>
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_8">Tel. : [[ o.address_invoice_id.phone or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">Fax : [[ o.address_invoice_id.fax or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">VAT : [[ o.partner_id.vat or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">Tel. : [[ (o.address_invoice_id and o.address_invoice_id.phone) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">Fax : [[ (o.address_invoice_id and o.address_invoice_id.fax) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">VAT : [[ (o.partner_id and o.partner_id.vat) or removeParentNode('para') ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -187,14 +187,14 @@
|
||||
<para style="terp_default_Centre_9">[[ formatLang(o.date_invoice,date=True) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_9">[[ o.address_invoice_id.partner_id.ref or ' ' ]]</para>
|
||||
<para style="terp_default_Centre_9">[[ (o.address_invoice_id and o.address_invoice_id.partner_id and o.address_invoice_id.partner_id.ref) or ' ' ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="219.0,87.0,56.0,56.0,51.0,62.0" style="Table7">
|
||||
<blockTable colWidths="219.0,87.0,62.0,56.0,46.0,62.0" style="Table7">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">Description</para>
|
||||
@@ -218,7 +218,7 @@
|
||||
</blockTable>
|
||||
<section>
|
||||
<para style="terp_default_2">[[ repeatIn(o.invoice_line,'l') ]]</para>
|
||||
<blockTable colWidths="218.0,88.0,56.0,56.0,51.0,62.0" style="Table8">
|
||||
<blockTable colWidths="218.0,88.0,62.0,55.0,46.0,62.0" style="Table8">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ l.name ]]</para>
|
||||
@@ -315,10 +315,10 @@
|
||||
<para style="Text body">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="167.0,59.0,56.0,247.0" style="Table9">
|
||||
<blockTable colWidths="206.0,51.0,49.0,225.0" style="Table9">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">Tax</para>
|
||||
<para style="terp_tblheader_Details">Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">Base </para>
|
||||
@@ -335,7 +335,7 @@
|
||||
</blockTable>
|
||||
<section>
|
||||
<para style="terp_default_2">[[ repeatIn(o.tax_line,'t') ]]</para>
|
||||
<blockTable colWidths="167.0,60.0,55.0,248.0" style="Table2">
|
||||
<blockTable colWidths="205.0,52.0,49.0,224.0" style="Table2">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
@@ -354,11 +354,14 @@
|
||||
</tr>
|
||||
</blockTable>
|
||||
</section>
|
||||
<para style="terp_default_9">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_9">[[ (o.comment and format(o.comment )) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_9">[[ (o.payment_term.note and format(o.payment_term and o.payment_term.note)) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">[[ (o.payment_term and o.payment_term.note and format(o.payment_term and o.payment_term.note)) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
@@ -368,7 +371,7 @@
|
||||
<para style="terp_default_Bold_9">Fiscal Position Remark : </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ (o.fiscal_position.note and format(o.fiscal_position and o.fiscal_position.note)) or removeParentNode('blockTable') ]]</para>
|
||||
<para style="terp_default_9">[[ (o.fiscal_position and o.fiscal_position.note and format(o.fiscal_position.note)) or removeParentNode('blockTable') ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
||||
@@ -37,9 +37,26 @@ class tax_report(rml_parse.rml_parse):
|
||||
'get_company': self._get_company,
|
||||
'get_currency': self._get_currency,
|
||||
'get_lines': self._get_lines,
|
||||
'get_years': self.get_years,
|
||||
})
|
||||
|
||||
|
||||
def get_years(self,form):
|
||||
res={}
|
||||
fiscal_year_name = self.pool.get('account.fiscalyear').name_get(self.cr,self.uid,form['fiscalyear'])
|
||||
|
||||
if fiscal_year_name:
|
||||
res['fname'] = fiscal_year_name[0][1]
|
||||
res['periods'] = ''
|
||||
if form['periods']:
|
||||
periods_l = self.pool.get('account.period').read(self.cr, self.uid, form['periods'], ['name'])
|
||||
for period in periods_l:
|
||||
if res['periods']=='':
|
||||
res['periods'] = period['name']
|
||||
else:
|
||||
res['periods'] += ", "+ period['name']
|
||||
return res
|
||||
|
||||
def _get_lines(self, based_on, period_list, company_id=False, parent=False, level=0, context={}):
|
||||
res = self._get_codes(based_on, company_id, parent, level, period_list, context=context)
|
||||
|
||||
|
||||
@@ -105,6 +105,16 @@
|
||||
</stylesheet>
|
||||
<story>
|
||||
<para style="P2">Tax Statement</para>
|
||||
<para style="P2"><font color="white"> </font></para>
|
||||
<blockTable colWidths="538" style="Tableau1">
|
||||
<tr>
|
||||
<td><para style="P12">Year : [[ get_years(data['form'])['fname'] ]]</para></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><para style="P12">Periods : [[ get_years(data['form'])['periods'] or removeParentNode('tr')]]</para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P2"><font color="white"> </font></para>
|
||||
<blockTable colWidths="340.0,55.0,55.0,90.0" style="Table2" repeatRows="1">
|
||||
<tr>
|
||||
<td><para style="P12">Tax Name</para></td>
|
||||
|
||||
@@ -24,13 +24,14 @@ from osv import osv, fields
|
||||
class account_vat_declaration(osv.osv_memory):
|
||||
_name = 'account.vat.declaration'
|
||||
_description = 'Account Vat Declaration'
|
||||
|
||||
_inherit = "account.common.account.report"
|
||||
_columns = {
|
||||
'based_on': fields.selection([('invoices','Invoices'),
|
||||
('payments','Payments'),],
|
||||
'based_on': fields.selection([('invoices','Invoices'),
|
||||
('payments','Payments'),],
|
||||
'Based On', required=True),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True),
|
||||
'periods': fields.many2many('account.period', 'vat_period_rel', 'vat_id', 'period_id', 'Periods', help="All periods if empty"),
|
||||
'fiscalyear': fields.many2many('account.fiscalyear','vat_fiscal_rel','fiscal_id','Fiscal Year',required=True),
|
||||
}
|
||||
|
||||
def _get_company(self, cr, uid, context={}):
|
||||
@@ -38,14 +39,14 @@ class account_vat_declaration(osv.osv_memory):
|
||||
company_obj = self.pool.get('res.company')
|
||||
user = user_obj.browse(cr, uid, uid, context=context)
|
||||
if user.company_id:
|
||||
return user.company_id.id
|
||||
return user.company_id.id
|
||||
else:
|
||||
return company_obj.search(cr, uid, [('parent_id', '=', False)])[0]
|
||||
|
||||
_defaults = {
|
||||
'based_on': 'invoices',
|
||||
'company_id': _get_company
|
||||
}
|
||||
'based_on': 'invoices',
|
||||
'company_id': _get_company
|
||||
}
|
||||
|
||||
def create_vat(self, cr, uid, ids, context={}):
|
||||
if context is None:
|
||||
@@ -57,8 +58,7 @@ class account_vat_declaration(osv.osv_memory):
|
||||
'type': 'ir.actions.report.xml',
|
||||
'report_name': 'account.vat.declaration',
|
||||
'datas': datas,
|
||||
}
|
||||
|
||||
}
|
||||
account_vat_declaration()
|
||||
|
||||
#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -10,10 +10,12 @@
|
||||
<form string="Select Period">
|
||||
<field name="company_id" groups="base.group_multi_company" widget='selection'/>
|
||||
<newline/>
|
||||
<field name="based_on" invisible="1"/>
|
||||
<field name="based_on"/>
|
||||
<newline/>
|
||||
<separator string="Select Period(s)" colspan="4"/>
|
||||
<field name="periods" nolabel="1" colspan="2"/>
|
||||
<field name="periods" nolabel="1" colspan="4"/>
|
||||
<separator string="Select FiscalYear(s)" colspan="4"/>
|
||||
<field name="fiscalyear" nolabel="1" colspan="4"/>
|
||||
<group col="2" colspan="4">
|
||||
<button icon='gtk-cancel' special="cancel" string="Cancel" />
|
||||
<button name="create_vat" string="Print Tax Statement" colspan="1" type="object" icon="gtk-ok"/>
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
# Mongolian translation for openobject-addons
|
||||
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-24 12:50+0000\n"
|
||||
"PO-Revision-Date: 2010-10-15 11:31+0000\n"
|
||||
"Last-Translator: sugi <Unknown>\n"
|
||||
"Language-Team: Mongolian <mn@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-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: view:product.category:0
|
||||
msgid " Accounting Property"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.module.module,description:account_anglo_saxon.module_meta_information
|
||||
msgid ""
|
||||
"This module will support the Anglo-Saxons accounting methodology by \n"
|
||||
" changing the accounting logic with stock transactions. The difference "
|
||||
"between the Anglo-Saxon accounting countries \n"
|
||||
" and the Rhine or also called Continental accounting countries is the "
|
||||
"moment of taking the Cost of Goods Sold versus Cost of Sales. \n"
|
||||
" Anglo-Saxons accounting does take the cost when sales invoice is "
|
||||
"created, Continental accounting will take the cost at he moment the goods "
|
||||
"are shipped.\n"
|
||||
" This module will add this functionality by using a interim account, to "
|
||||
"store the value of shipped goods and will contra book this interim account \n"
|
||||
" when the invoice is created to transfer this amount to the debtor or "
|
||||
"creditor account."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.module.module,shortdesc:account_anglo_saxon.module_meta_information
|
||||
msgid "Stock Account"
|
||||
msgstr "Агуулахын данс"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Дэлгэцийн XML алдаатай!"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: field:product.category,property_account_creditor_price_difference_categ:0
|
||||
#: field:product.template,property_account_creditor_price_difference:0
|
||||
msgid "Price Difference Account"
|
||||
msgstr "Үнийн өөрчлөлтийн данс"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: help:product.category,property_account_creditor_price_difference_categ:0
|
||||
#: help:product.template,property_account_creditor_price_difference:0
|
||||
msgid ""
|
||||
"This account will be used to value price difference between purchase price "
|
||||
"and cost price."
|
||||
msgstr ""
|
||||
"Энэ данс нь худалдан авалтын үнэ болон өртгийн үнийн хоорондох үнийн "
|
||||
"өөрчлөлтийг дүгнэхийн тулд ашиглагдана."
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-10-14 10:57+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 08:22+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_budget
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# Mongolian translation for openobject-addons
|
||||
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-19 12:03+0000\n"
|
||||
"PO-Revision-Date: 2010-10-15 11:33+0000\n"
|
||||
"Last-Translator: sugi <Unknown>\n"
|
||||
"Language-Team: Mongolian <mn@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-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_cancel
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Дэлгэцийн XML алдаатай!"
|
||||
|
||||
#. module: account_cancel
|
||||
#: model:ir.module.module,description:account_cancel.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
" Module adds 'Allow cancelling entries' field on form view of account "
|
||||
"journal. If set to true it allows user to cancel entries & invoices.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_cancel
|
||||
#: model:ir.module.module,shortdesc:account_cancel.module_meta_information
|
||||
msgid "Account Cancel"
|
||||
msgstr "Данс цуцлах"
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-24 13:11+0000\n"
|
||||
"PO-Revision-Date: 2010-10-14 20:51+0000\n"
|
||||
"Last-Translator: robert <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:33+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Croatian <hr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_coda
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-24 13:11+0000\n"
|
||||
"PO-Revision-Date: 2010-10-14 11:15+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 08:49+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_coda
|
||||
|
||||
@@ -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-14 11:52+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:03+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_followup
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<document filename="test.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Follow UP" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
|
||||
<document filename="Account Followup.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Account Followup" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
|
||||
<pageTemplate id="first">
|
||||
<frame id="first" x1="42.0" y1="28.0" width="511" height="786"/>
|
||||
<frame id="first" x1="31.0" y1="28.0" width="532" height="786"/>
|
||||
</pageTemplate>
|
||||
</template>
|
||||
<stylesheet>
|
||||
@@ -48,11 +48,13 @@
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,1" stop="1,1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,1" stop="2,1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="3,1" stop="3,1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="4,1" stop="4,1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="5,1" stop="5,1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table3">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/>
|
||||
</blockTableStyle>
|
||||
<initialize>
|
||||
<paraStyle name="all" alignment="justify"/>
|
||||
@@ -92,16 +94,16 @@
|
||||
<story>
|
||||
<para style="terp_default_8">[[ repeatIn(ids_to_objects(data['form']['partner_ids']),'o') ]] </para>
|
||||
<para style="terp_default_8">[[ setLang(o.lang) ]]</para>
|
||||
<blockTable colWidths="286.0,224.0" style="Tableau2">
|
||||
<blockTable colWidths="298.0,234.0" style="Tableau2">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ repeatIn(adr_get(o,'invoice'),'a' )]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ o.name ]]</para>
|
||||
<para style="terp_default_9">[[ a['street'] ]]</para>
|
||||
<para style="terp_default_9">[[ o.name or '' ]]</para>
|
||||
<para style="terp_default_9">[[ a['street'] or '']]</para>
|
||||
<para style="terp_default_9">[[ a['street2'] or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">[[ a['zip'] ]] [[ a['city'] ]]</para>
|
||||
<para style="terp_default_9">[[ a['zip'] or '' ]] [[ a['city'] or '' ]]</para>
|
||||
<para style="terp_default_9">[[( a['state_id'] and a['state_id'][1]) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">[[( a['country_id'] and a['country_id'][1]) or '']]</para>
|
||||
<para style="terp_default_9">
|
||||
@@ -124,7 +126,7 @@
|
||||
<para style="terp_default_9">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="68.0,78.0,45.0,70.0,51.0,58.0,62.0,61.0,27.0" style="Table1">
|
||||
<blockTable colWidths="66.0,77.0,46.0,74.0,52.0,62.0,59.0,67.0,29.0" style="Table1">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Centre">Invoice Date</para>
|
||||
@@ -157,7 +159,7 @@
|
||||
</blockTable>
|
||||
<section>
|
||||
<para style="terp_default_8">[[repeatIn(getLines(o), 'line') ]]</para>
|
||||
<blockTable colWidths="68.0,79.0,44.0,69.0,49.0,62.0,61.0,60.0,26.0" style="Table5">
|
||||
<blockTable colWidths="66.0,78.0,46.0,69.0,57.0,62.0,58.0,68.0,28.0" style="Table5">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ formatLang(line['date'],date = True) ]]</para>
|
||||
@@ -189,7 +191,7 @@
|
||||
</tr>
|
||||
</blockTable>
|
||||
</section>
|
||||
<blockTable colWidths="191.0,108.0,73.0,61.0,60.0,26.0" style="Table2">
|
||||
<blockTable colWidths="190.0,101.0,87.0,58.0,68.0,28.0" style="Table2">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_8">
|
||||
@@ -200,10 +202,10 @@
|
||||
<para style="terp_tblheader_Details">Sub-Total: </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[formatLang(reduce(lambda x,y: x+y['debit'], getLines(o), 0.00)) ]]</para>
|
||||
<para style="terp_default_Right_9">[[formatLang(reduce(lambda x,y: x+y['debit'], getLines(o), 0.00)) ]] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[formatLang(reduce(lambda x,y: x+y['credit'], getLines(o), 0.00)) ]]</para>
|
||||
<para style="terp_default_Right_9">[[formatLang(reduce(lambda x,y: x+y['credit'], getLines(o), 0.00)) ]] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(reduce(lambda x,y: x+(y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] < time.strftime('%Y-%m-%d'), getLines(o)), 0)) ]] [[ company.currency_id.symbol ]]</para>
|
||||
@@ -214,6 +216,8 @@
|
||||
</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<blockTable colWidths="193.0,92.0,100.0,147.0" style="Table3">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_8">
|
||||
@@ -224,27 +228,14 @@
|
||||
<para style="terp_tblheader_Details">Balance: </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang((reduce(lambda x,y: x+(y['debit'] - y['credit']), getLines(o), 0.00))) ]] [[ company.currency_id.symbol]] </para>
|
||||
<para style="terp_tblheader_Details_Right">[[ formatLang((reduce(lambda x,y: x+(y['debit'] - y['credit']), getLines(o), 0.00))) ]] [[ company.currency_id.symbol]] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="Standard">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="Standard">
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</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-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-10-14 12:09+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:39+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<document filename="test.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Invoices" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
|
||||
<document filename="Invoices.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Invoices" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
|
||||
<pageTemplate id="first">
|
||||
<frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
|
||||
</pageTemplate>
|
||||
@@ -185,18 +185,18 @@
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]</para>
|
||||
<para style="terp_default_9">[[ o.address_invoice_id.street ]]</para>
|
||||
<para style="terp_default_9">[[ o.address_invoice_id.street2 or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">[[ o.address_invoice_id.zip or '' ]][[ o.address_invoice_id.city or '' ]]</para>
|
||||
<para style="terp_default_9">[[ (o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para')]]</para>
|
||||
<para style="terp_default_9">[[ o.address_invoice_id.country_id and o.address_invoice_id.country_id.name or '' ]]</para>
|
||||
<para style="terp_default_9">
|
||||
<para style="terp_default_8">[[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.street) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.street2) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.zip) or '' ]] [[ (o.address_invoice_id and o.address_invoice_id.city) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.country_id and o.address_invoice_id.country_id.name) or '' ]]</para>
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_9">Tel. : [[ o.address_invoice_id.phone or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">Fax : [[ o.address_invoice_id.fax or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">VAT : [[ o.partner_id.vat or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">Tel. : [[ (o.address_invoice_id and o.address_invoice_id.phone) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">Fax : [[ (o.address_invoice_id and o.address_invoice_id.fax) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">VAT : [[ (o.partner_id and o.partner_id.vat) or removeParentNode('para') ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -238,7 +238,7 @@
|
||||
<para style="terp_default_Centre_8">[[ formatLang(o.date_invoice,date=True) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_8">[[ o.address_invoice_id.partner_id.ref or '' ]]</para>
|
||||
<para style="terp_default_Centre_9">[[ (o.address_invoice_id and o.address_invoice_id.partner_id and o.address_invoice_id.partner_id.ref) or ' ' ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -416,10 +416,10 @@
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="105.0,52.0,62.0,320.0" style="Table7">
|
||||
<blockTable colWidths="206.0,50.0,52.0,230.0" style="Table7">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">Tax</para>
|
||||
<para style="terp_tblheader_Details">Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">Base</para>
|
||||
@@ -436,16 +436,16 @@
|
||||
</blockTable>
|
||||
<section>
|
||||
<para style="terp_default_8">[[ repeatIn(o.tax_line,'t') ]]</para>
|
||||
<blockTable colWidths="105.0,51.0,63.0,320.0" style="Table8">
|
||||
<blockTable colWidths="206.0,49.0,52.0,230.0" style="Table8">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]]</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, digits=get_digits(dp='Account')) ]]</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')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<document filename="test.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Invoices" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
|
||||
<document filename="Invoices.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Invoices" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
|
||||
<pageTemplate id="first">
|
||||
<frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
|
||||
</pageTemplate>
|
||||
@@ -189,18 +189,18 @@
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]</para>
|
||||
<para style="terp_default_9">[[ o.address_invoice_id.street ]]</para>
|
||||
<para style="terp_default_9">[[ o.address_invoice_id.street2 or removeParentNode('para')]]</para>
|
||||
<para style="terp_default_9">[[ o.address_invoice_id.zip or '' ]][[ o.address_invoice_id.city or '' ]]</para>
|
||||
<para style="terp_default_9">[[ (o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">[[ o.address_invoice_id.country_id and o.address_invoice_id.country_id.name or '' ]]</para>
|
||||
<para style="terp_default_9">
|
||||
<para style="terp_default_8">[[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.street) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.street2) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.zip) or '' ]] [[ (o.address_invoice_id and o.address_invoice_id.city) or '' ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">[[ (o.address_invoice_id and o.address_invoice_id.country_id and o.address_invoice_id.country_id.name) or '' ]]</para>
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_9">Tel. : [[ o.address_invoice_id.phone or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">Fax : [[ o.address_invoice_id.fax or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_9">VAT : [[ o.partner_id.vat or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">Tel. : [[ (o.address_invoice_id and o.address_invoice_id.phone) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">Fax : [[ (o.address_invoice_id and o.address_invoice_id.fax) or removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_8">VAT : [[ (o.partner_id and o.partner_id.vat) or removeParentNode('para') ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -242,7 +242,7 @@
|
||||
<para style="terp_default_Centre_9">[[ formatLang(o.date_invoice,date=True) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_9">[[ o.address_invoice_id.partner_id.ref or '' ]]</para>
|
||||
<para style="terp_default_Centre_9">[[ (o.address_invoice_id and o.address_invoice_id.partner_id and o.address_invoice_id.partner_id.ref) or ' ' ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -420,10 +420,10 @@
|
||||
<para style="terp_default_8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="119.0,50.0,59.0,310.0" style="Table7">
|
||||
<blockTable colWidths="209.0,54.0,46.0,229.0" style="Table7">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">Tax</para>
|
||||
<para style="terp_tblheader_Details">Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Right">Base</para>
|
||||
@@ -439,17 +439,17 @@
|
||||
</tr>
|
||||
</blockTable>
|
||||
<section>
|
||||
<para style="terp_default_8">[[ repeatIn(o.tax_line,'t') ]]</para>
|
||||
<blockTable colWidths="120.0,49.0,60.0,310.0" style="Table8">
|
||||
<para style="terp_default_1">[[ repeatIn(o.tax_line,'t') ]]</para>
|
||||
<blockTable colWidths="209.0,55.0,46.0,229.0" style="Table8">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]]</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, digits=get_digits(dp='Account')) ]]</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')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">
|
||||
|
||||
@@ -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-14 06:58+0000\n"
|
||||
"Last-Translator: Jacara <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:14+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Mongolian <mn@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_payment
|
||||
|
||||
@@ -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 10:53+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"PO-Revision-Date: 2010-10-15 11:34+0000\n"
|
||||
"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.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:43+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_payment
|
||||
@@ -275,7 +275,7 @@ msgstr "Произвести платежи"
|
||||
#. module: account_payment
|
||||
#: field:payment.line,state:0
|
||||
msgid "Communication Type"
|
||||
msgstr ""
|
||||
msgstr "Тип коммуникации"
|
||||
|
||||
#. module: account_payment
|
||||
#: model:ir.module.module,shortdesc:account_payment.module_meta_information
|
||||
@@ -332,7 +332,7 @@ msgstr "Партнер"
|
||||
#. module: account_payment
|
||||
#: help:payment.line,communication2:0
|
||||
msgid "The successor message of Communication."
|
||||
msgstr ""
|
||||
msgstr "Приемник сообщения коммуникации"
|
||||
|
||||
#. module: account_payment
|
||||
#: help:payment.line,info_partner:0
|
||||
@@ -502,7 +502,7 @@ msgstr "Сумма в валюте партнера"
|
||||
#. module: account_payment
|
||||
#: field:payment.line,communication2:0
|
||||
msgid "Communication 2"
|
||||
msgstr ""
|
||||
msgstr "Коммуникации 2"
|
||||
|
||||
#. module: account_payment
|
||||
#: field:payment.line,bank_id:0
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-10-14 13:06+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:18+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_payment
|
||||
|
||||
@@ -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-14 13:59+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:23+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_reporting
|
||||
|
||||
@@ -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-14 14:04+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 08:46+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_tax_include
|
||||
|
||||
@@ -257,10 +257,9 @@ class account_voucher(osv.osv):
|
||||
|
||||
total = 0.0
|
||||
total_tax = 0.0
|
||||
|
||||
for line in line_ids:
|
||||
line_amount = 0.0
|
||||
line_amount = line[2].get('amount')
|
||||
line_amount = line[2] and line[2].get('amount',0.0) or 0.0
|
||||
voucher_line_ids += [line[1]]
|
||||
voucher_total += line_amount
|
||||
|
||||
|
||||
@@ -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-14 14:35+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:35+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_voucher
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-06-18 10:59+0000\n"
|
||||
"PO-Revision-Date: 2010-10-14 15:01+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 08:47+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: analytic
|
||||
|
||||
@@ -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-14 15:09+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:19+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: analytic_journal_billing_rate
|
||||
|
||||
@@ -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-14 15:16+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:40+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: analytic_user_function
|
||||
|
||||
@@ -7,19 +7,19 @@ 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-08-03 00:52+0000\n"
|
||||
"Last-Translator: mga (Open ERP) <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 12:05+0000\n"
|
||||
"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.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-29 05:13+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.module.module,shortdesc:audittrail.module_meta_information
|
||||
msgid "Audit Trail"
|
||||
msgstr ""
|
||||
msgstr "Проведение аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: constraint:ir.model:0
|
||||
@@ -43,6 +43,8 @@ msgstr "Подписка"
|
||||
#: view:audittrail.log:0
|
||||
msgid "Old Value : "
|
||||
msgstr ""
|
||||
"Старое значение.\\nпредставление пробела. Введите пробел в эквивалентную "
|
||||
"позицию перевода "
|
||||
|
||||
#. module: audittrail
|
||||
#: selection:audittrail.log,method:0
|
||||
@@ -52,7 +54,7 @@ msgstr "Создать"
|
||||
#. module: audittrail
|
||||
#: wizard_view:audittrail.view.log,init:0
|
||||
msgid "Audit Logs"
|
||||
msgstr ""
|
||||
msgstr "Логи аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,state:0
|
||||
@@ -82,7 +84,7 @@ msgstr "Просмотреть журнал"
|
||||
#. module: audittrail
|
||||
#: model:ir.model,name:audittrail.model_audittrail_log_line
|
||||
msgid "audittrail.log.line"
|
||||
msgstr ""
|
||||
msgstr "Строки лога аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,method:0
|
||||
@@ -92,17 +94,17 @@ msgstr "Метод"
|
||||
#. module: audittrail
|
||||
#: wizard_field:audittrail.view.log,init,from:0
|
||||
msgid "Log From"
|
||||
msgstr ""
|
||||
msgstr "Форма лога"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,log:0
|
||||
msgid "Log ID"
|
||||
msgstr ""
|
||||
msgstr "Идентификатор лога"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,res_id:0
|
||||
msgid "Resource Id"
|
||||
msgstr ""
|
||||
msgstr "Идентификатор записи"
|
||||
|
||||
#. module: audittrail
|
||||
#: selection:audittrail.log,method:0
|
||||
@@ -112,12 +114,12 @@ msgstr "Написать"
|
||||
#. module: audittrail
|
||||
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail
|
||||
msgid "Audittrails"
|
||||
msgstr ""
|
||||
msgstr "Проведение аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "Log Lines"
|
||||
msgstr ""
|
||||
msgstr "Строки лога"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
@@ -138,17 +140,17 @@ msgstr "Объект"
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "AuditTrail Rule"
|
||||
msgstr ""
|
||||
msgstr "Правила проведения аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: wizard_field:audittrail.view.log,init,to:0
|
||||
msgid "Log To"
|
||||
msgstr ""
|
||||
msgstr "Запись лога по"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "New Value Text: "
|
||||
msgstr ""
|
||||
msgstr "Новое значение текста: "
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.module.module,description:audittrail.module_meta_information
|
||||
@@ -158,6 +160,9 @@ msgid ""
|
||||
" Subscribe Rules for read, write, create and delete on objects and check "
|
||||
"logs"
|
||||
msgstr ""
|
||||
"Позволяет администратору отслеживать операции каждого пользователя по всем "
|
||||
"объектам системы.\\nУстанавливает правила читать, писать, создавать и "
|
||||
"удалять на объектах и проверить журналы."
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,timestamp:0
|
||||
@@ -172,7 +177,7 @@ msgstr "Пользователь"
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "Old Value Text : "
|
||||
msgstr ""
|
||||
msgstr "Старое значение текста: "
|
||||
|
||||
#. module: audittrail
|
||||
#: constraint:ir.ui.view:0
|
||||
@@ -187,12 +192,12 @@ msgstr "Название"
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log,line_ids:0
|
||||
msgid "Log lines"
|
||||
msgstr ""
|
||||
msgstr "Строги лога"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_rule_tree_sub
|
||||
msgid "Subscribed Rules"
|
||||
msgstr ""
|
||||
msgstr "Правила подписки"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,field_id:0
|
||||
@@ -202,12 +207,12 @@ msgstr "Поля"
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
msgid "AuditTrail Rules"
|
||||
msgstr ""
|
||||
msgstr "Правила проведения аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.model,name:audittrail.model_audittrail_rule
|
||||
msgid "audittrail.rule"
|
||||
msgstr ""
|
||||
msgstr "Правила аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.rule:0
|
||||
@@ -217,17 +222,17 @@ msgstr "Отписаться"
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_write:0
|
||||
msgid "Log writes"
|
||||
msgstr ""
|
||||
msgstr "Записи лога"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.model,name:audittrail.model_audittrail_log
|
||||
msgid "audittrail.log"
|
||||
msgstr ""
|
||||
msgstr "Журнал проведения аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,field_description:0
|
||||
msgid "Field Description"
|
||||
msgstr ""
|
||||
msgstr "Описание поля"
|
||||
|
||||
#. module: audittrail
|
||||
#: selection:audittrail.log,method:0
|
||||
@@ -237,12 +242,12 @@ msgstr "Удалить"
|
||||
#. module: audittrail
|
||||
#: wizard_button:audittrail.view.log,init,open:0
|
||||
msgid "Open Logs"
|
||||
msgstr ""
|
||||
msgstr "Открыть лог"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,new_value_text:0
|
||||
msgid "New value Text"
|
||||
msgstr ""
|
||||
msgstr "Новое значение текста"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,name:0
|
||||
@@ -252,7 +257,7 @@ msgstr "Название правила"
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_read:0
|
||||
msgid "Log reads"
|
||||
msgstr ""
|
||||
msgstr "Чтение лога"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_log_tree
|
||||
@@ -262,22 +267,22 @@ msgstr "Журналы"
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,new_value:0
|
||||
msgid "New Value"
|
||||
msgstr ""
|
||||
msgstr "Новое значение"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.ui.menu,name:audittrail.menu_action_log_tree2
|
||||
msgid "View Logs"
|
||||
msgstr ""
|
||||
msgstr "Чтение лога"
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_create:0
|
||||
msgid "Log creates"
|
||||
msgstr ""
|
||||
msgstr "Созданные журналы"
|
||||
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "AuditTrail Logs"
|
||||
msgstr ""
|
||||
msgstr "Логи проведения аудита"
|
||||
|
||||
#. module: audittrail
|
||||
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_rule_tree
|
||||
@@ -287,7 +292,7 @@ msgstr "Правила"
|
||||
#. module: audittrail
|
||||
#: view:audittrail.log:0
|
||||
msgid "New Value : "
|
||||
msgstr ""
|
||||
msgstr "Новое значение "
|
||||
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,user_id:0
|
||||
@@ -297,7 +302,7 @@ msgstr "Пользователи"
|
||||
#. module: audittrail
|
||||
#: field:audittrail.log.line,old_value_text:0
|
||||
msgid "Old value Text"
|
||||
msgstr ""
|
||||
msgstr "Старое значение текста"
|
||||
|
||||
#. module: audittrail
|
||||
#: wizard_button:audittrail.view.log,init,end:0
|
||||
@@ -307,4 +312,4 @@ msgstr "Отмена"
|
||||
#. module: audittrail
|
||||
#: field:audittrail.rule,log_unlink:0
|
||||
msgid "Log deletes"
|
||||
msgstr ""
|
||||
msgstr "Удаленные логи"
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_base_action_rule_tree"/>
|
||||
<field name="help">Create actions automatically triggered based on a user activity in the system.E.g.: an opportunity created by a specific user can be automatically maintained with a specific sales team, or an opportunity which still has status pending after 14 days triggers an automatic reminder email.</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_base_action_rule_form"
|
||||
|
||||
@@ -306,7 +306,7 @@ class calendar_attendee(osv.osv):
|
||||
res = obj.read(cr, uid, ids, ['object', 'name'], context=context)
|
||||
return [(r['object'], r['name']) for r in res]
|
||||
|
||||
def _lang_get(self, cr, uid, context={}):
|
||||
def _lang_get(self, cr, uid, context=None):
|
||||
"""
|
||||
Get language for language selection field.
|
||||
@param cr: the current row, from the database cursor,
|
||||
@@ -912,10 +912,10 @@ class calendar_event(osv.osv):
|
||||
_description = "Calendar Event"
|
||||
__attribute__ = {}
|
||||
|
||||
def _tz_get(self, cr, uid, context={}):
|
||||
def _tz_get(self, cr, uid, context=None):
|
||||
return [(x.lower(), x) for x in pytz.all_timezones]
|
||||
|
||||
def onchange_allday(self, cr, uid, ids, allday, context={}):
|
||||
def onchange_allday(self, cr, uid, ids, allday, context=None):
|
||||
"""Sets duration as 24 Hours if event is selcted for all day
|
||||
@param self: The object pointer
|
||||
@param cr: the current row, from the database cursor,
|
||||
@@ -1017,7 +1017,8 @@ class calendar_event(osv.osv):
|
||||
elif int(val.get('interval')) > 1: #If interval is other than 1 rule is custom
|
||||
rrule_type = 'custom'
|
||||
|
||||
qry = "UPDATE %(table)s set rrule_type=\'%(rule_type)s\' "
|
||||
qry = "UPDATE \"%s\" set rrule_type=%%s " % self._table
|
||||
qry_args = [ rrule_type, ]
|
||||
|
||||
if rrule_type == 'custom':
|
||||
new_val = val.copy()
|
||||
@@ -1055,17 +1056,12 @@ class calendar_event(osv.osv):
|
||||
new_val.pop('bymonth')
|
||||
|
||||
for k, v in new_val.items():
|
||||
temp = ", %s='%s'" % (k, v)
|
||||
qry += temp
|
||||
qry += ", %s=%%s" % k
|
||||
qry_args.append(v)
|
||||
|
||||
whr = " where id=%(id)s"
|
||||
qry = qry + whr
|
||||
val.update({
|
||||
'table': self._table,
|
||||
'rule_type': rrule_type,
|
||||
'id': id,
|
||||
})
|
||||
cr.execute(qry % val)
|
||||
qry = qry + " where id=%s"
|
||||
qry_args.append(id)
|
||||
cr.execute(qry, qry_args)
|
||||
return True
|
||||
|
||||
def _get_rulestring(self, cr, uid, ids, name, arg, context=None):
|
||||
@@ -1479,6 +1475,8 @@ true, it will allow you to hide the event alarm information without removing it.
|
||||
if not real_event_id in new_ids:
|
||||
new_ids.append(real_event_id)
|
||||
|
||||
if vals.get('vtimezone', '').startswith('/freeassociation.sourceforge.net/tzfile/'):
|
||||
vals['vtimezone'] = vals['vtimezone'][40:]
|
||||
if new_ids:
|
||||
res = super(calendar_event, self).write(cr, uid, new_ids, vals, context=context)
|
||||
if (vals.has_key('alarm_id') or vals.has_key('base_calendar_alarm_id'))\
|
||||
@@ -1489,7 +1487,7 @@ true, it will allow you to hide the event alarm information without removing it.
|
||||
context=context)
|
||||
return res
|
||||
|
||||
def browse(self, cr, uid, ids, context=None, list_class=None, fields_process={}):
|
||||
def browse(self, cr, uid, ids, context=None, list_class=None, fields_process=None):
|
||||
"""
|
||||
Overrides orm browse method.
|
||||
@param self: the object pointer
|
||||
@@ -1608,6 +1606,8 @@ true, it will allow you to hide the event alarm information without removing it.
|
||||
"""
|
||||
if not context:
|
||||
context = {}
|
||||
if vals.get('vtimezone', '') and vals.get('vtimezone', '').startswith('/freeassociation.sourceforge.net/tzfile/'):
|
||||
vals['vtimezone'] = vals['vtimezone'][40:]
|
||||
res = super(calendar_event, self).create(cr, uid, vals, context)
|
||||
alarm_obj = self.pool.get('res.alarm')
|
||||
alarm_obj.do_alarm_create(cr, uid, [res], self._name, 'date', context=context)
|
||||
@@ -1682,7 +1682,7 @@ class calendar_todo(osv.osv):
|
||||
@param args: list of tuples of form [(‘name_of_the_field’, ‘operator’, value), ...].
|
||||
@param context: A standard dictionary for contextual values
|
||||
"""
|
||||
|
||||
|
||||
assert name == 'date'
|
||||
return self.write(cr, uid, id, { 'date_start': value }, context=context)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_calendar_attendee","calendar.attendee","model_calendar_attendee","base.group_user",1,1,1,0
|
||||
"access_calendar_attendee","calendar.attendee","model_calendar_attendee","base.group_user",1,1,1,1
|
||||
"access_calendar_alarm","calendar.alarm","model_calendar_alarm","base.group_user",1,1,1,1
|
||||
"access_res_alarm","res.alarm","model_res_alarm","base.group_user",1,1,1,1
|
||||
"access_calendar_todo","calendar.todo","model_calendar_todo","base.group_user",1,1,1,1
|
||||
|
||||
|
@@ -8,35 +8,36 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-21 12:30+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2010-10-15 11:50+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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 04:58+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,sequence_contact:0
|
||||
msgid "Contact Seq."
|
||||
msgstr ""
|
||||
msgstr "Seq. Osobe"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.model,name:base_contact.model_res_partner_contact
|
||||
msgid "res.partner.contact"
|
||||
msgstr ""
|
||||
msgstr "es.partner.contact"
|
||||
|
||||
#. module: base_contact
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,function_id:0
|
||||
msgid "Partner Function"
|
||||
msgstr ""
|
||||
msgstr "Funkcija Partnera"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.actions.act_window,name:base_contact.action_partner_contact_form
|
||||
@@ -46,97 +47,97 @@ msgstr ""
|
||||
#: view:res.partner.address:0
|
||||
#: field:res.partner.address,job_ids:0
|
||||
msgid "Contacts"
|
||||
msgstr ""
|
||||
msgstr "Kontakti"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,sequence_partner:0
|
||||
msgid "Partner Seq."
|
||||
msgstr ""
|
||||
msgstr "Partner Seq."
|
||||
|
||||
#. module: base_contact
|
||||
#: selection:res.partner.job,state:0
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
msgstr "Trenutni"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,first_name:0
|
||||
msgid "First Name"
|
||||
msgstr ""
|
||||
msgstr "Ime"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.model,name:base_contact.model_res_partner_job
|
||||
msgid "Contact Partner Function"
|
||||
msgstr ""
|
||||
msgstr "Funkcija Kontakta Partnera"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,other:0
|
||||
msgid "Other"
|
||||
msgstr ""
|
||||
msgstr "Drugo"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,name:base_contact.process_transition_contacttofunction0
|
||||
msgid "Contact to function"
|
||||
msgstr ""
|
||||
msgstr "Kontakt na funkciju"
|
||||
|
||||
#. module: base_contact
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Pogrešno ime modela u definiciji akcije."
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,name:base_contact.process_transition_partnertoaddress0
|
||||
msgid "Partner to address"
|
||||
msgstr ""
|
||||
msgstr "Partner na adresu"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.address:0
|
||||
msgid "# of Contacts"
|
||||
msgstr ""
|
||||
msgstr "# Kontakata"
|
||||
|
||||
#. module: base_contact
|
||||
#: help:res.partner.job,other:0
|
||||
msgid "Additional phone field"
|
||||
msgstr ""
|
||||
msgstr "Dodatno polje za Tel"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,name:base_contact.process_node_function0
|
||||
msgid "Function"
|
||||
msgstr ""
|
||||
msgstr "Funkcija"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,fax:0
|
||||
msgid "Fax"
|
||||
msgstr ""
|
||||
msgstr "Faks"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,lang_id:0
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
msgstr "Jezik"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,phone:0
|
||||
msgid "Phone"
|
||||
msgstr ""
|
||||
msgstr "Telefon"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,note:base_contact.process_transition_contacttofunction0
|
||||
msgid "Defines contacts and functions."
|
||||
msgstr ""
|
||||
msgstr "Određuje Osobe i Funkcije"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,title:0
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
msgstr "Naslov"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.job:0
|
||||
msgid "Contact Functions"
|
||||
msgstr ""
|
||||
msgstr "Funkcije Osoba"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.module.module,shortdesc:base_contact.module_meta_information
|
||||
msgid "Base Contact"
|
||||
msgstr ""
|
||||
msgstr "Osnovni Kontakt"
|
||||
|
||||
#. module: base_contact
|
||||
#: help:res.partner.job,sequence_partner:0
|
||||
@@ -144,212 +145,214 @@ msgid ""
|
||||
"Order of importance of this job title in the list of job title of the linked "
|
||||
"partner"
|
||||
msgstr ""
|
||||
"redosled važnosti ovog naziva Posla-Radnog mesta u listi naziva Poslova-"
|
||||
"Radnih mesta povezanog Partnera"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,email:0
|
||||
#: field:res.partner.job,email:0
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
msgstr "E-Mail"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,date_stop:0
|
||||
msgid "Date Stop"
|
||||
msgstr ""
|
||||
msgstr "Datum Završetka"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner:0
|
||||
#: field:res.partner.job,address_id:0
|
||||
msgid "Address"
|
||||
msgstr ""
|
||||
msgstr "Adresa"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.actions.act_window,name:base_contact.action_res_partner_job
|
||||
#: model:ir.ui.menu,name:base_contact.menu_action_res_partner_job
|
||||
msgid "Contact's Jobs"
|
||||
msgstr ""
|
||||
msgstr "Poslovi kontakta"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,country_id:0
|
||||
msgid "Nationality"
|
||||
msgstr ""
|
||||
msgstr "Nacionalnost"
|
||||
|
||||
#. module: base_contact
|
||||
#: help:res.partner.job,sequence_contact:0
|
||||
msgid ""
|
||||
"Order of importance of this address in the list of addresses of the linked "
|
||||
"contact"
|
||||
msgstr ""
|
||||
msgstr "redosled važnosti ove Adrese u listi Adresa povezanog Partnera"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.address,job_id:0
|
||||
#: field:res.partner.contact,job_id:0
|
||||
msgid "Main Job"
|
||||
msgstr ""
|
||||
msgstr "Glavni Posao"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner:0
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
msgstr "Kategorije"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,function_id:0
|
||||
msgid "Main Function"
|
||||
msgstr ""
|
||||
msgstr "Glavna Funkcija"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,note:base_contact.process_transition_partnertoaddress0
|
||||
msgid "Define partners and their addresses."
|
||||
msgstr ""
|
||||
msgstr "Definisi Partnere i njihove Adrese"
|
||||
|
||||
#. module: base_contact
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Nevažeći XML za pregled arhitekture"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.process,name:base_contact.process_process_basecontactprocess0
|
||||
msgid "Base Contact Process"
|
||||
msgstr ""
|
||||
msgstr "Postupak Osnovnog Kontakta"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
msgid "Seq."
|
||||
msgstr ""
|
||||
msgstr "Sekv."
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,extension:0
|
||||
msgid "Extension"
|
||||
msgstr ""
|
||||
msgstr "Dodatak"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,mobile:0
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
msgstr "Mobilni"
|
||||
|
||||
#. module: base_contact
|
||||
#: help:res.partner.job,extension:0
|
||||
msgid "Internal/External extension phone number"
|
||||
msgstr ""
|
||||
msgstr "Interna/Externa Ekstenzija Tel. broja"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,note:base_contact.process_node_contacts0
|
||||
msgid "People you work with."
|
||||
msgstr ""
|
||||
msgstr "Ljudi s kojima radite."
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
msgid "Extra Information"
|
||||
msgstr ""
|
||||
msgstr "Dodatne informacije"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
#: field:res.partner.contact,job_ids:0
|
||||
msgid "Functions and Addresses"
|
||||
msgstr ""
|
||||
msgstr "Funkcije i Adrese"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "Aktivan"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,contact_id:0
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
msgstr "Kontakt"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,note:base_contact.process_node_partners0
|
||||
msgid "Companies you work with."
|
||||
msgstr ""
|
||||
msgstr "Kompanije s kojima radite."
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,partner_id:0
|
||||
msgid "Main Employer"
|
||||
msgstr ""
|
||||
msgstr "Glavni Poslodavac."
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,name:base_contact.process_transition_functiontoaddress0
|
||||
msgid "Function to address"
|
||||
msgstr ""
|
||||
msgstr "Funkcija na Adresu"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:ir.actions.act_window,name:base_contact.act_res_partner_jobs
|
||||
msgid "Partner Contacts"
|
||||
msgstr ""
|
||||
msgstr "Kontakti partnera"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
msgid "Partner Contact"
|
||||
msgstr ""
|
||||
msgstr "Kontakt partnera"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,name:base_contact.process_node_partners0
|
||||
msgid "Partners"
|
||||
msgstr ""
|
||||
msgstr "Partneri"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,name:base_contact.process_node_addresses0
|
||||
#: view:res.partner:0
|
||||
msgid "Addresses"
|
||||
msgstr ""
|
||||
msgstr "Adrese"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,note:base_contact.process_node_addresses0
|
||||
msgid "Working and private addresses."
|
||||
msgstr ""
|
||||
msgstr "Rad na Privatnoj adresi"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,name:0
|
||||
msgid "Last Name"
|
||||
msgstr ""
|
||||
msgstr "Prezime"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "Stanje"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
#: view:res.partner.job:0
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
msgstr "Opšte"
|
||||
|
||||
#. module: base_contact
|
||||
#: selection:res.partner.job,state:0
|
||||
msgid "Past"
|
||||
msgstr ""
|
||||
msgstr "Prošlost"
|
||||
|
||||
#. module: base_contact
|
||||
#: view:res.partner.contact:0
|
||||
msgid "General Information"
|
||||
msgstr ""
|
||||
msgstr "Opšte informacije"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.node,note:base_contact.process_node_function0
|
||||
msgid "Jobs at a same partner address."
|
||||
msgstr ""
|
||||
msgstr "Poslovi na istoj Adresi Partnera"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,name:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
msgstr "Partner"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.job,date_start:0
|
||||
msgid "Date Start"
|
||||
msgstr ""
|
||||
msgstr "Početni datum"
|
||||
|
||||
#. module: base_contact
|
||||
#: model:process.transition,note:base_contact.process_transition_functiontoaddress0
|
||||
msgid "Define functions and address."
|
||||
msgstr ""
|
||||
msgstr "Definisi Funkcije i Adrese"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,website:0
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
msgstr "Internet stranica"
|
||||
|
||||
#. module: base_contact
|
||||
#: field:res.partner.contact,birthdate:0
|
||||
msgid "Birth Date"
|
||||
msgstr ""
|
||||
msgstr "Datum rođenja"
|
||||
|
||||
+12
-12
@@ -8,57 +8,57 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-21 12:29+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2010-10-15 11:58+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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 04:52+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_iban
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Nevažeći XML za pregled arhitekture"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:res.partner.bank.type.field,name:base_iban.bank_zip_field
|
||||
msgid "zip"
|
||||
msgstr ""
|
||||
msgstr "Pošt. Broj"
|
||||
|
||||
#. module: base_iban
|
||||
#: help:res.partner.bank,iban:0
|
||||
msgid "International Bank Account Number"
|
||||
msgstr ""
|
||||
msgstr "Međunarodni broj Bankovnog računa"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:res.partner.bank.type.field,name:base_iban.bank_country_field
|
||||
msgid "country_id"
|
||||
msgstr ""
|
||||
msgstr "country_id"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:res.partner.bank.type.field,name:base_iban.bank_swift_field
|
||||
msgid "bic"
|
||||
msgstr ""
|
||||
msgstr "bic"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:res.partner.bank.type.field,name:base_iban.bank_iban_field
|
||||
msgid "iban"
|
||||
msgstr ""
|
||||
msgstr "iban"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:ir.module.module,shortdesc:base_iban.module_meta_information
|
||||
#: field:res.partner.bank,iban:0
|
||||
msgid "IBAN"
|
||||
msgstr ""
|
||||
msgstr "IBAN"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:res.partner.bank.type,name:base_iban.bank_iban
|
||||
msgid "IBAN Account"
|
||||
msgstr ""
|
||||
msgstr "IBAN konto"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:res.partner.bank.type.field,name:base_iban.bank_acc_number_field
|
||||
msgid "acc_number"
|
||||
msgstr ""
|
||||
msgstr "Broj konta"
|
||||
|
||||
@@ -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-14 15:37+0000\n"
|
||||
"PO-Revision-Date: 2010-10-15 12:04+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_quality
|
||||
@@ -138,32 +138,32 @@ msgstr "Sumarno"
|
||||
#. module: base_module_quality
|
||||
#: model:ir.actions.wizard,name:base_module_quality.quality_detail_save
|
||||
msgid "Report Save"
|
||||
msgstr ""
|
||||
msgstr "Sacuvaj Izvestaj"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: wizard_view:quality_detail_save,init:0
|
||||
msgid "Standard entries"
|
||||
msgstr ""
|
||||
msgstr "Standardne stavke"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Save Report"
|
||||
msgstr ""
|
||||
msgstr "Sacuvaj Izvestaj"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.actions.wizard,name:base_module_quality.create_quality_check_id
|
||||
msgid "Quality Check"
|
||||
msgstr ""
|
||||
msgstr "Provera Kvaliteta"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_module_quality_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
msgstr "modul.detalj.kvalitet"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: selection:module.quality.detail,state:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
msgstr "Gotovo"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
@@ -174,12 +174,12 @@ msgstr "Rezultat"
|
||||
#. module: base_module_quality
|
||||
#: wizard_button:quality_detail_save,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Otkaži"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,message:0
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
msgstr "Poruka"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check_id:0
|
||||
|
||||
@@ -8,99 +8,100 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-21 12:24+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2010-10-15 12:24+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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 04:58+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,category:0
|
||||
#: wizard_field:base_module_record.module_save,info,category:0
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
msgstr "Категорија"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||
#: wizard_field:base_module_record.module_save,init,info_text:0
|
||||
#: wizard_view:base_module_record.module_save,save:0
|
||||
msgid "Information"
|
||||
msgstr ""
|
||||
msgstr "Informacija"
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.model,name:base_module_record.model_ir_module_record
|
||||
msgid "ir.module.record"
|
||||
msgstr ""
|
||||
msgstr "ir.module.record"
|
||||
|
||||
#. module: base_module_record
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,init:0
|
||||
msgid "Choose objects to record"
|
||||
msgstr ""
|
||||
msgstr "Izaberi objekat za cuvanje"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,author:0
|
||||
#: wizard_field:base_module_record.module_save,info,author:0
|
||||
msgid "Author"
|
||||
msgstr ""
|
||||
msgstr "Autor"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,directory_name:0
|
||||
#: wizard_field:base_module_record.module_save,info,directory_name:0
|
||||
msgid "Directory Name"
|
||||
msgstr ""
|
||||
msgstr "Ime Direktorijuma"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,init,filter_cond:0
|
||||
msgid "Records only"
|
||||
msgstr ""
|
||||
msgstr "Samo Zapisi"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_record_objects,intro,data_kind:0
|
||||
#: selection:base_module_record.module_save,info,data_kind:0
|
||||
msgid "Demo Data"
|
||||
msgstr ""
|
||||
msgstr "Demo Podaci"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,save,module_filename:0
|
||||
#: wizard_field:base_module_record.module_save,save,module_filename:0
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
msgstr "Ime Fajla"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,version:0
|
||||
#: wizard_field:base_module_record.module_save,info,version:0
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
msgstr "Verzija"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,init:0
|
||||
msgid "Objects Recording"
|
||||
msgstr ""
|
||||
msgstr "Objekti se Snimaju"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,init,check_date:0
|
||||
msgid "Record from Date"
|
||||
msgstr ""
|
||||
msgstr "Zapis od Datuma"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,stop:0
|
||||
#: wizard_view:base_module_record.module_save,init:0
|
||||
msgid "Recording Information"
|
||||
msgstr ""
|
||||
msgstr "Informacija o Snimanju"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_save,init,info_status:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "Status"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,stop:0
|
||||
@@ -112,111 +113,111 @@ msgstr ""
|
||||
#: wizard_view:base_module_record.module_save,init:0
|
||||
#: wizard_view:base_module_record.module_save,save:0
|
||||
msgid "Module Recording"
|
||||
msgstr ""
|
||||
msgstr "Snimanje Modula"
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record_objects
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record_objects
|
||||
msgid "Export Customizations As a Module"
|
||||
msgstr ""
|
||||
msgstr "Izvezi Podesavanja kao Modul"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||
#: wizard_view:base_module_record.module_save,save:0
|
||||
msgid "Thanks in advance for your contribution."
|
||||
msgstr ""
|
||||
msgstr "Hvala unaprijed na Vašem Doprinosu"
|
||||
|
||||
#. module: base_module_record
|
||||
#: help:base_module_record.module_record_objects,init,objects:0
|
||||
msgid "List of objects to be recorded"
|
||||
msgstr ""
|
||||
msgstr "Lista Objekata za zapis"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_button:base_module_record.module_record,start,start_confirm:0
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record
|
||||
msgid "Start Recording"
|
||||
msgstr ""
|
||||
msgstr "Počni Snimanje"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_save,init,info_status:0
|
||||
msgid "Not Recording"
|
||||
msgstr ""
|
||||
msgstr "Ne Snima"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,description:0
|
||||
#: wizard_field:base_module_record.module_save,info,description:0
|
||||
msgid "Full Description"
|
||||
msgstr ""
|
||||
msgstr "Puni Opis"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,name:0
|
||||
#: wizard_field:base_module_record.module_save,info,name:0
|
||||
msgid "Module Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv Modula"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,init,objects:0
|
||||
msgid "Objects"
|
||||
msgstr ""
|
||||
msgstr "Objekti"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,save,module_file:0
|
||||
#: wizard_field:base_module_record.module_save,save,module_file:0
|
||||
msgid "Module .zip File"
|
||||
msgstr ""
|
||||
msgstr ".zip datoteka Modula"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,start:0
|
||||
msgid "Recording information"
|
||||
msgstr ""
|
||||
msgstr "Informacija o Snimanju"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||
#: wizard_view:base_module_record.module_save,save:0
|
||||
msgid "Module successfully created !"
|
||||
msgstr ""
|
||||
msgstr "Modul uspješno kreiran !"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,start:0
|
||||
msgid "Recording Stopped"
|
||||
msgstr ""
|
||||
msgstr "Snimanje zaustavljeno"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_record_objects,init,filter_cond:0
|
||||
msgid "Created"
|
||||
msgstr ""
|
||||
msgstr "Kreirano"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,end:0
|
||||
#: wizard_view:base_module_record.module_save,end:0
|
||||
msgid "Thanks For using Module Recorder"
|
||||
msgstr ""
|
||||
msgstr "Hvala što ste koristili Snimač Modula"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record,start,continue:0
|
||||
msgid "Continue Previous Session"
|
||||
msgstr ""
|
||||
msgstr "Nastavi Prethodnu Sesiju"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,website:0
|
||||
#: wizard_field:base_module_record.module_save,info,website:0
|
||||
msgid "Documentation URL"
|
||||
msgstr ""
|
||||
msgstr "URL Dokumentacije"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_record_objects,init,filter_cond:0
|
||||
msgid "Modified"
|
||||
msgstr ""
|
||||
msgstr "Izmenjen"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_save,init,info_status:0
|
||||
msgid "Recording"
|
||||
msgstr ""
|
||||
msgstr "Snimanje"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_button:base_module_record.module_record_objects,init,record:0
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
msgstr "Snima"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_button:base_module_record.module_record,stop,end:0
|
||||
@@ -224,25 +225,25 @@ msgstr ""
|
||||
#: wizard_button:base_module_record.module_save,info,save:0
|
||||
#: wizard_button:base_module_record.module_save,init,check:0
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "Nastavi"
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.module.module,shortdesc:base_module_record.module_meta_information
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_mod_rec_rec
|
||||
msgid "Module Recorder"
|
||||
msgstr ""
|
||||
msgstr "Snimač Modula"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_record_objects,intro,data_kind:0
|
||||
#: selection:base_module_record.module_save,info,data_kind:0
|
||||
msgid "Normal Data"
|
||||
msgstr ""
|
||||
msgstr "Obični podaci"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_button:base_module_record.module_record_objects,end,end:0
|
||||
#: wizard_button:base_module_record.module_save,end,end:0
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
msgstr "U redu"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||
@@ -252,6 +253,9 @@ msgid ""
|
||||
"publish it on OpenERP.com, in the 'Modules' section. You can do it through "
|
||||
"the website or using features of the 'base_module_publish' module."
|
||||
msgstr ""
|
||||
"Ako mislite da bi Vaš Modul mogao nekog zanimati, voljeli bismo da ga "
|
||||
"publicirate na OpenERP.com u sekciji \"Modules\". To možete putem weba ili "
|
||||
"korištenjem mogućnosti Modula: 'base_module_publish'."
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,start:0
|
||||
@@ -260,16 +264,19 @@ msgid ""
|
||||
"ERP client and save them as a module. You will be able to install this "
|
||||
"module on any database to reuse and/or publish it."
|
||||
msgstr ""
|
||||
"Snimač Modula omogućuje Vam da snimite svaku operaciju izvršenu u Open ERP "
|
||||
"klijentu i izmjene spremite kao Modul. Moći ćete instalirati taj Modul na "
|
||||
"bilo kojoj Bazi Podataka za ponovnu upotrebu ili publiciranje."
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record
|
||||
msgid "Record module"
|
||||
msgstr ""
|
||||
msgstr "Snimi Modul"
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_mod_rec
|
||||
msgid "Module Creation"
|
||||
msgstr ""
|
||||
msgstr "Kreacija Modula"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,stop:0
|
||||
@@ -277,30 +284,33 @@ msgid ""
|
||||
"You can continue the recording session by relauching the 'start recording' "
|
||||
"wizard."
|
||||
msgstr ""
|
||||
"Možete nastaviti snimanje tako da ponovo pokrenete Čarobnjak \"Počni "
|
||||
"Snimanje\""
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_field:base_module_record.module_record_objects,intro,data_kind:0
|
||||
#: wizard_field:base_module_record.module_save,info,data_kind:0
|
||||
msgid "Type of Data"
|
||||
msgstr ""
|
||||
msgstr "Tip Podataka"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record_objects,intro:0
|
||||
#: wizard_view:base_module_record.module_save,info:0
|
||||
msgid "Module Information"
|
||||
msgstr ""
|
||||
msgstr "Informacija o Modulu"
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_save
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_save
|
||||
msgid "Save Recorded Module"
|
||||
msgstr ""
|
||||
msgstr "Sacuvaj Snimljen Modul"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_view:base_module_record.module_record,stop:0
|
||||
msgid ""
|
||||
"Open ERP recording is stopped. Don't forget to save the recorded module."
|
||||
msgstr ""
|
||||
"OpenERP Snimač je zaustavljen. Ne zaboravite da sacuvate snimljen Modul."
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_button:base_module_record.module_record,start,end:0
|
||||
@@ -309,20 +319,20 @@ msgstr ""
|
||||
#: wizard_button:base_module_record.module_save,info,end:0
|
||||
#: wizard_button:base_module_record.module_save,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Otkaži"
|
||||
|
||||
#. module: base_module_record
|
||||
#: wizard_button:base_module_record.module_record_objects,save,end:0
|
||||
#: wizard_button:base_module_record.module_save,save,end:0
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "Zatvori"
|
||||
|
||||
#. module: base_module_record
|
||||
#: selection:base_module_record.module_record_objects,init,filter_cond:0
|
||||
msgid "Created & Modified"
|
||||
msgstr ""
|
||||
msgstr "Kreiran & Izmijenjen"
|
||||
|
||||
#. module: base_module_record
|
||||
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record_stop
|
||||
msgid "Stop Recording"
|
||||
msgstr ""
|
||||
msgstr "Zaustavi Snimanje"
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-21 12:24+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2010-10-15 12:52+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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:12+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_report_creator
|
||||
@@ -24,378 +24,381 @@ msgid ""
|
||||
"records.\n"
|
||||
" e.g. res_partner.id=3"
|
||||
msgstr ""
|
||||
"Unesite izraz za polje po kojem želite filtrirati zapise.\n"
|
||||
"npr. res_partner.id=3"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_graph_type:0
|
||||
msgid "Graph Type"
|
||||
msgstr ""
|
||||
msgstr "Tip grafikona"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Used View"
|
||||
msgstr ""
|
||||
msgstr "Korišten prikaz"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,set_value_select_field:0
|
||||
msgid "Filter Values"
|
||||
msgstr ""
|
||||
msgstr "Vrednosti filtra"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "Graph Mode"
|
||||
msgstr ""
|
||||
msgstr "Grafički"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Pogrešno ime modela u definiciji akcije."
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Graph View"
|
||||
msgstr ""
|
||||
msgstr "Grafički prikaz"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,expression:0
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
msgstr "Vrednost"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_set_filter_fields
|
||||
msgid "Set Filter Fields"
|
||||
msgstr ""
|
||||
msgstr "Postavi filterska polja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
msgstr "Datum završetka"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_filter
|
||||
msgid "Report Filters"
|
||||
msgstr ""
|
||||
msgstr "Filteri izvještaja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,sql_query:0
|
||||
msgid "SQL Query"
|
||||
msgstr ""
|
||||
msgstr "SQL upit"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: wizard_button:base_report_creator.report.menu.create,init,create_menu:0
|
||||
msgid "Create Menu"
|
||||
msgstr ""
|
||||
msgstr "Kreiraj Meni"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Minimum"
|
||||
msgstr ""
|
||||
msgstr "Minimum"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,operator:0
|
||||
msgid "Operator"
|
||||
msgstr ""
|
||||
msgstr "Operator"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.filter,condition:0
|
||||
#: selection:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "OR"
|
||||
msgstr ""
|
||||
msgstr "ILI"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.ui.menu,name:base_report_creator.menu_base_report_creator_action
|
||||
#: model:ir.ui.menu,name:base_report_creator.menu_base_report_creator_action_config
|
||||
msgid "Custom Reports"
|
||||
msgstr ""
|
||||
msgstr "Prilagođeni izvještaji"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report.menu.create,init:0
|
||||
msgid "Menu Information"
|
||||
msgstr ""
|
||||
msgstr "Informacije Menija"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Sum"
|
||||
msgstr ""
|
||||
msgstr "Suma"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,model_ids:0
|
||||
msgid "Reported Objects"
|
||||
msgstr ""
|
||||
msgstr "Navedeni objekti"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Field List"
|
||||
msgstr ""
|
||||
msgstr "Lista polja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,type:0
|
||||
msgid "Report Type"
|
||||
msgstr ""
|
||||
msgstr "Tip izveštaja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
msgstr "Stanje"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,state:0
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
msgstr "Potvrđeno"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Add filter"
|
||||
msgstr ""
|
||||
msgstr "Dodaj Filter"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_menu_create
|
||||
msgid "Create Menu for Report"
|
||||
msgstr ""
|
||||
msgstr "Kreiraj Meni za Izveštaje"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Form"
|
||||
msgstr ""
|
||||
msgstr "Obrazac"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "/"
|
||||
msgstr ""
|
||||
msgstr "/"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,report_id:0
|
||||
#: field:base_report_creator.report.filter,report_id:0
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report
|
||||
msgid "Report"
|
||||
msgstr ""
|
||||
msgstr "Izveštaj"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Starting Date"
|
||||
msgstr ""
|
||||
msgstr "Početni datum"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Nevažeći XML za pregled arhitekture"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Tree"
|
||||
msgstr ""
|
||||
msgstr "Stablo"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,group_ids:0
|
||||
msgid "Authorized Groups"
|
||||
msgstr ""
|
||||
msgstr "Autorizovane Grupe"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Graph Orientation"
|
||||
msgstr ""
|
||||
msgstr "Orjentacija grafikona"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Authorized Groups (empty for all)"
|
||||
msgstr ""
|
||||
msgstr "Autorizovane Grupe(Prazno za sve)"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Security"
|
||||
msgstr ""
|
||||
msgstr "Bezbednost"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report.menu.create,init,menu_name:0
|
||||
msgid "Menu Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv Menija"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.filter,condition:0
|
||||
#: selection:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "AND"
|
||||
msgstr ""
|
||||
msgstr "I"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Calendar Mode"
|
||||
msgstr ""
|
||||
msgstr "Kalendar Mod"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.model,name:base_report_creator.model_base_report_creator_report_fields
|
||||
msgid "Display Fields"
|
||||
msgstr ""
|
||||
msgstr "Polja Displeja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "Y Axis"
|
||||
msgstr ""
|
||||
msgstr "Y osa"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
msgstr "Kalendar"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_type1:0
|
||||
#: selection:base_report_creator.report,view_type2:0
|
||||
#: selection:base_report_creator.report,view_type3:0
|
||||
msgid "Graph"
|
||||
msgstr ""
|
||||
msgstr "Grafikon"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,field_id:0
|
||||
msgid "Field Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv polja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
msgstr "Priprema"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,set_value_select_field:0
|
||||
msgid "Set Filter Values"
|
||||
msgstr ""
|
||||
msgstr "Postavi Vrednosti Filtera"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "Status"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Vertical"
|
||||
msgstr ""
|
||||
msgstr "Uspravno"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,type:0
|
||||
msgid "Rows And Columns Report"
|
||||
msgstr ""
|
||||
msgstr "Izvestaj redova i kolona"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "General Configuration"
|
||||
msgstr ""
|
||||
msgstr "Opšte podešavanje"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report_filter.fields,init:0
|
||||
msgid "Select Field to filter"
|
||||
msgstr ""
|
||||
msgstr "Odaberite polje za filtriranje"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "Aktivan"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_orientation:0
|
||||
msgid "Horizontal"
|
||||
msgstr ""
|
||||
msgstr "Vodoravno"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,group_method:0
|
||||
msgid "Grouping Method"
|
||||
msgstr ""
|
||||
msgstr "Metod grupisanja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,condition:0
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,condition:0
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "Uslov"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
msgstr "Brojanje"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,graph_mode:0
|
||||
msgid "X Axis"
|
||||
msgstr ""
|
||||
msgstr "X osa"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report.menu.create,init,menu_parent_id:0
|
||||
msgid "Parent Menu"
|
||||
msgstr ""
|
||||
msgstr "Roditeljski Meni"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,set_value_select_field,set_value:0
|
||||
msgid "Confirm Filter"
|
||||
msgstr ""
|
||||
msgstr "Potvrdi Filter"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.filter,name:0
|
||||
msgid "Filter Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv Filtera"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.actions.wizard,name:base_report_creator.wizard_report_open
|
||||
msgid "Open Report"
|
||||
msgstr ""
|
||||
msgstr "Otvori izveštaj"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Grouped"
|
||||
msgstr ""
|
||||
msgstr "Grupisano"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: model:ir.module.module,shortdesc:base_report_creator.module_meta_information
|
||||
msgid "Report Creator"
|
||||
msgstr ""
|
||||
msgstr "Kreator izveštaja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report.menu.create,init,end:0
|
||||
#: wizard_button:base_report_creator.report_filter.fields,init,end:0
|
||||
#: wizard_button:base_report_creator.report_filter.fields,set_value_select_field,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Otkaži"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type1:0
|
||||
msgid "First View"
|
||||
msgstr ""
|
||||
msgstr "Prvi pogled"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Delay"
|
||||
msgstr ""
|
||||
msgstr "Kašnjenje"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,field_id:0
|
||||
msgid "Field"
|
||||
msgstr ""
|
||||
msgstr "Polje"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Filters on Fields"
|
||||
msgstr ""
|
||||
msgstr "Filteri na poljima"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_type:0
|
||||
msgid "Pie Chart"
|
||||
msgstr ""
|
||||
msgstr "Tortni grafikon"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type3:0
|
||||
msgid "Third View"
|
||||
msgstr ""
|
||||
msgstr "Treći pogled"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: model:ir.module.module,description:base_report_creator.module_meta_information
|
||||
@@ -407,85 +410,91 @@ msgid ""
|
||||
"After installing the module, it adds a menu to define custom report in\n"
|
||||
"the \"Dashboard\" menu.\n"
|
||||
msgstr ""
|
||||
"Ovi moduli vam dozvoljavaju kreiranje bilo kojeg statističkog\n"
|
||||
"izvještaja iz više objekata. To je graditelj SQL upita i pretrazivac\n"
|
||||
"za krajnje korisnike.\n"
|
||||
"\n"
|
||||
"Nakon instalacije, modul dodaje Meni za kreiranje prilagođenog izvještaja\n"
|
||||
"na Meniju Glavne Table.\n"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,calendar_mode:0
|
||||
msgid "Uniq Colors"
|
||||
msgstr ""
|
||||
msgstr "Jedinstvene boje"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,name:0
|
||||
msgid "Report Name"
|
||||
msgstr ""
|
||||
msgstr "Naziv izveštaja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Fields"
|
||||
msgstr ""
|
||||
msgstr "Polja"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Average"
|
||||
msgstr ""
|
||||
msgstr "Prosečno"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "Reports"
|
||||
msgstr ""
|
||||
msgstr "Izveštaji"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report.fields,group_method:0
|
||||
msgid "Maximum"
|
||||
msgstr ""
|
||||
msgstr "Maksimum"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_button:base_report_creator.report_filter.fields,init,set_value_select_field:0
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "Nastavi"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,set_value_select_field,value:0
|
||||
msgid "Values"
|
||||
msgstr ""
|
||||
msgstr "Вредности"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: selection:base_report_creator.report,view_graph_type:0
|
||||
msgid "Bar Chart"
|
||||
msgstr ""
|
||||
msgstr "Bar grafikon"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report,view_type2:0
|
||||
msgid "Second View"
|
||||
msgstr ""
|
||||
msgstr "Drugi pogled"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_view:base_report_creator.report.menu.create,init:0
|
||||
msgid "Create Menu For This Report"
|
||||
msgstr ""
|
||||
msgstr "Kreiraj Meni za ovaj izveštaj"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
msgid "View parameters"
|
||||
msgstr ""
|
||||
msgstr "Parametri prikaza"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: field:base_report_creator.report.fields,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
msgstr "Sekvenca"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: wizard_field:base_report_creator.report_filter.fields,init,field_id:0
|
||||
msgid "Filter Field"
|
||||
msgstr ""
|
||||
msgstr "polje Filtera"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,field_ids:0
|
||||
msgid "Fields to Display"
|
||||
msgstr ""
|
||||
msgstr "Polja za Prikaz"
|
||||
|
||||
#. module: base_report_creator
|
||||
#: view:base_report_creator.report:0
|
||||
#: field:base_report_creator.report,filter_ids:0
|
||||
msgid "Filters"
|
||||
msgstr ""
|
||||
msgstr "Filteri"
|
||||
|
||||
@@ -8,89 +8,89 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-09-21 12:23+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2010-10-15 13:03+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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:08+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_field:base_report_designer.modify,init,text:0
|
||||
msgid "Introduction"
|
||||
msgstr ""
|
||||
msgstr "Predstavljanje"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,send_form:0
|
||||
msgid "Upload your modified report"
|
||||
msgstr ""
|
||||
msgstr "Pošalji promenjen izveštaj na Server"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_button:base_report_designer.modify,get_form_result,send_form:0
|
||||
msgid "Upload the modified report"
|
||||
msgstr ""
|
||||
msgstr "Pošalji promenjen izveštaj na Server"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,get_form_result:0
|
||||
msgid "The .SXW report"
|
||||
msgstr ""
|
||||
msgstr ".SXW Izveštaj"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,send_form_result:0
|
||||
msgid "Report modified"
|
||||
msgstr ""
|
||||
msgstr "Izveštaj je promenjen"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_button:base_report_designer.modify,init,get_form:0
|
||||
msgid "Modify a report"
|
||||
msgstr ""
|
||||
msgstr "Izmeni Izveštaj"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,send_form_result:0
|
||||
msgid "Your report has been modified."
|
||||
msgstr ""
|
||||
msgstr "Vaš je Izveštaj izmenjen"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.module.module,shortdesc:base_report_designer.module_meta_information
|
||||
msgid "Report designer interface module"
|
||||
msgstr ""
|
||||
msgstr "Modul Interfejsa Dizajnera Izveštaja"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_field:base_report_designer.modify,get_form,report_id:0
|
||||
#: wizard_field:base_report_designer.modify,get_form_result,report_id:0
|
||||
#: wizard_field:base_report_designer.modify,send_form,report_id:0
|
||||
msgid "Report"
|
||||
msgstr ""
|
||||
msgstr "Izveštaj"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: model:ir.ui.menu,name:base_report_designer.menu_wizard_report_designer_modify
|
||||
msgid "Report Designer"
|
||||
msgstr ""
|
||||
msgstr "Dizajner Izvještaja"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,get_form:0
|
||||
#: wizard_view:base_report_designer.modify,get_form_result:0
|
||||
#: wizard_view:base_report_designer.modify,send_form:0
|
||||
msgid "Get a report"
|
||||
msgstr ""
|
||||
msgstr "Napravi Izvještaj"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_button:base_report_designer.modify,get_form,get_form_result:0
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "Nastavi"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_field:base_report_designer.modify,get_form_result,file_sxw:0
|
||||
#: wizard_field:base_report_designer.modify,send_form,file_sxw:0
|
||||
msgid "Your .SXW file"
|
||||
msgstr ""
|
||||
msgstr "Vaša .SXW datoteka"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,init:0
|
||||
msgid "Report designer"
|
||||
msgstr ""
|
||||
msgstr "Dizajner Izveštaja"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,get_form_result:0
|
||||
@@ -100,47 +100,51 @@ msgid ""
|
||||
"to modify it. Once it is modified, re-upload it in Open ERP using this "
|
||||
"wizard."
|
||||
msgstr ""
|
||||
"Ovo je Predložak vašeg traženog Izveštaja. Spremite ga kao .SXW datoteku i "
|
||||
"otvorite s programon OpenOffice. Ne zaboravite instalirati Tiny OpenOffice "
|
||||
"paket kako biste mogli vršiti izmjene. kad izvršite izmjene, vratite "
|
||||
"datoteku u Open ERP koristeći ovaj Čarobnjak."
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_button:base_report_designer.modify,send_form,send_form_result:0
|
||||
msgid "Update the report"
|
||||
msgstr ""
|
||||
msgstr "Ažurirajte Izvještaj"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: selection:base_report_designer.modify,init,operation:0
|
||||
msgid "Create a new report"
|
||||
msgstr ""
|
||||
msgstr "Napravi novi Izvještaj"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: selection:base_report_designer.modify,init,operation:0
|
||||
#: model:ir.actions.wizard,name:base_report_designer.wizard_report_designer_modify
|
||||
msgid "Modify an existing report"
|
||||
msgstr ""
|
||||
msgstr "Izmeni postojeći izveštaj"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_button:base_report_designer.modify,get_form,end:0
|
||||
#: wizard_button:base_report_designer.modify,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Otkaži"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_button:base_report_designer.modify,get_form_result,end:0
|
||||
#: wizard_button:base_report_designer.modify,send_form,end:0
|
||||
#: wizard_button:base_report_designer.modify,send_form_result,end:0
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "Zatvori"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_field:base_report_designer.modify,init,operation:0
|
||||
msgid "Operation"
|
||||
msgstr ""
|
||||
msgstr "Postupak"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,init:0
|
||||
msgid "Report designer introduction"
|
||||
msgstr ""
|
||||
msgstr "Uvod u Dizajner Izveštaja"
|
||||
|
||||
#. module: base_report_designer
|
||||
#: wizard_view:base_report_designer.modify,get_form:0
|
||||
msgid "Select your report"
|
||||
msgstr ""
|
||||
msgstr "Odaberite izvještaj"
|
||||
|
||||
@@ -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-14 15:31+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 08:51+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_setup
|
||||
|
||||
@@ -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-14 15:18+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 08:42+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_vat
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
'description': """Base module for all dashboards.""",
|
||||
'author': 'OpenERP SA',
|
||||
'depends': ['base'],
|
||||
'update_xml': ['security/board_security.xml','security/ir.model.access.csv', 'wizard/board_menu_create_view.xml', 'board_view.xml'],
|
||||
'update_xml': ['security/board_security.xml','security/ir.model.access.csv', 'wizard/board_menu_create_view.xml', 'board_view.xml','board_administration_view.xml'],
|
||||
'demo_xml': [],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- Latest Activities -->
|
||||
<record model="ir.ui.view" id="view_latest_activities_tree">
|
||||
<field name="name">latest.activities.tree</field>
|
||||
<field name="model">res.log</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Latest Activities">
|
||||
<field name="name"/>
|
||||
<field name="create_date"/>
|
||||
<field name="user_id" />
|
||||
<field name="res_model"/>
|
||||
<field name="res_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="action_latest_activities_tree">
|
||||
<field name="name">Latest Activities</field>
|
||||
<field name="res_model">res.log</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_latest_activities_tree"></field>
|
||||
</record>
|
||||
|
||||
<record id="board_administration_form" model="ir.ui.view">
|
||||
<field name="name">board.administration.form</field>
|
||||
<field name="model">board.board</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Administration Dashboard">
|
||||
<hpaned position="100">
|
||||
<child1>
|
||||
<action name="%(action_latest_activities_tree)d" string="Latest Activities" sequence="1"/>
|
||||
</child1>
|
||||
<child2>
|
||||
</child2>
|
||||
</hpaned>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="open_board_administration_form" model="ir.actions.act_window">
|
||||
<field name="name">Administration Dashboard</field>
|
||||
<field name="res_model">board.board</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="board_administration_form"/>
|
||||
</record>
|
||||
<menuitem id="menu_reporting" name="Reporting" parent="base.menu_administration" sequence="11"
|
||||
groups="base.group_extended"/>
|
||||
<menuitem id="board.admin_menu_dasboard" name="Dashboard" sequence="0" parent="menu_reporting"/>
|
||||
<menuitem id="menu_board_admin" action="open_board_administration_form" icon="terp-graph" parent="board.admin_menu_dasboard" />
|
||||
|
||||
<!-- User Connection -->
|
||||
<record model="ir.ui.view" id="view_user_connection_tree">
|
||||
<field name="name">user.connection.tree</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Latest Connections">
|
||||
<field name="name"/>
|
||||
<field name="date"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="action_user_connection_tree">
|
||||
<field name="name">Latest Connections</field>
|
||||
<field name="res_model">res.users</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_user_connection_tree"></field>
|
||||
</record>
|
||||
|
||||
<record id="board_user_connection_form" model="ir.ui.view">
|
||||
<field name="name">board.user.connection.form</field>
|
||||
<field name="model">board.board</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="board_administration_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/hpaned/child1/action[@string='Latest Activities']" position="after">
|
||||
<action width="510" name="%(action_user_connection_tree)d" string="Latest Connections" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
|
||||
|
||||
{
|
||||
"name" : "Share Calendar using Caldav",
|
||||
"version" : "1.0",
|
||||
"name" : "Share Calendar using CalDAV",
|
||||
"version" : "1.1",
|
||||
"depends" : [
|
||||
"base",
|
||||
"document_webdav",
|
||||
],
|
||||
],
|
||||
'description': """
|
||||
This module Contains basic functionality for caldav system like:
|
||||
- Webdav server that provides remote access to calendar
|
||||
@@ -34,7 +34,10 @@
|
||||
- Customize calendar event and todo attribute with any of OpenERP model
|
||||
- Provides iCal Import/Export functionality
|
||||
|
||||
To access OpenERP Calendar using caldav to remote site use the URL like:
|
||||
To access Calendars using CalDAV clients, point them to:
|
||||
http://HOSTNAME:PORT/webdav/DATABASE_NAME/calendars/users/USERNAME/c
|
||||
|
||||
To access OpenERP Calendar using WebCal to remote site use the URL like:
|
||||
http://HOSTNAME:PORT/webdav/DATABASE_NAME/Calendars/CALENDAR_NAME.ics
|
||||
|
||||
Where,
|
||||
@@ -53,7 +56,8 @@
|
||||
'wizard/calendar_event_export_view.xml',
|
||||
'wizard/calendar_event_import_view.xml',
|
||||
'wizard/calendar_event_subscribe_view.xml',
|
||||
'caldav_view.xml'
|
||||
'caldav_view.xml',
|
||||
'caldav_setup.xml'
|
||||
],
|
||||
"installable" : True,
|
||||
"active" : False,
|
||||
|
||||
+233
-175
@@ -20,41 +20,29 @@
|
||||
##############################################################################
|
||||
|
||||
import time
|
||||
from document import nodes
|
||||
from document_webdav import nodes
|
||||
from document.nodes import _str2time
|
||||
import logging
|
||||
import StringIO
|
||||
from orm_utils import get_last_modified
|
||||
|
||||
class node_database(nodes.node_database):
|
||||
def _child_get(self, cr, name=False, parent_id=False, domain=None):
|
||||
dirobj = self.context._dirobj
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
if not domain:
|
||||
domain = []
|
||||
domain2 = domain + [('calendar_collection','=', False)]
|
||||
res = super(node_database, self)._child_get(cr, name=name, parent_id=parent_id, domain=domain2)
|
||||
where = [('parent_id','=',parent_id)]
|
||||
domain2 = domain + [('calendar_collection','=', True)]
|
||||
if name:
|
||||
where.append(('name','=',name))
|
||||
if domain2:
|
||||
where += domain2
|
||||
try:
|
||||
from tools.dict_tools import dict_merge, dict_merge2
|
||||
except ImportError:
|
||||
from document.dict_tools import dict_merge, dict_merge2
|
||||
|
||||
where2 = where + [('type', '=', 'directory')]
|
||||
ids = dirobj.search(cr, uid, where2, context=ctx)
|
||||
for dirr in dirobj.browse(cr,uid,ids,context=ctx):
|
||||
res.append(node_calendar_collection(dirr.name,self,self.context,dirr))
|
||||
return res
|
||||
# TODO: implement DAV-aware errors, inherit from IOError
|
||||
|
||||
# Assuming that we have set global properties right, we mark *all*
|
||||
# directories as having calendar-access.
|
||||
nodes.node_dir.http_options = dict_merge2(nodes.node_dir.http_options,
|
||||
{ 'DAV': ['calendar-access',] })
|
||||
|
||||
class node_calendar_collection(nodes.node_dir):
|
||||
DAV_PROPS = {
|
||||
"http://calendarserver.org/ns/" : ('getctag',),
|
||||
}
|
||||
DAV_M_NS = {
|
||||
"http://calendarserver.org/ns/" : '_get_dav',
|
||||
}
|
||||
|
||||
http_options = { 'DAV': ['calendar-access'] }
|
||||
DAV_PROPS = dict_merge2(nodes.node_dir.DAV_PROPS,
|
||||
{ "http://calendarserver.org/ns/" : ('getctag',), } )
|
||||
DAV_M_NS = dict_merge2(nodes.node_dir.DAV_M_NS,
|
||||
{ "http://calendarserver.org/ns/" : '_get_dav', } )
|
||||
|
||||
def _file_get(self,cr, nodename=False):
|
||||
return []
|
||||
@@ -80,45 +68,117 @@ class node_calendar_collection(nodes.node_dir):
|
||||
for cal in fil_obj.browse(cr, uid, ids, context=ctx):
|
||||
if (not name) or not ext:
|
||||
res.append(node_calendar(cal.name, self, self.context, cal))
|
||||
if (not name) or ext:
|
||||
if self.context.get('DAV-client', '') in ('iPhone', 'iCalendar'):
|
||||
# these ones must not see the webcal entry.
|
||||
continue
|
||||
if cal.has_webcal and (not name) or ext:
|
||||
res.append(res_node_calendar(cal.name+'.ics', self, self.context, cal))
|
||||
# May be both of them!
|
||||
return res
|
||||
|
||||
def _get_dav_owner(self, cr):
|
||||
# Todo?
|
||||
return False
|
||||
|
||||
def _get_ttag(self, cr):
|
||||
return 'calen-dir-%d' % self.dir_id
|
||||
|
||||
def _get_dav_getctag(self, cr):
|
||||
result = self.get_etag(cr)
|
||||
return str(result)
|
||||
dirobj = self.context._dirobj
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
where = [('collection_id','=',self.dir_id)]
|
||||
bc_obj = dirobj.pool.get('basic.calendar')
|
||||
|
||||
res = get_last_modified(bc_obj, cr, uid, where, context=ctx)
|
||||
return _str2time(res)
|
||||
|
||||
class node_calendar_res_col(nodes.node_res_obj):
|
||||
""" Calendar collection, as a dynamically created node
|
||||
|
||||
This class shall be used instead of node_calendar_collection, when the
|
||||
node is under dynamic ones.
|
||||
"""
|
||||
DAV_PROPS = dict_merge2(nodes.node_res_obj.DAV_PROPS,
|
||||
{ "http://calendarserver.org/ns/" : ('getctag',), } )
|
||||
DAV_M_NS = dict_merge2(nodes.node_res_obj.DAV_M_NS,
|
||||
{ "http://calendarserver.org/ns/" : '_get_dav', } )
|
||||
|
||||
def _file_get(self,cr, nodename=False):
|
||||
return []
|
||||
|
||||
def _child_get(self, cr, name=False, parent_id=False, domain=None):
|
||||
dirobj = self.context._dirobj
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
where = [('collection_id','=',self.dir_id)]
|
||||
ext = False
|
||||
if name and name.endswith('.ics'):
|
||||
name = name[:-4]
|
||||
ext = True
|
||||
if name:
|
||||
where.append(('name','=',name))
|
||||
if not domain:
|
||||
domain = []
|
||||
where = where + domain
|
||||
fil_obj = dirobj.pool.get('basic.calendar')
|
||||
ids = fil_obj.search(cr,uid,where,context=ctx)
|
||||
res = []
|
||||
# TODO: shall we use any of our dynamic information??
|
||||
for cal in fil_obj.browse(cr, uid, ids, context=ctx):
|
||||
if (not name) or not ext:
|
||||
res.append(node_calendar(cal.name, self, self.context, cal))
|
||||
if self.context.get('DAV-client', '') in ('iPhone', 'iCalendar'):
|
||||
# these ones must not see the webcal entry.
|
||||
continue
|
||||
if cal.has_webcal and (not name) or ext:
|
||||
res.append(res_node_calendar(cal.name+'.ics', self, self.context, cal))
|
||||
# May be both of them!
|
||||
return res
|
||||
|
||||
def _get_ttag(self, cr):
|
||||
return 'calen-dir-%d' % self.dir_id
|
||||
|
||||
def _get_dav_getctag(self, cr):
|
||||
dirobj = self.context._dirobj
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
where = [('collection_id','=',self.dir_id)]
|
||||
bc_obj = dirobj.pool.get('basic.calendar')
|
||||
|
||||
res = get_last_modified(bc_obj, cr, uid, where, context=ctx)
|
||||
return _str2time(res)
|
||||
|
||||
class node_calendar(nodes.node_class):
|
||||
our_type = 'collection'
|
||||
DAV_PROPS = {
|
||||
"DAV:": ('principal-collection-set'),
|
||||
"http://cal.me.com/_namespace/" : ('user-state'),
|
||||
"http://calendarserver.org/ns/" : (
|
||||
'dropbox-home-URL',
|
||||
'notification-URL',
|
||||
'getctag',),
|
||||
"DAV:": ('supported-report-set',),
|
||||
# "http://cal.me.com/_namespace/" : ('user-state',),
|
||||
"http://calendarserver.org/ns/" : ( 'getctag',),
|
||||
'http://groupdav.org/': ('resourcetype',),
|
||||
"urn:ietf:params:xml:ns:caldav" : (
|
||||
'calendar-description',
|
||||
'calendar-description',
|
||||
'supported-calendar-component-set',
|
||||
),
|
||||
"http://apple.com/ns/ical/": ("calendar-color", "calendar-order"),
|
||||
}
|
||||
DAV_PROPS_HIDDEN = {
|
||||
"urn:ietf:params:xml:ns:caldav" : (
|
||||
'calendar-data',
|
||||
'calendar-home-set',
|
||||
'calendar-user-address-set',
|
||||
'schedule-inbox-URL',
|
||||
'schedule-outbox-URL',)}
|
||||
'calendar-timezone',
|
||||
'supported-calendar-data',
|
||||
'max-resource-size',
|
||||
'min-date-time',
|
||||
'max-date-time',
|
||||
)}
|
||||
|
||||
DAV_M_NS = {
|
||||
"DAV:" : '_get_dav',
|
||||
"http://cal.me.com/_namespace/": '_get_dav',
|
||||
# "http://cal.me.com/_namespace/": '_get_dav',
|
||||
'http://groupdav.org/': '_get_gdav',
|
||||
"http://calendarserver.org/ns/" : '_get_dav',
|
||||
"urn:ietf:params:xml:ns:caldav" : '_get_caldav'}
|
||||
"urn:ietf:params:xml:ns:caldav" : '_get_caldav',
|
||||
"http://apple.com/ns/ical/": '_get_apple_cal',
|
||||
}
|
||||
|
||||
http_options = { 'DAV': ['calendar-access'] }
|
||||
|
||||
@@ -131,42 +191,33 @@ class node_calendar(nodes.node_class):
|
||||
self.content_length = 0
|
||||
self.displayname = calendar.name
|
||||
self.cal_type = calendar.type
|
||||
self.cal_color = calendar.calendar_color or None
|
||||
self.cal_order = calendar.calendar_order or None
|
||||
try:
|
||||
self.uuser = (calendar.user_id and calendar.user_id.login) or 'nobody'
|
||||
except Exception:
|
||||
self.uuser = 'nobody'
|
||||
|
||||
def _get_dav_getctag(self, cr):
|
||||
result = self._get_ttag(cr) + ':' + str(time.time())
|
||||
return str(result)
|
||||
dirobj = self.context._dirobj
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
|
||||
def _get_dav_dropbox_home_URL(self, cr):
|
||||
import urllib
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
|
||||
calendar = calendar_obj.browse(cr, uid, self.calendar_id, context=ctx)
|
||||
res = '%s/%s' %(calendar.collection_id.name, calendar.name)
|
||||
url = urllib.quote('/%s/%s' % (cr.dbname, res))
|
||||
return url
|
||||
|
||||
def _get_dav_notification_URL(self, cr):
|
||||
import urllib
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
|
||||
calendar = calendar_obj.browse(cr, uid, self.calendar_id, context=ctx)
|
||||
res = '%s/%s' %(calendar.collection_id.name, calendar.name)
|
||||
url = urllib.quote('/%s/%s' % (cr.dbname, res))
|
||||
return url
|
||||
bc_obj = dirobj.pool.get('basic.calendar')
|
||||
res = bc_obj.get_cal_max_modified(cr, uid, [self.calendar_id], self, domain=[], context=ctx)
|
||||
return _str2time(res)
|
||||
|
||||
def _get_dav_user_state(self, cr):
|
||||
#TODO
|
||||
return True
|
||||
|
||||
return 'online'
|
||||
|
||||
def get_dav_resourcetype(self, cr):
|
||||
res = [ ('collection', 'DAV:'),
|
||||
(str(self.cal_type + '-collection'), 'http://groupdav.org/'),
|
||||
('calendar', 'urn:ietf:params:xml:ns:caldav') ]
|
||||
('calendar', 'urn:ietf:params:xml:ns:caldav'),
|
||||
]
|
||||
if self.context.get('DAV-client', '') == 'GroupDAV':
|
||||
res.append((str(self.cal_type + '-collection'), 'http://groupdav.org/'))
|
||||
return res
|
||||
|
||||
def get_domain(self, cr, filters):
|
||||
@@ -174,6 +225,7 @@ class node_calendar(nodes.node_class):
|
||||
res = []
|
||||
if not filters:
|
||||
return res
|
||||
_log = logging.getLogger('caldav.query')
|
||||
if filters.localName == 'calendar-query':
|
||||
res = []
|
||||
for filter_child in filters.childNodes:
|
||||
@@ -189,26 +241,33 @@ class node_calendar(nodes.node_class):
|
||||
if vevent_filter.nodeType == vevent_filter.TEXT_NODE:
|
||||
continue
|
||||
if vevent_filter.localName == 'comp-filter':
|
||||
if vevent_filter.getAttribute('name') == 'VEVENT':
|
||||
res = [('type','=','vevent')]
|
||||
if vevent_filter.getAttribute('name') == 'VTODO':
|
||||
res = [('type','=','vtodo')]
|
||||
if vevent_filter.getAttribute('name'):
|
||||
res = [('type','=',vevent_filter.getAttribute('name').lower() )]
|
||||
|
||||
for cfe in vevent_filter.childNodes:
|
||||
if cfe.localName == 'time-range':
|
||||
if cfe.getAttribute('start'):
|
||||
_log.warning("Ignore start.. ")
|
||||
# No, it won't work in this API
|
||||
#val = cfe.getAttribute('start')
|
||||
#res += [('dtstart','=', cfe)]
|
||||
elif cfe.getAttribute('end'):
|
||||
_log.warning("Ignore end.. ")
|
||||
else:
|
||||
_log.debug("Unknown comp-filter: %s", cfe.localName)
|
||||
else:
|
||||
_log.debug("Unknown comp-filter: %s", vevent_filter.localName)
|
||||
else:
|
||||
_log.debug("Unknown filter element: %s", vcalendar_filter.localName)
|
||||
else:
|
||||
_log.debug("Unknown calendar-query element: %s", filter_child.localName)
|
||||
return res
|
||||
elif filters.localName == 'calendar-multiget':
|
||||
names = []
|
||||
for filter_child in filters.childNodes:
|
||||
if filter_child.nodeType == filter_child.TEXT_NODE:
|
||||
continue
|
||||
if filter_child.localName == 'href':
|
||||
if not filter_child.firstChild:
|
||||
continue
|
||||
uri = filter_child.firstChild.data
|
||||
caluri = uri.split('/')
|
||||
if len(caluri):
|
||||
caluri = caluri[-2]
|
||||
if caluri not in names : names.append(caluri)
|
||||
res = [('name','in',names)]
|
||||
return res
|
||||
# this is not the place to process, as it wouldn't support multi-level
|
||||
# hrefs. So, the code is moved to document_webdav/dav_fs.py
|
||||
pass
|
||||
else:
|
||||
_log.debug("Unknown element in REPORT: %s", filters.localName)
|
||||
return res
|
||||
|
||||
def children(self, cr, domain=None):
|
||||
@@ -227,26 +286,33 @@ class node_calendar(nodes.node_class):
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
where = []
|
||||
bc_obj = dirobj.pool.get('basic.calendar')
|
||||
|
||||
if name:
|
||||
if name.endswith('.ics'):
|
||||
name = name[:-4]
|
||||
try:
|
||||
where.append(('id','=',int(name)))
|
||||
if name.isdigit():
|
||||
where.append(('id','=',int(name)))
|
||||
else:
|
||||
bca_obj = dirobj.pool.get('basic.calendar.alias')
|
||||
bc_alias = bca_obj.search(cr, uid,
|
||||
[('cal_line_id.calendar_id', '=', self.calendar_id),
|
||||
('name', '=', name)] )
|
||||
if not bc_alias:
|
||||
return []
|
||||
bc_val = bca_obj.read(cr, uid, bc_alias, ['res_id',])
|
||||
where.append(('id', '=', bc_val[0]['res_id']))
|
||||
except ValueError:
|
||||
# if somebody requests any other name than the ones we
|
||||
# generate (non-numeric), it just won't exist
|
||||
# FIXME: however, this confuses Evolution (at least), which
|
||||
# thinks the .ics node hadn't been saved.
|
||||
return []
|
||||
|
||||
if not domain:
|
||||
domain = []
|
||||
|
||||
fil_obj = dirobj.pool.get('basic.calendar')
|
||||
ids = fil_obj.search(cr, uid, domain)
|
||||
res = []
|
||||
if self.calendar_id in ids:
|
||||
res = fil_obj.get_calendar_objects(cr, uid, [self.calendar_id], self, domain=where, context=ctx)
|
||||
# we /could/ be supplying an invalid calendar id to bc_obj, it has to check
|
||||
res = bc_obj.get_calendar_objects(cr, uid, [self.calendar_id], self, domain=where, context=ctx)
|
||||
return res
|
||||
|
||||
def create_child(self, cr, path, data):
|
||||
@@ -268,7 +334,24 @@ class node_calendar(nodes.node_class):
|
||||
assert isinstance(res[0], (int, long))
|
||||
fnodes = fil_obj.get_calendar_objects(cr, uid, [self.calendar_id], self,
|
||||
domain=[('id','=',res[0])], context=ctx)
|
||||
if self.context.get('DAV-client','') in ('iPhone', 'iCalendar',):
|
||||
# For those buggy clients, register the alias
|
||||
bca_obj = fil_obj.pool.get('basic.calendar.alias')
|
||||
ourcal = fil_obj.browse(cr, uid, self.calendar_id)
|
||||
line_id = None
|
||||
for line in ourcal.line_ids:
|
||||
if line.name == ourcal.type:
|
||||
line_id = line.id
|
||||
break
|
||||
assert line_id, "Calendar #%d must have at least one %s line" % \
|
||||
(ourcal.id, ourcal.type)
|
||||
if path.endswith('.ics'):
|
||||
path = path[:-4]
|
||||
bca_obj.create(cr, uid, { 'cal_line_id': line_id,
|
||||
'res_id': res[0], 'name': path}, context=ctx)
|
||||
return fnodes[0]
|
||||
# If we reach this line, it means that we couldn't import any useful
|
||||
# (and matching type vs. our node kind) data from the iCal content.
|
||||
return None
|
||||
|
||||
|
||||
@@ -287,8 +370,12 @@ class node_calendar(nodes.node_class):
|
||||
def rmcol(self, cr):
|
||||
return False
|
||||
|
||||
|
||||
def _get_caldav_calendar_data(self, cr):
|
||||
if self.context.get('DAV-client', '') in ('iPhone', 'iCalendar'):
|
||||
# Never return collective data to iClients, they get confused
|
||||
# because they do propfind on the calendar node with Depth=1
|
||||
# and only expect the childrens' data
|
||||
return None
|
||||
res = []
|
||||
for child in self.children(cr):
|
||||
res.append(child._get_caldav_calendar_data(cr))
|
||||
@@ -299,86 +386,54 @@ class node_calendar(nodes.node_class):
|
||||
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
calendar = calendar_obj.browse(cr, uid, self.calendar_id, context=ctx)
|
||||
return calendar.description
|
||||
try:
|
||||
calendar = calendar_obj.browse(cr, uid, self.calendar_id, context=ctx)
|
||||
return calendar.description or calendar.name
|
||||
except Exception, e:
|
||||
return None
|
||||
|
||||
def _get_dav_principal_collection_set(self, cr):
|
||||
import xml
|
||||
import urllib
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
|
||||
calendar = calendar_obj.browse(cr, uid, self.calendar_id, context=ctx)
|
||||
res = '%s/%s' %(calendar.collection_id.name, calendar.name)
|
||||
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, 'href', None)
|
||||
href = doc.documentElement
|
||||
href.tagName = 'D:href'
|
||||
huri = doc.createTextNode(urllib.quote('/%s/%s' % (cr.dbname, res)))
|
||||
href.appendChild(huri)
|
||||
return href
|
||||
def _get_dav_supported_report_set(self, cr):
|
||||
|
||||
return ('supported-report', 'DAV:',
|
||||
('report','DAV:',
|
||||
('principal-match','DAV:')
|
||||
)
|
||||
)
|
||||
|
||||
def _get_caldav_calendar_home_set(self, cr):
|
||||
import xml.dom.minidom
|
||||
import urllib
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, 'href', None)
|
||||
def _get_caldav_supported_calendar_component_set(self, cr):
|
||||
return ('comp', 'urn:ietf:params:xml:ns:caldav', None,
|
||||
{'name': self.cal_type.upper()} )
|
||||
|
||||
def _get_caldav_calendar_timezone(self, cr):
|
||||
return None #TODO
|
||||
|
||||
def _get_caldav_supported_calendar_data(self, cr):
|
||||
return ('calendar-data', 'urn:ietf:params:xml:ns:caldav', None,
|
||||
{'content-type': "text/calendar", 'version': "2.0" } )
|
||||
|
||||
def _get_caldav_max_resource_size(self, cr):
|
||||
return 65535
|
||||
|
||||
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
|
||||
calendar = calendar_obj.browse(cr, uid, self.calendar_id, context=ctx)
|
||||
huri = doc.createTextNode(urllib.quote('/%s/%s' % (cr.dbname, calendar.collection_id.name)))
|
||||
href = doc.documentElement
|
||||
href.tagName = 'D:href'
|
||||
href.appendChild(huri)
|
||||
return href
|
||||
def _get_caldav_min_date_time(self, cr):
|
||||
return "19700101T000000Z"
|
||||
|
||||
def _get_caldav_calendar_user_address_set(self, cr):
|
||||
import xml.dom.minidom
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
user_obj = self.context._dirobj.pool.get('res.users')
|
||||
user = user_obj.browse(cr, uid, uid, context=ctx)
|
||||
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, 'href', None)
|
||||
href = doc.documentElement
|
||||
href.tagName = 'D:href'
|
||||
huri = doc.createTextNode('MAILTO:' + str(user.email) or str(user.name))
|
||||
href.appendChild(huri)
|
||||
return href
|
||||
|
||||
def _get_caldav_schedule_outbox_URL(self, cr):
|
||||
return self._get_caldav_schedule_inbox_URL(cr)
|
||||
|
||||
def _get_caldav_schedule_inbox_URL(self, cr):
|
||||
import xml.dom.minidom
|
||||
import urllib
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
|
||||
calendar = calendar_obj.browse(cr, uid, self.calendar_id, context=ctx)
|
||||
res = '%s/%s' %(calendar.collection_id.name, calendar.name)
|
||||
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, 'href', None)
|
||||
href = doc.documentElement
|
||||
href.tagName = 'D:href'
|
||||
huri = doc.createTextNode(urllib.quote('/%s/%s' % (cr.dbname, res)))
|
||||
href.appendChild(huri)
|
||||
return href
|
||||
def _get_caldav_max_date_time(self, cr):
|
||||
return "21001231T235959Z" # I will be dead by then
|
||||
|
||||
def _get_apple_cal_calendar_color(self, cr):
|
||||
return self.cal_color
|
||||
|
||||
def _get_apple_cal_calendar_order(self, cr):
|
||||
return self.cal_order
|
||||
|
||||
class res_node_calendar(nodes.node_class):
|
||||
our_type = 'file'
|
||||
DAV_PROPS = {
|
||||
"http://calendarserver.org/ns/" : ('getctag'),
|
||||
"http://calendarserver.org/ns/" : ('getctag',),
|
||||
"urn:ietf:params:xml:ns:caldav" : (
|
||||
'calendar-description',
|
||||
'calendar-data',
|
||||
'calendar-home-set',
|
||||
'calendar-user-address-set',
|
||||
'schedule-inbox-URL',
|
||||
'schedule-outbox-URL',)}
|
||||
)}
|
||||
DAV_M_NS = {
|
||||
"http://calendarserver.org/ns/" : '_get_dav',
|
||||
"urn:ietf:params:xml:ns:caldav" : '_get_caldav'}
|
||||
@@ -393,7 +448,7 @@ class res_node_calendar(nodes.node_class):
|
||||
self.calendar_id = hasattr(parent, 'calendar_id') and parent.calendar_id or False
|
||||
if res_obj:
|
||||
if not self.calendar_id: self.calendar_id = res_obj.id
|
||||
pr = res_obj.perm_read()[0]
|
||||
pr = res_obj.perm_read(context=context, details=False)[0]
|
||||
self.create_date = pr.get('create_date')
|
||||
self.write_date = pr.get('write_date') or pr.get('create_date')
|
||||
self.displayname = res_obj.name
|
||||
@@ -414,6 +469,7 @@ class res_node_calendar(nodes.node_class):
|
||||
uid = self.context.uid
|
||||
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
|
||||
context = self.context.context.copy()
|
||||
context.update(self.dctx)
|
||||
context.update({'model': self.model, 'res_id':self.res_id})
|
||||
res = calendar_obj.export_cal(cr, uid, [self.calendar_id], context=context)
|
||||
return res
|
||||
@@ -426,8 +482,11 @@ class res_node_calendar(nodes.node_class):
|
||||
|
||||
def set_data(self, cr, data, fil_obj = None):
|
||||
uid = self.context.uid
|
||||
context = self.context.context.copy()
|
||||
context.update(self.dctx)
|
||||
context.update({'model': self.model, 'res_id':self.res_id})
|
||||
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
|
||||
res = calendar_obj.import_cal(cr, uid, data, self.calendar_id)
|
||||
res = calendar_obj.import_cal(cr, uid, data, self.calendar_id, context=context)
|
||||
return res
|
||||
|
||||
def _get_ttag(self,cr):
|
||||
@@ -438,7 +497,6 @@ class res_node_calendar(nodes.node_class):
|
||||
res = '%d' % (self.calendar_id)
|
||||
return res
|
||||
|
||||
|
||||
def rm(self, cr):
|
||||
uid = self.context.uid
|
||||
res = False
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- /calendars tree -->
|
||||
<record id="document_directory_calendars0" model="document.directory">
|
||||
<field name="domain">[]</field>
|
||||
<field eval="1" name="resource_find_all"/>
|
||||
<field eval="0" name="ressource_tree"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="storage_id" ref="document.storage_default"/>
|
||||
<field name="type">directory</field>
|
||||
<field eval="[(6,0,[])]" name="group_ids"/>
|
||||
<field name="name">calendars</field>
|
||||
</record>
|
||||
<record id="document_directory_resources1" model="document.directory">
|
||||
<field name="domain">[]</field>
|
||||
<field eval="1" name="resource_find_all"/>
|
||||
<field eval="0" name="ressource_tree"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field model="document.directory" name="parent_id" ref="document_directory_calendars0"/>
|
||||
<field name="type">directory</field>
|
||||
<field eval="[(6,0,[])]" name="group_ids"/>
|
||||
<field name="name">resources</field>
|
||||
</record>
|
||||
<record id="document_directory_uids0" model="document.directory">
|
||||
<field name="domain">[]</field>
|
||||
<field eval="1" name="resource_find_all"/>
|
||||
<field eval="0" name="ressource_tree"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field model="document.directory" name="parent_id" ref="document_directory_calendars0"/>
|
||||
<field name="type">ressource</field>
|
||||
<field name="ressource_type_id" ref="base.model_res_users"/>
|
||||
<field eval="[(6,0,[ref('base.group_system')])]" name="group_ids"/>
|
||||
<field name="name">__uids__</field>
|
||||
</record>
|
||||
<record id="document_directory_users0" model="document.directory">
|
||||
<field name="domain">[]</field>
|
||||
<field eval="1" name="resource_find_all"/>
|
||||
<field eval="0" name="ressource_tree"/>
|
||||
<field name="resource_field" ref="base.field_res_users_login"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field model="document.directory" name="parent_id" ref="document_directory_calendars0"/>
|
||||
<field name="storage_id" ref="document.storage_default"/>
|
||||
<field name="type">ressource</field>
|
||||
<field name="ressource_type_id" ref="base.model_res_users"/>
|
||||
<field eval="[(6,0,[])]" name="group_ids"/>
|
||||
<field name="name">users</field>
|
||||
</record>
|
||||
<record id="document_directory_dctx_0" model="document.directory.dctx">
|
||||
<field model="document.directory" name="dir_id" ref="document_directory_users0"/>
|
||||
<field name="field">user_id</field>
|
||||
<field name="expr">res_id</field>
|
||||
</record>
|
||||
<record id="document_directory_c0" model="document.directory">
|
||||
<field name="domain">[]</field>
|
||||
<field eval="1" name="resource_find_all"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field model="document.directory" name="parent_id" ref="document_directory_users0"/>
|
||||
<field name="storage_id" ref="document.storage_default"/>
|
||||
<field name="type">directory</field>
|
||||
<field eval="[(6,0,[])]" name="group_ids"/>
|
||||
<field name="name">c</field>
|
||||
<field eval="1" name="calendar_collection"/>
|
||||
</record>
|
||||
<record id="document_directory_groups1" model="document.directory">
|
||||
<field name="domain">[]</field>
|
||||
<field eval="1" name="resource_find_all"/>
|
||||
<field eval="0" name="ressource_tree"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field model="document.directory" name="parent_id" ref="document_directory_calendars0"/>
|
||||
<field name="storage_id" ref="document.storage_default"/>
|
||||
<field name="type">directory</field>
|
||||
<field eval="[(6,0,[])]" name="group_ids"/>
|
||||
<field name="name">groups</field>
|
||||
</record>
|
||||
<record id="document_webdav_dir_property_calendarhomeset0" model="document.webdav.dir.property">
|
||||
<field model="document.directory" name="dir_id" ref="document_directory_calendars0"/>
|
||||
<field name="namespace">urn:ietf:params:xml:ns:caldav</field>
|
||||
<!-- no parent, it is a global property -->
|
||||
<field name="name">calendar-home-set</field>
|
||||
<field name="value">('href','DAV:','/%s/%s/calendars/users/%s/c' % ('webdav',dbname,username) )</field>
|
||||
<field eval="1" name="do_subst"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -74,6 +74,9 @@
|
||||
<field name="type"/>
|
||||
<field name="user_id"/>
|
||||
<field name="collection_id" required="1"/>
|
||||
<field name="has_webcal" groups="base.group_extended" />
|
||||
<field name="calendar_color" groups="base.group_extended" />
|
||||
<field name="calendar_order" groups="base.group_extended" />
|
||||
<notebook colspan="4">
|
||||
<page string="Calendar Lines">
|
||||
<field name="line_ids" mode="form,tree" colspan="4" nolabel="1">
|
||||
|
||||
@@ -30,7 +30,10 @@ import pytz
|
||||
import re
|
||||
import tools
|
||||
import time
|
||||
import logging
|
||||
from caldav_node import res_node_calendar
|
||||
from orm_utils import get_last_modified
|
||||
from tools.safe_eval import safe_eval as eval
|
||||
|
||||
try:
|
||||
import vobject
|
||||
@@ -63,12 +66,13 @@ def uid2openobjectid(cr, uidval, oomodel, rdate):
|
||||
return (False, None)
|
||||
qry = 'SELECT DISTINCT(id) FROM %s' % model_obj._table
|
||||
if rdate:
|
||||
qry += " where recurrent_id='%s'" % (rdate) #TOFIX: sql injection
|
||||
cr.execute(qry)
|
||||
qry += " WHERE recurrent_id=%s"
|
||||
cr.execute(qry, (rdate,))
|
||||
r_id = cr.fetchone()
|
||||
if r_id:
|
||||
return (id, r_id[0])
|
||||
|
||||
else:
|
||||
return (False, None)
|
||||
cr.execute(qry)
|
||||
ids = map(lambda x: str(x[0]), cr.fetchall())
|
||||
if id in ids:
|
||||
@@ -232,6 +236,7 @@ def map_data(cr, uid, obj, context=None):
|
||||
|
||||
class CalDAV(object):
|
||||
__attribute__ = {}
|
||||
_logger = logging.getLogger('document.caldav')
|
||||
|
||||
def ical_set(self, name, value, type):
|
||||
""" set calendar Attribute
|
||||
@@ -294,6 +299,7 @@ class CalDAV(object):
|
||||
|
||||
att_data = []
|
||||
exdates = []
|
||||
_server_tzinfo = pytz.timezone(tools.get_server_timezone())
|
||||
|
||||
for cal_data in child.getChildren():
|
||||
if cal_data.name.lower() == 'organizer':
|
||||
@@ -329,8 +335,8 @@ class CalDAV(object):
|
||||
if cal_data.name.lower() in self.__attribute__:
|
||||
if cal_data.params.get('X-VOBJ-ORIGINAL-TZID'):
|
||||
self.ical_set('vtimezone', cal_data.params.get('X-VOBJ-ORIGINAL-TZID'), 'value')
|
||||
date_utc = cal_data.value.astimezone(pytz.utc)
|
||||
self.ical_set(cal_data.name.lower(), date_utc, 'value')
|
||||
date_local = cal_data.value.astimezone(_server_tzinfo)
|
||||
self.ical_set(cal_data.name.lower(), date_local, 'value')
|
||||
continue
|
||||
self.ical_set(cal_data.name.lower(), cal_data.value, 'value')
|
||||
vals = map_data(cr, uid, self, context=context)
|
||||
@@ -576,6 +582,13 @@ class Calendar(CalDAV, osv.osv):
|
||||
'create_date': fields.datetime('Created Date', readonly=True),
|
||||
'write_date': fields.datetime('Modifided Date', readonly=True),
|
||||
'description': fields.text("description"),
|
||||
'calendar_color': fields.char('Color', size=20, help="For supporting clients, the color of the calendar entries"),
|
||||
'calendar_order': fields.integer('Order', help="For supporting clients, the order of this folder among the calendars"),
|
||||
'has_webcal': fields.boolean('WebCal', required=True, help="Also export a <name>.ics entry next to the calendar folder, with WebCal content."),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'has_webcal': False,
|
||||
}
|
||||
|
||||
def get_calendar_objects(self, cr, uid, ids, parent=None, domain=None, context=None):
|
||||
@@ -592,7 +605,7 @@ class Calendar(CalDAV, osv.osv):
|
||||
continue
|
||||
if line.name in ('valarm', 'attendee'):
|
||||
continue
|
||||
line_domain = eval(line.domain or '[]')
|
||||
line_domain = eval(line.domain or '[]', context)
|
||||
line_domain += domain
|
||||
if ctx_res_id:
|
||||
line_domain += [('id','=',ctx_res_id)]
|
||||
@@ -606,6 +619,32 @@ class Calendar(CalDAV, osv.osv):
|
||||
node = res_node_calendar('%s.ics' %data.id, parent, ctx, data, line.object_id.model, data.id)
|
||||
res.append(node)
|
||||
return res
|
||||
|
||||
|
||||
def get_cal_max_modified(self, cr, uid, ids, parent=None, domain=None, context=None):
|
||||
if not context:
|
||||
context = {}
|
||||
if not domain:
|
||||
domain = []
|
||||
res = None
|
||||
ctx_res_id = context.get('res_id', None)
|
||||
ctx_model = context.get('model', None)
|
||||
for cal in self.browse(cr, uid, ids):
|
||||
for line in cal.line_ids:
|
||||
if ctx_model and ctx_model != line.object_id.model:
|
||||
continue
|
||||
if line.name in ('valarm', 'attendee'):
|
||||
continue
|
||||
line_domain = eval(line.domain or '[]', context)
|
||||
line_domain += domain
|
||||
if ctx_res_id:
|
||||
line_domain += [('id','=',ctx_res_id)]
|
||||
mod_obj = self.pool.get(line.object_id.model)
|
||||
max_data = get_last_modified(mod_obj, cr, uid, line_domain, context=context)
|
||||
if res and res > max_data:
|
||||
continue
|
||||
res = max_data
|
||||
return res
|
||||
|
||||
def export_cal(self, cr, uid, ids, vobj='vevent', context=None):
|
||||
""" Export Calendar
|
||||
@@ -624,7 +663,7 @@ class Calendar(CalDAV, osv.osv):
|
||||
continue
|
||||
if line.name in ('valarm', 'attendee'):
|
||||
continue
|
||||
domain = eval(line.domain or '[]')
|
||||
domain = eval(line.domain or '[]', context)
|
||||
if ctx_res_id:
|
||||
domain += [('id','=',ctx_res_id)]
|
||||
mod_obj = self.pool.get(line.object_id.model)
|
||||
@@ -668,6 +707,15 @@ class Calendar(CalDAV, osv.osv):
|
||||
val = self.parse_ics(cr, uid, child, cal_children=cal_children, context=context)
|
||||
vals.append(val)
|
||||
objs.append(cal_children[child.name.lower()])
|
||||
elif child.name.upper() == 'CALSCALE':
|
||||
if child.value.upper() != 'GREGORIAN':
|
||||
self._logger.warning('How do I handle %s calendars?',child.value)
|
||||
elif child.name.upper() in ('PRODID', 'VERSION'):
|
||||
pass
|
||||
elif child.name.upper().startswith('X-'):
|
||||
self._logger.debug("skipping custom node %s", child.name)
|
||||
else:
|
||||
self._logger.debug("skipping node %s", child.name)
|
||||
|
||||
res = []
|
||||
for obj_name in list(set(objs)):
|
||||
@@ -728,6 +776,30 @@ line "%s" more than once' % (vals.get('name'))))
|
||||
|
||||
basic_calendar_line()
|
||||
|
||||
class basic_calendar_alias(osv.osv):
|
||||
""" Mapping of client filenames to ORM ids of calendar records
|
||||
|
||||
Since some clients insist on putting arbitrary filenames on the .ics data
|
||||
they send us, and they won't respect the redirection "Location:" header,
|
||||
we have to store those filenames and allow clients to call our calendar
|
||||
records with them.
|
||||
Note that adding a column to all tables that would possibly hold calendar-
|
||||
mapped data won't work. The user is always allowed to specify more
|
||||
calendars, on any arbitrary ORM object, without need to alter those tables'
|
||||
data or structure
|
||||
"""
|
||||
_name = 'basic.calendar.alias'
|
||||
_columns = {
|
||||
'name': fields.char('Filename', size=512, required=True, select=1),
|
||||
'cal_line_id': fields.many2one('basic.calendar.lines', 'Calendar', required=True,
|
||||
select=1, help='The calendar/line this mapping applies to'),
|
||||
'res_id': fields.integer('Res. ID', required=True, select=1),
|
||||
}
|
||||
|
||||
_sql_constraints = [ ('name_cal_uniq', 'UNIQUE(cal_line_id, name)',
|
||||
_('The same filename cannot apply to two records!')), ]
|
||||
|
||||
basic_calendar_alias()
|
||||
|
||||
class basic_calendar_attribute(osv.osv):
|
||||
_name = 'basic.calendar.attributes'
|
||||
|
||||
@@ -18,9 +18,11 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import osv, fields
|
||||
from tools.translate import _
|
||||
import caldav_node
|
||||
import logging
|
||||
|
||||
class calendar_collection(osv.osv):
|
||||
_inherit = 'document.directory'
|
||||
@@ -30,7 +32,8 @@ class calendar_collection(osv.osv):
|
||||
}
|
||||
_default = {
|
||||
'calendar_collection' : False,
|
||||
}
|
||||
}
|
||||
|
||||
def _get_root_calendar_directory(self, cr, uid, context=None):
|
||||
objid = self.pool.get('ir.model.data')
|
||||
try:
|
||||
@@ -40,18 +43,25 @@ class calendar_collection(osv.osv):
|
||||
root_id = objid.read(cr, uid, mid, ['res_id'])['res_id']
|
||||
root_cal_dir = self.browse(cr,uid, root_id, context=context)
|
||||
return root_cal_dir.name
|
||||
except Exception, e:
|
||||
import netsvc
|
||||
logger = netsvc.Logger()
|
||||
logger.notifyChannel("document", netsvc.LOG_WARNING, 'Cannot set root directory for Calendars:'+ str(e))
|
||||
except Exception:
|
||||
logger = logging.getLogger('document')
|
||||
logger.warning('Cannot set root directory for Calendars:', exc_info=True)
|
||||
return False
|
||||
return False
|
||||
|
||||
def _locate_child(self, cr, uid, root_id, uri,nparent, ncontext):
|
||||
""" try to locate the node in uri,
|
||||
Return a tuple (node_dir, remaining_path)
|
||||
"""
|
||||
return (caldav_node.node_database(context=ncontext), uri)
|
||||
def get_node_class(self, cr, uid, ids, dbro=None, dynamic=False, context=None):
|
||||
if dbro is None:
|
||||
dbro = self.browse(cr, uid, ids, context=context)
|
||||
|
||||
if dbro.calendar_collection:
|
||||
if dynamic:
|
||||
return caldav_node.node_calendar_res_col
|
||||
else:
|
||||
return caldav_node.node_calendar_collection
|
||||
else:
|
||||
return super(calendar_collection, self).\
|
||||
get_node_class(cr, uid, ids, dbro=dbro,dynamic=dynamic,
|
||||
context=context)
|
||||
|
||||
def get_description(self, cr, uid, ids, context=None):
|
||||
#TODO : return description of all calendars
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
===============================
|
||||
Discovery of calendar resources
|
||||
===============================
|
||||
|
||||
1. Srv record
|
||||
--------------
|
||||
Calendar server and port should be advertised by a DNS _srv record.
|
||||
Although this is beyond the capabilities of the OpenERP server, an
|
||||
example setup is listed below:
|
||||
-- TODO --
|
||||
|
||||
DNS -> http://our-host-ip:port/
|
||||
|
||||
2. Well-known uris
|
||||
-------------------
|
||||
The OpenERP server may have the 'well-known URIs' servlet activated,
|
||||
which means that it will advertise its main database and the correct
|
||||
location of the main CalDAV resource.
|
||||
http://our-host-ip:port/.well-known/caldav -> http://our-host-ip:port/webdav/dbname/calendars/
|
||||
|
||||
|
||||
3. Caldav collection
|
||||
---------------------
|
||||
The CalDAV "collection" is not necessarily a calendar or a folder just
|
||||
containing calendars under it. It is a DAV resource (aka folder) which
|
||||
has special DAV properties, so that clients are redirected to the right
|
||||
urls (like per-user calendars etc.).
|
||||
|
||||
http://our-host-ip:port/webdav/dbname/calendars/ -> http://our-host-ip:port/webdav/dbname/calendars/users/user-login/c/
|
||||
|
||||
4. Calendar home for user
|
||||
--------------------------
|
||||
There can be one dynamic folder per user, which will in turn contain the calendars
|
||||
|
||||
http://our-host-ip:port/webdav/dbname/calendars/users/user-login/c/ ->
|
||||
http://our-host-ip:port/webdav/dbname/calendars/users/user-login/c/[Meetings, Tasks]
|
||||
|
||||
5. Calendars
|
||||
--------------
|
||||
Each calendar will contain the resource nodes:
|
||||
.../c/Meetings/ -> .../c/Meetings/123.ics
|
||||
|
||||
Principal url
|
||||
@@ -0,0 +1,97 @@
|
||||
==========================
|
||||
CalDAV with iPhone How-To
|
||||
==========================
|
||||
|
||||
As from OpenERP v6.0, document_webdav v2.2, the iPhone has been thoroughly
|
||||
tested and supported as a Calendaring client for the OpenERP CalDAV module.
|
||||
|
||||
However, keep in mind that OpenERP is not a straightforward calendaring
|
||||
server, but an ERP application (with more data + structure) which exposes
|
||||
that data to calendar clients. That said, the full features that would be
|
||||
accessible through the Gtk or Web OpenERP clients cannot be crammed into
|
||||
the Calendar clients (such as the iPhone).
|
||||
|
||||
OpenERP server Setup
|
||||
--------------------
|
||||
Some modules need to be installed at the OpenERP server. These are:
|
||||
- caldav: Required, has the reference setup and the necessary
|
||||
underlying code. Will also cause document, document_webdav
|
||||
to be installed.
|
||||
- crm_caldav: Optional, will export the CRM Meetings as a calendar.
|
||||
- project_caldav: Optional, will export project tasks as calendar.
|
||||
- http_well_known: Optional, experimental. Will ease bootstrapping,
|
||||
but only when a DNS srv record is also used.
|
||||
|
||||
These will also install a reference setup of the folders, ready to go.
|
||||
The administrator of OpenERP can add more calendars and structure, if
|
||||
needed.
|
||||
|
||||
DNS server setup
|
||||
------------------
|
||||
To be documented.
|
||||
|
||||
SSL setup
|
||||
----------
|
||||
It is highly advisable that you also setup SSL to work for the OpenERP
|
||||
server. HTTPS is a server-wide feature in OpenERP, which means a
|
||||
certificate will be set at the openerp-server.conf and will be the same
|
||||
for XML-RPC, HTTP, WebDAV and CalDAV.
|
||||
The iPhone also supports secure connections with SSL, although it does
|
||||
not expect a self-signed certificate (or one that is not verified by
|
||||
one of the "big" certificate authorities [1] ).
|
||||
|
||||
Phone setup
|
||||
-------------
|
||||
The iPhone is fairly easy to setup.
|
||||
IF you need SSL (and your certificate is not a verified one, as usual),
|
||||
then you first will need to let the iPhone trust that. Follow these
|
||||
steps:
|
||||
s1. Open Safari and enter the https location of the OpenERP server:
|
||||
https://my.server.ip:8071/
|
||||
(assuming you have the server at "my.server.ip" and the HTTPS port
|
||||
is the default 8071)
|
||||
s2. Safari will try to connect and issue a warning about the certificate
|
||||
used. Inspect the certificate and click "Accept" so that iPhone
|
||||
now trusts it.
|
||||
|
||||
Now, to setup the calendars, you need to:
|
||||
1. Click on the "Settings" and go to the "Mail, Contacts, Calendars" page.
|
||||
2. Go to "Add account..."
|
||||
3. Click on "Other"
|
||||
4. From the "Calendars" group, select "Add CalDAV Account"
|
||||
5. Enter the server's name or IP address at the "Server" entry, the
|
||||
OpenERP username and password at the next ones.
|
||||
As a description, you can either leave the server's name or
|
||||
something like "OpenERP calendars".
|
||||
6. You _will_ get the "Unable to verify account" error message. That is
|
||||
because our server is not at the port iPhone expects[2]. But no
|
||||
need to worry, click OK.
|
||||
7. At the next page, enter the "Advanced Settings" to specify the right
|
||||
ports and paths
|
||||
8. If you have SSL, turn the switch on. Note that port will be changed
|
||||
to 8443.
|
||||
9. Specify the port for the OpenERP server: 8071 for SSL, 8069 without.
|
||||
10. Set the "Account URL" to the right path of the OpenERP webdav:
|
||||
https://my.server.ip:8071/webdav/dbname/calendars
|
||||
Where "https://my.server.ip:8071" is the protocol, server name
|
||||
and port as discussed above, "dbname" is the name of the database.
|
||||
[Note that the default
|
||||
"https://my.server.ip:8071/principals/users/username" might also
|
||||
be edited to
|
||||
"https://my.server.ip:8071/webdav/dbname/principals/users/username" ]
|
||||
11. Click on Done. The phone will hopefully connect to the OpenERP server
|
||||
and verify it can use the account.
|
||||
12. Go to the main menu of the iPhone and enter the Calendar application.
|
||||
Your OpenERP calendars will be visible inside the selection of the
|
||||
"Calendars" button.
|
||||
Note that when creating a new calendar entry, you will have to specify
|
||||
which calendar it should be saved at.
|
||||
|
||||
|
||||
|
||||
|
||||
[1] I remember one guy that made *lots* of money selling his CA business
|
||||
off, and since then uses this money to create a software monopoly.
|
||||
[2] This may not happen if the SRV records at DNS and the well-known URIs
|
||||
are setup right. But we appreciate that a default OpenERP installation will
|
||||
not have the DNS server of the company's domain configured.
|
||||
@@ -0,0 +1,48 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2010 OpenERP SA (www.openerp.com)
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
if True: # we need this indentation level ;)
|
||||
|
||||
def get_last_modified(self, cr, user, args, context=None, access_rights_uid=None):
|
||||
"""Return the last modification date of objects in 'domain'
|
||||
This function has similar semantics to orm.search(), apart from the
|
||||
limit, offset and order arguments, which make no sense here.
|
||||
It is useful when we want to find if the table (aka set of records)
|
||||
has any modifications we should update at the client.
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
self.pool.get('ir.model.access').check(cr, access_rights_uid or user, self._name, 'read', context=context)
|
||||
|
||||
query = self._where_calc(cr, user, args, context=context)
|
||||
self._apply_ir_rules(cr, user, query, 'read', context=context)
|
||||
from_clause, where_clause, where_clause_params = query.get_sql()
|
||||
|
||||
where_str = where_clause and (" WHERE %s" % where_clause) or ''
|
||||
|
||||
cr.execute('SELECT MAX(COALESCE("%s".write_date, "%s".create_date)) FROM ' % (self._table, self._table) +
|
||||
from_clause + where_str ,
|
||||
where_clause_params)
|
||||
res = cr.fetchall()
|
||||
return res[0][0]
|
||||
|
||||
#eof
|
||||
@@ -3,3 +3,4 @@
|
||||
"access_basic_calendar_attributes","basic.calendar.attributes","model_basic_calendar_attributes","base.group_user",1,1,1,1
|
||||
"access_basic_calendar_fields","basic.calendar.fields","model_basic_calendar_fields","base.group_user",1,1,1,1
|
||||
"access_basic_calendar","basic.calendar","model_basic_calendar","base.group_user",1,1,1,1
|
||||
"access_basic_calendar_alias","basic.calendar.alias","model_basic_calendar_alias","base.group_user",1,1,1,1
|
||||
|
||||
|
@@ -37,8 +37,11 @@ class calendar_event_export(osv.osv_memory):
|
||||
"""
|
||||
Get Default value for Name field.
|
||||
"""
|
||||
if not context:
|
||||
if context is None:
|
||||
context = {}
|
||||
else:
|
||||
context= context.copy()
|
||||
context['uid'] = uid
|
||||
model = context.get('model', 'basic.calendar')
|
||||
model_obj = self.pool.get(model)
|
||||
res = super(calendar_event_export, self).default_get( cr, uid, fields, context=context)
|
||||
|
||||
@@ -42,6 +42,11 @@ class calendar_event_import(osv.osv_memory):
|
||||
@param ids: List of calendar event import’s IDs
|
||||
@return: dictionary of calendar evet import window with Import successful msg.
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
else:
|
||||
context = context.copy()
|
||||
context['uid'] = uid
|
||||
|
||||
for data in self.read(cr, uid, ids):
|
||||
model = data.get('model', 'basic.calendar')
|
||||
|
||||
@@ -44,6 +44,12 @@ class calendar_event_subscribe(osv.osv_memory):
|
||||
@return: dictionary of calendar evet subscribe window with Import successful msg.
|
||||
"""
|
||||
global cnt
|
||||
if context is None:
|
||||
context = {}
|
||||
else:
|
||||
context = context.copy()
|
||||
context['uid'] = uid
|
||||
|
||||
for data in self.read(cr, uid, ids):
|
||||
try:
|
||||
f = urllib.urlopen(data['url_path'])
|
||||
|
||||
@@ -41,25 +41,6 @@ class crm_lead(crm_case, osv.osv):
|
||||
_description = "Lead"
|
||||
_order = "date_action, priority, id desc"
|
||||
_inherit = ['mailgate.thread','res.partner.address']
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form',
|
||||
context=None, toolbar=False, submenu=False):
|
||||
"""
|
||||
Changes the view dynamically
|
||||
@param self: The object pointer.
|
||||
@param cr: A database cursor
|
||||
@param uid: ID of the user currently logged in
|
||||
@param context: A standard dictionary
|
||||
@return: New arch of view.
|
||||
"""
|
||||
if not context:
|
||||
context={}
|
||||
res = super(crm_lead, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
|
||||
if view_type == 'form':
|
||||
if res['toolbar']['action'] and res['toolbar']['action'][0]['res_model']=='crm.merge.opportunity':
|
||||
res['toolbar']['action']=[]
|
||||
return res
|
||||
|
||||
def _compute_day(self, cr, uid, ids, fields, args, context={}):
|
||||
"""
|
||||
@param cr: the current row, from the database cursor,
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<field name="view_id" ref="crm_case_tree_view_leads"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_leads_filter"/>
|
||||
<field name="context">{'search_default_current':1, 'default_type': 'lead', 'search_default_section_id': section_id}</field>
|
||||
<field name="help">A lead is a first, unqualified, contact with a new prospect. Use leads when you import a database of prospects or integrate your website's contact form with OpenERP. After having been qualified, the lead can be converted to a partner and a business opportunity for a further detailed tracking of the related activities.</field>
|
||||
<field name="help">'Leads' allows you to manage and keep track of all first potential interests of a partner in one of your products or services. A lead is a first, unqualified, contact with a prospect or customer. After being qualified, a lead can be converted into a business opportunity with the creation of the related partner for further detailed tracking of any linked activities. You can use leads when you import a database of prospects or to integrate your website's contact form with OpenERP.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_view_leads_all">
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
<field name="view_id" ref="crm.crm_case_stage_tree"/>
|
||||
<field name="domain">[('object_id.model', '=', 'crm.lead')]</field>
|
||||
<field name="context">{'object_id':'crm.lead'}</field>
|
||||
<field name="help">Create specific stages that will help your sales better organise their sales pipeline by maintaining them to their leads and sales opportunities. It will allow them to easily track how is positioned a specific lead or opportunity in the sales cycle.</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="crm_lead_stage_act" id="menu_crm_lead_stage_act" name="Stages"
|
||||
@@ -26,6 +27,7 @@
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_case_categ_tree-view"/>
|
||||
<field name="domain">[('object_id.model', '=', 'crm.lead')]</field>
|
||||
<field name="help">Create specific categories that fit your company's activities in order to better classify and analyse them after they have been maintained in your leads and opportunities. You can use categories to reflect your product structure or the different types of sales you do.</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="crm_lead_categ_action"
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
<field name="view_id" ref="crm_case_calendar_view_meet"/>
|
||||
<field name="context">{"search_default_user_id":uid, 'search_default_section_id': section_id}</field>
|
||||
<field name="search_view_id" ref="view_crm_case_meetings_filter"/>
|
||||
<field name="help">The calendar of meetings is shared between sales teams and fully integrated with the others applications like the employee holidays. You can also synchronize meetings with your mobile phone using the caldav interface.</field>
|
||||
<field name="help">The meeting calendar is shared between the sales teams and fully integrated with other applications such as the employee holidays or the business opportunities. You can also synchronize meetings with your mobile phone using the caldav interface.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_calendar_meet">
|
||||
@@ -106,12 +106,13 @@
|
||||
<field name="view_id" ref="base_calendar.base_calendar_attendee_tree_view" />
|
||||
<field name="domain">[('ref','like','crm.meeting,')]</field>
|
||||
<field name="context">{"search_default_toreview":1, "search_default_user_id":uid}</field>
|
||||
<field name="help">'Meeting Invitations' allows you to create and manage the meeting invitations sent/to be sent to your colleagues/partners.</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_attendee_invitations"
|
||||
name="Meeting Invitations" parent="crm.menu_meeting_sale"
|
||||
sequence="10" action="action_view_attendee_form"
|
||||
groups="base.group_extended,base.group_sale_salesman" />
|
||||
groups="base.group_no_one" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -31,16 +31,9 @@
|
||||
<field name="context">{'search_default_user_id':uid,'search_default_current':1, 'search_default_section_id':section_id,'default_type': 'opportunity'}</field>
|
||||
<field name="view_id" ref="crm_case_tree_view_oppor"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
|
||||
<field name="help">Opportunities allows you to track your best deals pipeline: history of
|
||||
the communication, expected revenues, stage of each opportunity,
|
||||
excepted closings, etc. Opportunities are usually connected with the
|
||||
email gateway: new emails may create opportunities and each opportunity
|
||||
automatically gets the history of the conversation with the customer.
|
||||
<field name="help">Opportunities allows you to manage and keep track of your sales pipeline by creating specific customer or prospect related sales documents in order to follow up potential sales. Information such as the expected revenue, opportunity stage, expected closing date, communication history and so on can be maintained in them. Opportunities can be connected with the email gateway: new emails create opportunities, each of them automatically gets the history of the conversation with the customer.
|
||||
|
||||
Your teams will be able to plan meeting and phonecalls from
|
||||
opportunities, to convert opportunities into quotations, to manage
|
||||
documents related to the opportunity, to track all activities related to
|
||||
this customer, etc.</field>
|
||||
You and your team(s) will be able to plan meetings and phone calls from opportunities, convert them into quotations, manage related documents, track all customer related activities, and much more.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_view_oppor11">
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<field name="domain" eval="'[(\'categ_id\',\'=\','+str(ref('categ_phone1'))+')]'"/>
|
||||
<field name="context" eval="'{\'search_default_section_id\':section_id, \'set_editable\':True,\'default_state\':\'open\', \'search_default_current\':1,\'search_default_today\':1, \'default_categ_id\': ' + str(ref('categ_phone1')) +'}'"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
||||
<field name="help">Trace easily all your Inbound calls. The Inbound menu open a search view in editable mode, so you can easily modify or add a new call record. With the actions buttons convert a lead into an opportunity or plan a meeting.</field>
|
||||
<field name="help">The Inbound Calls tool allows you to log your inbound calls on the fly. Each call you get will appear on the partner form for the traceability of every contact you get with a partner. From the call record, you can trigger a request for another call, a meeting or a business opportunity.</field>
|
||||
|
||||
</record>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
<field name="domain" eval="'[(\'categ_id\',\'=\','+str(ref('categ_phone2'))+')]'"/>
|
||||
<field name="context" eval="'{\'search_default_section_id\':section_id, \'default_state\':\'open\', \'search_default_current\':1, \'default_categ_id\': ' + str(ref('categ_phone2')) +'}'"/>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
||||
<field name="help">The Outbound menu open a search view in editable mode, so you can easily modify or plan a new call. Actions buttons allows you to to make you call status evolved for a better follow up of your planned calls. During calls, convert your lead into an opportunity, plan a meeting or canceled it.</field>
|
||||
<field name="help">Outbound Calls lists all the calls to be performed by your sales team. They can record the information about the call on the form view. These information will appear on the partner form for the traceability of every contact you get with a customer. You can import a .CSV file with a list of calls to be done for your sales team.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_phone_outgoing0">
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
<field name="view_id" ref="crm.crm_case_categ_tree-view"/>
|
||||
<field name="domain">[('object_id.model', '=', 'crm.phonecall')]</field>
|
||||
<field name="context">{'object_id':'crm.phonecall'}</field>
|
||||
<field name="help">Create specific phone call categories to better sort the type of calls tracked in the system.</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="crm_phonecall_categ_action" name="Categories"
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
<field name="res_model">crm.case.section</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="crm_case_section_view_tree"/>
|
||||
<field name="help">Sales team allows you to organize your different salesmen or departments into separate teams. Each team will work in his own list of opportunities, sales orders, eso. Each user can set a team by default in his preferences. The opportunities and sales order he will see, will be automatically filtered according to his team.</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="crm_case_section_act"
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
<field name="context">{'search_default_filter_lead': 1, 'search_default_lead':1, "search_default_user":1,"search_default_this_month":1,'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="domain">[('type', '=', 'lead')]</field>
|
||||
<field name="help">Leads Analysis allows you to consult different informations relative to CRM. Check for treatments delays, number of responses given and emails send. You can sort out your leads analysis on different groups to get fine grained analysis.</field>
|
||||
<field name="help">Leads Analysis allows you to check different CRM related information. Check for treatment delays, number of responses given and emails sent. You can sort out your leads analysis by different groups to get accurate grained analysis.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_lead_tree">
|
||||
@@ -226,7 +226,7 @@
|
||||
<field name="context">{"search_default_filter_opportunity":1, "search_default_opportunity": 1, "search_default_user":1,"search_default_this_month":1,'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="domain">[('type', '=', 'opportunity')]</field>
|
||||
<field name="help">Opportunities Analysis menu gives you an instant access to your opportunities like expected revenue, planned cost, overpassed deadline or the number of exchanges by opportunity.</field>
|
||||
<field name="help">Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_opportunity_tree">
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
<field name="context">{"search_default_User":1,"search_default_This Month":1,'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
<field name="view_id" ref="view_report_crm_phonecall_tree"/>
|
||||
<field name="search_view_id" ref="view_report_crm_phonecall_filter"/>
|
||||
<field name="help">Get an anlysis of Phone Calls number and delay to close, stage, user suits to different groups for a global or a fine grained analysis.</field>
|
||||
<field name="help">From this report, you can analyse the performance of your sales team, based on their phone calls. You can group or filter the information according to several criteria and drill down the information, by adding more groups in the report.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_phonecall_tree">
|
||||
|
||||
@@ -35,9 +35,10 @@
|
||||
</record>
|
||||
|
||||
<act_window id="action_merge_opportunities"
|
||||
multi="True"
|
||||
key2="client_action_multi" name="Merge Opportunities"
|
||||
res_model="crm.merge.opportunity" src_model="crm.lead"
|
||||
view_mode="form" target="new" view_type="form" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
||||
|
||||
@@ -22,24 +22,24 @@
|
||||
|
||||
{
|
||||
'name': 'Extened Module to Add CalDav future on Meeting',
|
||||
'version': '1.0',
|
||||
'version': '1.1',
|
||||
'category': 'Generic Modules/CRM & SRM',
|
||||
'description': """
|
||||
New Futures in Meeting:
|
||||
* Share meeting with other calendar clients like sunbird
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'http://www.openerp.com',
|
||||
'depends': ['caldav', 'crm'
|
||||
],
|
||||
'init_xml': [
|
||||
'crm_caldav_data.xml',
|
||||
],
|
||||
New Futures in Meeting:
|
||||
* Share meeting with other calendar clients like sunbird
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'http://www.openerp.com',
|
||||
'depends': ['caldav', 'crm' ],
|
||||
'init_xml': [
|
||||
'crm_caldav_data.xml',
|
||||
'crm_caldav_setup.xml',
|
||||
],
|
||||
|
||||
'update_xml': [],
|
||||
'demo_xml': [],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'demo_xml': [],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -77,7 +77,7 @@ class crm_meeting(osv.osv):
|
||||
try:
|
||||
for val in vals:
|
||||
# Compute value of duration
|
||||
if 'date_deadline' in val and 'duration' not in val:
|
||||
if val.get('date_deadline', False) and 'duration' not in val:
|
||||
start = datetime.strptime(val['date'], '%Y-%m-%d %H:%M:%S')
|
||||
end = datetime.strptime(val['date_deadline'], '%Y-%m-%d %H:%M:%S')
|
||||
diff = end - start
|
||||
|
||||
@@ -0,0 +1,287 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="basic_calendar_meetings0" model="basic.calendar">
|
||||
<field eval="1" name="has_webcal"/>
|
||||
<field name="description">Meetings per user</field>
|
||||
<field name="calendar_color">#1E25FF</field>
|
||||
<field model="document.directory" name="collection_id" ref="caldav.document_directory_c0"/>
|
||||
<field name="type">vevent</field>
|
||||
<field name="name">Meetings</field>
|
||||
</record>
|
||||
|
||||
<record id="basic_calendar_lines_attendee0" model="basic.calendar.lines">
|
||||
<field name="calendar_id" ref="basic_calendar_meetings0"/>
|
||||
<field name="domain">[]</field>
|
||||
<field name="name">attendee</field>
|
||||
<field name="object_id" ref="base_calendar.model_calendar_attendee"/>
|
||||
</record>
|
||||
|
||||
<record id="basic_calendar_lines_valarm0" model="basic.calendar.lines">
|
||||
<field name="calendar_id" ref="basic_calendar_meetings0"/>
|
||||
<field name="domain">[]</field>
|
||||
<field name="name">valarm</field>
|
||||
<field name="object_id" ref="base_calendar.model_calendar_alarm"/>
|
||||
</record>
|
||||
|
||||
<record id="basic_calendar_lines_vevent0" model="basic.calendar.lines">
|
||||
<field name="calendar_id" ref="basic_calendar_meetings0"/>
|
||||
<field name="domain">[('user_id','=', dctx_user_id)]</field>
|
||||
<field name="name">vevent</field>
|
||||
<field name="object_id" ref="crm.model_crm_meeting"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="basic_calendar_fields_1" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_attendee"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_alarm_attendee_ids"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_2" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_trigger_duration"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_res_alarm_trigger_duration"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_3" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_description"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_alarm_description"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_4" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_attach"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_alarm_attach"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_5" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_trigger_occurs"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_res_alarm_trigger_occurs"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_6" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_trigger_interval"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_res_alarm_trigger_interval"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_7" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_summary"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_alarm_name"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_8" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_duration"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_res_alarm_duration"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_9" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_repeat"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_res_alarm_repeat"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_10" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_action"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_alarm_action"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_11" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_alarm_trigger_related"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_valarm0"/>
|
||||
<field name="field_id" ref="base_calendar.field_res_alarm_trigger_related"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
|
||||
<record id="basic_calendar_fields_12" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_organizer"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="crm.field_crm_meeting_organizer"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_13" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_uid"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_id"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_14" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_recurrence-id"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_recurrent_id"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_15" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_vtimezone"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_vtimezone"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_16" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_attendee"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="crm.field_crm_meeting_attendee_ids"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_17" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_rrule"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_rrule"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_18" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_dtend"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_date_deadline"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_19" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_valarm"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_base_calendar_alarm_id"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_20" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_location"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_location"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_21" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_exrule"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_exrule"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_22" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_status"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="crm.field_crm_meeting_state"/>
|
||||
<field name="mapping">{'tentative': 'draft', 'confirmed': 'open', 'cancelled': 'cancel'}</field>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_23" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_exdate"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_exdate"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_24" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_dtstamp"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_date"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_25" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_description"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_description"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_26" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_dtstart"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_date"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_27" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_class"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_class"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_28" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_created"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_create_date"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_29" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_url"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_base_calendar_url"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_30" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_event_summary"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_vevent0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_event_name"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
|
||||
<record id="basic_calendar_fields_31" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_cn"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_cn"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_32" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_sent-by"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_sent_by"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_33" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_language"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_language"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_34" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_delegated-from"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_delegated_from"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_35" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_member"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_member"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_36" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_cutype"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_cutype"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_37" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_role"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_role"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_38" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_partstat"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_state"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_39" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_delegated-to"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_delegated_to"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_40" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_dir"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_dir"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
<record id="basic_calendar_fields_41" model="basic.calendar.fields">
|
||||
<field name="name" ref="caldav.field_attendee_rsvp"/>
|
||||
<field name="type_id" ref="basic_calendar_lines_attendee0"/>
|
||||
<field name="field_id" ref="base_calendar.field_calendar_attendee_rsvp"/>
|
||||
<field name="fn">field</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -16,7 +16,7 @@
|
||||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="context">{'search_default_section_id': section_id, "search_default_current":1,"search_default_user_id":uid}</field>
|
||||
<field name="search_view_id" ref="crm_claim.view_crm_case_claims_filter"/>
|
||||
<field name="help">Record and trace your customers' claims here. A claim is defined by a client name, several types, a status and a priority level. A claim can also be a preventive or repairing action. A claim can be linked to a reference like a sales order, or a lot. You can send emails with attachments and get the history of the claim treatment (emails send, interventions type, etc.). </field>
|
||||
<field name="help">Record and track your customers' claims. Claims can be linked to a sales order or a lot. You can send emails with attachments and get the history of everything that happened on a specific claim (emails sent, interventions type and so on..). Claims can be automatically linked to an email address using the mail gateway module.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_claim0">
|
||||
|
||||
@@ -196,6 +196,7 @@
|
||||
<field name="context">{"search_default_User":1,"search_default_This Month":1,'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
<field name="view_id" ref="view_report_crm_claim_tree"/>
|
||||
<field name="search_view_id" ref="view_report_crm_claim_filter"/>
|
||||
<field name="help">Have a general overview of all claims processed in the system by sorting them with specific criteria.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_claim_tree">
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<field name="view_id" ref="crm_fundraising.crm_case_tree_view_fund"/>
|
||||
<field name="context">{"search_default_user_id":uid,"search_default_current":1, 'search_default_section_id': section_id}</field>
|
||||
<field name="search_view_id" ref="crm_fundraising.view_crm_case_fund_filter"/>
|
||||
<field name="help">When you wish to support your organization or a campaign, trace here all your activities for collecting money. The menu open a search list where you can find funds description, email, history, probability of success. Several actions buttons allows you to easily modify your different fund status.</field>
|
||||
<field name="help">If you need to support your organization or a campaign, with 'Fund Raising' you can track all you fund raising activities. The search list allows you to filter by funds description, email, history and probability of success.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_view_fund_all1">
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
<field name="context">{"search_default_User":1,"search_default_This Month":1,'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
<field name="view_id" ref="view_report_crm_fundraising_tree"/>
|
||||
<field name="search_view_id" ref="view_report_crm_fundraising_filter"/>
|
||||
<field name="help">With Fund Raising get at a glance a view to your fund raising campaigns with the estimated revenue, average probability and delay to close.</field>
|
||||
<field name="help">Have a general overview of all fund raising activities by sorting them with specific criteria such as the estimated revenue, average success probability and delay to close.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_fundrising_tree">
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<field name="view_id" ref="crm_case_tree_view_helpdesk"/>
|
||||
<field name="context">{"search_default_user_id":uid, 'search_default_section_id': section_id}</field>
|
||||
<field name="search_view_id" ref="view_crm_case_helpdesk_filter"/>
|
||||
<field name="help">Alike records and processing of claims, Helpdesk and Support is a good tool to trace your interventions. This menu is more adapted to an oral communication, which is not necessarily related to a claim. Select a customer, add notes and categorize your interventions with a channel and a priority level.</field>
|
||||
<field name="help">'Helpdesk and Support' allows you to track your interventions. Select a customer, add notes and categorize interventions with partners if necessary and assign a priority level. Depending on your need, you may consider using the issues system of OpenERP to manage your support activities.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_sec_tree_view_act111">
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
<field name="context">{"search_default_User":1,"search_default_This Month":1,'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
<field name="view_id" ref="view_report_crm_helpdesk_tree"/>
|
||||
<field name="search_view_id" ref="view_report_crm_helpdesk_filter"/>
|
||||
<field name="help">Helpdesk allows you to consult different informations relative to support demands. Check for treatments delays, number of responses given and emails send and costs. You can sort out your analysis on different groups to get fine grained analysis.</field>
|
||||
<field name="help">Have a general overview of all support requests by sorting them with specific criteria such as the processing time, number of requests answered, emails sent and costs.</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_helpdesk_tree">
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<field name="res_model">crm_profiling.questionnaire</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help">You can create specific topic related questionnaires that will be used to guide your team(s) in the sales cycle by helping them to ask the right questions. Using the segmentation tool, you will be able to automatically assign a partner to a category based on his answers to the different questionnaires.</field>
|
||||
</record>
|
||||
|
||||
<menuitem parent="base.menu_crm_config_lead" id="menu_segm_questionnaire"
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
# Serbian translation for openobject-addons
|
||||
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-10-15 11:26+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.answer,question_id:0
|
||||
#: field:crm_profiling.question,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_question
|
||||
msgid "Question"
|
||||
msgstr "Pitanje"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: wizard_button:open_questionnaire,init,open:0
|
||||
msgid "Open Questionnaire"
|
||||
msgstr "Otvori Upitnik"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,child_ids:0
|
||||
msgid "Child Profiles"
|
||||
msgstr "Pod Profili"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.module.module,shortdesc:crm_profiling.module_meta_information
|
||||
msgid "crm_profiling management"
|
||||
msgstr "crm_profiling upravljanje"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr "Pogrešno ime modela u definiciji akcije."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.answer,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_answer
|
||||
msgid "Answer"
|
||||
msgstr "Odgovor"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:res.partner:0
|
||||
msgid "Profiling"
|
||||
msgstr "Profiliranje"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.questionnaire,description:0
|
||||
msgid "Description"
|
||||
msgstr "Opis"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,answer_no:0
|
||||
msgid "Excluded Answers"
|
||||
msgstr "Isključeni Odgovori"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.answer:0
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:res.partner,answers_ids:0
|
||||
msgid "Answers"
|
||||
msgstr "Odgovori"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: wizard_field:open_questionnaire,init,questionnaire_name:0
|
||||
msgid "Questionnaire name"
|
||||
msgstr "Ime Upitnka"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:res.partner:0
|
||||
msgid "Use a questionnaire"
|
||||
msgstr "Koristi Upitnka"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Nevažeći XML za pregled arhitekture"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
#: model:ir.actions.act_window,name:crm_profiling.open_questionnaires
|
||||
#: model:ir.ui.menu,name:crm_profiling.menu_segm_questionnaire
|
||||
msgid "Questionnaires"
|
||||
msgstr "Upitnici"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.questionnaire,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_questionnaire
|
||||
#: wizard_view:open_questionnaire,init:0
|
||||
msgid "Questionnaire"
|
||||
msgstr "Upitnik"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:crm.segmentation:0
|
||||
msgid "Error ! You can not create recursive profiles."
|
||||
msgstr "Greška ! Ne možete kreirati rekurzivne profile."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,profiling_active:0
|
||||
msgid "Use The Profiling Rules"
|
||||
msgstr "Koristi Pravila Profiliranja"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:crm_profiling.question,answers_ids:0
|
||||
msgid "Avalaible answers"
|
||||
msgstr "Raspoloživi odgovori"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,answer_yes:0
|
||||
msgid "Included Answers"
|
||||
msgstr "Uključeni Odgovori"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: help:crm.segmentation,profiling_active:0
|
||||
msgid ""
|
||||
"Check this box if you want to use this tab as part of the segmentation rule. "
|
||||
"If not checked, the criteria beneath will be ignored"
|
||||
msgstr ""
|
||||
"Označite ovde ako želite koristiti ovu karticu (Tab) kao deo pravila "
|
||||
"segmentacije. Ako ne označite, kriterijum koji sledi će biti ignorisan."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:crm_profiling.questionnaire,questions_ids:0
|
||||
#: model:ir.actions.act_window,name:crm_profiling.open_questions
|
||||
#: model:ir.ui.menu,name:crm_profiling.menu_segm_answer
|
||||
msgid "Questions"
|
||||
msgstr "Pitanja"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,parent_id:0
|
||||
msgid "Parent Profile"
|
||||
msgstr "Roditeljski Profil"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: wizard_button:open_questionnaire,init,end:0
|
||||
#: wizard_button:open_questionnaire,open,end:0
|
||||
msgid "Cancel"
|
||||
msgstr "Otkaži"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Partner Segmentations"
|
||||
msgstr "Segmentacije Partnera"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.actions.wizard,name:crm_profiling.wizard_open_questionnaire
|
||||
msgid "Using a questionnaire"
|
||||
msgstr "Korištenje Upitnika"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: wizard_button:open_questionnaire,open,compute:0
|
||||
msgid "Save Data"
|
||||
msgstr "Sacuvaj Podatke"
|
||||
@@ -8,13 +8,13 @@ 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-30 06:57+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"PO-Revision-Date: 2010-10-15 12:07+0000\n"
|
||||
"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.com>\n"
|
||||
"Language-Team: Russian <ru@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-01 08:47+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: decimal_precision
|
||||
@@ -85,4 +85,4 @@ msgstr "Настройка точности"
|
||||
#. module: decimal_precision
|
||||
#: model:ir.model,name:decimal_precision.model_decimal_precision
|
||||
msgid "decimal.precision"
|
||||
msgstr ""
|
||||
msgstr "Точность десятичных знаков"
|
||||
|
||||
+31
-23
@@ -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 09:53+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"PO-Revision-Date: 2010-10-15 12:51+0000\n"
|
||||
"Last-Translator: Nikolay Chesnokov <chesnokov_n@msn.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:38+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: delivery
|
||||
@@ -37,7 +37,7 @@ msgstr "Продажи и закупки"
|
||||
#. module: delivery
|
||||
#: view:delivery.grid:0
|
||||
msgid "Destination"
|
||||
msgstr "Назначение"
|
||||
msgstr "Место назначения"
|
||||
|
||||
#. module: delivery
|
||||
#: model:product.template,name:delivery.delivery_product_product_template
|
||||
@@ -68,6 +68,8 @@ msgstr "Недопустимое имя модели в определении
|
||||
#: help:res.partner,property_delivery_carrier:0
|
||||
msgid "This delivery method will be used when invoicing from packing."
|
||||
msgstr ""
|
||||
"Этот метод доставки должен использоваться при фактурировании на основании "
|
||||
"данных упаковки."
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_delivery_grid
|
||||
@@ -77,17 +79,17 @@ msgstr "Расценки на доставку"
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,zip_from:0
|
||||
msgid "Start Zip"
|
||||
msgstr ""
|
||||
msgstr "Почтовый индекс отправителя"
|
||||
|
||||
#. module: delivery
|
||||
#: selection:delivery.grid.line,price_type:0
|
||||
msgid "Fixed"
|
||||
msgstr ""
|
||||
msgstr "Фиксированный"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,line_ids:0
|
||||
msgid "Grid Line"
|
||||
msgstr ""
|
||||
msgstr "Разделяемая строка"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.act_window,name:delivery.action_delivery_grid_form
|
||||
@@ -104,7 +106,7 @@ msgstr "Генерировать черновики счетов при полу
|
||||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_delivery_grid_line
|
||||
msgid "Delivery line of grid"
|
||||
msgstr ""
|
||||
msgstr "Разделяемая строка поставки"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.ui.menu,name:delivery.menu_delivery
|
||||
@@ -114,12 +116,12 @@ msgstr "Доставка"
|
||||
#. module: delivery
|
||||
#: view:delivery.grid.line:0
|
||||
msgid "Grid Lines"
|
||||
msgstr ""
|
||||
msgstr "Разделяемые строки"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,grid_id:0
|
||||
msgid "Grid"
|
||||
msgstr "Расценка"
|
||||
msgstr "Разделение"
|
||||
|
||||
#. module: delivery
|
||||
#: view:res.partner:0
|
||||
@@ -135,7 +137,7 @@ msgstr "Активен"
|
||||
#. module: delivery
|
||||
#: view:delivery.grid:0
|
||||
msgid "Grid definition"
|
||||
msgstr ""
|
||||
msgstr "Определение разделения"
|
||||
|
||||
#. module: delivery
|
||||
#: selection:delivery.grid.line,type:0
|
||||
@@ -156,12 +158,12 @@ msgstr "Услуга или изделие, соответствующее до
|
||||
#. module: delivery
|
||||
#: view:delivery.grid.line:0
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "Условие"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_delivery_carrier
|
||||
msgid "Carrier and delivery grids"
|
||||
msgstr ""
|
||||
msgstr "Разделение поставки и перевозчика"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,standard_price:0
|
||||
@@ -190,6 +192,7 @@ msgstr "Страны"
|
||||
msgid ""
|
||||
"Error: The default UOM and the purchase UOM must be in the same category."
|
||||
msgstr ""
|
||||
"Ошибка. ЕИМ по умолчанию и закупочная ЕИМ должны иметь одинаковую категорию."
|
||||
|
||||
#. module: delivery
|
||||
#: view:sale.order:0
|
||||
@@ -199,18 +202,18 @@ msgstr "Примечания"
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,variable_factor:0
|
||||
msgid "Variable Factor"
|
||||
msgstr ""
|
||||
msgstr "Переменный фактор"
|
||||
|
||||
#. module: delivery
|
||||
#: selection:delivery.grid.line,price_type:0
|
||||
#: field:delivery.grid.line,type:0
|
||||
msgid "Variable"
|
||||
msgstr ""
|
||||
msgstr "Переменная"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,name:0
|
||||
msgid "Grid Name"
|
||||
msgstr ""
|
||||
msgstr "Имя разделения"
|
||||
|
||||
#. module: delivery
|
||||
#: view:delivery.carrier:0
|
||||
@@ -235,7 +238,7 @@ msgstr "Максимальное значение"
|
||||
#. module: delivery
|
||||
#: wizard_button:delivery.sale.order,init,delivery:0
|
||||
msgid "Add Delivery Costs"
|
||||
msgstr ""
|
||||
msgstr "Добавить стоимость доставки"
|
||||
|
||||
#. module: delivery
|
||||
#: wizard_field:delivery.sale.order,init,carrier_id:0
|
||||
@@ -248,7 +251,7 @@ msgstr "Метод доставки"
|
||||
#. module: delivery
|
||||
#: field:sale.order,id:0
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
msgstr "Идентификатор"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,operator:0
|
||||
@@ -258,12 +261,12 @@ msgstr "Оператор"
|
||||
#. module: delivery
|
||||
#: model:ir.module.module,shortdesc:delivery.module_meta_information
|
||||
msgid "Carriers and deliveries"
|
||||
msgstr ""
|
||||
msgstr "Перевозчики и поставки"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.carrier,grids_id:0
|
||||
msgid "Delivery Grids"
|
||||
msgstr ""
|
||||
msgstr "Разделение поставки"
|
||||
|
||||
#. module: delivery
|
||||
#: selection:delivery.grid.line,type:0
|
||||
@@ -289,28 +292,33 @@ msgid ""
|
||||
"define your own carrier and delivery grids for prices. When creating "
|
||||
"invoices from picking, Open ERP is able to add and compute the shipping line."
|
||||
msgstr ""
|
||||
"Позволяет добавить методы доставки в заказы на продажу и упаковку. Вы можете "
|
||||
"определить своего собственного перевозчика и выполнить разделение поставка "
|
||||
"для определения стоимости. При создании счета-фактуры на основании упаковки, "
|
||||
"Open ERP имеет возможность добавлять и вычислить строки доставки."
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,zip_to:0
|
||||
msgid "To Zip"
|
||||
msgstr ""
|
||||
msgstr "Почтовый индекс получателя"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.act_window,name:delivery.action_picking_tree4
|
||||
#: model:ir.ui.menu,name:delivery.menu_action_picking_tree3
|
||||
msgid "Packing to be invoiced"
|
||||
msgstr ""
|
||||
msgstr "Фактурирование по упаковке"
|
||||
|
||||
#. module: delivery
|
||||
#: help:sale.order,carrier_id:0
|
||||
msgid ""
|
||||
"Complete this field if you plan to invoice the shipping based on packing."
|
||||
msgstr ""
|
||||
"Заполните это поле, если вы планируете счет доставки основанный на упаковке."
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.wizard,name:delivery.wizard_deliver_line_add
|
||||
msgid "Delivery Costs"
|
||||
msgstr ""
|
||||
msgstr "Стоимость поставки"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,list_price:0
|
||||
|
||||
@@ -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-14 17:38+0000\n"
|
||||
"Last-Translator: zmmaj <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-15 09:04+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Serbian <sr@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-15 04:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: delivery
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<document filename="test.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Delivery Order" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
|
||||
<document filename="Delivery Order.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Delivery Order" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
|
||||
<pageTemplate id="first">
|
||||
<frame id="first" x1="30.0" y1="27.0" width="508" height="815"/>
|
||||
</pageTemplate>
|
||||
@@ -189,11 +189,8 @@
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_1">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<section>
|
||||
<para style="terp_default_9">[[repeatIn(o.move_lines,'line')]]</para>
|
||||
<para style="terp_default_1">[[repeatIn(o.move_lines,'line')]]</para>
|
||||
<blockTable colWidths="370.0,85.0,83.0" style="Table4">
|
||||
<tr>
|
||||
<td>
|
||||
@@ -211,8 +208,5 @@
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</section>
|
||||
<para style="Standard">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
{
|
||||
'name': 'Integrated Document Management System',
|
||||
'version': '1.1',
|
||||
'version': '2.0',
|
||||
'category': 'Generic Modules/Others',
|
||||
'description': """This is a complete document management system:
|
||||
* User Authentication
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
import logging
|
||||
import os
|
||||
import tempfile
|
||||
from subprocess import Popen, PIPE
|
||||
|
||||
class NhException(Exception):
|
||||
pass
|
||||
|
||||
from subprocess import Popen, PIPE
|
||||
|
||||
class indexer(object):
|
||||
""" An indexer knows how to parse the content of some file.
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright P. Christeas <p_christ@hol.gr> 2008-2010
|
||||
# Copyright 2010 OpenERP SA. http://www.openerp.com
|
||||
#
|
||||
# This program is Free Software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public License
|
||||
# as published by the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
###############################################################################
|
||||
|
||||
|
||||
def dict_merge(*dicts):
|
||||
""" Return a dict with all values of dicts
|
||||
"""
|
||||
res = {}
|
||||
for d in dicts:
|
||||
res.update(d)
|
||||
return res
|
||||
|
||||
def dict_merge2(*dicts):
|
||||
""" Return a dict with all values of dicts.
|
||||
If some key appears twice and contains iterable objects, the values
|
||||
are merged (instead of overwritten).
|
||||
"""
|
||||
res = {}
|
||||
for d in dicts:
|
||||
for k in d.keys():
|
||||
if k in res and isinstance(res[k], (list, tuple)):
|
||||
res[k] = res[k] + d[k]
|
||||
elif k in res and isinstance(res[k], dict):
|
||||
res[k].update(d[k])
|
||||
else:
|
||||
res[k] = d[k]
|
||||
return res
|
||||
|
||||
def dict_filter(srcdic, keys, res=None):
|
||||
''' Return a copy of srcdic that has only keys set.
|
||||
If any of keys are missing from srcdic, the result won't have them,
|
||||
either.
|
||||
@param res If given, result will be updated there, instead of a new dict.
|
||||
'''
|
||||
if res is None:
|
||||
res = {}
|
||||
for k in keys:
|
||||
if k in srcdic:
|
||||
res[k] = srcdic[k]
|
||||
return res
|
||||
|
||||
#eof
|
||||
@@ -28,6 +28,7 @@ import os
|
||||
import tools
|
||||
from tools.translate import _
|
||||
import nodes
|
||||
import logging
|
||||
|
||||
DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['root_path'], 'filestore'))
|
||||
|
||||
@@ -106,7 +107,7 @@ class document_file(osv.osv):
|
||||
'parent_id': __get_def_directory
|
||||
}
|
||||
_sql_constraints = [
|
||||
('filename_uniq', 'unique (name,parent_id,res_id,res_model)', 'The file name must be unique !')
|
||||
# filename_uniq is not possible in pure SQL
|
||||
]
|
||||
def _check_duplication(self, cr, uid, vals, ids=[], op='create'):
|
||||
name = vals.get('name', False)
|
||||
@@ -259,6 +260,9 @@ class document_file(osv.osv):
|
||||
r = stor.prepare_unlink(cr, uid, storage_id, f)
|
||||
if r:
|
||||
unres.append(r)
|
||||
else:
|
||||
logging.getLogger('document').warning("Unlinking attachment #%s %s that has no storage",
|
||||
f.id, f.name)
|
||||
res = super(document_file, self).unlink(cr, uid, ids, context)
|
||||
stor.do_unlink(cr, uid, unres)
|
||||
return res
|
||||
|
||||
@@ -125,6 +125,10 @@ class document_directory(osv.osv):
|
||||
def get_full_path(self, cr, uid, dir_id, context=None):
|
||||
""" Return the full path to this directory, in a list, root first
|
||||
"""
|
||||
if isinstance(dir_id, (tuple, list)):
|
||||
assert len(dir_id) == 1
|
||||
dir_id = dir_id[0]
|
||||
|
||||
def _parent(dir_id, path):
|
||||
parent=self.browse(cr, uid, dir_id)
|
||||
if parent.parent_id and not parent.ressource_parent_type_id:
|
||||
@@ -174,6 +178,39 @@ class document_directory(osv.osv):
|
||||
|
||||
return nodes.get_node_context(cr, uid, context).get_uri(cr, uri)
|
||||
|
||||
def get_node_class(self, cr, uid, ids, dbro=None, dynamic=False, context=None):
|
||||
"""Retrieve the class of nodes for this directory
|
||||
|
||||
This function can be overriden by inherited classes ;)
|
||||
@param dbro The browse object, if caller already has it
|
||||
"""
|
||||
if dbro is None:
|
||||
dbro = self.browse(cr, uid, ids, context=context)
|
||||
|
||||
if dynamic:
|
||||
assert dbro.type == 'directory'
|
||||
return nodes.node_res_obj
|
||||
elif dbro.type == 'directory':
|
||||
return nodes.node_dir
|
||||
elif dbro.type == 'ressource':
|
||||
return nodes.node_res_dir
|
||||
else:
|
||||
raise ValueError("dir node for %s type", dbro.type)
|
||||
|
||||
def _prepare_context(self, cr, uid, nctx, context):
|
||||
""" Fill nctx with properties for this database
|
||||
@param nctx instance of nodes.node_context, to be filled
|
||||
@param context ORM context (dict) for us
|
||||
|
||||
Note that this function is called *without* a list of ids,
|
||||
it should behave the same for the whole database (based on the
|
||||
ORM instance of document.directory).
|
||||
|
||||
Some databases may override this and attach properties to the
|
||||
node_context. See WebDAV, CalDAV.
|
||||
"""
|
||||
return
|
||||
|
||||
def get_dir_permissions(self, cr, uid, ids ):
|
||||
"""Check what permission user 'uid' has on directory 'id'
|
||||
"""
|
||||
@@ -215,6 +252,7 @@ class document_directory(osv.osv):
|
||||
name=directory.name
|
||||
if not parent_id:
|
||||
parent_id=directory.parent_id and directory.parent_id.id or False
|
||||
# TODO fix algo
|
||||
if not ressource_parent_type_id:
|
||||
ressource_parent_type_id=directory.ressource_parent_type_id and directory.ressource_parent_type_id.id or False
|
||||
if not ressource_id:
|
||||
@@ -235,8 +273,11 @@ class document_directory(osv.osv):
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
if not self._check_duplication(cr, uid, vals):
|
||||
raise osv.except_osv(_('ValidateError'), _('Directory name must be unique!'))
|
||||
if vals.get('name',False) and (vals.get('name').find('/')+1 or vals.get('name').find('@')+1 or vals.get('name').find('$')+1 or vals.get('name').find('#')+1) :
|
||||
raise osv.except_osv(_('ValidateError'), _('Directory name contains special characters!'))
|
||||
newname = vals.get('name',False)
|
||||
if newname:
|
||||
for illeg in ('/', '@', '$', '#'):
|
||||
if illeg in newname:
|
||||
raise osv.except_osv(_('ValidateError'), _('Directory name contains special characters!'))
|
||||
return super(document_directory,self).create(cr, uid, vals, context)
|
||||
|
||||
# TODO def unlink(...
|
||||
@@ -255,7 +296,7 @@ class document_directory_dctx(osv.osv):
|
||||
_name = 'document.directory.dctx'
|
||||
_description = 'Directory Dynamic Context'
|
||||
_columns = {
|
||||
'dir_id': fields.many2one('document.directory', 'Directory', required=True),
|
||||
'dir_id': fields.many2one('document.directory', 'Directory', required=True, ondelete="cascade"),
|
||||
'field': fields.char('Field', size=20, required=True, select=1, help="The name of the field. Note that the prefix \"dctx_\" will be prepended to what is typed here."),
|
||||
'expr': fields.char('Expression', size=64, required=True, help="A python expression used to evaluate the field.\n" + \
|
||||
"You can use 'dir_id' for current dir, 'res_id', 'res_model' as a reference to the current record, in dynamic folders"),
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="view_attach_filter_inherit0" model="ir.ui.view">
|
||||
<field name="name">IR Attachment0</field>
|
||||
<field name="model">ir.attachment</field>
|
||||
@@ -296,9 +296,9 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
<record id="view_attach_filter_inherit2" model="ir.ui.view">
|
||||
|
||||
<field name="name">IR Attachment2</field>
|
||||
<field name="model">ir.attachment</field>
|
||||
<field name="type">search</field>
|
||||
@@ -307,12 +307,14 @@
|
||||
<filter string="Owner" position="replace">
|
||||
<filter string="Owner" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Partner" icon="terp-partner" domain="[]"
|
||||
|
||||
context="{'group_by':'partner_id'}" groups="base.group_extended"/>
|
||||
<filter string="Directory" icon="terp-folder-green" domain="[]" context="{'group_by':'parent_id'}"/>
|
||||
</filter>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="view_document_file_tree">
|
||||
<field name="name">ir.attachment</field>
|
||||
<field name="model">ir.attachment</field>
|
||||
|
||||
+80
-57
@@ -61,16 +61,27 @@ def get_node_context(cr, uid, context):
|
||||
return node_context(cr, uid, context)
|
||||
|
||||
class node_context(object):
|
||||
""" This is the root node, representing access to some particular
|
||||
context """
|
||||
""" This is the root node, representing access to some particular context
|
||||
|
||||
A context is a set of persistent data, which may influence the structure
|
||||
of the nodes. All other transient information during a data query should
|
||||
be passed down with function arguments.
|
||||
"""
|
||||
cached_roots = {}
|
||||
node_file_class = None
|
||||
|
||||
def __init__(self, cr, uid, context=None):
|
||||
self.dbname = cr.dbname
|
||||
self.uid = uid
|
||||
self.context = context
|
||||
if context is None:
|
||||
context = {}
|
||||
context['uid'] = uid
|
||||
self._dirobj = pooler.get_pool(cr.dbname).get('document.directory')
|
||||
self.node_file_class = node_file
|
||||
self.extra_ctx = {} # Extra keys for context, that do _not_ trigger inequality
|
||||
assert self._dirobj
|
||||
self._dirobj._prepare_context(cr, uid, self, context=context)
|
||||
self.rootdir = False #self._dirobj._get_root_directory(cr,uid,context)
|
||||
|
||||
def __eq__(self, other):
|
||||
@@ -88,10 +99,14 @@ class node_context(object):
|
||||
|
||||
def __ne__(self, other):
|
||||
return not self.__eq__(other)
|
||||
|
||||
def get(self, name, default=None):
|
||||
return self.context.get(name, default)
|
||||
|
||||
def get_uri(self, cr, uri):
|
||||
""" Although this fn passes back to doc.dir, it is needed since
|
||||
it is a potential caching point """
|
||||
it is a potential caching point.
|
||||
"""
|
||||
(ndir, duri) = self._dirobj._locate_child(cr, self.uid, self.rootdir, uri, None, self)
|
||||
while duri:
|
||||
ndir = ndir.child(cr, duri[0])
|
||||
@@ -104,14 +119,10 @@ class node_context(object):
|
||||
"""Create (or locate) a node for a directory
|
||||
@param dbro a browse object of document.directory
|
||||
"""
|
||||
fullpath = self._dirobj.get_full_path(cr, self.uid, dbro.id, self.context)
|
||||
if dbro.type == 'directory':
|
||||
return node_dir(fullpath, None ,self, dbro)
|
||||
elif dbro.type == 'ressource':
|
||||
assert dbro.ressource_parent_type_id == False
|
||||
return node_res_dir(fullpath, None, self, dbro)
|
||||
else:
|
||||
raise ValueError("dir node for %s type", dbro.type)
|
||||
|
||||
fullpath = dbro.get_full_path(context=self.context)
|
||||
klass = dbro.get_node_class(dbro, context=self.context)
|
||||
return klass(fullpath, None ,self, dbro)
|
||||
|
||||
def get_file_node(self, cr, fbro):
|
||||
""" Create or locate a node for a static file
|
||||
@@ -121,7 +132,7 @@ class node_context(object):
|
||||
if fbro.parent_id:
|
||||
parent = self.get_dir_node(cr, fbro.parent_id)
|
||||
|
||||
return node_file(fbro.name, parent, self, fbro)
|
||||
return self.node_file_class(fbro.name, parent, self, fbro)
|
||||
|
||||
|
||||
class node_descriptor(object):
|
||||
@@ -266,22 +277,24 @@ class node_class(object):
|
||||
""" Get a tag, unique per object + modification.
|
||||
|
||||
see. http://tools.ietf.org/html/rfc2616#section-13.3.3 """
|
||||
return self._get_ttag(cr) + ':' + self._get_wtag(cr)
|
||||
return '"%s-%s"' % (self._get_ttag(cr), self._get_wtag(cr))
|
||||
|
||||
def _get_wtag(self, cr):
|
||||
""" Return the modification time as a unique, compact string """
|
||||
return str(_str2time(self.write_date))
|
||||
return str(_str2time(self.write_date)).replace('.','')
|
||||
|
||||
def _get_ttag(self,cr):
|
||||
def _get_ttag(self, cr):
|
||||
""" Get a unique tag for this type/id of object.
|
||||
Must be overriden, so that each node is uniquely identified.
|
||||
"""
|
||||
print "node_class.get_ttag()",self
|
||||
raise NotImplementedError("get_etag stub()")
|
||||
raise NotImplementedError("get_ttag stub()")
|
||||
|
||||
def get_dav_props(self, cr):
|
||||
""" If this class has special behaviour for GroupDAV etc, export
|
||||
its capabilities """
|
||||
# This fn is placed here rather than WebDAV, because we want the
|
||||
# baseclass methods to apply to all node subclasses
|
||||
return self.DAV_PROPS or {}
|
||||
|
||||
def match_dav_eprop(self, cr, match, ns, prop):
|
||||
@@ -438,22 +451,20 @@ class node_database(node_class):
|
||||
if not domain:
|
||||
domain = []
|
||||
|
||||
where2 = where + domain + [('type', '=', 'directory')]
|
||||
where2 = where + domain + ['|', ('type', '=', 'directory'), \
|
||||
'&', ('type', '=', 'ressource'), ('ressource_parent_type_id','=',False)]
|
||||
ids = dirobj.search(cr, uid, where2, context=ctx)
|
||||
res = []
|
||||
for dirr in dirobj.browse(cr, uid, ids, context=ctx):
|
||||
res.append(node_dir(dirr.name, self, self.context,dirr))
|
||||
|
||||
where2 = where + domain + [('type', '=', 'ressource'), ('ressource_parent_type_id','=',False)]
|
||||
ids = dirobj.search(cr, uid, where2, context=ctx)
|
||||
for dirr in dirobj.browse(cr, uid, ids, context=ctx):
|
||||
res.append(node_res_dir(dirr.name, self, self.context, dirr))
|
||||
klass = dirr.get_node_class(dirr, context=ctx)
|
||||
res.append(klass(dirr.name, self, self.context,dirr))
|
||||
|
||||
fil_obj = dirobj.pool.get('ir.attachment')
|
||||
ids = fil_obj.search(cr, uid, where, context=ctx)
|
||||
if ids:
|
||||
for fil in fil_obj.browse(cr, uid, ids, context=ctx):
|
||||
res.append(node_file(fil.name, self, self.context, fil))
|
||||
klass = self.context.node_file_class
|
||||
res.append(klass(fil.name, self, self.context, fil))
|
||||
return res
|
||||
|
||||
def _file_get(self,cr, nodename=False):
|
||||
@@ -463,9 +474,6 @@ class node_database(node_class):
|
||||
def _get_ttag(self,cr):
|
||||
return 'db-%s' % cr.dbname
|
||||
|
||||
def get_dav_resourcetype(self, cr):
|
||||
return ('collection', 'DAV:')
|
||||
|
||||
def mkdosname(company_name, default='noname'):
|
||||
""" convert a string to a dos-like name"""
|
||||
if not company_name:
|
||||
@@ -492,7 +500,10 @@ class node_dir(node_database):
|
||||
self.write_date = dirr and (dirr.write_date or dirr.create_date) or False
|
||||
self.content_length = 0
|
||||
self.unixperms = 040750
|
||||
self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
|
||||
try:
|
||||
self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
|
||||
except Exception:
|
||||
self.uuser = 'nobody'
|
||||
self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup')
|
||||
self.uidperms = dirr.get_dir_permissions()
|
||||
if dctx:
|
||||
@@ -505,7 +516,7 @@ class node_dir(node_database):
|
||||
for dfld in dirr.dctx_ids:
|
||||
try:
|
||||
self.dctx['dctx_' + dfld.field] = safe_eval(dfld.expr,dc2)
|
||||
except Exception,e:
|
||||
except Exception:
|
||||
print "Cannot eval %s" % dfld.expr
|
||||
print e
|
||||
pass
|
||||
@@ -670,12 +681,14 @@ class node_dir(node_database):
|
||||
return ret
|
||||
|
||||
class node_res_dir(node_class):
|
||||
""" A special sibling to node_dir, which does only contain dynamically
|
||||
""" A folder containing dynamic folders
|
||||
A special sibling to node_dir, which does only contain dynamically
|
||||
created folders foreach resource in the foreign model.
|
||||
All folders should be of type node_res_obj and merely behave like
|
||||
node_dirs (with limited domain).
|
||||
"""
|
||||
our_type = 'collection'
|
||||
res_obj_class = None
|
||||
def __init__(self, path, parent, context, dirr, dctx=None ):
|
||||
super(node_res_dir,self).__init__(path, parent, context)
|
||||
self.dir_id = dirr.id
|
||||
@@ -687,7 +700,10 @@ class node_res_dir(node_class):
|
||||
self.write_date = dirr.write_date or dirr.create_date
|
||||
self.content_length = 0
|
||||
self.unixperms = 040750
|
||||
self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
|
||||
try:
|
||||
self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
|
||||
except Exception:
|
||||
self.uuser = 'nobody'
|
||||
self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup')
|
||||
self.uidperms = dirr.get_dir_permissions()
|
||||
self.res_model = dirr.ressource_type_id and dirr.ressource_type_id.model or False
|
||||
@@ -782,17 +798,15 @@ class node_res_dir(node_class):
|
||||
continue
|
||||
# Yes! we can't do better but skip nameless records.
|
||||
|
||||
res.append(node_res_obj(name, self.dir_id, self, self.context, self.res_model, bo))
|
||||
res.append(self.res_obj_class(name, self.dir_id, self, self.context, self.res_model, bo))
|
||||
return res
|
||||
|
||||
def _get_ttag(self,cr):
|
||||
return 'rdir-%d' % self.dir_id
|
||||
|
||||
def get_dav_resourcetype(self, cr):
|
||||
return ('collection', 'DAV:')
|
||||
|
||||
class node_res_obj(node_class):
|
||||
""" A special sibling to node_dir, which does only contain dynamically
|
||||
""" A dynamically created folder.
|
||||
A special sibling to node_dir, which does only contain dynamically
|
||||
created folders foreach resource in the foreign model.
|
||||
All folders should be of type node_res_obj and merely behave like
|
||||
node_dirs (with limited domain).
|
||||
@@ -828,7 +842,7 @@ class node_res_obj(node_class):
|
||||
for fld,expr in self.dctx_dict.items():
|
||||
try:
|
||||
self.dctx[fld] = safe_eval(expr, dc2)
|
||||
except Exception,e:
|
||||
except Exception:
|
||||
print "Cannot eval %s for %s" % (expr, fld)
|
||||
print e
|
||||
pass
|
||||
@@ -886,7 +900,8 @@ class node_res_obj(node_class):
|
||||
|
||||
return res
|
||||
|
||||
def get_dav_props(self, cr):
|
||||
def get_dav_props_DEPR(self, cr):
|
||||
# Deprecated! (but document_ics must be cleaned, first)
|
||||
res = {}
|
||||
cntobj = self.context._dirobj.pool.get('document.directory.content')
|
||||
uid = self.context.uid
|
||||
@@ -899,7 +914,8 @@ class node_res_obj(node_class):
|
||||
res['http://groupdav.org/'] = ('resourcetype',)
|
||||
return res
|
||||
|
||||
def get_dav_eprop(self, cr, ns, prop):
|
||||
def get_dav_eprop_DEPR(self, cr, ns, prop):
|
||||
# Deprecated!
|
||||
if ns != 'http://groupdav.org/' or prop != 'resourcetype':
|
||||
logger.warning("Who asked for %s:%s?" % (ns, prop))
|
||||
return None
|
||||
@@ -910,6 +926,7 @@ class node_res_obj(node_class):
|
||||
where = [('directory_id','=',self.dir_id) ]
|
||||
ids = cntobj.search(cr,uid,where,context=ctx)
|
||||
for content in cntobj.browse(cr, uid, ids, context=ctx):
|
||||
# TODO: remove relic of GroupDAV
|
||||
if content.extension == '.ics': # FIXME: call the content class!
|
||||
return ('vevent-collection','http://groupdav.org/')
|
||||
return None
|
||||
@@ -944,20 +961,21 @@ class node_res_obj(node_class):
|
||||
res_name = getattr(bo, namefield)
|
||||
if not res_name:
|
||||
continue
|
||||
res.append(node_res_obj(res_name, self.dir_id, self, self.context, self.res_model, res_bo = bo))
|
||||
# TODO Revise
|
||||
klass = directory.get_node_class(directory, dynamic=True, context=ctx)
|
||||
res.append(klass(res_name, self.dir_id, self, self.context, self.res_model, res_bo = bo))
|
||||
|
||||
|
||||
where2 = where + [('parent_id','=',self.dir_id) ]
|
||||
ids = dirobj.search(cr, uid, where2, context=ctx)
|
||||
for dirr in dirobj.browse(cr, uid, ids, context=ctx):
|
||||
if dirr.type == 'directory':
|
||||
res.append(node_res_obj(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
|
||||
klass = dirr.get_node_class(dirr, dynamic=True, context=ctx)
|
||||
res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
|
||||
elif dirr.type == 'ressource':
|
||||
# child resources can be controlled by properly set dctx
|
||||
res.append(node_res_dir(dirr.name,self,self.context, dirr, {'active_id': self.res_id}))
|
||||
|
||||
|
||||
|
||||
klass = dirr.get_node_class(dirr, context=ctx)
|
||||
res.append(klass(dirr.name,self,self.context, dirr, {'active_id': self.res_id}))
|
||||
|
||||
fil_obj = dirobj.pool.get('ir.attachment')
|
||||
if self.res_find_all:
|
||||
@@ -967,7 +985,8 @@ class node_res_obj(node_class):
|
||||
ids = fil_obj.search(cr, uid, where3, context=ctx)
|
||||
if ids:
|
||||
for fil in fil_obj.browse(cr, uid, ids, context=ctx):
|
||||
res.append(node_file(fil.name, self, self.context, fil))
|
||||
klass = self.context.node_file_class
|
||||
res.append(klass(fil.name, self, self.context, fil))
|
||||
|
||||
|
||||
# Get Child Ressource Directories
|
||||
@@ -979,9 +998,11 @@ class node_res_obj(node_class):
|
||||
dirids = dirids + dirobj.search(cr,uid, where5)
|
||||
for dirr in dirobj.browse(cr, uid, dirids, context=ctx):
|
||||
if dirr.type == 'directory' and not dirr.parent_id:
|
||||
res.append(node_res_obj(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
|
||||
klass = dirr.get_node_class(dirr, dynamic=True, context=ctx)
|
||||
res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
|
||||
if dirr.type == 'ressource':
|
||||
res.append(node_res_dir(dirr.name, self, self.context, dirr, {'active_id': self.res_id}))
|
||||
klass = dirr.get_node_class(dirr, context=ctx)
|
||||
res.append(klass(dirr.name, self, self.context, dirr, {'active_id': self.res_id}))
|
||||
return res
|
||||
|
||||
def create_child_collection(self, cr, objname):
|
||||
@@ -993,9 +1014,9 @@ class node_res_obj(node_class):
|
||||
uid = self.context.uid
|
||||
ctx = self.context.context.copy()
|
||||
ctx.update(self.dctx)
|
||||
res_obj = dirobj.pool.get(self.context.context['res_model'])
|
||||
res_obj = dirobj.pool.get(self.res_model)
|
||||
|
||||
object2 = res_obj.browse(cr, uid, self.context.context['res_id']) or False
|
||||
object2 = res_obj.browse(cr, uid, self.res_id) or False
|
||||
|
||||
obj = dirobj.browse(cr, uid, self.dir_id)
|
||||
if obj and (obj.type == 'ressource') and not object2:
|
||||
@@ -1038,7 +1059,8 @@ class node_res_obj(node_class):
|
||||
|
||||
fil_id = fil_obj.create(cr, uid, val, context=ctx)
|
||||
fil = fil_obj.browse(cr, uid, fil_id, context=ctx)
|
||||
fnode = node_file(path, self, self.context, fil)
|
||||
klass = self.context.node_file_class
|
||||
fnode = klass(path, self, self.context, fil)
|
||||
if data is not None:
|
||||
fnode.set_data(cr, data, fil)
|
||||
return fnode
|
||||
@@ -1046,8 +1068,7 @@ class node_res_obj(node_class):
|
||||
def _get_ttag(self,cr):
|
||||
return 'rodir-%d-%d' % (self.dir_id, self.res_id)
|
||||
|
||||
def get_dav_resourcetype(self, cr):
|
||||
return ('collection', 'DAV:')
|
||||
node_res_dir.res_obj_class = node_res_obj
|
||||
|
||||
class node_file(node_class):
|
||||
our_type = 'file'
|
||||
@@ -1069,7 +1090,10 @@ class node_file(node_class):
|
||||
elif not parent.check_perms('w'):
|
||||
self.uidperms = 4
|
||||
|
||||
self.uuser = (fil.user_id and fil.user_id.login) or 'nobody'
|
||||
try:
|
||||
self.uuser = (fil.user_id and fil.user_id.login) or 'nobody'
|
||||
except Exception:
|
||||
self.uuser = 'nobody'
|
||||
self.ugroup = mkdosname(fil.company_id and fil.company_id.name, default='nogroup')
|
||||
|
||||
# This only propagates the problem to get_data. Better
|
||||
@@ -1183,9 +1207,6 @@ class node_file(node_class):
|
||||
def _get_ttag(self,cr):
|
||||
return 'file-%d' % self.file_id
|
||||
|
||||
def get_dav_resourcetype(self, cr):
|
||||
return ''
|
||||
|
||||
def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False):
|
||||
if ndir_node and ndir_node.context != self.context:
|
||||
raise NotImplementedError("Cannot move files between contexts")
|
||||
@@ -1382,3 +1403,5 @@ class nodefd_content(StringIO, node_descriptor):
|
||||
finally:
|
||||
cr.close()
|
||||
StringIO.close(self)
|
||||
|
||||
#eof
|
||||
@@ -12,7 +12,7 @@
|
||||
I create a "Testing" folder where all the test data will go.
|
||||
-
|
||||
!record {model: document.directory, id: dir_tests }:
|
||||
name: 'Testing'
|
||||
name: 'Testing (will be deleted!)'
|
||||
parent_id: dir_root
|
||||
-
|
||||
I create an attachment into the root folder (w. empty fields, test that
|
||||
@@ -52,7 +52,7 @@
|
||||
I search the testing folder for attachments.
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
ids = self.search(cr, uid, [('parent_id.name','=', 'Testing'), ('name','=','Test renamed 2')])
|
||||
ids = self.search(cr, uid, [('parent_id.name','=', 'Testing (will be deleted!)'), ('name','=','Test renamed 2')])
|
||||
assert ids == [ ref("file_test2") ], ids
|
||||
-
|
||||
I create an attachment to a 3rd resource, eg. a res.country
|
||||
@@ -70,7 +70,14 @@
|
||||
ids = self.search(cr, uid, [('res_model', '=', 'res.country'), ('res_id', '=', ref("base.za"))])
|
||||
assert ids == [ ref("attach_3rd")], ids
|
||||
-
|
||||
I delete the attachment
|
||||
I delete the attachments
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
self.unlink(cr, uid, [ref('file_test2')])
|
||||
self.unlink(cr, uid, [ref('attach_3rd')])
|
||||
-
|
||||
I delete the tests folder
|
||||
-
|
||||
!python {model: document.directory}: |
|
||||
self.unlink(cr, uid, [ref('dir_tests')])
|
||||
cr.commit()
|
||||
|
||||
@@ -363,7 +363,6 @@ class abstracted_fs(object):
|
||||
"""Remove the specified directory."""
|
||||
cr, node, rem = datacr
|
||||
assert node
|
||||
cr = self.get_node_cr(node)
|
||||
node.rmcol(cr)
|
||||
cr.commit()
|
||||
|
||||
|
||||
@@ -200,6 +200,11 @@
|
||||
# TODO move
|
||||
-
|
||||
I remove the 'Test-Folder3'
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
||||
ftp.rmd("Test-Folder3")
|
||||
-
|
||||
I check that test3.txt is removed.
|
||||
-
|
||||
@@ -228,3 +233,22 @@
|
||||
-
|
||||
I move the 200 files to 'Test-Folder2'
|
||||
# TODO
|
||||
|
||||
-
|
||||
I delete the 200 files
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
from cStringIO import StringIO
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
|
||||
# TODO speed
|
||||
ftp.delete('test3.txt')
|
||||
for i in range(0, 200):
|
||||
ftp.delete('test-name%s.txt' %i)
|
||||
-
|
||||
I remove the 'Test-Folder2'
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
||||
ftp.rmd("Test-Folder2")
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
from document_ftp import test_easyftp as te
|
||||
ftp = te.get_plain_ftp(timeout=1.0)
|
||||
-
|
||||
I create a folder called '������������ ��������' in the server.
|
||||
I create in the server a folder called 'Äïêéìáóôéêüò ÖÜêåëëïò'
|
||||
-
|
||||
!record {model: document.directory, id: dir_itests }:
|
||||
name: '������������ ��������'
|
||||
name: 'Äïêéìáóôéêüò ÖÜêåëëïò'
|
||||
parent_id: document.dir_root
|
||||
-
|
||||
And then I create another folder, under it, through FTP
|
||||
@@ -16,67 +16,77 @@
|
||||
!python {model: ir.attachment}: |
|
||||
cr.commit()
|
||||
from document_ftp import test_easyftp as te
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������')
|
||||
ftp.mkd("�������� ��� ����")
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò')
|
||||
ftp.mkd("ÖÜêåëëïò áðü êÜôù")
|
||||
-
|
||||
I check that this folder exists at the server
|
||||
-
|
||||
!assert {model: document.directory, id: , search: "[('name','=','�������� ��� ����')]" }:
|
||||
!assert {model: document.directory, id: , search: "[('name','=','ÖÜêåëëïò áðü êÜôù')]" }:
|
||||
- parent_id != False
|
||||
-
|
||||
I login with FTP and check that '������������ ��������' is there
|
||||
I login with FTP and check that 'Äïêéìáóôéêüò ÖÜêåëëïò' is there
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�������� ��� ����')
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù')
|
||||
-
|
||||
I create a file named '������' into that folder
|
||||
I create a file named 'ÄïêéìÞ' into that folder
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
from cStringIO import StringIO
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�������� ��� ����')
|
||||
fdata = StringIO('������� �� utf-8')
|
||||
ftp.storbinary('STOR ������.txt', fdata)
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù')
|
||||
fdata = StringIO('êåßìåíï ìå utf-8')
|
||||
ftp.storbinary('STOR ÄïêéìÞ.txt', fdata)
|
||||
-
|
||||
I remove the '������.txt' file
|
||||
I remove the 'ÄïêéìÞ.txt' file
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
from cStringIO import StringIO
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�������� ��� ����')
|
||||
ftp.delete('������.txt')
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù')
|
||||
ftp.delete('ÄïêéìÞ.txt')
|
||||
-
|
||||
I rename '�������� ��� ����' into '�����'
|
||||
I rename 'ÖÜêåëëïò áðü êÜôù' into 'Üëëïò'
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������')
|
||||
ftp.rename("�������� ��� ����", "�����")
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò')
|
||||
ftp.rename("ÖÜêåëëïò áðü êÜôù", "Üëëïò")
|
||||
-
|
||||
I place a file 'file �3' in '�����'
|
||||
I place a file 'file Ö3' in 'Üëëïò'
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
from cStringIO import StringIO
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�����')
|
||||
fdata = StringIO('�� ���� �������')
|
||||
ftp.storbinary('STOR file �3.txt', fdata)
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò')
|
||||
fdata = StringIO('êé Üëëï êåßìåíï')
|
||||
ftp.storbinary('STOR file Ö3.txt', fdata)
|
||||
-
|
||||
I rename the file into file+range(1..200) (large filename)
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
from cStringIO import StringIO
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�����')
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò')
|
||||
vuvuzela = 'b'+''.join('z' * 200)+'!'
|
||||
ftp.rename("file �3.txt", vuvuzela)
|
||||
ftp.rename("file Ö3.txt", vuvuzela)
|
||||
-
|
||||
I delete the file with the large name
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
from cStringIO import StringIO
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�����')
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò')
|
||||
vuvuzela = 'b'+''.join('z' * 200)+'!'
|
||||
ftp.delete(vuvuzela)
|
||||
|
||||
-
|
||||
I delete the testing folders
|
||||
-
|
||||
!python {model: ir.attachment}: |
|
||||
from document_ftp import test_easyftp as te
|
||||
from cStringIO import StringIO
|
||||
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
||||
ftp.rmd('Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò')
|
||||
ftp.rmd('Äïêéìáóôéêüò ÖÜêåëëïò')
|
||||
|
||||
@@ -118,3 +118,10 @@
|
||||
- |
|
||||
Bonus Piste:
|
||||
I create a 'Partner3' under 'all'
|
||||
-
|
||||
I delete the Partners Testing folder
|
||||
-
|
||||
!python {model: document.directory}: |
|
||||
self.unlink(cr, uid, [ref('dir_tests2')])
|
||||
self.unlink(cr, uid, [ref('dir_respart1')])
|
||||
cr.commit()
|
||||
@@ -21,3 +21,7 @@
|
||||
|
||||
import webdav
|
||||
import webdav_server
|
||||
|
||||
import document_webdav
|
||||
|
||||
#eof
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user