diff --git a/addons/account/account.py b/addons/account/account.py
index d0e9c501bb9..aced4041f13 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -368,16 +368,16 @@ class account_account(osv.osv):
'parent_id': fields.many2one('account.account', 'Parent', ondelete='cascade', domain=[('type','=','view')]),
'child_parent_ids': fields.one2many('account.account','parent_id','Children'),
'child_consol_ids': fields.many2many('account.account', 'account_account_consol_rel', 'child_id', 'parent_id', 'Consolidated Children'),
- 'child_id': fields.function(_get_child_ids, method=True, type='many2many', relation="account.account", string="Child Accounts"),
- 'balance': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Balance', multi='balance'),
- 'credit': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Credit', multi='balance'),
- 'debit': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Debit', multi='balance'),
+ 'child_id': fields.function(_get_child_ids, type='many2many', relation="account.account", string="Child Accounts"),
+ 'balance': fields.function(__compute, digits_compute=dp.get_precision('Account'), string='Balance', multi='balance'),
+ 'credit': fields.function(__compute, digits_compute=dp.get_precision('Account'), string='Credit', multi='balance'),
+ 'debit': fields.function(__compute, digits_compute=dp.get_precision('Account'), string='Debit', multi='balance'),
'reconcile': fields.boolean('Reconcile', help="Check this if the user is allowed to reconcile entries in this account."),
'shortcut': fields.char('Shortcut', size=12),
'tax_ids': fields.many2many('account.tax', 'account_account_tax_default_rel',
'account_id', 'tax_id', 'Default Taxes'),
'note': fields.text('Note'),
- 'company_currency_id': fields.function(_get_company_currency, method=True, type='many2one', relation='res.currency', string='Company Currency'),
+ 'company_currency_id': fields.function(_get_company_currency, type='many2one', relation='res.currency', string='Company Currency'),
'company_id': fields.many2one('res.company', 'Company', required=True),
'active': fields.boolean('Active', select=2, help="If the active field is set to False, it will allow you to hide the account without removing it."),
@@ -390,7 +390,7 @@ class account_account(osv.osv):
'manage this. So if you import from another software system you may have to use the rate at date. ' \
'Incoming transactions always use the rate at date.', \
required=True),
- 'level': fields.function(_get_level, string='Level', method=True, store=True, type='integer'),
+ 'level': fields.function(_get_level, string='Level', store=True, type='integer'),
}
_defaults = {
@@ -587,7 +587,7 @@ class account_journal_column(osv.osv):
_description = "Journal Column"
_columns = {
'name': fields.char('Column Name', size=64, required=True),
- 'field': fields.selection(_col_get, 'Field Name', method=True, required=True, size=32),
+ 'field': fields.selection(_col_get, 'Field Name', required=True, size=32),
'view_id': fields.many2one('account.journal.view', 'Journal View', select=True),
'sequence': fields.integer('Sequence', help="Gives the sequence order to journal column.", readonly=True),
'required': fields.boolean('Required'),
@@ -985,7 +985,7 @@ class account_journal_period(osv.osv):
'name': fields.char('Journal-Period Name', size=64, required=True),
'journal_id': fields.many2one('account.journal', 'Journal', required=True, ondelete="cascade"),
'period_id': fields.many2one('account.period', 'Period', required=True, ondelete="cascade"),
- 'icon': fields.function(_icon_get, method=True, string='Icon', type='char', size=32),
+ 'icon': fields.function(_icon_get, string='Icon', type='char', size=32),
'active': fields.boolean('Active', required=True, help="If the active field is set to False, it will allow you to hide the journal period without removing it."),
'state': fields.selection([('draft','Draft'), ('printed','Printed'), ('done','Done')], 'State', required=True, readonly=True,
help='When journal period is created. The state is \'Draft\'. If a report is printed it comes to \'Printed\' state. When all transactions are done, it comes in \'Done\' state.'),
@@ -1139,7 +1139,7 @@ class account_move(osv.osv):
'line_id': fields.one2many('account.move.line', 'move_id', 'Entries', states={'posted':[('readonly',True)]}),
'to_check': fields.boolean('To Review', help='Check this box if you are unsure of that journal entry and if you want to note it as \'to be reviewed\' by an accounting expert.'),
'partner_id': fields.related('line_id', 'partner_id', type="many2one", relation="res.partner", string="Partner", store=True),
- 'amount': fields.function(_amount_compute, method=True, string='Amount', digits_compute=dp.get_precision('Account'), type='float', fnct_search=_search_amount),
+ 'amount': fields.function(_amount_compute, string='Amount', digits_compute=dp.get_precision('Account'), type='float', fnct_search=_search_amount),
'date': fields.date('Date', required=True, states={'posted':[('readonly',True)]}, select=True),
'narration':fields.text('Narration'),
'company_id': fields.related('journal_id','company_id',type='many2one',relation='res.company',string='Company', store=True, readonly=True),
@@ -1646,8 +1646,8 @@ class account_tax_code(osv.osv):
'name': fields.char('Tax Case Name', size=64, required=True, translate=True),
'code': fields.char('Case Code', size=64),
'info': fields.text('Description'),
- 'sum': fields.function(_sum_year, method=True, string="Year Sum"),
- 'sum_period': fields.function(_sum_period, method=True, string="Period Sum"),
+ 'sum': fields.function(_sum_year, string="Year Sum"),
+ 'sum_period': fields.function(_sum_period, string="Period Sum"),
'parent_id': fields.many2one('account.tax.code', 'Parent Code', select=True),
'child_ids': fields.one2many('account.tax.code', 'parent_id', 'Child Codes'),
'line_ids': fields.one2many('account.move.line', 'tax_code_id', 'Lines'),
@@ -2502,7 +2502,7 @@ class account_tax_template(osv.osv):
'name': fields.char('Tax Name', size=64, required=True),
'sequence': fields.integer('Sequence', required=True, help="The sequence field is used to order the taxes lines from lower sequences to higher ones. The order is important if you have a tax that has several tax children. In this case, the evaluation order is important."),
'amount': fields.float('Amount', required=True, digits=(14,4), help="For Tax Type percent enter % ratio between 0-1."),
- 'type': fields.selection( [('percent','Percent'), ('fixed','Fixed'), ('none','None'), ('code','Python Code')], 'Tax Type', required=True),
+ 'type': fields.selection( [('percent','Percent'), ('fixed','Fixed'), ('none','None'), ('code','Python Code'), ('balance','Balance')], 'Tax Type', required=True),
'applicable_type': fields.selection( [('true','True'), ('code','Python Code')], 'Applicable Type', required=True, help="If not applicable (computed through a Python code), the tax won't appear on the invoice."),
'domain':fields.char('Domain', size=32, help="This field is only used if you develop your own module allowing developers to create specific taxes in a custom domain."),
'account_collected_id':fields.many2one('account.account.template', 'Invoice Tax Account'),
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index 54776e5c7e6..f712cc9ab0c 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -137,7 +137,7 @@ class account_bank_statement(osv.osv):
states={'confirm':[('readonly',True)]}),
'balance_end_real': fields.float('Ending Balance', digits_compute=dp.get_precision('Account'),
states={'confirm':[('readonly', True)]}),
- 'balance_end': fields.function(_end_balance, method=True, string='Balance'),
+ 'balance_end': fields.function(_end_balance, string='Balance'),
'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
'line_ids': fields.one2many('account.bank.statement.line',
'statement_id', 'Statement lines',
@@ -149,7 +149,7 @@ class account_bank_statement(osv.osv):
states={'confirm': [('readonly', True)]}, readonly="1",
help='When new statement is created the state will be \'Draft\'. \
\n* And after getting confirmation from the bank it will be in \'Confirmed\' state.'),
- 'currency': fields.function(_currency, method=True, string='Currency',
+ 'currency': fields.function(_currency, string='Currency',
type='many2one', relation='res.currency'),
'account_id': fields.related('journal_id', 'default_debit_account_id', type='many2one', relation='account.account', string='Account used in this journal', readonly=True, help='used in statement reconciliation domain, but shouldn\'t be used elswhere.'),
}
diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py
index 04e780ade30..982383ea2a7 100644
--- a/addons/account/account_cash_statement.py
+++ b/addons/account/account_cash_statement.py
@@ -58,7 +58,7 @@ class account_cashbox_line(osv.osv):
_columns = {
'pieces': fields.float('Values', digits_compute=dp.get_precision('Account')),
'number': fields.integer('Number'),
- 'subtotal': fields.function(_sub_total, method=True, string='Sub Total', type='float', digits_compute=dp.get_precision('Account')),
+ 'subtotal': fields.function(_sub_total, string='Sub Total', type='float', digits_compute=dp.get_precision('Account')),
'starting_id': fields.many2one('account.bank.statement', ondelete='cascade'),
'ending_id': fields.many2one('account.bank.statement', ondelete='cascade'),
}
@@ -223,10 +223,10 @@ class account_cash_statement(osv.osv):
[('draft', 'Draft'),
('confirm', 'Closed'),
('open','Open')], 'State', required=True, states={'confirm': [('readonly', True)]}, readonly="1"),
- 'total_entry_encoding': fields.function(_get_sum_entry_encoding, method=True, store=True, string="Cash Transaction", help="Total cash transactions"),
+ 'total_entry_encoding': fields.function(_get_sum_entry_encoding, store=True, string="Cash Transaction", help="Total cash transactions"),
'closing_date': fields.datetime("Closed On"),
- 'balance_end': fields.function(_end_balance, method=True, store=True, string='Balance', help="Closing balance based on Starting Balance and Cash Transactions"),
- 'balance_end_cash': fields.function(_balance_end_cash, method=True, store=True, string='Balance', help="Closing balance based on cashBox"),
+ 'balance_end': fields.function(_end_balance, store=True, string='Balance', help="Closing balance based on Starting Balance and Cash Transactions"),
+ 'balance_end_cash': fields.function(_balance_end_cash, store=True, string='Balance', help="Closing balance based on cashBox"),
'starting_details_ids': fields.one2many('account.cashbox.line', 'starting_id', string='Opening Cashbox'),
'ending_details_ids': fields.one2many('account.cashbox.line', 'ending_id', string='Closing Cashbox'),
'name': fields.char('Name', size=64, required=True, states={'draft': [('readonly', False)]}, readonly=True, help='if you give the Name other then /, its created Accounting Entries Move will be with same name as statement name. This allows the statement entries to have the same references than the statement itself'),
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index 2117d7fc40e..2733ecbd189 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -489,8 +489,8 @@ class account_move_line(osv.osv):
'reconcile_id': fields.many2one('account.move.reconcile', 'Reconcile', readonly=True, ondelete='set null', select=2),
'reconcile_partial_id': fields.many2one('account.move.reconcile', 'Partial Reconcile', readonly=True, ondelete='set null', select=2),
'amount_currency': fields.float('Amount Currency', help="The amount expressed in an optional other currency if it is a multi-currency entry.", digits_compute=dp.get_precision('Account')),
- 'amount_residual_currency': fields.function(_amount_residual, method=True, string='Residual Amount', multi="residual", help="The residual amount on a receivable or payable of a journal entry expressed in its currency (maybe different of the company currency)."),
- 'amount_residual': fields.function(_amount_residual, method=True, string='Residual Amount', multi="residual", help="The residual amount on a receivable or payable of a journal entry expressed in the company currency."),
+ 'amount_residual_currency': fields.function(_amount_residual, string='Residual Amount', multi="residual", help="The residual amount on a receivable or payable of a journal entry expressed in its currency (maybe different of the company currency)."),
+ 'amount_residual': fields.function(_amount_residual, string='Residual Amount', multi="residual", help="The residual amount on a receivable or payable of a journal entry expressed in the company currency."),
'currency_id': fields.many2one('res.currency', 'Currency', help="The optional other currency if it is a multi-currency entry."),
'period_id': fields.many2one('account.period', 'Period', required=True, select=2),
'journal_id': fields.many2one('account.journal', 'Journal', required=True, select=1),
@@ -504,13 +504,13 @@ class account_move_line(osv.osv):
'date_created': fields.date('Creation date', select=True),
'analytic_lines': fields.one2many('account.analytic.line', 'move_id', 'Analytic lines'),
'centralisation': fields.selection([('normal','Normal'),('credit','Credit Centralisation'),('debit','Debit Centralisation'),('currency','Currency Adjustment')], 'Centralisation', size=8),
- 'balance': fields.function(_balance, fnct_search=_balance_search, method=True, string='Balance'),
+ 'balance': fields.function(_balance, fnct_search=_balance_search, string='Balance'),
'state': fields.selection([('draft','Unbalanced'), ('valid','Valid')], 'State', readonly=True,
help='When new move line is created the state will be \'Draft\'.\n* When all the payments are done it will be in \'Valid\' state.'),
'tax_code_id': fields.many2one('account.tax.code', 'Tax Account', help="The Account can either be a base tax code or a tax code account."),
'tax_amount': fields.float('Tax/Base Amount', digits_compute=dp.get_precision('Account'), select=True, help="If the Tax account is a tax code account, this field will contain the taxed amount.If the tax account is base tax code, "\
"this field will contain the basic amount(without tax)."),
- 'invoice': fields.function(_invoice, method=True, string='Invoice',
+ 'invoice': fields.function(_invoice, string='Invoice',
type='many2one', relation='account.invoice', fnct_search=_invoice_search),
'account_tax_id':fields.many2one('account.tax', 'Tax'),
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account'),
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index e0a355c35bf..d3d54a51918 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -897,6 +897,7 @@
+
@@ -909,6 +910,7 @@
+
diff --git a/addons/account/i18n/de.po b/addons/account/i18n/de.po
index 14a60c5bc7f..3d6a63f1bd9 100644
--- a/addons/account/i18n/de.po
+++ b/addons/account/i18n/de.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2011-04-21 05:36+0000\n"
+"PO-Revision-Date: 2011-07-02 08:42+0000\n"
"Last-Translator: Ferdinand @ Camptocamp \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: 2011-04-29 05:06+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-07-03 04:46+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -34,7 +34,7 @@ msgstr ""
"Es ist kein Journal für den Jahresabschluss des Geschäftsjahres definiert"
#. module: account
-#: code:addons/account/account.py:506
+#: code:addons/account/account.py:516
#, python-format
msgid ""
"You cannot remove/deactivate an account which is set as a property to any "
@@ -68,7 +68,7 @@ msgid "Residual"
msgstr "Restwert"
#. module: account
-#: code:addons/account/invoice.py:785
+#: code:addons/account/invoice.py:793
#, python-format
msgid "Please define sequence on invoice journal"
msgstr "Bitte definieren Sie den Sequenzer für das Rechnungsjournal."
@@ -138,7 +138,7 @@ msgid "Accounting Entries-"
msgstr "Buchungssätze-"
#. module: account
-#: code:addons/account/account.py:1291
+#: code:addons/account/account.py:1305
#, python-format
msgid "You can not delete posted movement: \"%s\"!"
msgstr "Sie können keine gebuchten Vorgänge löschen: \"%s\"!"
@@ -184,7 +184,7 @@ msgstr ""
"angezeigt."
#. module: account
-#: code:addons/account/invoice.py:1421
+#: code:addons/account/invoice.py:1436
#, python-format
msgid "Warning!"
msgstr "Achtung!"
@@ -240,7 +240,7 @@ msgid "account.tax"
msgstr "account.tax"
#. module: account
-#: code:addons/account/account.py:901
+#: code:addons/account/account.py:915
#, python-format
msgid ""
"No period defined for this date: %s !\n"
@@ -272,7 +272,7 @@ msgstr ""
"Rechnung erscheinen sollen"
#. module: account
-#: code:addons/account/invoice.py:1210
+#: code:addons/account/invoice.py:1224
#, python-format
msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)"
msgstr ""
@@ -290,7 +290,7 @@ msgid "Belgian Reports"
msgstr "Auswertungen für Belgien"
#. module: account
-#: code:addons/account/account_move_line.py:1176
+#: code:addons/account/account_move_line.py:1182
#, python-format
msgid "You can not add/modify entries in a closed journal."
msgstr ""
@@ -330,7 +330,7 @@ msgid "St."
msgstr "Beleg"
#. module: account
-#: code:addons/account/invoice.py:529
+#: code:addons/account/invoice.py:532
#, python-format
msgid "Invoice line account company does not match with invoice company."
msgstr ""
@@ -594,7 +594,7 @@ msgid "Not reconciled transactions"
msgstr "Nicht ausgeglichene Posten"
#. module: account
-#: code:addons/account/account_cash_statement.py:348
+#: code:addons/account/account_cash_statement.py:349
#, python-format
msgid "CashBox Balance is not matching with Calculated Balance !"
msgstr "Kassenbestand passt nicht zu Kontensaldo"
@@ -679,7 +679,7 @@ msgid "Tax Code Amount"
msgstr "Steuerbetrag"
#. module: account
-#: code:addons/account/account.py:2779
+#: code:addons/account/account.py:2823
#: code:addons/account/installer.py:434
#, python-format
msgid "SAJ"
@@ -712,8 +712,8 @@ msgid "Journal Period"
msgstr "Journal Periode"
#. module: account
-#: code:addons/account/account_move_line.py:732
-#: code:addons/account/account_move_line.py:776
+#: code:addons/account/account_move_line.py:723
+#: code:addons/account/account_move_line.py:767
#, python-format
msgid "To reconcile the entries company should be the same for all entries"
msgstr ""
@@ -776,7 +776,7 @@ msgid "Analytic Entries by line"
msgstr "Analytische Buchungsbelege"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:39
+#: code:addons/account/wizard/account_change_currency.py:38
#, python-format
msgid "You can only change currency for Draft Invoice !"
msgstr "Sie können die Währung nur bei Rechnungen"
@@ -880,7 +880,7 @@ msgid "Next Partner to reconcile"
msgstr "Weiterer Partner für automat. Ausgleich"
#. module: account
-#: code:addons/account/account_move_line.py:1191
+#: code:addons/account/account_move_line.py:1197
#, python-format
msgid ""
"You can not do this modification on a confirmed entry ! Please note that you "
@@ -1009,11 +1009,11 @@ msgid "Code"
msgstr "Kurzbezeichnung"
#. module: account
-#: code:addons/account/account.py:2083
+#: code:addons/account/account.py:2097
#: code:addons/account/account_bank_statement.py:350
-#: code:addons/account/account_move_line.py:170
+#: code:addons/account/account_move_line.py:169
#: code:addons/account/invoice.py:73
-#: code:addons/account/invoice.py:670
+#: code:addons/account/invoice.py:678
#: code:addons/account/wizard/account_use_model.py:81
#, python-format
msgid "No Analytic Journal !"
@@ -1095,7 +1095,6 @@ msgstr "GuV (Aufwendungen)"
#. module: account
#: report:account.analytic.account.journal:0
-#: report:account.move.voucher:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
msgid "-"
@@ -1186,6 +1185,7 @@ msgstr "# Transaktionen"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
@@ -1193,7 +1193,7 @@ msgid "Entry Label"
msgstr "Buchungstext"
#. module: account
-#: code:addons/account/account.py:976
+#: code:addons/account/account.py:990
#, python-format
msgid "You can not modify/delete a journal with entries for this period !"
msgstr ""
@@ -1333,7 +1333,6 @@ msgid "Journal Items Analysis"
msgstr "Analyse der Journaleinträge"
#. module: account
-#: model:ir.actions.act_window,name:account.action_partner_all
#: model:ir.ui.menu,name:account.next_id_22
msgid "Partners"
msgstr "Partner"
@@ -1363,7 +1362,7 @@ msgid "Central Journal"
msgstr "Zentrales Journal"
#. module: account
-#: code:addons/account/account_move_line.py:1271
+#: code:addons/account/account_move_line.py:1277
#, python-format
msgid "You can not use this general account in this journal !"
msgstr "Sie können dieses Sachkonto nicht in diesem Journal einsetzen."
@@ -1460,7 +1459,7 @@ msgid ""
msgstr "Beispiel: 14 Tage 2% Skonto, 30 Tage Netto"
#. module: account
-#: code:addons/account/invoice.py:815
+#: code:addons/account/invoice.py:823
#, python-format
msgid ""
"Cannot create the invoice !\n"
@@ -1631,7 +1630,6 @@ msgid "Separated Journal Sequences"
msgstr "Unterschiedliche Journal Sequenzer"
#. module: account
-#: field:account.bank.statement,user_id:0
#: view:account.invoice:0
msgid "Responsible"
msgstr "Mitarbeiter"
@@ -1705,7 +1703,7 @@ msgid "Error! You cannot define overlapping fiscal years"
msgstr "Fehler ! Sie können keine Überschneidungen bei Geschäftsjahren haben"
#. module: account
-#: code:addons/account/account_move_line.py:808
+#: code:addons/account/account_move_line.py:799
#, python-format
msgid "The account is not defined to be reconciled !"
msgstr ""
@@ -1742,7 +1740,7 @@ msgid "Receivables & Payables"
msgstr "Debitoren & Kreditoren"
#. module: account
-#: code:addons/account/account_move_line.py:815
+#: code:addons/account/account_move_line.py:806
#, python-format
msgid "You have to provide an account for the write off entry !"
msgstr "Sie müssen ein Konto für die Forderungsabschreibung hinterlegen!"
@@ -1778,7 +1776,7 @@ msgid "Customer Ref:"
msgstr "Kundenreferenz:"
#. module: account
-#: code:addons/account/account_cash_statement.py:328
+#: code:addons/account/account_cash_statement.py:329
#, python-format
msgid "User %s does not have rights to access %s journal !"
msgstr "Benutzer %s hat keinen Zugriff auf das %s Journal!"
@@ -1799,7 +1797,7 @@ msgid "Tax Declaration: Credit Notes"
msgstr "Steuermeldung: Ausweis von Gutschriften"
#. module: account
-#: code:addons/account/account.py:499
+#: code:addons/account/account.py:509
#, python-format
msgid "You cannot deactivate an account that contains account moves."
msgstr "Sie können kein Konto mit vorhandenen Buchungen deaktivieren."
@@ -1816,7 +1814,7 @@ msgstr ""
"Sie können keine Buchung auf einem bereits abgeschlossenen Konto vornehmen."
#. module: account
-#: code:addons/account/account.py:519
+#: code:addons/account/account.py:529
#, python-format
msgid ""
"You cannot change the type of account from 'Closed' to any other type which "
@@ -2101,7 +2099,7 @@ msgid " Journal"
msgstr " Journal"
#. module: account
-#: code:addons/account/account.py:1319
+#: code:addons/account/account.py:1333
#, python-format
msgid ""
"There is no default default debit account defined \n"
@@ -2164,7 +2162,7 @@ msgid "Description"
msgstr "Buchungstext"
#. module: account
-#: code:addons/account/account.py:2844
+#: code:addons/account/account.py:2888
#: code:addons/account/installer.py:498
#, python-format
msgid "ECNJ"
@@ -2184,7 +2182,7 @@ msgid "Income Account"
msgstr "Erlöskonto"
#. module: account
-#: code:addons/account/invoice.py:352
+#: code:addons/account/invoice.py:351
#, python-format
msgid "There is no Accounting Journal of type Sale/Purchase defined!"
msgstr ""
@@ -2197,6 +2195,7 @@ msgid "Accounting Properties"
msgstr "Finanzbuchhaltung Eigenschaften"
#. module: account
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.print.journal,sort_selection:0
msgid "Entries Sorted By"
@@ -2225,6 +2224,7 @@ msgstr "Vorlage f. Produkte"
#: field:account.fiscalyear,name:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.journal.period,fiscalyear_id:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -2333,7 +2333,7 @@ msgid "Account Tax Code"
msgstr "Umsatzsteuer"
#. module: account
-#: code:addons/account/invoice.py:545
+#: code:addons/account/invoice.py:552
#, python-format
msgid ""
"Can't find any account journal of %s type for this company.\n"
@@ -2415,7 +2415,7 @@ msgid "Account Model Entries"
msgstr "Buchungsvorlage"
#. module: account
-#: code:addons/account/account.py:2796
+#: code:addons/account/account.py:2840
#: code:addons/account/installer.py:454
#, python-format
msgid "EXJ"
@@ -2507,7 +2507,7 @@ msgid "Accounts"
msgstr "Finanzkonten"
#. module: account
-#: code:addons/account/invoice.py:351
+#: code:addons/account/invoice.py:350
#, python-format
msgid "Configuration Error!"
msgstr "Konfigurationsfehler !"
@@ -2519,13 +2519,12 @@ msgid "Average Price"
msgstr "Durchschnittspreis"
#. module: account
-#: report:account.move.voucher:0
#: report:account.overdue:0
msgid "Date:"
msgstr "Datum:"
#. module: account
-#: code:addons/account/account.py:640
+#: code:addons/account/account.py:654
#, python-format
msgid ""
"You cannot modify company of this journal as its related record exist in "
@@ -2563,6 +2562,7 @@ msgstr "Rabatt (%)"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.overdue:0
#: report:account.third_party_ledger:0
@@ -2679,16 +2679,16 @@ msgid "This wizard will create recurring accounting entries"
msgstr "Diese Assistent erzeugt wiederkehrende Buchungen."
#. module: account
-#: code:addons/account/account.py:1181
+#: code:addons/account/account.py:1195
#, python-format
msgid "No sequence defined on the journal !"
msgstr "Kein Sequenzer für dieses Journal definiert !"
#. module: account
-#: code:addons/account/account.py:2083
+#: code:addons/account/account.py:2097
#: code:addons/account/account_bank_statement.py:350
-#: code:addons/account/account_move_line.py:170
-#: code:addons/account/invoice.py:670
+#: code:addons/account/account_move_line.py:169
+#: code:addons/account/invoice.py:678
#: code:addons/account/wizard/account_use_model.py:81
#, python-format
msgid "You have to define an analytic journal on the '%s' journal!"
@@ -2862,7 +2862,7 @@ msgid "Analytic Entries"
msgstr "Analytische Buchungen"
#. module: account
-#: code:addons/account/account.py:822
+#: code:addons/account/account.py:836
#, python-format
msgid ""
"No fiscal year defined for this date !\n"
@@ -2994,7 +2994,7 @@ msgid "BNK%s"
msgstr "BNK%s"
#. module: account
-#: code:addons/account/account.py:2906
+#: code:addons/account/account.py:2950
#: code:addons/account/installer.py:296
#, python-format
msgid "BNK"
@@ -3119,6 +3119,7 @@ msgstr "Leer lassen um Aufwandskonto zu verwenden"
#: field:account.common.report,journal_ids:0
#: report:account.general.journal:0
#: field:account.general.journal,journal_ids:0
+#: report:account.general.ledger_landscape:0
#: view:account.journal.period:0
#: report:account.partner.balance:0
#: field:account.partner.balance,journal_ids:0
@@ -3179,7 +3180,7 @@ msgid "Starting Balance"
msgstr "Anfangssaldo"
#. module: account
-#: code:addons/account/invoice.py:1284
+#: code:addons/account/invoice.py:1298
#, python-format
msgid "No Partner Defined !"
msgstr "Kein Partner definiert!"
@@ -3223,7 +3224,6 @@ msgstr "Journal:"
#: view:account.invoice.report:0
#: selection:account.invoice.report,state:0
#: selection:account.journal.period,state:0
-#: report:account.move.voucher:0
#: view:account.subscription:0
#: selection:account.subscription,state:0
#: selection:report.invoice.created,state:0
@@ -3277,7 +3277,7 @@ msgstr ""
"bedeutet, dass Sie Ihre einzelnen Buchungen nicht ändern können."
#. module: account
-#: code:addons/account/invoice.py:370
+#: code:addons/account/invoice.py:373
#, python-format
msgid "Cannot delete invoice(s) that are already opened or paid !"
msgstr "Kann offene oder bezahlte Rechnungen nicht löschen"
@@ -3340,7 +3340,7 @@ msgstr ""
"'Abgebrochen' oder 'Erledigt' Status ist."
#. module: account
-#: code:addons/account/account.py:522
+#: code:addons/account/account.py:532
#, python-format
msgid ""
"You cannot change the type of account from '%s' to '%s' type as it contains "
@@ -3351,6 +3351,7 @@ msgstr ""
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
msgid "Counterpart"
msgstr "Gegenbuchung"
@@ -3455,6 +3456,7 @@ msgstr "(Wenn kein Geschäftsjahr ausgewählt wird, werden alle genommen)"
#: field:account.entries.report,date:0
#: selection:account.general.journal,filter:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.invoice.report,date:0
#: report:account.journal.period.print:0
#: view:account.move:0
@@ -3498,7 +3500,7 @@ msgid "Chart of Accounts Template"
msgstr "Vorlage Kontenplan"
#. module: account
-#: code:addons/account/account.py:2095
+#: code:addons/account/account.py:2109
#, python-format
msgid ""
"Maturity date of entry line generated by model line '%s' of model '%s' is "
@@ -3510,13 +3512,13 @@ msgstr ""
"Bitte ordnen Sie dem Partner eine Zahlungsbedingungen zu."
#. module: account
-#: code:addons/account/account_move_line.py:810
+#: code:addons/account/account_move_line.py:801
#, python-format
msgid "Some entries are already reconciled !"
msgstr "Einige Einträge wurden bereits ausgeglichen!"
#. module: account
-#: code:addons/account/account.py:1204
+#: code:addons/account/account.py:1218
#, python-format
msgid ""
"You cannot validate a Journal Entry unless all journal items are in same "
@@ -3644,7 +3646,7 @@ msgid "Analytic Items"
msgstr "Analytische Buchungen"
#. module: account
-#: code:addons/account/account_move_line.py:1128
+#: code:addons/account/account_move_line.py:1134
#, python-format
msgid "Unable to change tax !"
msgstr "Die Steuer kann nicht geändert werden!"
@@ -3655,7 +3657,7 @@ msgid "#Entries"
msgstr "# Buchungen"
#. module: account
-#: code:addons/account/invoice.py:1422
+#: code:addons/account/invoice.py:1437
#, python-format
msgid ""
"You selected an Unit of Measure which is not compatible with the product."
@@ -3663,7 +3665,7 @@ msgstr ""
"Sie haben eine Mengeneinheit gewählt, die nicht kompatibel zum Produkt ist."
#. module: account
-#: code:addons/account/invoice.py:473
+#: code:addons/account/invoice.py:476
#, python-format
msgid ""
"The Payment Term of Supplier does not have Payment Term Lines(Computation) "
@@ -3977,7 +3979,7 @@ msgid "Acc.Type"
msgstr "Kontotyp"
#. module: account
-#: code:addons/account/invoice.py:714
+#: code:addons/account/invoice.py:722
#, python-format
msgid "Global taxes defined, but are not in invoice lines !"
msgstr ""
@@ -4042,7 +4044,7 @@ msgstr ""
"Status unmittelbar 'Gebucht' ist."
#. module: account
-#: code:addons/account/account_analytic_line.py:91
+#: code:addons/account/account_analytic_line.py:90
#, python-format
msgid "There is no expense account defined for this product: \"%s\" (id:%d)"
msgstr ""
@@ -4224,7 +4226,7 @@ msgid "Credit Notes"
msgstr "Gutschrift"
#. module: account
-#: code:addons/account/account.py:2067
+#: code:addons/account/account.py:2081
#: code:addons/account/wizard/account_use_model.py:69
#, python-format
msgid "Unable to find a valid period !"
@@ -4297,11 +4299,11 @@ msgid "Change"
msgstr "Ändere Währung"
#. module: account
-#: code:addons/account/account.py:1290
-#: code:addons/account/account.py:1318
-#: code:addons/account/account.py:1325
-#: code:addons/account/account_move_line.py:1055
-#: code:addons/account/invoice.py:896
+#: code:addons/account/account.py:1304
+#: code:addons/account/account.py:1332
+#: code:addons/account/account.py:1339
+#: code:addons/account/account_move_line.py:1061
+#: code:addons/account/invoice.py:904
#: code:addons/account/wizard/account_automatic_reconcile.py:152
#: code:addons/account/wizard/account_fiscalyear_close.py:78
#: code:addons/account/wizard/account_fiscalyear_close.py:81
@@ -4408,7 +4410,7 @@ msgid "You must define an analytic journal of type '%s' !"
msgstr "Ein Analytisches Journal vom Typ '%s' muss definiert werden"
#. module: account
-#: code:addons/account/account.py:1397
+#: code:addons/account/account.py:1411
#, python-format
msgid ""
"Couldn't create move with currency different from the secondary currency of "
@@ -4480,7 +4482,7 @@ msgid "Invoices"
msgstr "Rechnung"
#. module: account
-#: code:addons/account/invoice.py:804
+#: code:addons/account/invoice.py:812
#, python-format
msgid ""
"Please verify the price of the invoice !\n"
@@ -4594,25 +4596,24 @@ msgid "Third Party (Country)"
msgstr "Drittwelt (Land)"
#. module: account
-#: code:addons/account/account.py:938
-#: code:addons/account/account.py:940
-#: code:addons/account/account.py:1181
-#: code:addons/account/account.py:1393
-#: code:addons/account/account.py:1397
-#: code:addons/account/account_cash_statement.py:249
-#: code:addons/account/account_move_line.py:780
-#: code:addons/account/account_move_line.py:803
-#: code:addons/account/account_move_line.py:805
-#: code:addons/account/account_move_line.py:808
-#: code:addons/account/account_move_line.py:810
-#: code:addons/account/account_move_line.py:1117
+#: code:addons/account/account.py:952
+#: code:addons/account/account.py:954
+#: code:addons/account/account.py:1195
+#: code:addons/account/account.py:1407
+#: code:addons/account/account.py:1411
+#: code:addons/account/account_cash_statement.py:250
+#: code:addons/account/account_move_line.py:771
+#: code:addons/account/account_move_line.py:794
+#: code:addons/account/account_move_line.py:796
+#: code:addons/account/account_move_line.py:799
+#: code:addons/account/account_move_line.py:801
+#: code:addons/account/account_move_line.py:1123
#: code:addons/account/report/common_report_header.py:92
-#: code:addons/account/wizard/account_change_currency.py:39
-#: code:addons/account/wizard/account_change_currency.py:60
-#: code:addons/account/wizard/account_change_currency.py:65
-#: code:addons/account/wizard/account_change_currency.py:71
+#: code:addons/account/wizard/account_change_currency.py:38
+#: code:addons/account/wizard/account_change_currency.py:59
+#: code:addons/account/wizard/account_change_currency.py:64
+#: code:addons/account/wizard/account_change_currency.py:70
#: code:addons/account/wizard/account_move_bank_reconcile.py:49
-#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40
#: code:addons/account/wizard/account_report_common.py:120
#: code:addons/account/wizard/account_report_common.py:126
#, python-format
@@ -4634,7 +4635,7 @@ msgid "Bank Details"
msgstr "Bankkonto Details"
#. module: account
-#: code:addons/account/invoice.py:720
+#: code:addons/account/invoice.py:728
#, python-format
msgid "Taxes missing !"
msgstr "Steuerkonfiguration fehlt!"
@@ -4694,7 +4695,7 @@ msgid "Check Date not in the Period"
msgstr "Prüfe auf ein Datum nicht in Periode"
#. module: account
-#: code:addons/account/account.py:1210
+#: code:addons/account/account.py:1224
#, python-format
msgid ""
"You can not modify a posted entry of this journal !\n"
@@ -4716,7 +4717,7 @@ msgid "Child Tax Accounts"
msgstr "untergeordnete Steuerkonten"
#. module: account
-#: code:addons/account/account.py:940
+#: code:addons/account/account.py:954
#, python-format
msgid "Start period should be smaller then End period"
msgstr "Beginn der Periode sollte kleiner sein als Ende der Periode"
@@ -4746,6 +4747,7 @@ msgstr "Saldo (Anal.)"
#: report:account.general.journal:0
#: field:account.general.journal,target_move:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.move.journal,target_move:0
#: report:account.partner.balance:0
@@ -4830,7 +4832,7 @@ msgid "Line 1:"
msgstr "Zeile 1:"
#. module: account
-#: code:addons/account/account.py:1167
+#: code:addons/account/account.py:1181
#, python-format
msgid "Integrity Error !"
msgstr "Integritätsfehler!"
@@ -4980,7 +4982,7 @@ msgstr ""
"einen vorher vorhandenen Partner erstellen."
#. module: account
-#: code:addons/account/account.py:2067
+#: code:addons/account/account.py:2081
#: code:addons/account/wizard/account_use_model.py:69
#, python-format
msgid "No period found !"
@@ -5057,7 +5059,7 @@ msgstr ""
"->> Fälligkeitstag = 28.2"
#. module: account
-#: code:addons/account/account.py:2896
+#: code:addons/account/account.py:2940
#: code:addons/account/installer.py:283
#: code:addons/account/installer.py:295
#, python-format
@@ -5085,7 +5087,7 @@ msgid "Start of period"
msgstr "Start Periode"
#. module: account
-#: code:addons/account/account_move_line.py:1193
+#: code:addons/account/account_move_line.py:1199
#, python-format
msgid ""
"You can not do this modification on a reconciled entry ! Please note that "
@@ -5144,12 +5146,12 @@ msgstr "Journal Eröffnungsbuchungen"
#. module: account
#: code:addons/account/account_bank_statement.py:331
-#: code:addons/account/invoice.py:405
-#: code:addons/account/invoice.py:505
-#: code:addons/account/invoice.py:520
-#: code:addons/account/invoice.py:528
-#: code:addons/account/invoice.py:545
-#: code:addons/account/invoice.py:1347
+#: code:addons/account/invoice.py:408
+#: code:addons/account/invoice.py:508
+#: code:addons/account/invoice.py:523
+#: code:addons/account/invoice.py:531
+#: code:addons/account/invoice.py:552
+#: code:addons/account/invoice.py:1361
#: code:addons/account/wizard/account_move_journal.py:63
#, python-format
msgid "Configuration Error !"
@@ -5230,7 +5232,7 @@ msgid "Sort By"
msgstr "Sortiert nach"
#. module: account
-#: code:addons/account/account.py:1326
+#: code:addons/account/account.py:1340
#, python-format
msgid ""
"There is no default default credit account defined \n"
@@ -5391,7 +5393,7 @@ msgid "Generate Opening Entries"
msgstr "Erstelle Vortragsbuchungen"
#. module: account
-#: code:addons/account/account_move_line.py:738
+#: code:addons/account/account_move_line.py:729
#, python-format
msgid "Already Reconciled!"
msgstr "Bereits ausgeglichen"
@@ -5430,7 +5432,7 @@ msgstr "untergeordnete Konten"
#. module: account
#: view:account.move.line.reconcile:0
-#: code:addons/account/account_move_line.py:830
+#: code:addons/account/account_move_line.py:821
#, python-format
msgid "Write-Off"
msgstr "Abschreibung"
@@ -5585,7 +5587,7 @@ msgid "# of Lines"
msgstr "# Positionen"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:60
+#: code:addons/account/wizard/account_change_currency.py:59
#, python-format
msgid "New currency is not confirured properly !"
msgstr "Neue Währung wurde nicht vollständig konfiguriert !"
@@ -5610,14 +5612,14 @@ msgid "Filter by"
msgstr "Filter durch"
#. module: account
-#: code:addons/account/account_move_line.py:1131
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1137
+#: code:addons/account/account_move_line.py:1220
#, python-format
msgid "You can not use an inactive account!"
msgstr "Sie können kein inaktives Konto verwenden!"
#. module: account
-#: code:addons/account/account_move_line.py:803
+#: code:addons/account/account_move_line.py:794
#, python-format
msgid "Entries are not of the same account or already reconciled ! "
msgstr ""
@@ -5654,7 +5656,7 @@ msgstr "7"
#. module: account
#: code:addons/account/account_bank_statement.py:391
-#: code:addons/account/invoice.py:370
+#: code:addons/account/invoice.py:373
#, python-format
msgid "Invalid action !"
msgstr "Fehlerhafte Aktion"
@@ -5876,7 +5878,7 @@ msgid "Companies"
msgstr "Unternehmen"
#. module: account
-#: code:addons/account/account.py:532
+#: code:addons/account/account.py:546
#, python-format
msgid ""
"You cannot modify Company of account as its related record exist in Entry "
@@ -6157,9 +6159,9 @@ msgid "Optional create"
msgstr "Erzeuge optional"
#. module: account
-#: code:addons/account/invoice.py:406
-#: code:addons/account/invoice.py:506
-#: code:addons/account/invoice.py:1348
+#: code:addons/account/invoice.py:409
+#: code:addons/account/invoice.py:509
+#: code:addons/account/invoice.py:1362
#, python-format
msgid "Can not find account chart for this company, Please Create account."
msgstr ""
@@ -6312,8 +6314,8 @@ msgid "Analytic Entries Statistics"
msgstr "Auswertung analytische Buchungen"
#. module: account
-#: code:addons/account/account_analytic_line.py:143
-#: code:addons/account/account_move_line.py:905
+#: code:addons/account/account_analytic_line.py:141
+#: code:addons/account/account_move_line.py:897
#, python-format
msgid "Entries: "
msgstr "Buchungen: "
@@ -6324,7 +6326,7 @@ msgid "Create manual recurring entries in a chosen journal."
msgstr "Händisch wiederkehrende Buchungen in ein bestimmtes Journal buchen."
#. module: account
-#: code:addons/account/account.py:1393
+#: code:addons/account/account.py:1407
#, python-format
msgid "Couldn't create move between different companies"
msgstr "Konnte keine überbetriebliche Buchung erzeugen"
@@ -6373,7 +6375,7 @@ msgid "Total debit"
msgstr "Gesamt Soll"
#. module: account
-#: code:addons/account/account_move_line.py:781
+#: code:addons/account/account_move_line.py:772
#, python-format
msgid "Entry \"%s\" is not valid !"
msgstr "Eintrag \"%s\" ist ungültig !"
@@ -6443,30 +6445,31 @@ msgid " valuation: percent"
msgstr " Wertansatz: Prozent"
#. module: account
-#: code:addons/account/account.py:499
-#: code:addons/account/account.py:501
-#: code:addons/account/account.py:822
-#: code:addons/account/account.py:901
-#: code:addons/account/account.py:976
-#: code:addons/account/account.py:1204
-#: code:addons/account/account.py:1210
-#: code:addons/account/account.py:2095
-#: code:addons/account/account.py:2333
-#: code:addons/account/account_analytic_line.py:90
-#: code:addons/account/account_analytic_line.py:99
+#: code:addons/account/account.py:509
+#: code:addons/account/account.py:511
+#: code:addons/account/account.py:836
+#: code:addons/account/account.py:915
+#: code:addons/account/account.py:990
+#: code:addons/account/account.py:1218
+#: code:addons/account/account.py:1224
+#: code:addons/account/account.py:2109
+#: code:addons/account/account.py:2357
+#: code:addons/account/account_analytic_line.py:89
+#: code:addons/account/account_analytic_line.py:98
#: code:addons/account/account_bank_statement.py:292
#: code:addons/account/account_bank_statement.py:305
#: code:addons/account/account_bank_statement.py:345
-#: code:addons/account/account_cash_statement.py:328
-#: code:addons/account/account_cash_statement.py:348
-#: code:addons/account/account_move_line.py:1176
-#: code:addons/account/account_move_line.py:1191
-#: code:addons/account/account_move_line.py:1193
-#: code:addons/account/invoice.py:785
-#: code:addons/account/invoice.py:815
-#: code:addons/account/invoice.py:1008
+#: code:addons/account/account_cash_statement.py:329
+#: code:addons/account/account_cash_statement.py:349
+#: code:addons/account/account_move_line.py:1182
+#: code:addons/account/account_move_line.py:1197
+#: code:addons/account/account_move_line.py:1199
+#: code:addons/account/invoice.py:793
+#: code:addons/account/invoice.py:823
+#: code:addons/account/invoice.py:1014
#: code:addons/account/wizard/account_invoice_refund.py:100
#: code:addons/account/wizard/account_invoice_refund.py:102
+#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40
#: code:addons/account/wizard/account_use_model.py:44
#, python-format
msgid "Error !"
@@ -6587,7 +6590,7 @@ msgid "Journal Select"
msgstr "Wähle Journal"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:65
+#: code:addons/account/wizard/account_change_currency.py:64
#, python-format
msgid "Currnt currency is not confirured properly !"
msgstr "Die aktuelle Währung ist nicht korrekt konfiguriert !"
@@ -6604,9 +6607,11 @@ msgstr "Steuern Zuordnung"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: view:account.report.general.ledger:0
#: model:ir.actions.act_window,name:account.action_account_general_ledger_menu
#: model:ir.actions.report.xml,name:account.account_general_ledger
+#: model:ir.actions.report.xml,name:account.account_general_ledger_landscape
#: model:ir.ui.menu,name:account.menu_general_ledger
msgid "General Ledger"
msgstr "Umsätze nach Konten und Perioden"
@@ -6667,7 +6672,7 @@ msgid "Total:"
msgstr "Summe:"
#. module: account
-#: code:addons/account/account.py:2050
+#: code:addons/account/account.py:2064
#, python-format
msgid ""
"You can specify year, month and date in the name of the model using the "
@@ -6705,7 +6710,7 @@ msgid "Child Codes"
msgstr "untergeordnete Codes"
#. module: account
-#: code:addons/account/invoice.py:473
+#: code:addons/account/invoice.py:476
#: code:addons/account/wizard/account_invoice_refund.py:137
#, python-format
msgid "Data Insufficient !"
@@ -6896,7 +6901,7 @@ msgid "Lines"
msgstr "Positionen"
#. module: account
-#: code:addons/account/invoice.py:521
+#: code:addons/account/invoice.py:524
#, python-format
msgid ""
"Can not find account chart for this company in invoice line account, Please "
@@ -7095,7 +7100,7 @@ msgstr ""
"Steuerberechnung gebraucht wird."
#. module: account
-#: code:addons/account/account.py:938
+#: code:addons/account/account.py:952
#, python-format
msgid "You should have chosen periods that belongs to the same company"
msgstr ""
@@ -7214,7 +7219,7 @@ msgid "Sign on Reports"
msgstr "Sign On Reports"
#. module: account
-#: code:addons/account/account_cash_statement.py:249
+#: code:addons/account/account_cash_statement.py:250
#, python-format
msgid "You can not have two open register for the same journal"
msgstr ""
@@ -7251,7 +7256,6 @@ msgstr ""
#. module: account
#: report:account.invoice:0
#: view:account.invoice:0
-#: report:account.move.voucher:0
msgid "PRO-FORMA"
msgstr "PRO-FORMA"
@@ -7284,6 +7288,7 @@ msgstr "Informationen (Optional)"
#. module: account
#: view:account.analytic.line:0
+#: field:account.bank.statement,user_id:0
#: view:account.journal:0
#: field:account.journal,user_id:0
#: view:analytic.entries.report:0
@@ -7312,13 +7317,13 @@ msgstr ""
"bezahlt werden soll."
#. module: account
-#: code:addons/account/account_move_line.py:1271
+#: code:addons/account/account_move_line.py:1277
#, python-format
msgid "Bad account !"
msgstr "Falsches Konto!"
#. module: account
-#: code:addons/account/account.py:2777
+#: code:addons/account/account.py:2821
#: code:addons/account/installer.py:432
#, python-format
msgid "Sales Journal"
@@ -7336,7 +7341,7 @@ msgid "Invoice Tax"
msgstr "Umsatzsteuer"
#. module: account
-#: code:addons/account/account_move_line.py:1246
+#: code:addons/account/account_move_line.py:1252
#, python-format
msgid "No piece number !"
msgstr "Keine Stückzahl!"
@@ -7582,17 +7587,17 @@ msgid "Fixed"
msgstr "Fest"
#. module: account
-#: code:addons/account/account.py:506
-#: code:addons/account/account.py:519
-#: code:addons/account/account.py:522
+#: code:addons/account/account.py:516
+#: code:addons/account/account.py:529
#: code:addons/account/account.py:532
-#: code:addons/account/account.py:640
-#: code:addons/account/account.py:927
-#: code:addons/account/account_move_line.py:732
-#: code:addons/account/account_move_line.py:776
-#: code:addons/account/invoice.py:714
-#: code:addons/account/invoice.py:717
-#: code:addons/account/invoice.py:720
+#: code:addons/account/account.py:546
+#: code:addons/account/account.py:654
+#: code:addons/account/account.py:941
+#: code:addons/account/account_move_line.py:723
+#: code:addons/account/account_move_line.py:767
+#: code:addons/account/invoice.py:722
+#: code:addons/account/invoice.py:725
+#: code:addons/account/invoice.py:728
#, python-format
msgid "Warning !"
msgstr "Warnung"
@@ -7624,6 +7629,7 @@ msgstr "Betrag (in Worten)"
#: view:account.entries.report:0
#: field:account.entries.report,partner_id:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: view:account.invoice:0
#: field:account.invoice,partner_id:0
#: field:account.invoice.line,partner_id:0
@@ -7654,7 +7660,7 @@ msgid "Can not %s draft/proforma/cancel invoice."
msgstr "Kann Entwurf/ProForma/Storno für Rechnung %s nicht durchführen"
#. module: account
-#: code:addons/account/invoice.py:787
+#: code:addons/account/invoice.py:795
#, python-format
msgid "No Invoice Lines !"
msgstr "Keine Rechnungszeilen !"
@@ -7705,7 +7711,7 @@ msgid "Deferral Method"
msgstr "Abgrenzung Jahreswechsel"
#. module: account
-#: code:addons/account/invoice.py:359
+#: code:addons/account/invoice.py:360
#, python-format
msgid "Invoice '%s' is paid."
msgstr "Rechnung '%s' wurde bezahlt."
@@ -7769,7 +7775,7 @@ msgid "Associated Partner"
msgstr "Zugehöriger Partner"
#. module: account
-#: code:addons/account/invoice.py:1284
+#: code:addons/account/invoice.py:1298
#, python-format
msgid "You must first select a partner !"
msgstr "Sie müssen zuerst einen Partner wählen!"
@@ -7837,7 +7843,7 @@ msgid "Choose Fiscal Year"
msgstr "Wähle Geschäftsjahr"
#. module: account
-#: code:addons/account/account.py:2841
+#: code:addons/account/account.py:2885
#: code:addons/account/installer.py:495
#, python-format
msgid "Purchase Refund Journal"
@@ -7876,6 +7882,7 @@ msgstr "Finanzbuchhaltung"
#: view:account.entries.report:0
#: field:account.entries.report,period_id:0
#: view:account.fiscalyear:0
+#: report:account.general.ledger_landscape:0
#: view:account.invoice:0
#: view:account.invoice.report:0
#: field:account.journal.period,period_id:0
@@ -8057,7 +8064,7 @@ msgid "Account Types"
msgstr "Kontoartkonfiguration"
#. module: account
-#: code:addons/account/invoice.py:897
+#: code:addons/account/invoice.py:905
#, python-format
msgid "Cannot create invoice move on centralised journal"
msgstr "Kann keine Rechnungsbuchungen in zentralisiertem Journal durchführen"
@@ -8107,6 +8114,7 @@ msgstr "Journal Gutschriften"
#: report:account.account.balance:0
#: report:account.central.journal:0
#: report:account.general.journal:0
+#: report:account.general.ledger_landscape:0
#: report:account.partner.balance:0
msgid "Filter By"
msgstr "Filter nach"
@@ -8150,7 +8158,7 @@ msgid "Payment Term Line"
msgstr "Zahlungsbedingungen"
#. module: account
-#: code:addons/account/account.py:2794
+#: code:addons/account/account.py:2838
#: code:addons/account/installer.py:452
#, python-format
msgid "Purchase Journal"
@@ -8326,8 +8334,8 @@ msgstr ""
"Bankauszug übereinstimmen."
#. module: account
-#: code:addons/account/account_move_line.py:1131
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1137
+#: code:addons/account/account_move_line.py:1220
#, python-format
msgid "Bad account!"
msgstr "Falsches Konto!"
@@ -8338,7 +8346,7 @@ msgid "Keep empty for all open fiscal years"
msgstr "Frei lassen für alle offenen Geschäftsjahre"
#. module: account
-#: code:addons/account/account_move_line.py:1056
+#: code:addons/account/account_move_line.py:1062
#, python-format
msgid "The account move (%s) for centralisation has been confirmed!"
msgstr "Die Buchungszeile (%s)"
@@ -8361,6 +8369,7 @@ msgstr ""
#: field:account.entries.report,currency_id:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.invoice,currency_id:0
#: field:account.invoice.report,currency_id:0
#: field:account.journal,currency:0
@@ -8564,14 +8573,14 @@ msgid "Period from"
msgstr "Gültig ab"
#. module: account
-#: code:addons/account/account.py:2817
+#: code:addons/account/account.py:2861
#: code:addons/account/installer.py:476
#, python-format
msgid "Sales Refund Journal"
msgstr "Gutschriften Ausgangsrechnungen Journal"
#. module: account
-#: code:addons/account/account.py:927
+#: code:addons/account/account.py:941
#, python-format
msgid ""
"You cannot modify company of this period as its related record exist in "
@@ -8621,7 +8630,7 @@ msgid "Purchase Tax(%)"
msgstr "Steuer Einkauf (%)"
#. module: account
-#: code:addons/account/invoice.py:787
+#: code:addons/account/invoice.py:795
#, python-format
msgid "Please create some invoice lines."
msgstr "Bitte erstellen Sie einige Rechnungspositionen"
@@ -8637,7 +8646,7 @@ msgid "Configure Your Accounting Application"
msgstr "Konfigurieren Sie die Anwendungen für die Finanzbuchhaltung"
#. module: account
-#: code:addons/account/account.py:2820
+#: code:addons/account/account.py:2864
#: code:addons/account/installer.py:479
#, python-format
msgid "SCNJ"
@@ -8682,6 +8691,7 @@ msgstr "Überwachung von Zahlungseingängen"
#: report:account.central.journal:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
@@ -8691,7 +8701,7 @@ msgid "Start Period"
msgstr "Start Periode"
#. module: account
-#: code:addons/account/account.py:2333
+#: code:addons/account/account.py:2357
#, python-format
msgid "Cannot locate parent code for template account!"
msgstr "Kann keine Buchung auf einem Oberkonto vonehmen."
@@ -8729,7 +8739,7 @@ msgstr ""
"Buchhalter verbucht und validiert die Buchungszeilen einer Rechnung. "
#. module: account
-#: code:addons/account/invoice.py:1008
+#: code:addons/account/invoice.py:1014
#, python-format
msgid ""
"You cannot cancel the Invoice which is Partially Paid! You need to "
@@ -8759,7 +8769,7 @@ msgid "You can not create move line on view account."
msgstr "Sie können keine Buchungen auf Konten des Typs Ansicht erstellen."
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:71
+#: code:addons/account/wizard/account_change_currency.py:70
#, python-format
msgid "Current currency is not confirured properly !"
msgstr "Aktuelle Währung ist nicht korrekt definiert"
@@ -8814,6 +8824,7 @@ msgstr "Leer lassen um das Erlöskonto zu nutzen"
#: field:account.entries.report,balance:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.move.line,balance:0
#: report:account.partner.balance:0
#: selection:account.payment.term.line,value:0
@@ -8832,6 +8843,7 @@ msgstr "Händisch oder automatisch im System erfasst."
#. module: account
#: report:account.account.balance:0
+#: report:account.general.ledger_landscape:0
msgid "Display Account"
msgstr "Anzeige Konten"
@@ -8963,6 +8975,7 @@ msgstr "Händische Buchung"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.move.line,move_id:0
#: field:analytic.entries.report,move_id:0
@@ -8970,7 +8983,7 @@ msgid "Move"
msgstr "Buchung"
#. module: account
-#: code:addons/account/account_move_line.py:1128
+#: code:addons/account/account_move_line.py:1134
#, python-format
msgid "You can not change the tax, you should remove and recreate lines !"
msgstr "Die Steuer kann nicht verändert werden. Löschen und Neuerstellen."
@@ -9070,6 +9083,7 @@ msgstr "Saldo Analytisches Konto"
#: report:account.central.journal:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
@@ -9113,7 +9127,7 @@ msgid "Account Subscription"
msgstr "Konto Automatische Buchung"
#. module: account
-#: code:addons/account/invoice.py:717
+#: code:addons/account/invoice.py:725
#, python-format
msgid ""
"Tax base different !\n"
@@ -9142,6 +9156,7 @@ msgstr "Eingabe automat. Buchung"
#: report:account.general.journal:0
#: field:account.general.journal,date_from:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,date_start:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -9170,7 +9185,7 @@ msgid "Unreconciled"
msgstr "Offene Posten"
#. module: account
-#: code:addons/account/invoice.py:804
+#: code:addons/account/invoice.py:812
#, python-format
msgid "Bad total !"
msgstr "Falsche Summe!"
@@ -9237,13 +9252,13 @@ msgid "Active"
msgstr "Aktiv"
#. module: account
-#: code:addons/account/invoice.py:354
+#: code:addons/account/invoice.py:353
#, python-format
msgid "Unknown Error"
msgstr "Unbekannter Fehler"
#. module: account
-#: code:addons/account/account.py:1167
+#: code:addons/account/account.py:1181
#, python-format
msgid ""
"You cannot validate a non-balanced entry !\n"
@@ -9294,10 +9309,10 @@ msgstr "Buchen"
#: field:account.entries.report,credit:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.model.line,credit:0
#: field:account.move.line,credit:0
-#: report:account.move.voucher:0
#: report:account.partner.balance:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
@@ -9546,7 +9561,6 @@ msgstr "Periode auswählen"
#: view:account.move:0
#: selection:account.move,state:0
#: view:account.move.line:0
-#: report:account.move.voucher:0
msgid "Posted"
msgstr "Gebucht"
@@ -9565,6 +9579,7 @@ msgstr "Gebucht"
#: report:account.general.journal:0
#: field:account.general.journal,date_to:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,date_stop:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -9618,7 +9633,7 @@ msgid "This is a model for recurring accounting entries"
msgstr "Dieses ist ein Modell für wiederkehrende Buchungen."
#. module: account
-#: code:addons/account/account_analytic_line.py:100
+#: code:addons/account/account_analytic_line.py:99
#, python-format
msgid "There is no income account defined for this product: \"%s\" (id:%d)"
msgstr ""
@@ -9781,8 +9796,8 @@ msgid "End period"
msgstr "Ende Periode"
#. module: account
-#: code:addons/account/account_move_line.py:738
-#: code:addons/account/account_move_line.py:815
+#: code:addons/account/account_move_line.py:729
+#: code:addons/account/account_move_line.py:806
#: code:addons/account/wizard/account_invoice_state.py:44
#: code:addons/account/wizard/account_invoice_state.py:68
#: code:addons/account/wizard/account_report_balance_sheet.py:70
@@ -9850,10 +9865,10 @@ msgstr "Eingangsrechnungen"
#: field:account.entries.report,debit:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.model.line,debit:0
#: field:account.move.line,debit:0
-#: report:account.move.voucher:0
#: report:account.partner.balance:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
@@ -9890,7 +9905,7 @@ msgid "Recurring"
msgstr "Wiederkehrend"
#. module: account
-#: code:addons/account/account_move_line.py:805
+#: code:addons/account/account_move_line.py:796
#, python-format
msgid "Entry is already reconciled"
msgstr "Buchung wurde bereits ausgeglichen"
@@ -9911,7 +9926,7 @@ msgid "Range"
msgstr "Bereich"
#. module: account
-#: code:addons/account/account_move_line.py:1246
+#: code:addons/account/account_move_line.py:1252
#, python-format
msgid ""
"Can not create an automatic sequence for this piece !\n"
@@ -10052,7 +10067,7 @@ msgid "Accounts Mapping"
msgstr "Zuordnung Finanzkonten"
#. module: account
-#: code:addons/account/invoice.py:346
+#: code:addons/account/invoice.py:345
#, python-format
msgid "Invoice '%s' is waiting for validation."
msgstr "Rechnung '%s' wartet auf Buchungsfreigabe."
@@ -10077,7 +10092,7 @@ msgid "The income or expense account related to the selected product."
msgstr "Aufwand- und Erlöskonto des Produktes"
#. module: account
-#: code:addons/account/account_move_line.py:1117
+#: code:addons/account/account_move_line.py:1123
#, python-format
msgid "The date of your Journal Entry is not in the defined period!"
msgstr ""
@@ -10241,7 +10256,7 @@ msgstr "Zentrales Journal"
#. module: account
#: report:account.overdue:0
msgid "Maturity"
-msgstr "Fällig am"
+msgstr "überfälllig"
#. module: account
#: selection:account.aged.trial.balance,direction_selection:0
@@ -10287,7 +10302,7 @@ msgid "You must enter a period length that cannot be 0 or below !"
msgstr "Die Länge der Periode muss größer als 0 sein"
#. module: account
-#: code:addons/account/account.py:501
+#: code:addons/account/account.py:511
#, python-format
msgid "You cannot remove an account which has account entries!. "
msgstr ""
@@ -10355,9 +10370,6 @@ msgstr ""
#~ msgid "Unreconciled entries"
#~ msgstr "Offene Posten"
-#~ msgid "Print Taxes Report"
-#~ msgstr "Druck Report Steuer"
-
#, python-format
#~ msgid "Account move line \"%s\" is not valid"
#~ msgstr "Buchungsposition \"%s\" ist ungültig"
@@ -10365,9 +10377,6 @@ msgstr ""
#~ msgid "Unreconcile entries"
#~ msgstr "Storno Ausgleich"
-#~ msgid "Confirm draft invoices"
-#~ msgstr "Bestätige Entwurf Rechnung"
-
#~ msgid "Charts of Account"
#~ msgstr "Kontenplan Finanzkonten"
@@ -11825,16 +11834,6 @@ msgstr ""
#~ msgid "Account Reporting - Reporting"
#~ msgstr "Finanz Reporting"
-#~ msgid ""
-#~ "Gives the view used when writing or browsing entries in this journal. The "
-#~ "view tell Open ERP which fields should be visible, required or readonly and "
-#~ "in which order. You can create your own view for a faster encoding in each "
-#~ "journal."
-#~ msgstr ""
-#~ "Definiert Felder (sichtbar, zwingend, nur lesen) für die Sicht für dieses "
-#~ "Journal. Für jedes Journal können eingene Sichten erzeugt wrden um scheller "
-#~ "erfassen zu können"
-
#~ msgid "wizard.company.setup"
#~ msgstr "wizard.company.setup"
@@ -12289,3 +12288,26 @@ msgstr ""
#~ "dem Geschäftsjahr verwendet (Bei vorläufigem Gewinn: Betrag wird "
#~ "gutgeschrieben, bei vorläufigem Verlust: Betrag wird belastet.) Der Betrag "
#~ "wird durch die Auswertung Gewinn & Verlust generiert."
+
+#~ msgid ""
+#~ "Gives the view used when writing or browsing entries in this journal. The "
+#~ "view tell Open ERP which fields should be visible, required or readonly and "
+#~ "in which order. You can create your own view for a faster encoding in each "
+#~ "journal."
+#~ msgstr ""
+#~ "Zeigt an, welche Sicht genutzt wird, wenn Sie dieses Journal durchblättern "
+#~ "oder etwas schreiben. Die Sichten geben Open ERP an, welche Felder sichtbar "
+#~ "sein sollen, zwingend benötigt werden, ob nur lesend auf sie zugegriffen "
+#~ "werden darf und in welcher Reihenfolge Sie erscheinen sollen. Sie können "
+#~ "Ihre eigene Sicht erstellen, um jedes Journal schneller erfassen zu können."
+
+#~ msgid "Print Taxes Report"
+#~ msgstr "Steuerbericht drucken"
+
+#, python-format
+#~ msgid ""
+#~ "No period defined for this date !\n"
+#~ "Please create a fiscal year."
+#~ msgstr ""
+#~ "Kein Zeitraum für dieses Datum definiert!\n"
+#~ "Bitte erzeugen Sie ein neues Geschäftsjahr."
diff --git a/addons/account/i18n/pt_BR.po b/addons/account/i18n/pt_BR.po
index e3c4f508e2f..12a1b35a98a 100644
--- a/addons/account/i18n/pt_BR.po
+++ b/addons/account/i18n/pt_BR.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2011-05-04 03:16+0000\n"
-"Last-Translator: Emerson \n"
+"PO-Revision-Date: 2011-07-02 18:53+0000\n"
+"Last-Translator: Nédio Batista Marques \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: 2011-05-05 04:40+0000\n"
-"X-Generator: Launchpad (build 12959)\n"
+"X-Launchpad-Export-Date: 2011-07-03 04:46+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -33,7 +33,7 @@ msgid "No End of year journal defined for the fiscal year"
msgstr "Nenhum Livro de Encerramento definido para o Ano Fiscal."
#. module: account
-#: code:addons/account/account.py:506
+#: code:addons/account/account.py:516
#, python-format
msgid ""
"You cannot remove/deactivate an account which is set as a property to any "
@@ -67,7 +67,7 @@ msgid "Residual"
msgstr "Residual"
#. module: account
-#: code:addons/account/invoice.py:785
+#: code:addons/account/invoice.py:793
#, python-format
msgid "Please define sequence on invoice journal"
msgstr "Defina uma sequencia para o diário"
@@ -136,7 +136,7 @@ msgid "Accounting Entries-"
msgstr "Lançamentos contábeis-"
#. module: account
-#: code:addons/account/account.py:1291
+#: code:addons/account/account.py:1305
#, python-format
msgid "You can not delete posted movement: \"%s\"!"
msgstr "Você não pode excluir o movimento postado: \"%s\"!"
@@ -182,7 +182,7 @@ msgstr ""
"pagamento sem as remover."
#. module: account
-#: code:addons/account/invoice.py:1421
+#: code:addons/account/invoice.py:1436
#, python-format
msgid "Warning!"
msgstr "Aviso!"
@@ -237,7 +237,7 @@ msgid "account.tax"
msgstr "account.tax"
#. module: account
-#: code:addons/account/account.py:901
+#: code:addons/account/account.py:915
#, python-format
msgid ""
"No period defined for this date: %s !\n"
@@ -270,7 +270,7 @@ msgstr ""
"(IVA) relativos a este código de imposto apareçam nas faturas"
#. module: account
-#: code:addons/account/invoice.py:1210
+#: code:addons/account/invoice.py:1224
#, python-format
msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)"
msgstr "Fatura '%s' é parcialmente paga: %s%s of %s%s (%s%s restantes)"
@@ -286,7 +286,7 @@ msgid "Belgian Reports"
msgstr "Relatórios belgas"
#. module: account
-#: code:addons/account/account_move_line.py:1176
+#: code:addons/account/account_move_line.py:1182
#, python-format
msgid "You can not add/modify entries in a closed journal."
msgstr "Você não pode incluir/modificar as lançamentos em um diário fechado."
@@ -324,12 +324,11 @@ msgid "St."
msgstr "St."
#. module: account
-#: code:addons/account/invoice.py:529
+#: code:addons/account/invoice.py:532
#, python-format
msgid "Invoice line account company does not match with invoice company."
msgstr ""
-"A companhia da conta da linha da fatura, não corresponde à companhia da "
-"fatura."
+"A empresa da conta da linha da fatura, não corresponde à empresa da fatura."
#. module: account
#: field:account.journal.column,field:0
@@ -586,7 +585,7 @@ msgid "Not reconciled transactions"
msgstr "Transação não conciliada"
#. module: account
-#: code:addons/account/account_cash_statement.py:348
+#: code:addons/account/account_cash_statement.py:349
#, python-format
msgid "CashBox Balance is not matching with Calculated Balance !"
msgstr "Balanço de Caixa não confere com Balanço Calculado"
@@ -671,7 +670,7 @@ msgid "Tax Code Amount"
msgstr "Valor do Código do Imposto"
#. module: account
-#: code:addons/account/account.py:2779
+#: code:addons/account/account.py:2823
#: code:addons/account/installer.py:434
#, python-format
msgid "SAJ"
@@ -704,8 +703,8 @@ msgid "Journal Period"
msgstr "Período do Diário"
#. module: account
-#: code:addons/account/account_move_line.py:732
-#: code:addons/account/account_move_line.py:776
+#: code:addons/account/account_move_line.py:723
+#: code:addons/account/account_move_line.py:767
#, python-format
msgid "To reconcile the entries company should be the same for all entries"
msgstr ""
@@ -768,7 +767,7 @@ msgid "Analytic Entries by line"
msgstr "Entradas analíticas por linha"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:39
+#: code:addons/account/wizard/account_change_currency.py:38
#, python-format
msgid "You can only change currency for Draft Invoice !"
msgstr "É permitido alterar a moeda apenas para Fatura Rascunho"
@@ -872,7 +871,7 @@ msgid "Next Partner to reconcile"
msgstr "Próximo Parceiro a reconciliar"
#. module: account
-#: code:addons/account/account_move_line.py:1191
+#: code:addons/account/account_move_line.py:1197
#, python-format
msgid ""
"You can not do this modification on a confirmed entry ! Please note that you "
@@ -999,11 +998,11 @@ msgid "Code"
msgstr "Código"
#. module: account
-#: code:addons/account/account.py:2083
+#: code:addons/account/account.py:2097
#: code:addons/account/account_bank_statement.py:350
-#: code:addons/account/account_move_line.py:170
+#: code:addons/account/account_move_line.py:169
#: code:addons/account/invoice.py:73
-#: code:addons/account/invoice.py:670
+#: code:addons/account/invoice.py:678
#: code:addons/account/wizard/account_use_model.py:81
#, python-format
msgid "No Analytic Journal !"
@@ -1084,7 +1083,6 @@ msgstr "Lucros e Perdas (Conta de Despesas)"
#. module: account
#: report:account.analytic.account.journal:0
-#: report:account.move.voucher:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
msgid "-"
@@ -1175,6 +1173,7 @@ msgstr "# de transações"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
@@ -1182,7 +1181,7 @@ msgid "Entry Label"
msgstr "Aba de lançamento"
#. module: account
-#: code:addons/account/account.py:976
+#: code:addons/account/account.py:990
#, python-format
msgid "You can not modify/delete a journal with entries for this period !"
msgstr ""
@@ -1321,7 +1320,6 @@ msgid "Journal Items Analysis"
msgstr "Análise de Itens de Diário"
#. module: account
-#: model:ir.actions.act_window,name:account.action_partner_all
#: model:ir.ui.menu,name:account.next_id_22
msgid "Partners"
msgstr "Parceiros"
@@ -1351,7 +1349,7 @@ msgid "Central Journal"
msgstr "Diário Central"
#. module: account
-#: code:addons/account/account_move_line.py:1271
+#: code:addons/account/account_move_line.py:1277
#, python-format
msgid "You can not use this general account in this journal !"
msgstr "Voce não pode usar esta conta geral neste diário !"
@@ -1448,7 +1446,7 @@ msgid ""
msgstr "Exemplo: 2% em 14 dias, restante em 30 dias no fim do mês."
#. module: account
-#: code:addons/account/invoice.py:815
+#: code:addons/account/invoice.py:823
#, python-format
msgid ""
"Cannot create the invoice !\n"
@@ -1618,7 +1616,6 @@ msgid "Separated Journal Sequences"
msgstr "Sequências de diário separadas"
#. module: account
-#: field:account.bank.statement,user_id:0
#: view:account.invoice:0
msgid "Responsible"
msgstr "Responsável"
@@ -1690,7 +1687,7 @@ msgid "Error! You cannot define overlapping fiscal years"
msgstr "Erro! Você não pode definir anos fiscais que se sobreponham."
#. module: account
-#: code:addons/account/account_move_line.py:808
+#: code:addons/account/account_move_line.py:799
#, python-format
msgid "The account is not defined to be reconciled !"
msgstr "A conta não está definida para ser reconciliada !"
@@ -1725,7 +1722,7 @@ msgid "Receivables & Payables"
msgstr "Recebíveis & Pagáveis"
#. module: account
-#: code:addons/account/account_move_line.py:815
+#: code:addons/account/account_move_line.py:806
#, python-format
msgid "You have to provide an account for the write off entry !"
msgstr "Você tem que fornecer uma conta para o lançamento da baixa !"
@@ -1761,7 +1758,7 @@ msgid "Customer Ref:"
msgstr "Ref.Cliente:"
#. module: account
-#: code:addons/account/account_cash_statement.py:328
+#: code:addons/account/account_cash_statement.py:329
#, python-format
msgid "User %s does not have rights to access %s journal !"
msgstr "Usuário %s não possui permissões para acessar o diário %s !"
@@ -1782,7 +1779,7 @@ msgid "Tax Declaration: Credit Notes"
msgstr "Declaração de Impostos: Observações de Crédito"
#. module: account
-#: code:addons/account/account.py:499
+#: code:addons/account/account.py:509
#, python-format
msgid "You cannot deactivate an account that contains account moves."
msgstr ""
@@ -1799,7 +1796,7 @@ msgid "You can not create move line on closed account."
msgstr "Você não pode criar linhas de movimento em uma conta fechada."
#. module: account
-#: code:addons/account/account.py:519
+#: code:addons/account/account.py:529
#, python-format
msgid ""
"You cannot change the type of account from 'Closed' to any other type which "
@@ -2082,7 +2079,7 @@ msgid " Journal"
msgstr " Diário"
#. module: account
-#: code:addons/account/account.py:1319
+#: code:addons/account/account.py:1333
#, python-format
msgid ""
"There is no default default debit account defined \n"
@@ -2144,7 +2141,7 @@ msgid "Description"
msgstr "Descrição"
#. module: account
-#: code:addons/account/account.py:2844
+#: code:addons/account/account.py:2888
#: code:addons/account/installer.py:498
#, python-format
msgid "ECNJ"
@@ -2164,7 +2161,7 @@ msgid "Income Account"
msgstr "Conta de Receita"
#. module: account
-#: code:addons/account/invoice.py:352
+#: code:addons/account/invoice.py:351
#, python-format
msgid "There is no Accounting Journal of type Sale/Purchase defined!"
msgstr "Não existe Diário Contábil do tipo Compra/Venda definido!"
@@ -2175,6 +2172,7 @@ msgid "Accounting Properties"
msgstr "Propriedades da Conta"
#. module: account
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.print.journal,sort_selection:0
msgid "Entries Sorted By"
@@ -2203,6 +2201,7 @@ msgstr "Modelo de produto"
#: field:account.fiscalyear,name:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.journal.period,fiscalyear_id:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -2312,7 +2311,7 @@ msgid "Account Tax Code"
msgstr "Código da conta de impostos"
#. module: account
-#: code:addons/account/invoice.py:545
+#: code:addons/account/invoice.py:552
#, python-format
msgid ""
"Can't find any account journal of %s type for this company.\n"
@@ -2393,7 +2392,7 @@ msgid "Account Model Entries"
msgstr "Modelo de entrada de contas"
#. module: account
-#: code:addons/account/account.py:2796
+#: code:addons/account/account.py:2840
#: code:addons/account/installer.py:454
#, python-format
msgid "EXJ"
@@ -2484,7 +2483,7 @@ msgid "Accounts"
msgstr "Contas"
#. module: account
-#: code:addons/account/invoice.py:351
+#: code:addons/account/invoice.py:350
#, python-format
msgid "Configuration Error!"
msgstr "Erro de Configuração!"
@@ -2496,13 +2495,12 @@ msgid "Average Price"
msgstr "Preço médio"
#. module: account
-#: report:account.move.voucher:0
#: report:account.overdue:0
msgid "Date:"
msgstr "Data:"
#. module: account
-#: code:addons/account/account.py:640
+#: code:addons/account/account.py:654
#, python-format
msgid ""
"You cannot modify company of this journal as its related record exist in "
@@ -2540,6 +2538,7 @@ msgstr "Desc.(%)"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.overdue:0
#: report:account.third_party_ledger:0
@@ -2656,16 +2655,16 @@ msgid "This wizard will create recurring accounting entries"
msgstr "Este assistente irá criar lançamentos contábeis periódicos"
#. module: account
-#: code:addons/account/account.py:1181
+#: code:addons/account/account.py:1195
#, python-format
msgid "No sequence defined on the journal !"
msgstr "Nenhuma seqüência definida no diário !"
#. module: account
-#: code:addons/account/account.py:2083
+#: code:addons/account/account.py:2097
#: code:addons/account/account_bank_statement.py:350
-#: code:addons/account/account_move_line.py:170
-#: code:addons/account/invoice.py:670
+#: code:addons/account/account_move_line.py:169
+#: code:addons/account/invoice.py:678
#: code:addons/account/wizard/account_use_model.py:81
#, python-format
msgid "You have to define an analytic journal on the '%s' journal!"
@@ -2837,7 +2836,7 @@ msgid "Analytic Entries"
msgstr "Lançamentos analíticos"
#. module: account
-#: code:addons/account/account.py:822
+#: code:addons/account/account.py:836
#, python-format
msgid ""
"No fiscal year defined for this date !\n"
@@ -2969,7 +2968,7 @@ msgid "BNK%s"
msgstr "BCO%s"
#. module: account
-#: code:addons/account/account.py:2906
+#: code:addons/account/account.py:2950
#: code:addons/account/installer.py:296
#, python-format
msgid "BNK"
@@ -3091,6 +3090,7 @@ msgstr "Deixe vazio para usar a conta de despesas"
#: field:account.common.report,journal_ids:0
#: report:account.general.journal:0
#: field:account.general.journal,journal_ids:0
+#: report:account.general.ledger_landscape:0
#: view:account.journal.period:0
#: report:account.partner.balance:0
#: field:account.partner.balance,journal_ids:0
@@ -3151,7 +3151,7 @@ msgid "Starting Balance"
msgstr "Saldo Inicial"
#. module: account
-#: code:addons/account/invoice.py:1284
+#: code:addons/account/invoice.py:1298
#, python-format
msgid "No Partner Defined !"
msgstr "Número do parceiro definido !"
@@ -3195,7 +3195,6 @@ msgstr "Diário"
#: view:account.invoice.report:0
#: selection:account.invoice.report,state:0
#: selection:account.journal.period,state:0
-#: report:account.move.voucher:0
#: view:account.subscription:0
#: selection:account.subscription,state:0
#: selection:report.invoice.created,state:0
@@ -3249,7 +3248,7 @@ msgstr ""
"que você não poderá mais alterar seus campos."
#. module: account
-#: code:addons/account/invoice.py:370
+#: code:addons/account/invoice.py:373
#, python-format
msgid "Cannot delete invoice(s) that are already opened or paid !"
msgstr "Impossível excluir fatura(s) que já foram abertas ou pagas!"
@@ -3312,7 +3311,7 @@ msgstr ""
"'Cancelado' ou 'Concluído'!"
#. module: account
-#: code:addons/account/account.py:522
+#: code:addons/account/account.py:532
#, python-format
msgid ""
"You cannot change the type of account from '%s' to '%s' type as it contains "
@@ -3323,6 +3322,7 @@ msgstr ""
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
msgid "Counterpart"
msgstr "Contra-parte"
@@ -3428,6 +3428,7 @@ msgstr ""
#: field:account.entries.report,date:0
#: selection:account.general.journal,filter:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.invoice.report,date:0
#: report:account.journal.period.print:0
#: view:account.move:0
@@ -3471,7 +3472,7 @@ msgid "Chart of Accounts Template"
msgstr "Modelo de plano de contas"
#. module: account
-#: code:addons/account/account.py:2095
+#: code:addons/account/account.py:2109
#, python-format
msgid ""
"Maturity date of entry line generated by model line '%s' of model '%s' is "
@@ -3483,13 +3484,13 @@ msgstr ""
"Por favor, defina o parceiro sobre ela!"
#. module: account
-#: code:addons/account/account_move_line.py:810
+#: code:addons/account/account_move_line.py:801
#, python-format
msgid "Some entries are already reconciled !"
msgstr "Alguns lançamentos já estão conciliados !"
#. module: account
-#: code:addons/account/account.py:1204
+#: code:addons/account/account.py:1218
#, python-format
msgid ""
"You cannot validate a Journal Entry unless all journal items are in same "
@@ -3617,7 +3618,7 @@ msgid "Analytic Items"
msgstr "Itens Analíticos"
#. module: account
-#: code:addons/account/account_move_line.py:1128
+#: code:addons/account/account_move_line.py:1134
#, python-format
msgid "Unable to change tax !"
msgstr "Não foi possível alterar o imposto!"
@@ -3628,14 +3629,14 @@ msgid "#Entries"
msgstr "#Entradas"
#. module: account
-#: code:addons/account/invoice.py:1422
+#: code:addons/account/invoice.py:1437
#, python-format
msgid ""
"You selected an Unit of Measure which is not compatible with the product."
msgstr "Você selecionou uma unidade que não é compatível com o produto."
#. module: account
-#: code:addons/account/invoice.py:473
+#: code:addons/account/invoice.py:476
#, python-format
msgid ""
"The Payment Term of Supplier does not have Payment Term Lines(Computation) "
@@ -3949,7 +3950,7 @@ msgid "Acc.Type"
msgstr "Tipo de Conta"
#. module: account
-#: code:addons/account/invoice.py:714
+#: code:addons/account/invoice.py:722
#, python-format
msgid "Global taxes defined, but are not in invoice lines !"
msgstr ""
@@ -4014,7 +4015,7 @@ msgstr ""
"...) os quais já são gerados com status 'Postado'."
#. module: account
-#: code:addons/account/account_analytic_line.py:91
+#: code:addons/account/account_analytic_line.py:90
#, python-format
msgid "There is no expense account defined for this product: \"%s\" (id:%d)"
msgstr ""
@@ -4193,7 +4194,7 @@ msgid "Credit Notes"
msgstr "Notas de crédito"
#. module: account
-#: code:addons/account/account.py:2067
+#: code:addons/account/account.py:2081
#: code:addons/account/wizard/account_use_model.py:69
#, python-format
msgid "Unable to find a valid period !"
@@ -4247,7 +4248,7 @@ msgstr "Taxa incluida no preço"
#. module: account
#: model:ir.model,name:account.model_account_analytic_cost_ledger_journal_report
msgid "Account Analytic Cost Ledger For Journal Report"
-msgstr ""
+msgstr "Livro-razão Conta Custo Analítico para o Relatório de Diários"
#. module: account
#: model:ir.actions.act_window,name:account.action_model_form
@@ -4266,11 +4267,11 @@ msgid "Change"
msgstr "Alterar"
#. module: account
-#: code:addons/account/account.py:1290
-#: code:addons/account/account.py:1318
-#: code:addons/account/account.py:1325
-#: code:addons/account/account_move_line.py:1055
-#: code:addons/account/invoice.py:896
+#: code:addons/account/account.py:1304
+#: code:addons/account/account.py:1332
+#: code:addons/account/account.py:1339
+#: code:addons/account/account_move_line.py:1061
+#: code:addons/account/invoice.py:904
#: code:addons/account/wizard/account_automatic_reconcile.py:152
#: code:addons/account/wizard/account_fiscalyear_close.py:78
#: code:addons/account/wizard/account_fiscalyear_close.py:81
@@ -4376,7 +4377,7 @@ msgid "You must define an analytic journal of type '%s' !"
msgstr "Você tem que definir um diário analítico '%s' !"
#. module: account
-#: code:addons/account/account.py:1397
+#: code:addons/account/account.py:1411
#, python-format
msgid ""
"Couldn't create move with currency different from the secondary currency of "
@@ -4448,7 +4449,7 @@ msgid "Invoices"
msgstr "Faturas"
#. module: account
-#: code:addons/account/invoice.py:804
+#: code:addons/account/invoice.py:812
#, python-format
msgid ""
"Please verify the price of the invoice !\n"
@@ -4562,25 +4563,24 @@ msgid "Third Party (Country)"
msgstr "Terceiro (País)"
#. module: account
-#: code:addons/account/account.py:938
-#: code:addons/account/account.py:940
-#: code:addons/account/account.py:1181
-#: code:addons/account/account.py:1393
-#: code:addons/account/account.py:1397
-#: code:addons/account/account_cash_statement.py:249
-#: code:addons/account/account_move_line.py:780
-#: code:addons/account/account_move_line.py:803
-#: code:addons/account/account_move_line.py:805
-#: code:addons/account/account_move_line.py:808
-#: code:addons/account/account_move_line.py:810
-#: code:addons/account/account_move_line.py:1117
+#: code:addons/account/account.py:952
+#: code:addons/account/account.py:954
+#: code:addons/account/account.py:1195
+#: code:addons/account/account.py:1407
+#: code:addons/account/account.py:1411
+#: code:addons/account/account_cash_statement.py:250
+#: code:addons/account/account_move_line.py:771
+#: code:addons/account/account_move_line.py:794
+#: code:addons/account/account_move_line.py:796
+#: code:addons/account/account_move_line.py:799
+#: code:addons/account/account_move_line.py:801
+#: code:addons/account/account_move_line.py:1123
#: code:addons/account/report/common_report_header.py:92
-#: code:addons/account/wizard/account_change_currency.py:39
-#: code:addons/account/wizard/account_change_currency.py:60
-#: code:addons/account/wizard/account_change_currency.py:65
-#: code:addons/account/wizard/account_change_currency.py:71
+#: code:addons/account/wizard/account_change_currency.py:38
+#: code:addons/account/wizard/account_change_currency.py:59
+#: code:addons/account/wizard/account_change_currency.py:64
+#: code:addons/account/wizard/account_change_currency.py:70
#: code:addons/account/wizard/account_move_bank_reconcile.py:49
-#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40
#: code:addons/account/wizard/account_report_common.py:120
#: code:addons/account/wizard/account_report_common.py:126
#, python-format
@@ -4602,7 +4602,7 @@ msgid "Bank Details"
msgstr "Detalhes bancários"
#. module: account
-#: code:addons/account/invoice.py:720
+#: code:addons/account/invoice.py:728
#, python-format
msgid "Taxes missing !"
msgstr "Impostos faltando!"
@@ -4661,7 +4661,7 @@ msgid "Check Date not in the Period"
msgstr "Verificar Data fora do Período"
#. module: account
-#: code:addons/account/account.py:1210
+#: code:addons/account/account.py:1224
#, python-format
msgid ""
"You can not modify a posted entry of this journal !\n"
@@ -4683,7 +4683,7 @@ msgid "Child Tax Accounts"
msgstr "Contas de impostos derivados (subcontas)"
#. module: account
-#: code:addons/account/account.py:940
+#: code:addons/account/account.py:954
#, python-format
msgid "Start period should be smaller then End period"
msgstr "Período Inicial deve ser anterior ao Período Final"
@@ -4713,6 +4713,7 @@ msgstr "Balanço analítico -"
#: report:account.general.journal:0
#: field:account.general.journal,target_move:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.move.journal,target_move:0
#: report:account.partner.balance:0
@@ -4795,7 +4796,7 @@ msgid "Line 1:"
msgstr "Linha 1:"
#. module: account
-#: code:addons/account/account.py:1167
+#: code:addons/account/account.py:1181
#, python-format
msgid "Integrity Error !"
msgstr "Erro de integridade !"
@@ -4945,7 +4946,7 @@ msgstr ""
"um parceiro"
#. module: account
-#: code:addons/account/account.py:2067
+#: code:addons/account/account.py:2081
#: code:addons/account/wizard/account_use_model.py:69
#, python-format
msgid "No period found !"
@@ -5020,7 +5021,7 @@ msgstr ""
"28/02."
#. module: account
-#: code:addons/account/account.py:2896
+#: code:addons/account/account.py:2940
#: code:addons/account/installer.py:283
#: code:addons/account/installer.py:295
#, python-format
@@ -5048,7 +5049,7 @@ msgid "Start of period"
msgstr "Início do período"
#. module: account
-#: code:addons/account/account_move_line.py:1193
+#: code:addons/account/account_move_line.py:1199
#, python-format
msgid ""
"You can not do this modification on a reconciled entry ! Please note that "
@@ -5060,7 +5061,7 @@ msgstr ""
#. module: account
#: model:ir.model,name:account.model_account_common_account_report
msgid "Account Common Account Report"
-msgstr ""
+msgstr "Relatório de Contas da Contabilidade Geral"
#. module: account
#: field:account.bank.statement.line,name:0
@@ -5106,12 +5107,12 @@ msgstr "Diário de lançamentos do fim do ano"
#. module: account
#: code:addons/account/account_bank_statement.py:331
-#: code:addons/account/invoice.py:405
-#: code:addons/account/invoice.py:505
-#: code:addons/account/invoice.py:520
-#: code:addons/account/invoice.py:528
-#: code:addons/account/invoice.py:545
-#: code:addons/account/invoice.py:1347
+#: code:addons/account/invoice.py:408
+#: code:addons/account/invoice.py:508
+#: code:addons/account/invoice.py:523
+#: code:addons/account/invoice.py:531
+#: code:addons/account/invoice.py:552
+#: code:addons/account/invoice.py:1361
#: code:addons/account/wizard/account_move_journal.py:63
#, python-format
msgid "Configuration Error !"
@@ -5191,7 +5192,7 @@ msgid "Sort By"
msgstr "Ordenar Por"
#. module: account
-#: code:addons/account/account.py:1326
+#: code:addons/account/account.py:1340
#, python-format
msgid ""
"There is no default default credit account defined \n"
@@ -5346,7 +5347,7 @@ msgid "Generate Opening Entries"
msgstr "Gerar Lançamentos de Abertura"
#. module: account
-#: code:addons/account/account_move_line.py:738
+#: code:addons/account/account_move_line.py:729
#, python-format
msgid "Already Reconciled!"
msgstr "Já Reconciliado"
@@ -5384,7 +5385,7 @@ msgstr "Sub-contas"
#. module: account
#: view:account.move.line.reconcile:0
-#: code:addons/account/account_move_line.py:830
+#: code:addons/account/account_move_line.py:821
#, python-format
msgid "Write-Off"
msgstr "Baixa ou exclusão"
@@ -5433,6 +5434,8 @@ msgid ""
"Streamlines invoice payment and creates hooks to plug automated payment "
"systems in."
msgstr ""
+"Simplifica o pagamento de faturas e cria ligações com o sistema de pagamento "
+"automático."
#. module: account
#: field:account.payment.term.line,value:0
@@ -5534,7 +5537,7 @@ msgid "# of Lines"
msgstr "# de Linhas"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:60
+#: code:addons/account/wizard/account_change_currency.py:59
#, python-format
msgid "New currency is not confirured properly !"
msgstr "A nova moeda não está configurada corretamente !"
@@ -5559,14 +5562,14 @@ msgid "Filter by"
msgstr "Filtrar por"
#. module: account
-#: code:addons/account/account_move_line.py:1131
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1137
+#: code:addons/account/account_move_line.py:1220
#, python-format
msgid "You can not use an inactive account!"
msgstr "Voce não pode usar uma conta inativa!"
#. module: account
-#: code:addons/account/account_move_line.py:803
+#: code:addons/account/account_move_line.py:794
#, python-format
msgid "Entries are not of the same account or already reconciled ! "
msgstr "Lançamentos não são das mesmas contas ou já estão conciliados ! "
@@ -5601,7 +5604,7 @@ msgstr "7"
#. module: account
#: code:addons/account/account_bank_statement.py:391
-#: code:addons/account/invoice.py:370
+#: code:addons/account/invoice.py:373
#, python-format
msgid "Invalid action !"
msgstr "Ação invalida !"
@@ -5821,7 +5824,7 @@ msgid "Companies"
msgstr "Empresas"
#. module: account
-#: code:addons/account/account.py:532
+#: code:addons/account/account.py:546
#, python-format
msgid ""
"You cannot modify Company of account as its related record exist in Entry "
@@ -6102,9 +6105,9 @@ msgid "Optional create"
msgstr "Criação opcional"
#. module: account
-#: code:addons/account/invoice.py:406
-#: code:addons/account/invoice.py:506
-#: code:addons/account/invoice.py:1348
+#: code:addons/account/invoice.py:409
+#: code:addons/account/invoice.py:509
+#: code:addons/account/invoice.py:1362
#, python-format
msgid "Can not find account chart for this company, Please Create account."
msgstr ""
@@ -6257,8 +6260,8 @@ msgid "Analytic Entries Statistics"
msgstr "Estatísticas de Lançamentos Analíticos"
#. module: account
-#: code:addons/account/account_analytic_line.py:143
-#: code:addons/account/account_move_line.py:905
+#: code:addons/account/account_analytic_line.py:141
+#: code:addons/account/account_move_line.py:897
#, python-format
msgid "Entries: "
msgstr "Lancamentos: "
@@ -6269,7 +6272,7 @@ msgid "Create manual recurring entries in a chosen journal."
msgstr "Criar lançamentos recorrentes manuais no diário escolhido."
#. module: account
-#: code:addons/account/account.py:1393
+#: code:addons/account/account.py:1407
#, python-format
msgid "Couldn't create move between different companies"
msgstr "Não foi possível criar movimentação entre empresas diferentes"
@@ -6316,7 +6319,7 @@ msgid "Total debit"
msgstr "Débito Total"
#. module: account
-#: code:addons/account/account_move_line.py:781
+#: code:addons/account/account_move_line.py:772
#, python-format
msgid "Entry \"%s\" is not valid !"
msgstr "Lançamento \"%s\" não é válido"
@@ -6386,30 +6389,31 @@ msgid " valuation: percent"
msgstr " valorização: porcentagem"
#. module: account
-#: code:addons/account/account.py:499
-#: code:addons/account/account.py:501
-#: code:addons/account/account.py:822
-#: code:addons/account/account.py:901
-#: code:addons/account/account.py:976
-#: code:addons/account/account.py:1204
-#: code:addons/account/account.py:1210
-#: code:addons/account/account.py:2095
-#: code:addons/account/account.py:2333
-#: code:addons/account/account_analytic_line.py:90
-#: code:addons/account/account_analytic_line.py:99
+#: code:addons/account/account.py:509
+#: code:addons/account/account.py:511
+#: code:addons/account/account.py:836
+#: code:addons/account/account.py:915
+#: code:addons/account/account.py:990
+#: code:addons/account/account.py:1218
+#: code:addons/account/account.py:1224
+#: code:addons/account/account.py:2109
+#: code:addons/account/account.py:2357
+#: code:addons/account/account_analytic_line.py:89
+#: code:addons/account/account_analytic_line.py:98
#: code:addons/account/account_bank_statement.py:292
#: code:addons/account/account_bank_statement.py:305
#: code:addons/account/account_bank_statement.py:345
-#: code:addons/account/account_cash_statement.py:328
-#: code:addons/account/account_cash_statement.py:348
-#: code:addons/account/account_move_line.py:1176
-#: code:addons/account/account_move_line.py:1191
-#: code:addons/account/account_move_line.py:1193
-#: code:addons/account/invoice.py:785
-#: code:addons/account/invoice.py:815
-#: code:addons/account/invoice.py:1008
+#: code:addons/account/account_cash_statement.py:329
+#: code:addons/account/account_cash_statement.py:349
+#: code:addons/account/account_move_line.py:1182
+#: code:addons/account/account_move_line.py:1197
+#: code:addons/account/account_move_line.py:1199
+#: code:addons/account/invoice.py:793
+#: code:addons/account/invoice.py:823
+#: code:addons/account/invoice.py:1014
#: code:addons/account/wizard/account_invoice_refund.py:100
#: code:addons/account/wizard/account_invoice_refund.py:102
+#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40
#: code:addons/account/wizard/account_use_model.py:44
#, python-format
msgid "Error !"
@@ -6529,7 +6533,7 @@ msgid "Journal Select"
msgstr "Selecionar Diário"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:65
+#: code:addons/account/wizard/account_change_currency.py:64
#, python-format
msgid "Currnt currency is not confirured properly !"
msgstr "A moeda atual não está configurada corretamente !"
@@ -6546,9 +6550,11 @@ msgstr "Posição Fiscal dos Impostos"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: view:account.report.general.ledger:0
#: model:ir.actions.act_window,name:account.action_account_general_ledger_menu
#: model:ir.actions.report.xml,name:account.account_general_ledger
+#: model:ir.actions.report.xml,name:account.account_general_ledger_landscape
#: model:ir.ui.menu,name:account.menu_general_ledger
msgid "General Ledger"
msgstr "Livro Razão"
@@ -6609,7 +6615,7 @@ msgid "Total:"
msgstr "Total:"
#. module: account
-#: code:addons/account/account.py:2050
+#: code:addons/account/account.py:2064
#, python-format
msgid ""
"You can specify year, month and date in the name of the model using the "
@@ -6646,7 +6652,7 @@ msgid "Child Codes"
msgstr "Códigos derivados (sub-contas)"
#. module: account
-#: code:addons/account/invoice.py:473
+#: code:addons/account/invoice.py:476
#: code:addons/account/wizard/account_invoice_refund.py:137
#, python-format
msgid "Data Insufficient !"
@@ -6830,7 +6836,7 @@ msgid "Lines"
msgstr "Linhas"
#. module: account
-#: code:addons/account/invoice.py:521
+#: code:addons/account/invoice.py:524
#, python-format
msgid ""
"Can not find account chart for this company in invoice line account, Please "
@@ -7031,7 +7037,7 @@ msgstr ""
"personalizado."
#. module: account
-#: code:addons/account/account.py:938
+#: code:addons/account/account.py:952
#, python-format
msgid "You should have chosen periods that belongs to the same company"
msgstr "Você deveria ter escolhido períodos que pertencem a mesma empresa"
@@ -7145,7 +7151,7 @@ msgid "Sign on Reports"
msgstr "Assinar relatórios"
#. module: account
-#: code:addons/account/account_cash_statement.py:249
+#: code:addons/account/account_cash_statement.py:250
#, python-format
msgid "You can not have two open register for the same journal"
msgstr "Você não pode ter dois registradores abertos para o mesmo diário"
@@ -7180,7 +7186,6 @@ msgstr ""
#. module: account
#: report:account.invoice:0
#: view:account.invoice:0
-#: report:account.move.voucher:0
msgid "PRO-FORMA"
msgstr "Pro-forma"
@@ -7212,6 +7217,7 @@ msgstr "Informação Opcional"
#. module: account
#: view:account.analytic.line:0
+#: field:account.bank.statement,user_id:0
#: view:account.journal:0
#: field:account.journal,user_id:0
#: view:analytic.entries.report:0
@@ -7239,13 +7245,13 @@ msgstr ""
"Você pode colocar data limite para o pagamento desta linha."
#. module: account
-#: code:addons/account/account_move_line.py:1271
+#: code:addons/account/account_move_line.py:1277
#, python-format
msgid "Bad account !"
msgstr "Conta errada!"
#. module: account
-#: code:addons/account/account.py:2777
+#: code:addons/account/account.py:2821
#: code:addons/account/installer.py:432
#, python-format
msgid "Sales Journal"
@@ -7263,7 +7269,7 @@ msgid "Invoice Tax"
msgstr "Taxa de fatura"
#. module: account
-#: code:addons/account/account_move_line.py:1246
+#: code:addons/account/account_move_line.py:1252
#, python-format
msgid "No piece number !"
msgstr "Nenhum número da parte!"
@@ -7510,17 +7516,17 @@ msgid "Fixed"
msgstr "Fixo"
#. module: account
-#: code:addons/account/account.py:506
-#: code:addons/account/account.py:519
-#: code:addons/account/account.py:522
+#: code:addons/account/account.py:516
+#: code:addons/account/account.py:529
#: code:addons/account/account.py:532
-#: code:addons/account/account.py:640
-#: code:addons/account/account.py:927
-#: code:addons/account/account_move_line.py:732
-#: code:addons/account/account_move_line.py:776
-#: code:addons/account/invoice.py:714
-#: code:addons/account/invoice.py:717
-#: code:addons/account/invoice.py:720
+#: code:addons/account/account.py:546
+#: code:addons/account/account.py:654
+#: code:addons/account/account.py:941
+#: code:addons/account/account_move_line.py:723
+#: code:addons/account/account_move_line.py:767
+#: code:addons/account/invoice.py:722
+#: code:addons/account/invoice.py:725
+#: code:addons/account/invoice.py:728
#, python-format
msgid "Warning !"
msgstr "Atenção !"
@@ -7552,6 +7558,7 @@ msgstr "Valor (por extenso) :"
#: view:account.entries.report:0
#: field:account.entries.report,partner_id:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: view:account.invoice:0
#: field:account.invoice,partner_id:0
#: field:account.invoice.line,partner_id:0
@@ -7582,7 +7589,7 @@ msgid "Can not %s draft/proforma/cancel invoice."
msgstr "Não pode %s provisório/proforma/cancelar fatura."
#. module: account
-#: code:addons/account/invoice.py:787
+#: code:addons/account/invoice.py:795
#, python-format
msgid "No Invoice Lines !"
msgstr "Sem Linhas na Fatura !"
@@ -7631,7 +7638,7 @@ msgid "Deferral Method"
msgstr "Método para deferimento"
#. module: account
-#: code:addons/account/invoice.py:359
+#: code:addons/account/invoice.py:360
#, python-format
msgid "Invoice '%s' is paid."
msgstr "A Fatura '%s' está paga."
@@ -7696,7 +7703,7 @@ msgid "Associated Partner"
msgstr "Parceiro Associado"
#. module: account
-#: code:addons/account/invoice.py:1284
+#: code:addons/account/invoice.py:1298
#, python-format
msgid "You must first select a partner !"
msgstr "Voce precisa selecionar um parceiro primeiro !"
@@ -7766,7 +7773,7 @@ msgid "Choose Fiscal Year"
msgstr "Escolha o Ano Fiscal"
#. module: account
-#: code:addons/account/account.py:2841
+#: code:addons/account/account.py:2885
#: code:addons/account/installer.py:495
#, python-format
msgid "Purchase Refund Journal"
@@ -7804,6 +7811,7 @@ msgstr "Gestão Financeira e Contábil"
#: view:account.entries.report:0
#: field:account.entries.report,period_id:0
#: view:account.fiscalyear:0
+#: report:account.general.ledger_landscape:0
#: view:account.invoice:0
#: view:account.invoice.report:0
#: field:account.journal.period,period_id:0
@@ -7983,7 +7991,7 @@ msgid "Account Types"
msgstr "Tipos de Conta"
#. module: account
-#: code:addons/account/invoice.py:897
+#: code:addons/account/invoice.py:905
#, python-format
msgid "Cannot create invoice move on centralised journal"
msgstr "Não é possível criar um movimento de fatura no diário centralizado"
@@ -8033,6 +8041,7 @@ msgstr "Diário de Devolução"
#: report:account.account.balance:0
#: report:account.central.journal:0
#: report:account.general.journal:0
+#: report:account.general.ledger_landscape:0
#: report:account.partner.balance:0
msgid "Filter By"
msgstr "Filtrar Por"
@@ -8075,7 +8084,7 @@ msgid "Payment Term Line"
msgstr "Linha da forma de pagamento"
#. module: account
-#: code:addons/account/account.py:2794
+#: code:addons/account/account.py:2838
#: code:addons/account/installer.py:452
#, python-format
msgid "Purchase Journal"
@@ -8247,8 +8256,8 @@ msgstr ""
"O valor do recibo deve ser o mesmo valor da linha equivalente no extrato"
#. module: account
-#: code:addons/account/account_move_line.py:1131
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1137
+#: code:addons/account/account_move_line.py:1220
#, python-format
msgid "Bad account!"
msgstr "Conta inválida!"
@@ -8259,7 +8268,7 @@ msgid "Keep empty for all open fiscal years"
msgstr "Deixe vazio para todos os anos fiscais abertos"
#. module: account
-#: code:addons/account/account_move_line.py:1056
+#: code:addons/account/account_move_line.py:1062
#, python-format
msgid "The account move (%s) for centralisation has been confirmed!"
msgstr "O movimento de conta (%s) para centralização foi confirmado!"
@@ -8282,6 +8291,7 @@ msgstr ""
#: field:account.entries.report,currency_id:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.invoice,currency_id:0
#: field:account.invoice.report,currency_id:0
#: field:account.journal,currency:0
@@ -8479,14 +8489,14 @@ msgid "Period from"
msgstr "Período de"
#. module: account
-#: code:addons/account/account.py:2817
+#: code:addons/account/account.py:2861
#: code:addons/account/installer.py:476
#, python-format
msgid "Sales Refund Journal"
msgstr "Diário de Devolução de Vendas"
#. module: account
-#: code:addons/account/account.py:927
+#: code:addons/account/account.py:941
#, python-format
msgid ""
"You cannot modify company of this period as its related record exist in "
@@ -8537,7 +8547,7 @@ msgid "Purchase Tax(%)"
msgstr "Imposto de Compra(%)"
#. module: account
-#: code:addons/account/invoice.py:787
+#: code:addons/account/invoice.py:795
#, python-format
msgid "Please create some invoice lines."
msgstr "Por favor, crie algumas linhas da fatura."
@@ -8553,7 +8563,7 @@ msgid "Configure Your Accounting Application"
msgstr "Configure sua Aplicação Contábil"
#. module: account
-#: code:addons/account/account.py:2820
+#: code:addons/account/account.py:2864
#: code:addons/account/installer.py:479
#, python-format
msgid "SCNJ"
@@ -8597,6 +8607,7 @@ msgstr "Gestão de Acompanhamentos"
#: report:account.central.journal:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
@@ -8606,7 +8617,7 @@ msgid "Start Period"
msgstr "Período Inicial"
#. module: account
-#: code:addons/account/account.py:2333
+#: code:addons/account/account.py:2357
#, python-format
msgid "Cannot locate parent code for template account!"
msgstr "Impossível localizar o código da conta pai para o modelo de conta!"
@@ -8643,7 +8654,7 @@ msgid "Accountant validates the accounting entries coming from the invoice. "
msgstr "O Contador valida os lançamentos contábeis vindos da fatura. "
#. module: account
-#: code:addons/account/invoice.py:1008
+#: code:addons/account/invoice.py:1014
#, python-format
msgid ""
"You cannot cancel the Invoice which is Partially Paid! You need to "
@@ -8673,7 +8684,7 @@ msgid "You can not create move line on view account."
msgstr "Você não pode criar linhas de movimento em uma conta de exibição."
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:71
+#: code:addons/account/wizard/account_change_currency.py:70
#, python-format
msgid "Current currency is not confirured properly !"
msgstr "A moeda atual não está configurada corretamente !"
@@ -8726,6 +8737,7 @@ msgstr "Manter vazio para usar a conta de receita"
#: field:account.entries.report,balance:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.move.line,balance:0
#: report:account.partner.balance:0
#: selection:account.payment.term.line,value:0
@@ -8744,6 +8756,7 @@ msgstr "Entrada manual ou automática no sistema"
#. module: account
#: report:account.account.balance:0
+#: report:account.general.ledger_landscape:0
msgid "Display Account"
msgstr "Mostrar Conta"
@@ -8870,6 +8883,7 @@ msgstr "Lançamento manual"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.move.line,move_id:0
#: field:analytic.entries.report,move_id:0
@@ -8877,7 +8891,7 @@ msgid "Move"
msgstr "Movimento"
#. module: account
-#: code:addons/account/account_move_line.py:1128
+#: code:addons/account/account_move_line.py:1134
#, python-format
msgid "You can not change the tax, you should remove and recreate lines !"
msgstr ""
@@ -8976,6 +8990,7 @@ msgstr "Balanço de Conta Analítica"
#: report:account.central.journal:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
@@ -9019,7 +9034,7 @@ msgid "Account Subscription"
msgstr "Inscriçãoda conta"
#. module: account
-#: code:addons/account/invoice.py:717
+#: code:addons/account/invoice.py:725
#, python-format
msgid ""
"Tax base different !\n"
@@ -9048,6 +9063,7 @@ msgstr "Inscrição de Lançamento"
#: report:account.general.journal:0
#: field:account.general.journal,date_from:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,date_start:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -9076,7 +9092,7 @@ msgid "Unreconciled"
msgstr "Não conciliado"
#. module: account
-#: code:addons/account/invoice.py:804
+#: code:addons/account/invoice.py:812
#, python-format
msgid "Bad total !"
msgstr "Total inválido!"
@@ -9134,13 +9150,13 @@ msgid "Active"
msgstr "Ativo"
#. module: account
-#: code:addons/account/invoice.py:354
+#: code:addons/account/invoice.py:353
#, python-format
msgid "Unknown Error"
msgstr "Erro Desconhecido"
#. module: account
-#: code:addons/account/account.py:1167
+#: code:addons/account/account.py:1181
#, python-format
msgid ""
"You cannot validate a non-balanced entry !\n"
@@ -9188,10 +9204,10 @@ msgstr "Validar Movimento de Conta"
#: field:account.entries.report,credit:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.model.line,credit:0
#: field:account.move.line,credit:0
-#: report:account.move.voucher:0
#: report:account.partner.balance:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
@@ -9441,7 +9457,6 @@ msgstr "Selecione o período"
#: view:account.move:0
#: selection:account.move,state:0
#: view:account.move.line:0
-#: report:account.move.voucher:0
msgid "Posted"
msgstr "Postado"
@@ -9460,6 +9475,7 @@ msgstr "Postado"
#: report:account.general.journal:0
#: field:account.general.journal,date_to:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,date_stop:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -9513,7 +9529,7 @@ msgid "This is a model for recurring accounting entries"
msgstr "Este é um modelo para lançamentos recorrentes de contabilização"
#. module: account
-#: code:addons/account/account_analytic_line.py:100
+#: code:addons/account/account_analytic_line.py:99
#, python-format
msgid "There is no income account defined for this product: \"%s\" (id:%d)"
msgstr "Não há conta de entrada definida para este produto:\"%s\" (id:%d)"
@@ -9668,8 +9684,8 @@ msgid "End period"
msgstr "Período final"
#. module: account
-#: code:addons/account/account_move_line.py:738
-#: code:addons/account/account_move_line.py:815
+#: code:addons/account/account_move_line.py:729
+#: code:addons/account/account_move_line.py:806
#: code:addons/account/wizard/account_invoice_state.py:44
#: code:addons/account/wizard/account_invoice_state.py:68
#: code:addons/account/wizard/account_report_balance_sheet.py:70
@@ -9735,10 +9751,10 @@ msgstr "Fatura do fornecedor"
#: field:account.entries.report,debit:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.model.line,debit:0
#: field:account.move.line,debit:0
-#: report:account.move.voucher:0
#: report:account.partner.balance:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
@@ -9775,7 +9791,7 @@ msgid "Recurring"
msgstr "Recorrente"
#. module: account
-#: code:addons/account/account_move_line.py:805
+#: code:addons/account/account_move_line.py:796
#, python-format
msgid "Entry is already reconciled"
msgstr "Este lançamento já está conciliado"
@@ -9796,7 +9812,7 @@ msgid "Range"
msgstr "Intervalo"
#. module: account
-#: code:addons/account/account_move_line.py:1246
+#: code:addons/account/account_move_line.py:1252
#, python-format
msgid ""
"Can not create an automatic sequence for this piece !\n"
@@ -9936,7 +9952,7 @@ msgid "Accounts Mapping"
msgstr "Mapeando contas"
#. module: account
-#: code:addons/account/invoice.py:346
+#: code:addons/account/invoice.py:345
#, python-format
msgid "Invoice '%s' is waiting for validation."
msgstr "A fatura '%s' está aguardando validação."
@@ -9961,7 +9977,7 @@ msgid "The income or expense account related to the selected product."
msgstr "A conta de receita ou despesa relacionada ao produto selecionado."
#. module: account
-#: code:addons/account/account_move_line.py:1117
+#: code:addons/account/account_move_line.py:1123
#, python-format
msgid "The date of your Journal Entry is not in the defined period!"
msgstr "A data do seu Lançamento de Diário não está no período definido!"
@@ -10168,7 +10184,7 @@ msgid "You must enter a period length that cannot be 0 or below !"
msgstr "Você deve digitar um período que não seja 0 ou menor !"
#. module: account
-#: code:addons/account/account.py:501
+#: code:addons/account/account.py:511
#, python-format
msgid "You cannot remove an account which has account entries!. "
msgstr "Você não pode remover uma conta que contém lançamentos! "
@@ -10253,6 +10269,14 @@ msgstr ""
#~ msgid "x Checks Journal"
#~ msgstr "x Conferências diárias"
+#, python-format
+#~ msgid ""
+#~ "No period defined for this date !\n"
+#~ "Please create a fiscal year."
+#~ msgstr ""
+#~ "Nenhum período definido para esta data !\n"
+#~ "Por favor crie um ano fiscal."
+
#~ msgid "Account No."
#~ msgstr "Conta nro."
@@ -10412,6 +10436,26 @@ msgstr ""
#~ "Indica se o imposto deve ser incluído na base de cálculo para calcular os "
#~ "próximos impostos."
+#, python-format
+#~ msgid ""
+#~ "You can specify year, month and date in the name of the model using the "
+#~ "following labels:\n"
+#~ "\n"
+#~ "%(year)s : To Specify Year \n"
+#~ "%(month)s : To Specify Month \n"
+#~ "%(date)s : Current Date\n"
+#~ "\n"
+#~ "e.g. My model on %(date)s"
+#~ msgstr ""
+#~ "Você pode especificar o ano, mês e data no nome do modelo usando as "
+#~ "seguintes expressões:\n"
+#~ "\n"
+#~ "%(year)s : Para especificar o Ano \n"
+#~ "%(month)s : Para especificar o Mês \n"
+#~ "%(date)s : Data corrente\n"
+#~ "\n"
+#~ "ex: Meu modelo em %(date)s"
+
#~ msgid "Journal - Period"
#~ msgstr "Dario - Período"
@@ -11744,3 +11788,7 @@ msgstr ""
#, python-format
#~ msgid "is validated."
#~ msgstr "está validada."
+
+#, python-format
+#~ msgid "Date not in a defined fiscal year"
+#~ msgstr "A data não está em um ano fiscal definido"
diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po
index f16c1a81618..16b60927980 100644
--- a/addons/account/i18n/ru.po
+++ b/addons/account/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2011-04-15 19:34+0000\n"
-"Last-Translator: Chertykov Denis \n"
+"PO-Revision-Date: 2011-06-27 05:16+0000\n"
+"Last-Translator: Andrew Yashchuk \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: 2011-04-29 05:09+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -33,7 +33,7 @@ msgid "No End of year journal defined for the fiscal year"
msgstr "Не определен журнал конца года для финансового года"
#. module: account
-#: code:addons/account/account.py:506
+#: code:addons/account/account.py:516
#, python-format
msgid ""
"You cannot remove/deactivate an account which is set as a property to any "
@@ -67,10 +67,10 @@ msgid "Residual"
msgstr "Остаток"
#. module: account
-#: code:addons/account/invoice.py:785
+#: code:addons/account/invoice.py:793
#, python-format
msgid "Please define sequence on invoice journal"
-msgstr "Пожалуйста, определите последовательность в журнале счетов"
+msgstr "Пожалуйста, определите нумерацию в журнале счетов"
#. module: account
#: constraint:account.period:0
@@ -85,12 +85,12 @@ msgstr "Валюта счета"
#. module: account
#: view:account.tax:0
msgid "Children Definition"
-msgstr ""
+msgstr "Определение наследников"
#. module: account
#: model:ir.model,name:account.model_report_aged_receivable
msgid "Aged Receivable Till Today"
-msgstr ""
+msgstr "Просроченная задолженность на сегодня"
#. module: account
#: field:account.partner.ledger,reconcil:0
@@ -127,6 +127,8 @@ msgid ""
"If you unreconciliate transactions, you must also verify all the actions "
"that are linked to those transactions because they will not be disabled"
msgstr ""
+"Если вы отмените сверку транзакций, то вы должны проверить все действия, "
+"связанные с этими транзакциями так, как они не будут отключены"
#. module: account
#: report:account.tax.code.entries:0
@@ -134,10 +136,10 @@ msgid "Accounting Entries-"
msgstr "Бухгалтерские проводки-"
#. module: account
-#: code:addons/account/account.py:1291
+#: code:addons/account/account.py:1305
#, python-format
msgid "You can not delete posted movement: \"%s\"!"
-msgstr "Нельзя удалить проведенное перемещение: \"%s\"!"
+msgstr "Нельзя удалить проведенную операцию: \"%s\"!"
#. module: account
#: report:account.invoice:0
@@ -176,11 +178,11 @@ msgid ""
"If the active field is set to False, it will allow you to hide the payment "
"term without removing it."
msgstr ""
-"Если поле 'Активно' имеет значение Ложь, вы сможете скрыть срок оплаты, не "
-"удаляя его."
+"Если поле \"Активно\" имеет значение Ложь, вы сможете скрыть условие оплаты, "
+"не удаляя его."
#. module: account
-#: code:addons/account/invoice.py:1421
+#: code:addons/account/invoice.py:1436
#, python-format
msgid "Warning!"
msgstr "Предупреждение!"
@@ -219,6 +221,8 @@ msgid ""
"invoice) to create analytic entries, OpenERP will look for a matching "
"journal of the same type."
msgstr ""
+"Дает тип журнала аналитики. Когда для документа (для счета) надо создать "
+"проводки аналитики, OpenERP будет искать подходящий журнал такого типа."
#. module: account
#: model:ir.actions.act_window,name:account.action_account_tax_template_form
@@ -232,7 +236,7 @@ msgid "account.tax"
msgstr "account.tax"
#. module: account
-#: code:addons/account/account.py:901
+#: code:addons/account/account.py:915
#, python-format
msgid ""
"No period defined for this date: %s !\n"
@@ -244,7 +248,7 @@ msgstr ""
#. module: account
#: model:ir.model,name:account.model_account_move_line_reconcile_select
msgid "Move line reconcile select"
-msgstr "Выбор сверки действия"
+msgstr "Выбор сверки операций"
#. module: account
#: help:account.model.line,sequence:0
@@ -252,8 +256,7 @@ msgid ""
"The sequence field is used to order the resources from lower sequences to "
"higher ones"
msgstr ""
-"Поле \"последовательность\" используется для сортировки. От младшего к "
-"старшему."
+"Поле \"нумерация\" используется для сортировки. От младшего к старшему."
#. module: account
#: help:account.tax.code,notprintable:0
@@ -266,7 +269,7 @@ msgstr ""
"налога появился в счетах-фактурах"
#. module: account
-#: code:addons/account/invoice.py:1210
+#: code:addons/account/invoice.py:1224
#, python-format
msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)"
msgstr "Счет '%s' оплачивается частично: %s%s из %s%s (%s%s остаток)"
@@ -282,7 +285,7 @@ msgid "Belgian Reports"
msgstr "Бельгийские отчеты"
#. module: account
-#: code:addons/account/account_move_line.py:1176
+#: code:addons/account/account_move_line.py:1182
#, python-format
msgid "You can not add/modify entries in a closed journal."
msgstr "В не можете добавить/исправить проводки в закрытом журнале"
@@ -320,7 +323,7 @@ msgid "St."
msgstr "ул."
#. module: account
-#: code:addons/account/invoice.py:529
+#: code:addons/account/invoice.py:532
#, python-format
msgid "Invoice line account company does not match with invoice company."
msgstr ""
@@ -336,8 +339,8 @@ msgid ""
"Installs localized accounting charts to match as closely as possible the "
"accounting needs of your company based on your country."
msgstr ""
-"Устанавливает локализованный план счетов, чтобы соответствовать как можно "
-"ближе потребностям учета вашей компании на основе учета в вашей стране."
+"Устанавливает локализованный план счетов для наибольшего соответствия "
+"потребностям учёта в вашей организации для вашей страны."
#. module: account
#: code:addons/account/wizard/account_move_journal.py:63
@@ -348,6 +351,10 @@ msgid ""
"You can create one in the menu: \n"
"Configuration/Financial Accounting/Accounts/Journals."
msgstr ""
+"Не найден журнал счета типа %s для этой компании.\n"
+"\n"
+"Вы можете создать его в меню:\n"
+"Настройки/Финансы и бухгалтерия/Журналы"
#. module: account
#: model:ir.model,name:account.model_account_unreconcile
@@ -524,7 +531,7 @@ msgstr "Подтвердить выбранные счета"
#. module: account
#: field:account.addtmpl.wizard,cparent_id:0
msgid "Parent target"
-msgstr ""
+msgstr "Родительская цель"
#. module: account
#: field:account.bank.statement,account_id:0
@@ -571,7 +578,7 @@ msgid "Not reconciled transactions"
msgstr "Не сверенные транзакции"
#. module: account
-#: code:addons/account/account_cash_statement.py:348
+#: code:addons/account/account_cash_statement.py:349
#, python-format
msgid "CashBox Balance is not matching with Calculated Balance !"
msgstr "Баланс кассы не совпадает с рассчитанным балансом !"
@@ -647,7 +654,7 @@ msgstr "Централизованный журнал"
#. module: account
#: sql_constraint:account.sequence.fiscalyear:0
msgid "Main Sequence must be different from current !"
-msgstr ""
+msgstr "Основная нумерация должна отличаться от текущей!"
#. module: account
#: field:account.invoice.tax,tax_amount:0
@@ -655,7 +662,7 @@ msgid "Tax Code Amount"
msgstr ""
#. module: account
-#: code:addons/account/account.py:2779
+#: code:addons/account/account.py:2823
#: code:addons/account/installer.py:434
#, python-format
msgid "SAJ"
@@ -688,11 +695,12 @@ msgid "Journal Period"
msgstr "Период журнала"
#. module: account
-#: code:addons/account/account_move_line.py:732
-#: code:addons/account/account_move_line.py:776
+#: code:addons/account/account_move_line.py:723
+#: code:addons/account/account_move_line.py:767
#, python-format
msgid "To reconcile the entries company should be the same for all entries"
-msgstr "Для сверки проводок компания должна быть одна во всех проводках."
+msgstr ""
+"Для проведения сверки, организация в проводках не должна различаться."
#. module: account
#: view:account.account:0
@@ -729,7 +737,7 @@ msgstr "Проверка"
#. module: account
#: field:account.partner.reconcile.process,today_reconciled:0
msgid "Partners Reconciled Today"
-msgstr "Партнеры сверенные сегодня"
+msgstr "Контрагенты сверенные сегодня"
#. module: account
#: selection:account.payment.term.line,value:0
@@ -750,7 +758,7 @@ msgid "Analytic Entries by line"
msgstr "Аналитические проводки по строкам"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:39
+#: code:addons/account/wizard/account_change_currency.py:38
#, python-format
msgid "You can only change currency for Draft Invoice !"
msgstr "Вы можете изменить валюту только в черновике счета !"
@@ -805,7 +813,7 @@ msgstr "Вычисление срока"
#. module: account
#: report:account.analytic.account.quantity_cost_ledger:0
msgid "J.C./Move name"
-msgstr ""
+msgstr "Код журн./Операция"
#. module: account
#: selection:account.entries.report,month:0
@@ -834,6 +842,8 @@ msgid ""
"Can not %s invoice which is already reconciled, invoice should be "
"unreconciled first. You can only Refund this invoice"
msgstr ""
+"Нельзя \"%s\" счет, который уже сверен, сначала надо отменить сверку. Вы "
+"можете только вернуть счет."
#. module: account
#: model:ir.actions.act_window,name:account.action_subscription_form_new
@@ -848,10 +858,10 @@ msgstr "Вычисления"
#. module: account
#: view:account.move.line:0
msgid "Next Partner to reconcile"
-msgstr "Следующий партнер для сверки"
+msgstr "Следующий контрагент для сверки"
#. module: account
-#: code:addons/account/account_move_line.py:1191
+#: code:addons/account/account_move_line.py:1197
#, python-format
msgid ""
"You can not do this modification on a confirmed entry ! Please note that you "
@@ -937,7 +947,7 @@ msgstr "Выписка банка"
#. module: account
#: field:account.analytic.line,move_id:0
msgid "Move Line"
-msgstr "Действие"
+msgstr "Операция"
#. module: account
#: help:account.move.line,tax_amount:0
@@ -975,11 +985,11 @@ msgid "Code"
msgstr "Код"
#. module: account
-#: code:addons/account/account.py:2083
+#: code:addons/account/account.py:2097
#: code:addons/account/account_bank_statement.py:350
-#: code:addons/account/account_move_line.py:170
+#: code:addons/account/account_move_line.py:169
#: code:addons/account/invoice.py:73
-#: code:addons/account/invoice.py:670
+#: code:addons/account/invoice.py:678
#: code:addons/account/wizard/account_use_model.py:81
#, python-format
msgid "No Analytic Journal !"
@@ -1003,7 +1013,7 @@ msgstr "Название счета."
#: field:account.chart.template,property_reserve_and_surplus_account:0
#: field:res.company,property_reserve_and_surplus_account:0
msgid "Reserve and Profit/Loss Account"
-msgstr ""
+msgstr "Счет резервов и прибылей/убытков"
#. module: account
#: field:report.account.receivable,name:0
@@ -1040,7 +1050,7 @@ msgstr ""
#. module: account
#: view:account.tax:0
msgid "Applicability Options"
-msgstr ""
+msgstr "Опции применимости"
#. module: account
#: report:account.partner.balance:0
@@ -1060,7 +1070,6 @@ msgstr "Прибыль и убыток (счета расходов)"
#. module: account
#: report:account.analytic.account.journal:0
-#: report:account.move.voucher:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
msgid "-"
@@ -1095,7 +1104,7 @@ msgstr "Подтвердить документ"
#: field:account.fiscal.position.tax,tax_dest_id:0
#: field:account.fiscal.position.tax.template,tax_dest_id:0
msgid "Replacement Tax"
-msgstr ""
+msgstr "Замещающий налог"
#. module: account
#: selection:account.move.line,centralisation:0
@@ -1110,6 +1119,11 @@ msgid ""
"purchase orders or receipts. This way, you can control the invoice from your "
"supplier according to what you purchased or received."
msgstr ""
+"\"Счета поставщиков\" позволяют вам управлять счетами выставленными вашими "
+"поставщиками. OpenERP может генерировать черновики счетов автоматически из "
+"заказов на закупку или прихода товара. В таком случае вы можете "
+"контролировать соответствие счета, полученного от поставщика, закупленному "
+"или полученному."
#. module: account
#: view:account.invoice.cancel:0
@@ -1132,12 +1146,12 @@ msgstr "Код налога"
#. module: account
#: field:account.account,currency_mode:0
msgid "Outgoing Currencies Rate"
-msgstr ""
+msgstr "Исходящий курс валют"
#. module: account
#: help:account.move.line,move_id:0
msgid "The move of this entry line."
-msgstr "Перемещение этой проводки."
+msgstr "Операция этой проводки"
#. module: account
#: field:account.move.line.reconcile,trans_nbr:0
@@ -1146,6 +1160,7 @@ msgstr "# транзакции"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
@@ -1153,7 +1168,7 @@ msgid "Entry Label"
msgstr "Метка проводки"
#. module: account
-#: code:addons/account/account.py:976
+#: code:addons/account/account.py:990
#, python-format
msgid "You can not modify/delete a journal with entries for this period !"
msgstr "Вы не можете изменить/удалить журнал с записями за этот период !"
@@ -1291,7 +1306,6 @@ msgid "Journal Items Analysis"
msgstr "Анализ элементов журнала"
#. module: account
-#: model:ir.actions.act_window,name:account.action_partner_all
#: model:ir.ui.menu,name:account.next_id_22
msgid "Partners"
msgstr "Контрагенты"
@@ -1321,7 +1335,7 @@ msgid "Central Journal"
msgstr "Центральный журнал"
#. module: account
-#: code:addons/account/account_move_line.py:1271
+#: code:addons/account/account_move_line.py:1277
#, python-format
msgid "You can not use this general account in this journal !"
msgstr "Вы не можете использовать этот общий счет в этом журнале!"
@@ -1416,15 +1430,18 @@ msgstr "Возвраты поставщику"
msgid ""
"Example: at 14 net days 2 percents, remaining amount at 30 days end of month."
msgstr ""
+"Пример: 2 процента через 14 дней, остаток через 30 дней после конца месяца."
#. module: account
-#: code:addons/account/invoice.py:815
+#: code:addons/account/invoice.py:823
#, python-format
msgid ""
"Cannot create the invoice !\n"
"The payment term defined gives a computed amount greater than the total "
"invoiced amount."
msgstr ""
+"Невозможно создать счет!\n"
+"Сумма, рассчитанная по условию оплаты больше чем итоговая сумма счета."
#. module: account
#: field:account.installer.modules,account_anglo_saxon:0
@@ -1440,7 +1457,7 @@ msgstr "Англосаксонский бухгалтерский учет"
#: selection:account.fiscalyear,state:0
#: selection:account.period,state:0
msgid "Closed"
-msgstr "Закрыто"
+msgstr "Закрыт"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_recurrent_entries
@@ -1455,7 +1472,7 @@ msgstr "Шаблон для системы налогообложения"
#. module: account
#: model:account.tax.code,name:account.account_tax_code_0
msgid "Tax Code Test"
-msgstr ""
+msgstr "Проверка налогового кода"
#. module: account
#: field:account.automatic.reconcile,reconciled:0
@@ -1534,6 +1551,11 @@ msgid ""
"the Payment column of a line, you can press F1 to open the reconciliation "
"form."
msgstr ""
+"Банковская выписка является отражением всех финансовых операций, прошедших в "
+"течение определенного периода по банковскому счету, кредитной карте или "
+"любому другому виду финансового счета. Начальный баланс будет предложен "
+"автоматически, а конечное сальдо должно быть в выписке. Когда вы находитесь "
+"в столбце Оплата, вы можете нажать F1, чтобы открыть форму сверки."
#. module: account
#: report:account.analytic.account.cost_ledger:0
@@ -1576,10 +1598,9 @@ msgstr "Последовательность финансовых лет"
#. module: account
#: field:wizard.multi.charts.accounts,seq_journal:0
msgid "Separated Journal Sequences"
-msgstr "Отдельные последовательности журнала"
+msgstr "Раздельные нумерации журнала"
#. module: account
-#: field:account.bank.statement,user_id:0
#: view:account.invoice:0
msgid "Responsible"
msgstr "Ответственный"
@@ -1627,7 +1648,7 @@ msgstr "Годовая сумма"
#. module: account
#: model:ir.actions.report.xml,name:account.report_account_voucher_new
msgid "Print Voucher"
-msgstr ""
+msgstr "Печать ваучера"
#. module: account
#: view:account.change.currency:0
@@ -1641,7 +1662,7 @@ msgid ""
"Have a complete tree view of all journal items per account code by clicking "
"on an account."
msgstr ""
-"Отображение плана счетов вашей компании на финансовый год с фильтром по "
+"Отображение плана счетов вашей организации на финансовый год с фильтром по "
"периодам. Отображается как древовидная структура всех элементов журнала по "
"коду счета при нажатии на счет."
@@ -1651,7 +1672,7 @@ msgid "Error! You cannot define overlapping fiscal years"
msgstr "Ошибка! Вы не можете определить перекрывающиеся отчетные года"
#. module: account
-#: code:addons/account/account_move_line.py:808
+#: code:addons/account/account_move_line.py:799
#, python-format
msgid "The account is not defined to be reconciled !"
msgstr "Счет не определен для сверки !"
@@ -1678,7 +1699,7 @@ msgstr "Дебет по поставщику"
#. module: account
#: help:account.model.line,quantity:0
msgid "The optional quantity on entries"
-msgstr ""
+msgstr "Необязательное количество проводок"
#. module: account
#: model:ir.actions.act_window,name:account.act_account_partner_account_move_all
@@ -1686,7 +1707,7 @@ msgid "Receivables & Payables"
msgstr "Дебиторы и кредиторы"
#. module: account
-#: code:addons/account/account_move_line.py:815
+#: code:addons/account/account_move_line.py:806
#, python-format
msgid "You have to provide an account for the write off entry !"
msgstr "Вы должны указать счет для проводки списания!"
@@ -1722,7 +1743,7 @@ msgid "Customer Ref:"
msgstr "Ссылка на клиента:"
#. module: account
-#: code:addons/account/account_cash_statement.py:328
+#: code:addons/account/account_cash_statement.py:329
#, python-format
msgid "User %s does not have rights to access %s journal !"
msgstr "Пользователь %s не имеет прав доступа к журналу %s !"
@@ -1743,10 +1764,10 @@ msgid "Tax Declaration: Credit Notes"
msgstr ""
#. module: account
-#: code:addons/account/account.py:499
+#: code:addons/account/account.py:509
#, python-format
msgid "You cannot deactivate an account that contains account moves."
-msgstr "Вы не можете отключить счет, по которому есть движение."
+msgstr "Вы не можете отключить счет, по которому есть операции."
#. module: account
#: field:account.move.line.reconcile,credit:0
@@ -1756,10 +1777,10 @@ msgstr "Сумма кредита"
#. module: account
#: constraint:account.move.line:0
msgid "You can not create move line on closed account."
-msgstr "Нельзя сделать действие по закрытому счету."
+msgstr "Нельзя сделать операцию по закрытому счету."
#. module: account
-#: code:addons/account/account.py:519
+#: code:addons/account/account.py:529
#, python-format
msgid ""
"You cannot change the type of account from 'Closed' to any other type which "
@@ -1771,7 +1792,7 @@ msgstr ""
#. module: account
#: view:res.company:0
msgid "Reserve And Profit/Loss Account"
-msgstr ""
+msgstr "Счет резервов и прибылей/убытков"
#. module: account
#: sql_constraint:account.move.line:0
@@ -1788,7 +1809,7 @@ msgstr "Анализ счетов"
#. module: account
#: model:ir.model,name:account.model_account_period_close
msgid "period close"
-msgstr ""
+msgstr "закрытие периода"
#. module: account
#: view:account.installer:0
@@ -1829,7 +1850,7 @@ msgstr "Финансовый анализ"
#. module: account
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
-msgstr "Ошибка! Вы не можете создавать рекурсивные компании."
+msgstr "Ошибка ! Нельзя создать организации рекурсивно."
#. module: account
#: view:account.analytic.account:0
@@ -1902,7 +1923,8 @@ msgid ""
"It adds the currency column if the currency is different then the company "
"currency"
msgstr ""
-"Добавляет столбец валюты , если валюта отличается, от валюты компании."
+"Добавляет столбец валюты. Если валюта отличается — указывается валюта "
+"организации"
#. module: account
#: help:account.journal,allow_date:0
@@ -1952,6 +1974,9 @@ msgid ""
"be with same name as statement name. This allows the statement entries to "
"have the same references than the statement itself"
msgstr ""
+"Если вы вводите название отличное от \"/\", то созданные операции проводок "
+"будут иметь названия как у документа. Это позволяет проводкам в документе "
+"иметь названия как и у самого документа"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_unreconcile
@@ -2039,7 +2064,7 @@ msgid " Journal"
msgstr " журнал"
#. module: account
-#: code:addons/account/account.py:1319
+#: code:addons/account/account.py:1333
#, python-format
msgid ""
"There is no default default debit account defined \n"
@@ -2059,6 +2084,10 @@ msgid ""
"partners accounts (for debit/credit computations), closed for depreciated "
"accounts."
msgstr ""
+"Этот тип используется, чтобы различать типы со специальными эффектами в "
+"OpenERP: вид - не может иметь проводок, объединение - счета которые могут "
+"иметь субсчета для консолидации нескольких компаний, кредитовые/дебетовые - "
+"для контрагентов (вычисление задолженностей), закрыт - для ненужных счетов."
#. module: account
#: view:account.chart.template:0
@@ -2096,7 +2125,7 @@ msgid "Description"
msgstr "Описание"
#. module: account
-#: code:addons/account/account.py:2844
+#: code:addons/account/account.py:2888
#: code:addons/account/installer.py:498
#, python-format
msgid "ECNJ"
@@ -2116,7 +2145,7 @@ msgid "Income Account"
msgstr "Cчёт доходов и расходов"
#. module: account
-#: code:addons/account/invoice.py:352
+#: code:addons/account/invoice.py:351
#, python-format
msgid "There is no Accounting Journal of type Sale/Purchase defined!"
msgstr "Не определен журнал покупок / продаж."
@@ -2127,6 +2156,7 @@ msgid "Accounting Properties"
msgstr "Установки бухгалтерии"
#. module: account
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.print.journal,sort_selection:0
msgid "Entries Sorted By"
@@ -2155,6 +2185,7 @@ msgstr "Шаблон продукта"
#: field:account.fiscalyear,name:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.journal.period,fiscalyear_id:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -2206,7 +2237,7 @@ msgstr "Основная Последовательность"
#: model:ir.model,name:account.model_account_payment_term
#: field:res.partner,property_payment_term:0
msgid "Payment Term"
-msgstr "Условия оплаты"
+msgstr "Условие оплаты"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_fiscal_position_form
@@ -2264,7 +2295,7 @@ msgid "Account Tax Code"
msgstr "Код налогового счёта"
#. module: account
-#: code:addons/account/invoice.py:545
+#: code:addons/account/invoice.py:552
#, python-format
msgid ""
"Can't find any account journal of %s type for this company.\n"
@@ -2272,6 +2303,10 @@ msgid ""
"You can create one in the menu: \n"
"Configuration\\Financial Accounting\\Accounts\\Journals."
msgstr ""
+"Для этой компании не найден журнал типа %s.\n"
+"\n"
+"Вы можете создать его в меню:\n"
+"Настройка\\Финансы и бухгалтерия\\Счета\\Журналы."
#. module: account
#: field:account.invoice.tax,base_code_id:0
@@ -2326,7 +2361,7 @@ msgstr "День"
#. module: account
#: model:ir.actions.act_window,name:account.act_account_renew_view
msgid "Accounts to Renew"
-msgstr ""
+msgstr "Счета для обновления"
#. module: account
#: model:ir.model,name:account.model_account_model_line
@@ -2334,11 +2369,11 @@ msgid "Account Model Entries"
msgstr "Проводки модели счета"
#. module: account
-#: code:addons/account/account.py:2796
+#: code:addons/account/account.py:2840
#: code:addons/account/installer.py:454
#, python-format
msgid "EXJ"
-msgstr ""
+msgstr "ЖР"
#. module: account
#: field:product.template,supplier_taxes_id:0
@@ -2354,11 +2389,10 @@ msgid ""
"date empty, it means direct payment. The payment term may compute several "
"due dates, for example 50% now, 50% in one month."
msgstr ""
-"При использовании условий платежа, дата валютирования будет сгенерирована "
-"автоматически при создании проводок. Если вы оставляете условия платежа и "
-"дату валютирования незаполненными - это будет подразумевать прямой платеж. "
-"Условия платежа могут включать в себя несколько дат валютирования, например "
-"50% сегодня, 50% в следующем месяце."
+"При использовании условий оплаты, срок будет вычислен автоматически при "
+"создании проводок. Если вы оставляете условие оплаты и срок незаполненными - "
+"это будет подразумевать прямой платеж. Условие оплаты может включать в себя "
+"несколько сроков, например 50% сразу, 50% в этом месяце."
#. module: account
#: view:account.analytic.cost.ledger.journal.report:0
@@ -2373,7 +2407,7 @@ msgstr "Выписки"
#. module: account
#: report:account.analytic.account.journal:0
msgid "Move Name"
-msgstr "Имя перемещения"
+msgstr "Название операции"
#. module: account
#: help:res.partner,property_account_position:0
@@ -2425,7 +2459,7 @@ msgid "Accounts"
msgstr "Счета"
#. module: account
-#: code:addons/account/invoice.py:351
+#: code:addons/account/invoice.py:350
#, python-format
msgid "Configuration Error!"
msgstr "Ошибка конфигурации!"
@@ -2437,20 +2471,19 @@ msgid "Average Price"
msgstr "Средняя цена"
#. module: account
-#: report:account.move.voucher:0
#: report:account.overdue:0
msgid "Date:"
msgstr "Дата:"
#. module: account
-#: code:addons/account/account.py:640
+#: code:addons/account/account.py:654
#, python-format
msgid ""
"You cannot modify company of this journal as its related record exist in "
"Entry Lines"
msgstr ""
-"Вы не можете изменить компанию этого журнала, так как существуют связанные с "
-"ним проводки."
+"Вы не можете изменять организацию, связанную с этим журналом, так как "
+"существуют связанные с ним проводки."
#. module: account
#: report:account.journal.period.print:0
@@ -2477,10 +2510,11 @@ msgstr "Сверка банковской выписки"
#. module: account
#: report:account.invoice:0
msgid "Disc.(%)"
-msgstr "Скид.(%)"
+msgstr "Скидка (%)"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.overdue:0
#: report:account.third_party_ledger:0
@@ -2549,7 +2583,7 @@ msgstr ""
#: model:ir.actions.act_window,name:account.action_account_aged_balance_view
#: model:ir.ui.menu,name:account.menu_aged_trial_balance
msgid "Aged Partner Balance"
-msgstr ""
+msgstr "Баланс партнера по периодам"
#. module: account
#: model:process.transition,name:account.process_transition_entriesreconcile0
@@ -2580,7 +2614,7 @@ msgstr ""
#: model:ir.actions.server,name:account.ir_actions_server_action_wizard_multi_chart
#: model:ir.ui.menu,name:account.menu_act_ir_actions_bleble
msgid "New Company Financial Setting"
-msgstr "Финансовые настройки новой компании"
+msgstr "Финансовые настройки новой организации"
#. module: account
#: model:ir.actions.act_window,name:account.action_report_account_sales_tree_all
@@ -2595,16 +2629,16 @@ msgid "This wizard will create recurring accounting entries"
msgstr "Этот мастер создаст повторяющиеся бухгалтерские проводки"
#. module: account
-#: code:addons/account/account.py:1181
+#: code:addons/account/account.py:1195
#, python-format
msgid "No sequence defined on the journal !"
msgstr "Нумерация в журнале не определена !"
#. module: account
-#: code:addons/account/account.py:2083
+#: code:addons/account/account.py:2097
#: code:addons/account/account_bank_statement.py:350
-#: code:addons/account/account_move_line.py:170
-#: code:addons/account/invoice.py:670
+#: code:addons/account/account_move_line.py:169
+#: code:addons/account/invoice.py:678
#: code:addons/account/wizard/account_use_model.py:81
#, python-format
msgid "You have to define an analytic journal on the '%s' journal!"
@@ -2677,11 +2711,14 @@ msgid ""
"The optional quantity expressed by this line, eg: number of product sold. "
"The quantity is not a legal requirement but is very useful for some reports."
msgstr ""
+"Необязательное количество отраженное в этой строке, например, количество "
+"проданных товаров. Количество не является обязательным, но оно очень полезно "
+"для некоторых отчетов."
#. module: account
#: view:account.payment.term.line:0
msgid "Line 2:"
-msgstr ""
+msgstr "Строка 2:"
#. module: account
#: field:account.journal.column,required:0
@@ -2710,7 +2747,7 @@ msgstr ""
#. module: account
#: field:account.invoice.tax,base_amount:0
msgid "Base Code Amount"
-msgstr ""
+msgstr "Сумма по основному коду"
#. module: account
#: field:wizard.multi.charts.accounts,sale_tax:0
@@ -2724,6 +2761,8 @@ msgid ""
"between the creation date or the creation date of the entries plus the "
"partner payment terms."
msgstr ""
+"Дата проведения созданных проводок для этой модели. Вы можете выбрать между "
+"датой создания и датой создания проводок плюс условия оплаты партнера."
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_accounting
@@ -2757,6 +2796,8 @@ msgid ""
"It adds initial balance row on report which display previous sum amount of "
"debit/credit/balance"
msgstr ""
+"Добавляет колонку начального баланса к отчету который выводит предыдущую "
+"сумму дебета/кредита/баланса."
#. module: account
#: view:account.analytic.line:0
@@ -2765,7 +2806,7 @@ msgid "Analytic Entries"
msgstr "Проводки аналитического учета"
#. module: account
-#: code:addons/account/account.py:822
+#: code:addons/account/account.py:836
#, python-format
msgid ""
"No fiscal year defined for this date !\n"
@@ -2897,7 +2938,7 @@ msgid "BNK%s"
msgstr "БНК%s"
#. module: account
-#: code:addons/account/account.py:2906
+#: code:addons/account/account.py:2950
#: code:addons/account/installer.py:296
#, python-format
msgid "BNK"
@@ -2921,12 +2962,12 @@ msgstr "Кредит контрагенту"
#. module: account
#: model:ir.model,name:account.model_account_tax_code_template
msgid "Tax Code Template"
-msgstr ""
+msgstr "Шаблон налогового кода"
#. module: account
#: view:account.subscription:0
msgid "Starts on"
-msgstr ""
+msgstr "Начинается с"
#. module: account
#: model:ir.model,name:account.model_account_partner_ledger
@@ -2948,7 +2989,7 @@ msgstr "Налоговая декларация"
#: help:account.account.template,currency_id:0
#: help:account.bank.accounts.wizard,currency_id:0
msgid "Forces all moves for this account to have this secondary currency."
-msgstr ""
+msgstr "Все операции по этому счету принудительно будут иметь вторую валюту."
#. module: account
#: model:ir.actions.act_window,help:account.action_validate_account_move_line
@@ -2956,6 +2997,8 @@ msgid ""
"This wizard will validate all journal entries of a particular journal and "
"period. Once journal entries are validated, you can not update them anymore."
msgstr ""
+"Этот мастер утверждает все проводки журнала для конкретного журнала и "
+"периода. После утверждения проводок вы не сможете их изменить."
#. module: account
#: model:ir.actions.act_window,name:account.action_account_chart_template_form
@@ -3006,6 +3049,7 @@ msgstr "Оставьте пустым для использования счет
#: field:account.common.report,journal_ids:0
#: report:account.general.journal:0
#: field:account.general.journal,journal_ids:0
+#: report:account.general.ledger_landscape:0
#: view:account.journal.period:0
#: report:account.partner.balance:0
#: field:account.partner.balance,journal_ids:0
@@ -3066,7 +3110,7 @@ msgid "Starting Balance"
msgstr "Начальный баланс"
#. module: account
-#: code:addons/account/invoice.py:1284
+#: code:addons/account/invoice.py:1298
#, python-format
msgid "No Partner Defined !"
msgstr "Партнер не определен!"
@@ -3094,6 +3138,7 @@ msgid ""
"The amount expressed in the related account currency if not equal to the "
"company one."
msgstr ""
+"Сумма выражена в валюте связанного счета, если не равна валюте компании."
#. module: account
#: report:account.move.voucher:0
@@ -3108,7 +3153,6 @@ msgstr "Журнал:"
#: view:account.invoice.report:0
#: selection:account.invoice.report,state:0
#: selection:account.journal.period,state:0
-#: report:account.move.voucher:0
#: view:account.subscription:0
#: selection:account.subscription,state:0
#: selection:report.invoice.created,state:0
@@ -3162,7 +3206,7 @@ msgstr ""
"больше не сможете изменять их бухгалтерские поля."
#. module: account
-#: code:addons/account/invoice.py:370
+#: code:addons/account/invoice.py:373
#, python-format
msgid "Cannot delete invoice(s) that are already opened or paid !"
msgstr "Нельзя удалить открытый или оплаченный счет !"
@@ -3180,7 +3224,7 @@ msgstr "Переводы"
#. module: account
#: view:account.payment.term.line:0
msgid " value amount: n.a"
-msgstr ""
+msgstr " значение суммы: неопределено"
#. module: account
#: view:account.chart:0
@@ -3200,7 +3244,7 @@ msgstr "Ваши банковские и денежные счета"
#. module: account
#: view:account.move:0
msgid "Search Move"
-msgstr "Искать проводку"
+msgstr "Искать операцию"
#. module: account
#: field:account.tax.code,name:0
@@ -3225,7 +3269,7 @@ msgstr ""
"состоянии \"Отменено\" или \"Сделано\" !"
#. module: account
-#: code:addons/account/account.py:522
+#: code:addons/account/account.py:532
#, python-format
msgid ""
"You cannot change the type of account from '%s' to '%s' type as it contains "
@@ -3235,6 +3279,7 @@ msgstr ""
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
msgid "Counterpart"
msgstr "Корреспондирующая сторона"
@@ -3340,6 +3385,7 @@ msgstr ""
#: field:account.entries.report,date:0
#: selection:account.general.journal,filter:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.invoice.report,date:0
#: report:account.journal.period.print:0
#: view:account.move:0
@@ -3383,22 +3429,24 @@ msgid "Chart of Accounts Template"
msgstr "Шаблон плана счетов"
#. module: account
-#: code:addons/account/account.py:2095
+#: code:addons/account/account.py:2109
#, python-format
msgid ""
"Maturity date of entry line generated by model line '%s' of model '%s' is "
"based on partner payment term!\n"
"Please define partner on it!"
msgstr ""
+"Дата исполнения проводки созданной строкой \"%s\" модели \"%s\" основана на "
+"условии оплаты контрагента."
#. module: account
-#: code:addons/account/account_move_line.py:810
+#: code:addons/account/account_move_line.py:801
#, python-format
msgid "Some entries are already reconciled !"
msgstr "Некоторые записи уже сверены!"
#. module: account
-#: code:addons/account/account.py:1204
+#: code:addons/account/account.py:1218
#, python-format
msgid ""
"You cannot validate a Journal Entry unless all journal items are in same "
@@ -3479,7 +3527,7 @@ msgstr "Судебный спор"
#. module: account
#: view:account.analytic.line:0
msgid "Search Analytic Lines"
-msgstr ""
+msgstr "Искать проводки аналитики"
#. module: account
#: field:res.partner,property_account_payable:0
@@ -3491,8 +3539,8 @@ msgstr "Счета к оплате"
msgid ""
"You cannot create entries on different periods/journals in the same move"
msgstr ""
-"Вы не можете создавать проводки по разным периодам / журналам в одном "
-"действии."
+"Вы не можете создавать проводки по разным периодам / журналам в одной "
+"операции."
#. module: account
#: model:process.node,name:account.process_node_supplierpaymentorder0
@@ -3523,7 +3571,7 @@ msgid "Analytic Items"
msgstr "Элементы аналитики"
#. module: account
-#: code:addons/account/account_move_line.py:1128
+#: code:addons/account/account_move_line.py:1134
#, python-format
msgid "Unable to change tax !"
msgstr "Невозможно изменить налог !"
@@ -3534,19 +3582,20 @@ msgid "#Entries"
msgstr "#Проводок"
#. module: account
-#: code:addons/account/invoice.py:1422
+#: code:addons/account/invoice.py:1437
#, python-format
msgid ""
"You selected an Unit of Measure which is not compatible with the product."
msgstr "Вы выбрали единицу измерения не совместимую с ТМЦ."
#. module: account
-#: code:addons/account/invoice.py:473
+#: code:addons/account/invoice.py:476
#, python-format
msgid ""
"The Payment Term of Supplier does not have Payment Term Lines(Computation) "
"defined !"
msgstr ""
+"Условие оплаты поставщика не содержит строк условий оплаты(расчетов)!"
#. module: account
#: view:account.state.open:0
@@ -3584,7 +3633,7 @@ msgstr ""
#. module: account
#: field:account.move.line,date:0
msgid "Effective date"
-msgstr "Действительно до"
+msgstr "Дата вступления в силу"
#. module: account
#: code:addons/account/wizard/account_move_bank_reconcile.py:53
@@ -3605,7 +3654,7 @@ msgstr "Журнал аналитических проводок"
#: view:product.template:0
#: view:res.partner:0
msgid "Accounting"
-msgstr "Бухгалтерия"
+msgstr "Учёт"
#. module: account
#: help:account.central.journal,amount_currency:0
@@ -3616,6 +3665,7 @@ msgid ""
"Print Report with the currency column if the currency is different then the "
"company currency"
msgstr ""
+"Печать отчета с колонкой валюты, если валюта отличается от валюты компании"
#. module: account
#: view:account.analytic.line:0
@@ -3669,6 +3719,8 @@ msgstr "Утвердить"
#: sql_constraint:account.model.line:0
msgid "Wrong credit or debit value in model (Credit Or Debit Must Be \"0\")!"
msgstr ""
+"В модели указано неверное значение прихода или расхода (Приход или Расход "
+"должен быть равен \"0\")!"
#. module: account
#: model:ir.actions.act_window,help:account.action_account_invoice_report_all
@@ -3807,6 +3859,8 @@ msgid ""
"This account will be used to value outgoing stock for the current product "
"category using sale price"
msgstr ""
+"Этот счет будет использоваться для стоимости исходящих ТМЦ для текущей "
+"категории ТМЦ продажной цене"
#. module: account
#: selection:account.automatic.reconcile,power:0
@@ -3819,6 +3873,8 @@ msgid ""
"Analytic costs (timesheets, some purchased products, ...) come from analytic "
"accounts. These generate draft supplier invoices."
msgstr ""
+"Анализ себестоимости (учет времени, некоторой закупаемой продукции, ...) "
+"берется из счетов аналитики. Генерирует черновик счетов поставщика."
#. module: account
#: view:account.bank.statement:0
@@ -3837,7 +3893,7 @@ msgid "Acc.Type"
msgstr "Тип счета"
#. module: account
-#: code:addons/account/invoice.py:714
+#: code:addons/account/invoice.py:722
#, python-format
msgid "Global taxes defined, but are not in invoice lines !"
msgstr ""
@@ -3883,7 +3939,7 @@ msgstr "Позиции налога"
#. module: account
#: field:account.tax,base_code_id:0
msgid "Account Base Code"
-msgstr ""
+msgstr "Основной код счёта"
#. module: account
#: help:account.move,state:0
@@ -3894,9 +3950,14 @@ msgid ""
"the system on document validation (invoices, bank statements...) and will be "
"created in 'Posted' state."
msgstr ""
+"Все созданные вручную новые проводки в журнале обычно в состоянии \"Не "
+"проведено\", но вы можете установить опцию для пропуска этого состояния в "
+"журнале. Проводки в этом случае, как и создаваемые системой при обработке "
+"документов (счетов, банковских выписок, ...), будут создаваться со статусом "
+"\"Проведено\"."
#. module: account
-#: code:addons/account/account_analytic_line.py:91
+#: code:addons/account/account_analytic_line.py:90
#, python-format
msgid "There is no expense account defined for this product: \"%s\" (id:%d)"
msgstr "Счет расходов не определен для этого товара: \"%s\" (id:%d)"
@@ -3949,7 +4010,7 @@ msgstr "Ошибка ! Неверная продолжительность фи
#. module: account
#: field:report.aged.receivable,name:0
msgid "Month Range"
-msgstr ""
+msgstr "Месячный период"
#. module: account
#: help:account.analytic.balance,empty_acc:0
@@ -3983,7 +4044,7 @@ msgid ""
"When new move line is created the state will be 'Draft'.\n"
"* When all the payments are done it will be in 'Valid' state."
msgstr ""
-"Когда новое перемещение создается, его состояние 'Черновик'.\n"
+"Когда новая операция создается, ее состояние 'Черновик'.\n"
"* Когда все платежи произведены состояние будет 'Проведено'."
#. module: account
@@ -3994,7 +4055,7 @@ msgstr "Режим вывода"
#. module: account
#: model:process.node,note:account.process_node_importinvoice0
msgid "Statement from invoice or payment"
-msgstr ""
+msgstr "Документ из счета или платежа"
#. module: account
#: view:account.payment.term.line:0
@@ -4032,7 +4093,7 @@ msgstr "Банковские выписки введены в систему."
#: code:addons/account/wizard/account_reconcile.py:133
#, python-format
msgid "Reconcile Writeoff"
-msgstr ""
+msgstr "Сверить списание"
#. module: account
#: field:account.model.line,date_maturity:0
@@ -4070,10 +4131,10 @@ msgstr "Печать счета"
#. module: account
#: view:account.tax.template:0
msgid "Credit Notes"
-msgstr ""
+msgstr "Кредит-ноты"
#. module: account
-#: code:addons/account/account.py:2067
+#: code:addons/account/account.py:2081
#: code:addons/account/wizard/account_use_model.py:69
#, python-format
msgid "Unable to find a valid period !"
@@ -4146,11 +4207,11 @@ msgid "Change"
msgstr "Изменить"
#. module: account
-#: code:addons/account/account.py:1290
-#: code:addons/account/account.py:1318
-#: code:addons/account/account.py:1325
-#: code:addons/account/account_move_line.py:1055
-#: code:addons/account/invoice.py:896
+#: code:addons/account/account.py:1304
+#: code:addons/account/account.py:1332
+#: code:addons/account/account.py:1339
+#: code:addons/account/account_move_line.py:1061
+#: code:addons/account/invoice.py:904
#: code:addons/account/wizard/account_automatic_reconcile.py:152
#: code:addons/account/wizard/account_fiscalyear_close.py:78
#: code:addons/account/wizard/account_fiscalyear_close.py:81
@@ -4164,7 +4225,7 @@ msgstr "UserError"
#. module: account
#: field:account.journal,type_control_ids:0
msgid "Type Controls"
-msgstr ""
+msgstr "Контроль типа"
#. module: account
#: help:account.journal,default_credit_account_id:0
@@ -4221,14 +4282,14 @@ msgstr "Генерировать проводки"
#. module: account
#: help:account.vat.declaration,chart_tax_id:0
msgid "Select Charts of Taxes"
-msgstr ""
+msgstr "Выбрать налоговые планы счетов"
#. module: account
#: view:account.fiscal.position:0
#: field:account.fiscal.position,account_ids:0
#: field:account.fiscal.position.template,account_ids:0
msgid "Account Mapping"
-msgstr ""
+msgstr "Отображение счета"
#. module: account
#: selection:account.bank.statement.line,type:0
@@ -4256,13 +4317,16 @@ msgid "You must define an analytic journal of type '%s' !"
msgstr "Вы должны определить журнал аналитики типа '%s' !"
#. module: account
-#: code:addons/account/account.py:1397
+#: code:addons/account/account.py:1411
#, python-format
msgid ""
"Couldn't create move with currency different from the secondary currency of "
"the account \"%s - %s\". Clear the secondary currency field of the account "
"definition if you want to accept all currencies."
msgstr ""
+"Нельзя сделать операцию по счету с валютой отличной от второй валюты счета "
+"\"%s - %s\". Очистите поле ввода второй валюты в форме ввода счета, если "
+"желаете использовать все валюты."
#. module: account
#: field:account.invoice.refund,date:0
@@ -4323,7 +4387,7 @@ msgid "Invoices"
msgstr "Счета"
#. module: account
-#: code:addons/account/invoice.py:804
+#: code:addons/account/invoice.py:812
#, python-format
msgid ""
"Please verify the price of the invoice !\n"
@@ -4434,28 +4498,27 @@ msgstr "Баланс (счета активов)"
#. module: account
#: report:account.tax.code.entries:0
msgid "Third Party (Country)"
-msgstr ""
+msgstr "Третье лицо (Страна)"
#. module: account
-#: code:addons/account/account.py:938
-#: code:addons/account/account.py:940
-#: code:addons/account/account.py:1181
-#: code:addons/account/account.py:1393
-#: code:addons/account/account.py:1397
-#: code:addons/account/account_cash_statement.py:249
-#: code:addons/account/account_move_line.py:780
-#: code:addons/account/account_move_line.py:803
-#: code:addons/account/account_move_line.py:805
-#: code:addons/account/account_move_line.py:808
-#: code:addons/account/account_move_line.py:810
-#: code:addons/account/account_move_line.py:1117
+#: code:addons/account/account.py:952
+#: code:addons/account/account.py:954
+#: code:addons/account/account.py:1195
+#: code:addons/account/account.py:1407
+#: code:addons/account/account.py:1411
+#: code:addons/account/account_cash_statement.py:250
+#: code:addons/account/account_move_line.py:771
+#: code:addons/account/account_move_line.py:794
+#: code:addons/account/account_move_line.py:796
+#: code:addons/account/account_move_line.py:799
+#: code:addons/account/account_move_line.py:801
+#: code:addons/account/account_move_line.py:1123
#: code:addons/account/report/common_report_header.py:92
-#: code:addons/account/wizard/account_change_currency.py:39
-#: code:addons/account/wizard/account_change_currency.py:60
-#: code:addons/account/wizard/account_change_currency.py:65
-#: code:addons/account/wizard/account_change_currency.py:71
+#: code:addons/account/wizard/account_change_currency.py:38
+#: code:addons/account/wizard/account_change_currency.py:59
+#: code:addons/account/wizard/account_change_currency.py:64
+#: code:addons/account/wizard/account_change_currency.py:70
#: code:addons/account/wizard/account_move_bank_reconcile.py:49
-#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40
#: code:addons/account/wizard/account_report_common.py:120
#: code:addons/account/wizard/account_report_common.py:126
#, python-format
@@ -4477,7 +4540,7 @@ msgid "Bank Details"
msgstr "Банковская информация"
#. module: account
-#: code:addons/account/invoice.py:720
+#: code:addons/account/invoice.py:728
#, python-format
msgid "Taxes missing !"
msgstr "Налоги отсутствуют !"
@@ -4513,13 +4576,13 @@ msgstr "Закрыть"
#. module: account
#: field:account.bank.statement.line,move_ids:0
msgid "Moves"
-msgstr "Проводки"
+msgstr "Операции"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_vat_declaration
#: model:ir.model,name:account.model_account_vat_declaration
msgid "Account Vat Declaration"
-msgstr ""
+msgstr "Декларация НДС счета"
#. module: account
#: view:account.period:0
@@ -4529,10 +4592,10 @@ msgstr "Закрыть"
#. module: account
#: field:account.journal,allow_date:0
msgid "Check Date not in the Period"
-msgstr ""
+msgstr "Дата проверки не входит в период"
#. module: account
-#: code:addons/account/account.py:1210
+#: code:addons/account/account.py:1224
#, python-format
msgid ""
"You can not modify a posted entry of this journal !\n"
@@ -4554,7 +4617,7 @@ msgid "Child Tax Accounts"
msgstr ""
#. module: account
-#: code:addons/account/account.py:940
+#: code:addons/account/account.py:954
#, python-format
msgid "Start period should be smaller then End period"
msgstr "Начало периода должно быть меньше, чем конец периода"
@@ -4584,6 +4647,7 @@ msgstr "Остаток по аналитике"
#: report:account.general.journal:0
#: field:account.general.journal,target_move:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.move.journal,target_move:0
#: report:account.partner.balance:0
@@ -4597,7 +4661,7 @@ msgstr "Остаток по аналитике"
#: report:account.third_party_ledger_other:0
#: field:account.vat.declaration,target_move:0
msgid "Target Moves"
-msgstr "Цель перемещений"
+msgstr "Цель операции"
#. module: account
#: field:account.subscription,period_type:0
@@ -4625,7 +4689,7 @@ msgstr "Проводка"
#: field:account.tax,python_compute_inv:0
#: field:account.tax.template,python_compute_inv:0
msgid "Python Code (reverse)"
-msgstr ""
+msgstr "Код на Python (реверс)"
#. module: account
#: model:ir.actions.act_window,name:account.action_payment_term_form
@@ -4642,7 +4706,7 @@ msgstr "Название столбца"
#: view:account.general.journal:0
msgid ""
"This report gives you an overview of the situation of your general journals"
-msgstr ""
+msgstr "Этот доклад дает вам обзор ситуации по общим журналам"
#. module: account
#: field:account.entries.report,year:0
@@ -4663,10 +4727,10 @@ msgstr "Открытие кассы"
#. module: account
#: view:account.payment.term.line:0
msgid "Line 1:"
-msgstr ""
+msgstr "Строка 1:"
#. module: account
-#: code:addons/account/account.py:1167
+#: code:addons/account/account.py:1181
#, python-format
msgid "Integrity Error !"
msgstr "Ошибка целостности!"
@@ -4695,7 +4759,7 @@ msgstr "Описание счетов"
#. module: account
#: field:account.partner.reconcile.process,next_partner_id:0
msgid "Next Partner to Reconcile"
-msgstr "Следующий партнер для сверки"
+msgstr "Следующий контрагент для сверки"
#. module: account
#: field:account.invoice.tax,account_id:0
@@ -4811,10 +4875,11 @@ msgstr "Налог на детей"
#: constraint:account.move.line:0
msgid ""
"You can not create move line on receivable/payable account without partner"
-msgstr "Нельзя сделать действие по дебетовому/кредитовому счету без партнера"
+msgstr ""
+"Нельзя сделать действие по дебетовому/кредитовому счету без контрагента"
#. module: account
-#: code:addons/account/account.py:2067
+#: code:addons/account/account.py:2081
#: code:addons/account/wizard/account_use_model.py:69
#, python-format
msgid "No period found !"
@@ -4884,9 +4949,11 @@ msgid ""
"Number of days to add before computation of the day of month.If Date=15/01, "
"Number of Days=22, Day of Month=-1, then the due date is 28/02."
msgstr ""
+"Количество дней для добавления перед вычислением дня месяца. Если "
+"дата=15/01, количество дней=22, день месяца=-1, то срок 28/02."
#. module: account
-#: code:addons/account/account.py:2896
+#: code:addons/account/account.py:2940
#: code:addons/account/installer.py:283
#: code:addons/account/installer.py:295
#, python-format
@@ -4914,7 +4981,7 @@ msgid "Start of period"
msgstr "Начало периода"
#. module: account
-#: code:addons/account/account_move_line.py:1193
+#: code:addons/account/account_move_line.py:1199
#, python-format
msgid ""
"You can not do this modification on a reconciled entry ! Please note that "
@@ -4972,12 +5039,12 @@ msgstr "Журнал проводок конца года"
#. module: account
#: code:addons/account/account_bank_statement.py:331
-#: code:addons/account/invoice.py:405
-#: code:addons/account/invoice.py:505
-#: code:addons/account/invoice.py:520
-#: code:addons/account/invoice.py:528
-#: code:addons/account/invoice.py:545
-#: code:addons/account/invoice.py:1347
+#: code:addons/account/invoice.py:408
+#: code:addons/account/invoice.py:508
+#: code:addons/account/invoice.py:523
+#: code:addons/account/invoice.py:531
+#: code:addons/account/invoice.py:552
+#: code:addons/account/invoice.py:1361
#: code:addons/account/wizard/account_move_journal.py:63
#, python-format
msgid "Configuration Error !"
@@ -5054,7 +5121,7 @@ msgid "Sort By"
msgstr "Сортировать по"
#. module: account
-#: code:addons/account/account.py:1326
+#: code:addons/account/account.py:1340
#, python-format
msgid ""
"There is no default default credit account defined \n"
@@ -5066,7 +5133,7 @@ msgstr ""
#: field:account.model.line,amount_currency:0
#: field:account.move.line,amount_currency:0
msgid "Amount Currency"
-msgstr "Валюта суммы"
+msgstr "Сумма в валюте"
#. module: account
#: code:addons/account/wizard/account_validate_account_move.py:39
@@ -5100,7 +5167,7 @@ msgstr "Количество"
#. module: account
#: view:account.move.line:0
msgid "Number (Move)"
-msgstr "Номер (перемещение)"
+msgstr "Операция"
#. module: account
#: view:account.invoice.refund:0
@@ -5120,8 +5187,8 @@ msgid ""
"The sequence field is used to order the payment term lines from the lowest "
"sequences to the higher ones"
msgstr ""
-"Поле \"последовательность\" используется для упорядочения строк в платежном "
-"документе от наименьшего номера к наибольшему"
+"Поле \"последовательность\" используется для упорядочения строк в условии "
+"оплаты от наименьшего номера к наибольшему"
#. module: account
#: view:account.fiscal.position.template:0
@@ -5195,7 +5262,7 @@ msgstr "Элемент журнала"
#. module: account
#: model:ir.model,name:account.model_account_move_journal
msgid "Move journal"
-msgstr ""
+msgstr "Журнал операций"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_fiscalyear_close
@@ -5204,7 +5271,7 @@ msgid "Generate Opening Entries"
msgstr "Генерировать открывающие проводки"
#. module: account
-#: code:addons/account/account_move_line.py:738
+#: code:addons/account/account_move_line.py:729
#, python-format
msgid "Already Reconciled!"
msgstr "Уже сверено !"
@@ -5240,7 +5307,7 @@ msgstr "Подчиненный счет"
#. module: account
#: view:account.move.line.reconcile:0
-#: code:addons/account/account_move_line.py:830
+#: code:addons/account/account_move_line.py:821
#, python-format
msgid "Write-Off"
msgstr "Списание"
@@ -5314,7 +5381,7 @@ msgstr ""
#: model:ir.actions.act_window,name:account.action_account_state_open
#: model:ir.model,name:account.model_account_state_open
msgid "Account State Open"
-msgstr ""
+msgstr "Состояние счета открытый"
#. module: account
#: report:account.analytic.account.quantity_cost_ledger:0
@@ -5338,6 +5405,8 @@ msgid ""
"document shows your debit and credit taking in consideration some criteria "
"you can choose by using the search tool."
msgstr ""
+"Этот вид предназначен для анализа различных финансовых счетов. Документ "
+"показывает дебет и кредит в соответствии с выбранными критериями поиска."
#. module: account
#: model:ir.actions.act_window,help:account.action_tax_code_list
@@ -5353,6 +5422,9 @@ msgid ""
"Shows you the progress made today on the reconciliation process. Given by \n"
"Partners Reconciled Today \\ (Remaining Partners + Partners Reconciled Today)"
msgstr ""
+"Показывает прогресс, достигнутый сегодня по сверке. Определяется как\n"
+"Контрагенты сверенные сегодня / (Оставшиеся контрагенты + Контрагенты "
+"сверенные сегодня)"
#. module: account
#: help:account.payment.term.line,value:0
@@ -5361,6 +5433,9 @@ msgid ""
"that you should have your last line with the type 'Balance' to ensure that "
"the whole amount will be threated."
msgstr ""
+"Выберите вид расчета относящийся к этой строке условия оплаты. Отметим, что "
+"последняя строка должна быть с типом \"Баланс\" для проверки обработки всей "
+"суммы."
#. module: account
#: field:account.invoice,period_id:0
@@ -5377,7 +5452,7 @@ msgid "# of Lines"
msgstr "# строк"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:60
+#: code:addons/account/wizard/account_change_currency.py:59
#, python-format
msgid "New currency is not confirured properly !"
msgstr "Новая валюта неправильно настроена !"
@@ -5402,14 +5477,14 @@ msgid "Filter by"
msgstr "Фильтровать по"
#. module: account
-#: code:addons/account/account_move_line.py:1131
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1137
+#: code:addons/account/account_move_line.py:1220
#, python-format
msgid "You can not use an inactive account!"
msgstr "Нельзя использовать неактивный счет !"
#. module: account
-#: code:addons/account/account_move_line.py:803
+#: code:addons/account/account_move_line.py:794
#, python-format
msgid "Entries are not of the same account or already reconciled ! "
msgstr "Проводки не по одному счету и тому же счету или уже сверены! "
@@ -5444,7 +5519,7 @@ msgstr "7"
#. module: account
#: code:addons/account/account_bank_statement.py:391
-#: code:addons/account/invoice.py:370
+#: code:addons/account/invoice.py:373
#, python-format
msgid "Invalid action !"
msgstr "Invalid action !"
@@ -5513,7 +5588,7 @@ msgstr "не реализовано"
#. module: account
#: help:account.journal,company_id:0
msgid "Company related to this journal"
-msgstr "Компания связанная с этим журналом"
+msgstr "Организация, связанная с этим журналом"
#. module: account
#: code:addons/account/wizard/account_invoice_state.py:44
@@ -5561,6 +5636,10 @@ msgid ""
"line of the expense account. OpenERP will propose to you automatically the "
"Tax related to this account and the counterpart \"Account Payable\"."
msgstr ""
+"Здесь можно быстро вводить бухгалтерские проводки. Если вы хотите отразить "
+"счет-фактуру поставщика, начните с записи движения по счету расходов. "
+"OpenERP автоматически предложит вам налог, относящийся к этому счету и "
+"корреспондирующий счет \"Кредиторская задолженность\"."
#. module: account
#: field:account.entries.report,date_created:0
@@ -5578,6 +5657,7 @@ msgid ""
"The code will be used to generate the numbers of the journal entries of this "
"journal."
msgstr ""
+"Код будет использоваться для генерации номеров записей этого журнала."
#. module: account
#: view:account.invoice:0
@@ -5613,7 +5693,7 @@ msgstr "Дата последней сверки"
#. module: account
#: model:ir.model,name:account.model_account_analytic_line
msgid "Analytic Line"
-msgstr ""
+msgstr "Позиция аналитики"
#. module: account
#: field:product.template,taxes_id:0
@@ -5634,7 +5714,7 @@ msgstr "Настройка отчетов"
#. module: account
#: constraint:account.move.line:0
msgid "Company must be same for its related account and period."
-msgstr "Для счета и периода должна быть одна компания."
+msgstr "Для счета и периода должна быть одна организация."
#. module: account
#: field:account.tax,type:0
@@ -5646,25 +5726,27 @@ msgstr "Тип налога"
#: model:ir.actions.act_window,name:account.action_account_template_form
#: model:ir.ui.menu,name:account.menu_action_account_template_form
msgid "Account Templates"
-msgstr "Счет: Шаблоны"
+msgstr "Шаблоны счетов"
#. module: account
#: report:account.vat.declaration:0
msgid "Tax Statement"
-msgstr ""
+msgstr "Налоговая декларация"
#. module: account
#: model:ir.model,name:account.model_res_company
msgid "Companies"
-msgstr "Компании"
+msgstr "Организации"
#. module: account
-#: code:addons/account/account.py:532
+#: code:addons/account/account.py:546
#, python-format
msgid ""
"You cannot modify Company of account as its related record exist in Entry "
"Lines"
msgstr ""
+"Нельзя изменить компанию счета так, как связанные с ней записи существуют в "
+"проводках"
#. module: account
#: help:account.fiscalyear.close.state,fy_id:0
@@ -5789,7 +5871,7 @@ msgstr " количество дней: 30"
#. module: account
#: help:account.analytic.line,currency_id:0
msgid "The related account currency if not equal to the company one."
-msgstr ""
+msgstr "Валюта связанного счета, если не одинакова с валютой компании."
#. module: account
#: view:account.analytic.account:0
@@ -5819,7 +5901,7 @@ msgstr "Мощность"
#. module: account
#: field:account.invoice.refund,filter_refund:0
msgid "Refund Type"
-msgstr ""
+msgstr "Тип возмещения"
#. module: account
#: report:account.invoice:0
@@ -5878,6 +5960,9 @@ msgid ""
"higher ones. The order is important if you have a tax that has several tax "
"children. In this case, the evaluation order is important."
msgstr ""
+"Поле \"последовательность\" используется для упорядочивания позиций налогов "
+"от меньшего к большему. Последовательность важна при наличии субналогов . В "
+"таком случае важна последовательность вычислений."
#. module: account
#: selection:account.account,type:0
@@ -5899,6 +5984,10 @@ msgid ""
"year. Note that you can run this wizard many times for the same fiscal year: "
"it will simply replace the old opening entries with the new ones."
msgstr ""
+"Этот мастер генерирует проводки конца года в журнале для выбранного "
+"финансового года. Заметим, что вы можете запустить этот мастер много раз для "
+"того же финансового года: старые проводки открытия просто будут заменены на "
+"новые."
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_bank_and_cash
@@ -5913,25 +6002,29 @@ msgid ""
"the tool search to analyse information about analytic entries generated in "
"the system."
msgstr ""
+"Этот вид позволяет анализировать проводки аналитики в соответствии со счетом "
+"аналитики, который вы создали исходя из особенностей вашего бизнеса. "
+"Используйте поиск для анализа информации о проводках аналитики созданных в "
+"системе."
#. module: account
#: sql_constraint:account.journal:0
msgid "The name of the journal must be unique per company !"
-msgstr "Название журнала должно быть уникальным по компании !"
+msgstr "Название журнала должно быть уникальным внутри организации!"
#. module: account
#: field:account.account.template,nocreate:0
msgid "Optional create"
-msgstr ""
+msgstr "Создать дополнительно"
#. module: account
-#: code:addons/account/invoice.py:406
-#: code:addons/account/invoice.py:506
-#: code:addons/account/invoice.py:1348
+#: code:addons/account/invoice.py:409
+#: code:addons/account/invoice.py:509
+#: code:addons/account/invoice.py:1362
#, python-format
msgid "Can not find account chart for this company, Please Create account."
msgstr ""
-"Не удалось найти план счетов для компании. Пожалуйста, создайте счет."
+"Не удалось найти план счетов для организации. Пожалуйста, создайте счет."
#. module: account
#: code:addons/account/wizard/account_report_aged_partner_balance.py:57
@@ -6010,6 +6103,8 @@ msgid ""
"Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for "
"2% "
msgstr ""
+"Проценты для позиции условий оплаты должен быть между 0 и 1, например: 0,02 "
+"для 2% "
#. module: account
#: model:ir.model,name:account.model_account_sequence_fiscalyear
@@ -6077,8 +6172,8 @@ msgid "Analytic Entries Statistics"
msgstr "Статистика аналитических проводок"
#. module: account
-#: code:addons/account/account_analytic_line.py:143
-#: code:addons/account/account_move_line.py:905
+#: code:addons/account/account_analytic_line.py:141
+#: code:addons/account/account_move_line.py:897
#, python-format
msgid "Entries: "
msgstr "Проводки: "
@@ -6089,10 +6184,10 @@ msgid "Create manual recurring entries in a chosen journal."
msgstr "Создать вручную повторяющиеся проводки в выбранном журнале"
#. module: account
-#: code:addons/account/account.py:1393
+#: code:addons/account/account.py:1407
#, python-format
msgid "Couldn't create move between different companies"
-msgstr ""
+msgstr "Нельзя создать перемещение между разными организациями"
#. module: account
#: model:ir.actions.act_window,help:account.action_account_type_form
@@ -6129,7 +6224,7 @@ msgid "Total debit"
msgstr "Всего по дебету"
#. module: account
-#: code:addons/account/account_move_line.py:781
+#: code:addons/account/account_move_line.py:772
#, python-format
msgid "Entry \"%s\" is not valid !"
msgstr "Проводка \"%s\" не верна !"
@@ -6171,6 +6266,8 @@ msgstr "Код на Python"
msgid ""
"Please define the Reserve and Profit/Loss account for current user company !"
msgstr ""
+"Пожалуйста, определите счет резервов и прибылей/убытков для компании "
+"пользователя !"
#. module: account
#: help:account.journal,update_posted:0
@@ -6178,6 +6275,8 @@ msgid ""
"Check this box if you want to allow the cancellation the entries related to "
"this journal or of the invoice related to this journal"
msgstr ""
+"Отметьте, если вы хотите позволить отменять проводки связанные с этим "
+"журналом или счетом связанным с этим журналом"
#. module: account
#: view:account.fiscalyear.close:0
@@ -6195,30 +6294,31 @@ msgid " valuation: percent"
msgstr " оценка: процент"
#. module: account
-#: code:addons/account/account.py:499
-#: code:addons/account/account.py:501
-#: code:addons/account/account.py:822
-#: code:addons/account/account.py:901
-#: code:addons/account/account.py:976
-#: code:addons/account/account.py:1204
-#: code:addons/account/account.py:1210
-#: code:addons/account/account.py:2095
-#: code:addons/account/account.py:2333
-#: code:addons/account/account_analytic_line.py:90
-#: code:addons/account/account_analytic_line.py:99
+#: code:addons/account/account.py:509
+#: code:addons/account/account.py:511
+#: code:addons/account/account.py:836
+#: code:addons/account/account.py:915
+#: code:addons/account/account.py:990
+#: code:addons/account/account.py:1218
+#: code:addons/account/account.py:1224
+#: code:addons/account/account.py:2109
+#: code:addons/account/account.py:2357
+#: code:addons/account/account_analytic_line.py:89
+#: code:addons/account/account_analytic_line.py:98
#: code:addons/account/account_bank_statement.py:292
#: code:addons/account/account_bank_statement.py:305
#: code:addons/account/account_bank_statement.py:345
-#: code:addons/account/account_cash_statement.py:328
-#: code:addons/account/account_cash_statement.py:348
-#: code:addons/account/account_move_line.py:1176
-#: code:addons/account/account_move_line.py:1191
-#: code:addons/account/account_move_line.py:1193
-#: code:addons/account/invoice.py:785
-#: code:addons/account/invoice.py:815
-#: code:addons/account/invoice.py:1008
+#: code:addons/account/account_cash_statement.py:329
+#: code:addons/account/account_cash_statement.py:349
+#: code:addons/account/account_move_line.py:1182
+#: code:addons/account/account_move_line.py:1197
+#: code:addons/account/account_move_line.py:1199
+#: code:addons/account/invoice.py:793
+#: code:addons/account/invoice.py:823
+#: code:addons/account/invoice.py:1014
#: code:addons/account/wizard/account_invoice_refund.py:100
#: code:addons/account/wizard/account_invoice_refund.py:102
+#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40
#: code:addons/account/wizard/account_use_model.py:44
#, python-format
msgid "Error !"
@@ -6255,6 +6355,10 @@ msgid ""
"reconcile in a series of accounts. It finds entries for each partner where "
"the amounts correspond."
msgstr ""
+"Для счета, который считается оплаченным, проводки на основе этого счета "
+"должны сверяться с их корреспондирующими частями, обычно платежами. В "
+"процессе автоматической сверки, OpenERP ищет проводки в ряде счетов. Система "
+"ищет проводки с соответствующей суммой для каждого контрагента."
#. module: account
#: view:account.move:0
@@ -6292,6 +6396,7 @@ msgstr ""
msgid ""
"Selected Entry Lines does not have any account move enties in draft state"
msgstr ""
+"Выбранные проводки не содержат ни одной операции в состоянии \"Черновик\"."
#. module: account
#: selection:account.aged.trial.balance,target_move:0
@@ -6332,7 +6437,7 @@ msgid "Journal Select"
msgstr "Выбор журнала"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:65
+#: code:addons/account/wizard/account_change_currency.py:64
#, python-format
msgid "Currnt currency is not confirured properly !"
msgstr "Текущая валюта неправильно настроена !"
@@ -6349,9 +6454,11 @@ msgstr "Налоги системы налогообложения"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: view:account.report.general.ledger:0
#: model:ir.actions.act_window,name:account.action_account_general_ledger_menu
#: model:ir.actions.report.xml,name:account.account_general_ledger
+#: model:ir.actions.report.xml,name:account.account_general_ledger_landscape
#: model:ir.ui.menu,name:account.menu_general_ledger
msgid "General Ledger"
msgstr "Главная книга"
@@ -6394,7 +6501,7 @@ msgstr "Параметры"
#. module: account
#: model:ir.model,name:account.model_account_tax_chart
msgid "Account tax chart"
-msgstr ""
+msgstr "План налоговых счетов"
#. module: account
#: report:account.analytic.account.cost_ledger:0
@@ -6407,7 +6514,7 @@ msgid "Total:"
msgstr "Всего:"
#. module: account
-#: code:addons/account/account.py:2050
+#: code:addons/account/account.py:2064
#, python-format
msgid ""
"You can specify year, month and date in the name of the model using the "
@@ -6436,16 +6543,16 @@ msgstr "Счета доходов"
#. module: account
#: help:report.invoice.created,origin:0
msgid "Reference of the document that generated this invoice report."
-msgstr ""
+msgstr "Ссылка на документ, создавший этот отчет о счете."
#. module: account
#: field:account.tax.code,child_ids:0
#: field:account.tax.code.template,child_ids:0
msgid "Child Codes"
-msgstr ""
+msgstr "Субкоды"
#. module: account
-#: code:addons/account/invoice.py:473
+#: code:addons/account/invoice.py:476
#: code:addons/account/wizard/account_invoice_refund.py:137
#, python-format
msgid "Data Insufficient !"
@@ -6529,7 +6636,7 @@ msgstr "Налоги"
#. module: account
#: help:account.tax,amount:0
msgid "For taxes of type percentage, enter % ratio between 0-1."
-msgstr ""
+msgstr "Для процентных налогов, введите % как число от 0 до 1."
#. module: account
#: model:ir.actions.act_window,help:account.action_subscription_form
@@ -6594,6 +6701,11 @@ msgid ""
"Most of the OpenERP operations (invoices, timesheets, expenses, etc) "
"generate analytic entries on the related account."
msgstr ""
+"Обычный план счетов имеет структуру определяемую правовыми требованиями "
+"страны. Структура аналитического плана счетов должна отражать требования "
+"вашего бизнеса. Обычно он структурирован по контрактам, проектам, ТМЦ или "
+"отделам. Большинство операций в OpenERP (счета, бюллетени, затраты и т.д.) "
+"создают проводки аналитики в соответствующих счетах."
#. module: account
#: field:account.analytic.journal,line_ids:0
@@ -6602,14 +6714,14 @@ msgid "Lines"
msgstr "Строк"
#. module: account
-#: code:addons/account/invoice.py:521
+#: code:addons/account/invoice.py:524
#, python-format
msgid ""
"Can not find account chart for this company in invoice line account, Please "
"Create account."
msgstr ""
-"Не могу найти план счетов для этой компании в позиции счета, пожалуйста "
-"создайте бух. счет."
+"Невозможно найти план счетов для этой организации в позиции счёта. "
+"Пожалуйста, создайте счёт."
#. module: account
#: view:account.tax.template:0
@@ -6730,6 +6842,9 @@ msgid ""
"new counterpart but will share the same counterpart. This is used in fiscal "
"year closing."
msgstr ""
+"Отметьте, для определения того, что каждая проводка в этом журнале не "
+"создает новой корреспондирующей части, а использует одну и ту же. Это "
+"используется при закрытии финансового года."
#. module: account
#: field:account.bank.statement,closing_date:0
@@ -6775,10 +6890,10 @@ msgstr ""
"домена."
#. module: account
-#: code:addons/account/account.py:938
+#: code:addons/account/account.py:952
#, python-format
msgid "You should have chosen periods that belongs to the same company"
-msgstr ""
+msgstr "Вы должны выбрать периоды принадлежащие одной компании."
#. module: account
#: field:account.fiscalyear.close,report_name:0
@@ -6798,7 +6913,7 @@ msgstr "Отчетность"
#. module: account
#: sql_constraint:account.journal:0
msgid "The code of the journal must be unique per company !"
-msgstr "Код журнала должен быть уникальным для компании !"
+msgstr "Код журнала должен быть уникальным внутри организации!"
#. module: account
#: field:account.bank.statement,ending_details_ids:0
@@ -6823,6 +6938,8 @@ msgid ""
"the system to go through the reconciliation process, based on the latest day "
"it have been reconciled."
msgstr ""
+"Это поле показывает вам следующего контрагента, который автоматически выбран "
+"системой для сверки. Выбор основан на дате последней сверки."
#. module: account
#: field:account.move.line.reconcile.writeoff,comment:0
@@ -6879,7 +6996,7 @@ msgid "Sign on Reports"
msgstr "Знак в отчётах"
#. module: account
-#: code:addons/account/account_cash_statement.py:249
+#: code:addons/account/account_cash_statement.py:250
#, python-format
msgid "You can not have two open register for the same journal"
msgstr "Вы не можете иметь два открытых регистра для одного журнала"
@@ -6908,7 +7025,6 @@ msgstr ""
#. module: account
#: report:account.invoice:0
#: view:account.invoice:0
-#: report:account.move.voucher:0
msgid "PRO-FORMA"
msgstr "Проформа"
@@ -6940,6 +7056,7 @@ msgstr "Доп. информация"
#. module: account
#: view:account.analytic.line:0
+#: field:account.bank.statement,user_id:0
#: view:account.journal:0
#: field:account.journal,user_id:0
#: view:analytic.entries.report:0
@@ -6965,13 +7082,13 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1271
+#: code:addons/account/account_move_line.py:1277
#, python-format
msgid "Bad account !"
msgstr "Неверный счет !"
#. module: account
-#: code:addons/account/account.py:2777
+#: code:addons/account/account.py:2821
#: code:addons/account/installer.py:432
#, python-format
msgid "Sales Journal"
@@ -6989,10 +7106,10 @@ msgid "Invoice Tax"
msgstr "Налог по счету"
#. module: account
-#: code:addons/account/account_move_line.py:1246
+#: code:addons/account/account_move_line.py:1252
#, python-format
msgid "No piece number !"
-msgstr ""
+msgstr "Нет номера части !"
#. module: account
#: view:product.product:0
@@ -7100,7 +7217,7 @@ msgstr "Оплата счетов"
#: field:account.tax,sequence:0
#: field:account.tax.template,sequence:0
msgid "Sequence"
-msgstr "Последовательность"
+msgstr "Нумерация"
#. module: account
#: model:ir.model,name:account.model_account_bs_report
@@ -7188,7 +7305,7 @@ msgstr ""
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_legal_statement
msgid "Legal Reports"
-msgstr ""
+msgstr "Официальные отчеты"
#. module: account
#: field:account.tax.code,sum_period:0
@@ -7202,6 +7319,9 @@ msgid ""
"to the higher ones. The order is important if you have a tax with several "
"tax children. In this case, the evaluation order is important."
msgstr ""
+"Поле \"последовательность\" используется для упорядочивания позиций налогов "
+"от меньшего к большему. Последовательность важна при наличии субналогов . В "
+"таком случае важна последовательность вычислений."
#. module: account
#: model:ir.model,name:account.model_account_cashbox_line
@@ -7229,17 +7349,17 @@ msgid "Fixed"
msgstr "Фиксированный"
#. module: account
-#: code:addons/account/account.py:506
-#: code:addons/account/account.py:519
-#: code:addons/account/account.py:522
+#: code:addons/account/account.py:516
+#: code:addons/account/account.py:529
#: code:addons/account/account.py:532
-#: code:addons/account/account.py:640
-#: code:addons/account/account.py:927
-#: code:addons/account/account_move_line.py:732
-#: code:addons/account/account_move_line.py:776
-#: code:addons/account/invoice.py:714
-#: code:addons/account/invoice.py:717
-#: code:addons/account/invoice.py:720
+#: code:addons/account/account.py:546
+#: code:addons/account/account.py:654
+#: code:addons/account/account.py:941
+#: code:addons/account/account_move_line.py:723
+#: code:addons/account/account_move_line.py:767
+#: code:addons/account/invoice.py:722
+#: code:addons/account/invoice.py:725
+#: code:addons/account/invoice.py:728
#, python-format
msgid "Warning !"
msgstr "Warning !"
@@ -7247,13 +7367,13 @@ msgstr "Warning !"
#. module: account
#: field:account.entries.report,move_line_state:0
msgid "State of Move Line"
-msgstr "Состояние действия"
+msgstr "Состояние операции"
#. module: account
#: model:ir.model,name:account.model_account_move_line_reconcile
#: model:ir.model,name:account.model_account_move_line_reconcile_writeoff
msgid "Account move line reconcile"
-msgstr "Сверка действия по счету"
+msgstr "Сверка операции по счету"
#. module: account
#: view:account.subscription.generate:0
@@ -7271,6 +7391,7 @@ msgstr "Величина (прописью):"
#: view:account.entries.report:0
#: field:account.entries.report,partner_id:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: view:account.invoice:0
#: field:account.invoice,partner_id:0
#: field:account.invoice.line,partner_id:0
@@ -7298,10 +7419,10 @@ msgstr "Выбрать валюту применяемую в счете"
#: code:addons/account/wizard/account_invoice_refund.py:100
#, python-format
msgid "Can not %s draft/proforma/cancel invoice."
-msgstr ""
+msgstr "Нельзя %s черновик/проформу/отмененный счет."
#. module: account
-#: code:addons/account/invoice.py:787
+#: code:addons/account/invoice.py:795
#, python-format
msgid "No Invoice Lines !"
msgstr "Нет позиций в счете !"
@@ -7332,6 +7453,7 @@ msgid ""
"Select Fiscal Year which you want to remove entries for its End of year "
"entries journal"
msgstr ""
+"Выберите финансовый год для удаления проводок из журнала \"Конец года\""
#. module: account
#: field:account.tax.template,type_tax_use:0
@@ -7350,7 +7472,7 @@ msgid "Deferral Method"
msgstr "Метод отсрочки"
#. module: account
-#: code:addons/account/invoice.py:359
+#: code:addons/account/invoice.py:360
#, python-format
msgid "Invoice '%s' is paid."
msgstr "Счет '%s' оплачен."
@@ -7415,7 +7537,7 @@ msgid "Associated Partner"
msgstr "Связанный контрагент"
#. module: account
-#: code:addons/account/invoice.py:1284
+#: code:addons/account/invoice.py:1298
#, python-format
msgid "You must first select a partner !"
msgstr "Сначала вы должны выбрать партнера !"
@@ -7472,7 +7594,7 @@ msgstr "Проформа"
#. module: account
#: report:account.analytic.account.cost_ledger:0
msgid "J.C. /Move name"
-msgstr ""
+msgstr "Код журн./Операция"
#. module: account
#: model:ir.model,name:account.model_account_open_closed_fiscalyear
@@ -7480,7 +7602,7 @@ msgid "Choose Fiscal Year"
msgstr "Закрыть отчетный год"
#. module: account
-#: code:addons/account/account.py:2841
+#: code:addons/account/account.py:2885
#: code:addons/account/installer.py:495
#, python-format
msgid "Purchase Refund Journal"
@@ -7489,7 +7611,7 @@ msgstr "Журнал возврата покупок"
#. module: account
#: help:account.tax.template,amount:0
msgid "For Tax Type percent enter % ratio between 0-1."
-msgstr ""
+msgstr "Для налога типа \"процент\" введите %, как число от 0 до 1."
#. module: account
#: selection:account.automatic.reconcile,power:0
@@ -7517,6 +7639,7 @@ msgstr "Бухучет и управление финансами"
#: view:account.entries.report:0
#: field:account.entries.report,period_id:0
#: view:account.fiscalyear:0
+#: report:account.general.ledger_landscape:0
#: view:account.invoice:0
#: view:account.invoice.report:0
#: field:account.journal.period,period_id:0
@@ -7610,7 +7733,7 @@ msgstr "Тел. :"
#. module: account
#: field:account.account,company_currency_id:0
msgid "Company Currency"
-msgstr "Валюта компании"
+msgstr "Валюта организации"
#. module: account
#: report:account.general.ledger:0
@@ -7673,7 +7796,7 @@ msgstr "Виды журналов"
#. module: account
#: model:ir.model,name:account.model_account_move_bank_reconcile
msgid "Move bank reconcile"
-msgstr "Сверка проводки по банку"
+msgstr "Сверка операции по банку"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_type_form
@@ -7682,7 +7805,7 @@ msgid "Account Types"
msgstr "Типы счетов"
#. module: account
-#: code:addons/account/invoice.py:897
+#: code:addons/account/invoice.py:905
#, python-format
msgid "Cannot create invoice move on centralised journal"
msgstr ""
@@ -7732,6 +7855,7 @@ msgstr "Журнал возвратов"
#: report:account.account.balance:0
#: report:account.central.journal:0
#: report:account.general.journal:0
+#: report:account.general.ledger_landscape:0
#: report:account.partner.balance:0
msgid "Filter By"
msgstr "Фильтровать по"
@@ -7744,13 +7868,17 @@ msgid ""
"sales orders or deliveries. You should only confirm them before sending them "
"to your customers."
msgstr ""
+"Вы можете создавать счета заказчикам и управлять счетами выставленными вашим "
+"клиентам. OpenERP может создавать черновики счетов автоматически по заказам "
+"на продажу и доставку. Вы должны только подтвердить их пред выставлением "
+"заказчикам."
#. module: account
#: view:account.entries.report:0
#: view:board.board:0
#: model:ir.actions.act_window,name:account.action_company_analysis_tree
msgid "Company Analysis"
-msgstr "Анализ компании"
+msgstr "Анализ организации"
#. module: account
#: help:account.invoice,account_id:0
@@ -7770,7 +7898,7 @@ msgid "Payment Term Line"
msgstr "Позиция условий оплаты"
#. module: account
-#: code:addons/account/account.py:2794
+#: code:addons/account/account.py:2838
#: code:addons/account/installer.py:452
#, python-format
msgid "Purchase Journal"
@@ -7839,7 +7967,7 @@ msgstr ""
#. module: account
#: view:account.payment.term.line:0
msgid " valuation: balance"
-msgstr ""
+msgstr " расчет: баланс"
#. module: account
#: view:account.tax.code:0
@@ -7860,7 +7988,7 @@ msgstr "Закрыть финансовый год"
#. module: account
#: sql_constraint:account.account:0
msgid "The code of the account must be unique per company !"
-msgstr "Код счета должен быть уникальным для компании !"
+msgstr "Код счета должен быть уникальным внутри организации!"
#. module: account
#: model:ir.actions.act_window,name:account.act_account_journal_2_account_invoice_opened
@@ -7939,8 +8067,8 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1131
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1137
+#: code:addons/account/account_move_line.py:1220
#, python-format
msgid "Bad account!"
msgstr "Плохой счет!"
@@ -7951,7 +8079,7 @@ msgid "Keep empty for all open fiscal years"
msgstr "Оставьте пустым для всех открытых финансовых лет"
#. module: account
-#: code:addons/account/account_move_line.py:1056
+#: code:addons/account/account_move_line.py:1062
#, python-format
msgid "The account move (%s) for centralisation has been confirmed!"
msgstr ""
@@ -7962,6 +8090,7 @@ msgid ""
"The amount expressed in an optional other currency if it is a multi-currency "
"entry."
msgstr ""
+"Сумма выражается в дополнительный валюте, если эта проводка мульти-валютная."
#. module: account
#: view:account.account:0
@@ -7972,6 +8101,7 @@ msgstr ""
#: field:account.entries.report,currency_id:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.invoice,currency_id:0
#: field:account.invoice.report,currency_id:0
#: field:account.journal,currency:0
@@ -8062,7 +8192,7 @@ msgstr "неизвестен"
#. module: account
#: field:account.fiscalyear.close,journal_id:0
msgid "Opening Entries Journal"
-msgstr "Открытие журнала проводок"
+msgstr "Журнал проводок открытия"
#. module: account
#: model:process.transition,note:account.process_transition_customerinvoice0
@@ -8145,14 +8275,14 @@ msgid "Period from"
msgstr "Период с"
#. module: account
-#: code:addons/account/account.py:2817
+#: code:addons/account/account.py:2861
#: code:addons/account/installer.py:476
#, python-format
msgid "Sales Refund Journal"
msgstr "Журнал возврата продаж"
#. module: account
-#: code:addons/account/account.py:927
+#: code:addons/account/account.py:941
#, python-format
msgid ""
"You cannot modify company of this period as its related record exist in "
@@ -8201,7 +8331,7 @@ msgid "Purchase Tax(%)"
msgstr "Налог на покупку(%)"
#. module: account
-#: code:addons/account/invoice.py:787
+#: code:addons/account/invoice.py:795
#, python-format
msgid "Please create some invoice lines."
msgstr "Пожалуйста, создайте позиции счета"
@@ -8217,7 +8347,7 @@ msgid "Configure Your Accounting Application"
msgstr "Настройка модуля бухучета"
#. module: account
-#: code:addons/account/account.py:2820
+#: code:addons/account/account.py:2864
#: code:addons/account/installer.py:479
#, python-format
msgid "SCNJ"
@@ -8255,6 +8385,7 @@ msgstr "Управление напоминаниями"
#: report:account.central.journal:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
@@ -8264,7 +8395,7 @@ msgid "Start Period"
msgstr "Начало периода"
#. module: account
-#: code:addons/account/account.py:2333
+#: code:addons/account/account.py:2357
#, python-format
msgid "Cannot locate parent code for template account!"
msgstr "Не удается найти родительский код для шаблона счета!"
@@ -8277,7 +8408,7 @@ msgstr "Направление анализа"
#. module: account
#: field:res.partner,ref_companies:0
msgid "Companies that refers to partner"
-msgstr "Ссылающиеся на партнера компании"
+msgstr "Связанные с партнёром организации"
#. module: account
#: view:account.journal:0
@@ -8301,7 +8432,7 @@ msgid "Accountant validates the accounting entries coming from the invoice. "
msgstr "Бухгалтер утверждает проводки созданные по счет-фактуре. "
#. module: account
-#: code:addons/account/invoice.py:1008
+#: code:addons/account/invoice.py:1014
#, python-format
msgid ""
"You cannot cancel the Invoice which is Partially Paid! You need to "
@@ -8328,10 +8459,10 @@ msgstr "Документ: выписка клиенту со счета"
#. module: account
#: constraint:account.move.line:0
msgid "You can not create move line on view account."
-msgstr "Нельзя создать действие по счету с типом Вид."
+msgstr "Нельзя создать операцию по счету с типом Вид."
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:71
+#: code:addons/account/wizard/account_change_currency.py:70
#, python-format
msgid "Current currency is not confirured properly !"
msgstr "Текущая валюта неправильно настроена !"
@@ -8380,6 +8511,7 @@ msgstr "Оставьте пустым для использования дохо
#: field:account.entries.report,balance:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.move.line,balance:0
#: report:account.partner.balance:0
#: selection:account.payment.term.line,value:0
@@ -8398,6 +8530,7 @@ msgstr "Вручную или автоматически введенные в
#. module: account
#: report:account.account.balance:0
+#: report:account.general.ledger_landscape:0
msgid "Display Account"
msgstr "Вывод счета"
@@ -8512,14 +8645,15 @@ msgstr "Проводка вручную"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.move.line,move_id:0
#: field:analytic.entries.report,move_id:0
msgid "Move"
-msgstr "Перемещение"
+msgstr "Операция"
#. module: account
-#: code:addons/account/account_move_line.py:1128
+#: code:addons/account/account_move_line.py:1134
#, python-format
msgid "You can not change the tax, you should remove and recreate lines !"
msgstr ""
@@ -8528,7 +8662,7 @@ msgstr ""
#. module: account
#: report:account.central.journal:0
msgid "A/C No."
-msgstr ""
+msgstr "Счет №"
#. module: account
#: model:ir.actions.act_window,name:account.act_account_journal_2_account_bank_statement
@@ -8616,6 +8750,7 @@ msgstr "Аналитический баланс"
#: report:account.central.journal:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
@@ -8646,7 +8781,7 @@ msgstr "План счетов"
#. module: account
#: field:account.move.line,date_maturity:0
msgid "Due date"
-msgstr "Срок"
+msgstr "Срок оплаты"
#. module: account
#: view:account.move.journal:0
@@ -8659,7 +8794,7 @@ msgid "Account Subscription"
msgstr "Счет подписки"
#. module: account
-#: code:addons/account/invoice.py:717
+#: code:addons/account/invoice.py:725
#, python-format
msgid ""
"Tax base different !\n"
@@ -8686,6 +8821,7 @@ msgstr "Проводка подписки"
#: report:account.general.journal:0
#: field:account.general.journal,date_from:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,date_start:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -8714,7 +8850,7 @@ msgid "Unreconciled"
msgstr "Не сверенные"
#. module: account
-#: code:addons/account/invoice.py:804
+#: code:addons/account/invoice.py:812
#, python-format
msgid "Bad total !"
msgstr "Плохой итог !"
@@ -8722,7 +8858,7 @@ msgstr "Плохой итог !"
#. module: account
#: field:account.journal,sequence_id:0
msgid "Entry Sequence"
-msgstr "Последовательный номер проводки"
+msgstr "Нумерация проводок"
#. module: account
#: model:ir.actions.act_window,help:account.action_account_period_tree
@@ -8772,19 +8908,22 @@ msgid "Active"
msgstr "Активен"
#. module: account
-#: code:addons/account/invoice.py:354
+#: code:addons/account/invoice.py:353
#, python-format
msgid "Unknown Error"
msgstr "Неизвестная ошибка"
#. module: account
-#: code:addons/account/account.py:1167
+#: code:addons/account/account.py:1181
#, python-format
msgid ""
"You cannot validate a non-balanced entry !\n"
"Make sure you have configured Payment Term properly !\n"
"It should contain atleast one Payment Term Line with type \"Balance\" !"
msgstr ""
+"Вы не можете утвердить несбалансированную проводку!\n"
+"Проверьте правильность настройки условия оплаты!\n"
+"Должна быть хотя бы одна строка условия оплаты с типом \"Баланс\"!"
#. module: account
#: help:res.partner,property_account_payable:0
@@ -8808,7 +8947,7 @@ msgstr "Вторичная валюта"
#. module: account
#: model:ir.model,name:account.model_validate_account_move
msgid "Validate Account Move"
-msgstr "Утвердить действие по счету"
+msgstr "Утвердить операцию по счету"
#. module: account
#: field:account.account,credit:0
@@ -8821,10 +8960,10 @@ msgstr "Утвердить действие по счету"
#: field:account.entries.report,credit:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.model.line,credit:0
#: field:account.move.line,credit:0
-#: report:account.move.voucher:0
#: report:account.partner.balance:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
@@ -8866,6 +9005,9 @@ msgid ""
"payment term!\n"
"Please define partner on it!"
msgstr ""
+"Дата исполнения проводки созданной строкой \"%s\" основана на условии оплаты "
+"контрагента!\n"
+"Пожалуйста, задайте контрагента!"
#. module: account
#: field:account.cashbox.line,number:0
@@ -9065,7 +9207,6 @@ msgstr "Выберите период"
#: view:account.move:0
#: selection:account.move,state:0
#: view:account.move.line:0
-#: report:account.move.voucher:0
msgid "Posted"
msgstr "Проведено"
@@ -9084,6 +9225,7 @@ msgstr "Проведено"
#: report:account.general.journal:0
#: field:account.general.journal,date_to:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,date_stop:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -9102,7 +9244,7 @@ msgstr "Дата окончания"
#: model:ir.actions.act_window,name:account.action_account_open_closed_fiscalyear
#: model:ir.ui.menu,name:account.menu_wizard_account_open_closed_fiscalyear
msgid "Cancel Opening Entries"
-msgstr "Отмена открывающих проводок"
+msgstr "Отмена проводок открытия"
#. module: account
#: field:account.payment.term.line,days2:0
@@ -9137,7 +9279,7 @@ msgid "This is a model for recurring accounting entries"
msgstr "Это модель для повторяющихся проводок"
#. module: account
-#: code:addons/account/account_analytic_line.py:100
+#: code:addons/account/account_analytic_line.py:99
#, python-format
msgid "There is no income account defined for this product: \"%s\" (id:%d)"
msgstr "Не определен счет доходов для ТМЦ: \"%s\" (id:%d)"
@@ -9210,7 +9352,7 @@ msgstr "Журнал: Все"
#: field:analytic.entries.report,company_id:0
#: field:wizard.multi.charts.accounts,company_id:0
msgid "Company"
-msgstr "Компания"
+msgstr "Организация"
#. module: account
#: model:ir.ui.menu,name:account.menu_action_subscription_form
@@ -9289,8 +9431,8 @@ msgid "End period"
msgstr "Конец периода"
#. module: account
-#: code:addons/account/account_move_line.py:738
-#: code:addons/account/account_move_line.py:815
+#: code:addons/account/account_move_line.py:729
+#: code:addons/account/account_move_line.py:806
#: code:addons/account/wizard/account_invoice_state.py:44
#: code:addons/account/wizard/account_invoice_state.py:68
#: code:addons/account/wizard/account_report_balance_sheet.py:70
@@ -9320,7 +9462,7 @@ msgstr ""
#: view:account.automatic.reconcile:0
#: view:account.move.line.reconcile.writeoff:0
msgid "Write-Off Move"
-msgstr ""
+msgstr "Операция списания"
#. module: account
#: model:process.node,note:account.process_node_paidinvoice0
@@ -9358,10 +9500,10 @@ msgstr "Счет поставщика"
#: field:account.entries.report,debit:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.model.line,debit:0
#: field:account.move.line,debit:0
-#: report:account.move.voucher:0
#: report:account.partner.balance:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
@@ -9395,7 +9537,7 @@ msgid "Recurring"
msgstr "Повторение"
#. module: account
-#: code:addons/account/account_move_line.py:805
+#: code:addons/account/account_move_line.py:796
#, python-format
msgid "Entry is already reconciled"
msgstr "Проводка уже сверена"
@@ -9408,7 +9550,7 @@ msgstr "Дебиторская задолженность"
#. module: account
#: selection:account.model.line,date_maturity:0
msgid "Partner Payment Term"
-msgstr "Условия платежа партнера"
+msgstr "Условие оплаты контрагента"
#. module: account
#: field:temp.range,name:0
@@ -9416,7 +9558,7 @@ msgid "Range"
msgstr "Диапазон"
#. module: account
-#: code:addons/account/account_move_line.py:1246
+#: code:addons/account/account_move_line.py:1252
#, python-format
msgid ""
"Can not create an automatic sequence for this piece !\n"
@@ -9432,7 +9574,7 @@ msgstr ""
#: selection:account.pl.report,display_account:0
#: selection:account.report.general.ledger,display_account:0
msgid "With movements"
-msgstr ""
+msgstr "С движением"
#. module: account
#: view:account.analytic.account:0
@@ -9489,7 +9631,7 @@ msgstr "Этот период уже закрыт !"
#. module: account
#: help:account.move.line,currency_id:0
msgid "The optional other currency if it is a multi-currency entry."
-msgstr "Дополнительная валюта, если эта запись мульти-валютная."
+msgstr "Дополнительная валюта, если эта проводка мульти-валютная."
#. module: account
#: model:process.transition,note:account.process_transition_invoiceimport0
@@ -9518,12 +9660,12 @@ msgid ""
"may keep several types of specialized journals such as a cash journal, "
"purchase journal, sales journal..."
msgstr ""
-"Создание и управление журналами вашей компании. Журнал используется для "
-"записи всех операций учета данных связанных с ежедневной деятельностью вашей "
-"компании используя двойную запись. В зависимости от характера деятельности "
-"и количества ежедневных операций, компания может использовать несколько "
-"типов специализированных журналов таких, как кассовый журнал, журнал "
-"покупок, журнал продаж..."
+"Создавайте журналы организации и управляйте ими в этом меню. Журнал "
+"используется для отражения всех данных операций бухгалтерского учёта, "
+"связанных с повседневной деятельностью вашей организации по принципу двойной "
+"записи. В зависимости от характера деятельности и количества операций, "
+"организация может вести несколько типов специализированных журналов, таких "
+"как кассовый журнал, журнал покупок, журнал продаж…"
#. module: account
#: model:ir.model,name:account.model_account_analytic_chart
@@ -9553,7 +9695,7 @@ msgid "Accounts Mapping"
msgstr ""
#. module: account
-#: code:addons/account/invoice.py:346
+#: code:addons/account/invoice.py:345
#, python-format
msgid "Invoice '%s' is waiting for validation."
msgstr "Счет '%s' ожидает утверждения."
@@ -9578,7 +9720,7 @@ msgid "The income or expense account related to the selected product."
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1117
+#: code:addons/account/account_move_line.py:1123
#, python-format
msgid "The date of your Journal Entry is not in the defined period!"
msgstr "Дата вашей записи в журнале вне определенного периода!"
@@ -9636,7 +9778,7 @@ msgstr "Бухгалтерские документы"
#. module: account
#: model:ir.model,name:account.model_validate_account_move_lines
msgid "Validate Account Move Lines"
-msgstr "Утвердить действия по счету"
+msgstr "Утвердить операции по счету"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_analytic_cost_ledger_journal
@@ -9776,7 +9918,7 @@ msgstr ""
#. module: account
#: field:account.analytic.line,amount_currency:0
msgid "Amount currency"
-msgstr "Валюта суммы"
+msgstr "Сумма в валюте"
#. module: account
#: code:addons/account/wizard/account_report_aged_partner_balance.py:55
@@ -9785,7 +9927,7 @@ msgid "You must enter a period length that cannot be 0 or below !"
msgstr "Вы должны ввести длину периода больше 0 !"
#. module: account
-#: code:addons/account/account.py:501
+#: code:addons/account/account.py:511
#, python-format
msgid "You cannot remove an account which has account entries!. "
msgstr "Нельзя удалить счет по которому есть проводки ! "
diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po
index 19544fb613b..a76da12910a 100644
--- a/addons/account/i18n/zh_CN.po
+++ b/addons/account/i18n/zh_CN.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2011-02-03 07:35+0000\n"
+"PO-Revision-Date: 2011-07-02 15:26+0000\n"
"Last-Translator: Wei \"oldrev\" Li \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: 2011-04-29 05:14+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-07-03 04:46+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -33,7 +33,7 @@ msgid "No End of year journal defined for the fiscal year"
msgstr "此财务年度没有定义年终日记账"
#. module: account
-#: code:addons/account/account.py:506
+#: code:addons/account/account.py:516
#, python-format
msgid ""
"You cannot remove/deactivate an account which is set as a property to any "
@@ -65,7 +65,7 @@ msgid "Residual"
msgstr "剩余的"
#. module: account
-#: code:addons/account/invoice.py:785
+#: code:addons/account/invoice.py:793
#, python-format
msgid "Please define sequence on invoice journal"
msgstr "请为发票日记账对应序列"
@@ -110,7 +110,7 @@ msgstr "从发票或支付凭证导入"
#. module: account
#: model:ir.model,name:account.model_wizard_multi_charts_accounts
msgid "wizard.multi.charts.accounts"
-msgstr "wizard.multi.charts.accounts"
+msgstr "多科目图表向导"
#. module: account
#: view:account.move:0
@@ -122,7 +122,7 @@ msgstr "借方合计"
msgid ""
"If you unreconciliate transactions, you must also verify all the actions "
"that are linked to those transactions because they will not be disabled"
-msgstr ""
+msgstr "如果您用非关联交易,您还必须验证所有链接到这些交易行动,因为他们不会被禁用"
#. module: account
#: report:account.tax.code.entries:0
@@ -130,7 +130,7 @@ msgid "Accounting Entries-"
msgstr "会计分录"
#. module: account
-#: code:addons/account/account.py:1291
+#: code:addons/account/account.py:1305
#, python-format
msgid "You can not delete posted movement: \"%s\"!"
msgstr "不能删除已登账的凭证行:\"%s\"!"
@@ -171,10 +171,10 @@ msgstr "选择会计年度 "
msgid ""
"If the active field is set to False, it will allow you to hide the payment "
"term without removing it."
-msgstr ""
+msgstr "如果设置为false,该付款条款将会被隐藏。"
#. module: account
-#: code:addons/account/invoice.py:1421
+#: code:addons/account/invoice.py:1436
#, python-format
msgid "Warning!"
msgstr "警告!"
@@ -212,7 +212,7 @@ msgid ""
"Gives the type of the analytic journal. When it needs for a document (eg: an "
"invoice) to create analytic entries, OpenERP will look for a matching "
"journal of the same type."
-msgstr ""
+msgstr "给出了分析报表类型。当一个文件(如:发票),需要创建解析条目,OpenERP将寻找一个相同类型的匹配杂志。"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_tax_template_form
@@ -223,10 +223,10 @@ msgstr "税模板"
#. module: account
#: model:ir.model,name:account.model_account_tax
msgid "account.tax"
-msgstr "科目.税"
+msgstr "税科目"
#. module: account
-#: code:addons/account/account.py:901
+#: code:addons/account/account.py:915
#, python-format
msgid ""
"No period defined for this date: %s !\n"
@@ -238,7 +238,7 @@ msgstr ""
#. module: account
#: model:ir.model,name:account.model_account_move_line_reconcile_select
msgid "Move line reconcile select"
-msgstr ""
+msgstr "选择核销行"
#. module: account
#: help:account.model.line,sequence:0
@@ -256,15 +256,15 @@ msgid ""
msgstr "勾选此项使发票上不显示增值税"
#. module: account
-#: code:addons/account/invoice.py:1210
+#: code:addons/account/invoice.py:1224
#, python-format
msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)"
-msgstr ""
+msgstr "发票'%s'已部分支付了%s%s ,总金额为:%s%s, 尚余%s%s未付"
#. module: account
#: model:process.transition,note:account.process_transition_supplierentriesreconcile0
msgid "Accounting entries are an input of the reconciliation."
-msgstr ""
+msgstr "会计分录必须借贷相等"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_management_belgian_reports
@@ -272,7 +272,7 @@ msgid "Belgian Reports"
msgstr "比利时报表"
#. module: account
-#: code:addons/account/account_move_line.py:1176
+#: code:addons/account/account_move_line.py:1182
#, python-format
msgid "You can not add/modify entries in a closed journal."
msgstr "不能添加/修改已结帐的凭证"
@@ -280,7 +280,7 @@ msgstr "不能添加/修改已结帐的凭证"
#. module: account
#: view:account.bank.statement:0
msgid "Calculated Balance"
-msgstr ""
+msgstr "计算余额"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_use_model_create_entry
@@ -310,7 +310,7 @@ msgid "St."
msgstr "结单编码"
#. module: account
-#: code:addons/account/invoice.py:529
+#: code:addons/account/invoice.py:532
#, python-format
msgid "Invoice line account company does not match with invoice company."
msgstr "发票明细的科目公司与发票头的公司不匹配。"
@@ -325,7 +325,7 @@ msgstr "字段名"
msgid ""
"Installs localized accounting charts to match as closely as possible the "
"accounting needs of your company based on your country."
-msgstr ""
+msgstr "安装本地化财务系统以尽可能的适应本国的财务要求"
#. module: account
#: code:addons/account/wizard/account_move_journal.py:63
@@ -335,12 +335,12 @@ msgid ""
"\n"
"You can create one in the menu: \n"
"Configuration/Financial Accounting/Accounts/Journals."
-msgstr ""
+msgstr "无法找到针对该公司%s类型的分类账簿"
#. module: account
#: model:ir.model,name:account.model_account_unreconcile
msgid "Account Unreconcile"
-msgstr ""
+msgstr "科目反核销"
#. module: account
#: view:product.product:0
@@ -352,7 +352,7 @@ msgstr "采购属性"
#: view:account.installer:0
#: view:account.installer.modules:0
msgid "Configure"
-msgstr ""
+msgstr "设置"
#. module: account
#: selection:account.entries.report,month:0
@@ -370,11 +370,12 @@ msgid ""
"OpenERP. Journal items are created by OpenERP if you use Bank Statements, "
"Cash Registers, or Customer/Supplier payments."
msgstr ""
+"本界面供财务人员在OpenERP中批量录入凭证之用。如果你在OpenERP使用银行对帐单,收银机,或者客户/供应商付款, 相应的分录会由系统自动产生。"
#. module: account
#: model:ir.model,name:account.model_account_tax_template
msgid "account.tax.template"
-msgstr ""
+msgstr "account.tax.template"
#. module: account
#: model:ir.model,name:account.model_account_bank_accounts_wizard
@@ -390,7 +391,7 @@ msgstr "建立日期"
#. module: account
#: selection:account.journal,type:0
msgid "Purchase Refund"
-msgstr ""
+msgstr "采购退款"
#. module: account
#: selection:account.journal,type:0
@@ -412,7 +413,7 @@ msgstr "打开会计年度"
msgid ""
"This field contains the informatin related to the numbering of the journal "
"entries of this journal."
-msgstr ""
+msgstr "该字段包含该分类账簿记录数量的信息"
#. module: account
#: field:account.journal,default_debit_account_id:0
@@ -462,6 +463,7 @@ msgid ""
"amount of each area of the tax declaration for your country. It’s presented "
"in a hierarchical structure, which can be modified to fit your needs."
msgstr ""
+"税务表是一个树状视图,反映了税务结构,并显示当前的纳税情况。税务表反映了国家规定的不同纳税领域的纳税申报数量情况。其设置为一个层次结构,请根据需要修改。"
#. module: account
#: view:account.analytic.line:0
@@ -500,17 +502,17 @@ msgstr "业务类型"
#. module: account
#: model:ir.model,name:account.model_account_invoice_confirm
msgid "Confirm the selected invoices"
-msgstr ""
+msgstr "确认选定的发票"
#. module: account
#: field:account.addtmpl.wizard,cparent_id:0
msgid "Parent target"
-msgstr ""
+msgstr "上级目标"
#. module: account
#: field:account.bank.statement,account_id:0
msgid "Account used in this journal"
-msgstr ""
+msgstr "这个分类账簿上的科目"
#. module: account
#: help:account.aged.trial.balance,chart_account_id:0
@@ -529,7 +531,7 @@ msgstr ""
#: help:account.report.general.ledger,chart_account_id:0
#: help:account.vat.declaration,chart_account_id:0
msgid "Select Charts of Accounts"
-msgstr ""
+msgstr "选择科目表"
#. module: account
#: view:product.product:0
@@ -539,7 +541,7 @@ msgstr "进项税"
#. module: account
#: model:ir.model,name:account.model_account_invoice_refund
msgid "Invoice Refund"
-msgstr ""
+msgstr "发票退款"
#. module: account
#: report:account.overdue:0
@@ -552,10 +554,10 @@ msgid "Not reconciled transactions"
msgstr "没核销的交易"
#. module: account
-#: code:addons/account/account_cash_statement.py:348
+#: code:addons/account/account_cash_statement.py:349
#, python-format
msgid "CashBox Balance is not matching with Calculated Balance !"
-msgstr ""
+msgstr "出纳帐与现金不一致"
#. module: account
#: view:account.fiscal.position:0
@@ -589,12 +591,12 @@ msgstr "所有"
#. module: account
#: field:account.invoice.report,address_invoice_id:0
msgid "Invoice Address Name"
-msgstr ""
+msgstr "发票地址"
#. module: account
#: selection:account.installer,period:0
msgid "3 Monthly"
-msgstr ""
+msgstr "3个月"
#. module: account
#: view:account.unreconcile.reconcile:0
@@ -606,7 +608,7 @@ msgstr "如果执行反核销, 你必须检验链接该处理的所有操作.
#. module: account
#: view:analytic.entries.report:0
msgid " 30 Days "
-msgstr ""
+msgstr " 30 天 "
#. module: account
#: field:ir.sequence,fiscal_ids:0
@@ -626,7 +628,7 @@ msgstr ""
#. module: account
#: sql_constraint:account.sequence.fiscalyear:0
msgid "Main Sequence must be different from current !"
-msgstr ""
+msgstr "序列号必须唯一"
#. module: account
#: field:account.invoice.tax,tax_amount:0
@@ -634,7 +636,7 @@ msgid "Tax Code Amount"
msgstr "税事务金额"
#. module: account
-#: code:addons/account/account.py:2779
+#: code:addons/account/account.py:2823
#: code:addons/account/installer.py:434
#, python-format
msgid "SAJ"
@@ -654,7 +656,7 @@ msgstr "关闭会计期间"
#. module: account
#: model:ir.model,name:account.model_account_common_partner_report
msgid "Account Common Partner Report"
-msgstr ""
+msgstr "普通合伙人的科目报表"
#. module: account
#: field:account.fiscalyear.close,period_id:0
@@ -664,11 +666,11 @@ msgstr "会计期间的启用凭证"
#. module: account
#: model:ir.model,name:account.model_account_journal_period
msgid "Journal Period"
-msgstr ""
+msgstr "明细帐期间"
#. module: account
-#: code:addons/account/account_move_line.py:732
-#: code:addons/account/account_move_line.py:776
+#: code:addons/account/account_move_line.py:723
+#: code:addons/account/account_move_line.py:767
#, python-format
msgid "To reconcile the entries company should be the same for all entries"
msgstr ""
@@ -688,7 +690,7 @@ msgstr "应收款科目"
#. module: account
#: model:ir.model,name:account.model_account_report_general_ledger
msgid "General Ledger Report"
-msgstr ""
+msgstr "总账报表"
#. module: account
#: view:account.invoice:0
@@ -708,7 +710,7 @@ msgstr ""
#. module: account
#: field:account.partner.reconcile.process,today_reconciled:0
msgid "Partners Reconciled Today"
-msgstr ""
+msgstr "今天合作伙伴不开心"
#. module: account
#: selection:account.payment.term.line,value:0
@@ -726,13 +728,13 @@ msgstr "表"
#: model:ir.model,name:account.model_project_account_analytic_line
#, python-format
msgid "Analytic Entries by line"
-msgstr ""
+msgstr "按行显示分析科目数据"
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:39
+#: code:addons/account/wizard/account_change_currency.py:38
#, python-format
msgid "You can only change currency for Draft Invoice !"
-msgstr ""
+msgstr "您只能更改发票草案金额!"
#. module: account
#: view:account.analytic.journal:0
@@ -769,17 +771,17 @@ msgstr "反核销"
#. module: account
#: model:ir.model,name:account.model_account_analytic_Journal_report
msgid "Account Analytic Journal"
-msgstr ""
+msgstr "科目分析报表"
#. module: account
#: model:ir.model,name:account.model_account_automatic_reconcile
msgid "Automatic Reconcile"
-msgstr ""
+msgstr "自己核销"
#. module: account
#: view:account.payment.term.line:0
msgid "Due date Computation"
-msgstr ""
+msgstr "计算截止日期"
#. module: account
#: report:account.analytic.account.quantity_cost_ledger:0
@@ -793,7 +795,7 @@ msgstr "成本业务类型/凭证名称"
#: selection:report.account.sales,month:0
#: selection:report.account_type.sales,month:0
msgid "September"
-msgstr ""
+msgstr "9月"
#. module: account
#: selection:account.subscription,period_type:0
@@ -804,7 +806,7 @@ msgstr "天"
#: help:account.account.template,nocreate:0
msgid ""
"If checked, the new chart of accounts will not contain this by default."
-msgstr ""
+msgstr "如果选中,这一点的新报表科目将不包含在默认情况下。"
#. module: account
#: code:addons/account/wizard/account_invoice_refund.py:102
@@ -812,7 +814,7 @@ msgstr ""
msgid ""
"Can not %s invoice which is already reconciled, invoice should be "
"unreconciled first. You can only Refund this invoice"
-msgstr ""
+msgstr "无法%s该发票,该发票已核销,除非先将其反核销。目前只能对该发票做退款处理"
#. module: account
#: model:ir.actions.act_window,name:account.action_subscription_form_new
@@ -827,10 +829,10 @@ msgstr "计算"
#. module: account
#: view:account.move.line:0
msgid "Next Partner to reconcile"
-msgstr ""
+msgstr "与下一个合作伙伴对帐"
#. module: account
-#: code:addons/account/account_move_line.py:1191
+#: code:addons/account/account_move_line.py:1197
#, python-format
msgid ""
"You can not do this modification on a confirmed entry ! Please note that you "
@@ -841,7 +843,7 @@ msgstr "您不能修改已确认的凭证!您只能修改一些非重要字段
#: view:account.invoice.report:0
#: field:account.invoice.report,delay_to_pay:0
msgid "Avg. Delay To Pay"
-msgstr ""
+msgstr "延迟付款平均时间"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_tax_chart
@@ -864,7 +866,7 @@ msgstr "到期"
#: view:account.invoice.report:0
#: field:account.invoice.report,price_total_tax:0
msgid "Total With Tax"
-msgstr ""
+msgstr "总税单(纳税合计)"
#. module: account
#: view:account.invoice:0
@@ -872,7 +874,7 @@ msgstr ""
#: view:validate.account.move:0
#: view:validate.account.move.lines:0
msgid "Approve"
-msgstr ""
+msgstr "核准"
#. module: account
#: view:account.invoice:0
@@ -894,22 +896,22 @@ msgstr "合并"
#: view:account.invoice.report:0
#: view:account.move.line:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "增加筛选条件"
#. module: account
#: model:ir.ui.menu,name:account.menu_account_central_journal
msgid "Centralizing Journal"
-msgstr ""
+msgstr "合并报表"
#. module: account
#: selection:account.journal,type:0
msgid "Sale Refund"
-msgstr ""
+msgstr "销售退款(货)"
#. module: account
#: model:process.node,note:account.process_node_accountingstatemententries0
msgid "Bank statement"
-msgstr ""
+msgstr "银行对帐单"
#. module: account
#: field:account.analytic.line,move_id:0
@@ -927,7 +929,7 @@ msgstr ""
#. module: account
#: view:account.analytic.line:0
msgid "Purchases"
-msgstr ""
+msgstr "采购单列表"
#. module: account
#: field:account.model,lines_id:0
@@ -952,11 +954,11 @@ msgid "Code"
msgstr "代码"
#. module: account
-#: code:addons/account/account.py:2083
+#: code:addons/account/account.py:2097
#: code:addons/account/account_bank_statement.py:350
-#: code:addons/account/account_move_line.py:170
+#: code:addons/account/account_move_line.py:169
#: code:addons/account/invoice.py:73
-#: code:addons/account/invoice.py:670
+#: code:addons/account/invoice.py:678
#: code:addons/account/wizard/account_use_model.py:81
#, python-format
msgid "No Analytic Journal !"
@@ -974,13 +976,13 @@ msgstr "业务伙伴余额"
#. module: account
#: field:account.bank.accounts.wizard,acc_name:0
msgid "Account Name."
-msgstr ""
+msgstr "科目名称"
#. module: account
#: field:account.chart.template,property_reserve_and_surplus_account:0
#: field:res.company,property_reserve_and_surplus_account:0
msgid "Reserve and Profit/Loss Account"
-msgstr ""
+msgstr "所有者权益类科目"
#. module: account
#: field:report.account.receivable,name:0
@@ -997,12 +999,12 @@ msgstr "横向模式"
#. module: account
#: view:board.board:0
msgid "Customer Invoices to Approve"
-msgstr ""
+msgstr "客户发票审核"
#. module: account
#: help:account.fiscalyear.close,fy_id:0
msgid "Select a Fiscal year to close"
-msgstr ""
+msgstr "关闭一个财政年度"
#. module: account
#: help:account.account,user_type:0
@@ -1010,12 +1012,12 @@ msgstr ""
msgid ""
"These types are defined according to your country. The type contains more "
"information about the account and its specificities."
-msgstr ""
+msgstr "根据你的国家定义这些类型,该类型包含有关科目及其具体的信息。"
#. module: account
#: view:account.tax:0
msgid "Applicability Options"
-msgstr ""
+msgstr "可选项"
#. module: account
#: report:account.partner.balance:0
@@ -1026,16 +1028,15 @@ msgstr "争议中"
#: model:ir.actions.act_window,name:account.action_view_bank_statement_tree
#: model:ir.ui.menu,name:account.journal_cash_move_lines
msgid "Cash Registers"
-msgstr ""
+msgstr "出纳现金"
#. module: account
#: selection:account.account.type,report_type:0
msgid "Profit & Loss (Expense Accounts)"
-msgstr ""
+msgstr "损益表"
#. module: account
#: report:account.analytic.account.journal:0
-#: report:account.move.voucher:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
msgid "-"
@@ -1044,7 +1045,7 @@ msgstr "-"
#. module: account
#: view:account.analytic.account:0
msgid "Manager"
-msgstr ""
+msgstr "经理"
#. module: account
#: view:account.subscription.generate:0
@@ -1054,7 +1055,7 @@ msgstr ""
#. module: account
#: selection:account.bank.accounts.wizard,account_type:0
msgid "Bank"
-msgstr ""
+msgstr "银行"
#. module: account
#: field:account.period,date_start:0
@@ -1064,7 +1065,7 @@ msgstr "开始会计期间"
#. module: account
#: model:process.transition,name:account.process_transition_confirmstatementfromdraft0
msgid "Confirm statement"
-msgstr ""
+msgstr "确认报表"
#. module: account
#: field:account.fiscal.position.tax,tax_dest_id:0
@@ -1085,11 +1086,12 @@ msgid ""
"purchase orders or receipts. This way, you can control the invoice from your "
"supplier according to what you purchased or received."
msgstr ""
+"供应商发票,您可以输入和管理你的供应商发出的发票。 OpenERP还可以自动生成草案从采购订单发票或收据。这样,您就可以控制从供应商的发票."
#. module: account
#: view:account.invoice.cancel:0
msgid "Cancel Invoices"
-msgstr ""
+msgstr "作废发票"
#. module: account
#: view:account.unreconcile.reconcile:0
@@ -1121,6 +1123,7 @@ msgstr "# 处理"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
@@ -1128,7 +1131,7 @@ msgid "Entry Label"
msgstr "凭证标签"
#. module: account
-#: code:addons/account/account.py:976
+#: code:addons/account/account.py:990
#, python-format
msgid "You can not modify/delete a journal with entries for this period !"
msgstr "您不能修改/删除这业务类型和在此会计期间的凭证!"
@@ -1175,19 +1178,19 @@ msgstr "科目"
#. module: account
#: field:account.tax,include_base_amount:0
msgid "Included in base amount"
-msgstr ""
+msgstr "含基数"
#. module: account
#: view:account.entries.report:0
#: model:ir.actions.act_window,name:account.action_account_entries_report_all
#: model:ir.ui.menu,name:account.menu_action_account_entries_report_all
msgid "Entries Analysis"
-msgstr ""
+msgstr "项目分析"
#. module: account
#: field:account.account,level:0
msgid "Level"
-msgstr ""
+msgstr "级别"
#. module: account
#: report:account.invoice:0
@@ -1208,7 +1211,7 @@ msgstr "税"
#: code:addons/account/wizard/account_report_common.py:120
#, python-format
msgid "Select a starting and an ending period"
-msgstr ""
+msgstr "选择一个开始和结束时间"
#. module: account
#: model:ir.model,name:account.model_account_account_template
@@ -1218,12 +1221,12 @@ msgstr "科目模板"
#. module: account
#: view:account.tax.code.template:0
msgid "Search tax template"
-msgstr ""
+msgstr "搜索税模板"
#. module: account
#: report:account.invoice:0
msgid "Your Reference"
-msgstr ""
+msgstr "你的关联单号"
#. module: account
#: view:account.move.reconcile:0
@@ -1242,12 +1245,12 @@ msgstr "逾期付款"
#: report:account.third_party_ledger:0
#: report:account.third_party_ledger_other:0
msgid "Initial Balance"
-msgstr ""
+msgstr "期初余额"
#. module: account
#: view:account.invoice:0
msgid "Reset to Draft"
-msgstr ""
+msgstr "重置为草稿"
#. module: account
#: view:wizard.multi.charts.accounts:0
@@ -1263,13 +1266,12 @@ msgstr "报表选项"
#. module: account
#: model:ir.model,name:account.model_account_entries_report
msgid "Journal Items Analysis"
-msgstr ""
+msgstr "日记帐明细分析"
#. module: account
-#: model:ir.actions.act_window,name:account.action_partner_all
#: model:ir.ui.menu,name:account.next_id_22
msgid "Partners"
-msgstr ""
+msgstr "业务伙伴列表"
#. module: account
#: view:account.bank.statement:0
@@ -1296,7 +1298,7 @@ msgid "Central Journal"
msgstr "主要的业务类型"
#. module: account
-#: code:addons/account/account_move_line.py:1271
+#: code:addons/account/account_move_line.py:1277
#, python-format
msgid "You can not use this general account in this journal !"
msgstr "在这业务类型您不能用这科目!"
@@ -1314,7 +1316,7 @@ msgstr "余额不为0"
#. module: account
#: view:account.tax:0
msgid "Search Taxes"
-msgstr ""
+msgstr "察找税种"
#. module: account
#: model:ir.model,name:account.model_account_analytic_cost_ledger
@@ -1329,7 +1331,7 @@ msgstr "创建凭证"
#. module: account
#: field:account.entries.report,nbr:0
msgid "# of Items"
-msgstr ""
+msgstr "项目"
#. module: account
#: field:account.automatic.reconcile,max_amount:0
@@ -1349,13 +1351,13 @@ msgstr "数字 #"
#. module: account
#: field:account.journal,entry_posted:0
msgid "Skip 'Draft' State for Manual Entries"
-msgstr ""
+msgstr "如果是手工分录的话就跳过“草稿”状态"
#. module: account
#: view:account.invoice.report:0
#: field:account.invoice.report,price_total:0
msgid "Total Without Tax"
-msgstr ""
+msgstr "不含税总金额"
#. module: account
#: model:ir.actions.act_window,help:account.action_move_journal_line
@@ -1369,12 +1371,12 @@ msgstr ""
#. module: account
#: view:account.entries.report:0
msgid "# of Entries "
-msgstr ""
+msgstr "号分录 "
#. module: account
#: model:ir.model,name:account.model_temp_range
msgid "A Temporary table used for Dashboard view"
-msgstr ""
+msgstr "用于仪表盘视图的临时表"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree4
@@ -1386,10 +1388,10 @@ msgstr "供应商红字发票"
#: view:account.payment.term.line:0
msgid ""
"Example: at 14 net days 2 percents, remaining amount at 30 days end of month."
-msgstr ""
+msgstr "例如:在14天内付款减百分之2,30天则没有减。"
#. module: account
-#: code:addons/account/invoice.py:815
+#: code:addons/account/invoice.py:823
#, python-format
msgid ""
"Cannot create the invoice !\n"
@@ -1400,7 +1402,7 @@ msgstr ""
#. module: account
#: field:account.installer.modules,account_anglo_saxon:0
msgid "Anglo-Saxon Accounting"
-msgstr ""
+msgstr "英国会计系统"
#. module: account
#: selection:account.account,type:0
@@ -1416,7 +1418,7 @@ msgstr "已关闭"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_recurrent_entries
msgid "Recurring Entries"
-msgstr ""
+msgstr "经常性项目"
#. module: account
#: model:ir.model,name:account.model_account_fiscal_position_template
@@ -1426,7 +1428,7 @@ msgstr "财务结构模板"
#. module: account
#: model:account.tax.code,name:account.account_tax_code_0
msgid "Tax Code Test"
-msgstr ""
+msgstr "测试税代码"
#. module: account
#: field:account.automatic.reconcile,reconciled:0
@@ -1462,18 +1464,18 @@ msgstr "未完税"
#. module: account
#: view:account.partner.reconcile.process:0
msgid "Go to next partner"
-msgstr ""
+msgstr "下一个合作伙伴"
#. module: account
#: view:account.bank.statement:0
msgid "Search Bank Statements"
-msgstr ""
+msgstr "查阅银行对帐单"
#. module: account
#: sql_constraint:account.model.line:0
msgid ""
"Wrong credit or debit value in model (Credit + Debit Must Be greater \"0\")!"
-msgstr ""
+msgstr "错误的现金或银行模型(信用+借方必须大于“0”)!"
#. module: account
#: view:account.chart.template:0
@@ -1502,12 +1504,12 @@ msgid ""
"and the closing balance is to be found on your statement. When you are in "
"the Payment column of a line, you can press F1 to open the reconciliation "
"form."
-msgstr ""
+msgstr "银行对帐单是在一个给定的时间上的存款帐户发生的明细。当是你的一个网上交易清单,你可以按F1打开核销的形式。"
#. module: account
#: report:account.analytic.account.cost_ledger:0
msgid "Date/Code"
-msgstr ""
+msgstr "日期/代码"
#. module: account
#: field:account.analytic.line,general_account_id:0
@@ -1535,7 +1537,7 @@ msgstr "发票"
#: model:process.node,note:account.process_node_analytic0
#: model:process.node,note:account.process_node_analyticcost0
msgid "Analytic costs to invoice"
-msgstr ""
+msgstr "开票成本分析"
#. module: account
#: view:ir.sequence:0
@@ -1548,10 +1550,9 @@ msgid "Separated Journal Sequences"
msgstr "分散的业务类型序列"
#. module: account
-#: field:account.bank.statement,user_id:0
#: view:account.invoice:0
msgid "Responsible"
-msgstr ""
+msgstr "负责人"
#. module: account
#: report:account.overdue:0
@@ -1561,14 +1562,14 @@ msgstr "小计 :"
#. module: account
#: model:ir.actions.act_window,name:account.action_report_account_type_sales_tree_all
msgid "Sales by Account Type"
-msgstr ""
+msgstr "销售科目类型"
#. module: account
#: view:account.invoice.refund:0
msgid ""
"Cancel Invoice: Creates the refund invoice, validate and reconcile it to "
"cancel the current invoice."
-msgstr ""
+msgstr "作废发票,退货发票,核销当前发票"
#. module: account
#: model:ir.ui.menu,name:account.periodical_processing_invoicing
@@ -1594,12 +1595,12 @@ msgstr "年合计"
#. module: account
#: model:ir.actions.report.xml,name:account.report_account_voucher_new
msgid "Print Voucher"
-msgstr ""
+msgstr "打印原始凭证"
#. module: account
#: view:account.change.currency:0
msgid "This wizard will change the currency of the invoice"
-msgstr ""
+msgstr "该向导将改变发票的币种"
#. module: account
#: model:ir.actions.act_window,help:account.action_account_chart
@@ -1612,10 +1613,10 @@ msgstr ""
#. module: account
#: constraint:account.fiscalyear:0
msgid "Error! You cannot define overlapping fiscal years"
-msgstr ""
+msgstr "错误!你不能重复定义会计年度"
#. module: account
-#: code:addons/account/account_move_line.py:808
+#: code:addons/account/account_move_line.py:799
#, python-format
msgid "The account is not defined to be reconciled !"
msgstr "科目未设定为可核销!"
@@ -1623,14 +1624,14 @@ msgstr "科目未设定为可核销!"
#. module: account
#: field:account.cashbox.line,pieces:0
msgid "Values"
-msgstr ""
+msgstr "值"
#. module: account
#: help:account.journal.period,active:0
msgid ""
"If the active field is set to False, it will allow you to hide the journal "
"period without removing it."
-msgstr ""
+msgstr "如果此字段设置为False,你可以让他隐藏而不删除它的报表。"
#. module: account
#: view:res.partner:0
@@ -1648,7 +1649,7 @@ msgid "Receivables & Payables"
msgstr "应收&应付"
#. module: account
-#: code:addons/account/account_move_line.py:815
+#: code:addons/account/account_move_line.py:806
#, python-format
msgid "You have to provide an account for the write off entry !"
msgstr "必须为差异凭证指定默认借贷方科目"
@@ -1656,17 +1657,17 @@ msgstr "必须为差异凭证指定默认借贷方科目"
#. module: account
#: model:ir.model,name:account.model_account_common_journal_report
msgid "Account Common Journal Report"
-msgstr ""
+msgstr "科目常用报表"
#. module: account
#: selection:account.partner.balance,display_partner:0
msgid "All Partners"
-msgstr ""
+msgstr "所有合作伙伴"
#. module: account
#: report:account.move.voucher:0
msgid "Ref. :"
-msgstr ""
+msgstr "关联单号:"
#. module: account
#: view:account.analytic.chart:0
@@ -1676,7 +1677,7 @@ msgstr "辅助核算项目一览表"
#. module: account
#: view:account.analytic.line:0
msgid "My Entries"
-msgstr ""
+msgstr "我的工作区"
#. module: account
#: report:account.overdue:0
@@ -1684,7 +1685,7 @@ msgid "Customer Ref:"
msgstr "客户关联:"
#. module: account
-#: code:addons/account/account_cash_statement.py:328
+#: code:addons/account/account_cash_statement.py:329
#, python-format
msgid "User %s does not have rights to access %s journal !"
msgstr ""
@@ -1702,10 +1703,10 @@ msgstr "银行单据草稿"
#. module: account
#: view:account.tax:0
msgid "Tax Declaration: Credit Notes"
-msgstr ""
+msgstr "纳税申报:欠款"
#. module: account
-#: code:addons/account/account.py:499
+#: code:addons/account/account.py:509
#, python-format
msgid "You cannot deactivate an account that contains account moves."
msgstr "你不能停用这科目因为它有凭证"
@@ -1718,10 +1719,10 @@ msgstr "贷方金额"
#. module: account
#: constraint:account.move.line:0
msgid "You can not create move line on closed account."
-msgstr ""
+msgstr "您不能在关闭的科目上建立分录。"
#. module: account
-#: code:addons/account/account.py:519
+#: code:addons/account/account.py:529
#, python-format
msgid ""
"You cannot change the type of account from 'Closed' to any other type which "
@@ -1731,65 +1732,65 @@ msgstr "你不能改变包含\"已关闭\"科目类型的凭证!"
#. module: account
#: view:res.company:0
msgid "Reserve And Profit/Loss Account"
-msgstr ""
+msgstr "损益类科目"
#. module: account
#: sql_constraint:account.move.line:0
msgid "Wrong credit or debit value in accounting entry !"
-msgstr ""
+msgstr "错误的出纳会计分录"
#. module: account
#: view:account.invoice.report:0
#: model:ir.actions.act_window,name:account.action_account_invoice_report_all
#: model:ir.ui.menu,name:account.menu_action_account_invoice_report_all
msgid "Invoices Analysis"
-msgstr ""
+msgstr "开票分析"
#. module: account
#: model:ir.model,name:account.model_account_period_close
msgid "period close"
-msgstr ""
+msgstr "关闭一个会计期间"
#. module: account
#: view:account.installer:0
msgid "Configure Fiscal Year"
-msgstr ""
+msgstr "配置会计年度"
#. module: account
#: model:ir.actions.act_window,name:account.action_project_account_analytic_line_form
msgid "Entries By Line"
-msgstr ""
+msgstr "进行中的项目"
#. module: account
#: report:account.tax.code.entries:0
msgid "A/c Code"
-msgstr ""
+msgstr "A/c编码"
#. module: account
#: field:account.invoice,move_id:0
#: field:account.invoice,move_name:0
msgid "Journal Entry"
-msgstr ""
+msgstr "分类账"
#. module: account
#: view:account.tax:0
msgid "Tax Declaration: Invoices"
-msgstr ""
+msgstr "纳税申报:发票"
#. module: account
#: field:account.cashbox.line,subtotal:0
msgid "Sub Total"
-msgstr ""
+msgstr "小计"
#. module: account
#: view:account.account:0
msgid "Treasury Analysis"
-msgstr ""
+msgstr "出纳报表"
#. module: account
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
-msgstr ""
+msgstr "错误!您不能创建循环的公司。"
#. module: account
#: view:account.analytic.account:0
@@ -1812,12 +1813,12 @@ msgstr "生效"
#: model:ir.actions.act_window,name:account.action_account_print_journal
#: model:ir.model,name:account.model_account_print_journal
msgid "Account Print Journal"
-msgstr ""
+msgstr "打印科目明细帐"
#. module: account
#: model:ir.model,name:account.model_product_category
msgid "Product Category"
-msgstr ""
+msgstr "产品类别"
#. module: account
#: selection:account.account.type,report_type:0
@@ -1827,18 +1828,18 @@ msgstr "/"
#. module: account
#: field:account.bs.report,reserve_account_id:0
msgid "Reserve & Profit/Loss Account"
-msgstr ""
+msgstr "损益类科目"
#. module: account
#: help:account.bank.statement,balance_end:0
msgid "Closing balance based on Starting Balance and Cash Transactions"
-msgstr ""
+msgstr "关闭现金交易,出纳对帐"
#. module: account
#: model:process.node,note:account.process_node_reconciliation0
#: model:process.node,note:account.process_node_supplierreconciliation0
msgid "Comparison between accounting and payment entries"
-msgstr ""
+msgstr "比较会计和支付项目"
#. module: account
#: view:account.tax:0
@@ -1859,7 +1860,7 @@ msgstr "勾选此项, 如果你想每个新建的业务类型使用不同的序
msgid ""
"It adds the currency column if the currency is different then the company "
"currency"
-msgstr ""
+msgstr "此选项增加一个辅助核算币种,他会自动转为记帐本位币。"
#. module: account
#: help:account.journal,allow_date:0
@@ -1871,19 +1872,19 @@ msgstr ""
#. module: account
#: model:ir.actions.act_window,name:account.action_account_pl_report
msgid "Account Profit And Loss"
-msgstr ""
+msgstr "帐户盈亏"
#. module: account
#: field:account.installer,config_logo:0
#: field:account.installer.modules,config_logo:0
#: field:wizard.multi.charts.accounts,config_logo:0
msgid "Image"
-msgstr ""
+msgstr "图像"
#. module: account
#: report:account.move.voucher:0
msgid "Canceled"
-msgstr ""
+msgstr "已作废"
#. module: account
#: view:account.invoice:0
@@ -1896,7 +1897,7 @@ msgstr "未完税金额"
msgid ""
"If the active field is set to False, it will allow you to hide the tax "
"without removing it."
-msgstr ""
+msgstr "如果此字段设置为False,你可以让他隐藏而不删除它的税表。"
#. module: account
#: help:account.bank.statement,name:0
@@ -1932,7 +1933,7 @@ msgstr "打开凭证"
#. module: account
#: field:account.automatic.reconcile,account_ids:0
msgid "Accounts to Reconcile"
-msgstr ""
+msgstr "科目核销"
#. module: account
#: model:process.transition,note:account.process_transition_filestatement0
@@ -1942,7 +1943,7 @@ msgstr ""
#. module: account
#: model:process.node,name:account.process_node_importinvoice0
msgid "Import from invoice"
-msgstr ""
+msgstr "进口发票"
#. module: account
#: selection:account.entries.report,month:0
@@ -1951,7 +1952,7 @@ msgstr ""
#: selection:report.account.sales,month:0
#: selection:report.account_type.sales,month:0
msgid "January"
-msgstr ""
+msgstr "一月"
#. module: account
#: view:account.journal:0
@@ -1961,12 +1962,12 @@ msgstr ""
#. module: account
#: view:account.entries.report:0
msgid "This F.Year"
-msgstr ""
+msgstr "本财年"
#. module: account
#: view:account.tax.chart:0
msgid "Account tax charts"
-msgstr ""
+msgstr "纳税明细表"
#. module: account
#: constraint:account.period:0
@@ -1987,10 +1988,10 @@ msgstr "形式发票"
#: code:addons/account/installer.py:348
#, python-format
msgid " Journal"
-msgstr ""
+msgstr " 日记帐"
#. module: account
-#: code:addons/account/account.py:1319
+#: code:addons/account/account.py:1333
#, python-format
msgid ""
"There is no default default debit account defined \n"
@@ -2012,7 +2013,7 @@ msgstr ""
#. module: account
#: view:account.chart.template:0
msgid "Search Chart of Account Templates"
-msgstr ""
+msgstr "搜索图表科目模板"
#. module: account
#: view:account.installer:0
@@ -2042,7 +2043,7 @@ msgid "Description"
msgstr "说明"
#. module: account
-#: code:addons/account/account.py:2844
+#: code:addons/account/account.py:2888
#: code:addons/account/installer.py:498
#, python-format
msgid "ECNJ"
@@ -2062,7 +2063,7 @@ msgid "Income Account"
msgstr "收入科目"
#. module: account
-#: code:addons/account/invoice.py:352
+#: code:addons/account/invoice.py:351
#, python-format
msgid "There is no Accounting Journal of type Sale/Purchase defined!"
msgstr "没定义销售/采购业务类型!"
@@ -2073,6 +2074,7 @@ msgid "Accounting Properties"
msgstr "会计属性"
#. module: account
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.print.journal,sort_selection:0
msgid "Entries Sorted By"
@@ -2081,17 +2083,17 @@ msgstr "凭证排序按"
#. module: account
#: field:account.change.currency,currency_id:0
msgid "Change to"
-msgstr ""
+msgstr "更改为"
#. module: account
#: view:account.entries.report:0
msgid "# of Products Qty "
-msgstr ""
+msgstr "产品数量 "
#. module: account
#: model:ir.model,name:account.model_product_template
msgid "Product Template"
-msgstr ""
+msgstr "产品模板"
#. module: account
#: report:account.account.balance:0
@@ -2101,6 +2103,7 @@ msgstr ""
#: field:account.fiscalyear,name:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.journal.period,fiscalyear_id:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -2189,7 +2192,7 @@ msgstr "待处理"
#: model:process.node,note:account.process_node_draftinvoices0
#: model:process.node,note:account.process_node_supplierdraftinvoices0
msgid "Draft state of an invoice"
-msgstr ""
+msgstr "草稿状态的发票"
#. module: account
#: help:account.account,reconcile:0
@@ -2200,7 +2203,7 @@ msgstr "勾选, 如果用户可以在这科目核销凭证."
#. module: account
#: view:account.partner.reconcile.process:0
msgid "Partner Reconciliation"
-msgstr ""
+msgstr "往来业务核销"
#. module: account
#: field:account.tax,tax_code_id:0
@@ -2209,7 +2212,7 @@ msgid "Account Tax Code"
msgstr "税事务科目"
#. module: account
-#: code:addons/account/invoice.py:545
+#: code:addons/account/invoice.py:552
#, python-format
msgid ""
"Can't find any account journal of %s type for this company.\n"
@@ -2227,7 +2230,7 @@ msgstr "基础税事务代码"
#. module: account
#: help:account.invoice.tax,sequence:0
msgid "Gives the sequence order when displaying a list of invoice tax."
-msgstr ""
+msgstr "按顺序显示发票税列表."
#. module: account
#: field:account.tax,base_sign:0
@@ -2257,7 +2260,7 @@ msgstr "借方汇总"
#: view:account.invoice.confirm:0
#: model:ir.actions.act_window,name:account.action_account_invoice_confirm
msgid "Confirm Draft Invoices"
-msgstr ""
+msgstr "草案确认发票"
#. module: account
#: field:account.entries.report,day:0
@@ -2266,12 +2269,12 @@ msgstr ""
#: view:analytic.entries.report:0
#: field:analytic.entries.report,day:0
msgid "Day"
-msgstr ""
+msgstr "日"
#. module: account
#: model:ir.actions.act_window,name:account.act_account_renew_view
msgid "Accounts to Renew"
-msgstr ""
+msgstr "延续科目有效期"
#. module: account
#: model:ir.model,name:account.model_account_model_line
@@ -2279,11 +2282,11 @@ msgid "Account Model Entries"
msgstr "凭证模板"
#. module: account
-#: code:addons/account/account.py:2796
+#: code:addons/account/account.py:2840
#: code:addons/account/installer.py:454
#, python-format
msgid "EXJ"
-msgstr ""
+msgstr "EXJ"
#. module: account
#: field:product.template,supplier_taxes_id:0
@@ -2310,7 +2313,7 @@ msgstr "选择会计期间"
#. module: account
#: model:ir.ui.menu,name:account.menu_account_pp_statements
msgid "Statements"
-msgstr ""
+msgstr "描述"
#. module: account
#: report:account.analytic.account.journal:0
@@ -2322,18 +2325,18 @@ msgstr "凭证名称"
msgid ""
"The fiscal position will determine taxes and the accounts used for the "
"partner."
-msgstr ""
+msgstr "会计制度决定税的科目."
#. module: account
#: view:account.print.journal:0
msgid ""
"This report gives you an overview of the situation of a specific journal"
-msgstr ""
+msgstr "这份报告是给你一个特定财务情况概述"
#. module: account
#: constraint:product.category:0
msgid "Error ! You can not create recursive categories."
-msgstr ""
+msgstr "错误!你不能创建递归的类型."
#. module: account
#: report:account.invoice:0
@@ -2362,10 +2365,10 @@ msgstr "辅助核算项目"
#: model:ir.ui.menu,name:account.menu_action_account_form
#: model:ir.ui.menu,name:account.menu_analytic
msgid "Accounts"
-msgstr ""
+msgstr "科目"
#. module: account
-#: code:addons/account/invoice.py:351
+#: code:addons/account/invoice.py:350
#, python-format
msgid "Configuration Error!"
msgstr "设置错误!"
@@ -2374,16 +2377,15 @@ msgstr "设置错误!"
#: view:account.invoice.report:0
#: field:account.invoice.report,price_average:0
msgid "Average Price"
-msgstr ""
+msgstr "平均价格"
#. module: account
-#: report:account.move.voucher:0
#: report:account.overdue:0
msgid "Date:"
msgstr "日期:"
#. module: account
-#: code:addons/account/account.py:640
+#: code:addons/account/account.py:654
#, python-format
msgid ""
"You cannot modify company of this journal as its related record exist in "
@@ -2393,12 +2395,12 @@ msgstr ""
#. module: account
#: report:account.journal.period.print:0
msgid "Label"
-msgstr ""
+msgstr "标签"
#. module: account
#: view:account.tax:0
msgid "Accounting Information"
-msgstr ""
+msgstr "会计信息"
#. module: account
#: view:account.tax:0
@@ -2419,6 +2421,7 @@ msgstr "折扣(%)"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.overdue:0
#: report:account.third_party_ledger:0
@@ -2429,12 +2432,12 @@ msgstr "关联单号"
#. module: account
#: help:account.move.line,tax_code_id:0
msgid "The Account can either be a base tax code or a tax code account."
-msgstr ""
+msgstr "该科目可以是一个基本的税法或税法帐户。(如营业税)"
#. module: account
#: model:ir.ui.menu,name:account.menu_automatic_reconcile
msgid "Automatic Reconciliation"
-msgstr ""
+msgstr "自动核销"
#. module: account
#: field:account.invoice,reconciled:0
@@ -2452,7 +2455,7 @@ msgstr "退税事务代码"
#: model:ir.actions.act_window,name:account.action_bank_statement_tree
#: model:ir.ui.menu,name:account.menu_bank_statement_tree
msgid "Bank Statements"
-msgstr ""
+msgstr "银行对帐单"
#. module: account
#: selection:account.tax.template,applicable_type:0
@@ -2465,7 +2468,7 @@ msgstr "真"
#: view:account.move:0
#: view:account.move.line:0
msgid "Dates"
-msgstr ""
+msgstr "日期"
#. module: account
#: field:account.tax,parent_id:0
@@ -2478,7 +2481,7 @@ msgstr "上级税科目"
msgid ""
"Automatically generate entries based on what has been entered in the system "
"before a specific date."
-msgstr ""
+msgstr "自动生成以这之前的预约项目."
#. module: account
#: view:account.aged.trial.balance:0
@@ -2491,7 +2494,7 @@ msgstr "账龄分析表"
#: model:process.transition,name:account.process_transition_entriesreconcile0
#: model:process.transition,name:account.process_transition_supplierentriesreconcile0
msgid "Accounting entries"
-msgstr ""
+msgstr "会计分录"
#. module: account
#: field:account.invoice.line,discount:0
@@ -2512,31 +2515,31 @@ msgstr ""
#: model:ir.actions.server,name:account.ir_actions_server_action_wizard_multi_chart
#: model:ir.ui.menu,name:account.menu_act_ir_actions_bleble
msgid "New Company Financial Setting"
-msgstr ""
+msgstr "新公司财务设置"
#. module: account
#: model:ir.actions.act_window,name:account.action_report_account_sales_tree_all
#: view:report.account.sales:0
#: view:report.account_type.sales:0
msgid "Sales by Account"
-msgstr ""
+msgstr "销售科目"
#. module: account
#: view:account.use.model:0
msgid "This wizard will create recurring accounting entries"
-msgstr ""
+msgstr "该向导将创建经常性的会计分录"
#. module: account
-#: code:addons/account/account.py:1181
+#: code:addons/account/account.py:1195
#, python-format
msgid "No sequence defined on the journal !"
-msgstr ""
+msgstr "在日记帐中没有定义的序列!"
#. module: account
-#: code:addons/account/account.py:2083
+#: code:addons/account/account.py:2097
#: code:addons/account/account_bank_statement.py:350
-#: code:addons/account/account_move_line.py:170
-#: code:addons/account/invoice.py:670
+#: code:addons/account/account_move_line.py:169
+#: code:addons/account/invoice.py:678
#: code:addons/account/wizard/account_use_model.py:81
#, python-format
msgid "You have to define an analytic journal on the '%s' journal!"
@@ -2569,7 +2572,7 @@ msgstr "会计期间到"
#: selection:report.account.sales,month:0
#: selection:report.account_type.sales,month:0
msgid "August"
-msgstr ""
+msgstr "8月"
#. module: account
#: code:addons/account/account_bank_statement.py:306
@@ -2601,7 +2604,7 @@ msgstr "关联单号数"
#: selection:report.account.sales,month:0
#: selection:report.account_type.sales,month:0
msgid "October"
-msgstr ""
+msgstr "10月"
#. module: account
#: help:account.move.line,quantity:0
@@ -2613,7 +2616,7 @@ msgstr ""
#. module: account
#: view:account.payment.term.line:0
msgid "Line 2:"
-msgstr ""
+msgstr "第2行"
#. module: account
#: field:account.journal.column,required:0
@@ -2646,7 +2649,7 @@ msgstr "基础税事务代码的金额"
#. module: account
#: field:wizard.multi.charts.accounts,sale_tax:0
msgid "Default Sale Tax"
-msgstr ""
+msgstr "默认销项税"
#. module: account
#: help:account.model.line,date_maturity:0
@@ -2654,7 +2657,7 @@ msgid ""
"The maturity date of the generated entries for this model. You can choose "
"between the creation date or the creation date of the entries plus the "
"partner payment terms."
-msgstr ""
+msgstr "您可以选择开始日期且加上该项止合作伙伴的付款条件,由此模型生成的项目的到期日."
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_accounting
@@ -2665,7 +2668,7 @@ msgstr "财务会计"
#: view:account.pl.report:0
#: model:ir.ui.menu,name:account.menu_account_pl_report
msgid "Profit And Loss"
-msgstr ""
+msgstr "盈利或亏损"
#. module: account
#: view:account.fiscal.position:0
@@ -2696,7 +2699,7 @@ msgid "Analytic Entries"
msgstr "辅助核算凭证"
#. module: account
-#: code:addons/account/account.py:822
+#: code:addons/account/account.py:836
#, python-format
msgid ""
"No fiscal year defined for this date !\n"
@@ -2728,12 +2731,12 @@ msgstr "这用户负责这业务类型"
#. module: account
#: view:account.period:0
msgid "Search Period"
-msgstr ""
+msgstr "搜寻时期"
#. module: account
#: view:account.change.currency:0
msgid "Invoice Currency"
-msgstr ""
+msgstr "货币种类"
#. module: account
#: field:account.payment.term,line_ids:0
@@ -2743,7 +2746,7 @@ msgstr "条款"
#. module: account
#: field:account.bank.statement,total_entry_encoding:0
msgid "Cash Transaction"
-msgstr ""
+msgstr "现金交易"
#. module: account
#: view:res.partner:0
@@ -2779,7 +2782,7 @@ msgstr "条款名称"
#. module: account
#: view:account.fiscalyear:0
msgid "Search Fiscalyear"
-msgstr ""
+msgstr "搜索会计年度"
#. module: account
#: selection:account.tax,applicable_type:0
@@ -2789,7 +2792,7 @@ msgstr ""
#. module: account
#: view:account.analytic.line:0
msgid "Total Quantity"
-msgstr ""
+msgstr "合计数量"
#. module: account
#: field:account.move.line.reconcile.writeoff,writeoff_acc_id:0
@@ -2822,11 +2825,11 @@ msgid "BNK%s"
msgstr ""
#. module: account
-#: code:addons/account/account.py:2906
+#: code:addons/account/account.py:2950
#: code:addons/account/installer.py:296
#, python-format
msgid "BNK"
-msgstr ""
+msgstr "银行"
#. module: account
#: field:account.move.line,analytic_lines:0
@@ -2851,17 +2854,17 @@ msgstr "税事务模板"
#. module: account
#: view:account.subscription:0
msgid "Starts on"
-msgstr ""
+msgstr "开始"
#. module: account
#: model:ir.model,name:account.model_account_partner_ledger
msgid "Account Partner Ledger"
-msgstr ""
+msgstr "合作伙伴会计帐本(往来帐)"
#. module: account
#: help:account.journal.column,sequence:0
msgid "Gives the sequence order to journal column."
-msgstr ""
+msgstr "给日记帐排序号"
#. module: account
#: view:account.tax.template:0
@@ -2873,7 +2876,7 @@ msgstr "税说明"
#: help:account.account.template,currency_id:0
#: help:account.bank.accounts.wizard,currency_id:0
msgid "Forces all moves for this account to have this secondary currency."
-msgstr ""
+msgstr "将此科目的所有发生都转移到他的二级科目。"
#. module: account
#: model:ir.actions.act_window,help:account.action_validate_account_move_line
@@ -2896,7 +2899,7 @@ msgstr "从模板产生科目一览表"
#. module: account
#: model:ir.model,name:account.model_account_unreconcile_reconcile
msgid "Account Unreconcile Reconcile"
-msgstr ""
+msgstr "科目核销反核销"
#. module: account
#: help:account.account.type,close_method:0
@@ -2931,6 +2934,7 @@ msgstr "为使用费用科目而留空"
#: field:account.common.report,journal_ids:0
#: report:account.general.journal:0
#: field:account.general.journal,journal_ids:0
+#: report:account.general.ledger_landscape:0
#: view:account.journal.period:0
#: report:account.partner.balance:0
#: field:account.partner.balance,journal_ids:0
@@ -2952,7 +2956,7 @@ msgstr "业务类型"
#. module: account
#: field:account.partner.reconcile.process,to_reconcile:0
msgid "Remaining Partners"
-msgstr ""
+msgstr "剩下的合作伙伴"
#. module: account
#: view:account.subscription:0
@@ -2977,7 +2981,7 @@ msgstr "采购"
#: model:ir.actions.act_window,name:account.action_account_installer
#: view:wizard.multi.charts.accounts:0
msgid "Accounting Application Configuration"
-msgstr ""
+msgstr "会计应用程序配置"
#. module: account
#: model:ir.actions.act_window,name:account.open_board_account
@@ -2991,7 +2995,7 @@ msgid "Starting Balance"
msgstr "开始余额"
#. module: account
-#: code:addons/account/invoice.py:1284
+#: code:addons/account/invoice.py:1298
#, python-format
msgid "No Partner Defined !"
msgstr "未定义业务伙伴!"
@@ -3018,12 +3022,12 @@ msgstr "增值税"
msgid ""
"The amount expressed in the related account currency if not equal to the "
"company one."
-msgstr ""
+msgstr "如果不是同一公司, 这金额表示相关项的货币"
#. module: account
#: report:account.move.voucher:0
msgid "Journal:"
-msgstr ""
+msgstr "账簿:"
#. module: account
#: view:account.bank.statement:0
@@ -3033,7 +3037,6 @@ msgstr ""
#: view:account.invoice.report:0
#: selection:account.invoice.report,state:0
#: selection:account.journal.period,state:0
-#: report:account.move.voucher:0
#: view:account.subscription:0
#: selection:account.subscription,state:0
#: selection:report.invoice.created,state:0
@@ -3043,7 +3046,7 @@ msgstr "草稿"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_configuration_installer
msgid "Accounting Chart Configuration"
-msgstr ""
+msgstr "会计图表配置"
#. module: account
#: field:account.tax.code,notprintable:0
@@ -3055,17 +3058,17 @@ msgstr "不打印在发票上"
#: report:account.vat.declaration:0
#: field:account.vat.declaration,chart_tax_id:0
msgid "Chart of Tax"
-msgstr ""
+msgstr "税表"
#. module: account
#: view:account.journal:0
msgid "Search Account Journal"
-msgstr ""
+msgstr "搜索科目报表"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree_pending_invoice
msgid "Pending Invoice"
-msgstr ""
+msgstr "待开票"
#. module: account
#: selection:account.subscription,period_type:0
@@ -3075,17 +3078,17 @@ msgstr "年"
#. module: account
#: report:account.move.voucher:0
msgid "Authorised Signatory"
-msgstr ""
+msgstr "授权的签字人"
#. module: account
#: view:validate.account.move.lines:0
msgid ""
"All selected journal entries will be validated and posted. It means you "
"won't be able to modify their accounting fields anymore."
-msgstr ""
+msgstr "所有的凭证和报表将过帐,这意味着你将不能修改之个会计期间了。"
#. module: account
-#: code:addons/account/invoice.py:370
+#: code:addons/account/invoice.py:373
#, python-format
msgid "Cannot delete invoice(s) that are already opened or paid !"
msgstr "无法删除未结或已付款的发票!"
@@ -3118,12 +3121,12 @@ msgstr "税金额"
#. module: account
#: view:account.installer:0
msgid "Your bank and cash accounts"
-msgstr ""
+msgstr "你的科目和现金科目"
#. module: account
#: view:account.move:0
msgid "Search Move"
-msgstr ""
+msgstr "移动搜索"
#. module: account
#: field:account.tax.code,name:0
@@ -3143,10 +3146,10 @@ msgstr "发票草稿"
msgid ""
"Selected Invoice(s) cannot be cancelled as they are already in 'Cancelled' "
"or 'Done' state!"
-msgstr ""
+msgstr "选择的发票不能被取消,因为它们已“取消”或“完成”状态了!"
#. module: account
-#: code:addons/account/account.py:522
+#: code:addons/account/account.py:532
#, python-format
msgid ""
"You cannot change the type of account from '%s' to '%s' type as it contains "
@@ -3155,24 +3158,25 @@ msgstr "你不能修改这会计类型从'%s' 到 '%s' 因为它含有凭证"
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
msgid "Counterpart"
-msgstr ""
+msgstr "对方"
#. module: account
#: view:account.journal:0
msgid "Invoicing Data"
-msgstr ""
+msgstr "进销存数据"
#. module: account
#: field:account.invoice.report,state:0
msgid "Invoice State"
-msgstr ""
+msgstr "发票状态"
#. module: account
#: view:account.invoice.report:0
#: field:account.invoice.report,categ_id:0
msgid "Category of Product"
-msgstr ""
+msgstr "产品类别"
#. module: account
#: view:account.move:0
@@ -3180,18 +3184,18 @@ msgstr ""
#: view:account.move.line:0
#: field:account.move.line,narration:0
msgid "Narration"
-msgstr ""
+msgstr "描述"
#. module: account
#: view:account.addtmpl.wizard:0
#: model:ir.actions.act_window,name:account.action_account_addtmpl_wizard_form
msgid "Create Account"
-msgstr ""
+msgstr "创建科目"
#. module: account
#: model:ir.model,name:account.model_report_account_type_sales
msgid "Report of the Sales by Account Type"
-msgstr ""
+msgstr "销售报表的科目类型"
#. module: account
#: selection:account.account.type,close_method:0
@@ -3201,7 +3205,7 @@ msgstr "详情"
#. module: account
#: field:account.installer,bank_accounts_id:0
msgid "Your Bank and Cash Accounts"
-msgstr ""
+msgstr "您的银行及现金帐户"
#. module: account
#: report:account.invoice:0
@@ -3219,7 +3223,7 @@ msgstr "科目表"
#. module: account
#: view:account.tax.chart:0
msgid "(If you do not select period it will take all open periods)"
-msgstr ""
+msgstr "如果你不选择时间,将可以在任何期间看到"
#. module: account
#: field:account.journal,centralisation:0
@@ -3229,7 +3233,7 @@ msgstr "汇总副本"
#. module: account
#: model:ir.model,name:account.model_account_partner_reconcile_process
msgid "Reconcilation Process partner by partner"
-msgstr ""
+msgstr "核销合作进程的合作伙伴"
#. module: account
#: selection:account.automatic.reconcile,power:0
@@ -3257,6 +3261,7 @@ msgstr "如果你不选择会计年度将使用所有开启的会计年度"
#: field:account.entries.report,date:0
#: selection:account.general.journal,filter:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.invoice.report,date:0
#: report:account.journal.period.print:0
#: view:account.move:0
@@ -3300,7 +3305,7 @@ msgid "Chart of Accounts Template"
msgstr "科目表模板"
#. module: account
-#: code:addons/account/account.py:2095
+#: code:addons/account/account.py:2109
#, python-format
msgid ""
"Maturity date of entry line generated by model line '%s' of model '%s' is "
@@ -3309,13 +3314,13 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:810
+#: code:addons/account/account_move_line.py:801
#, python-format
msgid "Some entries are already reconciled !"
msgstr "部分凭证已核销!"
#. module: account
-#: code:addons/account/account.py:1204
+#: code:addons/account/account.py:1218
#, python-format
msgid ""
"You cannot validate a Journal Entry unless all journal items are in same "
@@ -3330,7 +3335,7 @@ msgstr "税"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_reporting_budgets
msgid "Budgets"
-msgstr ""
+msgstr "预算"
#. module: account
#: selection:account.aged.trial.balance,filter:0
@@ -3349,7 +3354,7 @@ msgstr ""
#: selection:account.report.general.ledger,filter:0
#: selection:account.vat.declaration,filter:0
msgid "No Filters"
-msgstr ""
+msgstr "无过滤器"
#. module: account
#: selection:account.analytic.journal,type:0
@@ -3359,7 +3364,7 @@ msgstr "状况"
#. module: account
#: view:res.partner:0
msgid "History"
-msgstr ""
+msgstr "历史记录"
#. module: account
#: help:account.tax,applicable_type:0
@@ -3379,7 +3384,7 @@ msgstr "可用代码(如果类型=代码)"
#: view:account.invoice.report:0
#: field:account.invoice.report,product_qty:0
msgid "Qty"
-msgstr ""
+msgstr "数量"
#. module: account
#: field:account.invoice.report,address_contact_id:0
@@ -3435,7 +3440,7 @@ msgid "Analytic Items"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1128
+#: code:addons/account/account_move_line.py:1134
#, python-format
msgid "Unable to change tax !"
msgstr "无法更改税目!"
@@ -3446,14 +3451,14 @@ msgid "#Entries"
msgstr ""
#. module: account
-#: code:addons/account/invoice.py:1422
+#: code:addons/account/invoice.py:1437
#, python-format
msgid ""
"You selected an Unit of Measure which is not compatible with the product."
msgstr ""
#. module: account
-#: code:addons/account/invoice.py:473
+#: code:addons/account/invoice.py:476
#, python-format
msgid ""
"The Payment Term of Supplier does not have Payment Term Lines(Computation) "
@@ -3491,7 +3496,7 @@ msgstr "名称"
#. module: account
#: model:ir.model,name:account.model_account_aged_trial_balance
msgid "Account Aged Trial balance Report"
-msgstr ""
+msgstr "账龄试算平衡表"
#. module: account
#: field:account.move.line,date:0
@@ -3570,7 +3575,7 @@ msgstr ""
#. module: account
#: field:account.partner.balance,display_partner:0
msgid "Display Partners"
-msgstr ""
+msgstr "显示业务伙伴"
#. module: account
#: view:account.invoice:0
@@ -3747,7 +3752,7 @@ msgid "Acc.Type"
msgstr ""
#. module: account
-#: code:addons/account/invoice.py:714
+#: code:addons/account/invoice.py:722
#, python-format
msgid "Global taxes defined, but are not in invoice lines !"
msgstr "已定义通用税目, 但未在发票行中出现!"
@@ -3806,7 +3811,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_analytic_line.py:91
+#: code:addons/account/account_analytic_line.py:90
#, python-format
msgid "There is no expense account defined for this product: \"%s\" (id:%d)"
msgstr ""
@@ -3981,7 +3986,7 @@ msgid "Credit Notes"
msgstr "退还"
#. module: account
-#: code:addons/account/account.py:2067
+#: code:addons/account/account.py:2081
#: code:addons/account/wizard/account_use_model.py:69
#, python-format
msgid "Unable to find a valid period !"
@@ -4052,11 +4057,11 @@ msgid "Change"
msgstr "改变"
#. module: account
-#: code:addons/account/account.py:1290
-#: code:addons/account/account.py:1318
-#: code:addons/account/account.py:1325
-#: code:addons/account/account_move_line.py:1055
-#: code:addons/account/invoice.py:896
+#: code:addons/account/account.py:1304
+#: code:addons/account/account.py:1332
+#: code:addons/account/account.py:1339
+#: code:addons/account/account_move_line.py:1061
+#: code:addons/account/invoice.py:904
#: code:addons/account/wizard/account_automatic_reconcile.py:152
#: code:addons/account/wizard/account_fiscalyear_close.py:78
#: code:addons/account/wizard/account_fiscalyear_close.py:81
@@ -4160,7 +4165,7 @@ msgid "You must define an analytic journal of type '%s' !"
msgstr "您必须定义这辅助核算类型'%s' !"
#. module: account
-#: code:addons/account/account.py:1397
+#: code:addons/account/account.py:1411
#, python-format
msgid ""
"Couldn't create move with currency different from the secondary currency of "
@@ -4225,7 +4230,7 @@ msgid "Invoices"
msgstr "发票列表"
#. module: account
-#: code:addons/account/invoice.py:804
+#: code:addons/account/invoice.py:812
#, python-format
msgid ""
"Please verify the price of the invoice !\n"
@@ -4337,25 +4342,24 @@ msgid "Third Party (Country)"
msgstr ""
#. module: account
-#: code:addons/account/account.py:938
-#: code:addons/account/account.py:940
-#: code:addons/account/account.py:1181
-#: code:addons/account/account.py:1393
-#: code:addons/account/account.py:1397
-#: code:addons/account/account_cash_statement.py:249
-#: code:addons/account/account_move_line.py:780
-#: code:addons/account/account_move_line.py:803
-#: code:addons/account/account_move_line.py:805
-#: code:addons/account/account_move_line.py:808
-#: code:addons/account/account_move_line.py:810
-#: code:addons/account/account_move_line.py:1117
+#: code:addons/account/account.py:952
+#: code:addons/account/account.py:954
+#: code:addons/account/account.py:1195
+#: code:addons/account/account.py:1407
+#: code:addons/account/account.py:1411
+#: code:addons/account/account_cash_statement.py:250
+#: code:addons/account/account_move_line.py:771
+#: code:addons/account/account_move_line.py:794
+#: code:addons/account/account_move_line.py:796
+#: code:addons/account/account_move_line.py:799
+#: code:addons/account/account_move_line.py:801
+#: code:addons/account/account_move_line.py:1123
#: code:addons/account/report/common_report_header.py:92
-#: code:addons/account/wizard/account_change_currency.py:39
-#: code:addons/account/wizard/account_change_currency.py:60
-#: code:addons/account/wizard/account_change_currency.py:65
-#: code:addons/account/wizard/account_change_currency.py:71
+#: code:addons/account/wizard/account_change_currency.py:38
+#: code:addons/account/wizard/account_change_currency.py:59
+#: code:addons/account/wizard/account_change_currency.py:64
+#: code:addons/account/wizard/account_change_currency.py:70
#: code:addons/account/wizard/account_move_bank_reconcile.py:49
-#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40
#: code:addons/account/wizard/account_report_common.py:120
#: code:addons/account/wizard/account_report_common.py:126
#, python-format
@@ -4377,7 +4381,7 @@ msgid "Bank Details"
msgstr "银行信息"
#. module: account
-#: code:addons/account/invoice.py:720
+#: code:addons/account/invoice.py:728
#, python-format
msgid "Taxes missing !"
msgstr "缺少税目!"
@@ -4432,7 +4436,7 @@ msgid "Check Date not in the Period"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1210
+#: code:addons/account/account.py:1224
#, python-format
msgid ""
"You can not modify a posted entry of this journal !\n"
@@ -4453,7 +4457,7 @@ msgid "Child Tax Accounts"
msgstr "子税科目"
#. module: account
-#: code:addons/account/account.py:940
+#: code:addons/account/account.py:954
#, python-format
msgid "Start period should be smaller then End period"
msgstr ""
@@ -4483,6 +4487,7 @@ msgstr "辅助核算余额 -"
#: report:account.general.journal:0
#: field:account.general.journal,target_move:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.move.journal,target_move:0
#: report:account.partner.balance:0
@@ -4565,7 +4570,7 @@ msgid "Line 1:"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1167
+#: code:addons/account/account.py:1181
#, python-format
msgid "Integrity Error !"
msgstr "完整性错误!"
@@ -4711,7 +4716,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account.py:2067
+#: code:addons/account/account.py:2081
#: code:addons/account/wizard/account_use_model.py:69
#, python-format
msgid "No period found !"
@@ -4783,7 +4788,7 @@ msgid ""
msgstr "在计算前加入的天数, 如日期为01/15, 天数是22, 月天数为-1,则应付日期是02/28。"
#. module: account
-#: code:addons/account/account.py:2896
+#: code:addons/account/account.py:2940
#: code:addons/account/installer.py:283
#: code:addons/account/installer.py:295
#, python-format
@@ -4811,7 +4816,7 @@ msgid "Start of period"
msgstr "开始会计期间"
#. module: account
-#: code:addons/account/account_move_line.py:1193
+#: code:addons/account/account_move_line.py:1199
#, python-format
msgid ""
"You can not do this modification on a reconciled entry ! Please note that "
@@ -4867,12 +4872,12 @@ msgstr "结束会计年度业务类型"
#. module: account
#: code:addons/account/account_bank_statement.py:331
-#: code:addons/account/invoice.py:405
-#: code:addons/account/invoice.py:505
-#: code:addons/account/invoice.py:520
-#: code:addons/account/invoice.py:528
-#: code:addons/account/invoice.py:545
-#: code:addons/account/invoice.py:1347
+#: code:addons/account/invoice.py:408
+#: code:addons/account/invoice.py:508
+#: code:addons/account/invoice.py:523
+#: code:addons/account/invoice.py:531
+#: code:addons/account/invoice.py:552
+#: code:addons/account/invoice.py:1361
#: code:addons/account/wizard/account_move_journal.py:63
#, python-format
msgid "Configuration Error !"
@@ -4949,7 +4954,7 @@ msgid "Sort By"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1326
+#: code:addons/account/account.py:1340
#, python-format
msgid ""
"There is no default default credit account defined \n"
@@ -5096,7 +5101,7 @@ msgid "Generate Opening Entries"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:738
+#: code:addons/account/account_move_line.py:729
#, python-format
msgid "Already Reconciled!"
msgstr ""
@@ -5132,7 +5137,7 @@ msgstr "子科目"
#. module: account
#: view:account.move.line.reconcile:0
-#: code:addons/account/account_move_line.py:830
+#: code:addons/account/account_move_line.py:821
#, python-format
msgid "Write-Off"
msgstr "补差额"
@@ -5269,7 +5274,7 @@ msgid "# of Lines"
msgstr ""
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:60
+#: code:addons/account/wizard/account_change_currency.py:59
#, python-format
msgid "New currency is not confirured properly !"
msgstr ""
@@ -5294,14 +5299,14 @@ msgid "Filter by"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1131
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1137
+#: code:addons/account/account_move_line.py:1220
#, python-format
msgid "You can not use an inactive account!"
msgstr "您不能使用一个停用的科目!"
#. module: account
-#: code:addons/account/account_move_line.py:803
+#: code:addons/account/account_move_line.py:794
#, python-format
msgid "Entries are not of the same account or already reconciled ! "
msgstr "不同科目或已核算的凭证! "
@@ -5336,7 +5341,7 @@ msgstr "7"
#. module: account
#: code:addons/account/account_bank_statement.py:391
-#: code:addons/account/invoice.py:370
+#: code:addons/account/invoice.py:373
#, python-format
msgid "Invalid action !"
msgstr "无效动作!"
@@ -5547,7 +5552,7 @@ msgid "Companies"
msgstr ""
#. module: account
-#: code:addons/account/account.py:532
+#: code:addons/account/account.py:546
#, python-format
msgid ""
"You cannot modify Company of account as its related record exist in Entry "
@@ -5813,9 +5818,9 @@ msgid "Optional create"
msgstr ""
#. module: account
-#: code:addons/account/invoice.py:406
-#: code:addons/account/invoice.py:506
-#: code:addons/account/invoice.py:1348
+#: code:addons/account/invoice.py:409
+#: code:addons/account/invoice.py:509
+#: code:addons/account/invoice.py:1362
#, python-format
msgid "Can not find account chart for this company, Please Create account."
msgstr ""
@@ -5964,8 +5969,8 @@ msgid "Analytic Entries Statistics"
msgstr ""
#. module: account
-#: code:addons/account/account_analytic_line.py:143
-#: code:addons/account/account_move_line.py:905
+#: code:addons/account/account_analytic_line.py:141
+#: code:addons/account/account_move_line.py:897
#, python-format
msgid "Entries: "
msgstr "凭证: "
@@ -5976,7 +5981,7 @@ msgid "Create manual recurring entries in a chosen journal."
msgstr ""
#. module: account
-#: code:addons/account/account.py:1393
+#: code:addons/account/account.py:1407
#, python-format
msgid "Couldn't create move between different companies"
msgstr "无法创建公司之间的过帐"
@@ -6014,7 +6019,7 @@ msgid "Total debit"
msgstr "借方合计"
#. module: account
-#: code:addons/account/account_move_line.py:781
+#: code:addons/account/account_move_line.py:772
#, python-format
msgid "Entry \"%s\" is not valid !"
msgstr "凭证\"%s\"无效!"
@@ -6078,30 +6083,31 @@ msgid " valuation: percent"
msgstr ""
#. module: account
-#: code:addons/account/account.py:499
-#: code:addons/account/account.py:501
-#: code:addons/account/account.py:822
-#: code:addons/account/account.py:901
-#: code:addons/account/account.py:976
-#: code:addons/account/account.py:1204
-#: code:addons/account/account.py:1210
-#: code:addons/account/account.py:2095
-#: code:addons/account/account.py:2333
-#: code:addons/account/account_analytic_line.py:90
-#: code:addons/account/account_analytic_line.py:99
+#: code:addons/account/account.py:509
+#: code:addons/account/account.py:511
+#: code:addons/account/account.py:836
+#: code:addons/account/account.py:915
+#: code:addons/account/account.py:990
+#: code:addons/account/account.py:1218
+#: code:addons/account/account.py:1224
+#: code:addons/account/account.py:2109
+#: code:addons/account/account.py:2357
+#: code:addons/account/account_analytic_line.py:89
+#: code:addons/account/account_analytic_line.py:98
#: code:addons/account/account_bank_statement.py:292
#: code:addons/account/account_bank_statement.py:305
#: code:addons/account/account_bank_statement.py:345
-#: code:addons/account/account_cash_statement.py:328
-#: code:addons/account/account_cash_statement.py:348
-#: code:addons/account/account_move_line.py:1176
-#: code:addons/account/account_move_line.py:1191
-#: code:addons/account/account_move_line.py:1193
-#: code:addons/account/invoice.py:785
-#: code:addons/account/invoice.py:815
-#: code:addons/account/invoice.py:1008
+#: code:addons/account/account_cash_statement.py:329
+#: code:addons/account/account_cash_statement.py:349
+#: code:addons/account/account_move_line.py:1182
+#: code:addons/account/account_move_line.py:1197
+#: code:addons/account/account_move_line.py:1199
+#: code:addons/account/invoice.py:793
+#: code:addons/account/invoice.py:823
+#: code:addons/account/invoice.py:1014
#: code:addons/account/wizard/account_invoice_refund.py:100
#: code:addons/account/wizard/account_invoice_refund.py:102
+#: code:addons/account/wizard/account_open_closed_fiscalyear.py:40
#: code:addons/account/wizard/account_use_model.py:44
#, python-format
msgid "Error !"
@@ -6211,7 +6217,7 @@ msgid "Journal Select"
msgstr ""
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:65
+#: code:addons/account/wizard/account_change_currency.py:64
#, python-format
msgid "Currnt currency is not confirured properly !"
msgstr ""
@@ -6228,9 +6234,11 @@ msgstr ""
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: view:account.report.general.ledger:0
#: model:ir.actions.act_window,name:account.action_account_general_ledger_menu
#: model:ir.actions.report.xml,name:account.account_general_ledger
+#: model:ir.actions.report.xml,name:account.account_general_ledger_landscape
#: model:ir.ui.menu,name:account.menu_general_ledger
msgid "General Ledger"
msgstr "按全部业务类型打印全部凭证"
@@ -6284,7 +6292,7 @@ msgid "Total:"
msgstr "合计:"
#. module: account
-#: code:addons/account/account.py:2050
+#: code:addons/account/account.py:2064
#, python-format
msgid ""
"You can specify year, month and date in the name of the model using the "
@@ -6314,7 +6322,7 @@ msgid "Child Codes"
msgstr "子代码"
#. module: account
-#: code:addons/account/invoice.py:473
+#: code:addons/account/invoice.py:476
#: code:addons/account/wizard/account_invoice_refund.py:137
#, python-format
msgid "Data Insufficient !"
@@ -6471,7 +6479,7 @@ msgid "Lines"
msgstr "明细"
#. module: account
-#: code:addons/account/invoice.py:521
+#: code:addons/account/invoice.py:524
#, python-format
msgid ""
"Can not find account chart for this company in invoice line account, Please "
@@ -6639,7 +6647,7 @@ msgid ""
msgstr "这字段只用于如果你开发自己的模块允许开发者在自定义域创建特定的税"
#. module: account
-#: code:addons/account/account.py:938
+#: code:addons/account/account.py:952
#, python-format
msgid "You should have chosen periods that belongs to the same company"
msgstr ""
@@ -6743,7 +6751,7 @@ msgid "Sign on Reports"
msgstr "报表上的符号"
#. module: account
-#: code:addons/account/account_cash_statement.py:249
+#: code:addons/account/account_cash_statement.py:250
#, python-format
msgid "You can not have two open register for the same journal"
msgstr ""
@@ -6772,7 +6780,6 @@ msgstr ""
#. module: account
#: report:account.invoice:0
#: view:account.invoice:0
-#: report:account.move.voucher:0
msgid "PRO-FORMA"
msgstr "形式发票"
@@ -6788,7 +6795,7 @@ msgstr ""
#: view:account.move.line:0
#: selection:account.move.line,state:0
msgid "Unbalanced"
-msgstr ""
+msgstr "不平衡"
#. module: account
#: selection:account.move.line,centralisation:0
@@ -6802,6 +6809,7 @@ msgstr "可选信息"
#. module: account
#: view:account.analytic.line:0
+#: field:account.bank.statement,user_id:0
#: view:account.journal:0
#: field:account.journal,user_id:0
#: view:analytic.entries.report:0
@@ -6827,13 +6835,13 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1271
+#: code:addons/account/account_move_line.py:1277
#, python-format
msgid "Bad account !"
msgstr "无效科目!"
#. module: account
-#: code:addons/account/account.py:2777
+#: code:addons/account/account.py:2821
#: code:addons/account/installer.py:432
#, python-format
msgid "Sales Journal"
@@ -6851,7 +6859,7 @@ msgid "Invoice Tax"
msgstr "发票税"
#. module: account
-#: code:addons/account/account_move_line.py:1246
+#: code:addons/account/account_move_line.py:1252
#, python-format
msgid "No piece number !"
msgstr "没会计期间!"
@@ -7085,17 +7093,17 @@ msgid "Fixed"
msgstr "固定"
#. module: account
-#: code:addons/account/account.py:506
-#: code:addons/account/account.py:519
-#: code:addons/account/account.py:522
+#: code:addons/account/account.py:516
+#: code:addons/account/account.py:529
#: code:addons/account/account.py:532
-#: code:addons/account/account.py:640
-#: code:addons/account/account.py:927
-#: code:addons/account/account_move_line.py:732
-#: code:addons/account/account_move_line.py:776
-#: code:addons/account/invoice.py:714
-#: code:addons/account/invoice.py:717
-#: code:addons/account/invoice.py:720
+#: code:addons/account/account.py:546
+#: code:addons/account/account.py:654
+#: code:addons/account/account.py:941
+#: code:addons/account/account_move_line.py:723
+#: code:addons/account/account_move_line.py:767
+#: code:addons/account/invoice.py:722
+#: code:addons/account/invoice.py:725
+#: code:addons/account/invoice.py:728
#, python-format
msgid "Warning !"
msgstr "警告 !"
@@ -7127,6 +7135,7 @@ msgstr ""
#: view:account.entries.report:0
#: field:account.entries.report,partner_id:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: view:account.invoice:0
#: field:account.invoice,partner_id:0
#: field:account.invoice.line,partner_id:0
@@ -7157,7 +7166,7 @@ msgid "Can not %s draft/proforma/cancel invoice."
msgstr "不能注销 %s 草稿/形式/取消的发票"
#. module: account
-#: code:addons/account/invoice.py:787
+#: code:addons/account/invoice.py:795
#, python-format
msgid "No Invoice Lines !"
msgstr ""
@@ -7206,7 +7215,7 @@ msgid "Deferral Method"
msgstr "递延方法"
#. module: account
-#: code:addons/account/invoice.py:359
+#: code:addons/account/invoice.py:360
#, python-format
msgid "Invoice '%s' is paid."
msgstr ""
@@ -7267,7 +7276,7 @@ msgid "Associated Partner"
msgstr "相关业务伙伴"
#. module: account
-#: code:addons/account/invoice.py:1284
+#: code:addons/account/invoice.py:1298
#, python-format
msgid "You must first select a partner !"
msgstr "你必须首先选择一个业务伙伴!"
@@ -7332,7 +7341,7 @@ msgid "Choose Fiscal Year"
msgstr "选择会计年度"
#. module: account
-#: code:addons/account/account.py:2841
+#: code:addons/account/account.py:2885
#: code:addons/account/installer.py:495
#, python-format
msgid "Purchase Refund Journal"
@@ -7367,6 +7376,7 @@ msgstr ""
#: view:account.entries.report:0
#: field:account.entries.report,period_id:0
#: view:account.fiscalyear:0
+#: report:account.general.ledger_landscape:0
#: view:account.invoice:0
#: view:account.invoice.report:0
#: field:account.journal.period,period_id:0
@@ -7529,7 +7539,7 @@ msgid "Account Types"
msgstr "科目类型"
#. module: account
-#: code:addons/account/invoice.py:897
+#: code:addons/account/invoice.py:905
#, python-format
msgid "Cannot create invoice move on centralised journal"
msgstr "你不能在汇总的副本里创建发票凭证"
@@ -7579,6 +7589,7 @@ msgstr "退款(开红字发票)业务类型"
#: report:account.account.balance:0
#: report:account.central.journal:0
#: report:account.general.journal:0
+#: report:account.general.ledger_landscape:0
#: report:account.partner.balance:0
msgid "Filter By"
msgstr ""
@@ -7617,7 +7628,7 @@ msgid "Payment Term Line"
msgstr "付款条款明细"
#. module: account
-#: code:addons/account/account.py:2794
+#: code:addons/account/account.py:2838
#: code:addons/account/installer.py:452
#, python-format
msgid "Purchase Journal"
@@ -7784,8 +7795,8 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1131
-#: code:addons/account/account_move_line.py:1214
+#: code:addons/account/account_move_line.py:1137
+#: code:addons/account/account_move_line.py:1220
#, python-format
msgid "Bad account!"
msgstr "无效科目!"
@@ -7796,7 +7807,7 @@ msgid "Keep empty for all open fiscal years"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1056
+#: code:addons/account/account_move_line.py:1062
#, python-format
msgid "The account move (%s) for centralisation has been confirmed!"
msgstr ""
@@ -7817,6 +7828,7 @@ msgstr "如果它是一个多货币凭证,这金额表示一个可选的其它
#: field:account.entries.report,currency_id:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.invoice,currency_id:0
#: field:account.invoice.report,currency_id:0
#: field:account.journal,currency:0
@@ -7989,14 +8001,14 @@ msgid "Period from"
msgstr "会计期间从"
#. module: account
-#: code:addons/account/account.py:2817
+#: code:addons/account/account.py:2861
#: code:addons/account/installer.py:476
#, python-format
msgid "Sales Refund Journal"
msgstr ""
#. module: account
-#: code:addons/account/account.py:927
+#: code:addons/account/account.py:941
#, python-format
msgid ""
"You cannot modify company of this period as its related record exist in "
@@ -8045,7 +8057,7 @@ msgid "Purchase Tax(%)"
msgstr ""
#. module: account
-#: code:addons/account/invoice.py:787
+#: code:addons/account/invoice.py:795
#, python-format
msgid "Please create some invoice lines."
msgstr ""
@@ -8061,7 +8073,7 @@ msgid "Configure Your Accounting Application"
msgstr ""
#. module: account
-#: code:addons/account/account.py:2820
+#: code:addons/account/account.py:2864
#: code:addons/account/installer.py:479
#, python-format
msgid "SCNJ"
@@ -8099,6 +8111,7 @@ msgstr ""
#: report:account.central.journal:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
@@ -8108,7 +8121,7 @@ msgid "Start Period"
msgstr ""
#. module: account
-#: code:addons/account/account.py:2333
+#: code:addons/account/account.py:2357
#, python-format
msgid "Cannot locate parent code for template account!"
msgstr ""
@@ -8145,7 +8158,7 @@ msgid "Accountant validates the accounting entries coming from the invoice. "
msgstr ""
#. module: account
-#: code:addons/account/invoice.py:1008
+#: code:addons/account/invoice.py:1014
#, python-format
msgid ""
"You cannot cancel the Invoice which is Partially Paid! You need to "
@@ -8173,7 +8186,7 @@ msgid "You can not create move line on view account."
msgstr ""
#. module: account
-#: code:addons/account/wizard/account_change_currency.py:71
+#: code:addons/account/wizard/account_change_currency.py:70
#, python-format
msgid "Current currency is not confirured properly !"
msgstr ""
@@ -8222,6 +8235,7 @@ msgstr "留空为使用收入科目"
#: field:account.entries.report,balance:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.move.line,balance:0
#: report:account.partner.balance:0
#: selection:account.payment.term.line,value:0
@@ -8240,6 +8254,7 @@ msgstr ""
#. module: account
#: report:account.account.balance:0
+#: report:account.general.ledger_landscape:0
msgid "Display Account"
msgstr ""
@@ -8354,6 +8369,7 @@ msgstr ""
#. module: account
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.move.line,move_id:0
#: field:analytic.entries.report,move_id:0
@@ -8361,7 +8377,7 @@ msgid "Move"
msgstr "凭证"
#. module: account
-#: code:addons/account/account_move_line.py:1128
+#: code:addons/account/account_move_line.py:1134
#, python-format
msgid "You can not change the tax, you should remove and recreate lines !"
msgstr "您不能更改此税目,请移除并重新创建凭证!"
@@ -8455,6 +8471,7 @@ msgstr ""
#: report:account.central.journal:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
#: report:account.third_party_ledger:0
@@ -8498,7 +8515,7 @@ msgid "Account Subscription"
msgstr "周期性凭证科目"
#. module: account
-#: code:addons/account/invoice.py:717
+#: code:addons/account/invoice.py:725
#, python-format
msgid ""
"Tax base different !\n"
@@ -8527,6 +8544,7 @@ msgstr "周期性凭证"
#: report:account.general.journal:0
#: field:account.general.journal,date_from:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,date_start:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -8555,7 +8573,7 @@ msgid "Unreconciled"
msgstr "反核销"
#. module: account
-#: code:addons/account/invoice.py:804
+#: code:addons/account/invoice.py:812
#, python-format
msgid "Bad total !"
msgstr "坏的合计!"
@@ -8613,13 +8631,13 @@ msgid "Active"
msgstr "启用"
#. module: account
-#: code:addons/account/invoice.py:354
+#: code:addons/account/invoice.py:353
#, python-format
msgid "Unknown Error"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1167
+#: code:addons/account/account.py:1181
#, python-format
msgid ""
"You cannot validate a non-balanced entry !\n"
@@ -8662,10 +8680,10 @@ msgstr ""
#: field:account.entries.report,credit:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.model.line,credit:0
#: field:account.move.line,credit:0
-#: report:account.move.voucher:0
#: report:account.partner.balance:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
@@ -8901,7 +8919,6 @@ msgstr "选择会计期间"
#: view:account.move:0
#: selection:account.move,state:0
#: view:account.move.line:0
-#: report:account.move.voucher:0
msgid "Posted"
msgstr "已登账"
@@ -8920,6 +8937,7 @@ msgstr "已登账"
#: report:account.general.journal:0
#: field:account.general.journal,date_to:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: field:account.installer,date_stop:0
#: report:account.journal.period.print:0
#: report:account.partner.balance:0
@@ -8973,7 +8991,7 @@ msgid "This is a model for recurring accounting entries"
msgstr "这是一个循环凭证模型"
#. module: account
-#: code:addons/account/account_analytic_line.py:100
+#: code:addons/account/account_analytic_line.py:99
#, python-format
msgid "There is no income account defined for this product: \"%s\" (id:%d)"
msgstr ""
@@ -9123,8 +9141,8 @@ msgid "End period"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:738
-#: code:addons/account/account_move_line.py:815
+#: code:addons/account/account_move_line.py:729
+#: code:addons/account/account_move_line.py:806
#: code:addons/account/wizard/account_invoice_state.py:44
#: code:addons/account/wizard/account_invoice_state.py:68
#: code:addons/account/wizard/account_report_balance_sheet.py:70
@@ -9190,10 +9208,10 @@ msgstr "供应商发票"
#: field:account.entries.report,debit:0
#: report:account.general.journal:0
#: report:account.general.ledger:0
+#: report:account.general.ledger_landscape:0
#: report:account.journal.period.print:0
#: field:account.model.line,debit:0
#: field:account.move.line,debit:0
-#: report:account.move.voucher:0
#: report:account.partner.balance:0
#: report:account.tax.code.entries:0
#: report:account.third_party_ledger:0
@@ -9227,7 +9245,7 @@ msgid "Recurring"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:805
+#: code:addons/account/account_move_line.py:796
#, python-format
msgid "Entry is already reconciled"
msgstr "凭证已经核销"
@@ -9248,7 +9266,7 @@ msgid "Range"
msgstr "范围"
#. module: account
-#: code:addons/account/account_move_line.py:1246
+#: code:addons/account/account_move_line.py:1252
#, python-format
msgid ""
"Can not create an automatic sequence for this piece !\n"
@@ -9327,17 +9345,17 @@ msgstr "如果是一个多货币凭证可选其它货币"
#: model:process.transition,note:account.process_transition_invoiceimport0
msgid ""
"Import of the statement in the system from a supplier or customer invoice"
-msgstr ""
+msgstr "供应商或客户发票在系统中的入口"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_periodical_processing_billing
msgid "Billing"
-msgstr ""
+msgstr "发票"
#. module: account
#: view:account.account:0
msgid "Parent Account"
-msgstr ""
+msgstr "父科目"
#. module: account
#: model:ir.actions.act_window,help:account.action_account_journal_form
@@ -9353,7 +9371,7 @@ msgstr ""
#. module: account
#: model:ir.model,name:account.model_account_analytic_chart
msgid "Account Analytic Chart"
-msgstr ""
+msgstr "科目分析图表"
#. module: account
#: help:account.invoice,residual:0
@@ -9363,14 +9381,14 @@ msgstr "剩余的欠款"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_statistic_report_statement
msgid "Statistic Reports"
-msgstr ""
+msgstr "统计报告"
#. module: account
#: field:account.installer,progress:0
#: field:account.installer.modules,progress:0
#: field:wizard.multi.charts.accounts,progress:0
msgid "Configuration Progress"
-msgstr ""
+msgstr "配置进度"
#. module: account
#: view:account.fiscal.position.template:0
@@ -9378,7 +9396,7 @@ msgid "Accounts Mapping"
msgstr "科目一览"
#. module: account
-#: code:addons/account/invoice.py:346
+#: code:addons/account/invoice.py:345
#, python-format
msgid "Invoice '%s' is waiting for validation."
msgstr ""
@@ -9403,7 +9421,7 @@ msgid "The income or expense account related to the selected product."
msgstr "和选择的产品相关的收入或费用科目"
#. module: account
-#: code:addons/account/account_move_line.py:1117
+#: code:addons/account/account_move_line.py:1123
#, python-format
msgid "The date of your Journal Entry is not in the defined period!"
msgstr ""
@@ -9487,7 +9505,7 @@ msgstr ""
#. module: account
#: view:account.invoice.tax:0
msgid "Manual Invoice Taxes"
-msgstr "手动发票税"
+msgstr "上门纳税(非主营业务纳税)"
#. module: account
#: field:account.account,parent_right:0
@@ -9589,7 +9607,7 @@ msgstr "通常用 1或-1"
#. module: account
#: model:ir.model,name:account.model_account_fiscal_position_account_template
msgid "Template Account Fiscal Mapping"
-msgstr ""
+msgstr "以这个会计科目为模版制图"
#. module: account
#: field:account.chart.template,property_account_expense:0
@@ -9599,7 +9617,7 @@ msgstr "产品模板的费用科目"
#. module: account
#: field:account.analytic.line,amount_currency:0
msgid "Amount currency"
-msgstr ""
+msgstr "金额"
#. module: account
#: code:addons/account/wizard/account_report_aged_partner_balance.py:55
@@ -9608,7 +9626,7 @@ msgid "You must enter a period length that cannot be 0 or below !"
msgstr "您必须输入的期间长度不能为0或以下 !"
#. module: account
-#: code:addons/account/account.py:501
+#: code:addons/account/account.py:511
#, python-format
msgid "You cannot remove an account which has account entries!. "
msgstr "你不能删除这科目因为它已有凭证! "
diff --git a/addons/account/invoice.py b/addons/account/invoice.py
index 9d95a5af4ba..8b1b2a0edda 100644
--- a/addons/account/invoice.py
+++ b/addons/account/invoice.py
@@ -227,21 +227,21 @@ class account_invoice(osv.osv):
'tax_line': fields.one2many('account.invoice.tax', 'invoice_id', 'Tax Lines', readonly=True, states={'draft':[('readonly',False)]}),
'move_id': fields.many2one('account.move', 'Journal Entry', readonly=True, select=1, ondelete='restrict', help="Link to the automatically generated Journal Items."),
- 'amount_untaxed': fields.function(_amount_all, method=True, digits_compute=dp.get_precision('Account'), string='Untaxed',
+ 'amount_untaxed': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Untaxed',
store={
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 20),
'account.invoice.tax': (_get_invoice_tax, None, 20),
'account.invoice.line': (_get_invoice_line, ['price_unit','invoice_line_tax_id','quantity','discount','invoice_id'], 20),
},
multi='all'),
- 'amount_tax': fields.function(_amount_all, method=True, digits_compute=dp.get_precision('Account'), string='Tax',
+ 'amount_tax': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Tax',
store={
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 20),
'account.invoice.tax': (_get_invoice_tax, None, 20),
'account.invoice.line': (_get_invoice_line, ['price_unit','invoice_line_tax_id','quantity','discount','invoice_id'], 20),
},
multi='all'),
- 'amount_total': fields.function(_amount_all, method=True, digits_compute=dp.get_precision('Account'), string='Total',
+ 'amount_total': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Total',
store={
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 20),
'account.invoice.tax': (_get_invoice_tax, None, 20),
@@ -252,7 +252,7 @@ class account_invoice(osv.osv):
'journal_id': fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'company_id': fields.many2one('res.company', 'Company', required=True, change_default=True, readonly=True, states={'draft':[('readonly',False)]}),
'check_total': fields.float('Total', digits_compute=dp.get_precision('Account'), states={'open':[('readonly',True)],'close':[('readonly',True)]}),
- 'reconciled': fields.function(_reconciled, method=True, string='Paid/Reconciled', type='boolean',
+ 'reconciled': fields.function(_reconciled, string='Paid/Reconciled', type='boolean',
store={
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, None, 50), # Check if we can remove ?
'account.move.line': (_get_invoice_from_line, None, 50),
@@ -260,8 +260,8 @@ class account_invoice(osv.osv):
}, help="The Journal Entry of the invoice have been totally reconciled with one or several Journal Entries of payment."),
'partner_bank_id': fields.many2one('res.partner.bank', 'Bank Account',
help='Bank Account Number, Company bank account if Invoice is customer or supplier refund, otherwise Partner bank account number.', readonly=True, states={'draft':[('readonly',False)]}),
- 'move_lines':fields.function(_get_lines, method=True, type='many2many', relation='account.move.line', string='Entry Lines'),
- 'residual': fields.function(_amount_residual, method=True, digits_compute=dp.get_precision('Account'), string='Residual',
+ 'move_lines':fields.function(_get_lines, type='many2many', relation='account.move.line', string='Entry Lines'),
+ 'residual': fields.function(_amount_residual, digits_compute=dp.get_precision('Account'), string='Residual',
store={
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line','move_id'], 50),
'account.invoice.tax': (_get_invoice_tax, None, 50),
@@ -270,7 +270,7 @@ class account_invoice(osv.osv):
'account.move.reconcile': (_get_invoice_from_reconcile, None, 50),
},
help="Remaining amount due."),
- 'payment_ids': fields.function(_compute_lines, method=True, relation='account.move.line', type="many2many", string='Payments'),
+ 'payment_ids': fields.function(_compute_lines, relation='account.move.line', type="many2many", string='Payments'),
'move_name': fields.char('Journal Entry', size=64, readonly=True, states={'draft':[('readonly',False)]}),
'user_id': fields.many2one('res.users', 'Salesman', readonly=True, states={'draft':[('readonly',False)]}),
'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position', readonly=True, states={'draft':[('readonly',False)]})
@@ -1282,7 +1282,7 @@ class account_invoice_line(osv.osv):
'product_id': fields.many2one('product.product', 'Product', ondelete='set null'),
'account_id': fields.many2one('account.account', 'Account', required=True, domain=[('type','<>','view'), ('type', '<>', 'closed')], help="The income or expense account related to the selected product."),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Account')),
- 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', type="float",
+ 'price_subtotal': fields.function(_amount_line, string='Subtotal', type="float",
digits_compute= dp.get_precision('Account'), store=True),
'quantity': fields.float('Quantity', required=True),
'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Account')),
@@ -1505,8 +1505,8 @@ class account_invoice_tax(osv.osv):
'tax_code_id': fields.many2one('account.tax.code', 'Tax Code', help="The tax basis of the tax declaration."),
'tax_amount': fields.float('Tax Code Amount', digits_compute=dp.get_precision('Account')),
'company_id': fields.related('account_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
- 'factor_base': fields.function(_count_factor, method=True, string='Multipication factor for Base code', type='float', multi="all"),
- 'factor_tax': fields.function(_count_factor, method=True, string='Multipication factor Tax code', type='float', multi="all")
+ 'factor_base': fields.function(_count_factor, string='Multipication factor for Base code', type='float', multi="all"),
+ 'factor_tax': fields.function(_count_factor, string='Multipication factor Tax code', type='float', multi="all")
}
def base_change(self, cr, uid, ids, base, currency_id=False, company_id=False, date_invoice=False):
diff --git a/addons/account/partner.py b/addons/account/partner.py
index 9e2aafe849a..984c7e037e0 100644
--- a/addons/account/partner.py
+++ b/addons/account/partner.py
@@ -142,8 +142,8 @@ class res_partner(osv.osv):
_columns = {
'credit': fields.function(_credit_debit_get,
- fnct_search=_credit_search, method=True, string='Total Receivable', multi='dc', help="Total amount this customer owes you."),
- 'debit': fields.function(_credit_debit_get, fnct_search=_debit_search, method=True, string='Total Payable', multi='dc', help="Total amount you have to pay to this supplier."),
+ fnct_search=_credit_search, string='Total Receivable', multi='dc', help="Total amount this customer owes you."),
+ 'debit': fields.function(_credit_debit_get, fnct_search=_debit_search, string='Total Payable', multi='dc', help="Total amount you have to pay to this supplier."),
'debit_limit': fields.float('Payable Limit'),
'property_account_payable': fields.property(
'account.account',
diff --git a/addons/account/report/account_report.py b/addons/account/report/account_report.py
index 6b22dc21fdf..6666b1ccd83 100644
--- a/addons/account/report/account_report.py
+++ b/addons/account/report/account_report.py
@@ -114,7 +114,7 @@ class report_aged_receivable(osv.osv):
_columns = {
'name': fields.char('Month Range', size=7, readonly=True),
- 'balance': fields.function(_calc_bal, method=True, string='Balance', readonly=True),
+ 'balance': fields.function(_calc_bal, string='Balance', readonly=True),
}
def init(self, cr, uid=1):
diff --git a/addons/account/report/account_treasury_report.py b/addons/account/report/account_treasury_report.py
index 4d3ec449204..fce3661b4c4 100644
--- a/addons/account/report/account_treasury_report.py
+++ b/addons/account/report/account_treasury_report.py
@@ -47,8 +47,8 @@ class account_treasury_report(osv.osv):
'credit': fields.float('Credit', readonly=True),
'balance': fields.float('Balance', readonly=True),
'date': fields.date('Beginning of Period Date', readonly=True),
- 'starting_balance': fields.function(_compute_balances, digits_compute=dp.get_precision('Account'), method=True, string='Starting Balance', multi='balance'),
- 'ending_balance': fields.function(_compute_balances, digits_compute=dp.get_precision('Account'), method=True, string='Ending Balance', multi='balance'),
+ 'starting_balance': fields.function(_compute_balances, digits_compute=dp.get_precision('Account'), string='Starting Balance', multi='balance'),
+ 'ending_balance': fields.function(_compute_balances, digits_compute=dp.get_precision('Account'), string='Ending Balance', multi='balance'),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
}
diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml
index b7271fec84b..016c147be91 100644
--- a/addons/account/security/account_security.xml
+++ b/addons/account/security/account_security.xml
@@ -97,6 +97,13 @@
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
+
+ Invoice Analysis multi-company
+
+
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
+
+
Account fiscal Mapping company rule
diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py
index 11f92614b73..22eb9401ad7 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis.py
+++ b/addons/account_analytic_analysis/account_analytic_analysis.py
@@ -375,49 +375,49 @@ class account_analytic_account(osv.osv):
return res
_columns ={
- 'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced Amount',
+ 'ca_invoiced': fields.function(_ca_invoiced_calc, type='float', string='Invoiced Amount',
help="Total customer invoiced amount for this account.",
digits_compute=dp.get_precision('Account')),
- 'total_cost': fields.function(_total_cost_calc, method=True, type='float', string='Total Costs',
+ 'total_cost': fields.function(_total_cost_calc, type='float', string='Total Costs',
help="Total of costs for this account. It includes real costs (from invoices) and indirect costs, like time spent on timesheets.",
digits_compute=dp.get_precision('Account')),
- 'ca_to_invoice': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Amount',
+ 'ca_to_invoice': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Uninvoiced Amount',
help="If invoice from analytic account, the remaining amount you can invoice to the customer based on the total costs.",
digits_compute=dp.get_precision('Account')),
- 'ca_theorical': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Theoretical Revenue',
+ 'ca_theorical': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Theoretical Revenue',
help="Based on the costs you had on the project, what would have been the revenue if all these costs have been invoiced at the normal sale price provided by the pricelist.",
digits_compute=dp.get_precision('Account')),
- 'hours_quantity': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Hours Tot',
+ 'hours_quantity': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Hours Tot',
help="Number of hours you spent on the analytic account (from timesheet). It computes on all journal of type 'general'."),
- 'last_invoice_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Last Invoice Date',
+ 'last_invoice_date': fields.function(_analysis_all, multi='analytic_analysis', type='date', string='Last Invoice Date',
help="If invoice from the costs, this is the date of the latest invoiced."),
- 'last_worked_invoiced_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Invoiced Cost',
+ 'last_worked_invoiced_date': fields.function(_analysis_all, multi='analytic_analysis', type='date', string='Date of Last Invoiced Cost',
help="If invoice from the costs, this is the date of the latest work or cost that have been invoiced."),
- 'last_worked_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Cost/Work',
+ 'last_worked_date': fields.function(_analysis_all, multi='analytic_analysis', type='date', string='Date of Last Cost/Work',
help="Date of the latest work done on this account."),
- 'hours_qtt_non_invoiced': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Hours',
+ 'hours_qtt_non_invoiced': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Uninvoiced Hours',
help="Number of hours (from journal of type 'general') that can be invoiced if you invoice based on analytic account."),
- 'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, method=True, type='float', string='Invoiced Hours',
+ 'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, type='float', string='Invoiced Hours',
help="Number of hours that can be invoiced plus those that already have been invoiced."),
- 'remaining_hours': fields.function(_remaining_hours_calc, method=True, type='float', string='Remaining Hours',
+ 'remaining_hours': fields.function(_remaining_hours_calc, type='float', string='Remaining Hours',
help="Computed using the formula: Maximum Quantity - Hours Tot."),
- 'remaining_ca': fields.function(_remaining_ca_calc, method=True, type='float', string='Remaining Revenue',
+ 'remaining_ca': fields.function(_remaining_ca_calc, type='float', string='Remaining Revenue',
help="Computed using the formula: Max Invoice Price - Invoiced Amount.",
digits_compute=dp.get_precision('Account')),
- 'revenue_per_hour': fields.function(_revenue_per_hour_calc, method=True, type='float', string='Revenue per Hours (real)',
+ 'revenue_per_hour': fields.function(_revenue_per_hour_calc, type='float', string='Revenue per Hours (real)',
help="Computed using the formula: Invoiced Amount / Hours Tot.",
digits_compute=dp.get_precision('Account')),
- 'real_margin': fields.function(_real_margin_calc, method=True, type='float', string='Real Margin',
+ 'real_margin': fields.function(_real_margin_calc, type='float', string='Real Margin',
help="Computed using the formula: Invoiced Amount - Total Costs.",
digits_compute=dp.get_precision('Account')),
- 'theorical_margin': fields.function(_theorical_margin_calc, method=True, type='float', string='Theoretical Margin',
+ 'theorical_margin': fields.function(_theorical_margin_calc, type='float', string='Theoretical Margin',
help="Computed using the formula: Theorial Revenue - Total Costs",
digits_compute=dp.get_precision('Account')),
- 'real_margin_rate': fields.function(_real_margin_rate_calc, method=True, type='float', string='Real Margin Rate (%)',
+ 'real_margin_rate': fields.function(_real_margin_rate_calc, type='float', string='Real Margin Rate (%)',
help="Computes using the formula: (Real Margin / Total Costs) * 100.",
digits_compute=dp.get_precision('Account')),
- 'month_ids': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='many2many', relation='account_analytic_analysis.summary.month', string='Month'),
- 'user_ids': fields.function(_analysis_all, method=True, multi='analytic_analysis', type="many2many", relation='account_analytic_analysis.summary.user', string='User'),
+ 'month_ids': fields.function(_analysis_all, multi='analytic_analysis', type='many2many', relation='account_analytic_analysis.summary.month', string='Month'),
+ 'user_ids': fields.function(_analysis_all, multi='analytic_analysis', type="many2many", relation='account_analytic_analysis.summary.user', string='User'),
}
account_analytic_account()
@@ -456,7 +456,7 @@ class account_analytic_account_summary_user(osv.osv):
_columns = {
'account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
- 'unit_amount': fields.function(_unit_amount, method=True, type='float',
+ 'unit_amount': fields.function(_unit_amount, type='float',
string='Total Time'),
'user': fields.many2one('res.users', 'User'),
}
@@ -620,7 +620,7 @@ class account_analytic_account_summary_month(osv.osv):
_columns = {
'account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
- 'unit_amount': fields.function(_unit_amount, method=True, type='float', string='Total Time'),
+ 'unit_amount': fields.function(_unit_amount, type='float', string='Total Time'),
'month': fields.char('Month', size=32, readonly=True),
}
diff --git a/addons/account_analytic_default/i18n/zh_CN.po b/addons/account_analytic_default/i18n/zh_CN.po
index 7c6b8677b1c..f6cc673966d 100644
--- a/addons/account_analytic_default/i18n/zh_CN.po
+++ b/addons/account_analytic_default/i18n/zh_CN.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2010-09-29 09:13+0000\n"
-"Last-Translator: Black Jack \n"
+"PO-Revision-Date: 2011-07-01 10:20+0000\n"
+"Last-Translator: digitalsatori \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: 2011-04-29 05:25+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-07-02 05:06+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: account_analytic_default
#: model:ir.module.module,shortdesc:account_analytic_default.module_meta_information
@@ -49,7 +49,7 @@ msgstr ""
#. module: account_analytic_default
#: view:account.analytic.default:0
msgid "Group By..."
-msgstr ""
+msgstr "分组..."
#. module: account_analytic_default
#: help:account.analytic.default,date_stop:0
@@ -59,7 +59,7 @@ msgstr ""
#. module: account_analytic_default
#: model:ir.model,name:account_analytic_default.model_stock_picking
msgid "Picking List"
-msgstr ""
+msgstr "领料/提货单"
#. module: account_analytic_default
#: view:account.analytic.default:0
diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py
index 990f53e91ef..c8ab5334d8a 100644
--- a/addons/account_analytic_plans/account_analytic_plans.py
+++ b/addons/account_analytic_plans/account_analytic_plans.py
@@ -61,7 +61,7 @@ class account_analytic_line(osv.osv):
return res
_columns = {
- 'amount_currency': fields.function(_get_amount, string="Amount Currency", type="float", method=True, store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True),
+ 'amount_currency': fields.function(_get_amount, string="Amount Currency", type="float", store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True),
'percentage': fields.float('Percentage')
}
diff --git a/addons/account_anglo_saxon/i18n/fi.po b/addons/account_anglo_saxon/i18n/fi.po
new file mode 100644
index 00000000000..4806d363e98
--- /dev/null
+++ b/addons/account_anglo_saxon/i18n/fi.po
@@ -0,0 +1,111 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-06-29 08:04+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-30 04:34+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: account_anglo_saxon
+#: view:product.category:0
+msgid " Accounting Property"
+msgstr " Kirjanpito-ominaisuus"
+
+#. module: account_anglo_saxon
+#: sql_constraint:purchase.order:0
+msgid "Order Reference must be unique !"
+msgstr "Tilauksen viite tulee olla yksilöllinen!"
+
+#. module: account_anglo_saxon
+#: constraint:product.category:0
+msgid "Error ! You can not create recursive categories."
+msgstr "Virhe ! Et voi luoda rekursiivisia luokkia."
+
+#. module: account_anglo_saxon
+#: constraint:product.template:0
+msgid ""
+"Error: The default UOM and the purchase UOM must be in the same category."
+msgstr ""
+"Virhe: Oletus mittayksikkö ja ostojen mittayksikkö täytyy olla samassa "
+"kategoriassa."
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_account_invoice_line
+msgid "Invoice Line"
+msgstr "Laskun rivi"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_purchase_order
+msgid "Purchase Order"
+msgstr "Ostotilaus"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_product_template
+msgid "Product Template"
+msgstr "Tuotteen malli"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_product_category
+msgid "Product Category"
+msgstr "Tuotteen kategoria"
+
+#. module: account_anglo_saxon
+#: model:ir.module.module,shortdesc:account_anglo_saxon.module_meta_information
+msgid "Stock Accounting for Anglo Saxon countries"
+msgstr "Varastokirjanpito anglosaksalaisille maille"
+
+#. 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 "Hintaerotuksen tili"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_account_invoice
+msgid "Invoice"
+msgstr "Lasku"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_stock_picking
+msgid "Picking List"
+msgstr "Keräilylista"
+
+#. 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 the 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.\n"
+" Secondly, price differences between actual purchase price and fixed "
+"product standard price are booked on a separate 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 ""
+"Tätä tiliä käytetään arvostamaan hintaeroa ostohinnan ja kustannushinnan "
+"välillä"
diff --git a/addons/account_budget/account_budget.py b/addons/account_budget/account_budget.py
index 12caba17374..7d9666ae5ac 100644
--- a/addons/account_budget/account_budget.py
+++ b/addons/account_budget/account_budget.py
@@ -196,9 +196,9 @@ class crossovered_budget_lines(osv.osv):
'date_to': fields.date('End Date', required=True),
'paid_date': fields.date('Paid Date'),
'planned_amount':fields.float('Planned Amount', required=True, digits_compute=dp.get_precision('Account')),
- 'practical_amount':fields.function(_prac, method=True, string='Practical Amount', type='float', digits_compute=dp.get_precision('Account')),
- 'theoritical_amount':fields.function(_theo, method=True, string='Theoretical Amount', type='float', digits_compute=dp.get_precision('Account')),
- 'percentage':fields.function(_perc, method=True, string='Percentage', type='float'),
+ 'practical_amount':fields.function(_prac, string='Practical Amount', type='float', digits_compute=dp.get_precision('Account')),
+ 'theoritical_amount':fields.function(_theo, string='Theoretical Amount', type='float', digits_compute=dp.get_precision('Account')),
+ 'percentage':fields.function(_perc, string='Percentage', type='float'),
'company_id': fields.related('crossovered_budget_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True)
}
diff --git a/addons/account_coda/i18n/fi.po b/addons/account_coda/i18n/fi.po
new file mode 100644
index 00000000000..8daf08f08c8
--- /dev/null
+++ b/addons/account_coda/i18n/fi.po
@@ -0,0 +1,261 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-06-28 09:19+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: account_coda
+#: help:account.coda,journal_id:0
+#: field:account.coda.import,journal_id:0
+msgid "Bank Journal"
+msgstr "Pankkitapahtumat"
+
+#. module: account_coda
+#: view:account.coda:0
+#: field:account.coda.import,note:0
+msgid "Log"
+msgstr "Loki"
+
+#. module: account_coda
+#: model:ir.model,name:account_coda.model_account_coda_import
+msgid "Account Coda Import"
+msgstr "Tilien Coda tuonti"
+
+#. module: account_coda
+#: field:account.coda,name:0
+msgid "Coda file"
+msgstr "Coda tiedosto"
+
+#. module: account_coda
+#: view:account.coda:0
+msgid "Group By..."
+msgstr "Ryhmittely.."
+
+#. module: account_coda
+#: field:account.coda.import,awaiting_account:0
+msgid "Default Account for Unrecognized Movement"
+msgstr "Oletustili tuntemattomille siirroille"
+
+#. module: account_coda
+#: help:account.coda,date:0
+msgid "Import Date"
+msgstr "Tuontipäivä"
+
+#. module: account_coda
+#: field:account.coda,note:0
+msgid "Import log"
+msgstr "Tuontiloki"
+
+#. module: account_coda
+#: view:account.coda.import:0
+msgid "Import"
+msgstr "Tuo"
+
+#. module: account_coda
+#: view:account.coda:0
+msgid "Coda import"
+msgstr "Coda tuonti"
+
+#. module: account_coda
+#: code:addons/account_coda/account_coda.py:51
+#, python-format
+msgid "Coda file not found for bank statement !!"
+msgstr "Coda tiedostoa ei löytynyt tiliotteelle"
+
+#. module: account_coda
+#: help:account.coda.import,awaiting_account:0
+msgid ""
+"Set here the default account that will be used, if the partner is found but "
+"does not have the bank account, or if he is domiciled"
+msgstr ""
+
+#. module: account_coda
+#: view:account.coda:0
+#: field:account.coda,company_id:0
+msgid "Company"
+msgstr "Yritys"
+
+#. module: account_coda
+#: help:account.coda.import,def_payable:0
+msgid ""
+"Set here the payable account that will be used, by default, if the partner "
+"is not found"
+msgstr ""
+
+#. module: account_coda
+#: view:account.coda:0
+msgid "Search Coda"
+msgstr "Hae coda"
+
+#. module: account_coda
+#: view:account.coda:0
+#: field:account.coda,user_id:0
+msgid "User"
+msgstr "Käyttäjä"
+
+#. module: account_coda
+#: view:account.coda:0
+#: field:account.coda,date:0
+msgid "Date"
+msgstr "Päiväys"
+
+#. module: account_coda
+#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement
+msgid "Coda Import Logs"
+msgstr "Coda tuontilokit"
+
+#. module: account_coda
+#: model:ir.model,name:account_coda.model_account_coda
+msgid "coda for an Account"
+msgstr "Coda tilille"
+
+#. module: account_coda
+#: field:account.coda.import,def_payable:0
+msgid "Default Payable Account"
+msgstr "Oletus maksutili"
+
+#. module: account_coda
+#: help:account.coda,name:0
+msgid "Store the detail of bank statements"
+msgstr "Talleta tiliotteiden yksityiskohdat"
+
+#. module: account_coda
+#: view:account.coda.import:0
+msgid "Cancel"
+msgstr "Peruuta"
+
+#. module: account_coda
+#: view:account.coda.import:0
+msgid "Open Statements"
+msgstr "Avaa tiliotteet"
+
+#. module: account_coda
+#: code:addons/account_coda/wizard/account_coda_import.py:167
+#, python-format
+msgid "The bank account %s is not defined for the partner %s.\n"
+msgstr ""
+
+#. module: account_coda
+#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
+msgid "Import Coda Statements"
+msgstr "Tuo Coda tiedot"
+
+#. module: account_coda
+#: view:account.coda.import:0
+#: model:ir.actions.act_window,name:account_coda.action_account_coda_import
+msgid "Import Coda Statement"
+msgstr "Tuo Coda tiedot"
+
+#. module: account_coda
+#: model:ir.module.module,description:account_coda.module_meta_information
+msgid ""
+"\n"
+" Module provides functionality to import\n"
+" bank statements from coda files.\n"
+" "
+msgstr ""
+
+#. module: account_coda
+#: view:account.coda:0
+msgid "Statements"
+msgstr "Tiliotteet"
+
+#. module: account_coda
+#: field:account.bank.statement,coda_id:0
+msgid "Coda"
+msgstr "Coda"
+
+#. module: account_coda
+#: view:account.coda.import:0
+msgid "Results :"
+msgstr "Tulokset :"
+
+#. module: account_coda
+#: view:account.coda.import:0
+msgid "Result of Imported Coda Statements"
+msgstr "Tulos tuoduista Coda tiliotteista"
+
+#. module: account_coda
+#: help:account.coda.import,def_receivable:0
+msgid ""
+"Set here the receivable account that will be used, by default, if the "
+"partner is not found"
+msgstr ""
+"Valitse tähän oletustili jota käytetään jos saapuneen maksun kumppania ei "
+"löydetä"
+
+#. module: account_coda
+#: field:account.coda.import,coda:0
+#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement
+msgid "Coda File"
+msgstr "Coda tiedosto"
+
+#. module: account_coda
+#: model:ir.model,name:account_coda.model_account_bank_statement
+msgid "Bank Statement"
+msgstr "Pankin tiliote"
+
+#. module: account_coda
+#: model:ir.actions.act_window,name:account_coda.action_account_coda
+msgid "Coda Logs"
+msgstr "Coda lokit"
+
+#. module: account_coda
+#: code:addons/account_coda/wizard/account_coda_import.py:311
+#, python-format
+msgid "Result"
+msgstr "Tulos"
+
+#. module: account_coda
+#: view:account.coda.import:0
+msgid "Click on 'New' to select your file :"
+msgstr "Valitse 'uusi' valitaksesi tiedostosi :"
+
+#. module: account_coda
+#: field:account.coda.import,def_receivable:0
+msgid "Default Receivable Account"
+msgstr "Oletus saamistili"
+
+#. module: account_coda
+#: view:account.coda.import:0
+msgid "Close"
+msgstr "Sulje"
+
+#. module: account_coda
+#: field:account.coda,statement_ids:0
+msgid "Generated Bank Statements"
+msgstr "Luodut tiliotteet"
+
+#. module: account_coda
+#: model:ir.module.module,shortdesc:account_coda.module_meta_information
+msgid "Account CODA - import bank statements from coda file"
+msgstr ""
+
+#. module: account_coda
+#: view:account.coda.import:0
+msgid "Configure Your Journal and Account :"
+msgstr ""
+
+#. module: account_coda
+#: view:account.coda:0
+msgid "Coda Import"
+msgstr ""
+
+#. module: account_coda
+#: view:account.coda:0
+#: field:account.coda,journal_id:0
+msgid "Journal"
+msgstr ""
diff --git a/addons/account_invoice_layout/account_invoice_layout.py b/addons/account_invoice_layout/account_invoice_layout.py
index 3337710420f..b0fb92c9abb 100644
--- a/addons/account_invoice_layout/account_invoice_layout.py
+++ b/addons/account_invoice_layout/account_invoice_layout.py
@@ -161,7 +161,7 @@ class account_invoice_line(osv.osv):
('break','Page Break'),]
,'Type', select=True, required=True),
'sequence': fields.integer('Sequence Number', help="Gives the sequence order when displaying a list of invoice lines."),
- 'functional_field': fields.function(_fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type='char', fnct_search=None, obj=None, method=True, store=False, string="Source Account"),
+ 'functional_field': fields.function(_fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type='char', fnct_search=None, obj=None, store=False, string="Source Account"),
}
def _default_account(self, cr, uid, context=None):
diff --git a/addons/account_payment/account_invoice.py b/addons/account_payment/account_invoice.py
index 1f882b48421..fd787863c7d 100644
--- a/addons/account_payment/account_invoice.py
+++ b/addons/account_payment/account_invoice.py
@@ -42,7 +42,7 @@ class Invoice(osv.osv):
return res
_columns = {
- 'amount_to_pay': fields.function(_amount_to_pay, method=True,
+ 'amount_to_pay': fields.function(_amount_to_pay,
type='float', string='Amount to be paid',
help='The amount which should be paid at the current date\n' \
'minus the amount which is already in payment order'),
diff --git a/addons/account_payment/account_move_line.py b/addons/account_payment/account_move_line.py
index 68bb33ca4e5..24f9486be95 100644
--- a/addons/account_payment/account_move_line.py
+++ b/addons/account_payment/account_move_line.py
@@ -111,7 +111,7 @@ class account_move_line(osv.osv):
return line2bank
_columns = {
- 'amount_to_pay': fields.function(amount_to_pay, method=True,
+ 'amount_to_pay': fields.function(amount_to_pay,
type='float', string='Amount to pay', fnct_search=_to_pay_search),
}
diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py
index 19de746b7c9..a7b803b2d3b 100644
--- a/addons/account_payment/account_payment.py
+++ b/addons/account_payment/account_payment.py
@@ -96,7 +96,7 @@ class payment_order(osv.osv):
('done', 'Done')], 'State', select=True,
help='When an order is placed the state is \'Draft\'.\n Once the bank is confirmed the state is set to \'Confirmed\'.\n Then the order is paid the state is \'Done\'.'),
'line_ids': fields.one2many('payment.line', 'order_id', 'Payment lines', states={'done': [('readonly', True)]}),
- 'total': fields.function(_total, string="Total", method=True, type='float'),
+ 'total': fields.function(_total, string="Total", type='float'),
'user_id': fields.many2one('res.users', 'User', required=True, states={'done': [('readonly', True)]}),
'date_prefered': fields.selection([
('now', 'Directly'),
@@ -348,10 +348,10 @@ class payment_line(osv.osv):
help='Payment amount in the company currency'),
'ml_date_created': fields.function(_get_ml_created_date, string="Effective Date",
method=True, type='date', help="Invoice Effective Date"),
- 'ml_maturity_date': fields.function(_get_ml_maturity_date, method=True, type='date', string='Due Date'),
- 'ml_inv_ref': fields.function(_get_ml_inv_ref, method=True, type='many2one', relation='account.invoice', string='Invoice Ref.'),
- 'info_owner': fields.function(info_owner, string="Owner Account", method=True, type="text", help='Address of the Main Partner'),
- 'info_partner': fields.function(info_partner, string="Destination Account", method=True, type="text", help='Address of the Ordering Customer.'),
+ 'ml_maturity_date': fields.function(_get_ml_maturity_date, type='date', string='Due Date'),
+ 'ml_inv_ref': fields.function(_get_ml_inv_ref, type='many2one', relation='account.invoice', string='Invoice Ref.'),
+ 'info_owner': fields.function(info_owner, string="Owner Account", type="text", help='Address of the Main Partner'),
+ 'info_partner': fields.function(info_partner, string="Destination Account", type="text", help='Address of the Ordering Customer.'),
'date': fields.date('Payment Date', help="If no payment date is specified, the bank will treat this payment line directly"),
'create_date': fields.datetime('Created', readonly=True),
'state': fields.selection([('normal','Free'), ('structured','Structured')], 'Communication Type', required=True),
diff --git a/addons/account_sequence/i18n/nb.po b/addons/account_sequence/i18n/nb.po
new file mode 100644
index 00000000000..f77793fcb3e
--- /dev/null
+++ b/addons/account_sequence/i18n/nb.po
@@ -0,0 +1,221 @@
+# Norwegian Bokmal translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-06-24 11:23+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Norwegian Bokmal \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-25 04:59+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+#: model:ir.actions.act_window,name:account_sequence.action_account_seq_installer
+msgid "Account Sequence Application Configuration"
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move:0
+msgid ""
+"You cannot create entries on different periods/journals in the same move"
+msgstr ""
+
+#. module: account_sequence
+#: help:account.move,internal_sequence_number:0
+#: help:account.move.line,internal_sequence_number:0
+msgid "Internal Sequence Number"
+msgstr "Internt sekvensnummer"
+
+#. module: account_sequence
+#: help:account.sequence.installer,number_next:0
+msgid "Next number of this sequence"
+msgstr "Neste nummer på denne sekvensen"
+
+#. module: account_sequence
+#: field:account.sequence.installer,number_next:0
+msgid "Next Number"
+msgstr "Neste nummer"
+
+#. module: account_sequence
+#: field:account.sequence.installer,number_increment:0
+msgid "Increment Number"
+msgstr ""
+
+#. module: account_sequence
+#: model:ir.module.module,description:account_sequence.module_meta_information
+msgid ""
+"\n"
+" This module maintains internal sequence number for accounting entries.\n"
+" "
+msgstr ""
+
+#. module: account_sequence
+#: model:ir.module.module,shortdesc:account_sequence.module_meta_information
+msgid "Entries Sequence Numbering"
+msgstr ""
+
+#. module: account_sequence
+#: help:account.sequence.installer,number_increment:0
+msgid "The next number of the sequence will be incremented by this number"
+msgstr ""
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+msgid "Configure Your Account Sequence Application"
+msgstr ""
+
+#. module: account_sequence
+#: field:account.sequence.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: account_sequence
+#: help:account.sequence.installer,suffix:0
+msgid "Suffix value of the record for the sequence"
+msgstr ""
+
+#. module: account_sequence
+#: field:account.sequence.installer,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: account_sequence
+#: help:account.journal,internal_sequence_id:0
+msgid ""
+"This sequence will be used to maintain the internal number for the journal "
+"entries related to this journal."
+msgstr ""
+
+#. module: account_sequence
+#: field:account.sequence.installer,padding:0
+msgid "Number padding"
+msgstr ""
+
+#. module: account_sequence
+#: model:ir.model,name:account_sequence.model_account_move_line
+msgid "Journal Items"
+msgstr ""
+
+#. module: account_sequence
+#: field:account.move,internal_sequence_number:0
+#: field:account.move.line,internal_sequence_number:0
+msgid "Internal Number"
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid "Company must be same for its related account and period."
+msgstr ""
+
+#. module: account_sequence
+#: help:account.sequence.installer,padding:0
+msgid ""
+"OpenERP will automatically adds some '0' on the left of the 'Next Number' to "
+"get the required padding size."
+msgstr ""
+
+#. module: account_sequence
+#: field:account.sequence.installer,name:0
+msgid "Name"
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid "You can not create move line on closed account."
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move:0
+msgid ""
+"You cannot create more than one move per period on centralized journal"
+msgstr ""
+
+#. module: account_sequence
+#: sql_constraint:account.move.line:0
+msgid "Wrong credit or debit value in accounting entry !"
+msgstr ""
+
+#. module: account_sequence
+#: field:account.journal,internal_sequence_id:0
+msgid "Internal Sequence"
+msgstr ""
+
+#. module: account_sequence
+#: model:ir.model,name:account_sequence.model_account_sequence_installer
+msgid "account.sequence.installer"
+msgstr ""
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+msgid "Configure"
+msgstr ""
+
+#. module: account_sequence
+#: help:account.sequence.installer,prefix:0
+msgid "Prefix value of the record for the sequence"
+msgstr ""
+
+#. module: account_sequence
+#: model:ir.model,name:account_sequence.model_account_move
+msgid "Account Entry"
+msgstr ""
+
+#. module: account_sequence
+#: field:account.sequence.installer,suffix:0
+msgid "Suffix"
+msgstr ""
+
+#. module: account_sequence
+#: field:account.sequence.installer,config_logo:0
+msgid "Image"
+msgstr ""
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+msgid "title"
+msgstr ""
+
+#. module: account_sequence
+#: sql_constraint:account.journal:0
+msgid "The name of the journal must be unique per company !"
+msgstr ""
+
+#. module: account_sequence
+#: field:account.sequence.installer,prefix:0
+msgid "Prefix"
+msgstr ""
+
+#. module: account_sequence
+#: sql_constraint:account.journal:0
+msgid "The code of the journal must be unique per company !"
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid ""
+"You can not create move line on receivable/payable account without partner"
+msgstr ""
+
+#. module: account_sequence
+#: model:ir.model,name:account_sequence.model_account_journal
+msgid "Journal"
+msgstr ""
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+msgid "You can enhance the Account Sequence Application by installing ."
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid "You can not create move line on view account."
+msgstr ""
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index b4422cd8051..dee3d81832b 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -226,7 +226,7 @@ class account_voucher(osv.osv):
'writeoff_acc_id': fields.many2one('account.account', 'Write-Off account', readonly=True, states={'draft': [('readonly', False)]}),
'comment': fields.char('Write-Off Comment', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}),
'analytic_id': fields.many2one('account.analytic.account','Write-Off Analytic Account', readonly=True, states={'draft': [('readonly', False)]}),
- 'writeoff_amount': fields.function(_get_writeoff_amount, method=True, string='Write-Off Amount', type='float', readonly=True),
+ 'writeoff_amount': fields.function(_get_writeoff_amount, string='Write-Off Amount', type='float', readonly=True),
}
_defaults = {
'period_id': _get_period,
@@ -845,8 +845,8 @@ class account_voucher_line(osv.osv):
'move_line_id': fields.many2one('account.move.line', 'Journal Item'),
'date_original': fields.related('move_line_id','date', type='date', relation='account.move.line', string='Date', readonly=1),
'date_due': fields.related('move_line_id','date_maturity', type='date', relation='account.move.line', string='Due Date', readonly=1),
- 'amount_original': fields.function(_compute_balance, method=True, multi='dc', type='float', string='Original Amount', store=True),
- 'amount_unreconciled': fields.function(_compute_balance, method=True, multi='dc', type='float', string='Open Balance', store=True),
+ 'amount_original': fields.function(_compute_balance, multi='dc', type='float', string='Original Amount', store=True),
+ 'amount_unreconciled': fields.function(_compute_balance, multi='dc', type='float', string='Open Balance', store=True),
'company_id': fields.related('voucher_id','company_id', relation='res.company', type='many2one', string='Company', store=True, readonly=True),
}
_defaults = {
@@ -991,7 +991,7 @@ class account_bank_statement_line(osv.osv):
_columns = {
'amount_reconciled': fields.function(_amount_reconciled,
- string='Amount reconciled', method=True, type='float'),
+ string='Amount reconciled', type='float'),
'voucher_id': fields.many2one('account.voucher', 'Payment'),
}
diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py
index d822c382c91..a155352adf8 100644
--- a/addons/analytic/analytic.py
+++ b/addons/analytic/analytic.py
@@ -149,18 +149,18 @@ class account_analytic_account(osv.osv):
_columns = {
'name': fields.char('Account Name', size=128, required=True),
- 'complete_name': fields.function(_complete_name_calc, method=True, type='char', string='Full Account Name'),
+ 'complete_name': fields.function(_complete_name_calc, type='char', string='Full Account Name'),
'code': fields.char('Account Code', size=24, select=True),
'type': fields.selection([('view','View'), ('normal','Normal')], 'Account Type', help='If you select the View Type, it means you won\'t allow to create journal entries using that account.'),
'description': fields.text('Description'),
'parent_id': fields.many2one('account.analytic.account', 'Parent Analytic Account', select=2),
'child_ids': fields.one2many('account.analytic.account', 'parent_id', 'Child Accounts'),
- 'child_complete_ids': fields.function(_child_compute, relation='account.analytic.account', method=True, string="Account Hierarchy", type='many2many'),
+ 'child_complete_ids': fields.function(_child_compute, relation='account.analytic.account', string="Account Hierarchy", type='many2many'),
'line_ids': fields.one2many('account.analytic.line', 'account_id', 'Analytic Entries'),
- 'balance': fields.function(_debit_credit_bal_qtty, method=True, type='float', string='Balance', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
- 'debit': fields.function(_debit_credit_bal_qtty, method=True, type='float', string='Debit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
- 'credit': fields.function(_debit_credit_bal_qtty, method=True, type='float', string='Credit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
- 'quantity': fields.function(_debit_credit_bal_qtty, method=True, type='float', string='Quantity', multi='debit_credit_bal_qtty'),
+ 'balance': fields.function(_debit_credit_bal_qtty, type='float', string='Balance', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
+ 'debit': fields.function(_debit_credit_bal_qtty, type='float', string='Debit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
+ 'credit': fields.function(_debit_credit_bal_qtty, type='float', string='Credit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')),
+ 'quantity': fields.function(_debit_credit_bal_qtty, type='float', string='Quantity', multi='debit_credit_bal_qtty'),
'quantity_max': fields.float('Maximum Quantity', help='Sets the higher limit of quantity of hours.'),
'partner_id': fields.many2one('res.partner', 'Partner'),
'contact_id': fields.many2one('res.partner.address', 'Contact'),
@@ -175,7 +175,7 @@ class account_analytic_account(osv.osv):
\n* And finally when all the transactions are over, it can be in \'Close\' state. \
\n* The project can be in either if the states \'Template\' and \'Running\'.\n If it is template then we can make projects based on the template projects. If its in \'Running\' state it is a normal project.\
\n If it is to be reviewed then the state is \'Pending\'.\n When the project is completed the state is set to \'Done\'.'),
- 'currency_id': fields.function(_currency, fnct_inv=_set_company_currency, method=True,
+ 'currency_id': fields.function(_currency, fnct_inv=_set_company_currency,
store = {
'res.company': (_get_analytic_account, ['currency_id'], 10),
}, string='Currency', type='many2one', relation='res.currency'),
diff --git a/addons/analytic/i18n/fi.po b/addons/analytic/i18n/fi.po
new file mode 100644
index 00000000000..5822cb824d2
--- /dev/null
+++ b/addons/analytic/i18n/fi.po
@@ -0,0 +1,261 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-06-29 06:16+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-30 04:34+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: analytic
+#: field:account.analytic.account,child_ids:0
+msgid "Child Accounts"
+msgstr "Alatason tilit"
+
+#. module: analytic
+#: field:account.analytic.account,name:0
+msgid "Account Name"
+msgstr "Tilin nimi"
+
+#. module: analytic
+#: help:account.analytic.line,unit_amount:0
+msgid "Specifies the amount of quantity to count."
+msgstr "Määrittelee laskettavan määrän"
+
+#. module: analytic
+#: model:ir.module.module,description:analytic.module_meta_information
+msgid ""
+"Module for defining analytic accounting object.\n"
+" "
+msgstr ""
+"Moduuli analyyttisten tilien määrittelyyn.\n"
+" "
+
+#. module: analytic
+#: field:account.analytic.account,state:0
+msgid "State"
+msgstr "Tila"
+
+#. module: analytic
+#: field:account.analytic.account,user_id:0
+msgid "Account Manager"
+msgstr "Asiakas päällikkö"
+
+#. module: analytic
+#: selection:account.analytic.account,state:0
+msgid "Draft"
+msgstr "Luonnos"
+
+#. module: analytic
+#: selection:account.analytic.account,state:0
+msgid "Closed"
+msgstr "Suljettu"
+
+#. module: analytic
+#: field:account.analytic.account,debit:0
+msgid "Debit"
+msgstr "Debet"
+
+#. module: analytic
+#: help:account.analytic.account,state:0
+msgid ""
+"* When an account is created its in 'Draft' state. "
+" \n"
+"* If any associated partner is there, it can be in 'Open' state. "
+" \n"
+"* If any pending balance is there it can be in 'Pending'. "
+" \n"
+"* And finally when all the transactions are over, it can be in 'Close' "
+"state. \n"
+"* The project can be in either if the states 'Template' and 'Running'.\n"
+" If it is template then we can make projects based on the template projects. "
+"If its in 'Running' state it is a normal project. "
+" \n"
+" If it is to be reviewed then the state is 'Pending'.\n"
+" When the project is completed the state is set to 'Done'."
+msgstr ""
+
+#. module: analytic
+#: field:account.analytic.account,type:0
+msgid "Account Type"
+msgstr "Tilityyppi"
+
+#. module: analytic
+#: selection:account.analytic.account,state:0
+msgid "Template"
+msgstr "Mallipohja"
+
+#. module: analytic
+#: selection:account.analytic.account,state:0
+msgid "Pending"
+msgstr "Odottava"
+
+#. module: analytic
+#: model:ir.model,name:analytic.model_account_analytic_line
+msgid "Analytic Line"
+msgstr "Analyyttinen rivi"
+
+#. module: analytic
+#: field:account.analytic.account,description:0
+#: field:account.analytic.line,name:0
+msgid "Description"
+msgstr "Kuvaus"
+
+#. module: analytic
+#: selection:account.analytic.account,type:0
+msgid "Normal"
+msgstr "Tavallinen"
+
+#. module: analytic
+#: field:account.analytic.account,company_id:0
+#: field:account.analytic.line,company_id:0
+msgid "Company"
+msgstr "Yritys"
+
+#. module: analytic
+#: field:account.analytic.account,quantity_max:0
+msgid "Maximum Quantity"
+msgstr "Maksimimäärä"
+
+#. module: analytic
+#: field:account.analytic.line,user_id:0
+msgid "User"
+msgstr "Käyttäjä"
+
+#. module: analytic
+#: field:account.analytic.account,parent_id:0
+msgid "Parent Analytic Account"
+msgstr "Ylempi analyyttinen tili"
+
+#. module: analytic
+#: field:account.analytic.line,date:0
+msgid "Date"
+msgstr "Päiväys"
+
+#. module: analytic
+#: field:account.analytic.account,currency_id:0
+msgid "Account currency"
+msgstr "Tilin valuutta"
+
+#. module: analytic
+#: field:account.analytic.account,quantity:0
+#: field:account.analytic.line,unit_amount:0
+msgid "Quantity"
+msgstr "Määrä"
+
+#. module: analytic
+#: help:account.analytic.line,amount:0
+msgid ""
+"Calculated by multiplying the quantity and the price given in the Product's "
+"cost price. Always expressed in the company main currency."
+msgstr ""
+"Laskettu kertomalla määrä ja tuotteen kustannushinta. Yrityksen "
+"päävaluutassa."
+
+#. module: analytic
+#: help:account.analytic.account,quantity_max:0
+msgid "Sets the higher limit of quantity of hours."
+msgstr "Asettaa tuntien määrän ylärajan"
+
+#. module: analytic
+#: field:account.analytic.account,credit:0
+msgid "Credit"
+msgstr "Kredit"
+
+#. module: analytic
+#: field:account.analytic.line,amount:0
+msgid "Amount"
+msgstr "Määrä"
+
+#. module: analytic
+#: field:account.analytic.account,contact_id:0
+msgid "Contact"
+msgstr "Yhteyshenkilö"
+
+#. module: analytic
+#: constraint:account.analytic.account:0
+msgid ""
+"Error! The currency has to be the same as the currency of the selected "
+"company"
+msgstr "Virhe! Valuutan tulee olla sama kun valitun yrityksen valutta."
+
+#. module: analytic
+#: selection:account.analytic.account,state:0
+msgid "Cancelled"
+msgstr "Peruttu"
+
+#. module: analytic
+#: field:account.analytic.account,balance:0
+msgid "Balance"
+msgstr "Saldo"
+
+#. module: analytic
+#: constraint:account.analytic.account:0
+msgid "Error! You can not create recursive analytic accounts."
+msgstr "Virhe! Et voi luoda sisäkkäisiä analyyttisiä tilejä."
+
+#. module: analytic
+#: help:account.analytic.account,type:0
+msgid ""
+"If you select the View Type, it means you won't allow to create journal "
+"entries using that account."
+msgstr ""
+"Jos valitset näkymätyypin, se tarkoittaa että et voi luoda "
+"päiväkirjamerkintöjä käyttäen sitä tiliä."
+
+#. module: analytic
+#: field:account.analytic.account,date:0
+msgid "Date End"
+msgstr "Loppupäiväys"
+
+#. module: analytic
+#: field:account.analytic.account,code:0
+msgid "Account Code"
+msgstr "Tilikoodi"
+
+#. module: analytic
+#: field:account.analytic.account,complete_name:0
+msgid "Full Account Name"
+msgstr "Tilin kokonimi"
+
+#. module: analytic
+#: field:account.analytic.line,account_id:0
+#: model:ir.model,name:analytic.model_account_analytic_account
+#: model:ir.module.module,shortdesc:analytic.module_meta_information
+msgid "Analytic Account"
+msgstr "Analyyttinen tili"
+
+#. module: analytic
+#: selection:account.analytic.account,type:0
+msgid "View"
+msgstr "Näkymä"
+
+#. module: analytic
+#: field:account.analytic.account,partner_id:0
+msgid "Partner"
+msgstr "Kumppani"
+
+#. module: analytic
+#: field:account.analytic.account,date_start:0
+msgid "Date Start"
+msgstr "Aloituspäivämäärä"
+
+#. module: analytic
+#: selection:account.analytic.account,state:0
+msgid "Open"
+msgstr "Avoin"
+
+#. module: analytic
+#: field:account.analytic.account,line_ids:0
+msgid "Analytic Entries"
+msgstr "Analyyttiset viennit"
diff --git a/addons/analytic_user_function/i18n/fi.po b/addons/analytic_user_function/i18n/fi.po
new file mode 100644
index 00000000000..78387b7f6bd
--- /dev/null
+++ b/addons/analytic_user_function/i18n/fi.po
@@ -0,0 +1,103 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-03 16:56+0000\n"
+"PO-Revision-Date: 2011-06-29 05:53+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-30 04:34+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: analytic_user_function
+#: field:analytic_user_funct_grid,product_id:0
+msgid "Product"
+msgstr "Tuote"
+
+#. module: analytic_user_function
+#: code:addons/analytic_user_function/analytic_user_function.py:96
+#: code:addons/analytic_user_function/analytic_user_function.py:131
+#, python-format
+msgid "Error !"
+msgstr "Virhe !"
+
+#. module: analytic_user_function
+#: model:ir.model,name:analytic_user_function.model_hr_analytic_timesheet
+msgid "Timesheet Line"
+msgstr "Tuntilistan rivi"
+
+#. module: analytic_user_function
+#: field:analytic_user_funct_grid,account_id:0
+#: model:ir.model,name:analytic_user_function.model_account_analytic_account
+msgid "Analytic Account"
+msgstr "Analyyttinen tili"
+
+#. module: analytic_user_function
+#: view:account.analytic.account:0
+#: field:account.analytic.account,user_product_ids:0
+msgid "Users/Products Rel."
+msgstr "Käyttäjän/Tuotteen suhde"
+
+#. module: analytic_user_function
+#: field:analytic_user_funct_grid,user_id:0
+msgid "User"
+msgstr "Käyttäjä"
+
+#. module: analytic_user_function
+#: constraint:account.analytic.account:0
+msgid ""
+"Error! The currency has to be the same as the currency of the selected "
+"company"
+msgstr "Virhe! Valuutan tulee olla sama kun valitun yrityksen valutta."
+
+#. module: analytic_user_function
+#: code:addons/analytic_user_function/analytic_user_function.py:97
+#: code:addons/analytic_user_function/analytic_user_function.py:132
+#, python-format
+msgid "There is no expense account define for this product: \"%s\" (id:%d)"
+msgstr "Tuotteelle ei ole määritelty kulutiliä: \"%s\" (id:%d)"
+
+#. module: analytic_user_function
+#: model:ir.model,name:analytic_user_function.model_analytic_user_funct_grid
+msgid "Relation table between users and products on a analytic account"
+msgstr "Viitetaulu käyttäjien ja tuotteiden välillä analyyttisellä tilillä"
+
+#. module: analytic_user_function
+#: model:ir.module.module,description:analytic_user_function.module_meta_information
+msgid ""
+"\n"
+"\n"
+" This module allows you to define what is the default function of a "
+"specific user on a given account. This is mostly used when a user encodes "
+"his timesheet: the values are retrieved and the fields are auto-filled... "
+"but the possibility to change these values is still available.\n"
+"\n"
+" Obviously if no data has been recorded for the current account, the "
+"default value is given as usual by the employee data so that this module is "
+"perfectly compatible with older configurations.\n"
+"\n"
+" "
+msgstr ""
+
+#. module: analytic_user_function
+#: model:ir.module.module,shortdesc:analytic_user_function.module_meta_information
+msgid "Analytic User Function"
+msgstr "Analyyttinen käyttäjätoiminto"
+
+#. module: analytic_user_function
+#: constraint:account.analytic.account:0
+msgid "Error! You can not create recursive analytic accounts."
+msgstr "Virhe! Et voi luoda sisäkkäisiä analyyttisiä tilejä."
+
+#. module: analytic_user_function
+#: view:analytic_user_funct_grid:0
+msgid "User's Product for this Analytic Account"
+msgstr "Käyttäjän tuote tälle analyyttiselle tilille"
diff --git a/addons/anonymization/anonymization.py b/addons/anonymization/anonymization.py
index 2814227015a..c4a2d9f0488 100644
--- a/addons/anonymization/anonymization.py
+++ b/addons/anonymization/anonymization.py
@@ -240,10 +240,10 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
_columns = {
'name': fields.char(size='64', string='File Name'),
- 'summary': fields.function(_get_summary, method=True, type='text', string='Summary'),
+ 'summary': fields.function(_get_summary, type='text', string='Summary'),
'file_export': fields.binary(string='Export'),
'file_import': fields.binary(string='Import'),
- 'state': fields.function(_get_state, method=True, string='State', type='selection', selection=ANONYMIZATION_STATES, readonly=False),
+ 'state': fields.function(_get_state, string='State', type='selection', selection=ANONYMIZATION_STATES, readonly=False),
'msg': fields.text(string='Message'),
}
diff --git a/addons/anonymization/i18n/fi.po b/addons/anonymization/i18n/fi.po
new file mode 100644
index 00000000000..9526b2a0f71
--- /dev/null
+++ b/addons/anonymization/i18n/fi.po
@@ -0,0 +1,227 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-06-30 09:52+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-07-01 04:54+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: anonymization
+#: model:ir.model,name:anonymization.model_ir_model_fields_anonymize_wizard
+msgid "ir.model.fields.anonymize.wizard"
+msgstr ""
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization,field_name:0
+msgid "Field Name"
+msgstr "Kentän nimi"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization,field_id:0
+msgid "Field"
+msgstr "Kenttä"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization.history,state:0
+#: field:ir.model.fields.anonymize.wizard,state:0
+msgid "State"
+msgstr "Tila"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymize.wizard,file_import:0
+msgid "Import"
+msgstr "Tuo"
+
+#. module: anonymization
+#: model:ir.model,name:anonymization.model_ir_model_fields_anonymization
+msgid "ir.model.fields.anonymization"
+msgstr ""
+
+#. module: anonymization
+#: model:ir.module.module,shortdesc:anonymization.module_meta_information
+msgid "Database anonymization module"
+msgstr "Tietokannan anonymisointi moduuli"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization.history,direction:0
+msgid "Direction"
+msgstr "suunta"
+
+#. module: anonymization
+#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymization_tree
+#: view:ir.model.fields.anonymization:0
+#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_fields
+msgid "Anonymized Fields"
+msgstr "Anonymisoidut kentät"
+
+#. module: anonymization
+#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization
+msgid "Database anonymization"
+msgstr "Tietokannan anonymisointi"
+
+#. module: anonymization
+#: code:addons/anonymization/anonymization.py:55
+#: sql_constraint:ir.model.fields.anonymization:0
+#, python-format
+msgid "You cannot have two records having the same model and the same field"
+msgstr ""
+"Sinulla ei voi olla kahta tietuetta joilla on sama malli ja sama kenttä"
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymization,state:0
+#: selection:ir.model.fields.anonymize.wizard,state:0
+msgid "Anonymized"
+msgstr "Anonymisoitu"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization,state:0
+msgid "unknown"
+msgstr "Tuntematon"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization,model_id:0
+msgid "Object"
+msgstr "Objekti"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization.history,filepath:0
+msgid "File path"
+msgstr "Tiedoston polku"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization.history,date:0
+msgid "Date"
+msgstr "Päiväys"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymize.wizard,file_export:0
+msgid "Export"
+msgstr "Vie"
+
+#. module: anonymization
+#: view:ir.model.fields.anonymize.wizard:0
+msgid "Reverse the Database Anonymization"
+msgstr "Poista tietokannan anonymisointi"
+
+#. module: anonymization
+#: view:ir.model.fields.anonymize.wizard:0
+msgid "Database Anonymization"
+msgstr "Tietokannan anonymisointi"
+
+#. module: anonymization
+#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_wizard
+msgid "Anonymize database"
+msgstr "Anonymisoi tietokanta"
+
+#. module: anonymization
+#: view:ir.model.fields.anonymization.history:0
+#: field:ir.model.fields.anonymization.history,field_ids:0
+msgid "Fields"
+msgstr "Kentät"
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymization,state:0
+#: selection:ir.model.fields.anonymize.wizard,state:0
+msgid "Clear"
+msgstr "Tyhjennä"
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymization.history,direction:0
+msgid "clear -> anonymized"
+msgstr "näkyvä -> anonymisoitu"
+
+#. module: anonymization
+#: view:ir.model.fields.anonymize.wizard:0
+#: field:ir.model.fields.anonymize.wizard,summary:0
+msgid "Summary"
+msgstr "Yhteenveto"
+
+#. module: anonymization
+#: view:ir.model.fields.anonymization:0
+msgid "Anonymized Field"
+msgstr ""
+
+#. module: anonymization
+#: model:ir.module.module,description:anonymization.module_meta_information
+msgid ""
+"\n"
+"This module allows you to anonymize a database.\n"
+" "
+msgstr ""
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymize.wizard,state:0
+msgid "Unstable"
+msgstr "Epävakaa"
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymization.history,state:0
+msgid "Exception occured"
+msgstr "Poikkeus tapahtui"
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymization,state:0
+#: selection:ir.model.fields.anonymize.wizard,state:0
+msgid "Not Existing"
+msgstr "Ei ole olemassa"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymization,model_name:0
+msgid "Object Name"
+msgstr "Objektin nimi"
+
+#. module: anonymization
+#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymization_history_tree
+#: view:ir.model.fields.anonymization.history:0
+#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_history
+msgid "Anonymization History"
+msgstr "Anonymisoinnin historia"
+
+#. module: anonymization
+#: model:ir.model,name:anonymization.model_ir_model_fields_anonymization_history
+msgid "ir.model.fields.anonymization.history"
+msgstr ""
+
+#. module: anonymization
+#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymize_wizard
+#: view:ir.model.fields.anonymize.wizard:0
+msgid "Anonymize Database"
+msgstr "Anonymisoi tietokanta"
+
+#. module: anonymization
+#: field:ir.model.fields.anonymize.wizard,name:0
+msgid "File Name"
+msgstr "Tiedostonimi"
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymization.history,direction:0
+msgid "anonymized -> clear"
+msgstr "Anonymisoitu -> näkyvä"
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymization.history,state:0
+msgid "Started"
+msgstr "Käynnistetty"
+
+#. module: anonymization
+#: selection:ir.model.fields.anonymization.history,state:0
+msgid "Done"
+msgstr "Valmis"
+
+#. module: anonymization
+#: view:ir.model.fields.anonymization.history:0
+#: field:ir.model.fields.anonymization.history,msg:0
+#: field:ir.model.fields.anonymize.wizard,msg:0
+msgid "Message"
+msgstr "Viesti"
diff --git a/addons/anonymization/i18n/pt_BR.po b/addons/anonymization/i18n/pt_BR.po
index b710579d4d2..00f32c21c99 100644
--- a/addons/anonymization/i18n/pt_BR.po
+++ b/addons/anonymization/i18n/pt_BR.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2011-05-20 02:08+0000\n"
+"PO-Revision-Date: 2011-07-02 18:49+0000\n"
"Last-Translator: Gustavo T \n"
"Language-Team: Brazilian Portuguese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-05-21 05:02+0000\n"
-"X-Generator: Launchpad (build 12959)\n"
+"X-Launchpad-Export-Date: 2011-07-03 04:47+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: anonymization
#: model:ir.model,name:anonymization.model_ir_model_fields_anonymize_wizard
@@ -25,7 +25,7 @@ msgstr "ir.model.fields.anonymize.wizard"
#. module: anonymization
#: field:ir.model.fields.anonymization,field_name:0
msgid "Field Name"
-msgstr "Nome do Campo"
+msgstr "Nome do campo"
#. module: anonymization
#: field:ir.model.fields.anonymization,field_id:0
@@ -138,7 +138,7 @@ msgstr "Limpar"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,direction:0
msgid "clear -> anonymized"
-msgstr ""
+msgstr "em branco -> anonimizado"
#. module: anonymization
#: view:ir.model.fields.anonymize.wizard:0
@@ -149,7 +149,7 @@ msgstr "Resumo"
#. module: anonymization
#: view:ir.model.fields.anonymization:0
msgid "Anonymized Field"
-msgstr ""
+msgstr "Campo Anonimizado"
#. module: anonymization
#: model:ir.module.module,description:anonymization.module_meta_information
@@ -158,6 +158,9 @@ msgid ""
"This module allows you to anonymize a database.\n"
" "
msgstr ""
+"\n"
+"Este módulo permite que você anonimize um banco de dados\n"
+" "
#. module: anonymization
#: selection:ir.model.fields.anonymize.wizard,state:0
@@ -196,7 +199,7 @@ msgstr "ir.model.fields.anonymization.history"
#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymize_wizard
#: view:ir.model.fields.anonymize.wizard:0
msgid "Anonymize Database"
-msgstr ""
+msgstr "Anonimizar Banco de Dados"
#. module: anonymization
#: field:ir.model.fields.anonymize.wizard,name:0
@@ -206,21 +209,21 @@ msgstr "Nome do Arquivo"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,direction:0
msgid "anonymized -> clear"
-msgstr ""
+msgstr "anonimizado -> em branco"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,state:0
msgid "Started"
-msgstr ""
+msgstr "Iniciada"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,state:0
msgid "Done"
-msgstr ""
+msgstr "Concluído"
#. module: anonymization
#: view:ir.model.fields.anonymization.history:0
#: field:ir.model.fields.anonymization.history,msg:0
#: field:ir.model.fields.anonymize.wizard,msg:0
msgid "Message"
-msgstr ""
+msgstr "Mensagem"
diff --git a/addons/association/i18n/fi.po b/addons/association/i18n/fi.po
new file mode 100644
index 00000000000..9a1eae464cb
--- /dev/null
+++ b/addons/association/i18n/fi.po
@@ -0,0 +1,141 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-06-27 10:43+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,wiki:0
+msgid "Wiki"
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Event Management"
+msgstr "Tapahtumienhallinta"
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,project_gtd:0
+msgid "Getting Things Done"
+msgstr "Saada asiat tehtyä"
+
+#. module: association
+#: model:ir.module.module,description:association.module_meta_information
+msgid "This module is to create Profile for Associates"
+msgstr "Tämä moduuli mahdollistaa yhdistysjäsenprofiilien luonnin"
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,progress:0
+msgid "Configuration Progress"
+msgstr "Konfiguraation eteneminen"
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid ""
+"Here are specific applications related to the Association Profile you "
+"selected."
+msgstr ""
+"Tässä on määritellyt ohjelmat jotka liittyvät valitsemaasi "
+"yhdistysprofiiliin."
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "title"
+msgstr "otsikko"
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,event_project:0
+msgid "Helps you to manage and organize your events."
+msgstr "Auttaa sinua hallitsemaan ja organisoimaan tapahtumia"
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,config_logo:0
+msgid "Image"
+msgstr "Kuva"
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,hr_expense:0
+msgid ""
+"Tracks and manages employee expenses, and can automatically re-invoice "
+"clients if the expenses are project-related."
+msgstr ""
+"Seuraa ja hallitsee työntekijäkuluja ja voi automaattisesti laskuttaa "
+"asiakasta, jos kulut liittyvät projektiin."
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,project_gtd:0
+msgid ""
+"GTD is a methodology to efficiently organise yourself and your tasks. This "
+"module fully integrates GTD principle with OpenERP's project management."
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Resources Management"
+msgstr "Resurssienhallinta"
+
+#. module: association
+#: model:ir.module.module,shortdesc:association.module_meta_information
+msgid "Association profile"
+msgstr "Yhdistysprofiili"
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,hr_expense:0
+msgid "Expenses Tracking"
+msgstr "Kulujenseuranta"
+
+#. module: association
+#: model:ir.actions.act_window,name:association.action_config_install_module
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Association Application Configuration"
+msgstr "Jäsenhakemuksen konfiguraatio"
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,wiki:0
+msgid ""
+"Lets you create wiki pages and page groups in order to keep track of "
+"business knowledge and share it with and between your employees."
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,project:0
+msgid ""
+"Helps you manage your projects and tasks by tracking them, generating "
+"plannings, etc..."
+msgstr ""
+"Auttaa sinua hallitsemaan projektejasi ja tehtäviäsi seuraamalla niitä, "
+"luomalla suunnitelmia yms."
+
+#. module: association
+#: model:ir.model,name:association.model_profile_association_config_install_modules_wizard
+msgid "profile.association.config.install_modules_wizard"
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,event_project:0
+msgid "Events"
+msgstr "Tapahtumat"
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+#: field:profile.association.config.install_modules_wizard,project:0
+msgid "Project Management"
+msgstr "Projektinhallinta"
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Configure"
+msgstr "Konfiguroi"
diff --git a/addons/auction/auction.py b/addons/auction/auction.py
index 0b2fc467f88..685b6ee3368 100644
--- a/addons/auction/auction.py
+++ b/addons/auction/auction.py
@@ -95,12 +95,12 @@ class auction_dates(osv.osv):
'seller_costs': fields.many2many('account.tax', 'auction_seller_taxes_rel', 'auction_id', 'tax_id', 'Seller Costs', help="Account tax for seller"),
'acc_income': fields.many2one('account.account', 'Income Account', required=True),
'acc_expense': fields.many2one('account.account', 'Expense Account', required=True),
- 'adj_total': fields.function(_adjudication_get, method=True, string='Total Adjudication', store=True),
+ 'adj_total': fields.function(_adjudication_get, string='Total Adjudication', store=True),
'state': fields.selection((('draft', 'Draft'), ('closed', 'Closed')), 'State', select=1, readonly=True,
help='When auction starts the state is \'Draft\'.\n At the end of auction, the state becomes \'Closed\'.'),
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account', required=False),
- 'buyer_invoice_history': fields.function(_get_invoice, relation='account.invoice', method=True, string="Buyer Invoice", type='many2many', multi=True),
- 'seller_invoice_history': fields.function(_get_invoice, relation='account.invoice', method=True, string="Seller Invoice", type='many2many', multi=True),
+ 'buyer_invoice_history': fields.function(_get_invoice, relation='account.invoice', string="Buyer Invoice", type='many2many', multi=True),
+ 'seller_invoice_history': fields.function(_get_invoice, relation='account.invoice', string="Seller Invoice", type='many2many', multi=True),
}
_defaults = {
@@ -382,8 +382,8 @@ class auction_lots(osv.osv):
'vnd_lim': fields.float('Seller limit'),
'vnd_lim_net': fields.boolean('Net limit ?', readonly=True),
'image': fields.binary('Image', help="Object Image"),
- 'paid_vnd':fields.function(_getprice, string='Seller Paid', method=True, type='boolean', store=True, multi="paid_vnd", help="When state of Seller Invoice is 'Paid', this field is selected as True."),
- 'paid_ach':fields.function(_getprice, string='Buyer Invoice Reconciled', method=True, type='boolean', store=True, multi="paid_ach", help="When state of Buyer Invoice is 'Paid', this field is selected as True."),
+ 'paid_vnd':fields.function(_getprice, string='Seller Paid', type='boolean', store=True, multi="paid_vnd", help="When state of Seller Invoice is 'Paid', this field is selected as True."),
+ 'paid_ach':fields.function(_getprice, string='Buyer Invoice Reconciled', type='boolean', store=True, multi="paid_ach", help="When state of Buyer Invoice is 'Paid', this field is selected as True."),
'state': fields.selection((
('draft', 'Draft'),
('unsold', 'Unsold'),
@@ -394,14 +394,14 @@ class auction_lots(osv.osv):
\n* The \'Unsold\' state is used when object does not sold for long time, user can also set it as draft state after unsold. \
\n* The \'Paid\' state is used when user pay for the object \
\n* The \'Sold\' state is used when user buy the object.'),
- 'buyer_price': fields.function(_getprice, method=True, string='Buyer price', store=True, multi="buyer_price", help="Buyer Price"),
- 'seller_price': fields.function(_getprice, method=True, string='Seller price', store=True, multi="seller_price", help="Seller Price"),
- 'gross_revenue':fields.function(_getprice, method=True, string='Gross revenue', store=True, multi="gross_revenue", help="Buyer Price - Seller Price"),
- 'gross_margin':fields.function(_getprice, method=True, string='Gross Margin (%)', store=True, multi="gross_margin", help="(Gross Revenue*100.0)/ Object Price"),
- 'costs':fields.function(_getprice, method=True, string='Indirect costs', store=True, multi="costs", help="Deposit cost"),
+ 'buyer_price': fields.function(_getprice, string='Buyer price', store=True, multi="buyer_price", help="Buyer Price"),
+ 'seller_price': fields.function(_getprice, string='Seller price', store=True, multi="seller_price", help="Seller Price"),
+ 'gross_revenue':fields.function(_getprice, string='Gross revenue', store=True, multi="gross_revenue", help="Buyer Price - Seller Price"),
+ 'gross_margin':fields.function(_getprice, string='Gross Margin (%)', store=True, multi="gross_margin", help="(Gross Revenue*100.0)/ Object Price"),
+ 'costs':fields.function(_getprice, string='Indirect costs', store=True, multi="costs", help="Deposit cost"),
'statement_id': fields.many2many('account.bank.statement.line', 'auction_statement_line_rel', 'auction_id', 'statement', 'Payment', help="Bank statement line for given buyer"),
- 'net_revenue':fields.function(_getprice, method=True, string='Net revenue', store=True, multi="net_revenue", help="Buyer Price - Seller Price - Indirect Cost"),
- 'net_margin':fields.function(_getprice, method=True, string='Net Margin (%)', store=True, multi="net_margin", help="(Net Revenue * 100)/ Object Price"),
+ 'net_revenue':fields.function(_getprice, string='Net revenue', store=True, multi="net_revenue", help="Buyer Price - Seller Price - Indirect Cost"),
+ 'net_margin':fields.function(_getprice, string='Net Margin (%)', store=True, multi="net_margin", help="(Net Revenue * 100)/ Object Price"),
}
_defaults = {
'state':lambda *a: 'draft',
diff --git a/addons/base_calendar/__openerp__.py b/addons/base_calendar/__openerp__.py
index 5688c0e05b5..a01cf0df8cf 100644
--- a/addons/base_calendar/__openerp__.py
+++ b/addons/base_calendar/__openerp__.py
@@ -1,11 +1,55 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
{
- "name": "Base calendar",
- "version": "2.0",
- "depends": ['base'],
- "js": [
- 'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js',
- 'static/src/js/calendar.js'
+ "name" : "Basic Calendar Functionality",
+ "version" : "1.0",
+ "depends" : ["base"],
+ 'description': """
+This is a full-featured calendar system.
+========================================
+
+It supports:
+ - Calendar of events
+ - Alerts (create requests)
+ - Recurring events
+ - Invitations to people""",
+ "author" : "OpenERP SA",
+ 'category': 'Tools',
+ 'website': 'http://www.openerp.com',
+ "init_xml" : [
+ 'base_calendar_data.xml'
],
- "css": ['static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css'],
- 'active': True
+ "demo_xml" : [],
+ "update_xml" : [
+ 'security/calendar_security.xml',
+ 'security/ir.model.access.csv',
+ 'wizard/base_calendar_invite_attendee_view.xml',
+ 'base_calendar_view.xml'
+ ],
+ "test" : ['test/base_calendar_test.yml'],
+ "installable" : True,
+ "active" : False,
+ "certificate" : "00694071962960352821",
+ 'images': ['images/base_calendar1.jpeg','images/base_calendar2.jpeg','images/base_calendar3.jpeg','images/base_calendar4.jpeg',],
}
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py
index bfcccb3dfe0..5f24b08884a 100644
--- a/addons/base_calendar/base_calendar.py
+++ b/addons/base_calendar/base_calendar.py
@@ -22,6 +22,7 @@
from datetime import datetime, timedelta, date
from dateutil import parser
from dateutil import rrule
+from dateutil.relativedelta import relativedelta
from osv import fields, osv
from service import web_services
from tools.translate import _
@@ -47,20 +48,22 @@ def get_recurrent_dates(rrulestring, exdate, startdate=None, exrule=None):
def todate(date):
val = parser.parse(''.join((re.compile('\d')).findall(date)))
return val
-
+
if not startdate:
startdate = datetime.now()
+
if not exdate:
exdate = []
+
rset1 = rrule.rrulestr(str(rrulestring), dtstart=startdate, forceset=True)
-
for date in exdate:
datetime_obj = todate(date)
rset1._exdate.append(datetime_obj)
+
if exrule:
rset1.exrule(rrule.rrulestr(str(exrule), dtstart=startdate))
- return list(rset1._iter())
+ return list(rset1)
def base_calendar_id2real_id(base_calendar_id=None, with_date=False):
"""
@@ -338,26 +341,26 @@ class calendar_attendee(osv.osv):
help="Status of the attendee's participation"),
'rsvp': fields.boolean('Required Reply?',
help="Indicats whether the favor of a reply is requested"),
- 'delegated_to': fields.function(_compute_data, method=True, \
+ 'delegated_to': fields.function(_compute_data, \
string='Delegated To', type="char", size=124, store=True, \
multi='delegated_to', help="The users that the original \
request was delegated to"),
- 'delegated_from': fields.function(_compute_data, method=True, string=\
+ 'delegated_from': fields.function(_compute_data, string=\
'Delegated From', type="char", store=True, size=124, multi='delegated_from'),
'parent_ids': fields.many2many('calendar.attendee', 'calendar_attendee_parent_rel', \
'attendee_id', 'parent_id', 'Delegrated From'),
'child_ids': fields.many2many('calendar.attendee', 'calendar_attendee_child_rel', \
'attendee_id', 'child_id', 'Delegrated To'),
- 'sent_by': fields.function(_compute_data, method=True, string='Sent By', \
+ 'sent_by': fields.function(_compute_data, string='Sent By', \
type="char", multi='sent_by', store=True, size=124, \
help="Specify the user that is acting on behalf of the calendar user"),
- 'sent_by_uid': fields.function(_compute_data, method=True, string='Sent By User', \
+ 'sent_by_uid': fields.function(_compute_data, string='Sent By User', \
type="many2one", relation="res.users", multi='sent_by_uid'),
- 'cn': fields.function(_compute_data, method=True, string='Common name', \
+ 'cn': fields.function(_compute_data, string='Common name', \
type="char", size=124, multi='cn', store=True),
'dir': fields.char('URI Reference', size=124, help="Reference to the URI\
that points to the directory information corresponding to the attendee."),
- 'language': fields.function(_compute_data, method=True, string='Language', \
+ 'language': fields.function(_compute_data, string='Language', \
type="selection", selection=_lang_get, multi='language', \
store=True, help="To specify the language for text values in a\
property or property parameter."),
@@ -366,14 +369,15 @@ property or property parameter."),
'partner_id': fields.related('partner_address_id', 'partner_id', type='many2one', \
relation='res.partner', string='Partner', help="Partner related to contact"),
'email': fields.char('Email', size=124, help="Email of Invited Person"),
- 'event_date': fields.function(_compute_data, method=True, string='Event Date', \
+ 'event_date': fields.function(_compute_data, string='Event Date', \
type="datetime", multi='event_date'),
- 'event_end_date': fields.function(_compute_data, method=True, \
+ 'event_end_date': fields.function(_compute_data, \
string='Event End Date', type="datetime", \
multi='event_end_date'),
'ref': fields.reference('Event Ref', selection=_links_get, size=128),
'availability': fields.selection([('free', 'Free'), ('busy', 'Busy')], 'Free/Busy', readonly="True"),
- }
+ }
+
_defaults = {
'state': 'needs-action',
'role': 'req-participant',
@@ -411,7 +415,7 @@ property or property parameter."),
cal = vobject.iCalendar()
event = cal.add('vevent')
if not event_obj.date_deadline or not event_obj.date:
- raise osv.except_osv(_('Warning !'),_("Couldn't Invite because date is not specified!"))
+ raise osv.except_osv(_('Warning !'),_("Couldn't Invite because date is not specified!"))
event.add('created').value = ics_datetime(time.strftime('%Y-%m-%d %H:%M:%S'))
event.add('dtstart').value = ics_datetime(event_obj.date)
event.add('dtend').value = ics_datetime(event_obj.date_deadline)
@@ -456,7 +460,7 @@ property or property parameter."),
trigger.value = delta
# Compute other details
valarm.add('DESCRIPTION').value = alarm_data['name'] or 'OpenERP'
-
+
for attendee in event_obj.attendee_ids:
attendee_add = event.add('attendee')
attendee_add.params['CUTYPE'] = [str(attendee.cutype)]
@@ -674,7 +678,7 @@ true, it will allow you to hide the event alarm information without removing it.
new_res_alarm = alarm_ids[0]
cr.execute('UPDATE %s ' % model_obj._table + \
' SET base_calendar_alarm_id=%s, alarm_id=%s ' \
- ' WHERE id=%s',
+ ' WHERE id=%s',
(cal_alarm.id, new_res_alarm, data.id))
self.do_alarm_unlink(cr, uid, [data.id], model)
@@ -806,7 +810,6 @@ class calendar_alarm(osv.osv):
@param use_new_cursor: False or the dbname
@param context: A standard dictionary for contextual values
"""
- return True # XXX FIXME REMOVE THIS AFTER FIXING get_recurrent_dates!!
if context is None:
context = {}
current_datetime = datetime.now()
@@ -914,22 +917,6 @@ class calendar_event(osv.osv):
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=None):
- """Sets duration as 24 Hours if event is selected for all day
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of calendar event’s IDs.
- @param allday: Value of allday boolean
- @param context: A standard dictionary for contextual values
- """
- if not allday or not ids:
- return {}
- value = {
- 'duration': 24
- }
- return {'value': value}
-
def onchange_dates(self, cr, uid, ids, start_date, duration=False, end_date=False, allday=False, context=None):
"""Returns duration and/or end date based on values passed
@param self: The object pointer
@@ -952,8 +939,13 @@ class calendar_event(osv.osv):
value['duration'] = duration
if allday: # For all day event
- value = {'duration': 24}
+ value = {'duration': 24.0}
duration = 24.0
+ if start_date:
+ start = datetime.strptime(start_date, "%Y-%m-%d %H:%M:%S")
+ start_date = datetime.strftime(datetime(start.year, start.month, start.day, 0,0,0), "%Y-%m-%d %H:%M:%S")
+ value['date'] = start_date
+
start = datetime.strptime(start_date, "%Y-%m-%d %H:%M:%S")
if end_date and not duration:
@@ -966,7 +958,7 @@ class calendar_event(osv.osv):
value['date_deadline'] = end.strftime("%Y-%m-%d %H:%M:%S")
elif end_date and duration and not allday:
# we have both, keep them synchronized:
- # set duration based on end_date (arbitrary decision: this avoid
+ # set duration based on end_date (arbitrary decision: this avoid
# getting dates like 06:31:48 instead of 06:32:00)
end = datetime.strptime(end_date, "%Y-%m-%d %H:%M:%S")
diff = end - start
@@ -982,88 +974,10 @@ class calendar_event(osv.osv):
"""
if context is None:
context = {}
- cr.execute('select id from '+self._table+' where recurrent_uid in %s', (tuple(ids),))
- r_ids = map(lambda x: x[0], cr.fetchall())
- self.unlink(cr, uid, r_ids, context=context)
- return True
-
- def _set_rrulestring(self, cr, uid, id, name, value, arg, context=None):
- """
- Sets values of fields that defines event recurrence from the value of rrule string
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param id: List of calendar event's ids.
- @param context: A standard dictionary for contextual values
- @return: dictionary of rrule value.
- """
- if context is None:
- context = {}
- cr.execute("UPDATE %s set freq='None',interval=0,count=0,end_date=Null,\
- mo=False,tu=False,we=False,th=False,fr=False,sa=False,su=False,\
- day=0,select1='date',month_list=Null ,byday=Null where id=%%s" % (self._table), (id,))
-
- if not value:
- cr.execute("UPDATE %s set rrule_type='none' where id=%%s" % self._table,(id,))
- return True
- val = {}
- for part in value.split(';'):
- if part.lower().__contains__('freq') and len(value.split(';')) <=2:
- rrule_type = part.lower()[5:]
- break
- else:
- rrule_type = 'custom'
- break
- ans = value.split(';')
- for i in ans:
- val[i.split('=')[0].lower()] = i.split('=')[1].lower()
- if not val.get('interval'):
- rrule_type = 'custom'
- elif int(val.get('interval')) > 1: #If interval is other than 1 rule is custom
- rrule_type = 'custom'
-
- qry = "UPDATE \"%s\" set rrule_type=%%s " % self._table
- qry_args = [ rrule_type, ]
- new_val = val.copy()
- for k, v in val.items():
- if val['freq'] == 'weekly' and val.get('byday'):
- for day in val['byday'].split(','):
- new_val[day] = True
- val.pop('byday')
-
- if val.get('until'):
- until = parser.parse(''.join((re.compile('\d')).findall(val.get('until'))))
- new_val['end_date'] = until.strftime('%Y-%m-%d')
- val.pop('until')
- new_val.pop('until')
-
- if val.get('bymonthday'):
- new_val['day'] = val.get('bymonthday')
- val.pop('bymonthday')
- new_val['select1'] = 'date'
- new_val.pop('bymonthday')
-
- if val.get('byday'):
- d = val.get('byday')
- if '-' in d:
- new_val['byday'] = d[:2]
- new_val['week_list'] = d[2:4].upper()
- else:
- new_val['byday'] = d[:1]
- new_val['week_list'] = d[1:3].upper()
- new_val['select1'] = 'day'
-
- if val.get('bymonth'):
- new_val['month_list'] = val.get('bymonth')
- val.pop('bymonth')
- new_val.pop('bymonth')
-
- for k, v in new_val.items():
- qry += ", %s=%%s" % k
- qry_args.append(v)
-
- qry = qry + " where id=%s"
- qry_args.append(id)
- cr.execute(qry, qry_args)
+ for event_id in ids:
+ cr.execute("select id from %s where recurrent_uid=%%s" % (self._table), (event_id,))
+ r_ids = map(lambda x: x[0], cr.fetchall())
+ self.unlink(cr, uid, r_ids, context=context)
return True
def _get_rulestring(self, cr, uid, ids, name, arg, context=None):
@@ -1075,28 +989,15 @@ class calendar_event(osv.osv):
@param context: A standard dictionary for contextual values
@return: dictionary of rrule value.
"""
+
result = {}
- for datas in self.read(cr, uid, ids, context=context):
+ for datas in self.read(cr, uid, ids, ['id','byday','recurrency', 'month_list','end_date', 'rrule_type', 'select1', 'interval', 'count', 'end_type', 'mo', 'tu', 'we', 'th', 'fr', 'sa', 'su', 'exrule', 'day', 'week_list' ], context=context):
event = datas['id']
- if datas.get('rrule_type'):
- if datas.get('rrule_type') == 'none':
- result[event] = False
- cr.execute("UPDATE %s set exrule=Null where id=%%s" % self._table,( event,))
- if datas.get('rrule_type') :
- if datas.get('interval', 0) < 0:
- raise osv.except_osv(_('Warning!'), _('Interval can not be Negative'))
- if datas.get('count', 0) < 0:
- raise osv.except_osv(_('Warning!'), _('Count can not be Negative'))
- rrule_custom = self.compute_rule_string(cr, uid, datas, \
- context=context)
- result[event] = rrule_custom
- else:
- result[event] = self.compute_rule_string(cr, uid, {'freq': datas.get('rrule_type').upper(), 'interval': 1}, context=context)
-
- for id, myrule in result.items():
- #Remove the events generated from recurrent event
- if not myrule:
- self.unlink_events(cr, uid, [id], context=context)
+ if datas.get('interval', 0) < 0:
+ raise osv.except_osv(_('Warning!'), _('Interval can not be Negative'))
+ if datas.get('count', 0) < 0:
+ raise osv.except_osv(_('Warning!'), _('Count can not be Negative'))
+ result[event] = self.compute_rule_string(datas)
return result
_columns = {
@@ -1121,15 +1022,11 @@ class calendar_event(osv.osv):
defines the list of date/time exceptions for a recurring calendar component."),
'exrule': fields.char('Exception Rule', size=352, help="Defines a \
rule or repeating pattern of time to exclude from the recurring rule."),
- 'rrule': fields.function(_get_rulestring, type='char', size=124, method=True, \
- string='Recurrent Rule', store=True, \
- fnct_inv=_set_rrulestring, help='Defines a\
- rule or repeating pattern for recurring events\n\
-e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
- FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=-1SU'),
+ 'rrule': fields.function(_get_rulestring, type='char', size=124, \
+ store=True, string='Recurrent Rule'),
'rrule_type': fields.selection([('none', ''), ('daily', 'Daily'), \
('weekly', 'Weekly'), ('monthly', 'Monthly'), \
- ('yearly', 'Yearly'),],
+ ('yearly', 'Yearly'),],
'Recurrency', states={'done': [('readonly', True)]},
help="Let the event automatically repeat at that interval"),
'alarm_id': fields.many2one('res.alarm', 'Alarm', states={'done': [('readonly', True)]},
@@ -1141,14 +1038,7 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
'user_id': fields.many2one('res.users', 'Responsible', states={'done': [('readonly', True)]}),
'organizer': fields.char("Organizer", size=256, states={'done': [('readonly', True)]}), # Map with Organizer Attribure of VEvent.
'organizer_id': fields.many2one('res.users', 'Organizer', states={'done': [('readonly', True)]}),
- 'freq': fields.selection([('None', 'No Repeat'),
- ('hourly', 'Hours'),
- ('daily', 'Days'),
- ('weekly', 'Weeks'),
- ('monthly', 'Months'),
- ('yearly', 'Years'), ], 'Frequency'),
-
- 'end_type' : fields.selection([('forever', 'Forever'), ('count', 'Fix amout of times'), ('end_date','End date')], 'Way to end reccurency'),
+ 'end_type' : fields.selection([('count', 'Fix amout of times'), ('end_date','End date')], 'Way to end reccurency'),
'interval': fields.integer('Repeat every', help="Repeat every (Days/Week/Month/Year)"),
'count': fields.integer('Repeat', help="Repeat x times"),
'mo': fields.boolean('Mon'),
@@ -1158,7 +1048,7 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
'fr': fields.boolean('Fri'),
'sa': fields.boolean('Sat'),
'su': fields.boolean('Sun'),
- 'select1': fields.selection([('date', 'Date of month'),
+ 'select1': fields.selection([('date', 'Date of month'),
('day', 'Day of month')], 'Option'),
'day': fields.integer('Date of month'),
'week_list': fields.selection([('MO', 'Monday'), ('TU', 'Tuesday'), \
@@ -1175,8 +1065,8 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
'allday': fields.boolean('All Day', states={'done': [('readonly', True)]}),
'active': fields.boolean('Active', help="If the active field is set to \
true, it will allow you to hide the event alarm information without removing it."),
- 'recurrency': fields.boolean('Recurrent', help="Recurrent Meeting"),
- 'edit_all': fields.boolean('Edit All', help="Edit all Occurrences of recurrent Meeting."),
+ 'recurrency': fields.boolean('Recurrent', help="Recurrent Meeting"),
+ 'edit_all': fields.boolean('Edit All', help="Edit all Occurrences of recurrent Meeting."),
}
def default_organizer(self, cr, uid, context=None):
user_pool = self.pool.get('res.users')
@@ -1187,11 +1077,12 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
return res
_defaults = {
- 'end_type' : 'forever',
+ 'end_type' : 'count',
+ 'count' : 1,
+ 'rrule_type' : 'none',
'state': 'tentative',
'class': 'public',
'show_as': 'busy',
- 'freq': 'None',
'select1': 'date',
'interval': 1,
'active': 1,
@@ -1200,43 +1091,7 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
'edit_all' : False,
}
- def onchange_edit_all(self, cr, uid, ids, rrule_type,edit_all, context=None):
- if not context:
- context = {}
-
- value = {}
- if edit_all and rrule_type:
- for id in ids:
- base_calendar_id2real_id(id)
- return value
-
- def modify_all(self, cr, uid, event_ids, defaults, context=None, *args):
- """
- Modifies the recurring event
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param event_ids: List of crm meeting’s IDs.
- @param context: A standard dictionary for contextual values
- @return: True
- """
- for event_id in event_ids:
- event_id = base_calendar_id2real_id(event_id)
-
- defaults.pop('id')
- defaults.update({'table': self._table})
-
- qry = "UPDATE %(table)s set name = '%(name)s', \
- date = '%(date)s', date_deadline = '%(date_deadline)s'"
- if defaults.get('alarm_id'):
- qry += ", alarm_id = %(alarm_id)s"
- if defaults.get('location'):
- qry += ", location = '%(location)s'"
- qry += "WHERE id = %s" % (event_id)
- cr.execute(qry, defaults)
-
- return True
-
- def get_recurrent_ids(self, cr, uid, select, base_start_date, base_until_date, limit=100):
+ def get_recurrent_ids(self, cr, uid, select, base_start_date, base_until_date, limit=100, context=None):
"""Gives virtual event ids for recurring events based on value of Recurrence Rule
This method gives ids of dates that comes between start date and end date of calendar views
@param self: The object pointer
@@ -1245,46 +1100,32 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
@param base_start_date: Get Start Date
@param base_until_date: Get End Date
@param limit: The Number of Results to Return """
+ if not context:
+ context = {}
+
+ virtual_id = context and context.get('virtual_id', False) or False
- if not limit:
- limit = 100
if isinstance(select, (str, int, long)):
ids = [select]
else:
ids = select
result = []
- recur_dict = []
- if ids and (base_start_date or base_until_date):
- cr.execute("select m.id, m.rrule, m.date, m.date_deadline, m.duration, \
- m.exdate, m.exrule, m.recurrent_id, m.recurrent_uid from " + self._table + \
- " m where m.id = ANY(%s)", (ids,) )
-
- count = 0
- for data in cr.dictfetchall():
+ if ids and virtual_id:
+ for data in super(calendar_event, self).read(cr, uid, ids, context=context):
start_date = base_start_date and datetime.strptime(base_start_date[:10]+ ' 00:00:00' , "%Y-%m-%d %H:%M:%S") or False
until_date = base_until_date and datetime.strptime(base_until_date[:10]+ ' 23:59:59', "%Y-%m-%d %H:%M:%S") or False
- if count > limit:
- break
event_date = datetime.strptime(data['date'], "%Y-%m-%d %H:%M:%S")
# To check: If the start date is replace by event date .. the event date will be changed by that of calendar code
- start_date = event_date
+
if not data['rrule']:
if start_date and (event_date < start_date):
continue
if until_date and (event_date > until_date):
continue
- idval = real_id2base_calendar_id(data['id'], data['date'])
- if not data['recurrent_id']:
- result.append(idval)
- count += 1
- else:
- ex_id = real_id2base_calendar_id(data['recurrent_uid'], data['recurrent_id'])
- ls = base_calendar_id2real_id(ex_id, with_date=data and data.get('duration', 0) or 0)
- if not isinstance(ls, (str, int, long)) and len(ls) >= 2:
- if ls[1] == data['recurrent_id']:
- result.append(idval)
- recur_dict.append(ex_id)
+ idval = data['id']
+ result.append(idval)
else:
+ start_date = event_date
exdate = data['exdate'] and data['exdate'].split(',') or []
rrule_str = data['rrule']
new_rrule_str = []
@@ -1300,6 +1141,8 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
until_date = rrule_until_date
if until_date:
value = until_date.strftime("%Y%m%d%H%M%S")
+ else:
+ value = value.strftime("%Y%m%d%H%M%S")
new_rule = '%s=%s' % (name, value)
new_rrule_str.append(new_rule)
if not is_until and until_date:
@@ -1309,6 +1152,7 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
new_rrule_str.append(new_rule)
new_rrule_str = ';'.join(new_rrule_str)
rdates = get_recurrent_dates(str(new_rrule_str), exdate, start_date, data['exrule'])
+
for r_date in rdates:
if start_date and r_date < start_date:
continue
@@ -1316,77 +1160,75 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
continue
idval = real_id2base_calendar_id(data['id'], r_date.strftime("%Y-%m-%d %H:%M:%S"))
result.append(idval)
- count += 1
+
if result:
- ids = list(set(result)-set(recur_dict))
+ ids = list(set(result))
if isinstance(select, (str, int, long)):
return ids and ids[0] or False
return ids
- def compute_rule_string(self, cr, uid, datas, context=None, *args):
+ def compute_rule_string(self, datas):
"""
Compute rule string according to value type RECUR of iCalendar from the values given.
@param self: the object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
@param datas: dictionary of freq and interval value.
- @param context: A standard dictionary for contextual values
- @return: String value of the format RECUR of iCalendar
"""
-
- weekdays = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su']
- weekstring = ''
- monthstring = ''
- yearstring = ''
- freq=datas.get('rrule_type')
- if freq == 'none':
+
+ def get_week_string(freq, datas):
+ weekdays = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su']
+ if freq == 'weekly':
+ byday = map(lambda x: x.upper(), filter(lambda x: datas.get(x) and x in weekdays, datas))
+ if byday:
+ return ';BYDAY=' + ','.join(byday)
+ return ''
+
+ def get_month_string(freq, datas):
+ if freq == 'monthly':
+ if datas.get('select1')=='date' and (datas.get('day') < 1 or datas.get('day') > 31):
+ raise osv.except_osv(_('Error!'), ("Please select proper Day of month"))
+
+ if datas.get('select1')=='day':
+ return ';BYDAY=' + datas.get('byday') + datas.get('week_list')
+ elif datas.get('select1')=='date':
+ return ';BYMONTHDAY=' + str(datas.get('day'))
return ''
+
+ def get_end_date(datas):
+ if datas.get('end_date'):
+ datas['end_date_new'] = ''.join((re.compile('\d')).findall(datas.get('end_date'))) + 'T235959Z'
- interval_srting = datas.get('interval') and (';INTERVAL=' + str(datas.get('interval'))) or ''
-
- if freq == 'weekly':
- byday = map(lambda x: x.upper(), filter(lambda x: datas.get(x) and x in weekdays, datas))
- if byday:
- weekstring = ';BYDAY=' + ','.join(byday)
-
- elif freq == 'monthly':
- if datas.get('select1')=='date' and (datas.get('day') < 1 or datas.get('day') > 31):
- raise osv.except_osv(_('Error!'), ("Please select proper Day of month"))
- if datas.get('select1')=='day':
- monthstring = ';BYDAY=' + datas.get('byday') + datas.get('week_list')
- elif datas.get('select1')=='date':
- monthstring = ';BYMONTHDAY=' + str(datas.get('day'))
-
+ return (datas.get('end_type') == 'count' and (';COUNT=' + str(datas.get('count'))) or '') +\
+ ((datas.get('end_date_new') and datas.get('end_type') == 'end_date' and (';UNTIL=' + datas.get('end_date_new'))) or '')
- if datas.get('end_date'):
- datas['end_date'] = ''.join((re.compile('\d')).findall(datas.get('end_date'))) + 'T235959Z'
- enddate = (datas.get('count') and (';COUNT=' + str(datas.get('count'))) or '') +\
- ((datas.get('end_date') and (';UNTIL=' + datas.get('end_date'))) or '')
+ freq=datas.get('rrule_type')
+ if freq == 'none':
+ return ''
+ interval_srting = datas.get('interval') and (';INTERVAL=' + str(datas.get('interval'))) or ''
+ return 'FREQ=' + freq.upper() + get_week_string(freq, datas) + interval_srting + get_end_date(datas) + get_month_string(freq, datas)
- rrule_string = 'FREQ=' + freq.upper() + weekstring + interval_srting \
- + enddate + monthstring + yearstring
- return rrule_string
-
- def search(self, cr, uid, args, offset=0, limit=100, order=None,
+ def remove_virtual_id(self, ids):
+ if isinstance(ids, (str, int)):
+ return base_calendar_id2real_id(ids)
+
+ if isinstance(ids, (list, tuple)):
+ res = []
+ for id in ids:
+ res.append(base_calendar_id2real_id(id))
+ return res
+
+ def search(self, cr, uid, args, offset=0, limit=0, order=None,
context=None, count=False):
- """
- Overrides orm search method.
- @param cr: the current row, from the database cursor,
- @param user: the current user’s ID for security checks,
- @param args: list of tuples of form [(‘name_of_the_field’, ‘operator’, value), ...].
- @param offset: The Number of Results to Pass
- @param limit: The Number of Results to Return
- @param context: A standard dictionary for contextual values
- @param count: If its True the method returns number of records instead of ids
- @return: List of id
- """
args_without_date = []
start_date = False
until_date = False
for arg in args:
- if arg[0] not in ('date', unicode('date'), 'date_deadline', unicode('date_deadline')):
+ if arg[0] == "id":
+ new_id = self.remove_virtual_id(arg[2])
+ new_arg = (arg[0], arg[1], new_id)
+ args_without_date.append(new_arg)
+ elif arg[0] not in ('date', unicode('date'), 'date_deadline', unicode('date_deadline')):
args_without_date.append(arg)
else:
if arg[1] in ('>', '>='):
@@ -1397,12 +1239,17 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
if until_date:
continue
until_date = arg[2]
+
res = super(calendar_event, self).search(cr, uid, args_without_date, \
- offset, limit, order, context, count)
+ 0, 0, order, context, count=False)
+ res = self.get_recurrent_ids(cr, uid, res, start_date, until_date, limit, context=context)
+ if count:
+ return len(res)
+ elif limit:
+ return res[offset:offset+limit]
+ else:
+ return res
- res = self.get_recurrent_ids(cr, uid, res, start_date, until_date, limit)
- return res
-
def get_edit_all(self, cr, uid, id, vals=None):
"""
@@ -1413,22 +1260,25 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
if(vals and 'edit_all' in vals): #we jsut check edit_all
return vals['edit_all']
else: #it's a recurrent event and edit_all is already check
- return meeting['recurrency'] and meeting['edit_all']
+ return meeting['recurrency'] and meeting['edit_all']
+ def _get_data(self, cr, uid, id, context=None):
+ res = self.read(cr, uid, [id],['date', 'date_deadline'])
+ return res[0]
-
-
+ def need_to_update(self, event_id, vals):
+ split_id = str(event_id).split("-")
+ if len(split_id) < 2:
+ return False
+ else:
+ date_start = vals.get('date', '')
+ try:
+ date_start = datetime.strptime(date_start, '%Y-%m-%d %H:%M:%S').strftime("%Y%m%d%H%M%S")
+ return date_start == split_id[1]
+ except Exception:
+ return True
+
def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True):
- """
- Overrides orm write method.
- @param self: the object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of crm meeting's ids
- @param vals: Dictionary of field value.
- @param context: A standard dictionary for contextual values
- @return: True
- """
if context is None:
context = {}
if isinstance(ids, (str, int, long)):
@@ -1440,12 +1290,15 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
for event_id in select:
real_event_id = base_calendar_id2real_id(event_id)
-
- if(self.get_edit_all(cr, uid, event_id, vals=vals)):
+ edit_all = self.get_edit_all(cr, uid, event_id, vals=vals)
+ if edit_all:
+ if self.need_to_update(event_id, vals):
+ res = self._get_data(cr, uid, real_event_id, context=context)
+ vals.update(res)
event_id = real_event_id
-
-
- if len(str(event_id).split('-')) > 1:
+
+ #if edit one instance of a reccurrent id
+ if len(str(event_id).split('-')) > 1 and not edit_all:
data = self.read(cr, uid, event_id, ['date', 'date_deadline', \
'rrule', 'duration', 'exdate'])
if data.get('rrule'):
@@ -1458,15 +1311,15 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
'edit_all': False,
'recurrency' : False,
})
-
+
new_id = self.copy(cr, uid, real_event_id, default=data, context=context)
-
+
date_new = event_id.split('-')[1]
date_new = time.strftime("%Y%m%dT%H%M%S", \
time.strptime(date_new, "%Y%m%d%H%M%S"))
exdate = (data['exdate'] and (data['exdate'] + ',') or '') + date_new
res = self.write(cr, uid, [real_event_id], {'exdate': exdate})
-
+
context.update({'active_id': new_id, 'active_ids': [new_id]})
continue
if not real_event_id in new_ids:
@@ -1482,10 +1335,6 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
vals.get('allday', False),
context=context)
vals.update(updated_vals.get('value', {}))
-
- if not 'edit_all' in vals:
- vals['edit_all'] = False
-
if new_ids:
res = super(calendar_event, self).write(cr, uid, new_ids, vals, context=context)
@@ -1494,18 +1343,9 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
# change alarm details
alarm_obj = self.pool.get('res.alarm')
alarm_obj.do_alarm_create(cr, uid, new_ids, self._name, 'date', context=context)
- return res
+ return res or True and False
def browse(self, cr, uid, ids, context=None, list_class=None, fields_process=None):
- """
- Overrides orm browse method.
- @param self: the object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of crm meeting's ids
- @param context: A standard dictionary for contextual values
- @return: the object list.
- """
if isinstance(ids, (str, int, long)):
select = [ids]
else:
@@ -1518,19 +1358,29 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
return res
+ def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
+ if not context:
+ context = {}
+
+ if 'date' in groupby:
+ raise osv.except_osv(_('Warning !'), _('Group by date not supported, use the calendar view instead'))
+ virtual_id = context.get('virtual_id', False)
+ context.update({'virtual_id': False})
+ res = super(calendar_event, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby)
+ for re in res:
+ #remove the count, since the value is not consistent with the result of the search when expand the group
+ for groupname in groupby:
+ if re.get(groupname + "_count"):
+ del re[groupname + "_count"]
+ re.get('__context').update({'virtual_id' : virtual_id})
+ return res
+
def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'):
- """
- Overrides orm Read method.Read List of fields for calendar event.
- @param cr: the current row, from the database cursor,
- @param user: the current user’s ID for security checks,
- @param ids: List of calendar event's id.
- @param fields: List of fields.
- @param context: A standard dictionary for contextual values
- @return: List of Dictionary of form [{‘name_of_the_field’: value, ...}, ...]
- """
# FIXME This whole id mangling has to go!
if context is None:
context = {}
+
+
if isinstance(ids, (str, int, long)):
select = [ids]
@@ -1544,9 +1394,10 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
fields.append('duration')
- for base_calendar_id, real_id in select:
+ for base_calendar_id, real_id in select:
#REVET: Revision ID: olt@tinyerp.com-20100924131709-cqsd1ut234ni6txn
res = super(calendar_event, self).read(cr, uid, real_id, fields=fields, context=context, load=load)
+
if not res :
continue
ls = base_calendar_id2real_id(base_calendar_id, with_date=res and res.get('duration', 0) or 0)
@@ -1558,41 +1409,34 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
result.append(res)
if isinstance(ids, (str, int, long)):
return result and result[0] or False
+
return result
def copy(self, cr, uid, id, default=None, context=None):
- """
- Duplicate record on specified id.
- @param self: the object pointer.
- @param cr: the current row, from the database cursor,
- @param id: id of record from which we duplicated.
- @param context: A standard dictionary for contextual values
- @return: Duplicate record id.
- """
if context is None:
context = {}
+
res = super(calendar_event, self).copy(cr, uid, base_calendar_id2real_id(id), default, context)
alarm_obj = self.pool.get('res.alarm')
alarm_obj.do_alarm_create(cr, uid, [res], self._name, 'date', context=context)
-
return res
-
+
+
def unlink(self, cr, uid, ids, context=None):
- """
- Deletes records specified in ids.
- @param self: the object pointer.
- @param cr: the current row, from the database cursor,
- @param id: List of calendar event's id.
- @param context: A standard dictionary for contextual values
- @return: True
- """
- res = False
- for event_datas in self.read(cr, uid, ids, ['date', 'rrule', 'exdate'], context=context):
- event_id = event_datas['id']
+ if not isinstance(ids, list):
+ ids = [ids]
+ res = False
+ for id in ids:
+ data_list = self.read(cr, uid, [id], ['date', 'rrule', 'exdate'], context=context)
+ if len(data_list) < 1:
+ continue
+ event_data = data_list[0]
+ event_id = event_data['id']
+
if self.get_edit_all(cr, uid, event_id, vals=None):
event_id = base_calendar_id2real_id(event_id)
-
+
if isinstance(event_id, (int, long)):
res = super(calendar_event, self).unlink(cr, uid, event_id, context=context)
self.pool.get('res.alarm').do_alarm_unlink(cr, uid, [event_id], self._name)
@@ -1600,11 +1444,11 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
else:
str_event, date_new = event_id.split('-')
event_id = int(str_event)
- if event_datas['rrule']:
+ if event_data['rrule']:
# Remove one of the recurrent event
date_new = time.strftime("%Y%m%dT%H%M%S", \
time.strptime(date_new, "%Y%m%d%H%M%S"))
- exdate = (event_datas['exdate'] and (event_datas['exdate'] + ',') or '') + date_new
+ exdate = (event_data['exdate'] and (event_data['exdate'] + ',') or '') + date_new
res = self.write(cr, uid, [event_id], {'exdate': exdate})
else:
res = super(calendar_event, self).unlink(cr, uid, [event_id], context=context)
@@ -1613,15 +1457,6 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
return res
def create(self, cr, uid, vals, context=None):
- """
- Create new record.
- @param self: the object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param vals: dictionary of every field value.
- @param context: A standard dictionary for contextual values
- @return: new created record id.
- """
if context is None:
context = {}
@@ -1635,11 +1470,13 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
vals.get('allday', False),
context=context)
vals.update(updated_vals.get('value', {}))
-
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)
+
return res
+
+
def do_tentative(self, cr, uid, ids, context=None, *args):
""" Makes event invitation as Tentative
@@ -1710,12 +1547,12 @@ 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)
_columns = {
- 'date': fields.function(_get_date, method=True, fnct_inv=_set_date, \
+ 'date': fields.function(_get_date, fnct_inv=_set_date, \
string='Duration', store=True, type='datetime'),
'duration': fields.integer('Duration'),
}
@@ -1742,9 +1579,9 @@ class ir_attachment(osv.osv):
for arg in args:
args1.append(map(lambda x:str(x).split('-')[0], arg))
return super(ir_attachment, self).search_count(cr, user, args1, context)
-
-
-
+
+
+
def create(self, cr, uid, vals, context=None):
if context:
id = context.get('default_res_id', False)
@@ -1913,7 +1750,7 @@ class res_users(osv.osv):
_columns = {
'availability': fields.function(_get_user_avail_fun, type='selection', \
selection=[('free', 'Free'), ('busy', 'Busy')], \
- string='Free/Busy', method=True),
+ string='Free/Busy'),
}
res_users()
diff --git a/addons/base_calendar/base_calendar_view.xml b/addons/base_calendar/base_calendar_view.xml
index d5525e48e74..451152b2b58 100644
--- a/addons/base_calendar/base_calendar_view.xml
+++ b/addons/base_calendar/base_calendar_view.xml
@@ -242,8 +242,7 @@
widget="selection" />
-
+
diff --git a/addons/base_calendar/test/base_calendar_test.yml b/addons/base_calendar/test/base_calendar_test.yml
index 4c0f3fc126f..5512839e635 100644
--- a/addons/base_calendar/test/base_calendar_test.yml
+++ b/addons/base_calendar/test/base_calendar_test.yml
@@ -15,7 +15,8 @@
Now I will set recurrence for this event to occur monday and friday of week
-
!python {model: calendar.event}: |
- self.write(cr, uid, [ref("calendar_event_technicalpresentation0")], {'fr': 1, 'mo': 1, 'interval': 1, 'rrule_type': 'weekly'})
+ data = {'fr': 1, 'mo': 1, 'interval': 1, 'rrule_type': 'weekly', 'end_type': 'end_date', 'end_date': '2011-05-31 00:00:00'}
+ self.write(cr, uid, [ref("calendar_event_technicalpresentation0")], data)
- |
In order to check that recurrent events are views successfully in calendar view,
I will open calendar view of events
@@ -27,7 +28,7 @@
I will search for one of the recurrent event and count the number of events
-
!python {model: calendar.event}: |
- ids = self.search(cr, uid, [('date', '>=', '2011-04-30 16:00:00'), ('date', '<=', '2011-05-31 00:00:00')] )
+ ids = self.search(cr, uid, [('date', '>=', '2011-04-30 16:00:00'), ('date', '<=', '2011-05-31 00:00:00')], context={'virtual_id': True} )
assert len(ids) == 9
- |
Now I will make All day event and test it
diff --git a/addons/base_calendar/wizard/__init__.py b/addons/base_calendar/wizard/__init__.py
index 8b45dc18a17..cd0690b1dc0 100644
--- a/addons/base_calendar/wizard/__init__.py
+++ b/addons/base_calendar/wizard/__init__.py
@@ -19,9 +19,7 @@
#
##############################################################################
-import calendar_event_edit_all
import base_calendar_invite_attendee
-import base_calendar_set_exrule
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_calendar/wizard/base_calendar_set_exrule.py b/addons/base_calendar/wizard/base_calendar_set_exrule.py
deleted file mode 100644
index 80fe1e44720..00000000000
--- a/addons/base_calendar/wizard/base_calendar_set_exrule.py
+++ /dev/null
@@ -1,163 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-from base_calendar import base_calendar
-from osv import fields, osv
-from tools.translate import _
-import tools
-import re
-
-
-months = {
- 1: "January", 2: "February", 3: "March", 4: "April", \
- 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", \
- 10: "October", 11: "November", 12: "December"
-}
-
-class base_calendar_set_exrule(osv.osv_memory):
- """
- Set Exrule.
- """
-
- _name = "base.calendar.set.exrule"
- _description = "Set Exrule"
-
- _columns = {
- 'freq': fields.selection([('None', 'No Repeat'), \
- ('secondly', 'Secondly'), \
- ('minutely', 'Minutely'), \
- ('hourly', 'Hourly'), \
- ('daily', 'Daily'), \
- ('weekly', 'Weekly'), \
- ('monthly', 'Monthly'), \
- ('yearly', 'Yearly')], 'Frequency',required=True),
- 'interval': fields.integer('Interval'),
- 'count': fields.integer('Count'),
- 'mo': fields.boolean('Mon'),
- 'tu': fields.boolean('Tue'),
- 'we': fields.boolean('Wed'),
- 'th': fields.boolean('Thu'),
- 'fr': fields.boolean('Fri'),
- 'sa': fields.boolean('Sat'),
- 'su': fields.boolean('Sun'),
- 'select1': fields.selection([('date', 'Date of month'), \
- ('day', 'Day of month')], 'Option'),
- 'day': fields.integer('Date of month'),
- 'week_list': fields.selection([('MO', 'Monday'), ('TU', 'Tuesday'), \
- ('WE', 'Wednesday'), ('TH', 'Thursday'), \
- ('FR', 'Friday'), ('SA', 'Saturday'), \
- ('SU', 'Sunday')], 'Weekday'),
- 'byday': fields.selection([('1', 'First'), ('2', 'Second'), \
- ('3', 'Third'), ('4', 'Fourth'), \
- ('5', 'Fifth'), ('-1', 'Last')], 'By day'),
- 'month_list': fields.selection(months.items(),'Month'),
- 'end_date': fields.date('Repeat Until'),
-
- }
-
- def view_init(self, cr, uid, fields, context=None):
- """
- This function checks for precondition before wizard executes
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param fields: List of fields for default value
- @param context: A standard dictionary for contextual values
- """
- if context is None:
- context = {}
- event_obj = self.pool.get(context.get('active_model'))
- for event in event_obj.browse(cr, uid, context.get('active_ids', []), context=context):
- if not event.rrule:
- raise osv.except_osv(_("Warning !"), _("Please Apply Recurrency before applying Exception Rule."))
- return False
-
- def compute_exrule_string(self, cr, uid, ids, context=None):
- """
- Compute rule string.
- @param self: the object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param datas: dictionary of freq and interval value.
- @return: string value which compute FREQILY;INTERVAL
- """
-
- weekdays = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su']
- weekstring = ''
- monthstring = ''
- yearstring = ''
- if context is None:
- context = {}
- ex_id = base_calendar.base_calendar_id2real_id(context.get('active_id', False))
- model = context.get('model', False)
- model_obj = self.pool.get(model)
- for datas in self.read(cr, uid, ids, context=context):
- freq = datas.get('freq')
- if freq == 'None':
- model_obj.write(cr, uid, ex_id,{'exrule': ''})
- return{}
-
- interval_srting = datas.get('interval') and (';INTERVAL=' + str(datas.get('interval'))) or ''
-
- if freq == 'weekly':
-
- byday = map(lambda x: x.upper(), filter(lambda x: datas.get(x) and x in weekdays, datas))
- if byday:
- weekstring = ';BYDAY=' + ','.join(byday)
-
- elif freq == 'monthly':
- if datas.get('select1')=='date' and (datas.get('day') < 1 or datas.get('day') > 31):
- raise osv.except_osv(_('Error!'), ("Please select proper Day of month"))
- if datas.get('select1')=='day':
- monthstring = ';BYDAY=' + datas.get('byday') + datas.get('week_list')
- elif datas.get('select1')=='date':
- monthstring = ';BYMONTHDAY=' + str(datas.get('day'))
-
- elif freq == 'yearly':
- if datas.get('select1')=='date' and (datas.get('day') < 1 or datas.get('day') > 31):
- raise osv.except_osv(_('Error!'), ("Please select proper Day of month"))
- bymonth = ';BYMONTH=' + str(datas.get('month_list'))
- if datas.get('select1')=='day':
- bystring = ';BYDAY=' + datas.get('byday') + datas.get('week_list')
- elif datas.get('select1')=='date':
- bystring = ';BYMONTHDAY=' + str(datas.get('day'))
- yearstring = bymonth + bystring
-
- if datas.get('end_date'):
- datas['end_date'] = ''.join((re.compile('\d')).findall(datas.get('end_date'))) + '235959Z'
- enddate = (datas.get('count') and (';COUNT=' + str(datas.get('count'))) or '') +\
- ((datas.get('end_date') and (';UNTIL=' + datas.get('end_date'))) or '')
-
- exrule_string = 'FREQ=' + freq.upper() + weekstring + interval_srting \
- + enddate + monthstring + yearstring
-
- model_obj.write(cr, uid, ex_id,{'exrule': exrule_string})
- return {'type': 'ir.actions.act_window_close'}
-
- _defaults = {
- 'freq': lambda *x: 'None',
- 'select1': lambda *x: 'date',
- 'interval': lambda *x: 1,
- }
-
-base_calendar_set_exrule()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/base_calendar/wizard/base_calendar_set_exrule_view.xml b/addons/base_calendar/wizard/base_calendar_set_exrule_view.xml
deleted file mode 100644
index 2a2d6412d4b..00000000000
--- a/addons/base_calendar/wizard/base_calendar_set_exrule_view.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
- base.calendar.set.exrule.form
- base.calendar.set.exrule
- form
-
-
-
-
-
-
- Set Exclude range
- base.calendar.set.exrule
- form
- form,tree
- new
-
-
-
-
diff --git a/addons/base_calendar/wizard/calendar_event_edit_all.py b/addons/base_calendar/wizard/calendar_event_edit_all.py
deleted file mode 100644
index 23f67f579f2..00000000000
--- a/addons/base_calendar/wizard/calendar_event_edit_all.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-from osv import osv
-from osv import fields
-
-class calendar_event_edit_all(osv.osv_memory):
-
- def _default_values(self, cr, uid, context=None):
- """ Get Default value for Start Date
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param context: A standard dictionary for contextual values
- @Return: Get Default value for Start Date
- """
- context_id = context and context.get('active_id', False) or False
- if context_id:
- if context.get('date'):
- return context.get('date')
- else:
- model = context.get('model', False)
- model_obj = self.pool.get(model)
- event = model_obj.read(cr, uid, context_id, ['name', 'location', 'alarm_id'])
- return event['date']
-
- def _default_deadline(self, cr, uid, context=None):
- """ Get Default value for End Date
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param context: A standard dictionary for contextual values
- @return: Get Default value for End Date
- """
-
- context_id = context and context.get('active_id', False) or False
- if context_id:
- if context.get('date_deadline'):
- return context.get('date_deadline')
- else:
- model = context.get('model', False)
- model_obj = self.pool.get(model)
- event = model_obj.read(cr, uid, context_id, ['name', 'location', 'alarm_id'])
- return event['date_deadline']
-
- def modify_this(self, cr, uid, ids, context=None):
- """
- Modify All event for Crm Meeting.
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of calendar event edit all’s IDs
- @return: dictionary {}
- """
- if context is None:
- context = {}
-
- context_id = context and context.get('active_id', False) or False
- if context_id:
- for datas in self.read(cr, uid, ids):
- model = context.get('model', False)
- model_obj = self.pool.get(model)
- model_obj.modify_all(cr, uid, [context_id], datas, context=context)
- return {'type': 'ir.actions.act_window_close'}
-
- _name = "calendar.event.edit.all"
- _description = "Calendar Edit all event"
- _columns = {
- 'name': fields.char('Title', size=64, required=True),
- 'date': fields.datetime('Start Date', required=True),
- 'date_deadline': fields.datetime('End Date', required=True),
- 'location': fields.char('Location', size=124),
- 'alarm_id': fields.many2one('res.alarm', 'Reminder'),
- }
- _defaults = {
- 'date': _default_values,
- 'date_deadline': _default_deadline
- }
-calendar_event_edit_all()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_calendar/wizard/calendar_event_edit_all_view.xml b/addons/base_calendar/wizard/calendar_event_edit_all_view.xml
deleted file mode 100644
index 82f403e9254..00000000000
--- a/addons/base_calendar/wizard/calendar_event_edit_all_view.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
- calendar.event.edit.all.form
- calendar.event.edit.all
- form
-
-
-
-
-
-
- Edit all events
- calendar.event.edit.all
- form
- tree,form
-
- new
-
-
-
-
diff --git a/addons/base_contact/base_contact.py b/addons/base_contact/base_contact.py
index 8a003ec7cf1..cf0bc610be8 100644
--- a/addons/base_contact/base_contact.py
+++ b/addons/base_contact/base_contact.py
@@ -64,7 +64,7 @@ class res_partner_contact(osv.osv):
relation='res.partner', string='Main Employer'),
'function': fields.related('job_ids', 'function', type='char', \
string='Main Function'),
- 'job_id': fields.function(_main_job, method=True, type='many2one',\
+ 'job_id': fields.function(_main_job, type='many2one',\
relation='res.partner.job', string='Main Job'),
'email': fields.char('E-Mail', size=240),
'comment': fields.text('Notes', translate=True),
diff --git a/addons/base_report_creator/base_report_creator.py b/addons/base_report_creator/base_report_creator.py
index a026a077c85..29699b9000d 100644
--- a/addons/base_report_creator/base_report_creator.py
+++ b/addons/base_report_creator/base_report_creator.py
@@ -415,7 +415,7 @@ class report_creator(osv.osv):
'model_ids': fields.many2many('ir.model', 'base_report_creator_report_model_rel', 'report_id', 'model_id', 'Reported Objects'),
'field_ids': fields.one2many('base_report_creator.report.fields', 'report_id', 'Fields to Display'),
'filter_ids': fields.one2many('base_report_creator.report.filter', 'report_id', 'Filters'),
- 'sql_query': fields.function(_sql_query_get, method=True, type="text", string='SQL Query', store=True),
+ 'sql_query': fields.function(_sql_query_get, type="text", string='SQL Query', store=True),
'group_ids': fields.many2many('res.groups', 'base_report_creator_group_rel', 'report_id', 'group_id', 'Authorized Groups'),
'menu_id': fields.many2one('ir.ui.menu', "Menu", readonly=True),
}
diff --git a/addons/base_tools/i18n/zh_CN.po b/addons/base_tools/i18n/zh_CN.po
new file mode 100644
index 00000000000..4dd9285396e
--- /dev/null
+++ b/addons/base_tools/i18n/zh_CN.po
@@ -0,0 +1,32 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-06-29 01:21+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-30 04:34+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: base_tools
+#: model:ir.module.module,shortdesc:base_tools.module_meta_information
+msgid "Common base for tools modules"
+msgstr "base_tools"
+
+#. module: base_tools
+#: model:ir.module.module,description:base_tools.module_meta_information
+msgid ""
+"\n"
+" "
+msgstr ""
+"\n"
+" "
diff --git a/addons/caldav/i18n/fi.po b/addons/caldav/i18n/fi.po
new file mode 100644
index 00000000000..445d25ee8c1
--- /dev/null
+++ b/addons/caldav/i18n/fi.po
@@ -0,0 +1,818 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-06-28 09:32+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: caldav
+#: view:basic.calendar:0
+msgid "Value Mapping"
+msgstr ""
+
+#. module: caldav
+#: help:caldav.browse,url:0
+msgid "Url of the caldav server, use for synchronization"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar.alias,name:0
+msgid "Filename"
+msgstr "Tiedostonnimi"
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_calendar_event_export
+msgid "Event Export"
+msgstr ""
+
+#. module: caldav
+#: view:calendar.event.subscribe:0
+msgid "Provide path for Remote Calendar"
+msgstr ""
+
+#. module: caldav
+#: model:ir.actions.act_window,name:caldav.action_calendar_event_import_values
+msgid "Import .ics File"
+msgstr ""
+
+#. module: caldav
+#: view:calendar.event.export:0
+msgid "_Close"
+msgstr ""
+
+#. module: caldav
+#: selection:basic.calendar.attributes,type:0
+#: selection:basic.calendar.lines,name:0
+msgid "Attendee"
+msgstr "Osallistuja"
+
+#. module: caldav
+#: sql_constraint:basic.calendar.fields:0
+msgid "Can not map a field more than once"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/calendar.py:787
+#: code:addons/caldav/calendar.py:877
+#: code:addons/caldav/wizard/calendar_event_import.py:63
+#, python-format
+msgid "Warning !"
+msgstr "Varoitus !"
+
+#. module: caldav
+#: field:basic.calendar.lines,object_id:0
+msgid "Object"
+msgstr "Objekti"
+
+#. module: caldav
+#: view:basic.calendar:0
+msgid "Todo"
+msgstr "Tehtävät"
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_user_preference
+msgid "User preference Form"
+msgstr ""
+
+#. module: caldav
+#: field:user.preference,service:0
+msgid "Services"
+msgstr "Palvelut"
+
+#. module: caldav
+#: selection:basic.calendar.fields,fn:0
+msgid "Expression as constant"
+msgstr ""
+
+#. module: caldav
+#: selection:user.preference,device:0
+msgid "Evolution"
+msgstr "Evoluutio"
+
+#. module: caldav
+#: view:calendar.event.import:0
+#: view:calendar.event.subscribe:0
+msgid "Ok"
+msgstr "OK"
+
+#. module: caldav
+#: code:addons/caldav/calendar.py:877
+#, python-format
+msgid "Please provide proper configuration of \"%s\" in Calendar Lines"
+msgstr ""
+
+#. module: caldav
+#: field:calendar.event.export,name:0
+msgid "File name"
+msgstr "Tiedostonimi"
+
+#. module: caldav
+#: field:caldav.browse,url:0
+msgid "Caldav Server"
+msgstr "Caldav palvelin"
+
+#. module: caldav
+#: code:addons/caldav/wizard/calendar_event_subscribe.py:59
+#, python-format
+msgid "Error!"
+msgstr "Virhe!"
+
+#. module: caldav
+#: help:caldav.browse,caldav_doc_file:0
+msgid "download full caldav Documentation."
+msgstr ""
+
+#. module: caldav
+#: selection:user.preference,device:0
+msgid "iPhone"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/wizard/caldav_browse.py:32
+#, python-format
+msgid ""
+"\n"
+" * Webdav server that provides remote access to calendar\n"
+" * Synchronisation of calendar using WebDAV\n"
+" * Customize calendar event and todo attribute with any of OpenERP model\n"
+" * Provides iCal Import/Export functionality\n"
+"\n"
+" To access Calendars using CalDAV clients, point them to:\n"
+" "
+"http://HOSTNAME:PORT/webdav/DATABASE_NAME/calendars/users/USERNAME/c\n"
+"\n"
+" To access OpenERP Calendar using WebCal to remote site use the URL "
+"like:\n"
+" "
+"http://HOSTNAME:PORT/webdav/DATABASE_NAME/Calendars/CALENDAR_NAME.ics\n"
+"\n"
+" Where,\n"
+" HOSTNAME: Host on which OpenERP server(With webdav) is running\n"
+" PORT : Port on which OpenERP server is running (By Default : 8069)\n"
+" DATABASE_NAME: Name of database on which OpenERP Calendar is "
+"created\n"
+" CALENDAR_NAME: Name of calendar to access\n"
+" "
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/wizard/caldav_browse.py:147
+#, python-format
+msgid ""
+"\n"
+"Prerequire\n"
+"----------\n"
+"If you are using thunderbird, first you need to install the lightning "
+"module\n"
+"http://www.mozilla.org/projects/calendar/lightning/\n"
+"\n"
+"configuration\n"
+"-------------\n"
+"\n"
+"1. Go to Calendar View\n"
+"\n"
+"2. File -> New Calendar\n"
+"\n"
+"3. Chosse \"On the Network\"\n"
+"\n"
+"4. for format choose CalDav\n"
+" and as location the url given above (ie : "
+"http://host.com:8069/webdav/db/calendars/users/demo/c/Meetings)\n"
+" \n"
+"5. Choose a name and a color for the Calendar, and we advice you to uncheck "
+"\"alarm\"\n"
+"\n"
+"6. Then put your openerp login and password (to give the password only check "
+"the box \"Use password Manager to remember this password\"\n"
+"\n"
+"7. Then Finish, your meetings should appear now in your calendar view\n"
+msgstr ""
+
+#. module: caldav
+#: selection:basic.calendar,type:0
+#: selection:basic.calendar.attributes,type:0
+#: selection:basic.calendar.lines,name:0
+msgid "TODO"
+msgstr "Tehtävät"
+
+#. module: caldav
+#: view:calendar.event.export:0
+msgid "Export ICS"
+msgstr ""
+
+#. module: caldav
+#: selection:basic.calendar.fields,fn:0
+msgid "Use the field"
+msgstr "Käytä kenttää"
+
+#. module: caldav
+#: code:addons/caldav/calendar.py:787
+#, python-format
+msgid "Can not create line \"%s\" more than once"
+msgstr ""
+
+#. module: caldav
+#: view:basic.calendar:0
+#: field:basic.calendar,line_ids:0
+#: model:ir.model,name:caldav.model_basic_calendar_lines
+msgid "Calendar Lines"
+msgstr "Kalenteririvit"
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_calendar_event_subscribe
+msgid "Event subscribe"
+msgstr ""
+
+#. module: caldav
+#: view:calendar.event.import:0
+msgid "Import ICS"
+msgstr ""
+
+#. module: caldav
+#: view:calendar.event.import:0
+#: view:calendar.event.subscribe:0
+#: view:user.preference:0
+msgid "_Cancel"
+msgstr ""
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar_event
+msgid "basic.calendar.event"
+msgstr ""
+
+#. module: caldav
+#: view:basic.calendar:0
+#: selection:basic.calendar,type:0
+#: selection:basic.calendar.attributes,type:0
+#: selection:basic.calendar.lines,name:0
+msgid "Event"
+msgstr ""
+
+#. module: caldav
+#: field:document.directory,calendar_collection:0
+#: field:user.preference,collection:0
+msgid "Calendar Collection"
+msgstr ""
+
+#. module: caldav
+#: constraint:document.directory:0
+msgid "Error! You can not create recursive Directories."
+msgstr "Virhe! Et voi luoda rekursiivisia kansioita."
+
+#. module: caldav
+#: view:user.preference:0
+msgid "_Open"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar,type:0
+#: field:basic.calendar.attributes,type:0
+#: field:basic.calendar.fields,type_id:0
+#: field:basic.calendar.lines,name:0
+msgid "Type"
+msgstr "Tyyppi"
+
+#. module: caldav
+#: help:calendar.event.export,name:0
+msgid "Save in .ics format"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/calendar.py:1291
+#, python-format
+msgid "Error !"
+msgstr "Virhe !"
+
+#. module: caldav
+#: code:addons/caldav/wizard/caldav_browse.py:128
+#, python-format
+msgid ""
+"\n"
+" 1. Go to Calendar View\n"
+"\n"
+" 2. File -> New -> Calendar\n"
+"\n"
+" 3. Fill the form \n"
+" - type : CalDav\n"
+" - name : Whaterver you want (ie : Meeting)\n"
+" - url : "
+"http://HOST:PORT/webdav/DB_NAME/calendars/users/USER/c/Meetings (ie : "
+"http://localhost:8069/webdav/db_1/calendars/users/demo/c/Meetings) the one "
+"given on the top of this window\n"
+" - uncheck \"User SSL\"\n"
+" - Username : Your username (ie : Demo)\n"
+" - Refresh : everytime you want that evolution synchronize the data "
+"with the server\n"
+"\n"
+" 4. Click ok and give your openerp password\n"
+"\n"
+" 5. A new calendar named with the name you gave should appear on the left "
+"side. \n"
+" "
+msgstr ""
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar_attributes
+msgid "Calendar attributes"
+msgstr ""
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_caldav_browse
+msgid "Caldav Browse"
+msgstr ""
+
+#. module: caldav
+#: model:ir.module.module,description:caldav.module_meta_information
+msgid ""
+"\n"
+" This module Contains basic functionality for caldav system like: \n"
+" - Webdav server that provides remote access to calendar\n"
+" - Synchronisation of calendar using WebDAV\n"
+" - Customize calendar event and todo attribute with any of OpenERP model\n"
+" - Provides iCal Import/Export functionality\n"
+"\n"
+" To access Calendars using CalDAV clients, point them to:\n"
+" "
+"http://HOSTNAME:PORT/webdav/DATABASE_NAME/calendars/users/USERNAME/c\n"
+"\n"
+" To access OpenERP Calendar using WebCal to remote site use the URL "
+"like:\n"
+" "
+"http://HOSTNAME:PORT/webdav/DATABASE_NAME/Calendars/CALENDAR_NAME.ics\n"
+"\n"
+" Where,\n"
+" HOSTNAME: Host on which OpenERP server(With webdav) is running\n"
+" PORT : Port on which OpenERP server is running (By Default : 8069)\n"
+" DATABASE_NAME: Name of database on which OpenERP Calendar is "
+"created\n"
+" CALENDAR_NAME: Name of calendar to access\n"
+msgstr ""
+
+#. module: caldav
+#: selection:user.preference,device:0
+msgid "Android based device"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar,create_date:0
+msgid "Created Date"
+msgstr "Luontipäivä"
+
+#. module: caldav
+#: view:basic.calendar:0
+msgid "Attributes Mapping"
+msgstr ""
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_document_directory
+msgid "Directory"
+msgstr "Hakemisto"
+
+#. module: caldav
+#: field:calendar.event.subscribe,url_path:0
+msgid "Provide path for remote calendar"
+msgstr ""
+
+#. module: caldav
+#: view:caldav.browse:0
+msgid "_Ok"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar.lines,domain:0
+msgid "Domain"
+msgstr "Toimialue"
+
+#. module: caldav
+#: view:calendar.event.subscribe:0
+msgid "_Subscribe"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar,user_id:0
+msgid "Owner"
+msgstr "Omistaja"
+
+#. module: caldav
+#: view:basic.calendar:0
+#: field:basic.calendar.alias,cal_line_id:0
+#: field:basic.calendar.lines,calendar_id:0
+#: model:ir.ui.menu,name:caldav.menu_calendar
+#: field:user.preference,calendar:0
+msgid "Calendar"
+msgstr "kalenteri"
+
+#. module: caldav
+#: code:addons/caldav/calendar.py:41
+#, python-format
+msgid ""
+"Please install python-vobject from http://vobject.skyhouseconsulting.com/"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/wizard/calendar_event_import.py:63
+#, python-format
+msgid "Invalid format of the ics, file can not be imported"
+msgstr "Virheellinen ics formaatti, tiedostoa ei voi tuoda"
+
+#. module: caldav
+#: selection:user.preference,service:0
+msgid "CalDAV"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar.fields,field_id:0
+msgid "OpenObject Field"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar.alias,res_id:0
+msgid "Res. ID"
+msgstr ""
+
+#. module: caldav
+#: view:calendar.event.subscribe:0
+msgid "Message..."
+msgstr "Viesti..."
+
+#. module: caldav
+#: selection:user.preference,device:0
+msgid "Other"
+msgstr "Muu"
+
+#. module: caldav
+#: view:basic.calendar:0
+#: field:basic.calendar,has_webcal:0
+msgid "WebCal"
+msgstr ""
+
+#. module: caldav
+#: view:document.directory:0
+#: model:ir.actions.act_window,name:caldav.action_calendar_collection_form
+#: model:ir.ui.menu,name:caldav.menu_calendar_collection
+msgid "Calendar Collections"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/calendar.py:813
+#: sql_constraint:basic.calendar.alias:0
+#, python-format
+msgid "The same filename cannot apply to two records!"
+msgstr ""
+
+#. module: caldav
+#: sql_constraint:document.directory:0
+msgid "Directory cannot be parent of itself!"
+msgstr ""
+
+#. module: caldav
+#: view:basic.calendar:0
+#: field:document.directory,calendar_ids:0
+#: model:ir.actions.act_window,name:caldav.action_caldav_form
+#: model:ir.ui.menu,name:caldav.menu_caldav_directories
+msgid "Calendars"
+msgstr "Kalenterit"
+
+#. module: caldav
+#: field:basic.calendar,collection_id:0
+msgid "Collection"
+msgstr "Kokoelma"
+
+#. module: caldav
+#: field:basic.calendar,write_date:0
+msgid "Write Date"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/wizard/caldav_browse.py:104
+#, python-format
+msgid ""
+"\n"
+"Prerequire\n"
+"----------\n"
+"There is no buit-in way to synchronize calendar with caldav.\n"
+"So you need to install a third part software : Calendar (CalDav) \n"
+"for now it's the only one\n"
+"\n"
+"configuration\n"
+"-------------\n"
+"\n"
+"1. Open Calendar Sync\n"
+" I'll get an interface with 2 tabs\n"
+" Stay on the first one\n"
+" \n"
+"2. CaDAV Calendar URL : put the URL given above (ie : "
+"http://host.com:8069/webdav/db/calendars/users/demo/c/Meetings)\n"
+"\n"
+"3. Put your openerp username and password\n"
+"\n"
+"4. If your server don't use SSL, you'll get a warnign, say \"Yes\"\n"
+"\n"
+"5. Then you can synchronize manually or custom the settings to synchronize "
+"every x minutes.\n"
+" \n"
+" "
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/wizard/caldav_browse.py:53
+#, python-format
+msgid ""
+"\n"
+" For SSL specific configuration see the documentation below\n"
+"\n"
+"Now, to setup the calendars, you need to:\n"
+"\n"
+"1. Click on the \"Settings\" and go to the \"Mail, Contacts, Calendars\" "
+"page.\n"
+"2. Go to \"Add account...\"\n"
+"3. Click on \"Other\"\n"
+"4. From the \"Calendars\" group, select \"Add CalDAV Account\"\n"
+"\n"
+"5. Enter the host's name \n"
+" (ie : if the url is http://openerp.com:8069/webdav/db_1/calendars/ , "
+"openerp.com is the host)\n"
+"\n"
+"6. Fill Username and password with your openerp login and password\n"
+"\n"
+"7. As a description, you can either leave the server's name or\n"
+" something like \"OpenERP calendars\".\n"
+"\n"
+"9. If you are not using a SSL server, you'll get an error, do not worry and "
+"push \"Continue\"\n"
+"\n"
+"10. Then click to \"Advanced Settings\" to specify the right\n"
+" ports and paths. \n"
+" \n"
+"11. Specify the port for the OpenERP server: 8071 for SSL, 8069 without.\n"
+"\n"
+"12. Set the \"Account URL\" to the right path of the OpenERP webdav:\n"
+" the url given by the wizard (ie : "
+"http://my.server.ip:8069/webdav/dbname/calendars/ )\n"
+"\n"
+"11. Click on Done. The phone will hopefully connect to the OpenERP server\n"
+" and verify it can use the account.\n"
+"\n"
+"12. Go to the main menu of the iPhone and enter the Calendar application.\n"
+" Your OpenERP calendars will be visible inside the selection of the\n"
+" \"Calendars\" button.\n"
+" Note that when creating a new calendar entry, you will have to specify\n"
+" which calendar it should be saved at.\n"
+"\n"
+"\n"
+"\n"
+"IF you need SSL (and your certificate is not a verified one, as usual),\n"
+"then you first will need to let the iPhone trust that. Follow these\n"
+"steps:\n"
+"\n"
+" s1. Open Safari and enter the https location of the OpenERP server:\n"
+" https://my.server.ip:8071/\n"
+" (assuming you have the server at \"my.server.ip\" and the HTTPS port\n"
+" is the default 8071)\n"
+" s2. Safari will try to connect and issue a warning about the "
+"certificate\n"
+" used. Inspect the certificate and click \"Accept\" so that iPhone\n"
+" now trusts it. \n"
+" "
+msgstr ""
+
+#. module: caldav
+#: sql_constraint:document.directory:0
+msgid "The directory name must be unique !"
+msgstr "Hakemiston nimen tulee olla uniikki !"
+
+#. module: caldav
+#: view:user.preference:0
+msgid "User Preference"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/wizard/calendar_event_subscribe.py:59
+#, python-format
+msgid "Please provide Proper URL !"
+msgstr ""
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar_timezone
+msgid "basic.calendar.timezone"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar.fields,expr:0
+msgid "Expression"
+msgstr "Lauseke"
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar_attendee
+msgid "basic.calendar.attendee"
+msgstr ""
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar_alias
+msgid "basic.calendar.alias"
+msgstr ""
+
+#. module: caldav
+#: view:calendar.event.import:0
+#: field:calendar.event.import,file_path:0
+msgid "Select ICS file"
+msgstr ""
+
+#. module: caldav
+#: field:caldav.browse,caldav_doc_file:0
+msgid "Caldav Document"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar.lines,mapping_ids:0
+msgid "Fields Mapping"
+msgstr "Kenttien kartoitukset"
+
+#. module: caldav
+#: view:caldav.browse:0
+msgid "Browse caldav"
+msgstr ""
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar
+msgid "basic.calendar"
+msgstr ""
+
+#. module: caldav
+#: view:basic.calendar:0
+msgid "Other Info"
+msgstr "Muu tieto"
+
+#. module: caldav
+#: field:user.preference,device:0
+msgid "Software/Devices"
+msgstr "Ohjelmisto/Laitteet"
+
+#. module: caldav
+#: help:basic.calendar,has_webcal:0
+msgid ""
+"Also export a .ics entry next to the calendar folder, with WebCal "
+"content."
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar.fields,fn:0
+msgid "Function"
+msgstr "Toiminto"
+
+#. module: caldav
+#: view:basic.calendar:0
+#: field:basic.calendar,description:0
+#: view:caldav.browse:0
+#: field:caldav.browse,description:0
+msgid "Description"
+msgstr "Kuvaus"
+
+#. module: caldav
+#: help:basic.calendar.alias,cal_line_id:0
+msgid "The calendar/line this mapping applies to"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar.fields,mapping:0
+msgid "Mapping"
+msgstr "Mäppäys"
+
+#. module: caldav
+#: code:addons/caldav/wizard/calendar_event_import.py:86
+#, python-format
+msgid "Import Sucessful"
+msgstr "Tuonti onnistui"
+
+#. module: caldav
+#: view:calendar.event.import:0
+msgid "_Import"
+msgstr "_Tuo"
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_calendar_event_import
+msgid "Event Import"
+msgstr ""
+
+#. module: caldav
+#: selection:basic.calendar.fields,fn:0
+msgid "Interval in hours"
+msgstr "Väli tuntia"
+
+#. module: caldav
+#: view:calendar.event.subscribe:0
+msgid "Subscribe to Remote Calendar"
+msgstr ""
+
+#. module: caldav
+#: help:basic.calendar,calendar_color:0
+msgid "For supporting clients, the color of the calendar entries"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar,name:0
+#: field:basic.calendar.attributes,name:0
+#: field:basic.calendar.fields,name:0
+msgid "Name"
+msgstr "Nimi"
+
+#. module: caldav
+#: selection:basic.calendar.attributes,type:0
+#: selection:basic.calendar.lines,name:0
+msgid "Alarm"
+msgstr "Hälytys"
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar_alarm
+msgid "basic.calendar.alarm"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/calendar.py:1291
+#, python-format
+msgid "Attendee must have an Email Id"
+msgstr ""
+
+#. module: caldav
+#: model:ir.actions.act_window,name:caldav.action_calendar_event_export_values
+msgid "Export .ics File"
+msgstr ""
+
+#. module: caldav
+#: code:addons/caldav/calendar.py:41
+#, python-format
+msgid "vobject Import Error!"
+msgstr ""
+
+#. module: caldav
+#: field:calendar.event.export,file_path:0
+msgid "Save ICS file"
+msgstr ""
+
+#. module: caldav
+#: selection:user.preference,device:0
+msgid "Sunbird/Thunderbird"
+msgstr ""
+
+#. module: caldav
+#: field:basic.calendar,calendar_order:0
+msgid "Order"
+msgstr "Järjestys"
+
+#. module: caldav
+#: model:ir.module.module,shortdesc:caldav.module_meta_information
+msgid "Share Calendar using CalDAV"
+msgstr "Jaa kalenteri käyttäen CalDAV:ia"
+
+#. module: caldav
+#: field:basic.calendar,calendar_color:0
+msgid "Color"
+msgstr "Väri"
+
+#. module: caldav
+#: view:basic.calendar:0
+msgid "MY"
+msgstr ""
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar_fields
+msgid "Calendar fields"
+msgstr "Kalenterikentät"
+
+#. module: caldav
+#: view:calendar.event.import:0
+msgid "Import Message"
+msgstr ""
+
+#. module: caldav
+#: model:ir.actions.act_window,name:caldav.action_calendar_event_subscribe
+#: model:ir.actions.act_window,name:caldav.action_calendar_event_subscribe_values
+msgid "Subscribe"
+msgstr "Tilaa"
+
+#. module: caldav
+#: sql_constraint:document.directory:0
+msgid "Directory must have a parent or a storage"
+msgstr "Hakemistolla täytyy olla ylätason hakemisto tai tietovarasto"
+
+#. module: caldav
+#: model:ir.model,name:caldav.model_basic_calendar_todo
+msgid "basic.calendar.todo"
+msgstr ""
+
+#. module: caldav
+#: help:basic.calendar,calendar_order:0
+msgid "For supporting clients, the order of this folder among the calendars"
+msgstr ""
diff --git a/addons/caldav/wizard/caldav_browse.py b/addons/caldav/wizard/caldav_browse.py
index 9e67f972216..f6ecc5dccd5 100644
--- a/addons/caldav/wizard/caldav_browse.py
+++ b/addons/caldav/wizard/caldav_browse.py
@@ -26,9 +26,8 @@ import addons
from tools.translate import _
class caldav_browse(osv.osv_memory):
-
+
__doc = {
-
'other' : _("""
* Webdav server that provides remote access to calendar
* Synchronisation of calendar using WebDAV
@@ -45,11 +44,8 @@ class caldav_browse(osv.osv_memory):
HOSTNAME: Host on which OpenERP server(With webdav) is running
PORT : Port on which OpenERP server is running (By Default : 8069)
DATABASE_NAME: Name of database on which OpenERP Calendar is created
- CALENDAR_NAME: Name of calendar to access
"""),
-
-
-
+
'iphone' : _("""
For SSL specific configuration see the documentation below
@@ -60,7 +56,7 @@ Now, to setup the calendars, you need to:
3. Click on "Other"
4. From the "Calendars" group, select "Add CalDAV Account"
-5. Enter the host's name
+5. Enter the host's name
(ie : if the url is http://openerp.com:8069/webdav/db_1/calendars/ , openerp.com is the host)
6. Fill Username and password with your openerp login and password
@@ -71,8 +67,8 @@ Now, to setup the calendars, you need to:
9. If you are not using a SSL server, you'll get an error, do not worry and push "Continue"
10. Then click to "Advanced Settings" to specify the right
- ports and paths.
-
+ ports and paths.
+
11. Specify the port for the OpenERP server: 8071 for SSL, 8069 without.
12. Set the "Account URL" to the right path of the OpenERP webdav:
@@ -87,8 +83,6 @@ Now, to setup the calendars, you need to:
Note that when creating a new calendar entry, you will have to specify
which calendar it should be saved at.
-
-
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:
@@ -99,13 +93,13 @@ steps:
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 trusts it.
"""),
'android' : _("""
Prerequire
----------
There is no buit-in way to synchronize calendar with caldav.
-So you need to install a third part software : Calendar (CalDav)
+So you need to install a third part software : Calendar (CalDav)
for now it's the only one
configuration
@@ -114,7 +108,7 @@ configuration
1. Open Calendar Sync
I'll get an interface with 2 tabs
Stay on the first one
-
+
2. CaDAV Calendar URL : put the URL given above (ie : http://host.com:8069/webdav/db/calendars/users/demo/c/Meetings)
3. Put your openerp username and password
@@ -122,7 +116,7 @@ configuration
4. If your server don't use SSL, you'll get a warnign, say "Yes"
5. Then you can synchronize manually or custom the settings to synchronize every x minutes.
-
+
"""),
'evolution' : _("""
@@ -130,7 +124,7 @@ configuration
2. File -> New -> Calendar
- 3. Fill the form
+ 3. Fill the form
- type : CalDav
- name : Whaterver you want (ie : Meeting)
- url : http://HOST:PORT/webdav/DB_NAME/calendars/users/USER/c/Meetings (ie : http://localhost:8069/webdav/db_1/calendars/users/demo/c/Meetings) the one given on the top of this window
@@ -140,10 +134,9 @@ configuration
4. Click ok and give your openerp password
- 5. A new calendar named with the name you gave should appear on the left side.
+ 5. A new calendar named with the name you gave should appear on the left side.
"""),
-
-
+
'thunderbird' : _("""
Prerequire
----------
@@ -161,7 +154,7 @@ configuration
4. for format choose CalDav
and as location the url given above (ie : http://host.com:8069/webdav/db/calendars/users/demo/c/Meetings)
-
+
5. Choose a name and a color for the Calendar, and we advice you to uncheck "alarm"
6. Then put your openerp login and password (to give the password only check the box "Use password Manager to remember this password"
@@ -169,8 +162,6 @@ configuration
7. Then Finish, your meetings should appear now in your calendar view
"""),
}
-
-
_name = 'caldav.browse'
_description = 'Caldav Browse'
@@ -181,55 +172,48 @@ configuration
}
def default_get(self, cr, uid, fields, context=None):
+ pref_obj = self.pool.get('user.preference')
+ pref_ids = pref_obj.browse(cr, uid ,context.get('rec_id',False), context=context)
res = {}
- host = ''
+ host = context.get('host')
port = ''
- prefix = 'http://'
+ prefix = 'http://'
if not config.get('xmlrpc'):
if not config.get('netrpc'):
- prefix = 'https://'
- host = config.get('xmlrpcs_interface', None)
+ prefix = 'https://'
port = config.get('xmlrpcs_port', 8071)
else:
- host = config.get('netrpc_interface', None)
- port = config.get('netrpc_port',8070)
- else:
- host = config.get('xmlrpc_interface', None)
+ port = config.get('netrpc_port',8070)
+ else:
port = config.get('xmlrpc_port',8069)
- if host == '' or None:
- host = 'localhost'
- port = 8069
if not config.get_misc('webdav','enable',True):
raise Exception("WebDAV is disabled, cannot continue")
user_pool = self.pool.get('res.users')
current_user = user_pool.browse(cr, uid, uid, context=context)
- pref_obj = self.pool.get('user.preference')
- pref_ids = pref_obj.browse(cr, uid ,context.get('rec_id',False), context=context)
#TODO write documentation
res['description'] = self.__doc['other']
if pref_ids:
- pref_ids = pref_ids[0]
+ pref_ids = pref_ids[0]
if pref_ids.device == 'iphone':
url = host + ':' + str(port) + '/'+ pref_ids.service + '/' + cr.dbname + '/'+'calendars/'
else :
url = host + ':' + str(port) + '/'+ pref_ids.service + '/' + cr.dbname + '/'+'calendars/'+ 'users/'+ current_user.login + '/'+ pref_ids.collection.name+ '/'+ pref_ids.calendar.name
-
+
res['description'] = self.__doc.get(pref_ids.device , self.__doc['other'])
file = open(addons.get_module_resource('caldav','doc', 'caldav_doc.pdf'),'rb')
res['caldav_doc_file'] = base64.encodestring(file.read())
-
+
#res['doc_link'] = 'http://doc.openerp.com/'
res['url'] = prefix+url
return res
def browse_caldav(self, cr, uid, ids, context):
-
return {}
caldav_browse()
class user_preference(osv.osv_memory):
-
+
_name = 'user.preference'
_description = 'User preference Form'
@@ -238,32 +222,39 @@ class user_preference(osv.osv_memory):
'calendar' :fields.many2one('basic.calendar', 'Calendar', required=True),
'service': fields.selection([('webdav','CalDAV')], "Services"),
'device' : fields.selection([('other', 'Other'), ('iphone', 'iPhone'), ('android', 'Android based device'),('thunderbird', 'Sunbird/Thunderbird'), ('evolution','Evolution')], "Software/Devices"),
+ 'host_name': fields.char('Host Name', size=64, required=True),
}
-
+
def _get_default_calendar(self, cr, uid, context):
if context == None:
context = {}
name = context.get('cal_name')
-
collection_obj = self.pool.get('basic.calendar')
ids = collection_obj.search(cr, uid, [('name', '=', name)])
return ids[0]
-
-
+
def _get_default_collection(self, cr, uid, context):
collection_obj = self.pool.get('document.directory')
ids = collection_obj.search(cr, uid, [('name', '=', 'c')])
return ids[0]
-
+ def _get_default_host(self, cr, uid, context):
+ ids=self.search(cr,uid,[])
+ host_name = ''
+ if ids:
+ ids = len(ids)> 1 and len(ids)-1 or ids[0] # Use len(ids)-1 for taking the value of last id
+ host_name = self.browse(cr, uid,[ids],context=context)[0].host_name
+ return host_name
+
_defaults={
'service': 'webdav',
'collection' : _get_default_collection,
'calendar' : _get_default_calendar,
'device' : 'other',
-
- }
-
+ 'host_name':_get_default_host
+
+ }
+
def open_window(self, cr, uid, ids, context=None):
obj_model = self.pool.get('ir.model.data')
model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','caldav_Browse')])
@@ -278,6 +269,22 @@ class user_preference(osv.osv_memory):
'target': 'new',
'context': context,
}
-
-
+
+ def next_window(self, cr, uid, ids, context=None):
+ obj_model = self.pool.get('ir.model.data')
+ host_name = self.browse (cr,uid,ids)[0].host_name
+ model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','user_prefernce_form')])
+ resource_id = obj_model.read(cr, uid, model_data_ids, fields=['res_id'])
+ context.update({'res_id': ids,'host':host_name})
+ resource_id = obj_model.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'user.preference',
+ 'views': [(resource_id,'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context': context,
+ }
+
user_preference()
diff --git a/addons/caldav/wizard/caldav_browse_view.xml b/addons/caldav/wizard/caldav_browse_view.xml
index 53af6029883..565e3a44407 100644
--- a/addons/caldav/wizard/caldav_browse_view.xml
+++ b/addons/caldav/wizard/caldav_browse_view.xml
@@ -11,19 +11,39 @@
-
-
-
-
-
+
+
+
+
+
+ host_preference
+ user.preference
+ form
+
+
+
+
+
user_preference
user.preference
diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py
index 903bf5f0b68..1d0ece2dce1 100644
--- a/addons/crm/__openerp__.py
+++ b/addons/crm/__openerp__.py
@@ -129,6 +129,7 @@ Creates a dashboard for CRM that includes:
'test/test_crm_phonecall.yml',
'test/test_crm_recurrent_meeting.yml',
'test/test_crm_stage_changes.yml',
+ 'test/test_crm_recurrent_meeting_case2.yml',
],
'installable': True,
'active': False,
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index fd9b7780cec..0b1e8db7bbb 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -44,8 +44,177 @@ AVAILABLE_PRIORITIES = [
('5', 'Lowest'),
]
-class crm_case(object):
- """A simple python class to be used for common functions """
+class crm_base(object):
+ """
+ Base classe for crm object,
+ Object that inherit from this class should have
+ date_open
+ date_closed
+ user_id
+ partner_id
+ partner_address_id
+ as field to be compatible with this class
+
+ """
+ def _get_default_partner_address(self, cr, uid, context=None):
+
+ """Gives id of default address for current user
+ :param context: if portal in context is false return false anyway
+ """
+ if context is None:
+ context = {}
+ if not context.get('portal'):
+ return False
+ return self.pool.get('res.users').browse(cr, uid, uid, context).address_id.id
+
+ def _get_default_partner(self, cr, uid, context=None):
+ """Gives id of partner for current user
+ :param context: if portal in context is false return false anyway
+ """
+ if context is None:
+ context = {}
+ if not context.get('portal', False):
+ return False
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ if not user.address_id:
+ return False
+ return user.address_id.partner_id.id
+
+ def _get_default_email(self, cr, uid, context=None):
+ """Gives default email address for current user
+ :param context: if portal in context is false return false anyway
+ """
+ if not context.get('portal', False):
+ return False
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ if not user.address_id:
+ return False
+ return user.address_id.email
+
+ def _get_default_user(self, cr, uid, context=None):
+ """Gives current user id
+ :param context: if portal in context is false return false anyway
+ """
+ if context and context.get('portal', False):
+ return False
+ return uid
+
+ def _get_section(self, cr, uid, context=None):
+ """Gives section id for current User
+ """
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ return user.context_section_id.id or False
+
+ def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
+ """This function returns value of partner email based on Partner Address
+ @param ids: List of case IDs
+ @param add: Id of Partner's address
+ @email: Partner's email ID
+ """
+ if not add:
+ return {'value': {'email_from': False}}
+ address = self.pool.get('res.partner.address').browse(cr, uid, add)
+ if address.email:
+ return {'value': {'email_from': address.email, 'phone': address.phone}}
+ else:
+ return {'value': {'phone': address.phone}}
+
+ def onchange_partner_id(self, cr, uid, ids, part, email=False):
+ """This function returns value of partner address based on partner
+ @param ids: List of case IDs
+ @param part: Partner's id
+ @email: Partner's email ID
+ """
+ data={}
+ if part:
+ addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
+ data = {'partner_address_id': addr['contact']}
+ data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
+ return {'value': data}
+
+
+ def case_open(self, cr, uid, ids, *args):
+ """Opens Case
+ @param ids: List of case Ids
+ """
+ cases = self.browse(cr, uid, ids)
+ for case in cases:
+ data = {'state': 'open', 'active': True}
+ if not case.user_id:
+ data['user_id'] = uid
+ self.write(cr, uid, case.id, data)
+
+
+ self._action(cr, uid, cases, 'open')
+ return True
+
+ def case_close(self, cr, uid, ids, *args):
+ """Closes Case
+ @param ids: List of case Ids
+ """
+ cases = self.browse(cr, uid, ids)
+ cases[0].state # to fill the browse record cache
+ self.write(cr, uid, ids, {'state': 'done',
+ 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'),
+ })
+ #
+ # We use the cache of cases to keep the old case state
+ #
+ self._action(cr, uid, cases, 'done')
+ return True
+
+ def case_cancel(self, cr, uid, ids, *args):
+ """Cancels Case
+ @param ids: List of case Ids
+ """
+ cases = self.browse(cr, uid, ids)
+ cases[0].state # to fill the browse record cache
+ self.write(cr, uid, ids, {'state': 'cancel',
+ 'active': True})
+ self._action(cr, uid, cases, 'cancel')
+ for case in cases:
+ message = _("The case '%s' has been cancelled.") % (case.name,)
+ self.log(cr, uid, case.id, message)
+ return True
+
+ def case_pending(self, cr, uid, ids, *args):
+ """Marks case as pending
+ @param ids: List of case Ids
+ """
+ cases = self.browse(cr, uid, ids)
+ cases[0].state # to fill the browse record cache
+ self.write(cr, uid, ids, {'state': 'pending', 'active': True})
+ self._action(cr, uid, cases, 'pending')
+ return True
+
+ def case_reset(self, cr, uid, ids, *args):
+ """Resets case as draft
+ @param ids: List of case Ids
+ """
+ cases = self.browse(cr, uid, ids)
+ cases[0].state # to fill the browse record cache
+ self.write(cr, uid, ids, {'state': 'draft', 'active': True})
+ self._action(cr, uid, cases, 'draft')
+ return True
+
+ def _action(self, cr, uid, cases, state_to, scrit=None, context=None):
+ if context is None:
+ context = {}
+ context['state_to'] = state_to
+ rule_obj = self.pool.get('base.action.rule')
+ model_obj = self.pool.get('ir.model')
+ model_ids = model_obj.search(cr, uid, [('model','=',self._name)])
+ rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])])
+ return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context)
+
+class crm_case(crm_base):
+ """
+ A simple python class to be used for common functions
+ Object that inherit from this class should inherit from mailgate.thread
+ And need a stage_id field
+
+ And object that inherit (orm inheritance) from a class the overwrite copy
+ """
def _find_lost_stage(self, cr, uid, type, section_id):
return self._find_percent_stage(cr, uid, 0.0, type, section_id)
@@ -105,35 +274,7 @@ class crm_case(object):
return {'value':{}}
return {'value':{'probability': stage.probability}}
- def _get_default_partner_address(self, cr, uid, context=None):
-
- """Gives id of default address for current user
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param context: A standard dictionary for contextual values
- """
- if context is None:
- context = {}
- if not context.get('portal', False):
- return False
- return self.pool.get('res.users').browse(cr, uid, uid, context).address_id.id
-
- def _get_default_partner(self, cr, uid, context=None):
- """Gives id of partner for current user
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param context: A standard dictionary for contextual values
- """
- if context is None:
- context = {}
- if not context.get('portal', False):
- return False
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- if not user.address_id:
- return False
- return user.address_id.partner_id.id
+
def copy(self, cr, uid, id, default=None, context=None):
"""
@@ -145,6 +286,7 @@ class crm_case(object):
@param default: Dictionary of default values for copy.
@param context: A standard dictionary for contextual values
"""
+
if context is None:
context = {}
if default is None:
@@ -164,40 +306,9 @@ class crm_case(object):
})
return super(osv.osv, self).copy(cr, uid, id, default, context=context)
- def _get_default_email(self, cr, uid, context=None):
- """Gives default email address for current user
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param context: A standard dictionary for contextual values
- """
- if not context.get('portal', False):
- return False
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- if not user.address_id:
- return False
- return user.address_id.email
+
- def _get_default_user(self, cr, uid, context=None):
- """Gives current user id
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param context: A standard dictionary for contextual values
- """
- if context and context.get('portal', False):
- return False
- return uid
-
- def _get_section(self, cr, uid, context=None):
- """Gives section id for current User
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param context: A standard dictionary for contextual values
- """
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- return user.context_section_id.id or False
+
def _find_next_stage(self, cr, uid, stage_list, index, current_seq, stage_pool, context=None):
if index + 1 == len(stage_list):
@@ -274,38 +385,9 @@ class crm_case(object):
@param context: A standard dictionary for contextual values"""
return self.stage_change(cr, uid, ids, context=context, order='sequence desc')
- def onchange_partner_id(self, cr, uid, ids, part, email=False):
- """This function returns value of partner address based on partner
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case IDs
- @param part: Partner's id
- @email: Partner's email ID
- """
- data={}
- if part:
- addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
- data = {'partner_address_id': addr['contact']}
- data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
- return {'value': data}
+
- def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
- """This function returns value of partner email based on Partner Address
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case IDs
- @param add: Id of Partner's address
- @email: Partner's email ID
- """
- if not add:
- return {'value': {'email_from': False}}
- address = self.pool.get('res.partner.address').browse(cr, uid, add)
- if address.email:
- return {'value': {'email_from': address.email, 'phone': address.phone}}
- else:
- return {'value': {'phone': address.phone}}
+
def _history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=[], context=None):
mailgate_pool = self.pool.get('mailgate.thread')
@@ -522,15 +604,7 @@ class crm_case(object):
cases = self.browse(cr, uid, ids2, context=context)
return self._action(cr, uid, cases, False, context=context)
- def _action(self, cr, uid, cases, state_to, scrit=None, context=None):
- if context is None:
- context = {}
- context['state_to'] = state_to
- rule_obj = self.pool.get('base.action.rule')
- model_obj = self.pool.get('ir.model')
- model_ids = model_obj.search(cr, uid, [('model','=',self._name)])
- rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])])
- return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context)
+
def format_body(self, body):
return self.pool.get('base.action.rule').format_body(body)
@@ -608,7 +682,7 @@ class crm_case_section(osv.osv):
_columns = {
'name': fields.char('Sales Team', size=64, required=True, translate=True),
- 'complete_name': fields.function(get_full_name, method=True, type='char', size=256, readonly=True, store=True),
+ 'complete_name': fields.function(get_full_name, type='char', size=256, readonly=True, store=True),
'code': fields.char('Code', size=8),
'active': fields.boolean('Active', help="If the active field is set to "\
"true, it will allow you to hide the sales team without removing it."),
diff --git a/addons/crm/crm_installer.py b/addons/crm/crm_installer.py
index 32551d438c4..f6c61337ce4 100644
--- a/addons/crm/crm_installer.py
+++ b/addons/crm/crm_installer.py
@@ -37,6 +37,7 @@ class crm_installer(osv.osv_memory):
'thunderbird': fields.boolean('Thunderbird', help="Allows you to link your e-mail to OpenERP's documents. You can attach it to any existing one in OpenERP or create a new one."),
'outlook': fields.boolean('MS-Outlook', help="Allows you to link your e-mail to OpenERP's documents. You can attach it to any existing one in OpenERP or create a new one."),
'wiki_sale_faq': fields.boolean('Sale FAQ', help="Helps you manage wiki pages for Frequently Asked Questions on Sales Application."),
+ 'import_google': fields.boolean('Google Import', help="Imports contacts and events from your google account."),
}
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
diff --git a/addons/crm/crm_installer_view.xml b/addons/crm/crm_installer_view.xml
index 35ff5a0a7cc..14e882f2967 100644
--- a/addons/crm/crm_installer_view.xml
+++ b/addons/crm/crm_installer_view.xml
@@ -19,7 +19,7 @@
Enhance your core CRM Application with additional functionalities.
- 13
+ 8
@@ -37,6 +37,7 @@
+
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index 090664570e5..a07974f4fd0 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -170,7 +170,7 @@ class crm_lead(crm_case, osv.osv):
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
- 'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', method=True, type='char', size=64),
+ 'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64),
}
@@ -270,7 +270,6 @@ class crm_lead(crm_case, osv.osv):
data_obj = self.pool.get('ir.model.data')
value = {}
- view_id = False
for case in self.browse(cr, uid, ids, context=context):
context.update({'active_id': case.id})
diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py
index d752b111c02..4e329ddc6d4 100644
--- a/addons/crm/crm_meeting.py
+++ b/addons/crm/crm_meeting.py
@@ -20,7 +20,7 @@
##############################################################################
from base_calendar import base_calendar
-from crm import crm_case
+from crm import crm_base, crm_case
from osv import fields, osv
from tools.translate import _
import logging
@@ -36,13 +36,13 @@ class crm_phonecall(crm_case, osv.osv):
crm_phonecall()
-class crm_meeting(crm_case, osv.osv):
+class crm_meeting(crm_base, osv.osv):
""" CRM Meeting Cases """
_name = 'crm.meeting'
_description = "Meeting"
_order = "id desc"
- _inherit = ['mailgate.thread',"calendar.event"]
+ _inherit = "calendar.event"
_columns = {
# From crm.case
'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}),
@@ -125,7 +125,7 @@ class calendar_attendee(osv.osv):
return result
_columns = {
- 'categ_id': fields.function(_compute_data, method=True, \
+ 'categ_id': fields.function(_compute_data, \
string='Event Type', type="many2one", \
relation="crm.case.categ", multi='categ_id'),
}
diff --git a/addons/crm/crm_meeting_menu.xml b/addons/crm/crm_meeting_menu.xml
index 61ef9942464..aabd4e8592f 100644
--- a/addons/crm/crm_meeting_menu.xml
+++ b/addons/crm/crm_meeting_menu.xml
@@ -51,7 +51,7 @@
crm.meeting
calendar,tree,form,gantt
- {"search_default_user_id":uid, 'search_default_section_id': section_id}
+ {"search_default_user_id":uid, 'search_default_section_id': section_id, 'virtual_id' : True}
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.
diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml
index a2d66040fa9..9ece8cafaae 100644
--- a/addons/crm/crm_meeting_view.xml
+++ b/addons/crm/crm_meeting_view.xml
@@ -45,8 +45,7 @@
widget="selection" />
-
+
diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py
index 41af82ec8fc..ecae065beac 100644
--- a/addons/crm/crm_phonecall.py
+++ b/addons/crm/crm_phonecall.py
@@ -19,20 +19,19 @@
#
##############################################################################
-from crm import crm_case
+from crm import crm_base
from osv import fields, osv
from tools.translate import _
import crm
import time
from datetime import datetime
-class crm_phonecall(crm_case, osv.osv):
+class crm_phonecall(crm_base, osv.osv):
""" Phonecall Cases """
_name = "crm.phonecall"
_description = "Phonecall"
_order = "id desc"
- _inherit = ['mailgate.thread']
_columns = {
# From crm.case
'id': fields.integer('ID'),
@@ -96,6 +95,8 @@ class crm_phonecall(crm_case, osv.osv):
'active': 1,
}
+
+
# From crm.case
def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
diff --git a/addons/crm/i18n/zh_CN.po b/addons/crm/i18n/zh_CN.po
index da15c68eb6e..2b55be47a1e 100644
--- a/addons/crm/i18n/zh_CN.po
+++ b/addons/crm/i18n/zh_CN.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-04-11 11:33+0000\n"
-"Last-Translator: lky \n"
+"PO-Revision-Date: 2011-07-01 15:43+0000\n"
+"Last-Translator: hifly \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: 2011-04-29 05:00+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-07-02 05:06+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: crm
#: view:crm.lead.report:0
@@ -36,12 +36,12 @@ msgstr "需要服务"
#. module: crm
#: selection:crm.meeting,rrule_type:0
msgid "Monthly"
-msgstr "按月"
+msgstr "月度"
#. module: crm
#: view:crm.opportunity2phonecall:0
msgid "Schedule a PhoneCall"
-msgstr "安排一个电话访问"
+msgstr "安排一次电话访问"
#. module: crm
#: model:ir.model,name:crm.model_crm_case_stage
@@ -67,7 +67,7 @@ msgstr "显示为"
#: field:crm.meeting,day:0
#: selection:crm.meeting,select1:0
msgid "Date of month"
-msgstr "月的天数"
+msgstr "每月的指定日期"
#. module: crm
#: view:crm.lead:0
@@ -124,10 +124,10 @@ msgid "The code of the sales team must be unique !"
msgstr "销售团队编码必须唯一!"
#. module: crm
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:93
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:95
#, python-format
msgid "Lead '%s' has been converted to an opportunity."
-msgstr "线索'%s'已转化商机"
+msgstr "线索'%s'已转化为商机"
#. module: crm
#: code:addons/crm/crm_lead.py:228
@@ -141,8 +141,8 @@ msgid "No Repeat"
msgstr "不重复"
#. module: crm
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:133
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:258
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:135
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:260
#: code:addons/crm/wizard/crm_lead_to_partner.py:55
#: code:addons/crm/wizard/crm_phonecall_to_partner.py:52
#, python-format
@@ -152,7 +152,7 @@ msgstr "警告!"
#. module: crm
#: selection:crm.meeting,rrule_type:0
msgid "Yearly"
-msgstr "按年"
+msgstr "年度"
#. module: crm
#: field:crm.segmentation.line,name:0
@@ -172,7 +172,7 @@ msgstr "营销活动"
#. module: crm
#: selection:crm.lead2opportunity.partner,action:0
msgid "Do not create a partner"
-msgstr "不能创建这业务伙伴"
+msgstr "不能创建业务伙伴"
#. module: crm
#: view:crm.lead:0
@@ -184,7 +184,7 @@ msgstr "搜索商机"
#, python-format
msgid ""
"Opportunity must have Partner assigned before merging with other Opportunity."
-msgstr "必须要为商机选择一个业务伙伴才能进行商机合并."
+msgstr "必须为商机选择业务伙伴才能和其它商机合并."
#. module: crm
#: code:addons/crm/wizard/crm_merge_opportunities.py:46
@@ -536,9 +536,9 @@ msgstr "第一次与新的潜在客户接触"
#. module: crm
#: code:addons/crm/crm_lead.py:278
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:195
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:229
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:297
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:197
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:231
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:299
#: view:crm.lead2opportunity:0
#: view:crm.partner2opportunity:0
#: model:ir.actions.act_window,name:crm.action_crm_lead2opportunity
@@ -597,7 +597,7 @@ msgstr "销售FAQ"
#. module: crm
#: model:ir.model,name:crm.model_crm_send_mail_attachment
msgid "crm.send.mail.attachment"
-msgstr ""
+msgstr "crm.send.mail.attachment"
#. module: crm
#: selection:crm.lead.report,month:0
@@ -805,8 +805,8 @@ msgid "Statistics Dashboard"
msgstr "统计控制台"
#. module: crm
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:86
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:96
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:88
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:98
#: code:addons/crm/wizard/crm_partner_to_opportunity.py:101
#: code:addons/crm/wizard/crm_phonecall_to_opportunity.py:117
#: view:crm.lead:0
@@ -870,7 +870,7 @@ msgstr "事件类型"
#. module: crm
#: model:ir.model,name:crm.model_crm_installer
msgid "crm.installer"
-msgstr ""
+msgstr "crm.installer"
#. module: crm
#: field:crm.segmentation,exclusif:0
@@ -1099,7 +1099,7 @@ msgstr "订阅"
#. module: crm
#: code:addons/crm/crm_opportunity.py:208
-#: code:addons/crm/crm_phonecall.py:184
+#: code:addons/crm/crm_phonecall.py:185
#: code:addons/crm/wizard/crm_phonecall_to_meeting.py:55
#: code:addons/crm/wizard/crm_phonecall_to_meeting.py:137
#: view:crm.meeting:0
@@ -2610,7 +2610,7 @@ msgid "Meeting Type"
msgstr "会议类型"
#. module: crm
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:312
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:314
#, python-format
msgid "Merge with Existing Opportunity"
msgstr "合并现有的商机"
@@ -3128,8 +3128,8 @@ msgid "Schedule Call"
msgstr "计划的电话访问"
#. module: crm
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:133
-#: code:addons/crm/wizard/crm_lead_to_opportunity.py:258
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:135
+#: code:addons/crm/wizard/crm_lead_to_opportunity.py:260
#, python-format
msgid "Closed/Cancelled Leads Could not convert into Opportunity"
msgstr "已结束/已取消的线索不能转换为商机"
diff --git a/addons/crm/test/test_crm_meeting.yml b/addons/crm/test/test_crm_meeting.yml
index ae52a747bf2..9b89fff697b 100644
--- a/addons/crm/test/test_crm_meeting.yml
+++ b/addons/crm/test/test_crm_meeting.yml
@@ -57,7 +57,7 @@
!python {model: crm.meeting}: |
import time
from datetime import datetime, date, timedelta
- ids = self.search(cr, uid, [('date', '>=', time.strftime('%Y-%m-%d 00:00:00')), ('date', '<=', (datetime.now()+timedelta(31)).strftime('%Y-%m-%d 00:00:00')), ('name', '=', 'Regarding Presentation')] )
+ ids = self.search(cr, uid, [('date', '>=', time.strftime('%Y-%m-%d 00:00:00')), ('date', '<=', (datetime.now()+timedelta(31)).strftime('%Y-%m-%d 00:00:00')), ('name', '=', 'Regarding Presentation')], context={'virtual_id': True})
assert len(ids) == 10
- |
diff --git a/addons/crm/test/test_crm_recurrent_meeting_case2.yml b/addons/crm/test/test_crm_recurrent_meeting_case2.yml
new file mode 100644
index 00000000000..585c6af73ae
--- /dev/null
+++ b/addons/crm/test/test_crm_recurrent_meeting_case2.yml
@@ -0,0 +1,98 @@
+-
+ In order to test recurrent meetings in OpenERP, I create meetings with different recurrency using different test cases.
+-
+ I create a recurrent meeting with daily recurrency and fixed amount of time.
+-
+ !record {model: crm.meeting, id: crm_meeting_testmeeting0}:
+ count: 5
+ date: '2011-04-13 11:04:00'
+ date_deadline: '2011-04-13 12:04:00'
+ day: 0.0
+ duration: 1.0
+ name: Test Meeting
+ recurrency: true
+ recurrent_uid: 0.0
+ rrule_type: daily
+ sequence: 0.0
+-
+ I search for all the recurrent meetings.
+-
+ !python {model: crm.meeting}: |
+ meeting_ids = self.search(cr, uid, [('id', 'in', [ref('crm_meeting_testmeeting0')]),('date','>=','2011-03-13'), ('date_deadline', '<=', '2011-05-13')], context={'virtual_id': True})
+ assert len(meeting_ids) == 5, 'Recurrent daily meetings are not created !'
+-
+ Now I create a weekly meeting till a particular end date.
+-
+ !record {model: crm.meeting, id: crm_meeting_reviewcodewithprogrammer0}:
+ date: '2011-04-18 11:47:00'
+ date_deadline: '2011-04-18 12:47:00'
+ day: 0.0
+ duration: 1.0
+ end_date: '2011-04-30'
+ end_type: end_date
+ fr: true
+ mo: true
+ th: true
+ tu: true
+ we: true
+ name: Review code with programmer
+ recurrency: true
+ recurrent_uid: 0.0
+ rrule_type: weekly
+ sequence: 0.0
+-
+ I search for all the recurrent weekly meetings.
+-
+ !python {model: crm.meeting}: |
+ meeting_ids = self.search(cr, uid, [('id', 'in', [ref('crm_meeting_reviewcodewithprogrammer0')]),('date','>=','2011-03-13'), ('date_deadline', '<=', '2011-05-13')], context={'virtual_id': True})
+ assert len(meeting_ids) == 10, 'Recurrent weekly meetings are not created !'
+-
+ I want to schedule a meeting every month for Sprint review.
+-
+ !record {model: crm.meeting, id: crm_meeting_sprintreview0}:
+ count: 12
+ date: '2011-04-01 12:01:00'
+ date_deadline: '2011-04-01 13:01:00'
+ day: 1
+ duration: 1.0
+ name: Sprint Review
+ recurrency: true
+ recurrent_uid: 0.0
+ rrule_type: monthly
+ sequence: 0.0
+-
+ I search for all the recurrent monthly meetings.
+-
+ !python {model: crm.meeting}: |
+ meeting_ids = self.search(cr, uid, [('id', 'in', [ref('crm_meeting_sprintreview0')]),('date','>=','2011-03-01'), ('date_deadline', '<=', '2012-05-13')], context={'virtual_id': True})
+ assert len(meeting_ids) == 12, 'Recurrent monthly meetings are not created !'
+-
+ I change name of my monthly Sprint Review meeting.
+-
+ !python {model: crm.meeting}: |
+ from base_calendar import base_calendar
+ base_cal_id = base_calendar.real_id2base_calendar_id(ref('crm_meeting_sprintreview0'), '2011-09-01 13:01:00')
+ self.write(cr, uid, [base_cal_id], {'name': 'Sprint Review for google modules', 'edit_all': True})
+-
+ I check whether all the records are edited or not.
+-
+ !python {model: crm.meeting}: |
+ meeting_ids = self.search(cr, uid, [('id', 'in', [ref('crm_meeting_sprintreview0')]),('date','>=','2011-03-01'), ('date_deadline', '<=', '2012-05-13')], context={'virtual_id': True})
+ meetings = self.browse(cr, uid, meeting_ids, context)
+ for meeting in meetings:
+ assert meeting.name == 'Sprint Review for google modules', 'Name not changed for id: %s' %meeting.id
+-
+ I change description of my weekly meeting Review code with programmer.
+-
+ !python {model: crm.meeting}: |
+ from base_calendar import base_calendar
+ base_cal_id = base_calendar.real_id2base_calendar_id(ref('crm_meeting_reviewcodewithprogrammer0'), '2011-04-25 12:47:00')
+ self.write(cr, uid, [base_cal_id], {'description': 'Review code of the module: sync_google_calendar.'})
+-
+ I check whether the record is edited perfectly or not.
+-
+ !python {model: crm.meeting}: |
+ meeting_ids = self.search(cr, uid, [('recurrent_uid', '=', ref('crm_meeting_reviewcodewithprogrammer0')), ('recurrent_id','=','2011-04-25 12:47:00')], context)
+ assert meeting_ids, 'Meeting is not edited !'
+
+
\ No newline at end of file
diff --git a/addons/crm/wizard/crm_lead_to_partner.py b/addons/crm/wizard/crm_lead_to_partner.py
index 5dc7e489f26..790c6222de6 100644
--- a/addons/crm/wizard/crm_lead_to_partner.py
+++ b/addons/crm/wizard/crm_lead_to_partner.py
@@ -149,7 +149,6 @@ class crm_lead2partner(osv.osv_memory):
contact_obj = self.pool.get('res.partner.address')
partner_ids = []
partner_id = False
- contact_id = False
rec_ids = context and context.get('active_ids', [])
for data in self.browse(cr, uid, ids, context=context):
@@ -160,7 +159,7 @@ class crm_lead2partner(osv.osv_memory):
'user_id': lead.user_id.id,
'comment': lead.description,
})
- contact_id = contact_obj.create(cr, uid, {
+ contact_obj.create(cr, uid, {
'partner_id': partner_id,
'name': lead.contact_name,
'phone': lead.phone,
@@ -180,7 +179,6 @@ class crm_lead2partner(osv.osv_memory):
else:
if data.partner_id:
partner_id = data.partner_id.id
- contact_id = partner_obj.address_get(cr, uid, [partner_id])['default']
self.assign_partner(cr, uid, lead.id, partner_id)
partner_ids.append(partner_id)
return partner_ids
diff --git a/addons/crm/wizard/crm_merge_opportunities.py b/addons/crm/wizard/crm_merge_opportunities.py
index 713640034e1..57620f8c016 100644
--- a/addons/crm/wizard/crm_merge_opportunities.py
+++ b/addons/crm/wizard/crm_merge_opportunities.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
@@ -141,7 +140,7 @@ class crm_merge_opportunity(osv.osv_memory):
attach_ids = self.get_attachments(cr, uid, opp, context=context)
self.set_attachements_res_id(cr, uid, first_opportunity.id, attach_ids)
for history in opp.message_ids:
- new_history = message_obj.write(cr, uid, history.id, {'res_id': first_opportunity.id, 'name' : _("From %s : %s") % (opp.name, history.name) }, context=context)
+ message_obj.write(cr, uid, history.id, {'res_id': first_opportunity.id, 'name' : _("From %s : %s") % (opp.name, history.name) }, context=context)
#Notification about loss of information
details = []
@@ -184,8 +183,6 @@ class crm_merge_opportunity(osv.osv_memory):
# Get Opportunity views
- result = models_data._get_id(
- cr, uid, 'crm', 'view_crm_case_opportunities_filter')
opportunity_view_form = models_data._get_id(
cr, uid, 'crm', 'crm_case_form_view_oppor')
opportunity_view_tree = models_data._get_id(
@@ -229,7 +226,7 @@ class crm_merge_opportunity(osv.osv_memory):
This function gets default values
@param self: The object pointer
@param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
+ @param uid: the current users ID for security checks,
@param fields: List of fields for default value
@param context: A standard dictionary for contextual values
diff --git a/addons/crm/wizard/crm_opportunity_to_phonecall.py b/addons/crm/wizard/crm_opportunity_to_phonecall.py
index af95dd5554b..714376766f6 100644
--- a/addons/crm/wizard/crm_opportunity_to_phonecall.py
+++ b/addons/crm/wizard/crm_opportunity_to_phonecall.py
@@ -21,6 +21,8 @@
from osv import osv, fields
from tools.translate import _
+import pprint
+pp = pprint.PrettyPrinter(indent=4)
import time
@@ -121,23 +123,24 @@ class crm_opportunity2phonecall(osv.osv_memory):
for opp in opp_obj.browse(cr, uid, record_ids, context=context):
vals = {
'name' : opp.name,
- 'case_id' : opp.id ,
+ 'case_id' : opp.id,
'user_id' : this.user_id and this.user_id.id or False,
'categ_id' : this.categ_id.id,
'description' : opp.description or False,
'date' : this.date,
- 'section_id' : this.section_id.id or opp.section_id.id or False,
+ 'section_id' : this.section_id.id or False,
'partner_id': opp.partner_id and opp.partner_id.id or False,
'partner_address_id': opp.partner_address_id and opp.partner_address_id.id or False,
'partner_phone' : opp.phone or (opp.partner_address_id and opp.partner_address_id.phone or False),
'partner_mobile' : opp.partner_address_id and opp.partner_address_id.mobile or False,
'priority': opp.priority,
- 'opportunity_id': opp.id
+ 'opportunity_id': opp.id,
+ 'date_open': time.strftime('%Y-%m-%d %H:%M:%S')
}
+
new_case = phonecall_obj.create(cr, uid, vals, context=context)
- if this.action == 'schedule':
- phonecall_obj.case_open(cr, uid, [new_case])
- elif this.action == 'log':
+
+ if this.action == 'log':
phonecall_obj.case_close(cr, uid, [new_case])
value = {
@@ -149,7 +152,7 @@ class crm_opportunity2phonecall(osv.osv_memory):
'res_id' : new_case,
'views': [(id3, 'form'), (id2, 'tree'), (False, 'calendar')],
'type': 'ir.actions.act_window',
- 'search_view_id': res['res_id']
+ 'search_view_id': res['res_id'],
}
return value
diff --git a/addons/crm_caldav/crm_caldav_view.xml b/addons/crm_caldav/crm_caldav_view.xml
index b8b0ffdea03..a610095d6a6 100644
--- a/addons/crm_caldav/crm_caldav_view.xml
+++ b/addons/crm_caldav/crm_caldav_view.xml
@@ -5,7 +5,7 @@
Caldav Browse
ir.actions.act_window
user.preference
-
+
{'cal_name' : 'Meetings'}
form
form
diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml
index 348492cc308..38536289bb5 100644
--- a/addons/crm_helpdesk/crm_helpdesk_view.xml
+++ b/addons/crm_helpdesk/crm_helpdesk_view.xml
@@ -180,7 +180,7 @@
tree
+ colors="black:state=='open';blue:state=='pending';gray:state in ('cancel','done')">
diff --git a/addons/crm_helpdesk/i18n/fi.po b/addons/crm_helpdesk/i18n/fi.po
new file mode 100644
index 00000000000..82c5bfc5a41
--- /dev/null
+++ b/addons/crm_helpdesk/i18n/fi.po
@@ -0,0 +1,695 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-28 09:47+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk.report,delay_close:0
+msgid "Delay to Close"
+msgstr "Sulkemisen viive"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk.report,nbr:0
+msgid "# of Cases"
+msgstr "Tapausten määrä"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: view:crm.helpdesk.report:0
+msgid "Group By..."
+msgstr "Ryhmittely.."
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Today"
+msgstr "Tänään"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "March"
+msgstr "Maaliskuu"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,company_id:0
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,company_id:0
+msgid "Company"
+msgstr "Yritys"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,email_cc:0
+msgid "Watchers Emails"
+msgstr "Seuraajien Sähköpostit"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk,priority:0
+#: selection:crm.helpdesk.report,priority:0
+msgid "Highest"
+msgstr "Korkein"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,day:0
+msgid "Day"
+msgstr "Päivä"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Add Internal Note"
+msgstr "Lisää sisäinen huomautus"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Notes"
+msgstr "Huomautukset"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,message_ids:0
+msgid "Messages"
+msgstr "Viestit"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk,state:0
+#: selection:crm.helpdesk.report,state:0
+msgid "Cancelled"
+msgstr "Peruttu"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,partner_address_id:0
+msgid "Partner Contact"
+msgstr "Kumppanin Yhteystiedot"
+
+#. module: crm_helpdesk
+#: model:ir.actions.act_window,name:crm_helpdesk.action_report_crm_helpdesk
+#: model:ir.ui.menu,name:crm_helpdesk.menu_report_crm_helpdesks_tree
+msgid "Helpdesk Analysis"
+msgstr "Helpdeskin analyysi"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,date_closed:0
+msgid "Close Date"
+msgstr "Sulkemispäivä"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid " Month "
+msgstr " Kuukausi "
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,ref:0
+msgid "Reference"
+msgstr "Viite"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,date_action_next:0
+msgid "Next Action"
+msgstr "Seuraava Toimenpide"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Helpdesk Supports"
+msgstr "Helpdesk tukee"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Extra Info"
+msgstr "Lisätiedot"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: field:crm.helpdesk,partner_id:0
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,partner_id:0
+msgid "Partner"
+msgstr "Kumppani"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Estimates"
+msgstr "Arviot"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk.report,section_id:0
+msgid "Section"
+msgstr "Osa"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: field:crm.helpdesk,priority:0
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,priority:0
+msgid "Priority"
+msgstr "Prioriteetti"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Send New Email"
+msgstr "Lähetä uusi sähköposti"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "Won"
+msgstr "Voitettu"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk.report,delay_expected:0
+msgid "Overpassed Deadline"
+msgstr "Ylitetty aikaraja"
+
+#. module: crm_helpdesk
+#: model:ir.model,name:crm_helpdesk.model_crm_helpdesk_report
+msgid "Helpdesk report after Sales Services"
+msgstr "Helpdesk raportti jälkimarkkinointipalveluista"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,email_from:0
+msgid "Email"
+msgstr "Sähköposti"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,canal_id:0
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,canal_id:0
+msgid "Channel"
+msgstr "Kanava"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk,priority:0
+#: selection:crm.helpdesk.report,priority:0
+msgid "Lowest"
+msgstr "Alin"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "# Mails"
+msgstr "Sähköpostien määrä"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,create_date:0
+#: field:crm.helpdesk.report,create_date:0
+msgid "Creation Date"
+msgstr "Luontipäivämäärä"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Reset to Draft"
+msgstr "Palauta luonnokseksi"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: selection:crm.helpdesk,state:0
+#: selection:crm.helpdesk.report,state:0
+msgid "Pending"
+msgstr "Odottava"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: field:crm.helpdesk,date_deadline:0
+#: field:crm.helpdesk.report,date_deadline:0
+msgid "Deadline"
+msgstr "Määräaika"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "July"
+msgstr "Heinäkuu"
+
+#. module: crm_helpdesk
+#: model:ir.actions.act_window,name:crm_helpdesk.crm_helpdesk_categ_action
+msgid "Helpdesk Categories"
+msgstr "Helpdesk kategoriat"
+
+#. module: crm_helpdesk
+#: model:ir.ui.menu,name:crm_helpdesk.menu_crm_case_helpdesk-act
+msgid "Categories"
+msgstr "Kategoriat"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "History Information"
+msgstr "Historiatiedot"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Dates"
+msgstr "Päivämäärät"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid " Month-1 "
+msgstr " Kuukausi-1 "
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "#Helpdesk"
+msgstr ""
+
+#. module: crm_helpdesk
+#: help:crm.helpdesk,email_cc:0
+msgid ""
+"These email addresses will be added to the CC field of all inbound and "
+"outbound emails for this record before being sent. Separate multiple email "
+"addresses with a comma"
+msgstr ""
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "References"
+msgstr "Viitteet"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "September"
+msgstr "Syyskuu"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Communication"
+msgstr "Viestintä"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,month:0
+msgid "Month"
+msgstr "Kuukausi"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Escalate"
+msgstr "Kohota"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,write_date:0
+msgid "Update Date"
+msgstr "Päivityksen päiväys"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Query"
+msgstr "Kysely"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "Salesman"
+msgstr "Myyjä"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,ref2:0
+msgid "Reference 2"
+msgstr "Viittaus 2"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,categ_id:0
+#: field:crm.helpdesk.report,categ_id:0
+msgid "Category"
+msgstr "Kategoria"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid " Year "
+msgstr " Vuosi "
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Helpdesk Support"
+msgstr "Helpdeskin tuki"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,planned_cost:0
+#: field:crm.helpdesk.report,planned_cost:0
+msgid "Planned Costs"
+msgstr "Suunnitellut kulut"
+
+#. module: crm_helpdesk
+#: model:ir.module.module,description:crm_helpdesk.module_meta_information
+msgid "Helpdesk Management"
+msgstr "Helpdeskin hallinta"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Search Helpdesk"
+msgstr "Hae helpdeskiä"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk,state:0
+#: selection:crm.helpdesk.report,state:0
+msgid "Draft"
+msgstr "Luonnos"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk,priority:0
+#: selection:crm.helpdesk.report,priority:0
+msgid "Low"
+msgstr "Matala"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,date_closed:0
+#: selection:crm.helpdesk,state:0
+#: selection:crm.helpdesk.report,state:0
+msgid "Closed"
+msgstr "Suljettu"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "7 Days"
+msgstr "7 päivää"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Communication & History"
+msgstr "Kommunikaatio ja historia"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "August"
+msgstr "Elokuu"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk,priority:0
+#: selection:crm.helpdesk.report,priority:0
+msgid "Normal"
+msgstr "Tavallinen"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Global CC"
+msgstr ""
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "June"
+msgstr "Kesäkuu"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,planned_revenue:0
+msgid "Planned Revenue"
+msgstr "Suunniteltu liikevaihto"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk.report,user_id:0
+msgid "User"
+msgstr "Käyttäjä"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,active:0
+msgid "Active"
+msgstr "Aktiivinen"
+
+#. module: crm_helpdesk
+#: model:ir.module.module,shortdesc:crm_helpdesk.module_meta_information
+msgid "CRM Helpdesk"
+msgstr ""
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "Extended Filters..."
+msgstr "Laajennetut Suotimet..."
+
+#. module: crm_helpdesk
+#: model:ir.actions.act_window,name:crm_helpdesk.crm_case_helpdesk_act111
+msgid "Helpdesk Requests"
+msgstr "Helpdesk pyynnöt"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "Search"
+msgstr "Etsi"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "October"
+msgstr "Lokakuu"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "January"
+msgstr "Tammikuu"
+
+#. module: crm_helpdesk
+#: help:crm.helpdesk,email_from:0
+msgid "These people will receive email."
+msgstr "Nämä henkilöt vastaanottavat sähköpostin."
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: field:crm.helpdesk,date:0
+msgid "Date"
+msgstr "Päiväys"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "November"
+msgstr "Marraskuu"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "History"
+msgstr "Historia"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Attachments"
+msgstr "Liitteet"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Misc"
+msgstr "Sekalaiset"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: field:crm.helpdesk,state:0
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,state:0
+msgid "State"
+msgstr "Tila"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "General"
+msgstr "Yleinen"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Send Reminder"
+msgstr "Lähetä muistutus"
+
+#. module: crm_helpdesk
+#: help:crm.helpdesk,section_id:0
+msgid ""
+"Sales team to which Case belongs to. Define "
+"Responsible user and Email account for mail gateway."
+msgstr ""
+"Myyntitiili mille tapaus kuuluu. Määrittele vastuuhenkilö ja "
+"sähköpostiosoite sähköpostin välityspalvelimelle"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Done"
+msgstr "Valmis"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "December"
+msgstr "Joulukuu"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Cancel"
+msgstr "Peruuta"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Close"
+msgstr "Sulje"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: selection:crm.helpdesk,state:0
+#: selection:crm.helpdesk.report,state:0
+msgid "Open"
+msgstr "Avaa"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Helpdesk Support Tree"
+msgstr "Helpdeskin tukipuu"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Categorization"
+msgstr "Kategorisointi"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+#: model:ir.model,name:crm_helpdesk.model_crm_helpdesk
+#: model:ir.ui.menu,name:crm_helpdesk.menu_config_helpdesk
+msgid "Helpdesk"
+msgstr "Helpdesk"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: field:crm.helpdesk,user_id:0
+msgid "Responsible"
+msgstr "Vastuuhenkilö"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "Current"
+msgstr "Nykyinen"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Details"
+msgstr "Yksityiskohdat"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+msgid "Reply"
+msgstr "Vastaa"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,description:0
+msgid "Description"
+msgstr "Kuvaus"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "May"
+msgstr "Toukokuu"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,probability:0
+msgid "Probability (%)"
+msgstr "Todennäköisyys (%)"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk.report,email:0
+msgid "# Emails"
+msgstr "Sähköpostien määrä"
+
+#. module: crm_helpdesk
+#: model:ir.actions.act_window,help:crm_helpdesk.action_report_crm_helpdesk
+msgid ""
+"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."
+msgstr ""
+
+#. module: crm_helpdesk
+#: help:crm.helpdesk,canal_id:0
+msgid ""
+"The channels represent the different communication modes available with the "
+"customer."
+msgstr ""
+"Kanavat kuvaavat erilaisia kommunikaatiomuotoja joiden kautta voidaan "
+"viestiä asiakkaan kanssa."
+
+#. module: crm_helpdesk
+#: help:crm.helpdesk,state:0
+msgid ""
+"The state is set to 'Draft', when a case is created. "
+" \n"
+"If the case is in progress the state is set to 'Open'. "
+" \n"
+"When the case is over, the state is set to 'Done'. "
+" \n"
+"If the case needs to be reviewed then the state is set to 'Pending'."
+msgstr ""
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "February"
+msgstr "Helmikuu"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,name:0
+msgid "Name"
+msgstr "Nimi"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "Lost"
+msgstr "Hävitty"
+
+#. module: crm_helpdesk
+#: model:ir.ui.menu,name:crm_helpdesk.menu_help_support_main
+msgid "Helpdesk and Support"
+msgstr "Helpdesk ja tuki"
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk.report,month:0
+msgid "April"
+msgstr "Huhtikuu"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+msgid "My Case(s)"
+msgstr "Omat tapaukset"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,id:0
+msgid "ID"
+msgstr ""
+
+#. module: crm_helpdesk
+#: model:ir.actions.act_window,help:crm_helpdesk.crm_helpdesk_categ_action
+msgid ""
+"Create and manage helpdesk categories to better manage and classify your "
+"support requests."
+msgstr ""
+
+#. module: crm_helpdesk
+#: selection:crm.helpdesk,priority:0
+#: selection:crm.helpdesk.report,priority:0
+msgid "High"
+msgstr "Korkea"
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk:0
+#: field:crm.helpdesk,section_id:0
+#: view:crm.helpdesk.report:0
+msgid "Sales Team"
+msgstr "Myyntitiimi"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,date_action_last:0
+msgid "Last Action"
+msgstr "Viimeisin tapahtuma"
+
+#. module: crm_helpdesk
+#: model:ir.actions.act_window,help:crm_helpdesk.crm_case_helpdesk_act111
+msgid ""
+"Helpdesk and Support allow you to track your interventions. Select a "
+"customer, add notes and categorize interventions with partners if necessary. "
+"You can also assign a priority level. Use the OpenERP Issues system to "
+"manage your support activities. Issues can be connected to the email "
+"gateway: new emails may create issues, each of them automatically gets the "
+"history of the conversation with the customer."
+msgstr ""
+
+#. module: crm_helpdesk
+#: view:crm.helpdesk.report:0
+#: field:crm.helpdesk.report,name:0
+msgid "Year"
+msgstr "Vuosi"
+
+#. module: crm_helpdesk
+#: field:crm.helpdesk,duration:0
+msgid "Duration"
+msgstr "Kesto"
diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
index f531165e942..544dbd1ee7b 100644
--- a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
+++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
@@ -20,11 +20,9 @@
#
##############################################################################
-import base64
import time
import re
from osv import osv, fields
-import tools
from tools.translate import _
class crm_lead_forward_to_partner(osv.osv_memory):
diff --git a/addons/delivery/delivery.py b/addons/delivery/delivery.py
index aceee36e0a2..7ad3f7fff5f 100644
--- a/addons/delivery/delivery.py
+++ b/addons/delivery/delivery.py
@@ -63,7 +63,7 @@ class delivery_carrier(osv.osv):
'partner_id': fields.many2one('res.partner', 'Carrier Partner', required=True),
'product_id': fields.many2one('product.product', 'Delivery Product', required=True),
'grids_id': fields.one2many('delivery.grid', 'carrier_id', 'Delivery Grids'),
- 'price' : fields.function(get_price, method=True,string='Price'),
+ 'price' : fields.function(get_price,string='Price'),
'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the delivery carrier without removing it.")
}
_defaults = {
diff --git a/addons/delivery/stock.py b/addons/delivery/stock.py
index d1ffb7ba968..05074268220 100644
--- a/addons/delivery/stock.py
+++ b/addons/delivery/stock.py
@@ -54,12 +54,12 @@ class stock_picking(osv.osv):
_columns = {
'carrier_id':fields.many2one("delivery.carrier","Carrier"),
'volume': fields.float('Volume'),
- 'weight': fields.function(_cal_weight, method=True, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_weight',
+ 'weight': fields.function(_cal_weight, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_weight',
store={
'stock.picking': (lambda self, cr, uid, ids, c={}: ids, ['move_lines'], 20),
'stock.move': (_get_picking_line, ['product_id','product_qty','product_uom','product_uos_qty'], 20),
}),
- 'weight_net': fields.function(_cal_weight, method=True, type='float', string='Net Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_weight',
+ 'weight_net': fields.function(_cal_weight, type='float', string='Net Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_weight',
store={
'stock.picking': (lambda self, cr, uid, ids, c={}: ids, ['move_lines'], 20),
'stock.move': (_get_picking_line, ['product_id','product_qty','product_uom','product_uos_qty'], 20),
@@ -158,11 +158,11 @@ class stock_move(osv.osv):
return res
_columns = {
- 'weight': fields.function(_cal_move_weight, method=True, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_move_weight',
+ 'weight': fields.function(_cal_move_weight, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_move_weight',
store={
'stock.move': (lambda self, cr, uid, ids, c=None: ids, ['product_id', 'product_qty', 'product_uom'], 20),
}),
- 'weight_net': fields.function(_cal_move_weight, method=True, type='float', string='Net weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_move_weight',
+ 'weight_net': fields.function(_cal_move_weight, type='float', string='Net weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_move_weight',
store={
'stock.move': (lambda self, cr, uid, ids, c=None: ids, ['product_id', 'product_qty', 'product_uom'], 20),
}),
diff --git a/addons/document/directory_report.py b/addons/document/directory_report.py
index 1665a7abf68..2726fcd5462 100644
--- a/addons/document/directory_report.py
+++ b/addons/document/directory_report.py
@@ -56,7 +56,7 @@ class ir_action_report_xml(osv.osv):
return [('id','in',report_id)]
_columns={
- 'model_id' : fields.function(_model_get, fnct_search=_model_search, method=True, string='Model Id'),
+ 'model_id' : fields.function(_model_get, fnct_search=_model_search, string='Model Id'),
}
ir_action_report_xml()
diff --git a/addons/document/document.py b/addons/document/document.py
index 90f57438ce8..69e123b87eb 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -117,7 +117,7 @@ class document_file(osv.osv):
# If ir.attachment contained any data before document is installed, preserve
# the data, don't drop the column!
'db_datas': fields.binary('Data', oldname='datas'),
- 'datas': fields.function(_data_get, method=True, fnct_inv=_data_set, string='File Content', type="binary", nodrop=True),
+ 'datas': fields.function(_data_get, fnct_inv=_data_set, string='File Content', type="binary", nodrop=True),
# Fields of document:
'user_id': fields.many2one('res.users', 'Owner', select=1),
diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py
index 7580a8831cf..b8ce97a7017 100644
--- a/addons/document_ftp/ftpserver/abstracted_fs.py
+++ b/addons/document_ftp/ftpserver/abstracted_fs.py
@@ -68,7 +68,7 @@ class abstracted_fs(object):
db, cr = None, None
try:
try:
- db = pooler.get_db_only(db_name)
+ db = pooler.get_db(db_name)
cr = db.cursor()
cr.execute("SELECT 1 FROM pg_class WHERE relkind = 'r' AND relname = 'ir_module_module'")
if not cr.fetchone():
diff --git a/addons/document_ftp/i18n/fi.po b/addons/document_ftp/i18n/fi.po
new file mode 100644
index 00000000000..7dd3b90d649
--- /dev/null
+++ b/addons/document_ftp/i18n/fi.po
@@ -0,0 +1,138 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-27 06:20+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: document_ftp
+#: model:ir.model,name:document_ftp.model_document_ftp_configuration
+msgid "Auto Directory Configuration"
+msgstr "Automaattinen hakemistojen konfigurointi"
+
+#. module: document_ftp
+#: view:document.ftp.configuration:0
+msgid ""
+"Indicate the network address on which your OpenERP server should be "
+"reachable for end-users. This depends on your network topology and "
+"configuration, and will only affect the links displayed to the users. The "
+"format is HOST:PORT and the default host (localhost) is only suitable for "
+"access from the server machine itself.."
+msgstr ""
+
+#. module: document_ftp
+#: field:document.ftp.configuration,progress:0
+msgid "Configuration Progress"
+msgstr "Konfiguraation eteneminen"
+
+#. module: document_ftp
+#: model:ir.actions.url,name:document_ftp.action_document_browse
+msgid "Browse Files"
+msgstr "Selaa tiedostoja"
+
+#. module: document_ftp
+#: field:document.ftp.configuration,config_logo:0
+msgid "Image"
+msgstr "Kuva"
+
+#. module: document_ftp
+#: field:document.ftp.configuration,host:0
+msgid "Address"
+msgstr "Osoite"
+
+#. module: document_ftp
+#: field:document.ftp.browse,url:0
+msgid "FTP Server"
+msgstr "FTP-palvelin"
+
+#. module: document_ftp
+#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory
+msgid "FTP Server Configuration"
+msgstr "FTP palvelimen konfiguraatio"
+
+#. module: document_ftp
+#: model:ir.module.module,description:document_ftp.module_meta_information
+msgid ""
+"This is a support FTP Interface with document management system.\n"
+" With this module you would not only be able to access documents through "
+"OpenERP\n"
+" but you would also be able to connect with them through the file system "
+"using the\n"
+" FTP client.\n"
+msgstr ""
+
+#. module: document_ftp
+#: view:document.ftp.browse:0
+msgid "_Browse"
+msgstr "Selaa"
+
+#. module: document_ftp
+#: help:document.ftp.configuration,host:0
+msgid ""
+"Server address or IP and port to which users should connect to for DMS access"
+msgstr ""
+"Palvelimen osoite tai IP ja portti mihin käyttäjien tulisi ottaa yhteyttä "
+"DMS:n käyttöä varten"
+
+#. module: document_ftp
+#: model:ir.ui.menu,name:document_ftp.menu_document_browse
+msgid "Shared Repository (FTP)"
+msgstr "Jaettu tietolähde (FTP)"
+
+#. module: document_ftp
+#: view:document.ftp.browse:0
+msgid "_Cancel"
+msgstr "_Peruuta"
+
+#. module: document_ftp
+#: view:document.ftp.configuration:0
+msgid "Configure FTP Server"
+msgstr "Konfiguroi FTP palvelin"
+
+#. module: document_ftp
+#: model:ir.module.module,shortdesc:document_ftp.module_meta_information
+msgid "Integrated FTP Server with Document Management System"
+msgstr ""
+"Integroitu FTP palvelin dokumenttienhallintajärjestelmällä varustettuna"
+
+#. module: document_ftp
+#: view:document.ftp.configuration:0
+msgid "title"
+msgstr "otsikko"
+
+#. module: document_ftp
+#: model:ir.model,name:document_ftp.model_document_ftp_browse
+msgid "Document FTP Browse"
+msgstr "Dokumenttien FTP selailu"
+
+#. module: document_ftp
+#: view:document.ftp.configuration:0
+msgid "Knowledge Application Configuration"
+msgstr "Tiedonhallintaohjelmiston konfiguraatio"
+
+#. module: document_ftp
+#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
+msgid "Document Browse"
+msgstr "Dokumenttien selailu"
+
+#. module: document_ftp
+#: view:document.ftp.browse:0
+msgid "Browse Document"
+msgstr "Selaa dokumenttia"
+
+#. module: document_ftp
+#: view:document.ftp.configuration:0
+msgid "res_config_contents"
+msgstr ""
diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py
index 8c606e4cca0..5e01bf6a66c 100644
--- a/addons/document_webdav/dav_fs.py
+++ b/addons/document_webdav/dav_fs.py
@@ -361,7 +361,7 @@ class openerp_dav_handler(dav_interface):
for db_name in result:
cr = None
try:
- db = pooler.get_db_only(db_name)
+ db = pooler.get_db(db_name)
cr = db.cursor()
cr.execute("SELECT id FROM ir_module_module WHERE name = 'document' AND state='installed' ")
res=cr.fetchone()
diff --git a/addons/email_template/i18n/tr.po b/addons/email_template/i18n/tr.po
index b76641ce7e0..2862a96cba3 100644
--- a/addons/email_template/i18n/tr.po
+++ b/addons/email_template/i18n/tr.po
@@ -8,30 +8,30 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-01-13 23:13+0000\n"
-"Last-Translator: Arif Aydogmus \n"
+"PO-Revision-Date: 2011-06-27 18:17+0000\n"
+"Last-Translator: Ayhan KIZILTAN \n"
"Language-Team: Turkish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-04-29 05:46+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: email_template
#: help:email_template.account,auto_delete:0
msgid "Permanently delete emails after sending"
-msgstr "Gönderdikten sonra e-postayı sil."
+msgstr "Gönderdikten sonra epostaları kalıcı olarak sil."
#. module: email_template
#: view:email_template.account:0
msgid "Email Account Configuration"
-msgstr "E-posta Hesapları Yapılandırma"
+msgstr "Eposta Hesapları Yapılandırma"
#. module: email_template
#: code:addons/email_template/wizard/email_template_send_wizard.py:195
#, python-format
msgid "Emails for multiple items saved in outbox."
-msgstr "Çoklu öğeler için e-postalar giden kutusuna kaydedildi."
+msgstr "Çoklu öğeler için epostalar giden kutusuna kaydedildi."
#. module: email_template
#: code:addons/email_template/wizard/email_template_send_wizard.py:59
@@ -54,22 +54,22 @@ msgstr "Kişisel E-postalar"
#. module: email_template
#: field:email.template,file_name:0
msgid "Report Filename"
-msgstr "Rapor dosyasının adı"
+msgstr "Rapor Dosyasının adı"
#. module: email_template
#: view:email.template:0
msgid "Email Content "
-msgstr "E-posta içeriği "
+msgstr "Eposta İçeriği "
#. module: email_template
#: view:email_template.send.wizard:0
msgid "Send mail Wizard"
-msgstr "E-Posta Gönderim Sihirbazı"
+msgstr "Posta Gönderim Sihirbazı"
#. module: email_template
#: selection:email_template.mailbox,mail_type:0
msgid "Plain Text & HTML with no attachments"
-msgstr "Salt Metin ve Eklentisiz HTML"
+msgstr "Düz Metin ve Eklentisiz HTML"
#. module: email_template
#: help:email.template,model_object_field:0
@@ -81,7 +81,7 @@ msgid ""
msgstr ""
"Kullanmak istediğiniz modelden alanı seçiniz.\n"
"Eğer ilintili bir alansa içiçe değerleri aşağıdaki kutudan seçebilirsiniz.\n"
-"(Not: Eğer herhangi bir değer yoksa mutlaka doğru modeli seçiniz)"
+"(Not: Eğer herhangi bir değer yoksa doğru modeli seçtiğinizden emin olun)"
#. module: email_template
#: field:email_template.preview,body_html:0
@@ -89,13 +89,13 @@ msgstr ""
#: field:email_template.send.wizard,body_html:0
#: field:email_template.send.wizard,body_text:0
msgid "Body"
-msgstr "İleti metni"
+msgstr "Gövde"
#. module: email_template
#: code:addons/email_template/email_template.py:304
#, python-format
msgid "Deletion of Record failed"
-msgstr "Kayıt silinemedi"
+msgstr "Kayıt Silinemedi"
#. module: email_template
#: help:email_template.account,company:0
@@ -103,8 +103,8 @@ msgid ""
"Select if this mail account does not belong to specific user but to the "
"organization as a whole. eg: info@companydomain.com"
msgstr ""
-"Bu e-posta hesabı belirli bir kullanıcıya ait değilde birçok kişinin üyesi "
-"olduğu bir grup hesabı ise seçin. Ör: info@companydomain.com"
+"Bu posta hesabı belirli bir kullanıcıya ait değilde bir kurumun geneline "
+"aitse seçin. Ör: info@companydomain.com"
#. module: email_template
#: view:email_template.send.wizard:0
@@ -114,19 +114,19 @@ msgstr "Şimdi gönder"
#. module: email_template
#: selection:email_template.mailbox,state:0
msgid "Not Applicable"
-msgstr "Uygun Değil"
+msgstr "Uygulanabilir Değil"
#. module: email_template
#: view:email_template.account:0
#: model:ir.ui.menu,name:email_template.menu_email_account_all_tools
#: model:ir.ui.menu,name:email_template.menu_email_template_account_all
msgid "Email Accounts"
-msgstr "E-posta Hesapları"
+msgstr "Eposta Hesapları"
#. module: email_template
#: view:email_template.send.wizard:0
msgid "Send all mails"
-msgstr "Tüm E-Postaları gönder"
+msgstr "Tüm postaları gönder"
#. module: email_template
#: help:email_template.account,smtpuname:0
@@ -134,13 +134,13 @@ msgid ""
"Specify the username if your SMTP server requires authentication, otherwise "
"leave it empty."
msgstr ""
-"SMTP sunucunuz kimlik doğrulama gerektiriyorsa kullanıcı adınızı yazınız "
+"SMTP sunucunuz kimlik doğrulama gerektiriyorsa kullanıcı adınızı yazınız, "
"gerektirmiyorsa boş bırakınız."
#. module: email_template
#: field:email_template.mailbox,server_ref:0
msgid "Server Reference of mail"
-msgstr "E-Posta Sunucu Referansı"
+msgstr "Posta Sunucu Referansı"
#. module: email_template
#: view:email_template.account:0
@@ -154,8 +154,8 @@ msgid ""
"Carbon Copy address(es), comma-separated. Placeholders can be used here. "
"e.g. ${object.email_cc}"
msgstr ""
-"Kopya alıcıları virgülle ayrılır. Yertutucular kullanılabilir. Ör: "
-"${object.email_cc}"
+"Karbon Kopya adres(ler) virgülle ayrılı. Yertutucular burada kullanılabilir. "
+"Örn. ${object.email_cc}"
#. module: email_template
#: view:email.template:0
@@ -183,13 +183,13 @@ msgstr ""
#. module: email_template
#: field:email.template,from_account:0
msgid "Email Account"
-msgstr "E-Posta Hesabı"
+msgstr "Eposta Hesabı"
#. module: email_template
#: code:addons/email_template/wizard/email_template_send_wizard.py:201
#, python-format
msgid "Email sending failed for one or more objects."
-msgstr "Bir ya da daha çok nesne için e-posta gönderimi başarısız."
+msgstr "Bir ya da daha çok nesne için eposta gönderimi başarısız."
#. module: email_template
#: view:email_template.send.wizard:0
@@ -197,7 +197,7 @@ msgid ""
"Add here all attachments of the current document you want to include in the "
"Email."
msgstr ""
-"E-postada yer almasını istediğiniz dökümana ait tüm ekleri buraya ekleyiniz."
+"Epostada yer almasını istediğiniz dökümana ait tüm ekleri buraya ekleyiniz."
#. module: email_template
#: help:email.template,lang:0
@@ -205,7 +205,7 @@ msgid ""
"The default language for the email. Placeholders can be used here. eg. "
"${object.partner_id.lang}"
msgstr ""
-"E-Posta için öntanımlı dil. Burada yer tutucular kullanılabilir. Örneğin, "
+"Eposta için varsayılan dil. Burada yertutucular kullanılabilir. Örneğin, "
"${object.partner_id.lang}"
#. module: email_template
@@ -214,7 +214,7 @@ msgid ""
"When you choose relationship fields this field will specify the sub value "
"you can use."
msgstr ""
-"İlintili alanlar seçtiğinizde bu alan kullanabileceğiniz alt değeri "
+"İlişkili alanları seçtiğinizde bu alan kullanabileceğiniz alt değeri "
"belirtecektir"
#. module: email_template
@@ -951,7 +951,7 @@ msgid "Close"
msgstr "Kapat"
#. module: email_template
-#: code:addons/email_template/email_template_mailbox.py:49
+#: code:addons/email_template/email_template_mailbox.py:48
#, python-format
msgid "Error sending mail: %s"
msgstr "İleti gönderiminde hata: %s"
@@ -1043,7 +1043,7 @@ msgid "Email Mailbox"
msgstr "E-Posta Kutusu"
#. module: email_template
-#: code:addons/email_template/email_template_mailbox.py:116
+#: code:addons/email_template/email_template_mailbox.py:104
#, python-format
msgid ""
"Sending of Mail %s failed. Probable Reason:Could not login to server\n"
@@ -1158,7 +1158,9 @@ msgstr ""
#. module: email_template
#: view:email_template.mailbox:0
+#: model:ir.actions.act_window,name:email_template.action_email_template_mailbox
#: model:ir.ui.menu,name:email_template.menu_email_template_mails_tools
+#: model:ir.ui.menu,name:email_template.menu_email_template_personal_mails
msgid "Emails"
msgstr "E-postalar"
@@ -1213,6 +1215,10 @@ msgid ""
"emails.\n"
" "
msgstr ""
+"\n"
+" Eposta Şablonu, temel olarak epostaların gönderimi için Power Epostanın "
+"özüdür.\n"
+" "
#. module: email_template
#: view:email_template.send.wizard:0
diff --git a/addons/event/event.py b/addons/event/event.py
index 4d392689bba..0fc28c7c193 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -207,9 +207,9 @@ class event_event(osv.osv):
'type': fields.many2one('event.type', 'Type', help="Type of Event like Seminar, Exhibition, Conference, Training.", readonly=False, states={'done': [('readonly', True)]}),
'register_max': fields.integer('Maximum Registrations', help="Provide Maximum Number of Registrations", readonly=True, states={'draft': [('readonly', False)]}),
'register_min': fields.integer('Minimum Registrations', help="Provide Minimum Number of Registrations", readonly=True, states={'draft': [('readonly', False)]}),
- 'register_current': fields.function(_get_register, method=True, string='Confirmed Registrations', multi='register_current',
+ 'register_current': fields.function(_get_register, string='Confirmed Registrations', multi='register_current',
help="Total of Open and Done Registrations"),
- 'register_prospect': fields.function(_get_register, method=True, string='Unconfirmed Registrations', multi='register_prospect',
+ 'register_prospect': fields.function(_get_register, string='Unconfirmed Registrations', multi='register_prospect',
help="Total of Prospect Registrations"),
'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}),
'date_begin': fields.datetime('Beginning date', required=True, help="Beginning Date of Event", readonly=True, states={'draft': [('readonly', False)]}),
@@ -301,7 +301,7 @@ class event_registration(osv.osv):
"partner_invoice_id": fields.many2one('res.partner', 'Partner Invoiced', readonly=True, states={'draft': [('readonly', False)]}),
"contact_id": fields.many2one('res.partner.contact', 'Partner Contact', readonly=False, states={'done': [('readonly', True)]}), #TODO: filter only the contacts that have a function into the selected partner_id
"unit_price": fields.float('Unit Price', required=True, digits_compute=dp.get_precision('Sale Price'), readonly=True, states={'draft': [('readonly', False)]}),
- 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute=dp.get_precision('Sale Price'), store=True),
+ 'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute=dp.get_precision('Sale Price'), store=True),
"badge_ids": fields.one2many('event.registration.badge', 'registration_id', 'Badges', readonly=False, states={'done': [('readonly', True)]}),
"event_product": fields.char("Invoice Name", size=128, readonly=True, states={'draft': [('readonly', False)]}),
"tobe_invoiced": fields.boolean("To be Invoiced", readonly=True, states={'draft': [('readonly', False)]}),
diff --git a/addons/event_project/i18n/fi.po b/addons/event_project/i18n/fi.po
new file mode 100644
index 00000000000..0e94e838766
--- /dev/null
+++ b/addons/event_project/i18n/fi.po
@@ -0,0 +1,122 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-29 07:23+0000\n"
+"Last-Translator: Jussi Mikkola \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-30 04:34+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: event_project
+#: model:ir.model,name:event_project.model_event_project
+msgid "Event Project"
+msgstr "Tapahtumaprojekti"
+
+#. module: event_project
+#: field:event.project,date:0
+msgid "Date End"
+msgstr "Loppupäiväys"
+
+#. module: event_project
+#: view:event.project:0
+msgid "Ok"
+msgstr "OK"
+
+#. module: event_project
+#: model:ir.module.module,description:event_project.module_meta_information
+msgid ""
+"Organization and management of events.\n"
+"\n"
+" This module allows you to create retro planning for managing your "
+"events.\n"
+msgstr ""
+
+#. module: event_project
+#: help:event.project,project_id:0
+msgid ""
+"This is Template Project. Project of event is a duplicate of this Template. "
+"After click on 'Create Retro-planning', New Project will be duplicated from "
+"this template project."
+msgstr ""
+
+#. module: event_project
+#: view:event.project:0
+#: model:ir.actions.act_window,name:event_project.action_event_project
+msgid "Retro-Planning"
+msgstr "Retro suunnittelu"
+
+#. module: event_project
+#: constraint:event.event:0
+msgid "Error ! Closing Date cannot be set before Beginning Date."
+msgstr "Virhe ! Päättymispäivä ei voi olla aikaisempi kuin alkupäivä"
+
+#. module: event_project
+#: field:event.event,project_id:0
+msgid "Project"
+msgstr "Projekti"
+
+#. module: event_project
+#: view:event.event:0
+#: model:ir.actions.act_window,name:event_project.act_event_task
+msgid "Tasks"
+msgstr "Tehtävät"
+
+#. module: event_project
+#: view:event.event:0
+msgid "All tasks"
+msgstr "Kaikki tehtävät"
+
+#. module: event_project
+#: model:ir.module.module,shortdesc:event_project.module_meta_information
+msgid "Event Project - Create Retro-Planning to manage your Events"
+msgstr "Tapahtumaprojekti - luo retro suunitelma tapahtumien hallintaan"
+
+#. module: event_project
+#: field:event.project,project_id:0
+msgid "Template of Project"
+msgstr "Projektin mallipohja"
+
+#. module: event_project
+#: constraint:event.event:0
+msgid "Error ! You cannot create recursive event."
+msgstr "Virhe ! et voi luoda rekursiivisia tapahtumia."
+
+#. module: event_project
+#: field:event.event,task_ids:0
+msgid "Project tasks"
+msgstr "Projektin tehtävät"
+
+#. module: event_project
+#: view:event.project:0
+msgid "Close"
+msgstr "Sulje"
+
+#. module: event_project
+#: field:event.project,date_start:0
+msgid "Date Start"
+msgstr "Aloituspäivämäärä"
+
+#. module: event_project
+#: view:event.event:0
+msgid "Create Retro-Planning"
+msgstr "Luo retrosuunnitelma"
+
+#. module: event_project
+#: model:ir.model,name:event_project.model_event_event
+msgid "Event"
+msgstr "Tapahtuma"
+
+#. module: event_project
+#: view:event.event:0
+msgid "Tasks management"
+msgstr "Tehtävienhallinta"
diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py
index 41f84cfdedd..386b48f1546 100644
--- a/addons/fetchmail/fetchmail.py
+++ b/addons/fetchmail/fetchmail.py
@@ -116,7 +116,7 @@ class email_server(osv.osv):
if context is None:
context = {}
for server in self.browse(cr, uid, ids, context=context):
- logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail start checking for new emails on %s' % (server.name))
+ logger.notifyChannel(server.type, netsvc.LOG_INFO, 'fetchmail start checking for new emails on %s' % (server.name))
context.update({'server_id': server.id, 'server_type': server.type})
try:
if server.type == 'imap':
@@ -199,7 +199,7 @@ class email_server(osv.osv):
pop_server.quit()
- logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail fetch %s email(s) from %s' % (numMsgs, server.name))
+ logger.notifyChannel(server.type, netsvc.LOG_INFO, 'fetchmail fetch %s email(s) from %s' % (numMsgs, server.name))
except Exception, e:
logger.notifyChannel(server.type, netsvc.LOG_WARNING, '%s' % (tools.ustr(e)))
diff --git a/addons/google_base_account/__init__.py b/addons/google_base_account/__init__.py
new file mode 100644
index 00000000000..e1a476431af
--- /dev/null
+++ b/addons/google_base_account/__init__.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import google_base_account
+import wizard
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/google_base_account/__openerp__.py b/addons/google_base_account/__openerp__.py
new file mode 100644
index 00000000000..409ca205c74
--- /dev/null
+++ b/addons/google_base_account/__openerp__.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+
+{
+ 'name': 'Google user',
+ 'version': '1.0',
+ 'category': 'Generic Modules/Others',
+ 'description': """The module adds google user in res user""",
+ 'author': 'OpenERP SA',
+ 'website': 'http://www.openerp.com',
+ 'depends': ['base'],
+ 'init_xml': [],
+ 'update_xml': [
+ 'google_base_account_view.xml',
+ 'wizard/google_login_view.xml',
+ ],
+ 'demo_xml': [],
+ 'installable': True,
+ 'active': False,
+ 'certificate': '',
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/google_base_account/google_base_account.py b/addons/google_base_account/google_base_account.py
new file mode 100644
index 00000000000..c860ec84374
--- /dev/null
+++ b/addons/google_base_account/google_base_account.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+from osv import fields,osv
+
+class res_users(osv.osv):
+ _inherit = "res.users"
+ _columns = {
+ 'gmail_user': fields.char('Username', size=64,),
+ 'gmail_password': fields.char('Password', size=64),
+ }
+res_users()
+
+# vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/google_base_account/google_base_account_view.xml b/addons/google_base_account/google_base_account_view.xml
new file mode 100644
index 00000000000..9296ba135c0
--- /dev/null
+++ b/addons/google_base_account/google_base_account_view.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ res.users.google.form1
+ res.users
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/google_base_account/wizard/__init__.py b/addons/google_base_account/wizard/__init__.py
new file mode 100644
index 00000000000..a6b9c644a1e
--- /dev/null
+++ b/addons/google_base_account/wizard/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import google_login
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/google_base_account/wizard/google_login.py b/addons/google_base_account/wizard/google_login.py
new file mode 100644
index 00000000000..78f27e51da4
--- /dev/null
+++ b/addons/google_base_account/wizard/google_login.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+from osv import fields,osv
+from tools.translate import _
+try:
+ import gdata.contacts.service
+ import gdata.contacts.client
+ import gdata.calendar.service
+except ImportError:
+ raise osv.except_osv(_('Google Contacts Import Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list'))
+
+class google_login(osv.osv_memory):
+ _description ='Google Contact'
+ _name = 'google.login'
+ _columns = {
+ 'user': fields.char('Google Username', size=64, required=True),
+ 'password': fields.char('Google Password', size=64),
+ }
+
+ def google_login(self, user, password, type='', context=None):
+ if type == 'group':
+ gd_client = gdata.contacts.client.ContactsClient(source='OpenERP')
+ if type == 'contact' :
+ gd_client = gdata.contacts.service.ContactsService()
+ if type == 'calendar':
+ gd_client = gdata.calendar.service.CalendarService()
+ else:
+ gd_client = gdata.contacts.service.ContactsService()
+ try:
+ gd_client.ClientLogin(user, password,gd_client.source)
+ except Exception:
+ return False
+ return gd_client
+
+
+ def default_get(self, cr, uid, fields, context=None):
+ res = super(google_login, self).default_get(cr, uid, fields, context=context)
+ user_obj = self.pool.get('res.users').browse(cr, uid, uid)
+ if 'user' in fields:
+ res.update({'user': user_obj.gmail_user})
+ if 'password' in fields:
+ res.update({'password': user_obj.gmail_password})
+ return res
+
+ def login(self, cr, uid, ids, context=None):
+ data = self.read(cr, uid, ids)[0]
+ user = data['user']
+ password = data['password']
+ if self.google_login(user, password):
+ res = {
+ 'gmail_user': user,
+ 'gmail_password': password
+ }
+ self.pool.get('res.users').write(cr, uid, uid, res, context=context)
+ else:
+ raise osv.except_osv(_('Error'), _("Authentication fail check the user and password !"))
+
+ return self._get_next_action(cr, uid, context=context)
+
+ def _get_next_action(self, cr, uid, context=None):
+ return {'type': 'ir.actions.act_window_close'}
+
+google_login()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/google_base_account/wizard/google_login_view.xml b/addons/google_base_account/wizard/google_login_view.xml
new file mode 100644
index 00000000000..9c5c93c613e
--- /dev/null
+++ b/addons/google_base_account/wizard/google_login_view.xml
@@ -0,0 +1,42 @@
+
+
+
+
+ google.login.form
+ google.login
+ form
+
+
+
+
+
+
+
+ Google Login
+ ir.actions.act_window
+ google.login
+ form
+ form
+ new
+
+
+
+
diff --git a/addons/hr/hr.py b/addons/hr/hr.py
index d587f4a452a..dbd3b393345 100644
--- a/addons/hr/hr.py
+++ b/addons/hr/hr.py
@@ -45,7 +45,7 @@ class hr_employee_category(osv.osv):
_description = "Employee Category"
_columns = {
'name': fields.char("Category", size=64, required=True),
- 'complete_name': fields.function(_name_get_fnc, method=True, type="char", string='Name'),
+ 'complete_name': fields.function(_name_get_fnc, type="char", string='Name'),
'parent_id': fields.many2one('hr.employee.category', 'Parent Category', select=True),
'child_ids': fields.one2many('hr.employee.category', 'parent_id', 'Child Categories')
}
@@ -92,8 +92,8 @@ class hr_job(osv.osv):
_description = "Job Description"
_columns = {
'name': fields.char('Job Name', size=128, required=True, select=True),
- 'expected_employees': fields.function(_no_of_employee, method=True, string='Expected Employees', help='Required number of Employees in total for that job.', multi="no_of_employee", store=True),
- 'no_of_employee': fields.function(_no_of_employee, method=True, string="No of Employee", help='Number of employee with that job.', multi="no_of_employee", store=True),
+ 'expected_employees': fields.function(_no_of_employee, string='Expected Employees', help='Required number of Employees in total for that job.', multi="no_of_employee", store=True),
+ 'no_of_employee': fields.function(_no_of_employee, string="No of Employee", help='Number of employee with that job.', multi="no_of_employee", store=True),
'no_of_recruitment': fields.float('Expected in Recruitment'),
'employee_ids': fields.one2many('hr.employee', 'job_id', 'Employees'),
'description': fields.text('Job Description'),
diff --git a/addons/hr/hr_department.py b/addons/hr/hr_department.py
index c885fdf30bd..3332207cb17 100644
--- a/addons/hr/hr_department.py
+++ b/addons/hr/hr_department.py
@@ -44,7 +44,7 @@ class hr_department(osv.osv):
_name = "hr.department"
_columns = {
'name': fields.char('Department Name', size=64, required=True),
- 'complete_name': fields.function(_dept_name_get_fnc, method=True, type="char", string='Name'),
+ 'complete_name': fields.function(_dept_name_get_fnc, type="char", string='Name'),
'company_id': fields.many2one('res.company', 'Company', select=True, required=False),
'parent_id': fields.many2one('hr.department', 'Parent Department', select=True),
'child_ids': fields.one2many('hr.department', 'parent_id', 'Child Departments'),
diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py
index 8c5648a1040..a138d66a285 100644
--- a/addons/hr_attendance/hr_attendance.py
+++ b/addons/hr_attendance/hr_attendance.py
@@ -56,7 +56,7 @@ class hr_attendance(osv.osv):
'action': fields.selection([('sign_in', 'Sign In'), ('sign_out', 'Sign Out'), ('action','Action')], 'Action', required=True),
'action_desc': fields.many2one("hr.action.reason", "Action Reason", domain="[('action_type', '=', action)]", help='Specifies the reason for Signing In/Signing Out in case of extra hours.'),
'employee_id': fields.many2one('hr.employee', "Employee's Name", required=True, select=True),
- 'day': fields.function(_day_compute, method=True, type='char', string='Day', store=True, select=1, size=32),
+ 'day': fields.function(_day_compute, type='char', string='Day', store=True, select=1, size=32),
}
_defaults = {
'name': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), #please don't remove the lambda, if you remove it then the current time will not change
@@ -110,7 +110,7 @@ class hr_employee(osv.osv):
return result
_columns = {
- 'state': fields.function(_state, method=True, type='selection', selection=[('absent', 'Absent'), ('present', 'Present')], string='Attendance'),
+ 'state': fields.function(_state, type='selection', selection=[('absent', 'Absent'), ('present', 'Present')], string='Attendance'),
}
def _action_check(self, cr, uid, emp_id, dt=False, context=None):
diff --git a/addons/hr_contract/hr_contract.py b/addons/hr_contract/hr_contract.py
index 7ed2d16d6b7..21d15a4194b 100644
--- a/addons/hr_contract/hr_contract.py
+++ b/addons/hr_contract/hr_contract.py
@@ -46,7 +46,7 @@ class hr_employee(osv.osv):
'vehicle': fields.char('Company Vehicle', size=64),
'vehicle_distance': fields.integer('Home-Work Distance', help="In kilometers"),
'contract_ids': fields.one2many('hr.contract', 'employee_id', 'Contracts'),
- 'contract_id':fields.function(_get_latest_contract, method=True, string='Contract', type='many2one', relation="hr.contract", help='Latest contract of the employee'),
+ 'contract_id':fields.function(_get_latest_contract, string='Contract', type='many2one', relation="hr.contract", help='Latest contract of the employee'),
}
hr_employee()
diff --git a/addons/hr_contract/i18n/ru.po b/addons/hr_contract/i18n/ru.po
index 4d125f3631f..81421433537 100644
--- a/addons/hr_contract/i18n/ru.po
+++ b/addons/hr_contract/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-01-14 08:42+0000\n"
-"Last-Translator: Alexey Y. Fedotov \n"
+"PO-Revision-Date: 2011-06-27 05:15+0000\n"
+"Last-Translator: Stanislav Hanzhin \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: 2011-04-29 05:27+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: hr_contract
#: view:hr.contract.wage.type:0
@@ -74,7 +74,7 @@ msgstr "Множитель стоимости часа"
#. module: hr_contract
#: view:hr.contract:0
msgid "Overpassed"
-msgstr ""
+msgstr "Переведён"
#. module: hr_contract
#: view:hr.contract.wage.type:0
@@ -145,7 +145,7 @@ msgstr "Поиск договора"
#. module: hr_contract
#: help:hr.employee,contract_id:0
msgid "Latest contract of the employee"
-msgstr ""
+msgstr "Последний договор с сотрудником"
#. module: hr_contract
#: field:hr.contract,advantages_net:0
@@ -163,6 +163,13 @@ msgid ""
" You can assign several contracts per employee.\n"
" "
msgstr ""
+"\n"
+" Добавляйте информацию в форму сотрудника для управления договорами:\n"
+" * Семейное положение,\n"
+" * Номер свидетельства социального страхования,\n"
+" * Место рождения, дата рождения, ...\n"
+" Можно назначить несколько договоров одному сотруднику.\n"
+" "
#. module: hr_contract
#: view:hr.contract:0
@@ -218,7 +225,7 @@ msgstr "Зарплата"
#. module: hr_contract
#: field:hr.contract,name:0
msgid "Contract Reference"
-msgstr ""
+msgstr "Ссылка на договор"
#. module: hr_contract
#: help:hr.employee,vehicle_distance:0
@@ -259,7 +266,7 @@ msgstr "Тип договора"
#. module: hr_contract
#: view:hr.contract.wage.type.period:0
msgid "Search Wage Period"
-msgstr ""
+msgstr "Поиск по периоду выплаты"
#. module: hr_contract
#: view:hr.contract:0
@@ -303,7 +310,7 @@ msgstr ""
#. module: hr_contract
#: view:hr.contract.wage.type:0
msgid "Search Wage Type"
-msgstr ""
+msgstr "Поиск по типу выплаты"
#. module: hr_contract
#: field:hr.contract.wage.type,type:0
@@ -375,7 +382,7 @@ msgstr "Основные данные"
#. module: hr_contract
#: view:hr.contract.type:0
msgid "Search Contract Type"
-msgstr ""
+msgstr "Поиск по типу договора"
#~ msgid ""
#~ "The Object name must start with x_ and not contain any special character !"
diff --git a/addons/hr_evaluation/i18n/ru.po b/addons/hr_evaluation/i18n/ru.po
index d3ea5e99c6b..96cb0010d4c 100644
--- a/addons/hr_evaluation/i18n/ru.po
+++ b/addons/hr_evaluation/i18n/ru.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2010-10-16 08:48+0000\n"
-"Last-Translator: Nikolay Chesnokov \n"
+"PO-Revision-Date: 2011-06-27 05:30+0000\n"
+"Last-Translator: Bulat Shafigullin \n"
"Language-Team: Russian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-04-29 05:41+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: hr_evaluation
#: selection:hr.evaluation.report,state:0
@@ -26,26 +26,26 @@ msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,wait:0
msgid "Wait Previous Phases"
-msgstr ""
+msgstr "Дождатья предыдущей фазы"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr.evaluation.report:0
#: view:hr_evaluation.plan:0
msgid "Group By..."
-msgstr ""
+msgstr "Группировать по ..."
#. module: hr_evaluation
#: field:hr.evaluation.interview,request_id:0
#: field:hr.evaluation.report,request_id:0
msgid "Request_id"
-msgstr ""
+msgstr "Идентификатор запроса"
#. module: hr_evaluation
#: field:hr.evaluation.report,progress_bar:0
#: field:hr_evaluation.evaluation,progress:0
msgid "Progress"
-msgstr ""
+msgstr "Выполнено"
#. module: hr_evaluation
#: view:board.board:0
@@ -67,58 +67,58 @@ msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "March"
-msgstr ""
+msgstr "Март"
#. module: hr_evaluation
#: field:hr.evaluation.report,delay_date:0
msgid "Delay to Start"
-msgstr ""
+msgstr "Задержка начала"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr_evaluation.evaluation,rating:0
msgid "Appreciation"
-msgstr ""
+msgstr "Оценка"
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:242
#: code:addons/hr_evaluation/hr_evaluation.py:311
#, python-format
msgid "Warning !"
-msgstr ""
+msgstr "Warning !"
#. module: hr_evaluation
#: view:hr_evaluation.plan:0
#: field:hr_evaluation.plan,company_id:0
#: field:hr_evaluation.plan.phase,company_id:0
msgid "Company"
-msgstr ""
+msgstr "Организация"
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.act_hr_employee_2_hr__evaluation_interview
msgid "Evaluation Interviews"
-msgstr ""
+msgstr "Испытательные собеседования"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,survey_id:0
msgid "Appraisal Form"
-msgstr ""
+msgstr "Оценочная форма"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,day:0
msgid "Day"
-msgstr ""
+msgstr "День"
#. module: hr_evaluation
#: field:hr.evaluation.interview,evaluation_id:0
msgid "Evaluation Form"
-msgstr ""
+msgstr "Испытательная форма"
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_anonymous_employee:0
msgid "Send an anonymous summary to the employee"
-msgstr ""
+msgstr "Отправить анонимную сводку сотруднику"
#. module: hr_evaluation
#: help:hr_evaluation.plan,month_first:0
@@ -126,34 +126,38 @@ msgid ""
"This number of months will be used to schedule the first evaluation date of "
"the employee when selecting an evaluation plan. "
msgstr ""
+"Указанное количество месяцев будет использоваться при планировании первого "
+"испытательного дня при выборе испытательного плана. "
#. module: hr_evaluation
#: view:hr.employee:0
msgid "Notes"
-msgstr ""
+msgstr "Заметки"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Interview Request"
-msgstr ""
+msgstr "Запрос на собеседование"
#. module: hr_evaluation
#: constraint:hr.employee:0
msgid ""
"Error ! You cannot select a department for which the employee is the manager."
msgstr ""
+"Ошибка! Вы не можете выбрать подразделение, руководителем которого является "
+"этот сотрудник."
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Mail Body"
-msgstr ""
+msgstr "Тело письма"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_report_all
#: model:ir.ui.menu,name:hr_evaluation.menu_evaluation_report_all
msgid "Evaluations Analysis"
-msgstr ""
+msgstr "Анализ испытаний"
#. module: hr_evaluation
#: selection:hr.evaluation.report,state:0
@@ -170,7 +174,7 @@ msgstr ""
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Did not meet expectations"
-msgstr ""
+msgstr "Не оправдал ожиданий"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
@@ -185,7 +189,7 @@ msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan,month_next:0
msgid "Periodicity of Evaluations (months)"
-msgstr ""
+msgstr "Периодичность испытаний (мес.)"
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:242
@@ -203,7 +207,7 @@ msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan,month_first:0
msgid "First Evaluation in (months)"
-msgstr ""
+msgstr "Первое испытание через (мес.)"
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:81
@@ -229,7 +233,7 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Send to Employees"
-msgstr ""
+msgstr "Отправить сотрудникам"
#. module: hr_evaluation
#: field:hr.evaluation.report,deadline:0
@@ -324,18 +328,20 @@ msgstr ""
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Exceeds expectations"
-msgstr ""
+msgstr "Превосходит ожидания"
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,mail_feature:0
msgid ""
"Check this box if you want to send mail to employees coming under this phase"
msgstr ""
+"Отметьте, если хотите отправлять письма сотрудникам, приходящим в текущей "
+"фазе"
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_answer_manager:0
msgid "Send all answers to the manager"
-msgstr ""
+msgstr "Отправить все ответы менеджеру"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
@@ -350,13 +356,13 @@ msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,date:0
msgid "Evaluation Deadline"
-msgstr ""
+msgstr "Дата завершения испытания"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Print Interview"
-msgstr ""
+msgstr "Распечатать собеседование"
#. module: hr_evaluation
#: field:hr.evaluation.report,closed:0
@@ -367,13 +373,13 @@ msgstr ""
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Meet expectations"
-msgstr ""
+msgstr "Соответствует ожиданиям"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,nbr:0
msgid "# of Requests"
-msgstr ""
+msgstr "# запросов"
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_tree
@@ -391,16 +397,20 @@ msgid ""
"manages all kind of evaluations: bottom-up, top-down, self-evaluation and "
"final evaluation by the manager."
msgstr ""
+"Каждому сотруднику может быть назначен испытательный план. Данный план "
+"определяет частоту и порядок персональных испытаний. Вы можете определить "
+"этапы и прикрепить к ним собеседования. OpenERP поддерживает все виды "
+"оценок: снизу-вверх, сверху-вниз, самооценка и конечная оценка менеджером."
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Action to Perform"
-msgstr ""
+msgstr "Действие к выполнению"
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,note_action:0
msgid "Action Plan"
-msgstr ""
+msgstr "План действия"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
@@ -410,13 +420,13 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Ending Summary"
-msgstr ""
+msgstr "Заключительная сводка"
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Significantly exceeds expectations"
-msgstr ""
+msgstr "Значительно превосходит ожидания"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
@@ -427,7 +437,7 @@ msgstr ""
#: field:hr_evaluation.plan.phase,send_answer_employee:0
#: field:hr_evaluation.plan.phase,send_answer_manager:0
msgid "All Answers"
-msgstr ""
+msgstr "Все ответы"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
@@ -448,7 +458,7 @@ msgstr ""
#. module: hr_evaluation
#: model:ir.module.module,shortdesc:hr_evaluation.module_meta_information
msgid "Human Resources Evaluation"
-msgstr ""
+msgstr "Оценка человеческих ресурсов"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
@@ -458,23 +468,23 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Mail Settings"
-msgstr ""
+msgstr "Настройки почты"
#. module: hr_evaluation
#: field:hr.evaluation.interview,user_to_review_id:0
msgid "Employee to Interview"
-msgstr ""
+msgstr "Сотрудник на собеседование"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Interview Question"
-msgstr ""
+msgstr "Вопрос собеседования"
#. module: hr_evaluation
#: field:survey.request,is_evaluation:0
msgid "Is Evaluation?"
-msgstr ""
+msgstr "Является оценкой?"
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_survey_request
@@ -487,11 +497,13 @@ msgid ""
"Check this box if you want to wait that all preceding phases are finished "
"before launching this phase."
msgstr ""
+"Отметьте, если необходимо, чтобы перед началом данной фазы все предыдущие "
+"были завершены."
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Evaluation Data"
-msgstr ""
+msgstr "Данные испытания"
#. module: hr_evaluation
#: help:hr_evaluation.evaluation,note_action:0
@@ -509,13 +521,13 @@ msgstr "Черновик"
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,note_summary:0
msgid "Evaluation Summary"
-msgstr ""
+msgstr "Сводка испытания"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,send_anonymous_employee:0
#: field:hr_evaluation.plan.phase,send_anonymous_manager:0
msgid "Anonymous Summary"
-msgstr ""
+msgstr "Анонимная сводка"
#. module: hr_evaluation
#: view:hr.employee:0
@@ -541,7 +553,7 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Start Evaluation"
-msgstr ""
+msgstr "Начало испытания"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
@@ -557,7 +569,7 @@ msgstr ""
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Significantly bellow expectations"
-msgstr ""
+msgstr "Значительно ниже ожиданий"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
@@ -610,19 +622,19 @@ msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_anonymous_manager:0
msgid "Send an anonymous summary to the manager"
-msgstr ""
+msgstr "Отправить анонимную сводку менеджеру"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Interview Evaluation"
-msgstr ""
+msgstr "Оценка собеседования"
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_plan_tree
#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_plan_tree
msgid "Evaluation Plans"
-msgstr ""
+msgstr "Планы испытаний"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
@@ -648,22 +660,22 @@ msgstr ""
#: view:hr.evaluation.report:0
#: selection:hr.evaluation.report,state:0
msgid "Final Validation"
-msgstr ""
+msgstr "Конечная проверка"
#. module: hr_evaluation
#: selection:hr_evaluation.evaluation,state:0
msgid "Waiting Appreciation"
-msgstr ""
+msgstr "Ожидание оценки"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,mail_feature:0
msgid "Send mail for this phase"
-msgstr ""
+msgstr "Отправить письмо по данной фазе"
#. module: hr_evaluation
#: field:hr.evaluation.report,rating:0
msgid "Overall Rating"
-msgstr ""
+msgstr "Общий рейтинг"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
@@ -675,22 +687,22 @@ msgstr ""
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Interviewer"
-msgstr ""
+msgstr "Интервьюер"
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_report
msgid "Evaluations Statistics"
-msgstr ""
+msgstr "Статистика испытаний"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Deadline Date"
-msgstr ""
+msgstr "Конечная дата"
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Top-Down Appraisal Requests"
-msgstr ""
+msgstr "Запросы на оценку сверху вниз"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
@@ -700,12 +712,12 @@ msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_answer_employee:0
msgid "Send all answers to the employee"
-msgstr ""
+msgstr "Отправить все ответы сотруднику"
#. module: hr_evaluation
#: field:hr.employee,evaluation_date:0
msgid "Next Evaluation Date"
-msgstr ""
+msgstr "Следующая дата испытания"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
@@ -718,7 +730,7 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Evaluation Plan Phases"
-msgstr ""
+msgstr "Фазы плана оценки"
#. module: hr_evaluation
#: view:hr.evaluation.reminder:0
@@ -794,12 +806,12 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Validate Evaluation"
-msgstr ""
+msgstr "Проверить оценку"
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Final Interview"
-msgstr ""
+msgstr "Завершающее собеседование"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,name:0
@@ -809,13 +821,13 @@ msgstr ""
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Bottom-Up Appraisal Requests"
-msgstr ""
+msgstr "Запросы оценки снизу вверх"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Search Evaluation"
-msgstr ""
+msgstr "Поиск оценки"
#. module: hr_evaluation
#: field:hr.employee,evaluation_plan_id:0
@@ -824,7 +836,7 @@ msgstr ""
#: field:hr_evaluation.plan.phase,plan_id:0
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan
msgid "Evaluation Plan"
-msgstr ""
+msgstr "План оценки"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
@@ -834,7 +846,7 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Send to Managers"
-msgstr ""
+msgstr "Отправить менеджерам"
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_send_mail
@@ -849,12 +861,12 @@ msgstr ""
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_evaluation
msgid "Employee Evaluation"
-msgstr ""
+msgstr "Оценка сотрудника"
#. module: hr_evaluation
#: view:hr_evaluation.plan:0
msgid "Search Evaluation Plan"
-msgstr ""
+msgstr "Поиск по плану оценки"
#. module: hr_evaluation
#: view:hr_evaluation.plan:0
@@ -875,7 +887,7 @@ msgstr ""
#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_tree
#: model:ir.ui.menu,name:hr_evaluation.menu_open_hr_evaluation_interview_requests
msgid "Interview Requests"
-msgstr ""
+msgstr "Запросы на собеседование"
#. module: hr_evaluation
#: field:hr.evaluation.report,create_date:0
@@ -894,6 +906,8 @@ msgid ""
"The date of the next evaluation is computed by the evaluation plan's dates "
"(first evaluation + periodicity)."
msgstr ""
+"Дата следующей оценки вычисляется согласно плану (первая оценка + "
+"периодичность)."
#~ msgid "Score"
#~ msgstr "Оценка"
diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py
index 2e7020306b5..0f996c79e79 100644
--- a/addons/hr_expense/hr_expense.py
+++ b/addons/hr_expense/hr_expense.py
@@ -70,7 +70,7 @@ class hr_expense_expense(osv.osv):
'account_move_id': fields.many2one('account.move', 'Ledger Posting'),
'line_ids': fields.one2many('hr.expense.line', 'expense_id', 'Expense Lines', readonly=True, states={'draft':[('readonly',False)]} ),
'note': fields.text('Note'),
- 'amount': fields.function(_amount, method=True, string='Total Amount'),
+ 'amount': fields.function(_amount, string='Total Amount'),
'invoice_id': fields.many2one('account.invoice', "Employee's Invoice"),
'currency_id': fields.many2one('res.currency', 'Currency', required=True),
'department_id':fields.many2one('hr.department','Department'),
@@ -244,7 +244,7 @@ class hr_expense_line(osv.osv):
'name': fields.char('Expense Note', size=128, required=True),
'date_value': fields.date('Date', required=True),
'expense_id': fields.many2one('hr.expense.expense', 'Expense', ondelete='cascade', select=True),
- 'total_amount': fields.function(_amount, method=True, string='Total', digits_compute=dp.get_precision('Account')),
+ 'total_amount': fields.function(_amount, string='Total', digits_compute=dp.get_precision('Account')),
'unit_amount': fields.float('Unit Price', digits_compute=dp.get_precision('Account')),
'unit_quantity': fields.float('Quantities' ),
'product_id': fields.many2one('product.product', 'Product', domain=[('hr_expense_ok','=',True)]),
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index 7074fd5cecc..18b1bacc836 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -78,9 +78,9 @@ class hr_holidays_status(osv.osv):
'color_name': fields.selection([('red', 'Red'),('blue','Blue'), ('lightgreen', 'Light Green'), ('lightblue','Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'),('lightcyan', 'Light Cyan'),('black', 'Black'),('lightpink', 'Light Pink'),('brown', 'Brown'),('violet', 'Violet'),('lightcoral', 'Light Coral'),('lightsalmon', 'Light Salmon'),('lavender', 'Lavender'),('wheat', 'Wheat'),('ivory', 'Ivory')],'Color in Report', required=True, help='This color will be used in the leaves summary located in Reporting\Leaves by Departement'),
'limit': fields.boolean('Allow to Override Limit', help='If you tick this checkbox, the system will allow, for this section, the employees to take more leaves than the available ones.'),
'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the leave type without removing it."),
- 'max_leaves': fields.function(_user_left_days, method=True, string='Maximum Allowed', help='This value is given by the sum of all holidays requests with a positive value.', multi='user_left_days'),
- 'leaves_taken': fields.function(_user_left_days, method=True, string='Leaves Already Taken', help='This value is given by the sum of all holidays requests with a negative value.', multi='user_left_days'),
- 'remaining_leaves': fields.function(_user_left_days, method=True, string='Remaining Leaves', help='Maximum Leaves Allowed - Leaves Already Taken', multi='user_left_days'),
+ 'max_leaves': fields.function(_user_left_days, string='Maximum Allowed', help='This value is given by the sum of all holidays requests with a positive value.', multi='user_left_days'),
+ 'leaves_taken': fields.function(_user_left_days, string='Leaves Already Taken', help='This value is given by the sum of all holidays requests with a negative value.', multi='user_left_days'),
+ 'remaining_leaves': fields.function(_user_left_days, string='Remaining Leaves', help='Maximum Leaves Allowed - Leaves Already Taken', multi='user_left_days'),
'double_validation': fields.boolean('Apply Double Validation', help="If its True then its Allocation/Request have to be validated by second validator")
}
_defaults = {
@@ -127,7 +127,7 @@ class hr_holidays(osv.osv):
'manager_id': fields.many2one('hr.employee', 'First Approval', invisible=False, readonly=True, help='This area is automatically filled by the user who validate the leave'),
'notes': fields.text('Reasons',readonly=True, states={'draft':[('readonly',False)]}),
'number_of_days_temp': fields.float('Number of Days', readonly=True, states={'draft':[('readonly',False)]}),
- 'number_of_days': fields.function(_compute_number_of_days, method=True, string='Number of Days', store=True),
+ 'number_of_days': fields.function(_compute_number_of_days, string='Number of Days', store=True),
'case_id': fields.many2one('crm.meeting', 'Meeting'),
'type': fields.selection([('remove','Leave Request'),('add','Allocation Request')], 'Request Type', required=True, readonly=True, states={'draft':[('readonly',False)]}, help="Choose 'Leave Request' if someone wants to take an off-day. \nChoose 'Allocation Request' if you want to increase the number of leaves available for someone"),
'parent_id': fields.many2one('hr.holidays', 'Parent'),
diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py
index b29bd1312ac..43e35424da0 100644
--- a/addons/hr_payroll/hr_payroll.py
+++ b/addons/hr_payroll/hr_payroll.py
@@ -318,11 +318,11 @@ class hr_contract(osv.osv):
'visa_expire': fields.date('Visa Expire Date'),
'struct_id': fields.many2one('hr.payroll.structure', 'Salary Structure'),
'working_days_per_week': fields.integer('Working Days', help="No of Working days / week for an employee"),
- 'basic': fields.function(_calculate_salary, method=True, store=True, multi='dc', type='float', string='Basic Salary', digits=(14,2)),
- 'gross': fields.function(_calculate_salary, method=True, store=True, multi='dc', type='float', string='Gross Salary', digits=(14,2)),
- 'net': fields.function(_calculate_salary, method=True, store=True, multi='dc', type='float', string='Net Salary', digits=(14,2)),
- 'advantages_net': fields.function(_calculate_salary, method=True, store=True, multi='dc', type='float', string='Deductions', digits=(14,2)),
- 'advantages_gross': fields.function(_calculate_salary, method=True, store=True, multi='dc', type='float', string='Allowances', digits=(14,2)),
+ 'basic': fields.function(_calculate_salary, store=True, multi='dc', type='float', string='Basic Salary', digits=(14,2)),
+ 'gross': fields.function(_calculate_salary, store=True, multi='dc', type='float', string='Gross Salary', digits=(14,2)),
+ 'net': fields.function(_calculate_salary, store=True, multi='dc', type='float', string='Net Salary', digits=(14,2)),
+ 'advantages_net': fields.function(_calculate_salary, store=True, multi='dc', type='float', string='Deductions', digits=(14,2)),
+ 'advantages_gross': fields.function(_calculate_salary, store=True, multi='dc', type='float', string='Allowances', digits=(14,2)),
}
_defaults = {
'working_days_per_week': lambda *a: 5,
@@ -374,10 +374,10 @@ class payroll_register(osv.osv):
],'State', select=True, readonly=True),
'active':fields.boolean('Active', required=False),
'company_id':fields.many2one('res.company', 'Company', required=False),
- 'grows': fields.function(_calculate, method=True, store=True, multi='dc', string='Gross Salary', type='float', digits=(16, 4)),
- 'net': fields.function(_calculate, method=True, store=True, multi='dc', string='Net Salary', digits=(16, 4)),
- 'allounce': fields.function(_calculate, method=True, store=True, multi='dc', string='Allowance', digits=(16, 4)),
- 'deduction': fields.function(_calculate, method=True, store=True, multi='dc', string='Deduction', digits=(16, 4)),
+ 'grows': fields.function(_calculate, store=True, multi='dc', string='Gross Salary', type='float', digits=(16, 4)),
+ 'net': fields.function(_calculate, store=True, multi='dc', string='Net Salary', digits=(16, 4)),
+ 'allounce': fields.function(_calculate, store=True, multi='dc', string='Allowance', digits=(16, 4)),
+ 'deduction': fields.function(_calculate, store=True, multi='dc', string='Deduction', digits=(16, 4)),
'note': fields.text('Description'),
'bank_id':fields.many2one('res.bank', 'Bank', required=False, help="Select the Bank Address from whcih the salary is going to be paid"),
}
@@ -611,8 +611,8 @@ class contrib_register(osv.osv):
'company_id':fields.many2one('res.company', 'Company', required=False),
'name':fields.char('Name', size=256, required=True, readonly=False),
'register_line_ids':fields.one2many('hr.contibution.register.line', 'register_id', 'Register Line', readonly=True),
- 'monthly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', string='Total By Employee', digits=(16, 4)),
- 'monthly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', string='Total By Company', digits=(16, 4)),
+ 'monthly_total_by_emp': fields.function(_total_contrib, multi='dc', string='Total By Employee', digits=(16, 4)),
+ 'monthly_total_by_comp': fields.function(_total_contrib, multi='dc', string='Total By Company', digits=(16, 4)),
'note': fields.text('Description'),
}
_defaults = {
@@ -644,7 +644,7 @@ class contrib_register_line(osv.osv):
'date': fields.date('Date'),
'emp_deduction': fields.float('Employee Deduction', digits=(16, 4)),
'comp_deduction': fields.float('Company Deduction', digits=(16, 4)),
- 'total': fields.function(_total, method=True, store=True, string='Total', digits=(16, 4)),
+ 'total': fields.function(_total, store=True, string='Total', digits=(16, 4)),
}
_defaults = {
'date': lambda *a: time.strftime('%Y-%m-%d'),
@@ -884,12 +884,12 @@ class hr_payslip(osv.osv):
'basic_before_leaves': fields.float('Basic Salary', readonly=True, digits_compute=dp.get_precision('Account')),
'leaves': fields.float('Leave Deductions', readonly=True, digits_compute=dp.get_precision('Account')),
'basic': fields.float('Net Basic', readonly=True, digits_compute=dp.get_precision('Account')),
- 'grows': fields.function(_calculate, method=True, store=True, multi='dc', string='Gross Salary', digits_compute=dp.get_precision('Account')),
- 'net': fields.function(_calculate, method=True, store=True, multi='dc', string='Net Salary', digits_compute=dp.get_precision('Account')),
- 'allounce': fields.function(_calculate, method=True, store=True, multi='dc', string='Allowance', digits_compute=dp.get_precision('Account')),
- 'deduction': fields.function(_calculate, method=True, store=True, multi='dc', string='Deduction', digits_compute=dp.get_precision('Account')),
- 'other_pay': fields.function(_calculate, method=True, store=True, multi='dc', string='Others', digits_compute=dp.get_precision('Account')),
- 'total_pay': fields.function(_calculate, method=True, store=True, multi='dc', string='Total Payment', digits_compute=dp.get_precision('Account')),
+ 'grows': fields.function(_calculate, store=True, multi='dc', string='Gross Salary', digits_compute=dp.get_precision('Account')),
+ 'net': fields.function(_calculate, store=True, multi='dc', string='Net Salary', digits_compute=dp.get_precision('Account')),
+ 'allounce': fields.function(_calculate, store=True, multi='dc', string='Allowance', digits_compute=dp.get_precision('Account')),
+ 'deduction': fields.function(_calculate, store=True, multi='dc', string='Deduction', digits_compute=dp.get_precision('Account')),
+ 'other_pay': fields.function(_calculate, store=True, multi='dc', string='Others', digits_compute=dp.get_precision('Account')),
+ 'total_pay': fields.function(_calculate, store=True, multi='dc', string='Total Payment', digits_compute=dp.get_precision('Account')),
'line_ids':fields.one2many('hr.payslip.line', 'slip_id', 'Payslip Line', required=False, readonly=True, states={'draft': [('readonly', False)]}),
'company_id':fields.many2one('res.company', 'Company', required=False, readonly=True, states={'draft': [('readonly', False)]}),
'holiday_days': fields.float('No of Leaves', readonly=True),
@@ -1436,11 +1436,11 @@ class hr_employee(osv.osv):
'slip_ids':fields.one2many('hr.payslip', 'employee_id', 'Payslips', required=False, readonly=True),
'otherid': fields.char('Other Id', size=64),
- 'basic': fields.function(_calculate_salary, method=True, multi='dc', type='float', string='Basic Salary', digits=(14,2)),
- 'gross': fields.function(_calculate_salary, method=True, multi='dc', type='float', string='Gross Salary', digits=(14,2)),
- 'net': fields.function(_calculate_salary, method=True, multi='dc', type='float', string='Net Salary', digits=(14,2)),
- 'advantages_net': fields.function(_calculate_salary, method=True, multi='dc', type='float', string='Deductions', digits=(14,2)),
- 'advantages_gross': fields.function(_calculate_salary, method=True, multi='dc', type='float', string='Allowances', digits=(14,2)),
+ 'basic': fields.function(_calculate_salary, multi='dc', type='float', string='Basic Salary', digits=(14,2)),
+ 'gross': fields.function(_calculate_salary, multi='dc', type='float', string='Gross Salary', digits=(14,2)),
+ 'net': fields.function(_calculate_salary, multi='dc', type='float', string='Net Salary', digits=(14,2)),
+ 'advantages_net': fields.function(_calculate_salary, multi='dc', type='float', string='Deductions', digits=(14,2)),
+ 'advantages_gross': fields.function(_calculate_salary, multi='dc', type='float', string='Allowances', digits=(14,2)),
}
hr_employee()
diff --git a/addons/hr_payroll_account/hr_payroll_account.py b/addons/hr_payroll_account/hr_payroll_account.py
index 416aeb485ef..deb06b121d0 100644
--- a/addons/hr_payroll_account/hr_payroll_account.py
+++ b/addons/hr_payroll_account/hr_payroll_account.py
@@ -180,8 +180,8 @@ class contrib_register(osv.osv):
_columns = {
'account_id': fields.many2one('account.account', 'Account'),
'analytic_account_id':fields.many2one('account.analytic.account', 'Analytic Account'),
- 'yearly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, 4)),
- 'yearly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, 4)),
+ 'yearly_total_by_emp': fields.function(_total_contrib, multi='dc', store=True, string='Total By Employee', digits=(16, 4)),
+ 'yearly_total_by_comp': fields.function(_total_contrib, multi='dc', store=True, string='Total By Company', digits=(16, 4)),
}
contrib_register()
diff --git a/addons/hr_payroll_account/i18n/zh_CN.po b/addons/hr_payroll_account/i18n/zh_CN.po
new file mode 100644
index 00000000000..d44c5ae8a83
--- /dev/null
+++ b/addons/hr_payroll_account/i18n/zh_CN.po
@@ -0,0 +1,344 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-27 13:51+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: hr_payroll_account
+#: field:hr.payslip,move_line_ids:0
+msgid "Accounting Lines"
+msgstr "会计明细"
+
+#. module: hr_payroll_account
+#: field:hr.payroll.register,bank_journal_id:0
+#: field:hr.payslip,bank_journal_id:0
+msgid "Bank Journal"
+msgstr "银行日记帐"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_contibution_register_line
+msgid "Contribution Register Line"
+msgstr "捐款记录明细"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_contibution_register
+msgid "Contribution Register"
+msgstr "捐款记录"
+
+#. module: hr_payroll_account
+#: help:hr.employee,analytic_account:0
+msgid "Analytic Account for Salary Analysis"
+msgstr "薪酬分析的辅助核算项"
+
+#. module: hr_payroll_account
+#: field:hr.payroll.register,journal_id:0
+#: field:hr.payslip,journal_id:0
+msgid "Expense Journal"
+msgstr "费用日记帐"
+
+#. module: hr_payroll_account
+#: field:hr.contibution.register.line,period_id:0
+msgid "Period"
+msgstr "期间"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_employee
+msgid "Employee"
+msgstr "员工"
+
+#. module: hr_payroll_account
+#: view:hr.payslip:0
+msgid "Other Informations"
+msgstr "其它信息"
+
+#. module: hr_payroll_account
+#: field:hr.employee,salary_account:0
+msgid "Salary Account"
+msgstr "薪酬科目"
+
+#. module: hr_payroll_account
+#: help:hr.employee,property_bank_account:0
+msgid "Select Bank Account from where Salary Expense will be Paid"
+msgstr ""
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payroll_register
+msgid "Payroll Register"
+msgstr "工资表记录"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip_account_move
+msgid "Account Move Link to Pay Slip"
+msgstr "分录链接到工资表"
+
+#. module: hr_payroll_account
+#: view:hr.payslip:0
+msgid "Description"
+msgstr "描述"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:331
+#, python-format
+msgid "Please Confirm all Expense Invoice appear for Reimbursement"
+msgstr "请确认所有报销的费用发票"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:432
+#, python-format
+msgid "Please defined partner in bank account for %s !"
+msgstr ""
+
+#. module: hr_payroll_account
+#: view:hr.payslip:0
+msgid "Accounting Informations"
+msgstr "会计信息"
+
+#. module: hr_payroll_account
+#: help:hr.employee,salary_account:0
+msgid "Expense account when Salary Expense will be recorded"
+msgstr "开支科目将记录薪酬开支"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:429
+#, python-format
+msgid "Please defined bank account for %s !"
+msgstr ""
+
+#. module: hr_payroll_account
+#: model:ir.module.module,description:hr_payroll_account.module_meta_information
+msgid ""
+"Generic Payroll system Integrated with Accountings\n"
+" * Expanse Encoding\n"
+" * Payment Encoding\n"
+" * Comany Contribution Managemet\n"
+" "
+msgstr ""
+
+#. module: hr_payroll_account
+#: model:ir.module.module,shortdesc:hr_payroll_account.module_meta_information
+msgid "Human Resource Payroll Accounting"
+msgstr "人力资源工资表会计部分"
+
+#. module: hr_payroll_account
+#: view:hr.payslip:0
+#: field:hr.payslip,move_payment_ids:0
+msgid "Payment Lines"
+msgstr "付款明细"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:270
+#: code:addons/hr_payroll_account/hr_payroll_account.py:445
+#, python-format
+msgid "Please define fiscal year for perticular contract"
+msgstr "请定义财务年的会计期间"
+
+#. module: hr_payroll_account
+#: field:hr.payslip.account.move,slip_id:0
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip
+msgid "Pay Slip"
+msgstr "工资表"
+
+#. module: hr_payroll_account
+#: constraint:hr.employee:0
+msgid "Error ! You cannot create recursive Hierarchy of Employees."
+msgstr "错误!您不能创建递归的员工等级。"
+
+#. module: hr_payroll_account
+#: view:hr.payslip:0
+msgid "Account Lines"
+msgstr "明细"
+
+#. module: hr_payroll_account
+#: field:hr.contibution.register,account_id:0
+#: field:hr.holidays.status,account_id:0
+#: field:hr.payroll.advice,account_id:0
+msgid "Account"
+msgstr "科目"
+
+#. module: hr_payroll_account
+#: field:hr.employee,property_bank_account:0
+msgid "Bank Account"
+msgstr "银行帐户"
+
+#. module: hr_payroll_account
+#: field:hr.payslip.account.move,name:0
+msgid "Name"
+msgstr "名称"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip_line
+msgid "Payslip Line"
+msgstr "工资表明细"
+
+#. module: hr_payroll_account
+#: view:hr.payslip:0
+msgid "Accounting Vouchers"
+msgstr "会计凭证"
+
+#. module: hr_payroll_account
+#: constraint:hr.employee:0
+msgid ""
+"Error ! You cannot select a department for which the employee is the manager."
+msgstr "错误!您不能选择一部门因为该员工是经理。"
+
+#. module: hr_payroll_account
+#: help:hr.payroll.register,period_id:0
+#: help:hr.payslip,period_id:0
+msgid "Keep empty to use the period of the validation(Payslip) date."
+msgstr "为空使用这个期间审核(工资表)日期"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payroll_advice
+msgid "Bank Advice Note"
+msgstr "银行通知单备注"
+
+#. module: hr_payroll_account
+#: field:hr.payslip.account.move,move_id:0
+msgid "Expense Entries"
+msgstr "费用分录"
+
+#. module: hr_payroll_account
+#: field:hr.payslip,move_ids:0
+msgid "Accounting vouchers"
+msgstr "会计凭证"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:270
+#: code:addons/hr_payroll_account/hr_payroll_account.py:277
+#: code:addons/hr_payroll_account/hr_payroll_account.py:280
+#: code:addons/hr_payroll_account/hr_payroll_account.py:297
+#: code:addons/hr_payroll_account/hr_payroll_account.py:331
+#: code:addons/hr_payroll_account/hr_payroll_account.py:445
+#: code:addons/hr_payroll_account/hr_payroll_account.py:452
+#: code:addons/hr_payroll_account/hr_payroll_account.py:455
+#: code:addons/hr_payroll_account/hr_payroll_account.py:469
+#: code:addons/hr_payroll_account/hr_payroll_account.py:492
+#, python-format
+msgid "Warning !"
+msgstr "警告!"
+
+#. module: hr_payroll_account
+#: field:hr.employee,employee_account:0
+msgid "Employee Account"
+msgstr "员工帐户"
+
+#. module: hr_payroll_account
+#: field:hr.payslip.line,account_id:0
+msgid "General Account"
+msgstr "一般科目"
+
+#. module: hr_payroll_account
+#: field:hr.contibution.register,yearly_total_by_emp:0
+msgid "Total By Employee"
+msgstr "员工合计"
+
+#. module: hr_payroll_account
+#: field:hr.payslip.account.move,sequence:0
+msgid "Sequence"
+msgstr "序列"
+
+#. module: hr_payroll_account
+#: field:hr.payroll.register,period_id:0
+#: field:hr.payslip,period_id:0
+msgid "Force Period"
+msgstr "强制会计期间"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_holidays_status
+msgid "Leave Type"
+msgstr "假期类型"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:277
+#: code:addons/hr_payroll_account/hr_payroll_account.py:452
+#, python-format
+msgid "Fiscal Year is not defined for slip date %s"
+msgstr "这薪酬日期 %s 财务年度没定义"
+
+#. module: hr_payroll_account
+#: field:hr.contibution.register,analytic_account_id:0
+#: field:hr.employee,analytic_account:0
+#: field:hr.holidays.status,analytic_account_id:0
+#: field:hr.payroll.structure,account_id:0
+#: field:hr.payslip.line,analytic_account_id:0
+msgid "Analytic Account"
+msgstr "辅助核算项"
+
+#. module: hr_payroll_account
+#: help:hr.employee,employee_account:0
+msgid "Employee Payable Account"
+msgstr "员工应付帐户"
+
+#. module: hr_payroll_account
+#: field:hr.contibution.register,yearly_total_by_comp:0
+msgid "Total By Company"
+msgstr "公司合计"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payroll_structure
+msgid "Salary Structure"
+msgstr "薪酬结构"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:557
+#, python-format
+msgid "Please Configure Partners Receivable Account!!"
+msgstr "请定义业务伙伴应收款帐户!"
+
+#. module: hr_payroll_account
+#: view:hr.contibution.register:0
+msgid "Year"
+msgstr "年"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:280
+#: code:addons/hr_payroll_account/hr_payroll_account.py:455
+#, python-format
+msgid "Period is not defined for slip date %s"
+msgstr "这薪酬日期 %s 会计期间没定义。"
+
+#. module: hr_payroll_account
+#: view:hr.payslip:0
+msgid "Accounting Details"
+msgstr "会计细节"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:540
+#, python-format
+msgid "Please Configure Partners Payable Account!!"
+msgstr "请定义业务伙伴应付款帐户!"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:429
+#: code:addons/hr_payroll_account/hr_payroll_account.py:432
+#: code:addons/hr_payroll_account/hr_payroll_account.py:533
+#: code:addons/hr_payroll_account/hr_payroll_account.py:550
+#, python-format
+msgid "Integrity Error !"
+msgstr ""
+
+#~ msgid ""
+#~ "Generic Payroll system Integrated with Accountings\n"
+#~ " * Expense Encoding\n"
+#~ " * Payment Encoding\n"
+#~ " * Company Contribution Management\n"
+#~ " "
+#~ msgstr ""
+#~ "通用工资系统整合会计\n"
+#~ " * 费用编码\n"
+#~ " * 付款编码\n"
+#~ " * 公司捐款管理\n"
+#~ " "
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
index 5c042c5c7e3..d9314690ce7 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
@@ -66,7 +66,7 @@ class account_analytic_account(osv.osv):
'pricelist_id': fields.many2one('product.pricelist', 'Sale Pricelist',
help="The product to invoice is defined on the employee form, the price will be deduced by this pricelist on the product."),
'amount_max': fields.float('Max. Invoice Price'),
- 'amount_invoiced': fields.function(_invoiced_calc, method=True, string='Invoiced Amount',
+ 'amount_invoiced': fields.function(_invoiced_calc, string='Invoiced Amount',
help="Total invoiced"),
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Reinvoice Costs',
help="Fill this field if you plan to automatically generate invoices based " \
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index ea2b5017790..cf4351112a4 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -286,13 +286,13 @@ class hr_timesheet_sheet(osv.osv):
help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed timesheet. \
\n* The \'Confirmed\' state is used for to confirm the timesheet by user. \
\n* The \'Done\' state is used when users timesheet is accepted by his/her senior.'),
- 'state_attendance' : fields.function(_state_attendance, method=True, type='selection', selection=[('absent', 'Absent'), ('present', 'Present'),('none','No employee defined')], string='Current Status'),
- 'total_attendance_day': fields.function(_total_day, method=True, string='Total Attendance', multi="_total_day"),
- 'total_timesheet_day': fields.function(_total_day, method=True, string='Total Timesheet', multi="_total_day"),
- 'total_difference_day': fields.function(_total_day, method=True, string='Difference', multi="_total_day"),
- 'total_attendance': fields.function(_total, method=True, string='Total Attendance', multi="_total_sheet"),
- 'total_timesheet': fields.function(_total, method=True, string='Total Timesheet', multi="_total_sheet"),
- 'total_difference': fields.function(_total, method=True, string='Difference', multi="_total_sheet"),
+ 'state_attendance' : fields.function(_state_attendance, type='selection', selection=[('absent', 'Absent'), ('present', 'Present'),('none','No employee defined')], string='Current Status'),
+ 'total_attendance_day': fields.function(_total_day, string='Total Attendance', multi="_total_day"),
+ 'total_timesheet_day': fields.function(_total_day, string='Total Timesheet', multi="_total_day"),
+ 'total_difference_day': fields.function(_total_day, string='Difference', multi="_total_day"),
+ 'total_attendance': fields.function(_total, string='Total Attendance', multi="_total_sheet"),
+ 'total_timesheet': fields.function(_total, string='Total Timesheet', multi="_total_sheet"),
+ 'total_difference': fields.function(_total, string='Difference', multi="_total_sheet"),
'period_ids': fields.one2many('hr_timesheet_sheet.sheet.day', 'sheet_id', 'Period', readonly=True),
'account_ids': fields.one2many('hr_timesheet_sheet.sheet.account', 'sheet_id', 'Analytic accounts', readonly=True),
'company_id': fields.many2one('res.company', 'Company'),
@@ -473,7 +473,7 @@ class hr_timesheet_line(osv.osv):
return [('id', 'in', [x[0] for x in res])]
_columns = {
- 'sheet_id': fields.function(_sheet, method=True, string='Sheet',
+ 'sheet_id': fields.function(_sheet, string='Sheet',
type='many2one', relation='hr_timesheet_sheet.sheet',
fnct_search=_sheet_search),
}
@@ -494,6 +494,8 @@ class hr_timesheet_line(osv.osv):
]
def unlink(self, cr, uid, ids, *args, **kwargs):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
self._check(cr, uid, ids)
return super(hr_timesheet_line,self).unlink(cr, uid, ids,*args, **kwargs)
@@ -596,7 +598,7 @@ class hr_attendance(osv.osv):
return [('id', 'in', [x[0] for x in res])]
_columns = {
- 'sheet_id': fields.function(_sheet, method=True, string='Sheet',
+ 'sheet_id': fields.function(_sheet, string='Sheet',
type='many2one', relation='hr_timesheet_sheet.sheet',
fnct_search=_sheet_search),
}
@@ -619,12 +621,16 @@ class hr_attendance(osv.osv):
return res
def unlink(self, cr, uid, ids, *args, **kwargs):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
self._check(cr, uid, ids)
return super(hr_attendance,self).unlink(cr, uid, ids,*args, **kwargs)
def write(self, cr, uid, ids, vals, context=None):
if context is None:
context = {}
+ if isinstance(ids, (int, long)):
+ ids = [ids]
self._check(cr, uid, ids)
res = super(hr_attendance,self).write(cr, uid, ids, vals, context=context)
if 'sheet_id' in context:
diff --git a/addons/idea/idea.py b/addons/idea/idea.py
index 04ae4dff5df..0e6e89f15b5 100644
--- a/addons/idea/idea.py
+++ b/addons/idea/idea.py
@@ -52,7 +52,7 @@ class idea_category(osv.osv):
_columns = {
'name': fields.char('Category', size=64, required=True),
- 'complete_name': fields.function(_categ_name_get_fnc, method=True, type="char", string='Name'),
+ 'complete_name': fields.function(_categ_name_get_fnc, type="char", string='Name'),
'summary': fields.text('Summary'),
'parent_id': fields.many2one('idea.category', 'Parent Categories', ondelete='set null'),
'child_ids': fields.one2many('idea.category', 'parent_id', 'Child Categories'),
@@ -180,10 +180,10 @@ class idea_idea(osv.osv):
'created_date': fields.datetime('Creation date', readonly=True),
'open_date': fields.datetime('Open date', readonly=True, help="Date when an idea opened"),
'vote_ids': fields.one2many('idea.vote', 'idea_id', 'Vote'),
- 'my_vote': fields.function(_vote_read, fnct_inv = _vote_save, string="My Vote", method=True, type="selection", selection=VoteValues),
- 'vote_avg': fields.function(_vote_avg_compute, method=True, string="Average Score", type="float"),
- 'count_votes': fields.function(_vote_count, method=True, string="Count of votes", type="integer"),
- 'count_comments': fields.function(_comment_count, method=True, string="Count of comments", type="integer"),
+ 'my_vote': fields.function(_vote_read, fnct_inv = _vote_save, string="My Vote", type="selection", selection=VoteValues),
+ 'vote_avg': fields.function(_vote_avg_compute, string="Average Score", type="float"),
+ 'count_votes': fields.function(_vote_count, string="Count of votes", type="integer"),
+ 'count_comments': fields.function(_comment_count, string="Count of comments", type="integer"),
'category_id': fields.many2one('idea.category', 'Category', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'state': fields.selection([('draft', 'Draft'),
('open', 'Opened'),
diff --git a/addons/import_base/__init__.py b/addons/import_base/__init__.py
new file mode 100644
index 00000000000..0a5d7fb20b7
--- /dev/null
+++ b/addons/import_base/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Openerp sa ().
+#
+# 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 .
+#
+##############################################################################
+
+import import_framework
+import mapper
\ No newline at end of file
diff --git a/addons/import_base/__openerp__.py b/addons/import_base/__openerp__.py
new file mode 100644
index 00000000000..962541f427a
--- /dev/null
+++ b/addons/import_base/__openerp__.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+{
+ 'name': 'Base framework for module that need to import complex data',
+ 'version': '0.9',
+ 'category': 'Generic Modules',
+ 'description': """
+ This module provide a class import_framework to help importing
+ complex data from other software
+ """,
+ 'author': 'OpenERP SA',
+ 'website': 'http://www.openerp.com',
+ 'depends': ['base'],
+ 'init_xml': [],
+ 'update_xml': [],
+ 'demo_xml': [],
+ 'test': [], #TODO provide test
+ 'installable': True,
+ 'active': False,
+}
diff --git a/addons/import_base/import_framework.py b/addons/import_base/import_framework.py
new file mode 100644
index 00000000000..9b25ecb1ecf
--- /dev/null
+++ b/addons/import_base/import_framework.py
@@ -0,0 +1,432 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+import pprint
+import mapper
+import pooler
+import tools
+
+
+from threading import Thread
+import datetime
+import logging
+pp = pprint.PrettyPrinter(indent=4)
+
+
+
+
+class import_framework(Thread):
+ """
+ This class should be extends,
+ get_data and get_mapping have to extends
+ get_state_map and initialize can be extended
+ for advanced purpose get_default_hook can also be extended
+ @see dummy import for a minimal exemple
+ """
+
+ """
+ for import_object, this domain will avoid to find an already existing object
+ """
+ DO_NOT_FIND_DOMAIN = [('id', '=', 0)]
+
+ def __init__(self, obj, cr, uid, instance_name, module_name, email_to_notify=False, context=None):
+ Thread.__init__(self)
+ self.obj = obj
+ self.cr = cr
+ self.uid = uid
+ self.instance_name = instance_name
+ self.module_name = module_name
+ self.context = context or {}
+ self.email = email_to_notify
+ self.table_list = []
+ self.initialize()
+
+
+
+ """
+ Abstract Method to be implemented in
+ the real instance
+ """
+ def initialize(self):
+ """
+ init before import
+ usually for the login
+ """
+ pass
+
+ def get_data(self, table):
+ """
+ @return: a list of dictionaries
+ each dictionnaries contains the list of pair external_field_name : value
+ """
+ return [{}]
+
+ def get_mapping(self):
+ """
+ @return: { TABLE_NAME : {
+ 'model' : 'openerp.model.name',
+ #if true import the table if not just resolve dependencies, use for meta package, by default => True
+ #Not required
+ 'import' : True or False,
+ #Not required
+ 'dependencies' : [TABLE_1, TABLE_2],
+ #Not required
+ 'hook' : self.function_name, #get the val dict of the object, return the same val dict or False
+ 'map' : { @see mapper
+ 'openerp_field_name' : 'external_field_name', or val('external_field_name')
+ 'openerp_field_id/id' : ref(TABLE_1, 'external_id_field'), #make the mapping between the external id and the xml on the right
+ 'openerp_field2_id/id_parent' : ref(TABLE_1,'external_id_field') #indicate a self dependencies on openerp_field2_id
+ 'state' : map_val('state_equivalent_field', mapping), # use get_state_map to make the mapping between the value of the field and the value of the state
+ 'text_field' : concat('field_1', 'field_2', .., delimiter=':'), #concat the value of the list of field in one
+ 'description_field' : ppconcat('field_1', 'field_2', .., delimiter='\n\t'), #same as above but with a prettier formatting
+ 'field' : call(callable, arg1, arg2, ..), #call the function with all the value, the function should send the value : self.callable
+ 'field' : callable
+ 'field' : call(method, val('external_field') interface of method is self, val where val is the value of the field
+ 'field' : const(value) #always set this field to value
+ + any custom mapper that you will define
+ }
+ },
+
+ }
+ """
+ return {}
+
+ def default_hook(self, val):
+ """
+ this hook will be apply on each table that don't have hook
+ here we define the identity hook
+ """
+ return val
+
+ def _import_table(self, table):
+ data = self.get_data(table)
+ map = self.get_mapping()[table]['map']
+ hook = self.get_mapping()[table].get('hook', self.default_hook)
+ model = self.get_mapping()[table]['model']
+
+ final_data = []
+ for val in data:
+ res = hook(val)
+ if res:
+ final_data.append(res)
+ return self._save_data(model, dict(map), final_data, table)
+
+ def _save_data(self, model, mapping, datas, table):
+ """
+ @param model: the model of the object to import
+ @param table : the external table where the data come from
+ @param mapping : definition of the mapping
+ @see: get_mapping
+ @param datas : list of dictionnaries
+ datas = [data_1, data_2, ..]
+ data_i is a map external field_name => value
+ and each data_i have a external id => in data_id['id']
+ """
+ if not datas:
+ return (0, 'No data in this table')
+ mapping['id'] = 'id_new'
+ res = []
+
+
+ self_dependencies = []
+ for k in mapping.keys():
+ if '_parent' in k:
+ self_dependencies.append((k[:-7], mapping.pop(k)))
+
+ for data in datas:
+ for k, field_name in self_dependencies:
+ data[k] = data.get(field_name) and self._generate_xml_id(data.get(field_name), table)
+
+ data['id_new'] = self._generate_xml_id(data['id'], table)
+ fields, values = self._fields_mapp(data, mapping, table)
+ res.append(values)
+
+ model_obj = self.obj.pool.get(model)
+ if not model_obj:
+ raise ValueError("%s is not a valid model name" % model)
+
+ (p, r, warning, s) = model_obj.import_data(self.cr, self.uid, fields, res, mode='update', current_module=self.module_name, noupdate=True, context=self.context)
+ for (field, field_name) in self_dependencies:
+ self._import_self_dependencies(model_obj, field, datas)
+ return (len(res), warning)
+
+ def _import_self_dependencies(self, obj, parent_field, datas):
+ """
+ @param parent_field: the name of the field that generate a self_dependencies, we call the object referenced in this
+ field the parent of the object
+ @param datas: a list of dictionnaries
+ Dictionnaries need to contains
+ id_new : the xml_id of the object
+ field_new : the xml_id of the parent
+ """
+ fields = ['id', parent_field]
+ for data in datas:
+ if data.get(parent_field):
+ values = [data['id_new'], data[parent_field]]
+ obj.import_data(self.cr, self.uid, fields, [values], mode='update', current_module=self.module_name, noupdate=True, context=self.context)
+
+ def _preprocess_mapping(self, mapping):
+ """
+ Preprocess the mapping :
+ after the preprocces, everything is
+ callable in the val of the dictionary
+
+ use to allow syntaxical sugar like 'field': 'external_field'
+ instead of 'field' : value('external_field')
+ """
+ map = dict(mapping)
+ for key, value in map.items():
+ if isinstance(value, basestring):
+ map[key] = mapper.value(value)
+ #set parent for instance of dbmapper
+ elif isinstance(value, mapper.dbmapper):
+ value.set_parent(self)
+ return map
+
+
+ def _fields_mapp(self,dict_sugar, openerp_dict, table):
+ """
+ call all the mapper and transform data
+ to be compatible with import_data
+ """
+ fields=[]
+ data_lst = []
+ mapping = self._preprocess_mapping(openerp_dict)
+ for key,val in mapping.items():
+ if key not in fields and dict_sugar:
+ fields.append(key)
+ value = val(dict(dict_sugar))
+ data_lst.append(value)
+ return fields, data_lst
+
+ def _generate_xml_id(self, name, table):
+ """
+ @param name: name of the object, has to be unique in for a given table
+ @param table : table where the record we want generate come from
+ @return: a unique xml id for record, the xml_id will be the same given the same table and same name
+ To be used to avoid duplication of data that don't have ids
+ """
+ sugar_instance = self.instance_name
+ name = name.replace('.', '_').replace(',', '_')
+ return sugar_instance + "_" + table + "_" + name
+
+
+ """
+ Public interface of the framework
+ those function can be use in the callable function defined in the mapping
+ """
+ def xml_id_exist(self, table, external_id):
+ """
+ Check if the external id exist in the openerp database
+ in order to check if the id exist the table where it come from
+ should be provide
+ @return the xml_id generated if the external_id exist in the database or false
+ """
+ if not external_id:
+ return False
+
+ xml_id = self._generate_xml_id(external_id, table)
+ id = self.obj.pool.get('ir.model.data').search(self.cr, self.uid, [('name', '=', xml_id), ('module', '=', self.module_name)])
+ return id and xml_id or False
+
+ def name_exist(self, table, name, model):
+ """
+ Check if the object with the name exist in the openerp database
+ in order to check if the id exist the table where it come from
+ should be provide and the model of the object
+ """
+ fields = ['name']
+ data = [name]
+ return self.import_object(fields, data, model, table, name, [('name', '=', name)])
+
+ def get_mapped_id(self, table, external_id, context=None):
+ """
+ @return return the databse id linked with the external_id
+ """
+ if not external_id:
+ return False
+
+ xml_id = self._generate_xml_id(external_id, table)
+ return self.obj.pool.get('ir.model.data').get_object_reference(self.cr, self.uid, self.module_name, xml_id)[1]
+
+ def import_object_mapping(self, mapping, data, model, table, name, domain_search=False):
+ """
+ same as import_objects but instead of two list fields and data,
+ this method take a dictionnaries : external_field : value
+ and the mapping similar to the one define in 'map' key
+ @see import_object, get_mapping
+ """
+ fields, datas = self._fields_mapp(data, mapping, table)
+ return self.import_object(fields, datas, model, table, name, domain_search)
+
+ def import_object(self, fields, data, model, table, name, domain_search=False):
+ """
+ This method will import an object in the openerp, usefull for field that is only a char in sugar and is an object in openerp
+ use import_data that will take care to create/update or do nothing with the data
+ this method return the xml_id
+
+ To be use, when you want to create an object or link if already exist
+ use DO_NOT_LINK_DOMAIN to create always a new object
+ @param fields: list of fields needed to create the object without id
+ @param data: the list of the data, in the same order as the field
+ ex : fields = ['firstname', 'lastname'] ; data = ['John', 'Mc donalds']
+ @param model: the openerp's model of the create/update object
+ @param table: the table where data come from in sugarcrm, no need to fit the real name of openerp name, just need to be unique
+ @param unique_name: the name of the object that we want to create/update get the id
+ @param domain_search : the domain that should find the unique existing record
+
+ @return: the xml_id of the ressources
+ """
+ domain_search = not domain_search and [('name', 'ilike', name)] or domain_search
+ obj = self.obj.pool.get(model)
+ xml_id = self._generate_xml_id(name, table)
+ xml_ref = self.mapped_id_if_exist(model, domain_search, table, name)
+ fields.append('id')
+ data.append(xml_id)
+ obj.import_data(self.cr, self.uid, fields, [data], mode='update', current_module=self.module_name, noupdate=True, context=self.context)
+ return xml_ref or xml_id
+
+
+ def mapped_id_if_exist(self, model, domain, table, name):
+ """
+ To be use when we want link with and existing object, if the object don't exist
+ just ignore.
+ @param domain : search domain to find existing record, should return a unique record
+ @param xml_id: xml_id give to the mapping
+ @param name: external_id or name of the object to create if there is no id
+ @param table: the name of the table of the object to map
+ @return : the xml_id if the record exist in the db, False otherwise
+ """
+ obj = self.obj.pool.get(model)
+ ids = obj.search(self.cr, self.uid, domain, context=self.context)
+ if ids:
+ xml_id = self._generate_xml_id(name, table)
+ ir_model_data_obj = obj.pool.get('ir.model.data')
+ id = ir_model_data_obj._update(self.cr, self.uid, model,
+ self.module_name, {}, mode='update', xml_id=xml_id,
+ noupdate=True, res_id=ids[0], context=self.context)
+ return xml_id
+ return False
+
+
+ def set_table_list(self, table_list):
+ """
+ Set the list of table to import, this method should be call before run
+ @param table_list: the list of external table to import
+ ['Leads', 'Opportunity']
+ """
+ self.table_list = table_list
+
+ def run(self):
+ """
+ Import all data into openerp,
+ this is the Entry point to launch the process of import
+
+
+ """
+ self.data_started = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ self.cr = pooler.get_db(self.cr.dbname).cursor()
+ try:
+ result = []
+ imported = set() #to invoid importing 2 times the sames modules
+ for table in self.table_list:
+ to_import = self.get_mapping()[table].get('import', True)
+ if not table in imported:
+ res = self._resolve_dependencies(self.get_mapping()[table].get('dependencies', []), imported)
+ result.extend(res)
+ if to_import:
+ (position, warning) = self._import_table(table)
+ result.append((table, position, warning))
+ imported.add(table)
+ self.cr.commit()
+
+ finally:
+ self.cr.close()
+ self.date_ended = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ self._send_notification_email(result)
+
+
+ def _resolve_dependencies(self, dep, imported):
+ """
+ import dependencies recursively
+ and avoid to import twice the same table
+ """
+ result = []
+ for dependency in dep:
+ if not dependency in imported:
+ to_import = self.get_mapping()[dependency].get('import', True)
+ res = self._resolve_dependencies(self.get_mapping()[dependency].get('dependencies', []), imported)
+ result.extend(res)
+ if to_import:
+ r = self._import_table(dependency)
+ (position, warning) = r
+ result.append((dependency, position, warning))
+ imported.add(dependency)
+ return result
+
+ def _send_notification_email(self, result):
+ if not self.email:
+ return
+ tools.email_send(
+ 'import_sugarcrm@module.openerp',
+ self.email,
+ self.get_email_subject(result),
+ self.get_email_body(result),
+ )
+ logger = logging.getLogger('import_sugarcam')
+ logger.info("Import finished, notification email sended")
+
+ def get_email_subject(self, result):
+ """
+ This method define the subject of the email send by openerp at the end of import
+ @param result: a list of tuple
+ (table_name, number_of_record_created/updated, warning) for each table
+ @return the subject of the mail
+
+ """
+ return "Import of your data finished at %s" % self.date_ended
+
+ def get_email_body(self, result):
+ """
+ This method define the body of the email send by openerp at the end of import. The body is separated in two part
+ the header (@see get_body_header), and the generate body with the list of table and number of record imported.
+ If you want to keep this it's better to overwrite get_body_header
+ @param result: a list of tuple
+ (table_name, number_of_record_created/updated, warning) for each table
+ @return the subject of the mail
+
+ """
+
+ body = "started at %s and finished at %s \n" % (self.data_started, self.date_ended)
+ for (table, nb, warning) in result:
+ if not warning:
+ warning = "with no warning"
+ else:
+ warning = "with warning : %s" % warning
+ body += "%s records were imported from table %s, %s \n" % (nb, table, warning)
+ return self.get_body_header(result) + "\n\n" + body
+
+ def get_body_header(self, result):
+ """
+ @return the first sentences written in the mail's body
+ """
+ return "The import of data \n instance name : %s \n" % self.instance_name
+
+#For example of use see import_sugarcrm
diff --git a/addons/import_base/mapper.py b/addons/import_base/mapper.py
new file mode 100644
index 00000000000..7f97ed0b615
--- /dev/null
+++ b/addons/import_base/mapper.py
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+
+class mapper(object):
+ """
+ super class for all mapper class
+ They are call before import data
+ to transform the mapping into real value that we
+ will import
+
+ the call function receive a dictionary with external data
+ 'external_field' : value
+ """
+ def __call__(self, external_values):
+ raise NotImplementedError()
+
+class dbmapper(mapper):
+ """
+ Super class for mapper that need to access to
+ data base or any function of the import_framework
+
+ self.parent contains a reference to the instance of
+ the import framework
+ """
+ def set_parent(self, parent):
+ self.parent = parent
+
+
+class concat(mapper):
+ """
+ Use : contact('field_name1', 'field_name2', delimiter='_')
+ concat value of fields using the delimiter, delimiter is optional
+ and by default is a space
+
+ """
+ def __init__(self, *arg, **delimiter):
+ self.arg = arg
+ self.delimiter = delimiter and delimiter.get('delimiter', ' ') or ' '
+
+ def __call__(self, external_values):
+ return self.delimiter.join(map(lambda x : external_values.get(x,''), self.arg))
+
+class ppconcat(mapper):
+ """
+ Use : contact('field_name1', 'field_name2', delimiter='_')
+ concat external field name and value of fields using the delimiter,
+ delimiter is optional and by default is a two line feeds
+
+ """
+ def __init__(self, *arg, **delimiter):
+ self.arg = arg
+ self.delimiter = delimiter and delimiter.get('delimiter', ' ') or '\n\n'
+
+ def __call__(self, external_values):
+ return self.delimiter.join(map(lambda x : x + ": " + external_values.get(x,''), self.arg))
+
+class const(mapper):
+ """
+ Use : const(arg)
+ return always arg
+ """
+ def __init__(self, val):
+ self.val = val
+
+ def __call__(self, external_values):
+ return self.val
+
+class value(mapper):
+ """
+ Use : value(external_field_name)
+ Return the value of the external field name
+ this is equivalent to the a single string
+
+ usefull for call if you want your call get the value
+ and don't care about the name of the field
+ call(self.method, value('field1'))
+ """
+ def __init__(self, val, default='', fallback=False):
+ self.val = val
+ self.default = default
+ self.fallback = fallback
+
+ def __call__(self, external_values):
+ val = external_values.get(self.val, self.default)
+ if self.fallback and (not val or val == self.default):
+ val = external_values.get(self.fallback, self.default)
+ return val
+
+
+
+class map_val(mapper):
+ """
+ Use : map_val(external_field, val_mapping)
+ where val_mapping is a dictionary
+ with external_val : openerp_val
+
+ usefull for selection field like state
+ to map value
+ """
+ def __init__(self, val, map, default='draft'):
+ self.val = value(val)
+ self.map = map
+ self.default = default
+
+ def __call__(self, external_values):
+ return self.map.get(self.val(external_values), self.default)
+
+class ref(dbmapper):
+ """
+ Use : ref(table_name, external_id)
+ return the xml_id of the ressource
+
+ to associate an already imported object with the current object
+ """
+ def __init__(self, table, field_name):
+ self.table = table
+ self.field_name = field_name
+
+ def __call__(self, external_values):
+ return self.parent.xml_id_exist(self.table, external_values.get(self.field_name))
+
+class refbyname(dbmapper):
+ """
+ Use : refbyname(table_name, external_name, res.model)
+ same as ref but use the name of the ressource to find it
+ """
+ def __init__(self, table, field_name, model):
+ self.table = table
+ self.field_name = field_name
+ self.model = model
+
+ def __call__(self, external_values):
+ v = external_values.get(self.field_name, '')
+ return self.parent.name_exist(self.table, v , self.model)
+
+class call(mapper):
+ """
+ Use : call(function, arg1, arg2)
+ to call the function with external val follow by the arg specified
+ """
+ def __init__(self, fun, *arg):
+ self.fun = fun
+ self.arg = arg
+
+ def __call__(self, external_values):
+ args = []
+ for arg in self.arg:
+ if isinstance(arg, mapper):
+ args.append(arg(external_values))
+ else:
+ args.append(arg)
+ return self.fun(external_values, *args)
+
+
\ No newline at end of file
diff --git a/addons/import_google/__init__.py b/addons/import_google/__init__.py
new file mode 100644
index 00000000000..7ca8ce67ab3
--- /dev/null
+++ b/addons/import_google/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import partner
+import wizard
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/import_google/__openerp__.py b/addons/import_google/__openerp__.py
new file mode 100644
index 00000000000..f1ab89a041d
--- /dev/null
+++ b/addons/import_google/__openerp__.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+{
+ 'name': 'Google Import',
+ 'version': '1.0',
+ 'category': 'Generic Modules/Others',
+ 'description': """The module adds google contact in partner address and add google calendar events details in Meeting""",
+ 'author': 'OpenERP SA',
+ 'website': 'http://www.openerp.com',
+ 'depends': ['base', 'google_base_account','crm'],
+ 'init_xml': [],
+ 'update_xml': ['security/ir.model.access.csv',
+ 'sync_google_calendar_view.xml',
+ 'wizard/import_google_data_view.xml',
+ 'wizard/google_import_message_view.xml'
+
+ ],
+ 'demo_xml': [],
+ 'test': [
+ #'test/test_sync_google_contact_import_partner.yml',
+ # 'test/test_sync_google_contact_import_address.yml',
+ #'test/test_sync_google_calendar.yml',
+ ],
+ 'installable': True,
+ 'active': False,
+ 'certificate': '',
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/import_google/partner.py b/addons/import_google/partner.py
new file mode 100644
index 00000000000..232f18d06a3
--- /dev/null
+++ b/addons/import_google/partner.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+from osv import fields,osv
+
+class crm_case_categ(osv.osv):
+ """ Category of Case """
+ _inherit = "crm.case.categ"
+ _columns = {
+ 'user_id': fields.many2one('res.users', 'User')
+ }
+crm_case_categ()
+# vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/import_google/security/ir.model.access.csv b/addons/import_google/security/ir.model.access.csv
new file mode 100644
index 00000000000..50b689efa69
--- /dev/null
+++ b/addons/import_google/security/ir.model.access.csv
@@ -0,0 +1,5 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_res_users_partner_manager","google.res.partner.manager","base.model_ir_model_data","base.group_partner_manager",1,1,1,0
+"access_ir_model_data_partner_manager","ir.model.data.partner.manager","base.model_res_users","base.group_partner_manager",1,1,0,0
+"access_google_import_message_partner_manager","google.import.message.partner.manager","model_google_import_message","base.group_partner_manager",1,1,0,0
+
diff --git a/addons/import_google/sync_google_calendar_view.xml b/addons/import_google/sync_google_calendar_view.xml
new file mode 100644
index 00000000000..58e1e55efd0
--- /dev/null
+++ b/addons/import_google/sync_google_calendar_view.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ CRM - Meetings Form (Inherited)
+ crm.meeting
+ form
+
+
+
+
+
+
+
+
+
+ CRM - Meetings Tree (Inherited)
+ crm.meeting
+ tree
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/import_google/test/test_sync_google_calendar.yml b/addons/import_google/test/test_sync_google_calendar.yml
new file mode 100644
index 00000000000..28863f358bb
--- /dev/null
+++ b/addons/import_google/test/test_sync_google_calendar.yml
@@ -0,0 +1,36 @@
+-
+ In order to test google calendar feature with OpenERP, I import events from
+ a google account and store them in Meetings.
+- |
+ I create a record for the gmail account for which I want to import the contacts.
+-
+ !record {model: google.login, id: google_login_id0}:
+ user: testmail.openerp@gmail.com
+ password: openerptiny
+- |
+ I login into that account.
+-
+ !python {model: google.login}: |
+ self.login(cr, uid, [ref('google_login_id0')], context)
+- |
+ Now I want to import all the events from all the calendars in the user account.
+- |
+ I select all calendars.
+-
+ !record {model: synchronize.google.import, id: synchronize_google_import_id0}:
+ calendar_name: all
+- |
+ I import the events from the google calendar.
+-
+ !python {model: synchronize.google.import}: |
+ self.import_google(cr, uid, [ref('synchronize_google_import_id0')], context={'calendar':True})
+- |
+ Now I check my meetings are created or not.
+-
+ !python {model: crm.meeting}: |
+ model_obj = self.pool.get('ir.model.data')
+ meeting_ids = self.search(cr, uid, [])
+ model_ids = model_obj.search(cr, uid, [('res_id','in',meeting_ids),('model','=','crm.meeting'),('module','=','synchronize_google')])
+ assert model_ids, 'Meetings not created !'
+
+
diff --git a/addons/import_google/test/test_sync_google_contact_import_address.yml b/addons/import_google/test/test_sync_google_contact_import_address.yml
new file mode 100644
index 00000000000..b1a8f9a2e09
--- /dev/null
+++ b/addons/import_google/test/test_sync_google_contact_import_address.yml
@@ -0,0 +1,34 @@
+-
+ In order to test Importing contacts from any google account into OpenERP,
+ I use a gmail account and import the contact details and store them as Partner addresses.
+- |
+ I create a record for the gmail account for which I want to import the contacts.
+-
+ !record {model: google.login, id: google_login_id0}:
+ user: testmail.openerp@gmail.com
+ password: openerptiny
+- |
+ I login into that account.
+-
+ !python {model: google.login}: |
+ self.login(cr, uid, [ref('google_login_id0')], context)
+- |
+ Now I select from which group I want to get the contact details.
+-
+ !record {model: synchronize.google.import, id: synchronize_google_import_id0}:
+ create_partner: create_address
+ group_name: all
+ calendar_name: all
+- |
+ I import the contacts and I also check if the contact already exists in db and updates the address.
+-
+ !python {model: synchronize.google.import}: |
+ self.import_google(cr, uid, [ref('synchronize_google_import_id0')], context={'contact':True})
+- |
+ I check whether the Contacts are created in Partner address or not.
+-
+ !python {model: res.partner.address}: |
+ addr_obj = self.pool.get('ir.model.data')
+ data_ids = addr_obj.search(cr, uid, [('model','=','res.partner.address'),('module','=','synchronize_google')])
+ assert data_ids, 'Addresses not created !'
+
\ No newline at end of file
diff --git a/addons/import_google/test/test_sync_google_contact_import_partner.yml b/addons/import_google/test/test_sync_google_contact_import_partner.yml
new file mode 100644
index 00000000000..4eadbf0f100
--- /dev/null
+++ b/addons/import_google/test/test_sync_google_contact_import_partner.yml
@@ -0,0 +1,36 @@
+-
+ In order to test Importing contacts from any google account into OpenERP,
+ I use a gmail account and import the contact details and create Partners.
+- |
+ I create a record for the gmail account for which I want to import the contacts.
+-
+ !record {model: google.login, id: google_login_id1}:
+ user: testmail.openerp@gmail.com
+ password: openerptiny
+- |
+ I login into that account.
+-
+ !python {model: google.login}: |
+ self.login(cr, uid, [ref('google_login_id1')], context)
+- |
+ Now I select from which group I want to get the contact details and I want to create partner for all contacts.
+-
+ !record {model: synchronize.google.import, id: synchronize_google_import_id1}:
+ create_partner: create_all
+ group_name: all
+- |
+ I import the contacts.
+-
+ !python {model: synchronize.google.import}: |
+ self.import_google(cr, uid, [ref('synchronize_google_import_id1')], context={'contact':True})
+- |
+ I check whether the Partners are created or not.
+-
+ !python {model: res.partner.address }: |
+ addr_obj = self.pool.get('ir.model.data')
+ addr_ids = addr_obj.search(cr, uid, [])
+ data_ids = addr_obj.search(cr, uid, [('model','=','res.partner.address'),('module','=','synchronize_google')])
+ address_ids = map(lambda x: x.res_id, [child for child in addr_obj.browse(cr, uid, data_ids) if child.res_id])
+ partner_ids = map(lambda x: x.partner_id.id, [addr for addr in self.browse(cr, uid, address_ids) if addr.partner_id])
+ assert partner_ids, 'Partners not created !'
+
\ No newline at end of file
diff --git a/addons/import_google/wizard/__init__.py b/addons/import_google/wizard/__init__.py
new file mode 100644
index 00000000000..41c118a0ef3
--- /dev/null
+++ b/addons/import_google/wizard/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+import import_google
+import import_google_data
+import google_import_message
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/import_google/wizard/google_import_message.py b/addons/import_google/wizard/google_import_message.py
new file mode 100644
index 00000000000..5e2b2b6f4b1
--- /dev/null
+++ b/addons/import_google/wizard/google_import_message.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+from osv import osv
+from osv import fields
+
+
+class google_import_message(osv.osv):
+ """Import Message"""
+
+ _name = "google.import.message"
+ _description = "Import Message"
+ _columns = {
+ 'name': fields.text('Message', readonly=True),
+ }
+
+ def default_get(self, cr, uid, fields, context=None):
+ if context == None:
+ context = {}
+ res = super(google_import_message, self).default_get(cr, uid, fields, context=context)
+ res.update({'name': context.get('message')})
+ return res
+
+google_import_message()
diff --git a/addons/import_google/wizard/google_import_message_view.xml b/addons/import_google/wizard/google_import_message_view.xml
new file mode 100644
index 00000000000..0ea8b15f286
--- /dev/null
+++ b/addons/import_google/wizard/google_import_message_view.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ google.import.message.form
+ google.import.message
+ form
+
+
+
+
+
+
diff --git a/addons/import_google/wizard/import_google.py b/addons/import_google/wizard/import_google.py
new file mode 100644
index 00000000000..87155c806c6
--- /dev/null
+++ b/addons/import_google/wizard/import_google.py
@@ -0,0 +1,355 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import re
+import urllib
+import dateutil
+import pytz
+from dateutil import *
+from pytz import timezone
+from datetime import datetime
+import time
+from osv import *
+try:
+ import gdata
+ import gdata.contacts.service
+ import gdata.calendar.service
+ import gdata.contacts
+ import gdata.calendar
+except ImportError:
+ raise osv.except_osv(_('Google Contacts Import Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list'))
+from import_base.import_framework import *
+from import_base.mapper import *
+
+class google_import(import_framework):
+
+ gd_client = False
+ calendars = False
+ contact = False
+ DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
+ TABLE_CONTACT = 'Contact'
+ TABLE_ADDRESS ='Address'
+ TABLE_EVENT = 'Events'
+
+ def initialize(self):
+ google = self.obj.pool.get('google.login')
+ self.external_id_field = 'Id'
+ self.gd_client = google.google_login(self.context.get('user'),
+ self.context.get('password'),
+ self.context.get('instance'))
+
+ if self.context.get('instance') and self.context.get('instance') == 'contact':
+ self.contact = self.context.get('contact')
+ if self.context.get('instance') and self.context.get('instance') == 'calendar':
+ self.calendars = self.context.get('calendars')
+
+ def get_mapping(self):
+ return {
+ self.TABLE_EVENT: self.get_event_mapping(),
+ self.TABLE_CONTACT: self.get_contact_mapping(),
+ self.TABLE_ADDRESS: self.get_address_mapping(),
+ }
+
+ def get_data(self, table):
+ data_fetching_function = {
+ self.TABLE_CONTACT: self.get_contact,
+ self.TABLE_ADDRESS: self.get_contact,
+ self.TABLE_EVENT: self.get_events,
+ }
+
+ return data_fetching_function.get(table)()
+
+
+ def _get_tinydates(self, stime, etime, au_tz):
+ stime = dateutil.parser.parse(stime)
+ etime = dateutil.parser.parse(etime)
+ try:
+ au_dt = au_tz.normalize(stime.replace(tzinfo=pytz.utc).astimezone(au_tz))
+ timestring = datetime.datetime(*au_dt.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S')
+ au_dt = au_tz.normalize(etime.replace(tzinfo=pytz.utc).astimezone(au_tz))
+ timestring_end = datetime.datetime(*au_dt.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S')
+ except:
+ timestring = datetime.datetime(*stime.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S')
+ timestring_end = datetime.datetime(*etime.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S')
+ return (timestring, timestring_end)
+
+ def _get_rules(self, datas):
+ new_val = {}
+ if datas['FREQ'] == 'WEEKLY' and datas.get('BYDAY'):
+ for day in datas['BYDAY'].split(','):
+ new_val[day.lower()] = True
+ datas.pop('BYDAY')
+
+ if datas.get('UNTIL'):
+ until = parser.parse(''.join((re.compile('\d')).findall(datas.get('UNTIL'))))
+ new_val['end_date'] = until.strftime('%Y-%m-%d')
+ new_val['end_type'] = 'end_date'
+ datas.pop('UNTIL')
+
+ if datas.get('COUNT'):
+ new_val['count'] = datas.get('COUNT')
+ new_val['end_type'] = 'count'
+ datas.pop('COUNT')
+
+ if datas.get('INTERVAL'):
+ new_val['interval'] = datas.get('INTERVAL')
+ else:
+ new_val['interval'] = 1
+
+ if datas.get('BYMONTHDAY'):
+ new_val['day'] = datas.get('BYMONTHDAY')
+ datas.pop('BYMONTHDAY')
+ new_val['select1'] = 'date'
+
+ if datas.get('BYDAY'):
+ d = datas.get('BYDAY')
+ if '-' in d:
+ new_val['byday'] = d[:2]
+ new_val['week_list'] = d[2:4].upper()
+ else:
+ new_val['byday'] = d[:1]
+ new_val['week_list'] = d[1:3].upper()
+ new_val['select1'] = 'day'
+
+ if datas.get('BYMONTH'):
+ new_val['month_list'] = datas.get('BYMONTH')
+ datas.pop('bymonth')
+ return new_val
+
+
+ def _get_repeat_status(self, str_google):
+ rrule = str_google[str_google.find('FREQ'):str_google.find('\nBEGIN')]
+ status = {}
+ for rule in rrule.split(';'):
+ status[rule.split('=')[0]] = rule.split('=')[-1:] and rule.split('=')[-1:][0] or ''
+ rules = self._get_rules(status)
+ if status.get('FREQ') == 'WEEKLY':
+ status.update({'rrule_type': 'weekly'})
+ status.pop('FREQ')
+ elif status.get('FREQ') == 'DAILY':
+ status.update({'rrule_type': 'daily'})
+ status.pop('FREQ')
+ elif status.get('FREQ') == 'MONTHLY':
+ status.update({'rrule_type': 'monthly'})
+ status.pop('FREQ')
+ elif status.get('FREQ') == 'YEARLY':
+ status.update({'rrule_type': 'yearly'})
+ status.pop('FREQ')
+ status.update(rules)
+ return status
+
+
+ def _get_repeat_dates(self, x):
+ if len(x) > 4:
+ if x[3].startswith('BY'):
+ zone_time = x[4].split('+')[-1:][0].split(':')[0][:4]
+ else:
+ zone_time = x[3].split('+')[-1:][0].split(':')[0][:4]
+ else:
+ zone_time = x[2].split('+')[-1:][0].split(':')[0][:4]
+ tz_format = zone_time[:2]+':'+zone_time[2:]
+ repeat_start = x[1].split('\n')[0].split(':')[1]
+ repeat_end = x[2].split('\n')[0].split(':')[1]
+ o = repeat_start.split('T')
+ repeat_start = str(o[0][:4]) + '-' + str(o[0][4:6]) + '-' + str(o[0][6:8])
+ if len(o) == 2:
+ repeat_start += ' ' + str(o[1][:2]) + ':' + str(o[1][2:4]) + ':' + str(o[1][4:6])
+ else:
+ repeat_start += ' ' + '00' + ':' + '00' + ':' + '00'
+ p = repeat_end.split('T')
+ repeat_end = str(p[0][:4]) + '-' + str(p[0][4:6]) + '-' + str(p[0][6:8])
+ if len(p) == 2:
+ repeat_end += ' ' + str(p[1][:2]) + ':' + str(p[1][2:4]) + ':' + str(p[1][4:6])
+ else:
+ repeat_end += ' ' + '00' + ':' + '00' + ':' + '00'
+ return (repeat_start, repeat_end, tz_format)
+
+ def get_events(self):
+ if 'tz' in self.context and self.context['tz']:
+ time_zone = self.context['tz']
+ else:
+ time_zone = tools.get_server_timezone()
+ au_tz = timezone(time_zone)
+ event_vals = []
+ for cal in self.calendars:
+ events_query = gdata.calendar.service.CalendarEventQuery(user=urllib.unquote(cal.split('/')[~0]))
+ events_query.start_index = 1
+ events_query.max_results = 1000
+ event_feed = self.gd_client.GetCalendarEventFeed(events_query.ToUri())
+ for feed in event_feed.entry:
+ event = {
+ 'recurrency': False,
+ 'end_date' : False,
+ 'end_type' : False,
+ 'byday': 0,
+ 'count' : 0,
+ 'interval': 1,
+ 'day': False,
+ 'select1': False,
+ 'week_list': "",
+ 'month_list': False,
+ 'rrule_type': False,
+ }
+
+ timestring = timestring_end = datetime.datetime.now().strftime(self.DATETIME_FORMAT)
+ if feed.when:
+ timestring, timestring_end = self._get_tinydates(feed.when[0].start_time, feed.when[0].end_time, au_tz)
+ else:
+ x = feed.recurrence.text.split(';')
+ repeat_status = self._get_repeat_status(feed.recurrence.text)
+ repeat_start, repeat_end, zone_time = self._get_repeat_dates(x)
+ timestring = time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(repeat_start, "%Y-%m-%d %H:%M:%S"))
+ timestring_end = time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(repeat_end, "%Y-%m-%d %H:%M:%S"))
+ if repeat_status:
+ repeat_status.update({'recurrency': True})
+ event.update(repeat_status)
+
+ event.update({'id' : feed.id.text,
+ 'DateStart': timestring,
+ 'DateEnd': timestring_end,
+ 'Category':event_feed.title.text,
+ 'Name': feed.title.text or 'No title',
+ 'Description': feed.content.text,
+ })
+ event_vals.append(event)
+ return event_vals
+
+
+ def get_event_category(self, val, name):
+ fields = ['name', 'object_id']
+ nameid = 'event_category_'+name
+ data = [name, 'crm.meeting']
+ return self.import_object(fields, data, 'crm.case.categ', "crm_case_categ", nameid, [('name', 'ilike', name)])
+
+ def get_rec(self, val):
+ if val.get("recurrency"):
+ return "1"
+ return "0"
+
+ def get_event_mapping(self):
+ return {
+ 'model': 'crm.meeting',
+ 'map': {
+ 'id': 'id',
+ 'name': 'Name',
+ 'description': 'Description',
+ 'email_from': 'Email',
+ 'date': 'DateStart',
+ 'date_deadline': 'DateEnd',
+ 'categ_id/id': call(self.get_event_category, value('Category')),
+ 'recurrency': self.get_rec,
+ 'end_date' : 'end_date',
+ 'end_type' : 'end_type',
+ 'byday':'byday',
+ 'count' : 'count',
+ 'interval': 'interval',
+ 'day': 'day',
+ 'select1': 'date',
+ 'week_list': 'week_list',
+ 'month_list':'month_list',
+ 'rrule_type': 'rrule_type',
+ }
+ }
+
+
+ def get_contact(self):
+ table = self.context.get('table')[0]
+ datas = []
+ if self.context.get('group_name'):
+ query = gdata.contacts.service.ContactsQuery()
+ query.group = self.context.get('group_name')
+ self.contact = self.gd_client.GetContactsFeed(query.ToUri())
+ else:
+ self.contact = self.gd_client.GetContactsFeed()
+ while self.contact:
+ for entry in self.contact.entry:
+ data = {}
+ data['id'] = entry.id.text
+ name = tools.ustr(entry.title.text)
+ if name == "None":
+ name = entry.email[0].address
+ data['name'] = name
+ emails = ','.join(email.address for email in entry.email)
+ data['email'] = emails
+ if table == 'Contact':
+ data.update({'customer': str(self.context.get('customer')),
+ 'supplier': str(self.context.get('supplier'))})
+ if entry.organization:
+ if entry.organization.org_name:
+ data.update({'company': entry.organization.org_name.text})
+ if entry.organization.org_title:
+ data.update ({'function': entry.organization.org_title.text})
+ if entry.phone_number:
+ for phone in entry.phone_number:
+ if phone.rel == gdata.contacts.REL_WORK:
+ data['phone'] = phone.text
+ if phone.rel == gdata.contacts.PHONE_MOBILE:
+ data['mobile'] = phone.text
+ if phone.rel == gdata.contacts.PHONE_WORK_FAX:
+ data['fax'] = phone.text
+ datas.append(data)
+ next = self.contact.GetNextLink()
+ self.contact = next and self.gd_client.GetContactsFeed(next.href) or None
+ return datas
+
+
+
+ def get_contact_mapping(self):
+ return {
+ 'model': 'res.partner',
+ 'dependencies': [self.TABLE_ADDRESS],
+ 'map': {
+ 'id':'id',
+ 'name': value('company', fallback='name'),
+ 'customer': 'customer',
+ 'supplier': 'supplier',
+ 'address/id': ref(self.TABLE_ADDRESS, 'id'),
+ }
+ }
+
+ def get_partner_id(self, val):
+ partner_id = False
+ company_pool = self.obj.pool.get('res.partner')
+ if 'company' in val:
+ partner_ids = company_pool.search(self.cr, self.uid, [('name', '=', val.get('company'))])
+ return partner_ids and partner_ids[0] or False
+ contact = self.xml_id_exist(self.TABLE_CONTACT, val.get('id'))
+ if contact:
+ partner_id = self.get_mapped_id(self.TABLE_CONTACT, val.get('id'))
+ return partner_id
+
+ def get_address_mapping(self):
+ return {
+ 'model': 'res.partner.address',
+ 'dependencies': [],
+ 'map': {
+ 'id':'id',
+ 'partner_id/.id': self.get_partner_id,
+ 'name': 'name',
+ 'city': 'city',
+ 'phone': 'phone',
+ 'mobile': 'mobile',
+ 'email': 'email',
+ 'fax': 'fax',
+ 'function': 'function'
+ }
+
+ }
diff --git a/addons/import_google/wizard/import_google_data.py b/addons/import_google/wizard/import_google_data.py
new file mode 100644
index 00000000000..fae404d103a
--- /dev/null
+++ b/addons/import_google/wizard/import_google_data.py
@@ -0,0 +1,182 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+import datetime
+
+try:
+ import gdata
+ import gdata.contacts.service
+ import gdata.contacts
+except ImportError:
+ raise osv.except_osv(_('Google Contacts Import Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list'))
+from osv import fields
+from osv import osv
+from tools.translate import _
+from import_google import google_import
+
+
+class google_login_contact(osv.osv_memory):
+
+ _inherit = 'google.login'
+
+ def _get_next_action(self, cr, uid, context=None):
+ data_obj = self.pool.get('ir.model.data')
+ data_id = data_obj._get_id(cr, uid, 'import_google', 'view_synchronize_google_contact_import_form')
+ view_id = False
+ if context.get('contact'):
+ data_id = data_obj._get_id(cr, uid, 'import_google', 'view_synchronize_google_contact_import_form')
+ if context.get('calendar'):
+ data_id = data_obj._get_id(cr, uid, 'import_google', 'view_synchronize_google_calendar_import_form')
+ if data_id:
+ view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
+ value = {
+ 'name': _('Import google'),
+ 'view_type': 'form',
+ 'view_mode': 'form,tree',
+ 'res_model': 'synchronize.google.import',
+ 'view_id': False,
+ 'context': context,
+ 'views': [(view_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+ return value
+
+google_login_contact()
+
+class synchronize_google(osv.osv_memory):
+ _name = 'synchronize.google.import'
+
+ def _get_group(self, cr, uid, context=None):
+ user_obj = self.pool.get('res.users').browse(cr, uid, uid)
+ google=self.pool.get('google.login')
+ if not user_obj.gmail_user or not user_obj.gmail_password:
+ raise osv.except_osv(_('Warning !'), _("No Google Username or password Defined for user.\nPlease define in user view"))
+ gd_client = google.google_login(user_obj.gmail_user,user_obj.gmail_password,type='group')
+ if not gd_client:
+ raise osv.except_osv(_('Error'), _("Authentication fail check the user and password !"))
+
+ res = []
+ query = gdata.contacts.service.GroupsQuery(feed='/m8/feeds/groups/default/full')
+ if gd_client:
+ groups = gd_client.GetFeed(query.ToUri())
+ for grp in groups.entry:
+ res.append((grp.id.text, grp.title.text))
+ res.append(('all','All Groups'))
+ return res
+
+ def _get_calendars(self, cr, uid, context=None):
+ user_obj = self.pool.get('res.users').browse(cr, uid, uid)
+ google = self.pool.get('google.login')
+ res = []
+ try:
+ gd_client = google.google_login(user_obj.gmail_user, user_obj.gmail_password, type='calendar')
+ calendars = gd_client.GetAllCalendarsFeed()
+ for cal in calendars.entry:
+ res.append((cal.id.text, cal.title.text))
+ except Exception, e:
+ raise osv.except_osv('Error !', e.args[0].get('body'))
+ res.append(('all', 'All Calendars'))
+ return res
+
+ _columns = {
+ 'create_partner': fields.selection([('create_all','Create partner for each contact'),('create_address','Import only address')],'Options'),
+ 'customer': fields.boolean('Customer', help="Check this box to set newly created partner as Customer."),
+ 'supplier': fields.boolean('Supplier', help="Check this box to set newly created partner as Supplier."),
+ 'group_name': fields.selection(_get_group, "Group Name", size=32,help="Choose which group to import, By default it takes all."),
+ 'calendar_name': fields.selection(_get_calendars, "Calendar Name", size=32),
+ }
+
+ _defaults = {
+ 'create_partner': 'create_all',
+ 'group_name': 'all',
+ 'calendar_name': 'all',
+ }
+
+ def import_google(self, cr, uid, ids, context=None):
+ if context == None:
+ context = {}
+ if not ids:
+ return {'type': 'ir.actions.act_window_close'}
+ obj = self.browse(cr, uid, ids, context=context)[0]
+ cust = obj.customer
+ sup = obj.supplier
+ tables=[]
+ user_obj = self.pool.get('res.users').browse(cr, uid, uid)
+
+ gmail_user = user_obj.gmail_user
+ gmail_pwd = user_obj.gmail_password
+ google = self.pool.get('google.login')
+ if not gmail_user or not gmail_pwd:
+ raise osv.except_osv(_('Error'), _("Invalid login detail !\n Specify Username/Password."))
+
+ if context.get('contact'):
+ msg = " You're Contact are import in background, a email will be send when the process is finished to %s"%(user_obj.gmail_user)
+ gd_client = google.google_login(gmail_user, gmail_pwd, type='contact')
+ if not gd_client:
+ raise osv.except_osv(_('Error'), _("Please specify correct user and password !"))
+ if obj.group_name not in ['all']:
+ context.update({ 'group_name': obj.group_name})
+ if obj.create_partner=='create_all':
+ tables.append('Contact')
+ else:
+ tables.append('Address')
+ context.update({'user': gmail_user,
+ 'password': gmail_pwd,
+ 'instance': 'contact',
+ 'table':tables,
+ 'customer':cust,
+ 'supplier':sup})
+
+ elif context.get('calendar'):
+ msg = " You're Meeting are import in background, a email will be send when the process is finished to %s"%(user_obj.gmail_user)
+
+ tables.append('Events')
+ current_rec = self.browse(cr, uid, ids, context=context)
+ calendars = False
+ for rec in current_rec:
+ if rec.calendar_name != 'all':
+ calendars = [rec.calendar_name]
+ else:
+ calendars = map(lambda x: x[0], [cal for cal in self._get_calendars(cr, uid, context) if cal[0] != 'all'])
+ context.update({'user': gmail_user,
+ 'password': gmail_pwd,
+ 'calendars': calendars,
+ 'instance': 'calendar'})
+ imp = google_import(self, cr, uid,'import_google' , "synchronize_google", gmail_user, context)
+ imp.set_table_list(tables)
+ imp.start()
+ context.update({'message': msg})
+ obj_model = self.pool.get('ir.model.data')
+ model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_google_import_message_form')])
+ resource_id = obj_model.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'google.import.message',
+ 'views': [(resource_id,'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context': context,
+ }
+
+synchronize_google()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/import_google/wizard/import_google_data_view.xml b/addons/import_google/wizard/import_google_data_view.xml
new file mode 100644
index 00000000000..b35e97645e7
--- /dev/null
+++ b/addons/import_google/wizard/import_google_data_view.xml
@@ -0,0 +1,91 @@
+
+
+
+
+ synchronize.base.form
+ synchronize.google.import
+ form
+
+
+
+
+
+
+
+
+ synchronize.google.calendar.form
+ synchronize.google.import
+ form
+
+
+
+
+
+
+ Import Google Calendar
+ ir.actions.act_window
+ google.login
+ form
+ form
+ new
+ {'calendar':True}
+
+
+
+
+ Import Google Contacts
+ ir.actions.act_window
+ google.login
+ form
+ form
+ new
+ {'contact':True}
+
+
+
+
+
+
+
+
+
diff --git a/addons/l10n_be/i18n/de.po b/addons/l10n_be/i18n/de.po
index a6dec54c06d..ca6658cb201 100644
--- a/addons/l10n_be/i18n/de.po
+++ b/addons/l10n_be/i18n/de.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-05-19 19:08+0000\n"
-"Last-Translator: Daniel Fai \n"
+"PO-Revision-Date: 2011-06-24 17:11+0000\n"
+"Last-Translator: Marco Dieckhoff \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: 2011-05-20 04:34+0000\n"
-"X-Generator: Launchpad (build 12959)\n"
+"X-Launchpad-Export-Date: 2011-06-25 04:58+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: l10n_be
#: field:partner.vat,test_xml:0
@@ -42,7 +42,7 @@ msgstr "Umsatzsteuernummer ist keinem Partner zugeordnet."
#. module: l10n_be
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
-msgstr ""
+msgstr "Fehler! Sie können keine rekursiven Unternehmen erzeugen."
#. module: l10n_be
#: code:addons/l10n_be/wizard/l10_be_partner_vat_listing.py:155
@@ -149,6 +149,7 @@ msgstr "Jährlicher Bericht über umsatzsteuerpflichtige Kunden"
#: model:ir.module.module,shortdesc:l10n_be.module_meta_information
msgid "Belgium - Plan Comptable Minimum Normalise"
msgstr ""
+"Belgien - Genormter minimaler Kontenrahmen (Plan Comptable Minimum Normalise)"
#. module: l10n_be
#: view:partner.vat.list:0
@@ -266,7 +267,7 @@ msgstr "Anzahl"
#. module: l10n_be
#: view:l1on_be.vat.declaration:0
msgid "Is Last Declaration"
-msgstr ""
+msgstr "Letzte Erklärung"
#. module: l10n_be
#: model:ir.model,name:l10n_be.model_partner_vat
@@ -304,7 +305,7 @@ msgstr ""
#. module: l10n_be
#: field:vat.listing.clients,turnover:0
msgid "Turnover"
-msgstr ""
+msgstr "Umsatz"
#. module: l10n_be
#: view:l1on_be.vat.declaration:0
diff --git a/addons/l10n_ch/invoice.py b/addons/l10n_ch/invoice.py
index af9beac55e0..4896931b77b 100644
--- a/addons/l10n_ch/invoice.py
+++ b/addons/l10n_ch/invoice.py
@@ -73,7 +73,7 @@ class account_invoice(osv.osv):
help='The partner bank account to pay\nKeep empty to use the default'
),
### Amount to pay
- 'amount_to_pay': fields.function(_amount_to_pay, method=True,
+ 'amount_to_pay': fields.function(_amount_to_pay,
type='float', string='Amount to be paid',
help='The amount which should be paid at the current date\n' \
'minus the amount which is already in payment order'),
diff --git a/addons/lunch/lunch.py b/addons/lunch/lunch.py
index 1499dd4414e..c940d23fa40 100644
--- a/addons/lunch/lunch.py
+++ b/addons/lunch/lunch.py
@@ -81,7 +81,7 @@ class lunch_cashbox(osv.osv):
_columns = {
'manager': fields.many2one('res.users', 'Manager'),
'name': fields.char('Name', size=30, required=True, unique = True),
- 'sum_remain': fields.function(amount_available, method=True, string='Total Remaining'),
+ 'sum_remain': fields.function(amount_available, string='Total Remaining'),
}
lunch_cashbox()
@@ -140,7 +140,7 @@ class lunch_order(osv.osv):
states = {'draft':[('readonly', False)]}),
'state': fields.selection([('draft', 'Draft'), ('confirmed', 'Confirmed'), ], \
'State', readonly=True, select=True),
- 'price': fields.function(_price_get, method=True, string="Price"),
+ 'price': fields.function(_price_get, string="Price"),
'category': fields.many2one('lunch.category','Category'),
}
diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py
index c67a2668192..4fa70484666 100644
--- a/addons/mail_gateway/mail_gateway.py
+++ b/addons/mail_gateway/mail_gateway.py
@@ -80,7 +80,7 @@ class mailgate_thread(osv.osv):
for thread in self.browse(cr, uid, ids, context=context):
l=[]
for message in thread.message_ids:
- l.append((message.user_id and message.user_id.email) or '')
+ l.append((message.user_id and message.user_id.user_email) or '')
l.append(message.email_from or '')
l.append(message.email_cc or '')
res[thread.id] = l
@@ -281,7 +281,7 @@ class mailgate_message(osv.osv):
'description': fields.text('Description', readonly=True),
'partner_id': fields.many2one('res.partner', 'Partner', required=False),
'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments', readonly=True),
- 'display_text': fields.function(_get_display_text, method=True, type='text', size="512", string='Display Text'),
+ 'display_text': fields.function(_get_display_text, type='text', size="512", string='Display Text'),
}
def init(self, cr):
@@ -519,7 +519,7 @@ class mailgate_tool(osv.osv_memory):
body = content
has_plain_text = True
elif part.get_content_maintype() in ('application', 'image'):
- if filename :
+ if filename and attach:
attachments[filename] = part.get_payload(decode=True)
else:
res = part.get_payload(decode=True)
diff --git a/addons/marketing_campaign/i18n/zh_CN.po b/addons/marketing_campaign/i18n/zh_CN.po
new file mode 100644
index 00000000000..95aafae0f40
--- /dev/null
+++ b/addons/marketing_campaign/i18n/zh_CN.po
@@ -0,0 +1,1054 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-07-01 03:28+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-07-02 05:06+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Manual Mode"
+msgstr "手工模式"
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,activity_from_id:0
+msgid "Previous Activity"
+msgstr "前一个活动"
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:772
+#, python-format
+msgid "The current step for this item has no email or report to preview."
+msgstr "这步没有邮件或者报表。"
+
+#. module: marketing_campaign
+#: constraint:marketing.campaign.transition:0
+msgid "The To/From Activity of transition must be of the same Campaign "
+msgstr "前后活动必须属于同一个营销活动 "
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:144
+#, python-format
+msgid ""
+"The campaign cannot be started: it doesn't have any starting activity (or "
+"any activity with a signal and no previous activity)"
+msgstr "营销活动无法开始:它没有开始的活动(或者标识为开始但没有前一个活动的活动)"
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,trigger:0
+msgid "Time"
+msgstr "时间"
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.activity,type:0
+msgid "Custom Action"
+msgstr "自定义操作"
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:139
+#, python-format
+msgid ""
+"The campaign cannot be started: the email account is missing in email "
+"activity '%s'"
+msgstr "营销活动无法开始:没有为邮件活动'%s'设置邮箱帐号"
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+msgid "Group By..."
+msgstr "分组..."
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,revenue:0
+msgid ""
+"Set an expected revenue if you consider that every campaign item that has "
+"reached this point has generated a certain revenue. You can get revenue "
+"statistics in the Reporting section"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,trigger:0
+msgid "Trigger"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,count:0
+msgid "# of Actions"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Campaign Editor"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: view:marketing.campaign.workitem:0
+msgid "Today"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "March"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.segment,sync_mode:0
+msgid ""
+"Determines an additional criterion to add to the filter when selecting new "
+"records to inject in the campaign."
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,object_id:0
+msgid "Object"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,condition:0
+msgid ""
+"Python expression to decide whether the activity can be executed, otherwise "
+"it will be deleted or cancelled.The expression may use the following "
+"[browsable] variables:\n"
+" - activity: the campaign activity\n"
+" - workitem: the campaign workitem\n"
+" - resource: the resource object this campaign item represents\n"
+" - transitions: list of campaign transitions outgoing from this activity\n"
+"...- re: Python regular expression module"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Set to Draft"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,to_ids:0
+msgid "Next Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Synchronization"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "This Year"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:772
+#, python-format
+msgid "No preview"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+#: field:marketing.campaign.segment,date_run:0
+msgid "Launch Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,day:0
+msgid "Day"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Outgoing Transitions"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Reset"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,object_id:0
+msgid "Choose the resource on which you want this campaign to be run"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,sync_last_date:0
+msgid "Last Synchronization"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Year(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:209
+#, python-format
+msgid "Sorry, campaign duplication is not supported at the moment."
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.segment,sync_last_date:0
+msgid ""
+"Date on which this segment was synchronized last time (automatically or "
+"manually)"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,state:0
+#: selection:marketing.campaign,state:0
+#: selection:marketing.campaign.segment,state:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,trigger:0
+msgid "Automatic"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,mode:0
+msgid ""
+"Test - It creates and process all the activities directly (without waiting "
+"for the delay on transitions) but does not send emails or produce reports.\n"
+"Test in Realtime - It creates and processes all the activities directly but "
+"does not send emails or produce reports.\n"
+"With Manual Confirmation - the campaigns runs normally, but the user has to "
+"validate all workitem manually.\n"
+"Normal - the campaign runs normally and automatically sends all emails and "
+"reports (be very careful with this mode, you're live!)"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.segment,date_run:0
+msgid "Initial start date of this segment."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,campaign_id:0
+#: view:marketing.campaign:0
+#: field:marketing.campaign.activity,campaign_id:0
+#: view:marketing.campaign.segment:0
+#: field:marketing.campaign.segment,campaign_id:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,campaign_id:0
+msgid "Campaign"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,start:0
+msgid "Start"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,partner_field_id:0
+msgid ""
+"The generated workitems will be linked to the partner related to the record. "
+"If the record is the partner itself leave this field empty."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,segment_id:0
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,segment_id:0
+msgid "Segment"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Cost / Revenue"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,type:0
+msgid ""
+"The type of action to execute when an item enters this activity, such as:\n"
+" - Email: send an email using a predefined email template\n"
+" - Report: print an existing Report defined on the resource item and save "
+"it into a specific directory\n"
+" - Custom Action: execute a predefined action, e.g. to modify the fields "
+"of the resource record\n"
+" "
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.segment,date_next_sync:0
+msgid "Next time the synchronization job is scheduled to run automatically"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Month(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,partner_id:0
+#: model:ir.model,name:marketing_campaign.model_res_partner
+#: field:marketing.campaign.workitem,partner_id:0
+msgid "Partner"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Transitions"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,keep_if_condition_not_met:0
+msgid "Don't delete workitems"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,state:0
+#: view:marketing.campaign:0
+#: field:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: field:marketing.campaign.segment,state:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,state:0
+msgid "State"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "Marketing Reports"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,type:0
+msgid "Type"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Related Resource"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,name:0
+#: field:marketing.campaign.activity,name:0
+#: field:marketing.campaign.segment,name:0
+#: field:marketing.campaign.transition,name:0
+msgid "Name"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.workitem,res_name:0
+msgid "Resource Name"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,sync_mode:0
+msgid "Synchronization mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Run"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,from_ids:0
+msgid "Previous Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.segment,date_done:0
+msgid "Date this segment was last closed or cancelled."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Marketing Campaign Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,error_msg:0
+msgid "Error Message"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_form
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_form
+#: view:marketing.campaign:0
+msgid "Campaigns"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,interval_type:0
+msgid "Interval Unit"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,country_id:0
+msgid "Country"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,report_id:0
+#: selection:marketing.campaign.activity,type:0
+msgid "Report"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "July"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_configuration
+msgid "Configuration"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,variable_cost:0
+msgid ""
+"Set a variable cost if you consider that every campaign item that has "
+"reached this point has entailed a certain cost. You can get cost statistics "
+"in the Reporting section"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Hour(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_segment
+msgid "Campaign Segment"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+#: view:marketing.campaign.workitem:0
+msgid "Cancel"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,keep_if_condition_not_met:0
+msgid ""
+"By activating this option, workitems that aren't executed because the "
+"condition is not met are marked as cancelled instead of being deleted."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "Exceptions"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:res.partner,workitem_ids:0
+msgid "Workitems"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,fixed_cost:0
+msgid "Fixed Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Newly Modified"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,interval_nbr:0
+msgid "Interval Value"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,revenue:0
+#: field:marketing.campaign.activity,revenue:0
+msgid "Revenue"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "September"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "December"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,month:0
+msgid "Month"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.transition,activity_to_id:0
+msgid "Next Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_followup
+msgid "Campaign Follow-up"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,email_template_id:0
+msgid "The e-mail to send when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+msgid "This Month"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+msgid "Test Mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "Only records modified after last sync (no duplicates)"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_ir_actions_report_xml
+msgid "ir.actions.report.xml"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_stat
+msgid "Campaign Statistics"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,server_action_id:0
+msgid "The action to perform when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,partner_field_id:0
+msgid "Partner Field"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: model:ir.actions.act_window,name:marketing_campaign.action_campaign_analysis_all
+#: model:ir.model,name:marketing_campaign.model_campaign_analysis
+#: model:ir.ui.menu,name:marketing_campaign.menu_action_campaign_analysis_all
+msgid "Campaign Analysis"
+msgstr ""
+
+#. module: marketing_campaign
+#: sql_constraint:marketing.campaign.transition:0
+msgid "The interval must be positive or zero"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Test in Realtime"
+msgstr ""
+
+#. module: marketing_campaign
+#: sql_constraint:email.template:0
+msgid "The template name must be unique !"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Test Directly"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,report_directory_id:0
+msgid "Directory"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:res.partner:0
+msgid "Error ! You can not create recursive associated members."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: selection:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: selection:marketing.campaign.segment,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Preview"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.module.module,description:marketing_campaign.module_meta_information
+msgid ""
+"\n"
+"This module provides leads automation through marketing campaigns (campaigns "
+"can in fact be defined on any resource, not just CRM Leads).\n"
+" The campaigns are dynamic and multi-channels. The process is as "
+"follows:\n"
+" * Design marketing campaigns like workflows, including email "
+"templates to send, reports to print and send by email, custom actions, etc.\n"
+" * Define input segments that will select the items that should "
+"enter the campaign (e.g leads from certain countries, etc.)\n"
+" * Run you campaign in simulation mode to test it real-time or "
+"accelerated, and fine-tune it\n"
+" * You may also start the real campaign in manual mode, where each "
+"action requires manual validation\n"
+" * Finally launch your campaign live, and watch the statistics as "
+"the campaign does everything fully automatically. \n"
+" While the campaign runs you can of course continue to fine-tune "
+"the parameters, input segments, workflow, etc.\n"
+" \n"
+" Note: If you need demo data, you can install the "
+"marketing_campaign_crm_demo module, but this will also install the CRM "
+"application as it depends on CRM Leads.\n"
+" "
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "August"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "Normal"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,start:0
+msgid "This activity is launched when the campaign starts."
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,signal:0
+msgid ""
+"An activity with a signal can be called programmatically. Be careful, the "
+"workitem is always created when a signal is sent"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "June"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "All records (no duplicates)"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Newly Created"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:campaign.analysis,date:0
+#: view:marketing.campaign.workitem:0
+msgid "Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "November"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+#: field:marketing.campaign.activity,condition:0
+msgid "Condition"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,report_id:0
+msgid "The report to generate when this activity is activated"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,state:0
+#: view:marketing.campaign.workitem:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Exception"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "October"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:141
+#, python-format
+msgid ""
+"The campaign cannot be started: the email account is not approved in email "
+"activity '%s'"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,email_template_id:0
+msgid "Email Template"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "January"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,date:0
+msgid "Execution Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_workitem
+msgid "Campaign Workitem"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_activity
+msgid "Campaign Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.activity,report_directory_id:0
+msgid "This folder is used to store the generated reports"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:125
+#: code:addons/marketing_campaign/marketing_campaign.py:139
+#: code:addons/marketing_campaign/marketing_campaign.py:141
+#: code:addons/marketing_campaign/marketing_campaign.py:144
+#: code:addons/marketing_campaign/marketing_campaign.py:154
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+#: field:marketing.campaign.activity,server_action_id:0
+msgid "Action"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:488
+#, python-format
+msgid "Automatic transition"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+#: view:res.partner:0
+msgid "History"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.module.module,shortdesc:marketing_campaign.module_meta_information
+msgid "marketing_campaign"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Process"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:490
+#: selection:marketing.campaign.transition,trigger:0
+#, python-format
+msgid "Cosmetic"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.transition,trigger:0
+msgid "How is the destination workitem triggered"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,help:marketing_campaign.action_marketing_campaign_form
+msgid ""
+"A marketing campaign is an event or activity that will help you manage and "
+"reach your partners with specific messages. A campaign can have many "
+"activities that will be triggered from a specific situation. One action "
+"could be sending an email template that has previously been created in the "
+"system."
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: selection:campaign.analysis,state:0
+#: selection:marketing.campaign,state:0
+#: selection:marketing.campaign.segment,state:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "Done"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:209
+#, python-format
+msgid "Operation not supported"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_email_template
+msgid "Email Templates for Models"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: view:marketing.campaign.segment:0
+msgid "Close"
+msgstr ""
+
+#. module: marketing_campaign
+#: constraint:marketing.campaign.segment:0
+msgid "Model of filter must be same as resource model of Campaign "
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "Synchronize Manually"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:154
+#, python-format
+msgid "The campaign cannot be marked as done before all segments are done"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,res_id:0
+msgid "Resource ID"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign_transition
+msgid "Campaign Transition"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: selection:campaign.analysis,state:0
+#: view:marketing.campaign.workitem:0
+#: selection:marketing.campaign.workitem,state:0
+msgid "To Do"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.workitem:0
+msgid "Campaign Step"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_segment_form
+#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_segment_form
+#: view:marketing.campaign.segment:0
+msgid "Segments"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_segment_opened
+msgid "All Segments"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.activity:0
+msgid "Incoming Transitions"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.activity,type:0
+msgid "E-mail"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.transition,interval_type:0
+msgid "Day(s)"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign,activity_ids:0
+#: view:marketing.campaign.activity:0
+msgid "Activities"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "May"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: selection:marketing.campaign,state:0
+#: view:marketing.campaign.segment:0
+#: selection:marketing.campaign.segment,state:0
+msgid "Running"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:489
+#, python-format
+msgid "After %(interval_nbr)d %(interval_type)s"
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.model,name:marketing_campaign.model_marketing_campaign
+msgid "Marketing Campaign"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,date_done:0
+msgid "End Date"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "February"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,res_id:0
+#: view:marketing.campaign:0
+#: field:marketing.campaign,object_id:0
+#: field:marketing.campaign.segment,object_id:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,object_id:0
+msgid "Resource"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign,fixed_cost:0
+msgid ""
+"Fixed cost for running this campaign. You may also specify variable cost and "
+"revenue on each campaign activity. Cost and Revenue statistics are included "
+"in Campaign Reporting."
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:746
+#, python-format
+msgid "Email Preview"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,signal:0
+msgid "Signal"
+msgstr ""
+
+#. module: marketing_campaign
+#: code:addons/marketing_campaign/marketing_campaign.py:125
+#, python-format
+msgid "The campaign cannot be started: there are no activities in it"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.workitem,date:0
+msgid "If date is not set, this workitem has to be run manually"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:campaign.analysis,month:0
+msgid "April"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign:0
+#: field:marketing.campaign,mode:0
+msgid "Mode"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,activity_id:0
+#: view:marketing.campaign.activity:0
+#: view:marketing.campaign.workitem:0
+#: field:marketing.campaign.workitem,activity_id:0
+msgid "Activity"
+msgstr ""
+
+#. module: marketing_campaign
+#: help:marketing.campaign.segment,ir_filter_id:0
+msgid ""
+"Filter to select the matching resource records that belong to this segment. "
+"New filters can be created and saved using the advanced search on the list "
+"view of the Resource. If no filter is set, all records are selected without "
+"filtering. The synchronization mode may also add a criterion to the filter."
+msgstr ""
+
+#. module: marketing_campaign
+#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_workitem
+#: model:ir.ui.menu,name:marketing_campaign.menu_action_marketing_campaign_workitem
+msgid "Campaign Followup"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.segment,date_next_sync:0
+msgid "Next Synchronization"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+#: field:marketing.campaign.segment,ir_filter_id:0
+msgid "Filter"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:marketing.campaign.segment:0
+msgid "All"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign.segment,sync_mode:0
+msgid "Only records created after last sync"
+msgstr ""
+
+#. module: marketing_campaign
+#: field:marketing.campaign.activity,variable_cost:0
+msgid "Variable Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: selection:marketing.campaign,mode:0
+msgid "With Manual Confirmation"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,total_cost:0
+#: view:marketing.campaign:0
+msgid "Cost"
+msgstr ""
+
+#. module: marketing_campaign
+#: view:campaign.analysis:0
+#: field:campaign.analysis,year:0
+msgid "Year"
+msgstr ""
diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py
index 15c86f5298e..ae1ab2309e2 100644
--- a/addons/marketing_campaign/marketing_campaign.py
+++ b/addons/marketing_campaign/marketing_campaign.py
@@ -281,7 +281,7 @@ class marketing_campaign_segment(osv.osv):
'State',),
'date_run': fields.datetime('Launch Date', help="Initial start date of this segment."),
'date_done': fields.datetime('End Date', help="Date this segment was last closed or cancelled."),
- 'date_next_sync': fields.function(_get_next_sync, method=True, string='Next Synchronization', type='datetime', help="Next time the synchronization job is scheduled to run automatically"),
+ 'date_next_sync': fields.function(_get_next_sync, string='Next Synchronization', type='datetime', help="Next time the synchronization job is scheduled to run automatically"),
}
_defaults = {
@@ -548,7 +548,7 @@ class marketing_campaign_transition(osv.osv):
_columns = {
- 'name': fields.function(_get_name, method=True, string='Name',
+ 'name': fields.function(_get_name, string='Name',
type='char', size=128),
'activity_from_id': fields.many2one('marketing.campaign.activity',
'Previous Activity', select=1,
@@ -649,7 +649,7 @@ class marketing_campaign_workitem(osv.osv):
'object_id': fields.related('activity_id', 'campaign_id', 'object_id',
type='many2one', relation='ir.model', string='Resource', select=1, readonly=True, store=True),
'res_id': fields.integer('Resource ID', select=1, readonly=True),
- 'res_name': fields.function(_res_name_get, method=True, string='Resource Name', fnct_search=_resource_search, type="char", size=64),
+ 'res_name': fields.function(_res_name_get, string='Resource Name', fnct_search=_resource_search, type="char", size=64),
'date': fields.datetime('Execution Date', help='If date is not set, this workitem has to be run manually', readonly=True),
'partner_id': fields.many2one('res.partner', 'Partner', select=1, readonly=True),
'state': fields.selection([('todo', 'To Do'),
diff --git a/addons/marketing_campaign/report/campaign_analysis.py b/addons/marketing_campaign/report/campaign_analysis.py
index 0b245aee785..af04a7e6dff 100644
--- a/addons/marketing_campaign/report/campaign_analysis.py
+++ b/addons/marketing_campaign/report/campaign_analysis.py
@@ -62,7 +62,7 @@ class campaign_analysis(osv.osv):
'partner_id': fields.many2one('res.partner', 'Partner', readonly=True),
'country_id': fields.related('partner_id','address', 'country_id',
type='many2one', relation='res.country',string='Country'),
- 'total_cost' : fields.function(_total_cost, string='Cost', method=True,
+ 'total_cost' : fields.function(_total_cost, string='Cost',
type="float", digits_compute=dp.get_precision('Purchase Price')),
'revenue': fields.float('Revenue', readonly=True, digits_compute=dp.get_precision('Sale Price')),
'count' : fields.integer('# of Actions', readonly=True),
diff --git a/addons/marketing_campaign_crm_demo/i18n/zh_CN.po b/addons/marketing_campaign_crm_demo/i18n/zh_CN.po
new file mode 100644
index 00000000000..7723b72fe43
--- /dev/null
+++ b/addons/marketing_campaign_crm_demo/i18n/zh_CN.po
@@ -0,0 +1,179 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-29 16:49+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-30 04:34+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: marketing_campaign_crm_demo
+#: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report
+msgid "Marketing campaign demo report"
+msgstr "市场营销活动显示报表"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_1
+msgid ""
+"Hello,Thanks for generous interest you have shown in the "
+"openERP.Regards,OpenERP Team,"
+msgstr "你好,感谢你对OpenERP很感兴趣。 OpenERP团队敬上。"
+
+#. module: marketing_campaign_crm_demo
+#: model:ir.module.module,description:marketing_campaign_crm_demo.module_meta_information
+msgid "Demo data for the module marketing_campaign."
+msgstr "模块marketing_campaign的演示数据。"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_4
+msgid ""
+"Hello,Thanks for showing intrest and buying the OpenERP book.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+"你好,感谢你喜欢和购买OpenERP的书。\n"
+" 如果需要进一步的消息,请告诉我们。\n"
+" 欢迎垂询进一步的信息。\n"
+" 敬上!\n"
+" OpenERP团队"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_2
+msgid "Propose to subscribe to the OpenERP Discovery Day on May 2010"
+msgstr "推荐订购2010年5月的OpenERP 发现日 (OpenERP Discovery Day)"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_6
+msgid "Propose paid training to Silver partners"
+msgstr "推荐银牌合作伙伴参加付费的培训"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_1
+msgid "Thanks for showing interest in OpenERP"
+msgstr "感谢您喜欢OpenERP"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_4
+msgid "Thanks for buying the OpenERP book"
+msgstr "感谢您购买OpenERP book"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_5
+msgid "Propose a free technical training to Gold partners"
+msgstr "推荐金牌合作伙伴参加免费的技术培训"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_7
+msgid ""
+"Hello, We have very good offer that might suit you.\n"
+" For our silver partners,We are offering Gold partnership.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+"您好,我们有一些很好的服务可能很适合您。\n"
+" 对于我们的银牌合作伙伴,我们提供金牌合作伙伴的服务。\n"
+" 欢迎垂询进一步的信息。\n"
+"\n"
+" 敬上!\n"
+" OpenERP团队"
+
+#. module: marketing_campaign_crm_demo
+#: report:crm.lead.demo:0
+msgid "Partner :"
+msgstr "合作伙伴:"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_8
+msgid ""
+"Hello, Thanks for showing intrest and for subscribing to technical "
+"training.If any further information required kindly revert back.I really "
+"appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+"您好, 感谢您有兴趣订购技术培训课程。欢迎垂询进一步的信息。我衷心的感谢您的合作。\n"
+" OpenERP团队敬上。"
+
+#. module: marketing_campaign_crm_demo
+#: report:crm.lead.demo:0
+msgid "Company :"
+msgstr "公司:"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_8
+msgid "Thanks for subscribing to technical training"
+msgstr "感谢您订购技术培训课程"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_3
+msgid "Thanks for subscribing to the OpenERP Discovery Day"
+msgstr "感谢您订购OpenERP发现日(OpenERP Discovery Day)"
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_5
+msgid ""
+"Hello, We have very good offer that might suit you.\n"
+" For our gold partners,We are arranging free technical training "
+"on june,2010.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_3
+msgid ""
+"Hello,Thanks for showing intrest and for subscribing to the OpenERP "
+"Discovery Day.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_2
+msgid ""
+"Hello,We have very good offer that might suit you.\n"
+" We propose you to subscribe to the OpenERP Discovery Day on May "
+"2010.\n"
+" If any further information required kindly revert back.\n"
+" We really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_6
+msgid ""
+"Hello, We have very good offer that might suit you.\n"
+" For our silver partners,We are paid technical training on "
+"june,2010.\n"
+" If any further information required kindly revert back.\n"
+" I really appreciate your co-operation on this.\n"
+" Regards,OpenERP Team,"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
+msgid "Dummy Action"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:ir.module.module,shortdesc:marketing_campaign_crm_demo.module_meta_information
+msgid "marketing_campaign_crm_demo"
+msgstr ""
+
+#. module: marketing_campaign_crm_demo
+#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_7
+msgid "Propose gold partnership to silver partners"
+msgstr ""
diff --git a/addons/membership/membership.py b/addons/membership/membership.py
index 48fd8dc2d41..6384a255ac3 100644
--- a/addons/membership/membership.py
+++ b/addons/membership/membership.py
@@ -149,7 +149,7 @@ class membership_line(osv.osv):
'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True, help='Amount for the membership'),
'account_invoice_line': fields.many2one('account.invoice.line', 'Account Invoice line', readonly=True),
'account_invoice_id': fields.related('account_invoice_line', 'invoice_id', type='many2one', relation='account.invoice', string='Invoice', readonly=True),
- 'state': fields.function(_state, method=True,
+ 'state': fields.function(_state,
string='Membership State', type='selection',
selection=STATE, store = {
'account.invoice': (_get_membership_lines, ['state'], 10),
@@ -322,7 +322,7 @@ class Partner(osv.osv):
'Membership amount', digits=(16, 2),
help = 'The price negotiated by the partner'),
'membership_state': fields.function(
- __get_membership_state, method=True,
+ __get_membership_state,
string = 'Current Membership State', type = 'selection',
selection = STATE,
store = {
@@ -337,7 +337,7 @@ class Partner(osv.osv):
-Invoiced Member: A member whose invoice has been created.
-Paid Member: A member who has paid the membership amount."""),
'membership_start': fields.function(
- _membership_date, method=True, multi = 'membeship_start',
+ _membership_date, multi = 'membeship_start',
string = 'Start membership date', type = 'date',
store = {
'account.invoice': (_get_invoice_partner, ['state'], 10),
@@ -345,7 +345,7 @@ class Partner(osv.osv):
'res.partner': (lambda self, cr, uid, ids, c={}: ids, ['free_member'], 10)
}, help="Date from which membership becomes active."),
'membership_stop': fields.function(
- _membership_date, method=True,
+ _membership_date,
string = 'Stop membership date', type='date', multi='membership_stop',
store = {
'account.invoice': (_get_invoice_partner, ['state'], 10),
@@ -353,7 +353,7 @@ class Partner(osv.osv):
'res.partner': (lambda self, cr, uid, ids, c={}: ids, ['free_member'], 10)
}, help="Date until which membership remains active."),
'membership_cancel': fields.function(
- _membership_date, method=True,
+ _membership_date,
string = 'Cancel membership date', type='date', multi='membership_cancel',
store = {
'account.invoice': (_get_invoice_partner, ['state'], 11),
diff --git a/addons/mrp/i18n/tr.po b/addons/mrp/i18n/tr.po
index 05c4042c6f9..372460e0167 100644
--- a/addons/mrp/i18n/tr.po
+++ b/addons/mrp/i18n/tr.po
@@ -7,20 +7,20 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-05-16 20:21+0000\n"
+"PO-Revision-Date: 2011-06-27 18:38+0000\n"
"Last-Translator: Ayhan KIZILTAN \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: 2011-05-17 04:39+0000\n"
-"X-Generator: Launchpad (build 12959)\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:39+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: mrp
#: field:mrp.production,move_created_ids:0
#: field:mrp.production,move_created_ids2:0
msgid "Moves Created"
-msgstr "Oluşan Hareketler"
+msgstr "Oluşturulan Hareketler"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.mrp_production_action
@@ -40,7 +40,7 @@ msgstr ""
#. module: mrp
#: help:mrp.production,location_src_id:0
msgid "Location where the system will look for components."
-msgstr "Sistemin bileşenleri arayacağı lokasyon."
+msgstr "Sistemin bileşenleri arayacağı konum."
#. module: mrp
#: field:mrp.production,workcenter_lines:0
@@ -50,7 +50,7 @@ msgstr "İş Merkezi Kullanımı"
#. module: mrp
#: view:mrp.routing.workcenter:0
msgid "Routing Work Centers"
-msgstr "Rota İş Merkezleri"
+msgstr "İş Merkezleri Yönlendirme"
#. module: mrp
#: model:ir.module.module,shortdesc:mrp.module_meta_information
@@ -73,14 +73,14 @@ msgid ""
"The 'Minimum stock rule' allows the system to create procurement orders "
"automatically as soon as the minimum stock is reached."
msgstr ""
-"'Minimum stok kuralı', minimum stok sayısına erişildiğinde sistemin "
-"satınalma emirlerini otomatik olarak oluşturmasına izin verir."
+"'Enaz stok kuralı', enaz stok sayısına erişildiğinde sistemin satınalma "
+"emirlerini otomatik olarak oluşturmasına izin verir."
#. module: mrp
#: field:mrp.production,picking_id:0
#: field:mrp.production.order,picking_id:0
msgid "Picking list"
-msgstr "Seçim listesi"
+msgstr "Toplama Listesi"
#. module: mrp
#: code:addons/mrp/report/price.py:121
@@ -2114,7 +2114,7 @@ msgstr "Ayar için saat cinsinden süre."
#. module: mrp
#: selection:mrp.production.order,month:0
msgid "December"
-msgstr "Eylül"
+msgstr "Aralık"
#. module: mrp
#: field:mrp.installer,config_logo:0
diff --git a/addons/mrp/i18n/zh_CN.po b/addons/mrp/i18n/zh_CN.po
index c9b0a72865f..0a8750fa20b 100644
--- a/addons/mrp/i18n/zh_CN.po
+++ b/addons/mrp/i18n/zh_CN.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-01-28 05:53+0000\n"
+"PO-Revision-Date: 2011-07-02 15:27+0000\n"
"Last-Translator: Wei \"oldrev\" Li \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: 2011-04-29 04:51+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-07-03 04:45+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: mrp
#: field:mrp.production,move_created_ids:0
@@ -35,7 +35,7 @@ msgstr ""
#. module: mrp
#: help:mrp.production,location_src_id:0
msgid "Location where the system will look for components."
-msgstr ""
+msgstr "系统用于查找部件的位置。"
#. module: mrp
#: field:mrp.production,workcenter_lines:0
@@ -107,7 +107,7 @@ msgstr "工艺路线"
#. module: mrp
#: field:mrp.workcenter,product_id:0
msgid "Work Center Product"
-msgstr ""
+msgstr "工作中心产品"
#. module: mrp
#: view:mrp.bom:0
@@ -165,7 +165,7 @@ msgstr ""
#. module: mrp
#: model:process.transition,note:mrp.process_transition_purchaseprocure0
msgid "The system launches automatically a RFQ to the preferred supplier."
-msgstr ""
+msgstr "系统将自动向首选供应商发起询价单。"
#. module: mrp
#: view:mrp.production:0
@@ -227,7 +227,7 @@ msgstr ""
#. module: mrp
#: model:process.node,note:mrp.process_node_purchaseprocure0
msgid "For purchased material"
-msgstr ""
+msgstr "用于采购原料"
#. module: mrp
#: field:mrp.bom.revision,indice:0
@@ -273,7 +273,7 @@ msgstr "目标库位"
#. module: mrp
#: view:mrp.installer:0
msgid "title"
-msgstr ""
+msgstr "标题"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_mrp_bom
@@ -320,7 +320,7 @@ msgstr "八月"
#. module: mrp
#: constraint:stock.move:0
msgid "You try to assign a lot which is not from the same product"
-msgstr ""
+msgstr "您尝试为另外的产品赋予批次"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_production_order
@@ -335,7 +335,7 @@ msgstr "六月"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_product_produce
msgid "Product Produce"
-msgstr ""
+msgstr "产品生产"
#. module: mrp
#: selection:mrp.production.order,month:0
@@ -370,7 +370,7 @@ msgstr "数量"
#. module: mrp
#: field:mrp.production.workcenter.line,hour:0
msgid "Nbr of hours"
-msgstr ""
+msgstr "小时数"
#. module: mrp
#: view:mrp.production:0
@@ -399,7 +399,7 @@ msgstr "维修"
#. module: mrp
#: field:mrp.installer,stock_location:0
msgid "Advanced Routes"
-msgstr ""
+msgstr "高级路线"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_view_resource_calendar_search_mrp
@@ -468,7 +468,7 @@ msgstr ""
#. module: mrp
#: model:process.node,note:mrp.process_node_serviceproduct1
msgid "For Services."
-msgstr ""
+msgstr "用于服务。"
#. module: mrp
#: field:mrp.bom.revision,date:0
@@ -486,13 +486,13 @@ msgstr "如果你需要生产单的自动辅助核算项目凭证只有完成这
#. module: mrp
#: field:mrp.production.workcenter.line,cycle:0
msgid "Nbr of cycles"
-msgstr ""
+msgstr "周期数"
#. module: mrp
#: model:process.node,note:mrp.process_node_orderrfq0
#: model:process.node,note:mrp.process_node_rfq0
msgid "Request for Quotation."
-msgstr ""
+msgstr "询价单"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_billofmaterialrouting0
@@ -540,7 +540,7 @@ msgstr "物料清单结构"
#. module: mrp
#: view:mrp.production:0
msgid "Search Production"
-msgstr ""
+msgstr "搜索产品"
#. module: mrp
#: code:addons/mrp/report/price.py:130
@@ -575,7 +575,7 @@ msgstr ""
#: view:mrp.production.order:0
#: selection:mrp.production.order,state:0
msgid "Picking Exception"
-msgstr ""
+msgstr "领料异常"
#. module: mrp
#: field:mrp.bom,bom_lines:0
@@ -617,7 +617,7 @@ msgstr "错误!你不能创建递归的物料清单"
#: model:ir.model,name:mrp.model_mrp_workcenter_load
#: model:ir.model,name:mrp.model_report_workcenter_load
msgid "Work Center Load"
-msgstr ""
+msgstr "工作中心负载"
#. module: mrp
#: code:addons/mrp/procurement.py:45
@@ -663,7 +663,7 @@ msgstr "一个周期的工作小时数"
#. module: mrp
#: report:bom.structure:0
msgid "BOM Ref"
-msgstr ""
+msgstr "物料表编号"
#. module: mrp
#: view:mrp.production:0
@@ -676,7 +676,7 @@ msgstr "生产中"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_mrp_property
msgid "Master Bill of Materials"
-msgstr ""
+msgstr "主物料表"
#. module: mrp
#: help:mrp.bom,product_uos:0
@@ -702,12 +702,12 @@ msgstr "类型"
#: code:addons/mrp/report/price.py:201
#, python-format
msgid "Total Cost of "
-msgstr ""
+msgstr "总成本 "
#. module: mrp
#: model:process.node,note:mrp.process_node_minimumstockrule0
msgid "Linked to the 'Minimum stock rule' supplying method."
-msgstr ""
+msgstr "链接到“最小库存规则”供货方式"
#. module: mrp
#: selection:mrp.workcenter.load,time_unit:0
@@ -715,7 +715,7 @@ msgid "Per month"
msgstr "每月"
#. module: mrp
-#: code:addons/mrp/mrp.py:591
+#: code:addons/mrp/mrp.py:595
#: code:addons/mrp/wizard/change_production_qty.py:77
#: code:addons/mrp/wizard/change_production_qty.py:82
#, python-format
@@ -728,7 +728,7 @@ msgid "Product Name"
msgstr "产品名称"
#. module: mrp
-#: code:addons/mrp/mrp.py:491
+#: code:addons/mrp/mrp.py:495
#, python-format
msgid "Invalid action !"
msgstr "无效动作"
@@ -798,7 +798,7 @@ msgstr "紧急"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_routing_workcenter
msgid "Work Center Usage"
-msgstr ""
+msgstr "工作中心使用情况"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_production
@@ -879,7 +879,7 @@ msgstr "公司"
#: model:process.node,name:mrp.process_node_minimumstockrule0
#: model:process.node,name:mrp.process_node_productminimumstockrule0
msgid "Minimum Stock"
-msgstr ""
+msgstr "最小库存"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menus_dash_mrp
@@ -889,7 +889,7 @@ msgstr "仪表盘"
#. module: mrp
#: view:board.board:0
msgid "Work Center Future Load"
-msgstr ""
+msgstr "工作中心未来负载"
#. module: mrp
#: model:process.node,name:mrp.process_node_stockproduct0
@@ -902,7 +902,7 @@ msgstr "可库存产品"
#: code:addons/mrp/report/price.py:121
#, python-format
msgid "Work Center name"
-msgstr ""
+msgstr "工作中心名称"
#. module: mrp
#: field:mrp.routing,code:0
@@ -917,7 +917,7 @@ msgstr "小时编号"
#. module: mrp
#: field:mrp.installer,mrp_jit:0
msgid "Just In Time Scheduling"
-msgstr ""
+msgstr "及时生产计划"
#. module: mrp
#: view:mrp.property:0
@@ -1000,7 +1000,7 @@ msgstr ""
#. module: mrp
#: report:bom.structure:0
msgid "BOM Name"
-msgstr ""
+msgstr "物料表名称"
#. module: mrp
#: view:mrp.production:0
@@ -1011,17 +1011,17 @@ msgstr "启动生产"
#: model:ir.actions.act_window,name:mrp.open_board_manufacturing
#: model:ir.ui.menu,name:mrp.menu_board_manufacturing
msgid "Production Dashboard"
-msgstr ""
+msgstr "生产仪表盘"
#. module: mrp
#: view:mrp.production:0
msgid "Source Loc."
-msgstr ""
+msgstr "来源位置"
#. module: mrp
#: field:mrp.bom,position:0
msgid "Internal Reference"
-msgstr ""
+msgstr "内部单号"
#. module: mrp
#: help:mrp.installer,stock_location:0
@@ -1033,7 +1033,7 @@ msgstr ""
#. module: mrp
#: model:process.node,note:mrp.process_node_billofmaterial0
msgid "Product's structure"
-msgstr ""
+msgstr "产品结构"
#. module: mrp
#: field:mrp.bom,name:0
@@ -1294,7 +1294,7 @@ msgid "Month -1"
msgstr ""
#. module: mrp
-#: code:addons/mrp/mrp.py:914
+#: code:addons/mrp/mrp.py:924
#, python-format
msgid "Manufacturing order '%s' is scheduled for the %s."
msgstr ""
@@ -1305,7 +1305,7 @@ msgid "Production Order N° :"
msgstr "生产单号:"
#. module: mrp
-#: code:addons/mrp/mrp.py:630
+#: code:addons/mrp/mrp.py:640
#, python-format
msgid "Manufacturing order '%s' is ready to produce."
msgstr ""
@@ -1534,7 +1534,7 @@ msgid "Manufacturing Orders To Start"
msgstr ""
#. module: mrp
-#: code:addons/mrp/mrp.py:491
+#: code:addons/mrp/mrp.py:495
#, python-format
msgid "Cannot delete Production Order(s) which are in %s State!"
msgstr ""
@@ -1624,7 +1624,7 @@ msgid "Production Analysis"
msgstr ""
#. module: mrp
-#: code:addons/mrp/mrp.py:345
+#: code:addons/mrp/mrp.py:349
#, python-format
msgid "Copy"
msgstr ""
@@ -2113,7 +2113,7 @@ msgid "Product type is Stockable or Consumable."
msgstr ""
#. module: mrp
-#: code:addons/mrp/mrp.py:591
+#: code:addons/mrp/mrp.py:595
#: code:addons/mrp/wizard/change_production_qty.py:77
#: code:addons/mrp/wizard/change_production_qty.py:82
#, python-format
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 5603327290d..ec429488914 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -197,7 +197,7 @@ class mrp_bom(osv.osv):
help= "If a sub-product is used in several products, it can be useful to create its own BoM. "\
"Though if you don't want separated production orders for this sub-product, select Set/Phantom as BoM type. "\
"If a Phantom BoM is used for a root product, it will be sold and shipped as a set of components, instead of being produced."),
- 'method': fields.function(_compute_type, string='Method', method=True, type='selection', selection=[('',''),('stock','On Stock'),('order','On Order'),('set','Set / Pack')]),
+ 'method': fields.function(_compute_type, string='Method', type='selection', selection=[('',''),('stock','On Stock'),('order','On Order'),('set','Set / Pack')]),
'date_start': fields.date('Valid From', help="Validity of this BoM or component. Keep empty if it's always valid."),
'date_stop': fields.date('Valid Until', help="Validity of this BoM or component. Keep empty if it's always valid."),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of bills of material."),
@@ -214,7 +214,7 @@ class mrp_bom(osv.osv):
'routing_id': fields.many2one('mrp.routing', 'Routing', help="The list of operations (list of work centers) to produce the finished product. The routing is mainly used to compute work center costs during operations and to plan future loads on work centers based on production planning."),
'property_ids': fields.many2many('mrp.property', 'mrp_bom_property_rel', 'bom_id','property_id', 'Properties'),
'revision_ids': fields.one2many('mrp.bom.revision', 'bom_id', 'BoM Revisions'),
- 'child_complete_ids': fields.function(_child_compute, relation='mrp.bom', method=True, string="BoM Hierarchy", type='many2many'),
+ 'child_complete_ids': fields.function(_child_compute, relation='mrp.bom', string="BoM Hierarchy", type='many2many'),
'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
@@ -457,8 +457,8 @@ class mrp_production(osv.osv):
'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', required=True,
readonly=True, states={'draft':[('readonly',False)]}, help="Location where the system will stock the finished products."),
- 'date_planned_end': fields.function(_production_date_end, method=True, type='date', string='Scheduled End Date'),
- 'date_planned_date': fields.function(_production_date, method=True, type='date', string='Scheduled Date'),
+ 'date_planned_end': fields.function(_production_date_end, type='date', string='Scheduled End Date'),
+ 'date_planned_date': fields.function(_production_date, type='date', string='Scheduled Date'),
'date_planned': fields.datetime('Scheduled date', required=True, select=1),
'date_start': fields.datetime('Start Date', select=True),
'date_finished': fields.datetime('End Date', select=True),
@@ -478,8 +478,8 @@ class mrp_production(osv.osv):
'state': fields.selection([('draft','Draft'),('picking_except', 'Picking Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','In Production'),('cancel','Cancelled'),('done','Done')],'State', readonly=True,
help='When the production order is created the state is set to \'Draft\'.\n If the order is confirmed the state is set to \'Waiting Goods\'.\n If any exceptions are there, the state is set to \'Picking Exception\'.\
\nIf the stock is available then the state is set to \'Ready to Produce\'.\n When the production gets started then the state is set to \'In Production\'.\n When the production is over, the state is set to \'Done\'.'),
- 'hour_total': fields.function(_production_calc, method=True, type='float', string='Total Hours', multi='workorder', store=True),
- 'cycle_total': fields.function(_production_calc, method=True, type='float', string='Total Cycles', multi='workorder', store=True),
+ 'hour_total': fields.function(_production_calc, type='float', string='Total Hours', multi='workorder', store=True),
+ 'cycle_total': fields.function(_production_calc, type='float', string='Total Cycles', multi='workorder', store=True),
'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py
index 589d3c27031..fe926d30ac1 100644
--- a/addons/mrp_operations/mrp_operations.py
+++ b/addons/mrp_operations/mrp_operations.py
@@ -92,9 +92,9 @@ class mrp_production_workcenter_line(osv.osv):
"* When work order is in running mode, during that time if user wants to stop or to make changes in order then can set in 'Pause' state.\n" \
"* When the user cancels the work order it will be set in 'Canceled' state.\n" \
"* When order is completely processed that time it is set in 'Finished' state."),
- 'date_start_date': fields.function(_get_date_date, method=True, string='Start Date', type='date'),
+ 'date_start_date': fields.function(_get_date_date, string='Start Date', type='date'),
'date_planned': fields.datetime('Scheduled Date'),
- 'date_planned_end': fields.function(_get_date_end, method=True, string='End Date', type='datetime'),
+ 'date_planned_end': fields.function(_get_date_end, string='End Date', type='datetime'),
'date_start': fields.datetime('Start Date'),
'date_finished': fields.datetime('End Date'),
'delay': fields.float('Working Hours',help="This is lead time between operation start and stop in this Work Center",readonly=True),
@@ -554,7 +554,7 @@ class mrp_operations_operation(osv.osv):
'code_id':fields.many2one('mrp_operations.operation.code','Code',required=True),
'date_start': fields.datetime('Start Date'),
'date_finished': fields.datetime('End Date'),
- 'order_date': fields.function(_get_order_date,method=True,string='Order Date',type='date',store={'mrp.production':(_order_date_search_production,['date_planned'], 10)}),
+ 'order_date': fields.function(_get_order_date,string='Order Date',type='date',store={'mrp.production':(_order_date_search_production,['date_planned'], 10)}),
}
_defaults={
'date_start': lambda *a:datetime.now().strftime('%Y-%m-%d %H:%M:%S')
diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py
index e95e3fb6058..caacb2e3247 100644
--- a/addons/mrp_repair/mrp_repair.py
+++ b/addons/mrp_repair/mrp_repair.py
@@ -117,7 +117,7 @@ class mrp_repair(osv.osv):
'product_id': fields.many2one('product.product', string='Product to Repair', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'partner_id' : fields.many2one('res.partner', 'Partner', select=True, help='This field allow you to choose the parner that will be invoiced and delivered'),
'address_id': fields.many2one('res.partner.address', 'Delivery Address', domain="[('partner_id','=',partner_id)]"),
- 'default_address_id': fields.function(_get_default_address, method=True, type="many2one", relation="res.partner.address"),
+ 'default_address_id': fields.function(_get_default_address, type="many2one", relation="res.partner.address"),
'prodlot_id': fields.many2one('stock.production.lot', 'Lot Number', select=True, domain="[('product_id','=',product_id)]"),
'state': fields.selection([
('draft','Quotation'),
@@ -156,17 +156,17 @@ class mrp_repair(osv.osv):
'deliver_bool': fields.boolean('Deliver', help="Check this box if you want to manage the delivery once the product is repaired. If cheked, it will create a picking with selected product. Note that you can select the locations in the Info tab, if you have the extended view."),
'invoiced': fields.boolean('Invoiced', readonly=True),
'repaired': fields.boolean('Repaired', readonly=True),
- 'amount_untaxed': fields.function(_amount_untaxed, method=True, string='Untaxed Amount',
+ 'amount_untaxed': fields.function(_amount_untaxed, string='Untaxed Amount',
store={
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations'], 10),
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
}),
- 'amount_tax': fields.function(_amount_tax, method=True, string='Taxes',
+ 'amount_tax': fields.function(_amount_tax, string='Taxes',
store={
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations'], 10),
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
}),
- 'amount_total': fields.function(_amount_total, method=True, string='Total',
+ 'amount_total': fields.function(_amount_total, string='Total',
store={
'mrp.repair': (lambda self, cr, uid, ids, c={}: ids, ['operations'], 10),
'mrp.repair.line': (_get_lines, ['price_unit', 'price_subtotal', 'product_id', 'tax_id', 'product_uom_qty', 'product_uom'], 10),
@@ -661,7 +661,7 @@ class mrp_repair_line(osv.osv, ProductChangeMixin):
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok','=',True)], required=True),
'invoiced': fields.boolean('Invoiced',readonly=True),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price')),
- 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',digits_compute= dp.get_precision('Sale Price')),
+ 'price_subtotal': fields.function(_amount_line, string='Subtotal',digits_compute= dp.get_precision('Sale Price')),
'tax_id': fields.many2many('account.tax', 'repair_operation_line_tax', 'repair_operation_line_id', 'tax_id', 'Taxes'),
'product_uom_qty': fields.float('Quantity (UoM)', digits=(16,2), required=True),
'product_uom': fields.many2one('product.uom', 'Product UoM', required=True),
@@ -750,7 +750,7 @@ class mrp_repair_fee(osv.osv, ProductChangeMixin):
'product_uom_qty': fields.float('Quantity', digits=(16,2), required=True),
'price_unit': fields.float('Unit Price', required=True),
'product_uom': fields.many2one('product.uom', 'Product UoM', required=True),
- 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',digits_compute= dp.get_precision('Sale Price')),
+ 'price_subtotal': fields.function(_amount_line, string='Subtotal',digits_compute= dp.get_precision('Sale Price')),
'tax_id': fields.many2many('account.tax', 'repair_fee_line_tax', 'repair_fee_line_id', 'tax_id', 'Taxes'),
'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True),
'to_invoice': fields.boolean('To Invoice'),
diff --git a/addons/point_of_sale/i18n/zh_CN.po b/addons/point_of_sale/i18n/zh_CN.po
index 450b2a6b160..618e465807a 100644
--- a/addons/point_of_sale/i18n/zh_CN.po
+++ b/addons/point_of_sale/i18n/zh_CN.po
@@ -7,32 +7,33 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-03 16:58+0000\n"
-"PO-Revision-Date: 2011-01-24 15:18+0000\n"
-"Last-Translator: Wei \"oldrev\" Li \n"
+"PO-Revision-Date: 2011-06-29 01:01+0000\n"
+"Last-Translator: shjerryzhou \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: 2011-04-29 04:57+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-06-30 04:34+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: point_of_sale
#: field:pos.discount,discount_notes:0
msgid "Discount Notes"
-msgstr ""
+msgstr "折扣备注"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_today
msgid "Sales by day"
-msgstr ""
+msgstr "日销售情况"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_confirm
msgid "Point of Sale Confirm"
-msgstr ""
+msgstr "POS确认"
#. module: point_of_sale
-#: wizard_button:pos.discount,init,apply_discount:0
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_discount
+#: view:pos.discount:0
msgid "Apply Discount"
msgstr "应用折扣"
@@ -44,7 +45,7 @@ msgstr "设为草稿"
#. module: point_of_sale
#: field:report.transaction.pos,product_nb:0
msgid "Product Nb."
-msgstr ""
+msgstr "产品号"
#. module: point_of_sale
#: model:ir.module.module,shortdesc:point_of_sale.module_meta_information
@@ -54,41 +55,45 @@ msgstr "POS"
#. module: point_of_sale
#: view:report.pos.order:0
msgid "Today"
-msgstr ""
+msgstr "今天"
#. module: point_of_sale
-#: wizard_view:pos.add_product,init:0
+#: view:pos.add.product:0
msgid "Add product :"
msgstr "增加业务伙伴:"
#. module: point_of_sale
#: view:all.closed.cashbox.of.the.day:0
msgid "All Cashboxes Of the day :"
-msgstr ""
+msgstr "当日所有钱箱"
#. module: point_of_sale
#: view:pos.box.entries:0
msgid "Put Money"
-msgstr ""
+msgstr "存钱"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_cash_register_all
#: model:ir.ui.menu,name:point_of_sale.menu_report_cash_register_all
msgid "Register Analysis"
-msgstr ""
+msgstr "收银机分析"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_detail
+#: report:pos.details:0
+#: report:pos.details_summary:0
msgid "Details of Sales"
msgstr "销售详情"
#. module: point_of_sale
#: view:pos.close.statement:0
msgid "Are you sure you want to close the statements ?"
-msgstr ""
+msgstr "你确定想关闭收银机吗?"
#. module: point_of_sale
-#: wizard_view:pos.scan_product,init:0
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_scan_product
+#: model:ir.model,name:point_of_sale.model_pos_scan_product
+#: view:pos.scan.product:0
msgid "Scan product"
msgstr "扫描产品"
@@ -98,10 +103,10 @@ msgstr "扫描产品"
#: view:report.pos.order:0
#: field:report.pos.order,day:0
msgid "Day"
-msgstr ""
+msgstr "天"
#. module: point_of_sale
-#: wizard_view:pos.payment,ask_pay:0
+#: view:pos.make.payment:0
msgid "Add payment :"
msgstr "增加付款:"
@@ -109,7 +114,7 @@ msgstr "增加付款:"
#: view:report.cash.register:0
#: view:report.pos.order:0
msgid "My Sales"
-msgstr ""
+msgstr "我的销售订单"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_box_out
@@ -119,29 +124,31 @@ msgstr ""
#. module: point_of_sale
#: report:pos.sales.user.today.current.user:0
msgid "Today's Sales By Current User"
-msgstr ""
+msgstr "此用户今天销售情况"
#. module: point_of_sale
-#: rml:pos.invoice:0
-#: field:pos.payment,amount:0
-#: wizard_field:pos.payment,ask_pay,amount:0
+#: report:account.statement:0
+#: field:pos.box.entries,amount:0
+#: field:pos.box.out,amount:0
+#: report:pos.invoice:0
+#: field:pos.make.payment,amount:0
+#: report:pos.user.product:0
#: field:report.transaction.pos,amount:0
msgid "Amount"
msgstr "金额"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.lines:0
+#: report:pos.lines:0
msgid "VAT"
msgstr "增值税"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Origin"
-msgstr ""
+msgstr "原始"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Tax"
msgstr "税"
@@ -153,16 +160,17 @@ msgstr "交易数合计"
#. module: point_of_sale
#: help:account.journal,special_journal:0
msgid "Will put all the orders in waiting status till being accepted"
-msgstr ""
+msgstr "将设置所有订单为等待状态,知道被接受"
#. module: point_of_sale
-#: field:pos.order,partner_id:0
+#: report:account.statement:0
+#: field:report.pos.order,partner_id:0
msgid "Partner"
msgstr "业务伙伴"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.details_summary:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
msgid "Total of the day"
msgstr "今天合计"
@@ -170,41 +178,47 @@ msgstr "今天合计"
#: view:report.pos.order:0
#: field:report.pos.order,average_price:0
msgid "Average Price"
-msgstr ""
+msgstr "平均价格"
#. module: point_of_sale
-#: rml:pos.invoice:0
-#: rml:pos.lines:0
+#: report:pos.lines:0
msgid "Disc. (%)"
msgstr "折扣(%)"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.details_summary:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
msgid "Total discount"
msgstr "折扣合计"
#. module: point_of_sale
+#: view:account.bank.statement:0
+#: view:pos.order:0
#: field:pos.order,state:0
+#: report:pos.sales.user:0
+#: report:pos.sales.user.today:0
+#: report:pos.sales.user.today.current.user:0
+#: field:report.cash.register,state:0
+#: field:report.pos.order,state:0
msgid "State"
msgstr "状态"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment
msgid "Add payment"
-msgstr ""
+msgstr "新增付款"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_month
msgid "Sales by month"
-msgstr ""
+msgstr "月销售情况"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_today
#: view:report.sales.by.user.pos:0
#: view:report.sales.by.user.pos.month:0
msgid "Sales by User"
-msgstr ""
+msgstr "用户销售情况"
#. module: point_of_sale
#: report:pos.invoice:0
@@ -216,62 +230,63 @@ msgstr "折扣(%)"
#: field:pos.box.entries,ref:0
#: field:pos.box.out,ref:0
msgid "Ref"
-msgstr ""
+msgstr "关联单号"
#. module: point_of_sale
#: view:report.pos.order:0
#: field:report.pos.order,price_total:0
msgid "Total Price"
-msgstr ""
+msgstr "总价格"
#. module: point_of_sale
#: view:product.product:0
msgid "Miscelleanous"
-msgstr ""
+msgstr "杂项"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user
#: report:pos.sales.user:0
msgid "Sales Report"
-msgstr ""
+msgstr "销售报表"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_discount.py:52
#, python-format
msgid "No Order Lines"
-msgstr ""
+msgstr "无订单明细"
#. module: point_of_sale
#: view:pos.order:0
msgid "Other Information"
-msgstr ""
+msgstr "其它信息"
#. module: point_of_sale
#: view:product.product:0
msgid "Product Type"
-msgstr ""
+msgstr "产品类型"
#. module: point_of_sale
#: view:pos.order:0
#: view:pos.payment.report.date:0
msgid "Dates"
-msgstr ""
+msgstr "日期"
#. module: point_of_sale
#: field:res.company,company_discount:0
msgid "Max Discount(%)"
-msgstr ""
+msgstr "最大折扣(%)"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_point_open_config
msgid "Cash register management"
-msgstr ""
+msgstr "现金登记管理"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
+#: code:addons/point_of_sale/point_of_sale.py:1057
+#: code:addons/point_of_sale/point_of_sale.py:1076
#, python-format
msgid "No valid pricelist line found !"
-msgstr ""
+msgstr "没找到有效的价格表明细。"
#. module: point_of_sale
#: report:pos.details:0
@@ -281,13 +296,13 @@ msgstr ""
#: report:pos.payment.report.user:0
#: report:pos.user.product:0
msgid "["
-msgstr ""
+msgstr "["
#. module: point_of_sale
#: field:report.sales.by.margin.pos,total:0
#: field:report.sales.by.margin.pos.month,total:0
msgid "Margin"
-msgstr ""
+msgstr "毛利"
#. module: point_of_sale
#: field:pos.order.line,discount:0
@@ -302,7 +317,7 @@ msgstr "总数量"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos_month
msgid "Sales by user monthly"
-msgstr ""
+msgstr "用户月销售情况"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_open_statement.py:54
@@ -311,57 +326,60 @@ msgid ""
"You can not open a Cashbox for \"%s\".\n"
"Please close its related cash register."
msgstr ""
+"你不能为\"%s\"打开钱箱。\n"
+"请关闭相关的收银机。"
#. module: point_of_sale
#: help:pos.order,user_salesman_id:0
msgid "User who is logged into the system."
-msgstr ""
+msgstr "系统的登录用户"
#. module: point_of_sale
#: field:product.product,income_pdt:0
msgid "Product for Input"
-msgstr ""
+msgstr "输入类产品"
#. module: point_of_sale
#: report:pos.details:0
#: report:pos.details_summary:0
msgid "Mode of Payment"
-msgstr ""
+msgstr "支付方式"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale
msgid "Daily Operations"
-msgstr ""
+msgstr "日常操作"
#. module: point_of_sale
#: view:account.bank.statement:0
msgid "Search Cash Statements"
-msgstr ""
+msgstr "查询现金对账单"
#. module: point_of_sale
#: view:pos.confirm:0
msgid "Are you sure you want to close your sales ?"
-msgstr ""
+msgstr "你确定要关闭你的销售订单吗?"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "August"
-msgstr ""
+msgstr "8月"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "June"
-msgstr ""
+msgstr "6月"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_month
msgid "Sales by User Monthly"
-msgstr ""
+msgstr "用户月销售情况"
#. module: point_of_sale
-#: field:pos.payment,payment_date:0
+#: field:pos.order,date_payment:0
+#: field:report.pos.order,date_payment:0
msgid "Payment Date"
msgstr "付款日期"
@@ -369,40 +387,42 @@ msgstr "付款日期"
#: report:account.statement:0
#: report:all.closed.cashbox.of.the.day:0
msgid "Closing Date"
-msgstr ""
+msgstr "结束日期"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "October"
-msgstr ""
+msgstr "十月"
#. module: point_of_sale
#: field:account.bank.statement.line,am_out:0
msgid "To count"
-msgstr ""
+msgstr "计算"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.details_summary:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
msgid "Summary"
msgstr "摘要"
#. module: point_of_sale
#: view:pos.order:0
msgid "Quotations"
-msgstr ""
+msgstr "报价单"
#. module: point_of_sale
#: field:report.pos.order,delay_payment:0
msgid "Delay Payment"
-msgstr ""
+msgstr "延期付款"
#. module: point_of_sale
-#: wizard_field:pos.add_product,init,quantity:0
-#: rml:pos.invoice:0
-#: rml:pos.lines:0
+#: field:pos.add.product,quantity:0
+#: report:pos.invoice:0
+#: report:pos.lines:0
#: field:pos.order.line,qty:0
+#: field:report.sales.by.user.pos,qty:0
+#: field:report.sales.by.user.pos.month,qty:0
msgid "Quantity"
msgstr "数量"
@@ -414,10 +434,11 @@ msgstr ""
#. module: point_of_sale
#: view:account.bank.statement:0
msgid "Period"
-msgstr ""
+msgstr "期间"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
+#: report:pos.payment.report:0
msgid "Net Total:"
msgstr "净合计:"
@@ -429,7 +450,7 @@ msgstr "说明"
#. module: point_of_sale
#: view:product.product:0
msgid "Codes"
-msgstr ""
+msgstr "编码"
#. module: point_of_sale
#: view:pos.box.out:0
@@ -446,12 +467,15 @@ msgstr ""
#: view:pos.sales.user.today:0
#: view:pos.sales.user.today.current_user:0
msgid "Print Report"
-msgstr ""
+msgstr "打印报表"
#. module: point_of_sale
-#: rml:pos.invoice:0
-#: rml:pos.lines:0
+#: report:pos.invoice:0
+#: report:pos.lines:0
#: field:pos.order.line,price_unit:0
+#: report:pos.payment.report:0
+#: report:pos.payment.report.date:0
+#: report:pos.payment.report.user:0
msgid "Unit Price"
msgstr "单价"
@@ -459,7 +483,7 @@ msgstr "单价"
#: code:addons/point_of_sale/wizard/pos_box_entries.py:107
#, python-format
msgid "Please check that income account is set to %s"
-msgstr ""
+msgstr "请检查是否%s设置了收入类科目"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_add_product.py:56
@@ -469,30 +493,36 @@ msgstr ""
#: model:ir.model,name:point_of_sale.model_pos_add_product
#, python-format
msgid "Add Product"
-msgstr ""
+msgstr "新增产品"
#. module: point_of_sale
#: field:report.transaction.pos,invoice_am:0
msgid "Invoice Amount"
-msgstr ""
+msgstr "发票金额"
#. module: point_of_sale
+#: view:account.bank.statement:0
+#: field:account.bank.statement.line,journal_id:0
+#: report:account.statement:0
+#: report:all.closed.cashbox.of.the.day:0
+#: model:ir.model,name:point_of_sale.model_account_journal
#: field:pos.config.journal,journal_id:0
#: field:pos.order,sale_journal:0
-#: wizard_field:pos.payment,ask_pay,journal:0
-#: field:pos.payment,journal_id:0
-#: field:report.transaction.pos,journal_id:0
+#: view:report.cash.register:0
+#: field:report.cash.register,journal_id:0
+#: field:report.pos.order,journal_id:0
msgid "Journal"
msgstr "分类帐"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Tel. :"
msgstr "电话:"
#. module: point_of_sale
-#: model:ir.actions.wizard,name:point_of_sale.pos_payment
#: view:pos.order:0
+#: selection:pos.order,state:0
+#: selection:report.pos.order,state:0
msgid "Payment"
msgstr "付款"
@@ -500,7 +530,7 @@ msgstr "付款"
#: report:account.statement:0
#: report:all.closed.cashbox.of.the.day:0
msgid "Ending Balance"
-msgstr ""
+msgstr "期末结余"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.products_for_output_operations
@@ -510,7 +540,7 @@ msgstr ""
#. module: point_of_sale
#: view:pos.payment.report.date:0
msgid "Sale by Date and User"
-msgstr ""
+msgstr "按日期和用户查看销售情况"
#. module: point_of_sale
#: code:addons/point_of_sale/point_of_sale.py:69
@@ -518,11 +548,11 @@ msgstr ""
msgid ""
"Cannot delete a point of sale which is closed or contains confirmed "
"cashboxes!"
-msgstr ""
+msgstr "不能删除已关闭或者有已确认钱箱的销售终端!"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.details_summary:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
msgid "Mode of Taxes"
msgstr "税收模式"
@@ -530,75 +560,78 @@ msgstr "税收模式"
#: code:addons/point_of_sale/wizard/pos_close_statement.py:48
#, python-format
msgid "Cash registers are already closed."
-msgstr ""
+msgstr "收银机已关闭。"
#. module: point_of_sale
#: constraint:product.product:0
msgid "Error: Invalid ean code"
-msgstr ""
+msgstr "错误:无效的EAN编码"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_open_statement
#: view:pos.confirm:0
#: view:pos.open.statement:0
msgid "Open Statements"
-msgstr ""
+msgstr "开启收银机"
#. module: point_of_sale
#: view:pos.add.product:0
msgid "Save & New"
-msgstr ""
+msgstr "保存并新建"
#. module: point_of_sale
#: report:pos.details:0
msgid "Sales total(Revenue)"
-msgstr ""
+msgstr "销售总计(总收入)"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.details_summary:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
msgid "Total paid"
msgstr "付款合计"
#. module: point_of_sale
#: field:account.journal,check_dtls:0
msgid "Check Details"
-msgstr ""
+msgstr "详细检查"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.details_summary:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
msgid "Qty of product"
msgstr "产品数量"
#. module: point_of_sale
#: field:pos.order,contract_number:0
msgid "Contract Number"
-msgstr ""
+msgstr "联系号码"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "March"
-msgstr ""
+msgstr "3月"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_users_product_re
#: report:pos.user.product:0
msgid "User's Product"
-msgstr ""
+msgstr "用户的产品"
#. module: point_of_sale
-#: code:addons/point_of_sale/point_of_sale.py:1042
-#: code:addons/point_of_sale/point_of_sale.py:1067
+#: code:addons/point_of_sale/point_of_sale.py:1043
+#: code:addons/point_of_sale/point_of_sale.py:1068
#, python-format
msgid ""
"You have to select a pricelist in the sale form !\n"
"Please set one before choosing a product."
msgstr ""
+"你必须在销售窗口选择一条报价单!\n"
+"请在选择某个产品之前设置它。"
#. module: point_of_sale
-#: field:pos.order.line,price_subtotal:0
+#: view:pos.order:0
+#: field:pos.order.line,price_subtotal_incl:0
msgid "Subtotal"
msgstr "小计"
@@ -607,39 +640,39 @@ msgstr "小计"
#: model:ir.model,name:point_of_sale.model_pos_close_statement
#: view:pos.close.statement:0
msgid "Close Statements"
-msgstr ""
+msgstr "关闭收银机"
#. module: point_of_sale
#: view:account.journal:0
msgid "Extended Configureation"
-msgstr ""
+msgstr "扩展配置"
#. module: point_of_sale
#: report:account.statement:0
#: report:all.closed.cashbox.of.the.day:0
msgid "Starting Balance"
-msgstr ""
+msgstr "期初余额"
#. module: point_of_sale
#: report:pos.payment.report.user:0
msgid "Payment By User"
-msgstr ""
+msgstr "用户付款"
#. module: point_of_sale
#: field:pos.order,type_rec:0
msgid "Type of Receipt"
-msgstr ""
+msgstr "收据类型"
#. module: point_of_sale
#: view:report.pos.order:0
#: field:report.pos.order,nbr:0
msgid "# of Lines"
-msgstr ""
+msgstr "# 明细"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_accepted
msgid "Accepted Sales"
-msgstr ""
+msgstr "已接受的销售订单"
#. module: point_of_sale
#: help:account.journal,check_dtls:0
@@ -650,11 +683,10 @@ msgstr ""
#. module: point_of_sale
#: report:all.closed.cashbox.of.the.day:0
msgid "St.Name"
-msgstr ""
+msgstr "St.Name"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.details_summary:0
+#: report:pos.details_summary:0
msgid "Sales total"
msgstr "销售合计"
@@ -664,7 +696,7 @@ msgid "Sum of subtotals"
msgstr "合计小计"
#. module: point_of_sale
-#: wizard_field:pos.payment,ask_pay,payment_date:0
+#: field:pos.make.payment,payment_date:0
msgid "Payment date"
msgstr "付款日期"
@@ -681,9 +713,13 @@ msgstr "创建日期"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user_today
msgid "Today's Sales"
-msgstr ""
+msgstr "今天的销售情况"
#. module: point_of_sale
+#: view:report.sales.by.margin.pos:0
+#: view:report.sales.by.margin.pos.month:0
+#: view:report.sales.by.user.pos:0
+#: view:report.sales.by.user.pos.month:0
#: view:report.transaction.pos:0
msgid "POS "
msgstr "POS "
@@ -696,31 +732,32 @@ msgid "Total :"
msgstr "合计:"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
+#: code:addons/point_of_sale/point_of_sale.py:1202
#, python-format
msgid "Create line failed !"
-msgstr ""
+msgstr "明细创建失败!"
#. module: point_of_sale
#: field:report.sales.by.margin.pos,product_name:0
#: field:report.sales.by.margin.pos.month,product_name:0
msgid "Product Name"
-msgstr ""
+msgstr "产品名称"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
+#: code:addons/point_of_sale/point_of_sale.py:69
#, python-format
msgid "Invalid action !"
-msgstr ""
+msgstr "无效动作!"
#. module: point_of_sale
+#: field:pos.make.payment,pricelist_id:0
#: field:pos.order,pricelist_id:0
msgid "Pricelist"
msgstr "价格表"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.details_summary:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
msgid "Total invoiced"
msgstr "已开票合计"
@@ -728,17 +765,17 @@ msgstr "已开票合计"
#: view:report.pos.order:0
#: field:report.pos.order,product_qty:0
msgid "# of Qty"
-msgstr ""
+msgstr "数量#"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_return
msgid "Point of sale return"
-msgstr ""
+msgstr "POS退款"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos_month
msgid "Sales by margin monthly"
-msgstr ""
+msgstr "按月利润率查看销售情况"
#. module: point_of_sale
#: view:pos.order:0
@@ -747,15 +784,15 @@ msgstr ""
#: field:report.sales.by.user.pos,date_order:0
#: field:report.sales.by.user.pos.month,date_order:0
msgid "Order Date"
-msgstr ""
+msgstr "订单日期"
#. module: point_of_sale
#: report:all.closed.cashbox.of.the.day:0
msgid "Today's Closed Cashbox"
-msgstr ""
+msgstr "今日关闭的钱箱"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Draft Invoice"
msgstr "发票草稿"
@@ -764,7 +801,7 @@ msgstr "发票草稿"
msgid ""
"The amount of the voucher must be the same amount as the one on the "
"statement line"
-msgstr ""
+msgstr "凭证金额必须和对账单明细上的金额一致"
#. module: point_of_sale
#: field:product.product,expense_pdt:0
@@ -775,7 +812,7 @@ msgstr ""
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_sales_user_today_current_user
#: view:pos.sales.user.today.current_user:0
msgid "Sales for Current User"
-msgstr ""
+msgstr "当前用户的销售订单"
#. module: point_of_sale
#: report:pos.invoice:0
@@ -786,26 +823,26 @@ msgstr "财务状况备注:"
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "September"
-msgstr ""
+msgstr "9月"
#. module: point_of_sale
#: report:account.statement:0
#: report:all.closed.cashbox.of.the.day:0
msgid "Opening Date"
-msgstr ""
+msgstr "开启日期"
#. module: point_of_sale
#: report:pos.lines:0
msgid "Taxes :"
-msgstr ""
+msgstr "税:"
#. module: point_of_sale
#: field:report.transaction.pos,disc:0
msgid "Disc."
-msgstr ""
+msgstr "折扣"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "VAT :"
msgstr "增值税:"
@@ -817,16 +854,16 @@ msgstr "POS单明细"
#. module: point_of_sale
#: view:pos.receipt:0
msgid "Receipt :"
-msgstr ""
+msgstr "收据:"
#. module: point_of_sale
-#: field:pos.order,amount_paid:0
+#: field:account.bank.statement.line,pos_statement_id:0
#: field:pos.order,amount_return:0
msgid "unknown"
msgstr "未知"
#. module: point_of_sale
-#: rml:pos.details:0
+#: report:pos.details:0
#: field:report.transaction.pos,date_create:0
msgid "Date"
msgstr "日期"
@@ -834,17 +871,17 @@ msgstr "日期"
#. module: point_of_sale
#: view:report.pos.order:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "扩展过滤器..."
#. module: point_of_sale
#: field:pos.order,num_sale:0
msgid "Internal Note"
-msgstr ""
+msgstr "内部备注"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_res_company
msgid "Companies"
-msgstr ""
+msgstr "公司"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_transaction_pos
@@ -855,7 +892,7 @@ msgstr "POS交易"
#: code:addons/point_of_sale/wizard/pos_get_sale.py:54
#, python-format
msgid "UserError "
-msgstr ""
+msgstr "UserError "
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_box_entries
@@ -863,21 +900,21 @@ msgid "Pos Box Entries"
msgstr ""
#. module: point_of_sale
-#: code:addons/point_of_sale/wizard/wizard_get_sale.py:0
+#: code:addons/point_of_sale/wizard/pos_get_sale.py:54
#, python-format
msgid "You can't modify this order. It has already been paid"
-msgstr ""
+msgstr "你不能修改此订单,它已经付款了。"
#. module: point_of_sale
#: field:pos.details,date_end:0
#: field:pos.sale.user,date_end:0
msgid "Date End"
-msgstr ""
+msgstr "结束日期"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Your Reference"
-msgstr ""
+msgstr "你的关联单号"
#. module: point_of_sale
#: field:report.transaction.pos,no_trans:0
@@ -885,22 +922,21 @@ msgid "Number of Transaction"
msgstr "交易数"
#. module: point_of_sale
-#: wizard_button:pos.add_product,init,end:0
-#: wizard_button:pos.config.journal,init,end:0
-#: wizard_button:pos.discount,init,end:0
-#: view:pos.order:0
+#: view:pos.add.product:0
+#: view:pos.box.entries:0
+#: view:pos.box.out:0
+#: view:pos.get.sale:0
+#: view:pos.make.payment:0
#: selection:pos.order,state:0
-#: wizard_button:pos.payment,ask_pay,end:0
-#: wizard_button:pos.refund_order,init,end:0
-#: wizard_button:pos.sale.get,init,end:0
-#: wizard_button:pos.scan_product,init,end:0
+#: view:pos.receipt:0
+#: selection:report.pos.order,state:0
msgid "Cancel"
msgstr "取消"
#. module: point_of_sale
#: view:pos.order:0
msgid "Return Picking"
-msgstr ""
+msgstr "退回分拣单"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_details_summary
@@ -910,36 +946,36 @@ msgstr "销售(参考)"
#. module: point_of_sale
#: view:product.product:0
msgid "Information"
-msgstr ""
+msgstr "信息"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_wizard_enter_jrnl
msgid "Input Operations"
-msgstr ""
+msgstr "输入操作"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_cash_register
#: view:report.cash.register:0
msgid "Point of Sale Cash Register Analysis"
-msgstr ""
+msgstr "POS收银机分析"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_sales_user_today
msgid "Sale by Users"
-msgstr ""
+msgstr "按用户查看销售订单"
#. module: point_of_sale
#: report:pos.payment.report:0
msgid "Payment For Sale"
-msgstr ""
+msgstr "销售付款"
#. module: point_of_sale
#: field:pos.order,first_name:0
msgid "First Name"
-msgstr ""
+msgstr "名字"
#. module: point_of_sale
-#: view:pos.order:0
+#: view:res.company:0
msgid "Other"
msgstr "其它"
@@ -958,28 +994,31 @@ msgstr "金额合计"
#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_all_tree
#: model:ir.ui.menu,name:point_of_sale.menu_all_menu_all_register
msgid "Cash Registers"
-msgstr ""
+msgstr "收银机"
#. module: point_of_sale
#: view:account.journal:0
#: field:account.journal,journal_users:0
msgid "Users"
-msgstr ""
+msgstr "用户"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.invoice:0
-#: rml:pos.lines:0
-#: rml:pos.receipt:0
+#: report:pos.details:0
+#: report:pos.invoice:0
+#: report:pos.lines:0
msgid "Price"
msgstr "价格"
#. module: point_of_sale
-#: wizard_field:pos.scan_product,init,gencod:0
+#: field:pos.scan.product,gencod:0
msgid "Barcode"
-msgstr "条码"
+msgstr "条形码"
#. module: point_of_sale
+#: view:report.sales.by.margin.pos:0
+#: view:report.sales.by.margin.pos.month:0
+#: view:report.sales.by.user.pos:0
+#: view:report.sales.by.user.pos.month:0
#: view:report.transaction.pos:0
msgid "POS"
msgstr "POS"
@@ -987,18 +1026,18 @@ msgstr "POS"
#. module: point_of_sale
#: field:report.cash.register,date:0
msgid "Create Date"
-msgstr ""
+msgstr "创建日期"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_wizard_enter_jrnl2
msgid "Output Operations"
-msgstr ""
+msgstr "输出操作"
#. module: point_of_sale
#: report:pos.details:0
#: report:pos.details_summary:0
msgid "Start Period"
-msgstr ""
+msgstr "开始期间"
#. module: point_of_sale
#: report:account.statement:0
@@ -1006,12 +1045,12 @@ msgstr ""
#: report:pos.sales.user.today:0
#: report:pos.sales.user.today.current.user:0
msgid "Name"
-msgstr ""
+msgstr "名称"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_open_statement
msgid "Open Cash Registers"
-msgstr ""
+msgstr "打开收银机"
#. module: point_of_sale
#: report:pos.details:0
@@ -1021,15 +1060,15 @@ msgstr ""
#: report:pos.payment.report.user:0
#: report:pos.user.product:0
msgid "]"
-msgstr ""
+msgstr "]"
#. module: point_of_sale
#: sql_constraint:account.journal:0
msgid "The name of the journal must be unique per company !"
-msgstr ""
+msgstr "每个公司的日记账名称必须唯一!"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Supplier Refund"
msgstr "供应商退货"
@@ -1039,7 +1078,7 @@ msgstr "供应商退货"
#: view:report.cash.register:0
#: view:report.pos.order:0
msgid "Group By..."
-msgstr ""
+msgstr "分组..."
#. module: point_of_sale
#: view:pos.order:0
@@ -1049,53 +1088,54 @@ msgstr "POS单"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.all_closed_cashbox_of_the_day
msgid "All Closed CashBox"
-msgstr ""
+msgstr "所有关闭的钱箱"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
+#: code:addons/point_of_sale/point_of_sale.py:1042
+#: code:addons/point_of_sale/point_of_sale.py:1067
#, python-format
msgid "No Pricelist !"
-msgstr ""
+msgstr "没有价格表!"
#. module: point_of_sale
-#: wizard_view:pos.sale.get,init:0
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_get_sale
+#: view:pos.get.sale:0
msgid "Select an Open Sale Order"
msgstr "选择待处理的销售单"
#. module: point_of_sale
#: view:pos.order:0
msgid "Order date"
-msgstr ""
+msgstr "订单日期"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Base"
msgstr "基础"
#. module: point_of_sale
#: view:product.product:0
msgid "Account"
-msgstr ""
+msgstr "科目"
#. module: point_of_sale
#: field:pos.order,sale_manager:0
msgid "Salesman Manager"
-msgstr ""
+msgstr "销售经理"
#. module: point_of_sale
#: view:pos.order:0
-#: field:pos.order,note:0
msgid "Notes"
msgstr "备注"
#. module: point_of_sale
-#: wizard_field:pos.sale.get,init,picking_id:0
+#: field:pos.get.sale,picking_id:0
+#: view:pos.order:0
msgid "Sale Order"
msgstr "销售单"
#. module: point_of_sale
-#: rml:pos.invoice:0
-#: rml:pos.lines:0
+#: report:pos.invoice:0
#: field:pos.order,amount_tax:0
msgid "Taxes"
msgstr "税"
@@ -1103,12 +1143,13 @@ msgstr "税"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_day
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_form
msgid "Sale line"
msgstr "销售明细"
#. module: point_of_sale
#: field:pos.config.journal,code:0
-#: rml:pos.details:0
+#: report:pos.details:0
msgid "Code"
msgstr "代码"
@@ -1118,30 +1159,30 @@ msgstr "代码"
#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale_product
#: model:ir.ui.menu,name:point_of_sale.menu_pos_products
msgid "Products"
-msgstr ""
+msgstr "产品"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_payment_report
msgid "Payment Report For Sale"
-msgstr ""
+msgstr "销售的支付报表"
#. module: point_of_sale
#: field:account.journal,special_journal:0
msgid "Special Journal"
-msgstr ""
+msgstr "专用日记账"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_all_closed_cashbox_of_the_day
msgid "All closed cashbox of the day"
-msgstr ""
+msgstr "当日所有关闭的钱箱"
#. module: point_of_sale
#: view:pos.order:0
msgid "Extra Info"
-msgstr ""
+msgstr "附加信息"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Fax :"
msgstr "传真:"
@@ -1179,21 +1220,27 @@ msgstr ""
#. module: point_of_sale
#: field:pos.order,price_type:0
msgid "Price method"
-msgstr ""
+msgstr "定价方式"
#. module: point_of_sale
#: view:pos.receipt:0
msgid "Print the receipt of the sale"
-msgstr ""
+msgstr "打印销售订单的收据"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_stock_picking
msgid "Picking List"
-msgstr ""
+msgstr "分拣单"
#. module: point_of_sale
-#: rml:pos.details:0
-#: rml:pos.receipt:0
+#: report:pos.details:0
+#: report:pos.payment.report:0
+#: report:pos.payment.report.date:0
+#: report:pos.payment.report.user:0
+#: report:pos.sales.user.today.current.user:0
+#: report:pos.user.product:0
+#: field:report.sales.by.margin.pos,qty:0
+#: field:report.sales.by.margin.pos.month,qty:0
msgid "Qty"
msgstr "数量"
@@ -1201,18 +1248,25 @@ msgstr "数量"
#: view:report.cash.register:0
#: view:report.pos.order:0
msgid "Month -1"
-msgstr ""
+msgstr "上月"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_sale_user
#: model:ir.model,name:point_of_sale.model_pos_sale_user
#: view:pos.payment.report.user:0
msgid "Sale by User"
-msgstr ""
+msgstr "用户的销售订单"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
-#: code:addons/point_of_sale/report/pos_invoice.py:0
+#: code:addons/point_of_sale/point_of_sale.py:558
+#: code:addons/point_of_sale/point_of_sale.py:744
+#: code:addons/point_of_sale/point_of_sale.py:852
+#: code:addons/point_of_sale/report/pos_invoice.py:46
+#: code:addons/point_of_sale/wizard/pos_box_entries.py:103
+#: code:addons/point_of_sale/wizard/pos_box_entries.py:107
+#: code:addons/point_of_sale/wizard/pos_box_out.py:95
+#: code:addons/point_of_sale/wizard/pos_box_out.py:99
+#: code:addons/point_of_sale/wizard/pos_box_out.py:101
#, python-format
msgid "Error !"
msgstr "错误!"
@@ -1220,34 +1274,34 @@ msgstr "错误!"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_confirm
msgid "Sale Confirm"
-msgstr ""
+msgstr "确认售出"
#. module: point_of_sale
#: view:report.cash.register:0
msgid "state"
-msgstr ""
+msgstr "状态"
#. module: point_of_sale
#: view:product.product:0
msgid "Prices"
-msgstr ""
+msgstr "价格"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "July"
-msgstr ""
+msgstr "7月"
#. module: point_of_sale
-#: code:addons/point_of_sale/point_of_sale.py:544
+#: code:addons/point_of_sale/point_of_sale.py:547
#, python-format
msgid "Please provide an account for the product: %s"
-msgstr ""
+msgstr "请为产品%s提供一个科目"
#. module: point_of_sale
#: field:report.pos.order,delay_validation:0
msgid "Delay Validation"
-msgstr ""
+msgstr "验证延迟"
#. module: point_of_sale
#: field:pos.order,nb_print:0
@@ -1257,29 +1311,29 @@ msgstr "打印数"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_make_payment
msgid "Point of Sale Payment"
-msgstr ""
+msgstr "POS付款"
#. module: point_of_sale
#: report:pos.details:0
#: report:pos.details_summary:0
msgid "End Period"
-msgstr ""
+msgstr "结束期间"
#. module: point_of_sale
#: field:account.journal,auto_cash:0
msgid "Automatic Opening"
-msgstr ""
+msgstr "自动打开"
#. module: point_of_sale
#: field:pos.order.line,price_ded:0
msgid "Discount(Amount)"
-msgstr ""
+msgstr "折扣(金额)"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_add_product.py:51
#, python-format
msgid "Active ID is not found"
-msgstr ""
+msgstr "没有发现有效的ID"
#. module: point_of_sale
#: field:account.bank.statement.line,is_acc:0
@@ -1292,7 +1346,7 @@ msgstr ""
#: view:report.pos.order:0
#: field:report.pos.order,month:0
msgid "Month"
-msgstr ""
+msgstr "本月"
#. module: point_of_sale
#: view:pos.order:0
@@ -1302,7 +1356,7 @@ msgstr "POS销售单"
#. module: point_of_sale
#: report:account.statement:0
msgid "Statement Name"
-msgstr ""
+msgstr "对账单名称"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_tree
@@ -1311,114 +1365,121 @@ msgstr ""
#: field:pos.box.out,journal_id:0
#: field:pos.make.payment,journal:0
msgid "Cash Register"
-msgstr ""
+msgstr "收银机"
#. module: point_of_sale
#: field:pos.payment.report.date,date_start:0
msgid "Start Date"
-msgstr ""
+msgstr "开始日期"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_receipt
msgid "Point of sale receipt"
-msgstr ""
+msgstr "POS收银条"
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_payment.py:91
#, python-format
msgid "No order lines defined for this sale "
-msgstr ""
+msgstr "此销售订单没有定义订单明细 "
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_today
msgid "Sales by User Daily margin"
-msgstr ""
+msgstr "按用户日利润率查看销售报表"
#. module: point_of_sale
#: field:pos.order,note_2:0
msgid "Customer Note"
-msgstr ""
+msgstr "客户备注"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
+#: code:addons/point_of_sale/point_of_sale.py:340
#, python-format
msgid "No order lines defined for this sale."
-msgstr ""
+msgstr "订单没有订单明细"
#. module: point_of_sale
#: field:report.cash.register,balance_start:0
msgid "Opening Balance"
-msgstr ""
+msgstr "期初余额"
#. module: point_of_sale
+#: field:pos.order,amount_paid:0
#: selection:pos.order,state:0
+#: view:report.pos.order:0
+#: selection:report.pos.order,state:0
msgid "Paid"
msgstr "付款"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_all_sales_lines
msgid "All sales lines"
-msgstr ""
+msgstr "所有销售明细"
#. module: point_of_sale
#: selection:pos.order,state:0
#: selection:report.cash.register,state:0
msgid "Quotation"
-msgstr ""
+msgstr "报价单"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:all.closed.cashbox.of.the.day:0
+#: report:pos.invoice:0
+#: report:pos.lines:0
+#: report:pos.payment.report.date:0
+#: report:pos.payment.report.user:0
msgid "Total:"
msgstr "合计:"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos
msgid "Sales by margin"
-msgstr ""
+msgstr "按利润率查看销售"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_config_journal
msgid "Journal Configuration"
-msgstr ""
+msgstr "日记账配置"
#. module: point_of_sale
#: view:pos.order:0
msgid "Statement lines"
-msgstr ""
+msgstr "对账单明细"
#. module: point_of_sale
#: help:pos.order,user_id:0
msgid ""
"Person who uses the the cash register. It could be a reliever, a student or "
"an interim employee."
-msgstr ""
+msgstr "使用收银机的人。可以是一个救济者,学生或临时员工。"
#. module: point_of_sale
#: field:report.transaction.pos,invoice_id:0
msgid "Nbr Invoice"
-msgstr ""
+msgstr "发票编号"
#. module: point_of_sale
-#: model:ir.actions.report.xml,name:point_of_sale.pos_receipt
+#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_receipt
msgid "Receipt"
msgstr "收入"
#. module: point_of_sale
#: field:pos.order,invoice_wanted:0
msgid "Create Invoice"
-msgstr "创建发票"
+msgstr "生成发票"
#. module: point_of_sale
#: selection:pos.order,state:0
+#: selection:report.pos.order,state:0
msgid "Done"
msgstr "完成"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_invoice_report
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
+#: field:pos.make.payment,invoice_wanted:0
#: field:pos.order,invoice_id:0
-#: wizard_field:pos.payment,ask_pay,invoice_wanted:0
-#: field:report.transaction.pos,invoice_id:0
msgid "Invoice"
msgstr "发票"
@@ -1431,11 +1492,10 @@ msgstr ""
#: view:account.bank.statement:0
#: selection:report.cash.register,state:0
msgid "Open"
-msgstr ""
+msgstr "开放"
#. module: point_of_sale
#: field:pos.order.line,order_id:0
-#: field:pos.payment,order_id:0
msgid "Order Ref"
msgstr "单据参考"
@@ -1443,7 +1503,7 @@ msgstr "单据参考"
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment_repport_date
#: model:ir.ui.menu,name:point_of_sale.menu_pos_payment_report_date
msgid "Sales lines Report"
-msgstr ""
+msgstr "销售明细报表"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_box_entries
@@ -1454,34 +1514,42 @@ msgstr ""
#. module: point_of_sale
#: selection:pos.order,price_type:0
msgid "Tax excluded"
-msgstr ""
+msgstr "不含税"
#. module: point_of_sale
#: field:report.sales.by.margin.pos,net_margin_per_qty:0
#: field:report.sales.by.margin.pos.month,net_margin_per_qty:0
msgid "Net margin per Qty"
-msgstr ""
+msgstr "单位数量的毛利润"
#. module: point_of_sale
#: view:report.sales.by.margin.pos:0
#: view:report.sales.by.margin.pos.month:0
msgid "Sales by User Margin"
-msgstr ""
+msgstr "按用户和利润查看销售情况"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Taxes:"
msgstr "税:"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_report_pos_order
msgid "Point of Sale Orders Statistics"
-msgstr ""
+msgstr "POS订单统计"
#. module: point_of_sale
-#: wizard_field:pos.add_product,init,product:0
-#: rml:pos.details:0
+#: model:ir.model,name:point_of_sale.model_product_product
+#: field:pos.add.product,product_id:0
+#: report:pos.details:0
#: field:pos.order.line,product_id:0
+#: report:pos.payment.report:0
+#: report:pos.payment.report.date:0
+#: report:pos.payment.report.user:0
+#: report:pos.user.product:0
+#: view:product.product:0
+#: view:report.pos.order:0
+#: field:report.pos.order,product_id:0
msgid "Product"
msgstr "产品"
@@ -1493,23 +1561,23 @@ msgstr "销售单明细"
#. module: point_of_sale
#: field:product.product,disc_controle:0
msgid "Discount Control"
-msgstr ""
+msgstr "折扣控制"
#. module: point_of_sale
#: field:report.cash.register,balance_end_real:0
msgid "Closing Balance"
-msgstr ""
+msgstr "期末余额"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_details
#: model:ir.ui.menu,name:point_of_sale.menu_pos_details
msgid "Sale Details"
-msgstr ""
+msgstr "销售详情"
#. module: point_of_sale
#: field:pos.payment.report.date,date_end:0
msgid "End Date"
-msgstr ""
+msgstr "结束日期"
#. module: point_of_sale
#: field:pos.order,date_order:0
@@ -1520,68 +1588,73 @@ msgstr "订单日期"
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment_report_user
#: model:ir.model,name:point_of_sale.model_pos_payment_report_user
msgid "Sales lines by Users"
-msgstr ""
+msgstr "用户销售明细"
#. module: point_of_sale
#: field:res.company,max_diff:0
msgid "Max Difference for Cashboxes"
-msgstr ""
+msgstr "钱箱最大的差异"
#. module: point_of_sale
#: view:pos.close.statement:0
#: view:pos.confirm:0
#: view:pos.open.statement:0
msgid "Yes"
-msgstr ""
+msgstr "是"
#. module: point_of_sale
-#: code:addons/point_of_sale/point_of_sale.py:743
+#: code:addons/point_of_sale/point_of_sale.py:744
#, python-format
msgid "There is no income account defined for this product: \"%s\" (id:%d)"
-msgstr ""
+msgstr "没有为此产品定义收入类科目: \\\"%s\\\" (id:%d)"
#. module: point_of_sale
#: view:pos.make.payment:0
msgid "The cash register must be opened to be able to execute a payment."
-msgstr ""
+msgstr "收银机必须处于开启状态才能处理支付业务。"
#. module: point_of_sale
#: report:pos.lines:0
msgid "Net Total :"
-msgstr ""
+msgstr "总净重:"
#. module: point_of_sale
#: view:product.product:0
msgid "Product Description"
-msgstr ""
+msgstr "产品描述"
#. module: point_of_sale
#: field:pos.details,date_start:0
#: field:pos.sale.user,date_start:0
msgid "Date Start"
-msgstr ""
+msgstr "开始日期"
#. module: point_of_sale
-#: rml:pos.lines:0
#: field:pos.order,amount_total:0
+#: report:pos.payment.report:0
+#: report:pos.payment.report.date:0
+#: report:pos.payment.report.user:0
+#: report:pos.sales.user.today.current.user:0
+#: field:report.sales.by.user.pos,amount:0
+#: field:report.sales.by.user.pos.month,amount:0
msgid "Total"
msgstr "合计"
#. module: point_of_sale
#: view:pos.sale.user:0
msgid "Sale By User"
-msgstr ""
+msgstr "用户的销售订单"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_open_statement
msgid "Open Cash Register"
-msgstr ""
+msgstr "开启收银机"
#. module: point_of_sale
#: report:account.statement:0
#: model:ir.actions.report.xml,name:point_of_sale.account_statement
msgid "Statement"
-msgstr ""
+msgstr "银行单据"
#. module: point_of_sale
#: field:pos.order,name:0
@@ -1591,7 +1664,7 @@ msgstr "订单描述"
#. module: point_of_sale
#: field:pos.make.payment,num_sale:0
msgid "Num.File"
-msgstr ""
+msgstr "Num.File"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment_report
@@ -1599,54 +1672,70 @@ msgstr ""
#: model:ir.model,name:point_of_sale.model_pos_payment_report
#: view:pos.payment.report:0
msgid "Payment Report"
-msgstr ""
+msgstr "付款分析报表"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_view_pos_return
msgid "Return lines"
-msgstr ""
+msgstr "退货明细"
#. module: point_of_sale
-#: rml:pos.lines:0
+#: report:account.statement:0
+#: report:all.closed.cashbox.of.the.day:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
+#: report:pos.lines:0
+#: field:pos.order,company_id:0
+#: field:pos.order.line,company_id:0
+#: report:pos.payment.report:0
+#: report:pos.payment.report.date:0
+#: report:pos.payment.report.user:0
+#: report:pos.sales.user:0
+#: report:pos.sales.user.today:0
+#: report:pos.sales.user.today.current.user:0
+#: report:pos.user.product:0
+#: field:report.pos.order,company_id:0
msgid "Company"
msgstr "公司"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Invoice Date"
msgstr "发票日期"
#. module: point_of_sale
-#: code:addons/point_of_sale/point_of_sale.py:1057
-#: code:addons/point_of_sale/point_of_sale.py:1076
+#: code:addons/point_of_sale/point_of_sale.py:1058
+#: code:addons/point_of_sale/point_of_sale.py:1077
#, python-format
msgid ""
"Couldn't find a pricelist line matching this product and quantity.\n"
"You have to change either the product, the quantity or the pricelist."
msgstr ""
+"找不到此产品和数量的价格表。\n"
+"你必须修改产品,或价格表的数量。"
#. module: point_of_sale
#: field:pos.order.line,serial_number:0
msgid "Serial Number"
-msgstr ""
+msgstr "序列号"
#. module: point_of_sale
#: view:pos.order:0
msgid "Reprint"
-msgstr ""
+msgstr "重新打印"
#. module: point_of_sale
-#: code:addons/point_of_sale/point_of_sale.py:555
+#: code:addons/point_of_sale/point_of_sale.py:558
#: code:addons/point_of_sale/wizard/pos_box_entries.py:103
#: code:addons/point_of_sale/wizard/pos_box_out.py:101
#, python-format
msgid "You have to open at least one cashbox"
-msgstr ""
+msgstr "你必须开启至少一个钱箱"
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_payment_report_user
msgid "Today's Payment By User"
-msgstr ""
+msgstr "今日用户的付款分析"
#. module: point_of_sale
#: field:stock.picking,pos_order:0
@@ -1658,74 +1747,73 @@ msgstr "POS单"
#: code:addons/point_of_sale/wizard/pos_payment.py:91
#, python-format
msgid "Error!"
-msgstr ""
+msgstr "出错!"
#. module: point_of_sale
-#: rml:pos.lines:0
+#: report:pos.lines:0
msgid "No. Of Articles"
msgstr "条款号"
#. module: point_of_sale
#: field:pos.order,date_validity:0
-#: wizard_field:pos.refund_order,init,date_validity:0
msgid "Validity Date"
msgstr "有效期"
#. module: point_of_sale
-#: view:pos.order:0
#: field:pos.order,pickings:0
msgid "Picking"
msgstr "领料/提货"
#. module: point_of_sale
#: field:pos.order,shop_id:0
+#: field:report.pos.order,shop_id:0
msgid "Shop"
msgstr "商店"
#. module: point_of_sale
-#: field:pos.order,last_out_picking:0
+#: field:pos.order,picking_id:0
msgid "Last Output Picking"
msgstr "最近输出的领料/提货"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_account_bank_statement_line
msgid "Bank Statement Line"
-msgstr ""
+msgstr "银行对账单明细"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_account_bank_statement
msgid "Bank Statement"
-msgstr ""
+msgstr "银行对账单"
#. module: point_of_sale
#: report:pos.user.product:0
msgid "Ending Date"
-msgstr ""
+msgstr "结束日期"
#. module: point_of_sale
#: view:report.sales.by.user.pos:0
#: view:report.sales.by.user.pos.month:0
#: view:report.transaction.pos:0
msgid "POS Report"
-msgstr ""
+msgstr "POS分析报表"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_discount
msgid "Add Discount"
-msgstr ""
+msgstr "增加折扣"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_close_statement
msgid "Close Cash Register"
-msgstr ""
+msgstr "关闭收银机"
#. module: point_of_sale
#: field:pos.order.line,qty_rfd:0
msgid "Refunded Quantity"
-msgstr ""
+msgstr "退货数量"
#. module: point_of_sale
-#: wizard_view:pos.scan_product,init:0
+#: view:pos.scan.product:0
msgid "Scan Barcode"
msgstr "扫描条码"
@@ -1733,62 +1821,63 @@ msgstr "扫描条码"
#: field:pos.box.entries,product_id:0
#: field:pos.box.out,product_id:0
msgid "Operation"
-msgstr ""
+msgstr "操作"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale
msgid "Sales Order"
-msgstr ""
+msgstr "销售订单"
#. module: point_of_sale
#: field:pos.order,journal_entry:0
msgid "Journal Entry"
-msgstr ""
+msgstr "日记账簿"
#. module: point_of_sale
#: selection:report.cash.register,state:0
msgid "Confirmed"
-msgstr ""
+msgstr "已确认"
#. module: point_of_sale
#: report:pos.invoice:0
msgid "Cancelled Invoice"
-msgstr ""
+msgstr "已取消的发票"
#. module: point_of_sale
-#: model:ir.actions.wizard,name:point_of_sale.pos_confirm
-#: wizard_button:pos.sale.get,init,set:0
+#: view:account.bank.statement:0
+#: view:pos.get.sale:0
+#: view:report.cash.register:0
msgid "Confirm"
msgstr "确定"
#. module: point_of_sale
#: report:pos.payment.report.date:0
msgid "Sales Lines"
-msgstr ""
+msgstr "销售明细"
#. module: point_of_sale
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
-msgstr ""
+msgstr "错误!您不能创建递归公司."
#. module: point_of_sale
#: field:pos.discount,discount:0
msgid "Discount "
-msgstr ""
+msgstr "折扣 "
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Supplier Invoice"
msgstr "供应商发票"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
+#: code:addons/point_of_sale/point_of_sale.py:1210
#, python-format
msgid "Modify line failed !"
-msgstr ""
+msgstr "明细修改失败!"
#. module: point_of_sale
-#: wizard_field:pos.payment,ask_pay,payment_name:0
+#: field:pos.make.payment,payment_name:0
msgid "Payment name"
msgstr "付款名称"
@@ -1805,7 +1894,7 @@ msgstr ""
#. module: point_of_sale
#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user_today_current_user
msgid "Today's Sales by Current User"
-msgstr ""
+msgstr "当前用户今日销售订单"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_box_out
@@ -1815,58 +1904,58 @@ msgstr ""
#. module: point_of_sale
#: sql_constraint:account.journal:0
msgid "The code of the journal must be unique per company !"
-msgstr ""
+msgstr "每个公司的日记账代码必须唯一!"
#. module: point_of_sale
-#: model:ir.ui.menu,name:point_of_sale.menu_point_config
+#: model:ir.ui.menu,name:point_of_sale.menu_point_config_product
msgid "Configuration"
msgstr "设置"
#. module: point_of_sale
#: report:pos.user.product:0
msgid "Starting Date"
-msgstr ""
+msgstr "开始日期"
#. module: point_of_sale
#: field:pos.order,date_validation:0
#: field:report.pos.order,date_validation:0
msgid "Validation Date"
-msgstr ""
+msgstr "审核日期"
#. module: point_of_sale
-#: code:addons/point_of_sale/point_of_sale.py:504
-#: code:addons/point_of_sale/point_of_sale.py:506
+#: code:addons/point_of_sale/point_of_sale.py:507
+#: code:addons/point_of_sale/point_of_sale.py:509
#, python-format
msgid "You don't have enough access to validate this sale!"
-msgstr ""
+msgstr "你没有权限审核此销售订单!"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_invoice
msgid "Invoices"
-msgstr ""
+msgstr "发票"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "December"
-msgstr ""
+msgstr "12月"
#. module: point_of_sale
#: view:report.pos.order:0
#: field:report.pos.order,total_discount:0
msgid "Total Discount"
-msgstr ""
+msgstr "总折扣"
#. module: point_of_sale
#: view:pos.box.out:0
msgid "Take Money"
-msgstr ""
+msgstr "取钱"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_details
#: model:ir.model,name:point_of_sale.model_pos_sales_user_today_current_user
msgid "Sales Details"
-msgstr ""
+msgstr "销售明细"
#. module: point_of_sale
#: field:product.product,am_out:0
@@ -1878,26 +1967,35 @@ msgstr ""
#: code:addons/point_of_sale/wizard/pos_open_statement.py:54
#, python-format
msgid "Message"
-msgstr ""
+msgstr "消息"
#. module: point_of_sale
+#: view:account.journal:0
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_tree2
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_tree3
#: model:ir.actions.act_window,name:point_of_sale.action_pos_pos_form
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_pos_form_user
#: model:ir.model,name:point_of_sale.model_pos_order
-#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale
#: model:ir.ui.menu,name:point_of_sale.menu_point_root
msgid "Point of Sale"
msgstr "POS"
#. module: point_of_sale
-#: field:pos.order,user_id:0
+#: view:pos.order:0
+#: field:pos.payment.report.date,user_id:0
+#: field:pos.payment.report.user,user_id:0
+#: field:pos.sale.user,user_id:0
+#: field:pos.sales.user.today,user_id:0
+#: view:report.pos.order:0
+#: field:report.pos.order,user_id:0
msgid "Salesman"
msgstr "销售员"
#. module: point_of_sale
-#: rml:pos.details:0
+#: report:pos.details:0
#: selection:pos.order,state:0
+#: view:report.pos.order:0
+#: selection:report.pos.order,state:0
msgid "Invoiced"
msgstr "已开票"
@@ -1906,20 +2004,21 @@ msgstr "已开票"
#: view:pos.confirm:0
#: view:pos.open.statement:0
msgid "No"
-msgstr ""
+msgstr "否"
#. module: point_of_sale
#: field:pos.order.line,notice:0
msgid "Discount Notice"
-msgstr ""
+msgstr "折扣通告"
#. module: point_of_sale
-#: wizard_button:pos.scan_product,init,add:0
+#: view:pos.scan.product:0
msgid "Add"
msgstr "增加"
#. module: point_of_sale
-#: selection:pos.order,state:0
+#: view:report.cash.register:0
+#: selection:report.pos.order,state:0
msgid "Draft"
msgstr "草稿"
@@ -1931,45 +2030,57 @@ msgstr "POS单明细"
#. module: point_of_sale
#: view:pos.open.statement:0
msgid "Are you sure you want to open the statements ?"
-msgstr ""
+msgstr "你确定要开启收银机吗?"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_payment_report_date
msgid "POS Payment Report according to date"
-msgstr ""
+msgstr "按日期的POS付款分析报表"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "PRO-FORMA"
msgstr "形式发票"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
+#: code:addons/point_of_sale/point_of_sale.py:638
#, python-format
msgid "Please provide a partner for the sale."
-msgstr ""
+msgstr "请提供业务伙伴。"
#. module: point_of_sale
-#: code:addons/point_of_sale/point_of_sale.py:852
+#: code:addons/point_of_sale/point_of_sale.py:853
#, python-format
msgid ""
"There is no receivable account defined for this journal: \"%s\" (id:%d)"
-msgstr ""
+msgstr "没有为此日记账:\"%s\" (id:%d)定义应收账款科目"
#. module: point_of_sale
#: field:pos.order,user_salesman_id:0
msgid "Cashier"
-msgstr ""
+msgstr "收银员"
#. module: point_of_sale
+#: report:account.statement:0
+#: report:all.closed.cashbox.of.the.day:0
+#: view:pos.payment.report.date:0
+#: report:pos.sales.user:0
+#: report:pos.sales.user.today:0
+#: report:pos.sales.user.today.current.user:0
+#: report:pos.user.product:0
+#: view:report.cash.register:0
+#: field:report.cash.register,user_id:0
+#: field:report.sales.by.margin.pos,user_id:0
+#: field:report.sales.by.margin.pos.month,user_id:0
+#: field:report.sales.by.user.pos,user_id:0
+#: field:report.sales.by.user.pos.month,user_id:0
#: field:report.transaction.pos,user_id:0
msgid "User"
msgstr "用户"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree
-#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_month
-#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_today
+#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos
msgid "Sales by user"
msgstr "销售用户"
@@ -1977,26 +2088,32 @@ msgstr "销售用户"
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "November"
-msgstr ""
+msgstr "11月"
#. module: point_of_sale
#: view:pos.receipt:0
msgid "Print Receipt"
-msgstr ""
+msgstr "打印收银条"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "January"
-msgstr ""
+msgstr "1月"
#. module: point_of_sale
#: view:pos.order.line:0
msgid "POS Orders lines"
-msgstr ""
+msgstr "POS订单明细"
#. module: point_of_sale
-#: code:addons/point_of_sale/pos.py:0
+#: code:addons/point_of_sale/point_of_sale.py:340
+#: code:addons/point_of_sale/point_of_sale.py:507
+#: code:addons/point_of_sale/point_of_sale.py:509
+#: code:addons/point_of_sale/point_of_sale.py:547
+#: code:addons/point_of_sale/point_of_sale.py:638
+#: code:addons/point_of_sale/point_of_sale.py:1202
+#: code:addons/point_of_sale/point_of_sale.py:1210
#, python-format
msgid "Error"
msgstr "错误"
@@ -2004,40 +2121,49 @@ msgstr "错误"
#. module: point_of_sale
#: field:report.transaction.pos,journal_id:0
msgid "Sales Journal"
-msgstr ""
+msgstr "销售日记账"
#. module: point_of_sale
-#: rml:pos.invoice:0
+#: report:pos.invoice:0
msgid "Refund"
msgstr "退货"
#. module: point_of_sale
-#: code:addons/point_of_sale/report/pos_invoice.py:0
+#: code:addons/point_of_sale/report/pos_invoice.py:46
#, python-format
msgid "Please create an invoice for this sale."
-msgstr ""
+msgstr "请为此销售单生成发票。"
#. module: point_of_sale
#: report:pos.sales.user:0
#: report:pos.sales.user.today:0
#: field:report.pos.order,date:0
msgid "Date Order"
-msgstr ""
+msgstr "订购日期"
#. module: point_of_sale
#: model:ir.ui.menu,name:point_of_sale.menu_close_statement
msgid "Close Cash Registers"
-msgstr ""
+msgstr "关闭收银机"
#. module: point_of_sale
#: report:pos.details:0
#: report:pos.payment.report.date:0
#: report:pos.payment.report.user:0
msgid "Disc(%)"
-msgstr ""
+msgstr "折扣(%)"
#. module: point_of_sale
-#: view:pos.order:0
+#: view:all.closed.cashbox.of.the.day:0
+#: view:pos.details:0
+#: view:pos.discount:0
+#: view:pos.payment.report:0
+#: view:pos.payment.report.date:0
+#: view:pos.payment.report.user:0
+#: view:pos.sale.user:0
+#: view:pos.sales.user.today:0
+#: view:pos.sales.user.today.current_user:0
+#: view:pos.scan.product:0
msgid "Close"
msgstr "关闭"
@@ -2049,32 +2175,32 @@ msgstr "单据明细"
#. module: point_of_sale
#: field:pos.order.line,price_subtotal:0
msgid "Subtotal w/o Tax"
-msgstr ""
+msgstr "税额小计w/o"
#. module: point_of_sale
#: view:pos.order:0
msgid "Add product"
-msgstr ""
+msgstr "添加产品"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment
msgid "Pyament Report"
-msgstr ""
+msgstr "付款分析报表"
#. module: point_of_sale
#: field:report.transaction.pos,jl_id:0
msgid "Cash Journals"
-msgstr ""
+msgstr "现金日记账"
#. module: point_of_sale
#: view:pos.details:0
msgid "POS Details :"
-msgstr ""
+msgstr "POS详情:"
#. module: point_of_sale
#: report:pos.sales.user.today:0
msgid "Today's Sales By User"
-msgstr ""
+msgstr "今日用户销售情况"
#. module: point_of_sale
#: view:pos.box.entries:0
@@ -2086,14 +2212,14 @@ msgstr ""
#: code:addons/point_of_sale/wizard/pos_box_out.py:99
#, python-format
msgid "please check that account is set to %s"
-msgstr ""
+msgstr "请检查科目是否设置为%s"
#. module: point_of_sale
+#: field:pos.box.entries,name:0
+#: field:pos.box.out,name:0
#: field:pos.config.journal,name:0
-#: rml:pos.invoice:0
-#: rml:pos.lines:0
-#: field:pos.payment,name:0
-#: rml:pos.receipt:0
+#: report:pos.invoice:0
+#: report:pos.lines:0
msgid "Description"
msgstr "说明"
@@ -2101,39 +2227,39 @@ msgstr "说明"
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "May"
-msgstr ""
+msgstr "5月"
#. module: point_of_sale
#: report:pos.lines:0
msgid "Sales lines"
-msgstr ""
+msgstr "销售明细"
#. module: point_of_sale
#: field:pos.order,note:0
msgid "Internal Notes"
-msgstr ""
+msgstr "内部备注"
#. module: point_of_sale
#: view:pos.add.product:0
msgid "Save & Close"
-msgstr ""
+msgstr "保存并关闭"
#. module: point_of_sale
#: view:pos.order:0
msgid "Running"
-msgstr ""
+msgstr "正在运行"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_all_closed_cashbox_of_the_day
msgid "All Cashboxes Of the day"
-msgstr ""
+msgstr "当日所有钱箱"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_order_all
#: model:ir.ui.menu,name:point_of_sale.menu_report_pos_order_all
#: view:report.pos.order:0
msgid "Point of Sale Analysis"
-msgstr ""
+msgstr "POS分析"
#. module: point_of_sale
#: field:pos.make.payment,partner_id:0
@@ -2141,7 +2267,7 @@ msgstr ""
#: field:pos.order,partner_id:0
#: view:report.pos.order:0
msgid "Customer"
-msgstr ""
+msgstr "客户"
#. module: point_of_sale
#: field:pos.make.payment,is_acc:0
@@ -2149,18 +2275,18 @@ msgstr ""
#: selection:pos.order,state:0
#: selection:report.pos.order,state:0
msgid "Advance"
-msgstr ""
+msgstr "预支"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "February"
-msgstr ""
+msgstr "2月"
#. module: point_of_sale
#: view:report.cash.register:0
msgid " Today "
-msgstr ""
+msgstr " 今日 "
#. module: point_of_sale
#: code:addons/point_of_sale/wizard/pos_box_out.py:95
@@ -2169,42 +2295,53 @@ msgid ""
"The maximum value you can still withdraw is exceeded. \n"
" Remaining value is equal to %d "
msgstr ""
+"超出你能提取的最大金额。\n"
+"当前余额是%d。 "
#. module: point_of_sale
#: field:pos.order,remboursed:0
msgid "Remboursed"
-msgstr ""
+msgstr "已报销"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_tree_open
msgid "Opened Sales"
-msgstr ""
+msgstr "未结销售订单"
#. module: point_of_sale
#: selection:report.cash.register,month:0
#: selection:report.pos.order,month:0
msgid "April"
-msgstr ""
+msgstr "4月"
#. module: point_of_sale
-#: view:pos.order:0
+#: field:pos.order,statement_ids:0
msgid "Payments"
msgstr "付款"
#. module: point_of_sale
-#: rml:pos.lines:0
+#: report:pos.details:0
+#: report:pos.details_summary:0
+#: report:pos.lines:0
+#: report:pos.payment.report:0
+#: report:pos.payment.report.date:0
+#: report:pos.payment.report.user:0
+#: report:pos.sales.user:0
+#: report:pos.sales.user.today:0
+#: report:pos.sales.user.today.current.user:0
+#: report:pos.user.product:0
msgid "Print Date"
msgstr "打印日期"
#. module: point_of_sale
#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_month
msgid "Sales by User Monthly margin"
-msgstr ""
+msgstr "按用户月利润查看销售情况"
#. module: point_of_sale
#: view:pos.order:0
msgid "Search Sales Order"
-msgstr ""
+msgstr "查询销售订单"
#. module: point_of_sale
#: field:pos.order,account_move:0
@@ -2218,13 +2355,13 @@ msgstr "凭证"
#: view:pos.order:0
#, python-format
msgid "Make Payment"
-msgstr ""
+msgstr "付款"
#. module: point_of_sale
#: model:ir.model,name:point_of_sale.model_pos_sales_user_today
#: view:pos.sales.user.today:0
msgid "Sales User Today"
-msgstr ""
+msgstr "今日用户销售情况"
#. module: point_of_sale
#: view:report.cash.register:0
@@ -2232,7 +2369,7 @@ msgstr ""
#: view:report.pos.order:0
#: field:report.pos.order,year:0
msgid "Year"
-msgstr ""
+msgstr "年"
#~ msgid "Detail of Sales"
#~ msgstr "销售详情"
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index 4eeb7b2dd9f..917e6273ddc 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -253,17 +253,17 @@ class pos_order(osv.osv):
method=True,
string='Validation Date',
type='date', select=True, store=True),
- 'date_payment': fields.function(_get_date_payment2, method=True,
+ 'date_payment': fields.function(_get_date_payment2,
string='Payment Date',
type='date', select=True, store=True),
'date_validity': fields.date('Validity Date', required=True),
'user_id': fields.many2one('res.users', 'Connected Salesman', help="Person who uses the the cash register. It could be a reliever, a student or an interim employee."),
'user_salesman_id': fields.many2one('res.users', 'Cashier', required=True, help="User who is logged into the system."),
'sale_manager': fields.many2one('res.users', 'Salesman Manager'),
- 'amount_tax': fields.function(_amount_all, method=True, string='Taxes', digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
- 'amount_total': fields.function(_amount_all, method=True, string='Total', multi='all'),
- 'amount_paid': fields.function(_amount_all, string='Paid', states={'draft': [('readonly', False)]}, readonly=True, method=True, digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
- 'amount_return': fields.function(_amount_all, 'Returned', method=True, digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
+ 'amount_tax': fields.function(_amount_all, string='Taxes', digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
+ 'amount_total': fields.function(_amount_all, string='Total', multi='all'),
+ 'amount_paid': fields.function(_amount_all, string='Paid', states={'draft': [('readonly', False)]}, readonly=True, digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
+ 'amount_return': fields.function(_amount_all, 'Returned', digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
'lines': fields.one2many('pos.order.line', 'order_id', 'Order Lines', states={'draft': [('readonly', False)]}, readonly=True),
'price_type': fields.selection([
('tax_excluded','Tax excluded')],
@@ -955,7 +955,7 @@ class account_bank_statement_line(osv.osv):
res[line.id] = line.statement_id and line.statement_id.journal_id and line.statement_id.journal_id.name or None
return res
_columns= {
- 'journal_id': fields.function(_get_statement_journal, method=True,store=True, string='Journal', type='char', size=64),
+ 'journal_id': fields.function(_get_statement_journal,store=True, string='Journal', type='char', size=64),
'am_out': fields.boolean("To count"),
'is_acc': fields.boolean("Is accompte"),
'pos_statement_id': fields.many2one('pos.order', ondelete='cascade'),
@@ -1141,12 +1141,12 @@ class pos_order_line(osv.osv):
'notice': fields.char('Discount Notice', size=128, required=True),
'serial_number': fields.char('Serial Number', size=128),
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], required=True, change_default=True),
- 'price_unit': fields.function(_get_amount, method=True, string='Unit Price', store=True),
+ 'price_unit': fields.function(_get_amount, string='Unit Price', store=True),
'price_ded': fields.float('Discount(Amount)', digits_compute=dp.get_precision('Point Of Sale')),
'qty': fields.float('Quantity'),
'qty_rfd': fields.float('Refunded Quantity'),
- 'price_subtotal': fields.function(_amount_line_all, method=True, multi='pos_order_line_amount', string='Subtotal w/o Tax'),
- 'price_subtotal_incl': fields.function(_amount_line_all, method=True, multi='pos_order_line_amount', string='Subtotal'),
+ 'price_subtotal': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal w/o Tax'),
+ 'price_subtotal_incl': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal'),
'discount': fields.float('Discount (%)', digits=(16, 2)),
'order_id': fields.many2one('pos.order', 'Order Ref', ondelete='cascade'),
'create_date': fields.datetime('Creation Date', readonly=True),
diff --git a/addons/portal/__openerp__.py b/addons/portal/__openerp__.py
index 7aaa1682bb0..6bb69cd91c9 100644
--- a/addons/portal/__openerp__.py
+++ b/addons/portal/__openerp__.py
@@ -22,7 +22,7 @@
{
'name' : "Portal",
'version' : "1.0",
- 'depends' : ["base"],
+ 'depends' : ["base", "share"],
'author' : "OpenERP SA",
'category': 'Tools',
'description': """
@@ -36,10 +36,13 @@ users, etc). That feature is very handy when used in combination with the
module 'share'.
""",
'website': 'http://www.openerp.com',
- 'demo_xml': [],
'data': [
- 'security/portal_security.xml', 'security/ir.model.access.csv',
- 'portal_view.xml', 'wizard_view.xml', 'res_user_view.xml',
+ 'security/portal_security.xml',
+ 'security/ir.model.access.csv',
+ 'portal_view.xml',
+ 'res_user_view.xml',
+ 'wizard/portal_wizard_view.xml',
+ 'wizard/share_wizard_view.xml',
],
'installable': True,
'certificate' : '',
diff --git a/addons/portal/portal_view.xml b/addons/portal/portal_view.xml
index 598f3f55315..c2f91941ff8 100644
--- a/addons/portal/portal_view.xml
+++ b/addons/portal/portal_view.xml
@@ -2,7 +2,8 @@
-
+
diff --git a/addons/portal/wizard/__init__.py b/addons/portal/wizard/__init__.py
new file mode 100644
index 00000000000..90b71a62c30
--- /dev/null
+++ b/addons/portal/wizard/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2011 OpenERP S.A ().
+#
+# 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 .
+#
+##############################################################################
+
+import portal_wizard
+import share_wizard
+
diff --git a/addons/portal/wizard.py b/addons/portal/wizard/portal_wizard.py
similarity index 100%
rename from addons/portal/wizard.py
rename to addons/portal/wizard/portal_wizard.py
diff --git a/addons/portal/wizard_view.xml b/addons/portal/wizard/portal_wizard_view.xml
similarity index 100%
rename from addons/portal/wizard_view.xml
rename to addons/portal/wizard/portal_wizard_view.xml
diff --git a/addons/portal/wizard/share_wizard.py b/addons/portal/wizard/share_wizard.py
new file mode 100644
index 00000000000..c1366b5dbf0
--- /dev/null
+++ b/addons/portal/wizard/share_wizard.py
@@ -0,0 +1,190 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2011 OpenERP S.A ().
+#
+# 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 .
+#
+##############################################################################
+
+from osv import osv, fields
+from tools.translate import _
+
+UID_ROOT = 1
+SHARED_DOCS_MENU = "Documents"
+SHARED_DOCS_CHILD_MENU = "Shared Documents"
+
+class share_wizard_portal(osv.osv_memory):
+ """Inherited share wizard to automatically create appropriate
+ menus in the selected portal upon sharing with a portal group."""
+ _inherit = "share.wizard"
+
+ def _user_type_selection(self, cr, uid, context=None):
+ selection = super(share_wizard_portal, self)._user_type_selection(cr, uid, context=context)
+ selection.extend([('existing','Users you already shared with'),
+ ('groups','Existing Groups (e.g Portal Groups)')])
+ return selection
+
+ _columns = {
+ 'user_ids': fields.many2many('res.users', 'share_wizard_res_user_rel', 'share_id', 'user_id', 'Existing users', domain=[('share', '=', True)]),
+ 'group_ids': fields.many2many('res.groups', 'share_wizard_res_group_rel', 'share_id', 'group_id', 'Existing groups', domain=[('share', '=', False)]),
+
+ # no clean way to extend selection yet, copy the field.
+ 'user_type': fields.selection(_user_type_selection,'Users to share with',
+ help="Select the type of user(s) you would like to share data with."),
+ }
+
+ def is_portal_manager(self, cr, uid, context=None):
+ return self.has_group(cr, uid, module='portal', group_xml_id='group_portal_manager', context=context)
+
+ def _check_preconditions(self, cr, uid, wizard_data, context=None):
+ if wizard_data.user_type == 'existing':
+ self._assert(wizard_data.user_ids,
+ _('Please select at least one user to share with'),
+ context=context)
+ elif wizard_data.user_type == 'groups':
+ self._assert(wizard_data.group_ids,
+ _('Please select at least one group to share with'),
+ context=context)
+ return super(share_wizard_portal, self)._check_preconditions(cr, uid, wizard_data, context=context)
+
+ def _create_or_get_submenu_named(self, cr, uid, parent_menu_id, menu_name, context=None):
+ if not parent_menu_id:
+ return
+ Menus = self.pool.get('ir.ui.menu')
+ parent_menu = Menus.browse(cr, uid, parent_menu_id) # No context
+ menu_id = None
+ max_seq = 10
+ for child_menu in parent_menu.child_id:
+ max_seq = max(max_seq, child_menu.sequence)
+ if child_menu.name == menu_name:
+ menu_id = child_menu.id
+ break
+ if not menu_id:
+ # not found, create it
+ menu_id = Menus.create(cr, UID_ROOT,
+ {'name': menu_name,
+ 'parent_id': parent_menu.id,
+ 'sequence': max_seq + 10, # at the bottom
+ })
+ return menu_id
+
+ def _sharing_root_menu_id(self, cr, uid, portal, context=None):
+ """Create or retrieve root ID of sharing menu in portal menu
+
+ :param portal: browse_record of portal, constructed with a context WITHOUT language
+ """
+ parent_menu_id = self._create_or_get_submenu_named(cr, uid, portal.parent_menu_id.id, SHARED_DOCS_MENU, context=context)
+ if parent_menu_id:
+ child_menu_id = self._create_or_get_submenu_named(cr, uid, parent_menu_id, SHARED_DOCS_CHILD_MENU, context=context)
+ return child_menu_id
+
+ def _create_shared_data_menu(self, cr, uid, wizard_data, portal, context=None):
+ """Create sharing menus in portal menu according to share wizard options.
+
+ :param wizard_data: browse_record of share.wizard
+ :param portal: browse_record of portal, constructed with a context WITHOUT language
+ """
+ root_menu_id = self._sharing_root_menu_id(cr, uid, portal, context=context)
+ if not root_menu_id:
+ # no specific parent menu, cannot create the sharing menu at all.
+ return
+ # Create the shared action and menu
+ action_def = self._shared_action_def(cr, uid, wizard_data, context=None)
+ action_id = self.pool.get('ir.actions.act_window').create(cr, UID_ROOT, action_def)
+ menu_data = {'name': action_def['name'],
+ 'sequence': 10,
+ 'action': 'ir.actions.act_window,'+str(action_id),
+ 'parent_id': root_menu_id,
+ 'icon': 'STOCK_JUSTIFY_FILL'}
+ menu_id = self.pool.get('ir.ui.menu').create(cr, UID_ROOT, menu_data)
+ return menu_id
+
+ def _create_share_users_group(self, cr, uid, wizard_data, context=None):
+ # Override of super() to handle the possibly selected "existing users"
+ # and "existing groups".
+ # In both cases, we call super() to create the share group, but when
+ # sharing with existing groups, we will later delete it, and copy its
+ # access rights and rules to the selected groups.
+ group_id = super(share_wizard_portal,self)._create_share_users_group(cr, uid, wizard_data, context=context)
+
+ # For sharing with existing groups, we don't create a share group, instead we'll
+ # alter the rules of the groups so they can see the shared data
+ if wizard_data.group_ids:
+ # get the list of portals and the related groups to install their menus.
+ Portals = self.pool.get('res.portal')
+ all_portals = Portals.browse(cr, UID_ROOT, Portals.search(cr, UID_ROOT, [])) #no context!
+ all_portal_group_ids = [p.group_id.id for p in all_portals]
+
+ # populate result lines with the users of each group and
+ # setup the menu for portal groups
+ for group in wizard_data.group_ids:
+ if group.id in all_portal_group_ids:
+ portal = all_portals[all_portal_group_ids.index(group.id)]
+ self._create_shared_data_menu(cr, uid, wizard_data, portal, context=context)
+
+ for user in group.users:
+ new_line = {'user_id': user.id,
+ 'newly_created': False}
+ wizard_data.write({'result_line_ids': [(0,0,new_line)]})
+
+ elif wizard_data.user_ids:
+ # must take care of existing users, by adding them to the new group, which is group_ids[0],
+ # and adding the shortcut
+ selected_user_ids = [x.id for x in wizard_data.user_ids]
+ self.pool.get('res.users').write(cr, UID_ROOT, selected_user_ids, {'groups_id': [(4,group_id)]})
+ self._setup_action_and_shortcut(cr, uid, wizard_data, selected_user_ids, make_home=False, context=context)
+ # populate the result lines for existing users too
+ for user in wizard_data.user_ids:
+ new_line = { 'user_id': user.id,
+ 'newly_created': False}
+ wizard_data.write({'result_line_ids': [(0,0,new_line)]})
+
+ return group_id
+
+ def copy_share_group_access_and_delete(self, cr, wizard_data, share_group_id, context=None):
+ # In the case of sharing with existing groups, the strategy is to copy
+ # access rights and rules from the share group, so that we can
+ if not wizard_data.group_ids: return
+ Groups = self.pool.get('res.groups')
+ Rules = self.pool.get('ir.rule')
+ Rights = self.pool.get('ir.model.access')
+ share_group = Groups.browse(cr, UID_ROOT, share_group_id)
+ share_rule_ids = [r.id for r in share_group.rule_groups]
+ for target_group in wizard_data.group_ids:
+ # Link the rules to the group. This is appropriate because as of
+ # v6.1, the algorithm for combining them will OR the rules, hence
+ # extending the visible data.
+ Rules.write(cr, UID_ROOT, share_rule_ids, {'groups': [(4,target_group.id)]})
+ self._logger.debug("Linked sharing rules from temporary sharing group to group %s", target_group)
+
+ # Copy the access rights. This is appropriate too because
+ # groups have the UNION of all permissions granted by their
+ # access right lines.
+ for access_line in share_group.model_access:
+ Rights.copy(cr, UID_ROOT, access_line.id, default={'group_id': target_group.id})
+ self._logger.debug("Copied access rights from temporary sharing group to group %s", target_group)
+
+ # finally, delete it after removing its users
+ Groups.write(cr, UID_ROOT, [share_group_id], {'users': [(6,0,[])]})
+ Groups.unlink(cr, UID_ROOT, [share_group_id])
+ self._logger.debug("Deleted temporary sharing group %s", share_group_id)
+
+ def _finish_result_lines(self, cr, uid, wizard_data, share_group_id, context=None):
+ super(share_wizard_portal,self)._finish_result_lines(cr, uid, wizard_data, share_group_id, context=context)
+ self.copy_share_group_access_and_delete(cr, wizard_data, share_group_id, context=context)
+
+share_wizard_portal()
+
diff --git a/addons/portal/wizard/share_wizard_view.xml b/addons/portal/wizard/share_wizard_view.xml
new file mode 100644
index 00000000000..f16334b68a3
--- /dev/null
+++ b/addons/portal/wizard/share_wizard_view.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+ share.step1.form.portal
+ share.wizard
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ share.step2.form.portal
+ share.wizard
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index 743ef85a9ea..f05ca64144d 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -527,7 +527,7 @@ class stock_warehouse_orderpoint(osv.osv):
help="The procurement quantity will be rounded up to this multiple."),
'procurement_id': fields.many2one('procurement.order', 'Latest procurement', ondelete="set null"),
'company_id': fields.many2one('res.company','Company',required=True),
- 'procurement_draft_ids': fields.function(_get_draft_procurements, method=True, type='many2many', relation="procurement.order", \
+ 'procurement_draft_ids': fields.function(_get_draft_procurements, type='many2many', relation="procurement.order", \
string="Related Procurement Orders",help="Draft procurement of the product and location of that orderpoint"),
}
_defaults = {
diff --git a/addons/product/product.py b/addons/product/product.py
index fa6796b3953..320b4552c18 100644
--- a/addons/product/product.py
+++ b/addons/product/product.py
@@ -206,7 +206,7 @@ class product_category(osv.osv):
_description = "Product Category"
_columns = {
'name': fields.char('Name', size=64, required=True, translate=True),
- 'complete_name': fields.function(_name_get_fnc, method=True, type="char", string='Name'),
+ 'complete_name': fields.function(_name_get_fnc, type="char", string='Name'),
'parent_id': fields.many2one('product.category','Parent Category', select=True),
'child_id': fields.one2many('product.category', 'parent_id', string='Child Categories'),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of product categories."),
@@ -296,9 +296,9 @@ class product_template(osv.osv):
help='Coefficient to convert UOM to UOS\n'
' uos = uom * coeff'),
'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type', required=True),
- 'seller_delay': fields.function(_calc_seller, method=True, type='integer', string='Supplier Lead Time', multi="seller_delay", help="This is the average delay in days between the purchase order confirmation and the reception of goods for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."),
- 'seller_qty': fields.function(_calc_seller, method=True, type='float', string='Supplier Quantity', multi="seller_qty", help="This is minimum quantity to purchase from Main Supplier."),
- 'seller_id': fields.function(_calc_seller, method=True, type='many2one', relation="res.partner", string='Main Supplier', help="Main Supplier who has highest priority in Supplier List.", multi="seller_id"),
+ 'seller_delay': fields.function(_calc_seller, type='integer', string='Supplier Lead Time', multi="seller_delay", help="This is the average delay in days between the purchase order confirmation and the reception of goods for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."),
+ 'seller_qty': fields.function(_calc_seller, type='float', string='Supplier Quantity', multi="seller_qty", help="This is minimum quantity to purchase from Main Supplier."),
+ 'seller_id': fields.function(_calc_seller, type='many2one', relation="res.partner", string='Main Supplier', help="Main Supplier who has highest priority in Supplier List.", multi="seller_id"),
'seller_ids': fields.one2many('product.supplierinfo', 'product_id', 'Partners'),
'loc_rack': fields.char('Rack', size=16),
'loc_row': fields.char('Row', size=16),
@@ -469,14 +469,14 @@ class product_product(osv.osv):
_inherits = {'product.template': 'product_tmpl_id'}
_order = 'default_code,name_template'
_columns = {
- 'qty_available': fields.function(_product_qty_available, method=True, type='float', string='Real Stock'),
- 'virtual_available': fields.function(_product_virtual_available, method=True, type='float', string='Virtual Stock'),
- 'incoming_qty': fields.function(_product_incoming_qty, method=True, type='float', string='Incoming'),
- 'outgoing_qty': fields.function(_product_outgoing_qty, method=True, type='float', string='Outgoing'),
- 'price': fields.function(_product_price, method=True, type='float', string='Pricelist', digits_compute=dp.get_precision('Sale Price')),
- 'lst_price' : fields.function(_product_lst_price, method=True, type='float', string='Public Price', digits_compute=dp.get_precision('Sale Price')),
- 'code': fields.function(_product_code, method=True, type='char', string='Reference'),
- 'partner_ref' : fields.function(_product_partner_ref, method=True, type='char', string='Customer ref'),
+ 'qty_available': fields.function(_product_qty_available, type='float', string='Real Stock'),
+ 'virtual_available': fields.function(_product_virtual_available, type='float', string='Virtual Stock'),
+ 'incoming_qty': fields.function(_product_incoming_qty, type='float', string='Incoming'),
+ 'outgoing_qty': fields.function(_product_outgoing_qty, type='float', string='Outgoing'),
+ 'price': fields.function(_product_price, type='float', string='Pricelist', digits_compute=dp.get_precision('Sale Price')),
+ 'lst_price' : fields.function(_product_lst_price, type='float', string='Public Price', digits_compute=dp.get_precision('Sale Price')),
+ 'code': fields.function(_product_code, type='char', string='Reference'),
+ 'partner_ref' : fields.function(_product_partner_ref, type='char', string='Customer ref'),
'default_code' : fields.char('Reference', size=64),
'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the product without removing it."),
'variants': fields.char('Variants', size=64),
@@ -733,7 +733,7 @@ class product_supplierinfo(osv.osv):
'sequence' : fields.integer('Sequence', help="Assigns the priority to the list of product supplier."),
'product_uom': fields.many2one('product.uom', string="Supplier UoM", help="Choose here the Unit of Measure in which the prices and quantities are expressed below."),
'min_qty': fields.float('Minimal Quantity', required=True, help="The minimal quantity to purchase to this supplier, expressed in the supplier Product UoM if not empty, in the default unit of measure of the product otherwise."),
- 'qty': fields.function(_calc_qty, method=True, store=True, type='float', string='Quantity', multi="qty", help="This is a quantity which is converted into Default Uom."),
+ 'qty': fields.function(_calc_qty, store=True, type='float', string='Quantity', multi="qty", help="This is a quantity which is converted into Default Uom."),
'product_id' : fields.many2one('product.template', 'Product', required=True, ondelete='cascade', select=True),
'delay' : fields.integer('Delivery Lead Time', required=True, help="Lead time in days between the confirmation of the purchase order and the reception of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning."),
'pricelist_ids': fields.one2many('pricelist.partnerinfo', 'suppinfo_id', 'Supplier Pricelist'),
diff --git a/addons/product_expiry/i18n/fi.po b/addons/product_expiry/i18n/fi.po
new file mode 100644
index 00000000000..03098dfc7b1
--- /dev/null
+++ b/addons/product_expiry/i18n/fi.po
@@ -0,0 +1,181 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-27 06:27+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: product_expiry
+#: model:ir.model,name:product_expiry.model_stock_production_lot
+msgid "Production lot"
+msgstr "Tuotantoerä"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_from_product_template
+msgid "Ham"
+msgstr "Kinkku"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_lait_product_template
+msgid "Cow milk"
+msgstr "Maito"
+
+#. module: product_expiry
+#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
+msgid "Products date of expiry"
+msgstr "Tuotteet viimeisen käyttöpäivän mukaan"
+
+#. module: product_expiry
+#: field:product.product,life_time:0
+msgid "Product Life Time"
+msgstr "Tuotteen elinikä"
+
+#. module: product_expiry
+#: help:stock.production.lot,use_date:0
+msgid ""
+"The date on which the lot starts deteriorating without becoming dangerous."
+msgstr ""
+"Päivä jolloin erän laatu alkaa heikkenemään ennenkun se tulee vaaralliseksi."
+
+#. module: product_expiry
+#: field:product.product,use_time:0
+msgid "Product Use Time"
+msgstr "Tuotteen käyttöaika"
+
+#. module: product_expiry
+#: sql_constraint:stock.production.lot:0
+msgid ""
+"The combination of serial number and internal reference must be unique !"
+msgstr ""
+"Sarjanumeron ja sisäisen viitenumeron yhdistelmän on oltava uniikki !"
+
+#. module: product_expiry
+#: help:stock.production.lot,removal_date:0
+msgid "The date on which the lot should be removed."
+msgstr "Päivä jolloin erä tulisi poistaa."
+
+#. module: product_expiry
+#: model:ir.model,name:product_expiry.model_product_product
+msgid "Product"
+msgstr "Tuote"
+
+#. module: product_expiry
+#: help:product.product,alert_time:0
+msgid ""
+"The number of days after which an alert should be notified about the "
+"production lot."
+msgstr "Päivien määrä jonka jälkeen tuote-erästä tulee hälytys."
+
+#. module: product_expiry
+#: field:product.product,removal_time:0
+msgid "Product Removal Time"
+msgstr "Tuotteen poistopäivä"
+
+#. module: product_expiry
+#: field:stock.production.lot,removal_date:0
+msgid "Removal Date"
+msgstr "Poistopäivä"
+
+#. module: product_expiry
+#: help:stock.production.lot,life_date:0
+msgid ""
+"The date on which the lot may become dangerous and should not be consumed."
+msgstr ""
+"Päivä jolloin erä muuttuu vaaralliseksi, eikä sitä tule enään käyttää."
+
+#. module: product_expiry
+#: model:ir.module.module,description:product_expiry.module_meta_information
+msgid ""
+"Track different dates on products and production lots:\n"
+" - end of life\n"
+" - best before date\n"
+" - removal date\n"
+" - alert date\n"
+"Used, for example, in food industries."
+msgstr ""
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_pain_product_template
+msgid "Bread"
+msgstr "Leipä"
+
+#. module: product_expiry
+#: model:product.uom,name:product_expiry.product_uom_ltr
+#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
+msgid "LTR"
+msgstr ""
+
+#. module: product_expiry
+#: view:product.product:0
+#: view:stock.production.lot:0
+msgid "Dates"
+msgstr "Päivämäärät"
+
+#. module: product_expiry
+#: field:stock.production.lot,life_date:0
+msgid "End of Life Date"
+msgstr "Elinkaaren loppupäivä"
+
+#. module: product_expiry
+#: field:stock.production.lot,use_date:0
+msgid "Best before Date"
+msgstr "Parasta ennen päiväys"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_jambon_product_template
+msgid "French cheese Camenbert"
+msgstr "Ranskalaista Camenbert juustoa"
+
+#. module: product_expiry
+#: help:product.product,removal_time:0
+msgid "The number of days before a production lot should be removed."
+msgstr "Päivien määrä ennenkuin tuotantoerä tulisi poistaa."
+
+#. module: product_expiry
+#: field:stock.production.lot,alert_date:0
+msgid "Alert Date"
+msgstr "Hälytyspäivä"
+
+#. module: product_expiry
+#: help:product.product,use_time:0
+msgid ""
+"The number of days before a production lot starts deteriorating without "
+"becoming dangerous."
+msgstr ""
+
+#. module: product_expiry
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr "Virhe: Väärä EAN-koodi"
+
+#. module: product_expiry
+#: help:product.product,life_time:0
+msgid ""
+"The number of days before a production lot may become dangerous and should "
+"not be consumed."
+msgstr ""
+"Päivien määrä ennenkuin tuotantoerä voi tulla vaaralliseksi eikä sitä enään "
+"tulisi käyttää."
+
+#. module: product_expiry
+#: help:stock.production.lot,alert_date:0
+msgid ""
+"The date on which an alert should be notified about the production lot."
+msgstr "Päivä jolloin tästä tuotantoerästä tulisi tehdä hälytys."
+
+#. module: product_expiry
+#: field:product.product,alert_time:0
+msgid "Product Alert Time"
+msgstr "Tuotten hälytysaika"
diff --git a/addons/product_margin/product_margin.py b/addons/product_margin/product_margin.py
index 37639c3b223..5895feedf3f 100644
--- a/addons/product_margin/product_margin.py
+++ b/addons/product_margin/product_margin.py
@@ -92,38 +92,38 @@ class product_product(osv.osv):
return res
_columns = {
- 'date_from': fields.function(_product_margin, method=True, type='date', string='From Date', multi='product_margin'),
- 'date_to': fields.function(_product_margin, method=True, type='date', string='To Date', multi='product_margin'),
- 'invoice_state': fields.function(_product_margin, method=True, type='selection', selection=[
+ 'date_from': fields.function(_product_margin, type='date', string='From Date', multi='product_margin'),
+ 'date_to': fields.function(_product_margin, type='date', string='To Date', multi='product_margin'),
+ 'invoice_state': fields.function(_product_margin, type='selection', selection=[
('paid','Paid'),('open_paid','Open and Paid'),('draft_open_paid','Draft, Open and Paid')
], string='Invoice State',multi='product_margin', readonly=True),
- 'sale_avg_price' : fields.function(_product_margin, method=True, type='float', string='Avg. Unit Price', multi='product_margin',
+ 'sale_avg_price' : fields.function(_product_margin, type='float', string='Avg. Unit Price', multi='product_margin',
help="Avg. Price in Customer Invoices)"),
- 'purchase_avg_price' : fields.function(_product_margin, method=True, type='float', string='Avg. Unit Price', multi='product_margin',
+ 'purchase_avg_price' : fields.function(_product_margin, type='float', string='Avg. Unit Price', multi='product_margin',
help="Avg. Price in Supplier Invoices "),
- 'sale_num_invoiced' : fields.function(_product_margin, method=True, type='float', string='# Invoiced', multi='product_margin',
+ 'sale_num_invoiced' : fields.function(_product_margin, type='float', string='# Invoiced', multi='product_margin',
help="Sum of Quantity in Customer Invoices"),
- 'purchase_num_invoiced' : fields.function(_product_margin, method=True, type='float', string='# Invoiced', multi='product_margin',
+ 'purchase_num_invoiced' : fields.function(_product_margin, type='float', string='# Invoiced', multi='product_margin',
help="Sum of Quantity in Supplier Invoices"),
- 'sales_gap' : fields.function(_product_margin, method=True, type='float', string='Sales Gap', multi='product_margin',
+ 'sales_gap' : fields.function(_product_margin, type='float', string='Sales Gap', multi='product_margin',
help="Expected Sale - Turn Over"),
- 'purchase_gap' : fields.function(_product_margin, method=True, type='float', string='Purchase Gap', multi='product_margin',
+ 'purchase_gap' : fields.function(_product_margin, type='float', string='Purchase Gap', multi='product_margin',
help="Normal Cost - Total Cost"),
- 'turnover' : fields.function(_product_margin, method=True, type='float', string='Turnover' ,multi='product_margin',
+ 'turnover' : fields.function(_product_margin, type='float', string='Turnover' ,multi='product_margin',
help="Sum of Multification of Invoice price and quantity of Customer Invoices"),
- 'total_cost' : fields.function(_product_margin, method=True, type='float', string='Total Cost', multi='product_margin',
+ 'total_cost' : fields.function(_product_margin, type='float', string='Total Cost', multi='product_margin',
help="Sum of Multification of Invoice price and quantity of Supplier Invoices "),
- 'sale_expected' : fields.function(_product_margin, method=True, type='float', string='Expected Sale', multi='product_margin',
+ 'sale_expected' : fields.function(_product_margin, type='float', string='Expected Sale', multi='product_margin',
help="Sum of Multification of Sale Catalog price and quantity of Customer Invoices"),
- 'normal_cost' : fields.function(_product_margin, method=True, type='float', string='Normal Cost', multi='product_margin',
+ 'normal_cost' : fields.function(_product_margin, type='float', string='Normal Cost', multi='product_margin',
help="Sum of Multification of Cost price and quantity of Supplier Invoices"),
- 'total_margin' : fields.function(_product_margin, method=True, type='float', string='Total Margin', multi='product_margin',
+ 'total_margin' : fields.function(_product_margin, type='float', string='Total Margin', multi='product_margin',
help="Turnorder - Standard price"),
- 'expected_margin' : fields.function(_product_margin, method=True, type='float', string='Expected Margin', multi='product_margin',
+ 'expected_margin' : fields.function(_product_margin, type='float', string='Expected Margin', multi='product_margin',
help="Expected Sale - Normal Cost"),
- 'total_margin_rate' : fields.function(_product_margin, method=True, type='float', string='Total Margin (%)', multi='product_margin',
+ 'total_margin_rate' : fields.function(_product_margin, type='float', string='Total Margin (%)', multi='product_margin',
help="Total margin * 100 / Turnover"),
- 'expected_margin_rate' : fields.function(_product_margin, method=True, type='float', string='Expected Margin (%)', multi='product_margin',
+ 'expected_margin_rate' : fields.function(_product_margin, type='float', string='Expected Margin (%)', multi='product_margin',
help="Expected margin * 100 / Expected Sale"),
}
diff --git a/addons/project/project.py b/addons/project/project.py
index 072f7cc31c3..b1461da424c 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -123,7 +123,7 @@ class project(osv.osv):
return super(project, self).unlink(cr, uid, ids, *args, **kwargs)
_columns = {
- 'complete_name': fields.function(_complete_name, method=True, string="Project Name", type='char', size=250),
+ 'complete_name': fields.function(_complete_name, string="Project Name", type='char', size=250),
'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the project without removing it."),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of Projects."),
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc.", ondelete="cascade", required=True),
@@ -133,18 +133,18 @@ class project(osv.osv):
'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members',
help="Project's members are users who can have an access to the tasks related to this project.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'tasks': fields.one2many('project.task', 'project_id', "Project tasks"),
- 'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.",
+ 'planned_hours': fields.function(_progress_rate, multi="progress", string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.",
store = {
'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours','state'], 10),
}),
- 'effective_hours': fields.function(_progress_rate, multi="progress", method=True, string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects."),
- 'total_hours': fields.function(_progress_rate, multi="progress", method=True, string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.",
+ 'effective_hours': fields.function(_progress_rate, multi="progress", string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects."),
+ 'total_hours': fields.function(_progress_rate, multi="progress", string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.",
store = {
'project.project': (lambda self, cr, uid, ids, c={}: ids, ['tasks'], 10),
'project.task': (_get_project_task, ['planned_hours', 'effective_hours', 'remaining_hours', 'total_hours', 'progress', 'delay_hours','state'], 10),
}),
- 'progress_rate': fields.function(_progress_rate, multi="progress", method=True, string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo."),
+ 'progress_rate': fields.function(_progress_rate, multi="progress", string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo."),
'warn_customer': fields.boolean('Warn Partner', help="If you check this, the user will have a popup when closing a task that propose a message to send by email to the customer.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
@@ -420,7 +420,7 @@ class task(osv.osv):
return result.keys()
_columns = {
- 'active': fields.function(_is_template, method=True, store=True, string='Not a Template Task', type='boolean', help="This field is computed automatically and have the same behavior than the boolean 'active' field: if the task is linked to a template or unactivated project, it will be hidden unless specifically asked."),
+ 'active': fields.function(_is_template, store=True, string='Not a Template Task', type='boolean', help="This field is computed automatically and have the same behavior than the boolean 'active' field: if the task is linked to a template or unactivated project, it will be hidden unless specifically asked."),
'name': fields.char('Task Summary', size=128, required=True),
'description': fields.text('Description'),
'priority': fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Important'), ('0','Very important')], 'Priority'),
@@ -438,23 +438,23 @@ class task(osv.osv):
'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'),
'notes': fields.text('Notes'),
'planned_hours': fields.float('Planned Hours', help='Estimated time to do the task, usually set by the project manager when the task is in draft state.'),
- 'effective_hours': fields.function(_hours_get, method=True, string='Hours Spent', multi='hours', help="Computed using the sum of the task work done.",
+ 'effective_hours': fields.function(_hours_get, string='Hours Spent', multi='hours', help="Computed using the sum of the task work done.",
store = {
'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours'], 10),
'project.task.work': (_get_task, ['hours'], 10),
}),
'remaining_hours': fields.float('Remaining Hours', digits=(16,2), help="Total remaining time, can be re-estimated periodically by the assignee of the task."),
- 'total_hours': fields.function(_hours_get, method=True, string='Total Hours', multi='hours', help="Computed as: Time Spent + Remaining Time.",
+ 'total_hours': fields.function(_hours_get, string='Total Hours', multi='hours', help="Computed as: Time Spent + Remaining Time.",
store = {
'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours'], 10),
'project.task.work': (_get_task, ['hours'], 10),
}),
- 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", help="If the task has a progress of 99.99% you should close the task if it's finished or reevaluate the time",
+ 'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="If the task has a progress of 99.99% you should close the task if it's finished or reevaluate the time",
store = {
'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours','state'], 10),
'project.task.work': (_get_task, ['hours'], 10),
}),
- 'delay_hours': fields.function(_hours_get, method=True, string='Delay Hours', multi='hours', help="Computed as difference of the time estimated by the project manager and the real time to close the task.",
+ 'delay_hours': fields.function(_hours_get, string='Delay Hours', multi='hours', help="Computed as difference of the time estimated by the project manager and the real time to close the task.",
store = {
'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours'], 10),
'project.task.work': (_get_task, ['hours'], 10),
@@ -529,8 +529,6 @@ class task(osv.osv):
#
# Override view according to the company definition
#
-
-
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
users_obj = self.pool.get('res.users')
@@ -562,13 +560,27 @@ class task(osv.osv):
res['fields'][f]['string'] = res['fields'][f]['string'].replace('Hours',tm)
return res
+ def _check_child_task(self, cr, uid, ids, context=None):
+ if context == None:
+ context = {}
+ tasks = self.browse(cr, uid, ids, context=context)
+ for task in tasks:
+ if task.child_ids:
+ for child in task.child_ids:
+ if child.state in ['draft', 'open', 'pending']:
+ raise osv.except_osv(_("Warning !"), _("Child task still open.\nPlease cancel or complete child task first."))
+ return True
+
def action_close(self, cr, uid, ids, context=None):
# This action open wizard to send email to partner or project manager after close task.
- project_id = len(ids) and ids[0] or False
- if not project_id: return False
- task = self.browse(cr, uid, project_id, context=context)
+ if context == None:
+ context = {}
+ task_id = len(ids) and ids[0] or False
+ self._check_child_task(cr, uid, ids, context=context)
+ if not task_id: return False
+ task = self.browse(cr, uid, task_id, context=context)
project = task.project_id
- res = self.do_close(cr, uid, [project_id], context=context)
+ res = self.do_close(cr, uid, [task_id], context=context)
if project.warn_manager or project.warn_customer:
return {
'name': _('Send Email after close task'),
@@ -582,7 +594,7 @@ class task(osv.osv):
}
return res
- def do_close(self, cr, uid, ids, context=None):
+ def do_close(self, cr, uid, ids, context={}):
"""
Close Task
"""
@@ -601,7 +613,7 @@ class task(osv.osv):
'ref_partner_id': task.partner_id.id,
'ref_doc1': 'project.task,%d'% (task.id,),
'ref_doc2': 'project.project,%d'% (project.id,),
- })
+ }, context=context)
for parent_id in task.parent_ids:
if parent_id.state in ('pending','draft'):
@@ -610,12 +622,12 @@ class task(osv.osv):
if child.id != task.id and child.state not in ('done','cancelled'):
reopen = False
if reopen:
- self.do_reopen(cr, uid, [parent_id.id])
+ self.do_reopen(cr, uid, [parent_id.id], context=context)
vals.update({'state': 'done'})
vals.update({'remaining_hours': 0.0})
if not task.date_end:
vals.update({ 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')})
- self.write(cr, uid, [task.id],vals)
+ self.write(cr, uid, [task.id],vals, context=context)
message = _("The task '%s' is done") % (task.name,)
self.log(cr, uid, task.id, message)
return True
@@ -634,15 +646,15 @@ class task(osv.osv):
'ref_partner_id': task.partner_id.id,
'ref_doc1': 'project.task,%d' % task.id,
'ref_doc2': 'project.project,%d' % project.id,
- })
-
- self.write(cr, uid, [task.id], {'state': 'open'})
+ }, context=context)
+ self.write(cr, uid, [task.id], {'state': 'open'}, context=context)
return True
- def do_cancel(self, cr, uid, ids, *args):
+ def do_cancel(self, cr, uid, ids, context={}):
request = self.pool.get('res.request')
- tasks = self.browse(cr, uid, ids)
+ tasks = self.browse(cr, uid, ids, context=context)
+ self._check_child_task(cr, uid, ids, context=context)
for task in tasks:
project = task.project_id
if project.warn_manager and project.user_id and (project.user_id.id != uid):
@@ -654,25 +666,25 @@ class task(osv.osv):
'ref_partner_id': task.partner_id.id,
'ref_doc1': 'project.task,%d' % task.id,
'ref_doc2': 'project.project,%d' % project.id,
- })
+ }, context=context)
message = _("The task '%s' is cancelled.") % (task.name,)
self.log(cr, uid, task.id, message)
- self.write(cr, uid, [task.id], {'state': 'cancelled', 'remaining_hours':0.0})
+ self.write(cr, uid, [task.id], {'state': 'cancelled', 'remaining_hours':0.0}, context=context)
return True
- def do_open(self, cr, uid, ids, *args):
- tasks= self.browse(cr,uid,ids)
+ def do_open(self, cr, uid, ids, context={}):
+ tasks= self.browse(cr, uid, ids, context=context)
for t in tasks:
data = {'state': 'open'}
if not t.date_start:
data['date_start'] = time.strftime('%Y-%m-%d %H:%M:%S')
- self.write(cr, uid, [t.id], data)
+ self.write(cr, uid, [t.id], data, context=context)
message = _("The task '%s' is opened.") % (t.name,)
self.log(cr, uid, t.id, message)
return True
- def do_draft(self, cr, uid, ids, *args):
- self.write(cr, uid, ids, {'state': 'draft'})
+ def do_draft(self, cr, uid, ids, context={}):
+ self.write(cr, uid, ids, {'state': 'draft'}, context=context)
return True
def do_delegate(self, cr, uid, task_id, delegate_data={}, context=None):
@@ -707,8 +719,8 @@ class task(osv.osv):
self.log(cr, uid, task.id, message)
return True
- def do_pending(self, cr, uid, ids, *args):
- self.write(cr, uid, ids, {'state': 'pending'})
+ def do_pending(self, cr, uid, ids, context={}):
+ self.write(cr, uid, ids, {'state': 'pending'}, context=context)
for (id, name) in self.name_get(cr, uid, ids):
message = _("The task '%s' is pending.") % name
self.log(cr, uid, id, message)
@@ -736,13 +748,19 @@ class task(osv.osv):
index = sorted_types.index(typeid)
self.write(cr, uid, task.id, {'type_id': sorted_types[index+1]})
return True
-
+
def next_type(self, cr, uid, ids, *args):
return self._change_type(cr, uid, ids, True, *args)
def prev_type(self, cr, uid, ids, *args):
return self._change_type(cr, uid, ids, False, *args)
-
+
+ def unlink(self, cr, uid, ids, context=None):
+ if context == None:
+ context = {}
+ self._check_child_task(cr, uid, ids, context=context)
+ res = super(task, self).unlink(cr, uid, ids, context)
+ return res
task()
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 5faa0090a15..0f53aff7ed4 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -369,7 +369,7 @@
gantt
-
+
diff --git a/addons/project/wizard/project_task_close.py b/addons/project/wizard/project_task_close.py
index 97e8e4730c2..010bba9e52b 100644
--- a/addons/project/wizard/project_task_close.py
+++ b/addons/project/wizard/project_task_close.py
@@ -115,7 +115,7 @@ class project_task_close(osv.osv_memory):
mail_id = tools.email_send(from_adr, to_adr, subject, tools.ustr(body), email_bcc=[from_adr])
if not mail_id:
raise osv.except_osv(_('Error'), _("Couldn't send mail! Check the email ids and smtp configuration settings"))
- return {}
+ return {'type': 'ir.actions.act_window_close'}
project_task_close()
diff --git a/addons/project/wizard/project_task_delegate.py b/addons/project/wizard/project_task_delegate.py
index cffdf2f9ef9..eaf5dea3084 100644
--- a/addons/project/wizard/project_task_delegate.py
+++ b/addons/project/wizard/project_task_delegate.py
@@ -108,6 +108,6 @@ class project_task_delegate(osv.osv_memory):
delegate_data['user_id'] = delegate_data['user_id'][0]
delegate_data['name'] = tools.ustr(delegate_data['name'])
task_pool.do_delegate(cr, uid, task_id, delegate_data, context=context)
- return {}
+ return {'type': 'ir.actions.act_window_close'}
project_task_delegate()
diff --git a/addons/project/wizard/project_task_reevaluate.py b/addons/project/wizard/project_task_reevaluate.py
index e4e2fab66e3..d627ffa4408 100644
--- a/addons/project/wizard/project_task_reevaluate.py
+++ b/addons/project/wizard/project_task_reevaluate.py
@@ -79,5 +79,5 @@ class project_task_reevaluate(osv.osv_memory):
task_pool.write(cr, uid, task_id, {'remaining_hours': data.remaining_hours})
if context.get('button_reactivate', False):
task_pool.do_reopen(cr, uid, [task_id], context=context)
- return {}
+ return {'type': 'ir.actions.act_window_close'}
project_task_reevaluate()
diff --git a/addons/project_issue/i18n/zh_CN.po b/addons/project_issue/i18n/zh_CN.po
new file mode 100644
index 00000000000..1c41a92d2f9
--- /dev/null
+++ b/addons/project_issue/i18n/zh_CN.po
@@ -0,0 +1,972 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-30 11:51+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-07-01 04:54+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: project_issue
+#: field:project.issue.report,delay_open:0
+msgid "Avg. Delay to Open"
+msgstr "距开始处理"
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+msgid "Group By..."
+msgstr "分组..."
+
+#. module: project_issue
+#: field:project.issue,working_hours_open:0
+msgid "Working Hours to Open the Issue"
+msgstr "据开始处理小时数"
+
+#. module: project_issue
+#: constraint:project.project:0
+msgid "Error! project start-date must be lower then project end-date."
+msgstr "错误!项目的开始日期必须小于项目的结束日期"
+
+#. module: project_issue
+#: field:project.issue,date_open:0
+msgid "Opened"
+msgstr "已开启"
+
+#. module: project_issue
+#: field:project.issue.report,opening_date:0
+msgid "Date of Opening"
+msgstr "距开始日期天数"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "March"
+msgstr "三月"
+
+#. module: project_issue
+#: field:project.issue,progress:0
+msgid "Progress (%)"
+msgstr "进度(%)"
+
+#. module: project_issue
+#: field:project.issue,company_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,company_id:0
+msgid "Company"
+msgstr "公司"
+
+#. module: project_issue
+#: field:project.issue,email_cc:0
+msgid "Watchers Emails"
+msgstr "关注者的电子邮件"
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Close Working hours"
+msgstr "距处理结束小时数"
+
+#. module: project_issue
+#: model:ir.model,name:project_issue.model_project_issue_version
+msgid "project.issue.version"
+msgstr "project.issue.version"
+
+#. module: project_issue
+#: field:project.issue,day_open:0
+msgid "Days to Open"
+msgstr "距开始日期"
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:360
+#, python-format
+msgid ""
+"You cannot escalate this issue.\n"
+"The relevant Project has not configured the Escalation Project!"
+msgstr ""
+"不能升级此缺陷。\n"
+"所属项目没有配置相关项目。"
+
+#. module: project_issue
+#: constraint:project.project:0
+msgid "Error! You cannot assign escalation to the same project!"
+msgstr "不能升级到相同的项目"
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Date Closed"
+msgstr "结束日期"
+
+#. module: project_issue
+#: view:project.issue.report:0
+#: field:project.issue.report,day:0
+msgid "Day"
+msgstr "天"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Add Internal Note"
+msgstr "添加内部备注"
+
+#. module: project_issue
+#: field:project.issue,task_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,task_id:0
+msgid "Task"
+msgstr "任务"
+
+#. module: project_issue
+#: view:board.board:0
+msgid "Issues By Stage"
+msgstr "按状态查看缺陷"
+
+#. module: project_issue
+#: field:project.issue,partner_mobile:0
+msgid "Mobile"
+msgstr "手机"
+
+#. module: project_issue
+#: field:project.issue,message_ids:0
+msgid "Messages"
+msgstr "消息"
+
+#. module: project_issue
+#: model:ir.model,name:project_issue.model_project_project
+#: view:project.issue:0
+#: field:project.issue,project_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,project_id:0
+msgid "Project"
+msgstr "项目"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_view_my_open_project_issue_tree
+msgid "My Open Project issues"
+msgstr "我的未处理缺陷"
+
+#. module: project_issue
+#: selection:project.issue,state:0
+#: selection:project.issue.report,state:0
+msgid "Cancelled"
+msgstr "已取消"
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:360
+#, python-format
+msgid "Warning !"
+msgstr "警告!"
+
+#. module: project_issue
+#: field:project.issue.report,date_closed:0
+msgid "Date of Closing"
+msgstr "结束日期"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Issue Tracker Search"
+msgstr "缺陷列表"
+
+#. module: project_issue
+#: field:project.issue.report,working_hours_open:0
+msgid "Avg. Working Hours to Open"
+msgstr "距开始日期小时数"
+
+#. module: project_issue
+#: field:project.issue,date_action_next:0
+msgid "Next Action"
+msgstr "下一动作"
+
+#. module: project_issue
+#: help:project.project,project_escalation_id:0
+msgid ""
+"If any issue is escalated from the current Project, it will be listed under "
+"the project selected here."
+msgstr "如果当前项目的缺陷被提升,则这个缺陷会归属于这里输入的项目"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Extra Info"
+msgstr "附加信息"
+
+#. module: project_issue
+#: model:ir.actions.act_window,help:project_issue.action_project_issue_report
+msgid ""
+"This report on the project issues allows you to analyse the quality of your "
+"support or after-sales services. You can track the issues per age. You can "
+"analyse the time required to open or close an issue, the number of email to "
+"exchange and the time spent on average by issues."
+msgstr "缺陷报表用于分析你的支持或售后服务的数量。报表自动分页。可以分析开始处理或关闭一个缺陷需要的时间,邮件的数量和处理缺陷的平均时间。"
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,partner_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,partner_id:0
+msgid "Partner"
+msgstr "业务伙伴"
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:473
+#, python-format
+msgid " (copy)"
+msgstr " (copy)"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Previous"
+msgstr "上一个"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Statistics"
+msgstr "统计信息"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Convert To Task"
+msgstr "转为任务"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_project_issue_report
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_report_tree
+#: view:project.issue.report:0
+msgid "Issues Analysis"
+msgstr "缺陷分析"
+
+#. module: project_issue
+#: field:project.issue.version,name:0
+msgid "Version Number"
+msgstr "版本号"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Next"
+msgstr "下一个"
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,priority:0
+#: view:project.issue.report:0
+#: field:project.issue.report,priority:0
+msgid "Priority"
+msgstr "优先级"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Send New Email"
+msgstr "发送新电子邮件"
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,version_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,version_id:0
+msgid "Version"
+msgstr "版本"
+
+#. module: project_issue
+#: model:ir.module.module,shortdesc:project_issue.module_meta_information
+msgid "Issue Management in Project Management"
+msgstr "项目管理中的缺陷管理"
+
+#. module: project_issue
+#: view:board.board:0
+msgid "Pending Issues"
+msgstr "暂停的缺陷"
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Open Working Hours"
+msgstr "距开始处理小时数"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.project_issue_categ_action
+msgid "Issue Categories"
+msgstr "缺陷类别"
+
+#. module: project_issue
+#: field:project.issue,email_from:0
+msgid "Email"
+msgstr "电子邮件"
+
+#. module: project_issue
+#: field:project.issue,canal_id:0
+#: field:project.issue.report,canal_id:0
+msgid "Channel"
+msgstr "渠道"
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Lowest"
+msgstr "最低"
+
+#. module: project_issue
+#: field:project.issue,create_date:0
+#: field:project.issue.report,creation_date:0
+msgid "Creation Date"
+msgstr "创建日期"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.project_issue_version_action
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_version_act
+msgid "Versions"
+msgstr "版本"
+
+#. module: project_issue
+#: field:project.issue,partner_phone:0
+msgid "Phone"
+msgstr "电话"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Reset to Draft"
+msgstr "重置为草稿"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Today"
+msgstr "今天"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.open_board_project_issue
+#: model:ir.ui.menu,name:project_issue.menu_deshboard_project_issue
+msgid "Project Issue Dashboard"
+msgstr "缺陷控制台"
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+msgid "Done"
+msgstr "已完成"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "July"
+msgstr "七月"
+
+#. module: project_issue
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_category_act
+msgid "Categories"
+msgstr "类别"
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+#: field:project.issue.report,type_id:0
+msgid "Stage"
+msgstr "阶段"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "History Information"
+msgstr "历史信息"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_view_current_project_issue_tree
+#: model:ir.actions.act_window,name:project_issue.action_view_pending_project_issue_tree
+msgid "Project issues"
+msgstr "缺陷"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Communication & History"
+msgstr "沟通&日志"
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "My Open Project Issue"
+msgstr "我未处理的缺陷"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_view_my_project_issue_tree
+msgid "My Project Issues"
+msgstr "我的缺陷清单"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Contact"
+msgstr "联系方式"
+
+#. module: project_issue
+#: view:board.board:0
+msgid "My Board"
+msgstr "我的控制台"
+
+#. module: project_issue
+#: view:board.board:0
+msgid "My Issues"
+msgstr "我的缺陷清单"
+
+#. module: project_issue
+#: help:project.issue,canal_id:0
+msgid ""
+"The channels represent the different communication modes available with the "
+"customer. With each commercial opportunity, you can indicate the canall "
+"which is this opportunity source."
+msgstr "渠道是不同的接触客户的方式。每个商机都要指定来源的渠道。"
+
+#. module: project_issue
+#: model:ir.actions.act_window,help:project_issue.project_issue_version_action
+msgid ""
+"You can use the issues tracker in OpenERP to handle bugs in the software "
+"development project, to handle claims in after-sales services, etc. Define "
+"here the different versions of your products on which you can work on issues."
+msgstr "可以用缺陷跟踪来管理软件开发中的Bug或售后的产品缺陷等。这里输入您管理缺陷的产品的不同版本。"
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:283
+#, python-format
+msgid "Tasks"
+msgstr "任务"
+
+#. module: project_issue
+#: field:project.issue.report,nbr:0
+msgid "# of Issues"
+msgstr "缺陷编号"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "September"
+msgstr "九月"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "December"
+msgstr "十二月"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Issue Tracker Tree"
+msgstr "缺陷列表"
+
+#. module: project_issue
+#: help:project.issue,assigned_to:0
+msgid "This is the current user to whom the related task have been assigned"
+msgstr "这是这个任务现在的负责人"
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+#: field:project.issue.report,month:0
+msgid "Month"
+msgstr "月份"
+
+#. module: project_issue
+#: model:ir.model,name:project_issue.model_project_issue_report
+msgid "project.issue.report"
+msgstr "project.issue.report"
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:362
+#: view:project.issue:0
+#, python-format
+msgid "Escalate"
+msgstr "提升"
+
+#. module: project_issue
+#: model:crm.case.categ,name:project_issue.feature_request_categ
+msgid "Feature Requests"
+msgstr "功能请求"
+
+#. module: project_issue
+#: field:project.issue,write_date:0
+msgid "Update Date"
+msgstr "更新日期"
+
+#. module: project_issue
+#: model:ir.module.module,description:project_issue.module_meta_information
+msgid ""
+"\n"
+" This module provide Issues/Bugs Management in Project\n"
+" "
+msgstr ""
+"\n"
+" 这个模块在项目管理中增加了缺陷管理\n"
+" "
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,categ_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,categ_id:0
+msgid "Category"
+msgstr "类别"
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "#Number of Project Issues"
+msgstr "缺陷编号"
+
+#. module: project_issue
+#: help:project.issue,email_cc:0
+msgid ""
+"These email addresses will be added to the CC field of all inbound and "
+"outbound emails for this record before being sent. Separate multiple email "
+"addresses with a comma"
+msgstr "这些邮箱地址将添加到所有接收的发送邮件的抄送字段,用逗号分隔多个邮件地址。"
+
+#. module: project_issue
+#: selection:project.issue,state:0
+#: selection:project.issue.report,state:0
+msgid "Draft"
+msgstr "草稿"
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Low"
+msgstr "最低"
+
+#. module: project_issue
+#: field:project.issue,date_closed:0
+#: selection:project.issue,state:0
+#: selection:project.issue.report,state:0
+msgid "Closed"
+msgstr "已结束"
+
+#. module: project_issue
+#: field:project.issue.report,delay_close:0
+msgid "Avg. Delay to Close"
+msgstr "平均耗用天数"
+
+#. module: project_issue
+#: view:project.issue:0
+#: selection:project.issue,state:0
+#: view:project.issue.report:0
+#: selection:project.issue.report,state:0
+msgid "Pending"
+msgstr "等待中"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Status"
+msgstr "状态"
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "#Project Issues"
+msgstr "缺陷编号"
+
+#. module: project_issue
+#: view:board.board:0
+msgid "Current Issues"
+msgstr "当前缺陷"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "August"
+msgstr "八月"
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Normal"
+msgstr "一般"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Global CC"
+msgstr "完整抄送"
+
+#. module: project_issue
+#: view:project.issue:0
+#: selection:project.issue,state:0
+msgid "To Do"
+msgstr "待办"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "June"
+msgstr "六月"
+
+#. module: project_issue
+#: field:project.issue,day_close:0
+msgid "Days to Close"
+msgstr "剩余天数"
+
+#. module: project_issue
+#: field:project.issue,active:0
+#: field:project.issue.version,active:0
+msgid "Active"
+msgstr "生效"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "November"
+msgstr "十一月"
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+msgid "Extended Filters..."
+msgstr "增加筛选条件"
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Search"
+msgstr "搜索"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "October"
+msgstr "十月"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "January"
+msgstr "一月"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Feature Tracker Tree"
+msgstr "缺陷列表"
+
+#. module: project_issue
+#: model:crm.case.categ,name:project_issue.bug_categ
+msgid "Bugs"
+msgstr ""
+
+#. module: project_issue
+#: view:board.board:0
+msgid "Issues By State"
+msgstr "按状态列出缺陷"
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,date:0
+msgid "Date"
+msgstr "日期"
+
+#. module: project_issue
+#: field:project.issue,partner_address_id:0
+msgid "Partner Contact"
+msgstr "业务伙伴联系人"
+
+#. module: project_issue
+#: field:project.issue,type_id:0
+msgid "Resolution"
+msgstr "解决方案"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "History"
+msgstr "历史记录"
+
+#. module: project_issue
+#: field:project.issue,assigned_to:0
+#: view:project.issue.report:0
+#: field:project.issue.report,assigned_to:0
+msgid "Assigned to"
+msgstr "指派到"
+
+#. module: project_issue
+#: field:project.project,reply_to:0
+msgid "Reply-To Email Address"
+msgstr "回复给邮件地址"
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Highest"
+msgstr "最高"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Attachments"
+msgstr "附件"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Issue Tracker Form"
+msgstr "缺陷"
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,state:0
+#: view:project.issue.report:0
+#: field:project.issue.report,state:0
+msgid "State"
+msgstr "状态"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "General"
+msgstr "一般"
+
+#. module: project_issue
+#: view:project.issue.version:0
+msgid "Issue Version"
+msgstr "缺陷版本"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Communication"
+msgstr "沟通"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Cancel"
+msgstr "取消(&C)"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Close"
+msgstr "结束"
+
+#. module: project_issue
+#: view:project.issue:0
+#: selection:project.issue.report,state:0
+msgid "Open"
+msgstr "待办"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.act_project_project_2_project_issue_all
+#: model:ir.actions.act_window,name:project_issue.project_issue_categ_act0
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_track
+#: view:project.issue:0
+msgid "Issues"
+msgstr "缺陷"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_project_issue_graph_stage
+#: model:ir.actions.act_window,name:project_issue.action_project_issue_graph_state
+#: model:ir.model,name:project_issue.model_project_issue
+#: model:ir.ui.menu,name:project_issue.menu_project_confi
+#: view:project.issue.report:0
+msgid "Project Issue"
+msgstr "缺陷"
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,user_id:0
+#: view:project.issue.report:0
+#: field:project.issue.report,user_id:0
+msgid "Responsible"
+msgstr "负责人"
+
+#. module: project_issue
+#: help:project.issue,progress:0
+msgid "Computed as: Time Spent / Total Time."
+msgstr "计算方式:花费时间 / 总时间"
+
+#. module: project_issue
+#: view:project.issue:0
+#: view:project.issue.report:0
+msgid "Current"
+msgstr "当前的"
+
+#. module: project_issue
+#: model:ir.actions.act_window,help:project_issue.project_issue_categ_act0
+msgid ""
+"Issues such as system bugs, customer complaints, and material breakdowns are "
+"collected here. You can define the stages assigned when solving the project "
+"issue (analysis, development, done). With the mailgateway module, issues can "
+"be integrated through an email address (example: support@mycompany.com)"
+msgstr ""
+"缺陷(如系统故障、客户投诉、材料破损)在这里搜集。可以输入缺陷处理的阶段(分析原因、正在处理、已完成)。安装了mailgateway模块后,缺陷管理可以与"
+"特定邮件集成(如:support@mycompany.com)"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Details"
+msgstr "详细信息"
+
+#. module: project_issue
+#: help:project.issue,email_from:0
+msgid "These people will receive email."
+msgstr "这些人将收到电子邮件。"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Reply"
+msgstr "回复"
+
+#. module: project_issue
+#: field:project.issue,name:0
+msgid "Issue"
+msgstr "缺陷"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Feature Tracker Search"
+msgstr "缺陷列表"
+
+#. module: project_issue
+#: view:project.issue:0
+#: field:project.issue,description:0
+msgid "Description"
+msgstr "描述"
+
+#. module: project_issue
+#: field:project.issue,section_id:0
+msgid "Sales Team"
+msgstr "销售团队"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "May"
+msgstr "五月"
+
+#. module: project_issue
+#: model:ir.actions.act_window,name:project_issue.action_project_issue_report
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_report_tree
+msgid "Issue Analysis"
+msgstr ""
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Sale Team "
+msgstr "销售团队 "
+
+#. module: project_issue
+#: view:project.issue.report:0
+#: field:project.issue.report,email:0
+msgid "# Emails"
+msgstr "电子邮件"
+
+#. module: project_issue
+#: field:project.issue,partner_name:0
+msgid "Employee's Name"
+msgstr "员工姓名"
+
+#. module: project_issue
+#: help:project.issue,state:0
+msgid ""
+"The state is set to 'Draft', when a case is created. "
+" \n"
+"If the case is in progress the state is set to 'Open'. "
+" \n"
+"When the case is over, the state is set to 'Done'. "
+" \n"
+"If the case needs to be reviewed then the state is set to 'Pending'."
+msgstr ""
+"当一个业务创建时状态设为'草稿'\n"
+"如果业务正在处理状态设为'开启'\n"
+"当业务结束状态设为'完成'\n"
+"如果业务需要审查状态设为'待定'"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "February"
+msgstr "二月"
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:61
+#, python-format
+msgid "Issue '%s' has been opened."
+msgstr "缺陷 ‘%s' 已新建"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "Feature description"
+msgstr "功能描述"
+
+#. module: project_issue
+#: field:project.project,project_escalation_id:0
+msgid "Project Escalation"
+msgstr "提升"
+
+#. module: project_issue
+#: help:project.issue,section_id:0
+msgid ""
+"Sales team to which Case belongs to. Define "
+"Responsible user and Email account for mail gateway."
+msgstr "这个业务所属的销售团队。输入团队负责人和邮箱。"
+
+#. module: project_issue
+#: view:project.issue.report:0
+msgid "Month-1"
+msgstr "上月"
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:76
+#, python-format
+msgid "Issue '%s' has been closed."
+msgstr "缺陷 '%s' 已处理"
+
+#. module: project_issue
+#: selection:project.issue.report,month:0
+msgid "April"
+msgstr "四月"
+
+#. module: project_issue
+#: view:project.issue:0
+msgid "References"
+msgstr "参考资料"
+
+#. module: project_issue
+#: field:project.issue,working_hours_close:0
+msgid "Working Hours to Close the Issue"
+msgstr "剩余工时"
+
+#. module: project_issue
+#: field:project.issue,id:0
+msgid "ID"
+msgstr "ID"
+
+#. module: project_issue
+#: code:addons/project_issue/project_issue.py:377
+#, python-format
+msgid "No Title"
+msgstr "无标题"
+
+#. module: project_issue
+#: help:project.issue.report,delay_close:0
+#: help:project.issue.report,delay_open:0
+msgid "Number of Days to close the project issue"
+msgstr "剩余天数"
+
+#. module: project_issue
+#: view:project.issue.report:0
+#: field:project.issue.report,section_id:0
+msgid "Sale Team"
+msgstr "销售团队"
+
+#. module: project_issue
+#: field:project.issue.report,working_hours_close:0
+msgid "Avg. Working Hours to Close"
+msgstr "平均剩余工时"
+
+#. module: project_issue
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "High"
+msgstr "高"
+
+#. module: project_issue
+#: field:project.issue,date_deadline:0
+msgid "Deadline"
+msgstr "截止日期"
+
+#. module: project_issue
+#: field:project.issue,date_action_last:0
+msgid "Last Action"
+msgstr "最近动作"
+
+#. module: project_issue
+#: view:project.issue.report:0
+#: field:project.issue.report,name:0
+msgid "Year"
+msgstr "年"
+
+#. module: project_issue
+#: field:project.issue,duration:0
+msgid "Duration"
+msgstr "时长"
+
+#. module: project_issue
+#: view:board.board:0
+msgid "My Open Issues by Creation Date"
+msgstr "未处理的缺陷(按创建日期)"
+
+#~ msgid "Maintenance"
+#~ msgstr "维护"
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index a8a32847243..abb9b7e92ff 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -216,7 +216,7 @@ class project_issue(crm.crm_case, osv.osv):
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
- 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
+ 'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="Computed as: Time Spent / Total Time.",
store = {
'project.issue': (lambda self, cr, uid, ids, c={}: ids, ['task_id'], 10),
'project.task': (_get_issue_task, ['progress'], 10),
diff --git a/addons/project_issue_sheet/i18n/fi.po b/addons/project_issue_sheet/i18n/fi.po
new file mode 100644
index 00000000000..3f49470827f
--- /dev/null
+++ b/addons/project_issue_sheet/i18n/fi.po
@@ -0,0 +1,78 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-28 09:02+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: project_issue_sheet
+#: model:ir.module.module,description:project_issue_sheet.module_meta_information
+msgid ""
+"\n"
+" This module adds the Timesheet support for the "
+"Issues/Bugs Management in Project\n"
+" "
+msgstr ""
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_account_analytic_line
+msgid "Analytic Line"
+msgstr "Analyyttinen rivi"
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_project_issue
+msgid "Project Issue"
+msgstr "Projekti tapahtuma"
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_hr_analytic_timesheet
+msgid "Timesheet Line"
+msgstr "Tuntilistan rivi"
+
+#. module: project_issue_sheet
+#: view:project.issue:0
+msgid "Timesheet"
+msgstr "Tuntilista"
+
+#. module: project_issue_sheet
+#: field:project.issue,analytic_account_id:0
+msgid "Analytic Account"
+msgstr "Analyyttinen tili"
+
+#. module: project_issue_sheet
+#: view:project.issue:0
+msgid "Worklogs"
+msgstr "Työlokit"
+
+#. module: project_issue_sheet
+#: field:account.analytic.line,create_date:0
+msgid "Create Date"
+msgstr "Luontipäivä"
+
+#. module: project_issue_sheet
+#: field:project.issue,timesheet_ids:0
+msgid "Timesheets"
+msgstr "Tuntilistat"
+
+#. module: project_issue_sheet
+#: model:ir.module.module,shortdesc:project_issue_sheet.module_meta_information
+msgid "Add the Timesheet support for Issue Management in Project Management"
+msgstr ""
+"Lisää tuntilistan tuen tapaustenhallintaan projektinhallintaohjelmistossa"
+
+#. module: project_issue_sheet
+#: field:hr.analytic.timesheet,issue_id:0
+msgid "Issue"
+msgstr "Tapaus"
diff --git a/addons/project_issue_sheet/i18n/zh_CN.po b/addons/project_issue_sheet/i18n/zh_CN.po
new file mode 100644
index 00000000000..eda41afa445
--- /dev/null
+++ b/addons/project_issue_sheet/i18n/zh_CN.po
@@ -0,0 +1,80 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-07-02 03:48+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-07-03 04:47+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: project_issue_sheet
+#: model:ir.module.module,description:project_issue_sheet.module_meta_information
+msgid ""
+"\n"
+" This module adds the Timesheet support for the "
+"Issues/Bugs Management in Project\n"
+" "
+msgstr ""
+"\n"
+" 此模块把缺陷管理和计工单集成在一起了\n"
+" "
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_account_analytic_line
+msgid "Analytic Line"
+msgstr "辅助核算明细"
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_project_issue
+msgid "Project Issue"
+msgstr "缺陷"
+
+#. module: project_issue_sheet
+#: model:ir.model,name:project_issue_sheet.model_hr_analytic_timesheet
+msgid "Timesheet Line"
+msgstr "计工单明细"
+
+#. module: project_issue_sheet
+#: view:project.issue:0
+msgid "Timesheet"
+msgstr "计工单"
+
+#. module: project_issue_sheet
+#: field:project.issue,analytic_account_id:0
+msgid "Analytic Account"
+msgstr "辅助核算项目"
+
+#. module: project_issue_sheet
+#: view:project.issue:0
+msgid "Worklogs"
+msgstr "工作记录"
+
+#. module: project_issue_sheet
+#: field:account.analytic.line,create_date:0
+msgid "Create Date"
+msgstr "创建日期"
+
+#. module: project_issue_sheet
+#: field:project.issue,timesheet_ids:0
+msgid "Timesheets"
+msgstr "计工单"
+
+#. module: project_issue_sheet
+#: model:ir.module.module,shortdesc:project_issue_sheet.module_meta_information
+msgid "Add the Timesheet support for Issue Management in Project Management"
+msgstr "对缺陷管理增加了计工单支持"
+
+#. module: project_issue_sheet
+#: field:hr.analytic.timesheet,issue_id:0
+msgid "Issue"
+msgstr "缺陷"
diff --git a/addons/project_long_term/i18n/zh_CN.po b/addons/project_long_term/i18n/zh_CN.po
new file mode 100644
index 00000000000..65ebffc73c9
--- /dev/null
+++ b/addons/project_long_term/i18n/zh_CN.po
@@ -0,0 +1,599 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-30 06:07+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-07-01 04:54+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: project_long_term
+#: model:ir.module.module,shortdesc:project_long_term.module_meta_information
+msgid "Long Term Project Management"
+msgstr "长期项目管理"
+
+#. module: project_long_term
+#: view:project.compute.phases:0
+msgid "Compute Scheduling of Phases"
+msgstr "项目周期计算"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,next_phase_ids:0
+msgid "Next Phases"
+msgstr "下一阶段"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Project's Tasks"
+msgstr "项目任务"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.act_project_phases
+msgid "Phases"
+msgstr "阶段"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: view:project.resource.allocation:0
+msgid "Group By..."
+msgstr "分组..."
+
+#. module: project_long_term
+#: constraint:project.project:0
+msgid "Error! project start-date must be lower then project end-date."
+msgstr "错误!项目的开始日期必须小于项目的结束日期"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.act_resouce_allocation
+#: view:project.resource.allocation:0
+msgid "Resources Allocation"
+msgstr "资源分配"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Displaying settings"
+msgstr "显示设置"
+
+#. module: project_long_term
+#: field:project.compute.phases,target_project:0
+msgid "Schedule"
+msgstr "日程"
+
+#. module: project_long_term
+#: model:ir.module.module,description:project_long_term.module_meta_information
+msgid ""
+"\n"
+"\n"
+" Long Term Project management module that tracks planning, "
+"scheduling, resources allocation.\n"
+" Mainly used with Big project management.\n"
+" - Project Phases will be maintained by Manager of the project\n"
+" - Compute Phase Scheduling: Compute start date and end date of "
+"the phases which are in draft,open and pending state of the project given.\n"
+" If no project given then all the "
+"draft,open and pending state phases will be taken\n"
+" - Compute Task Scheduling: This works same as the scheduler "
+"button on project.phase. It takes the project as argument and computes all "
+"the open,draft and pending tasks\n"
+" - Schedule Tasks: All the tasks which are in draft,pending and "
+"open state are scheduled with taking the phase's start date\n"
+"\n"
+" "
+msgstr ""
+
+#. module: project_long_term
+#: constraint:project.task:0
+msgid "Error ! You cannot create recursive tasks."
+msgstr "错误!不能创建循环引用的任务"
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_resouce_allocation
+msgid "Resource Allocations"
+msgstr "资源分配"
+
+#. module: project_long_term
+#: constraint:project.project:0
+msgid "Error! You cannot assign escalation to the same project!"
+msgstr "不能升级到相同的项目"
+
+#. module: project_long_term
+#: code:addons/project_long_term/project_long_term.py:128
+#, python-format
+msgid "Day"
+msgstr "天"
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_task
+msgid "Task"
+msgstr "任务"
+
+#. module: project_long_term
+#: selection:project.compute.phases,target_project:0
+msgid "Compute a Single Project"
+msgstr "计算单个项目"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,previous_phase_ids:0
+msgid "Previous Phases"
+msgstr "上一阶段"
+
+#. module: project_long_term
+#: help:project.phase,product_uom:0
+msgid "UoM (Unit of Measure) is the unit of measurement for Duration"
+msgstr "某个周期的计量单位"
+
+#. module: project_long_term
+#: help:project.phase,date_end:0
+msgid ""
+" It's computed by the scheduler according to the start date and the duration."
+msgstr " 这个日期是由开始日期和计划日数根据日历计算出来的。"
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_project
+#: field:project.compute.phases,project_id:0
+#: field:project.compute.tasks,project_id:0
+#: view:project.phase:0
+#: field:project.phase,project_id:0
+#: view:project.resource.allocation:0
+#: field:project.resource.allocation,project_id:0
+#: view:project.task:0
+msgid "Project"
+msgstr "项目"
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_compute_phases.py:50
+#, python-format
+msgid "Error!"
+msgstr "错误!"
+
+#. module: project_long_term
+#: selection:project.phase,state:0
+msgid "Cancelled"
+msgstr "已取消"
+
+#. module: project_long_term
+#: help:project.resource.allocation,date_end:0
+msgid "Ending Date"
+msgstr "结束日期"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Planning"
+msgstr "计划"
+
+#. module: project_long_term
+#: field:project.phase,constraint_date_end:0
+msgid "Deadline"
+msgstr "截止日期"
+
+#. module: project_long_term
+#: view:project.compute.phases:0
+#: view:project.compute.tasks:0
+msgid "_Cancel"
+msgstr "取消(_C)"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.action_project_compute_phases
+#: model:ir.ui.menu,name:project_long_term.menu_compute_phase
+msgid "Compute Phase Scheduling"
+msgstr "计算阶段日程"
+
+#. module: project_long_term
+#: code:addons/project_long_term/project_long_term.py:190
+#, python-format
+msgid " (copy)"
+msgstr " (copy)"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: view:project.resource.allocation:0
+#: field:project.resource.allocation,useability:0
+msgid "Availability"
+msgstr "可用"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,state:0
+msgid "State"
+msgstr "状态"
+
+#. module: project_long_term
+#: view:project.compute.phases:0
+#: view:project.compute.tasks:0
+msgid "C_ompute"
+msgstr "计算(_O)"
+
+#. module: project_long_term
+#: view:project.compute.phases:0
+msgid "Compute Scheduling of phases for all or specified project"
+msgstr "针对所有或特定的一个项目计算阶段周期"
+
+#. module: project_long_term
+#: field:project.phase,product_uom:0
+msgid "Duration UoM"
+msgstr "时间段计量单位"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.action_project_compute_tasks
+#: model:ir.ui.menu,name:project_long_term.menu_compute_tasks
+msgid "Compute Task Scheduling"
+msgstr "计算项目日程"
+
+#. module: project_long_term
+#: field:project.phase,constraint_date_start:0
+msgid "Minimum Start Date"
+msgstr "最早开始时间"
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_resource_allocation
+#: view:project.phase:0
+#: view:project.resource.allocation:0
+msgid "Project Resource Allocation"
+msgstr "项目资源分配"
+
+#. module: project_long_term
+#: view:project.compute.tasks:0
+msgid "Compute Scheduling of Task"
+msgstr "计算任务日程"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.act_project_resource
+#: model:ir.ui.menu,name:project_long_term.menu_pm_resources_project1
+#: model:ir.ui.menu,name:project_long_term.menu_view_resource
+#: view:project.resource.allocation:0
+msgid "Resources"
+msgstr "资源"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,help:project_long_term.action_project_compute_phases
+msgid ""
+"To schedule phases of all or a specified project. It then open a gantt "
+"view.\n"
+"\t "
+msgstr ""
+"某个或所有项目的阶段日程。会显示一个甘特图。\n"
+"\t "
+
+#. module: project_long_term
+#: help:project.resource.allocation,date_start:0
+msgid "Starting Date"
+msgstr "开始日期"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.project_phase_task_list
+msgid "Related Tasks"
+msgstr "相关任务"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Dates"
+msgstr "日期"
+
+#. module: project_long_term
+#: help:project.resource.allocation,useability:0
+msgid ""
+"Availability of this resource for this project phase in percentage (=50%)"
+msgstr "这个资源在此项目阶段的可用性,用百分数表示"
+
+#. module: project_long_term
+#: help:project.phase,constraint_date_start:0
+msgid "force the phase to start after this date"
+msgstr "强制项目在此日期之后开始"
+
+#. module: project_long_term
+#: field:project.phase,task_ids:0
+msgid "Project Tasks"
+msgstr "项目任务列表"
+
+#. module: project_long_term
+#: field:project.phase,resource_ids:0
+msgid "Project Resources"
+msgstr "项目资源"
+
+#. module: project_long_term
+#: view:project.schedule.tasks:0
+msgid "_Ok"
+msgstr "确定(_O)"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Schedule and Display info"
+msgstr "日程和显示信息"
+
+#. module: project_long_term
+#: help:project.phase,date_start:0
+msgid ""
+"It's computed by the scheduler according the project date or the end date of "
+"the previous phase."
+msgstr "这个日期根据项目的开始日期或前一个阶段的结束日期结算而来"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Month"
+msgstr "月份"
+
+#. module: project_long_term
+#: constraint:project.phase:0
+msgid "Phase start-date must be lower than phase end-date."
+msgstr "阶段的开始日期必须早于项目的结束日期"
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_schedule_tasks
+msgid "project.schedule.tasks"
+msgstr "project.schedule.tasks"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,help:project_long_term.act_project_phase
+msgid ""
+"A project can be split into the different phases. For each phase, you can "
+"define your resources allocation, describe different tasks and link your "
+"phase to previous and next phases, add date constraints for the automated "
+"scheduling. Use the long term planning in order to planify your available "
+"human resources, convert your phases into a series of tasks when you start "
+"working on the project."
+msgstr ""
+"项目能分成不同的阶段。可以为每个阶段分配资源,定义不同的任务并可以把各个阶段连起来,按日历自动计算计划日期。使用长期计划可以在项目的开始阶段管理人员可用性"
+"、划分每阶段的任务。"
+
+#. module: project_long_term
+#: field:project.phase,date_start:0
+#: field:project.resource.allocation,date_start:0
+msgid "Start Date"
+msgstr "开始日期"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Resource Allocation"
+msgstr "资源分配"
+
+#. module: project_long_term
+#: help:project.phase,constraint_date_end:0
+msgid "force the phase to finish before this date"
+msgstr "强制该阶段在此日期前完成"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: selection:project.phase,state:0
+msgid "Draft"
+msgstr "草稿"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: selection:project.phase,state:0
+msgid "Pending"
+msgstr "等待中"
+
+#. module: project_long_term
+#: field:project.resource.allocation,name:0
+msgid "unknown"
+msgstr "未知的"
+
+#. module: project_long_term
+#: field:project.resource.allocation,user_id:0
+msgid "User"
+msgstr "用户"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Task Detail"
+msgstr "任务细节"
+
+#. module: project_long_term
+#: help:project.project,resource_calendar_id:0
+msgid "Timetable working hours to adjust the gantt diagram report"
+msgstr "从时间表的工作时间来调整甘特图报表"
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_compute_tasks
+msgid "Project Compute Tasks"
+msgstr "计算任务计划"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Constraints"
+msgstr "限制"
+
+#. module: project_long_term
+#: help:project.phase,sequence:0
+msgid "Gives the sequence order when displaying a list of phases."
+msgstr "输入序号用于阶段列表排序"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.act_project_phase
+#: model:ir.actions.act_window,name:project_long_term.act_project_phase_list
+#: model:ir.ui.menu,name:project_long_term.menu_project_phase
+#: model:ir.ui.menu,name:project_long_term.menu_project_phase_list
+#: view:project.phase:0
+#: field:project.project,phase_ids:0
+msgid "Project Phases"
+msgstr "项目阶段"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: selection:project.phase,state:0
+msgid "Done"
+msgstr "已完成"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Cancel"
+msgstr "取消(&C)"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: selection:project.phase,state:0
+msgid "In Progress"
+msgstr "进行中"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Remaining Hours"
+msgstr "剩余小时数"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,responsible_id:0
+msgid "Responsible"
+msgstr "负责人"
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar
+#: field:project.project,resource_calendar_id:0
+msgid "Working Time"
+msgstr "工作的时间"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Current"
+msgstr "当前的"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Start Phase"
+msgstr "阶段开始"
+
+#. module: project_long_term
+#: code:addons/project_long_term/wizard/project_compute_phases.py:50
+#, python-format
+msgid "Please Specify Project to be schedule"
+msgstr "请输入要排计划的项目"
+
+#. module: project_long_term
+#: view:project.phase:0
+#: field:project.phase,total_hours:0
+msgid "Total Hours"
+msgstr "总小时数"
+
+#. module: project_long_term
+#: view:project.schedule.tasks:0
+msgid "Task Scheduling completed successfully."
+msgstr "任务日程排列完毕"
+
+#. module: project_long_term
+#: view:project.compute.tasks:0
+msgid "Compute Scheduling of Task for specified project."
+msgstr "为某个特定的项目计算日程"
+
+#. module: project_long_term
+#: view:project.resource.allocation:0
+msgid "Phase"
+msgstr "阶段"
+
+#. module: project_long_term
+#: help:project.phase,state:0
+msgid ""
+"If the phase is created the state 'Draft'.\n"
+" If the phase is started, the state becomes 'In Progress'.\n"
+" If review is needed the phase is in 'Pending' state. "
+" \n"
+" If the phase is over, the states is set to 'Done'."
+msgstr ""
+"新建的阶段状态是草稿\n"
+"开始后的阶段状态是正在进行中\n"
+"如果需要复核则状态为等待中\n"
+"已结束的阶段状态是完成"
+
+#. module: project_long_term
+#: field:project.phase,date_end:0
+#: field:project.resource.allocation,date_end:0
+msgid "End Date"
+msgstr "结束日期"
+
+#. module: project_long_term
+#: view:project.resource.allocation:0
+#: field:project.resource.allocation,resource_id:0
+msgid "Resource"
+msgstr "资源"
+
+#. module: project_long_term
+#: field:project.phase,name:0
+msgid "Name"
+msgstr "名称"
+
+#. module: project_long_term
+#: view:project.phase:0
+msgid "Tasks Details"
+msgstr "任务详情"
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar
+msgid "Working Period"
+msgstr ""
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_resource_resource
+msgid "Resource Detail"
+msgstr "资源明细"
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_phase_schedule
+msgid "Scheduling"
+msgstr "调度"
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_phase
+#: view:project.phase:0
+#: field:project.resource.allocation,phase_id:0
+#: view:project.task:0
+#: field:project.task,phase_id:0
+msgid "Project Phase"
+msgstr "项目阶段"
+
+#. module: project_long_term
+#: model:ir.model,name:project_long_term.model_project_compute_phases
+msgid "Project Compute Phases"
+msgstr "计算项目阶段"
+
+#. module: project_long_term
+#: field:project.schedule.tasks,msg:0
+msgid "Message"
+msgstr "消息"
+
+#. module: project_long_term
+#: constraint:project.phase:0
+msgid "Loops in phases not allowed"
+msgstr "阶段间不能递归引用"
+
+#. module: project_long_term
+#: field:project.phase,sequence:0
+msgid "Sequence"
+msgstr "序号"
+
+#. module: project_long_term
+#: selection:project.compute.phases,target_project:0
+msgid "Compute All Projects"
+msgstr "计算所有项目"
+
+#. module: project_long_term
+#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar_leaves
+msgid "Resource Leaves"
+msgstr "成员请假"
+
+#. module: project_long_term
+#: model:ir.actions.act_window,name:project_long_term.action_project_schedule_tasks
+#: view:project.phase:0
+#: view:project.schedule.tasks:0
+msgid "Schedule Tasks"
+msgstr "任务日程"
+
+#. module: project_long_term
+#: help:project.phase,duration:0
+msgid "By default in days"
+msgstr "默认按天"
+
+#. module: project_long_term
+#: field:project.phase,duration:0
+msgid "Duration"
+msgstr "时长"
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index 779c7f6d062..6c5ef7890bf 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -23,6 +23,7 @@ from datetime import datetime
from tools.translate import _
from osv import fields, osv
from resource.faces import task as Task
+from operator import itemgetter
class project_phase(osv.osv):
_name = "project.phase"
@@ -119,7 +120,7 @@ class project_phase(osv.osv):
'state': fields.selection([('draft', 'Draft'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
help='If the phase is created the state \'Draft\'.\n If the phase is started, the state becomes \'In Progress\'.\n If review is needed the phase is in \'Pending\' state.\
\n If the phase is over, the states is set to \'Done\'.'),
- 'total_hours': fields.function(_compute, method=True, string='Total Hours'),
+ 'total_hours': fields.function(_compute, string='Total Hours'),
}
_defaults = {
'responsible_id': lambda obj,cr,uid,context: uid,
@@ -398,7 +399,7 @@ class project_resource_allocation(osv.osv):
res[allocation.id] = name
return res
_columns = {
- 'name': fields.function(get_name, method=True, type='char', size=256),
+ 'name': fields.function(get_name, type='char', size=256),
'resource_id': fields.many2one('resource.resource', 'Resource', required=True),
'phase_id': fields.many2one('project.phase', 'Project Phase', ondelete='cascade', required=True),
'project_id': fields.related('phase_id', 'project_id', type='many2one', relation="project.project", string='Project', store=True),
@@ -729,7 +730,7 @@ class project_task(osv.osv):
if context is None:
context = {}
task = self.browse(cr, uid, task_id, context=context)
- duration = str(task.planned_hours )+ 'H'
+ duration = str(task.planned_hours)+ 'H'
str_resource = False
parent = task.parent_ids
if task.phase_id.resource_ids:
@@ -743,10 +744,12 @@ class project_task(osv.osv):
effort = \'%s\'
resource = %s
'''%(task.id, task.name, duration, str_resource)
- if parent:
+ if task.child_ids:
+ seq = [[child.planned_hours, child.id] for child in task.child_ids]
+ seq.sort(key=itemgetter(0))
s +='''
start = up.Task_%s.end
-'''%(parent[0].id)
+ '''%(seq[-1][1])
else:
s = '''
def Task_%s():
@@ -754,10 +757,12 @@ class project_task(osv.osv):
effort = \'%s\'
resource = %s
'''%(task.id, task.name, duration, str_resource)
- if parent:
+ if task.child_ids:
+ seq = [[child.planned_hours, child.id] for child in task.child_ids]
+ seq.sort(key=itemgetter(0))
s +='''
start = up.Task_%s.end
-'''%(parent[0].id)
+'''%(seq[-1][1])
s += '\n'
return s
project_task()
diff --git a/addons/project_mailgate/i18n/zh_CN.po b/addons/project_mailgate/i18n/zh_CN.po
new file mode 100644
index 00000000000..5146601a653
--- /dev/null
+++ b/addons/project_mailgate/i18n/zh_CN.po
@@ -0,0 +1,104 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-28 16:25+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: project_mailgate
+#: view:project.task:0
+msgid "History Information"
+msgstr "历史信息"
+
+#. module: project_mailgate
+#: model:ir.model,name:project_mailgate.model_project_task
+msgid "Task"
+msgstr "任务"
+
+#. module: project_mailgate
+#: model:ir.module.module,description:project_mailgate.module_meta_information
+msgid ""
+"This module is an interface that synchronises mails with OpenERP Project "
+"Task.\n"
+"\n"
+"It allows creating tasks as soon as a new mail arrives in our configured "
+"mail server.\n"
+"Moreover, it keeps track of all further communications and task states.\n"
+" "
+msgstr ""
+"此模块是邮件和任务的接口。\n"
+"允许在特定邮件服务器收到邮件后马上创建任务。\n"
+"还能跟踪进一步的沟通和任务阶段\n"
+" "
+
+#. module: project_mailgate
+#: view:project.task:0
+msgid "Attachments"
+msgstr "附件"
+
+#. module: project_mailgate
+#: model:ir.module.module,shortdesc:project_mailgate.module_meta_information
+msgid "Project MailGateWay"
+msgstr "Project MailGateWay"
+
+#. module: project_mailgate
+#: constraint:project.task:0
+msgid "Error ! You cannot create recursive tasks."
+msgstr "错误!不能创建循环引用的任务"
+
+#. module: project_mailgate
+#: field:project.task,message_ids:0
+msgid "Messages"
+msgstr "消息"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:123
+#, python-format
+msgid "Draft"
+msgstr "草稿"
+
+#. module: project_mailgate
+#: view:project.task:0
+msgid "Details"
+msgstr "详细信息"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:149
+#, python-format
+msgid "Cancel"
+msgstr "取消"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:143
+#, python-format
+msgid "Done"
+msgstr "完成"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:129
+#, python-format
+msgid "Open"
+msgstr "未结"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:135
+#, python-format
+msgid "Pending"
+msgstr "等待中"
+
+#. module: project_mailgate
+#: view:project.task:0
+msgid "History"
+msgstr "历史记录"
diff --git a/addons/project_mailgate/project_mailgate.py b/addons/project_mailgate/project_mailgate.py
index 64bb8c2dc69..66eaa2e85fa 100644
--- a/addons/project_mailgate/project_mailgate.py
+++ b/addons/project_mailgate/project_mailgate.py
@@ -19,17 +19,19 @@
#
##############################################################################
-from osv import fields,osv
+from osv import fields, osv
from tools.translate import _
import binascii
+
class project_tasks(osv.osv):
_name = "project.task"
- _inherit = ['mailgate.thread','project.task']
-
+ _inherit = ['mailgate.thread', 'project.task']
+
_columns={
- 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)], readonly=True),
+ 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model', '=', _name)], readonly=True),
}
+
def message_new(self, cr, uid, msg, context=None):
# """
# Automatically calls when new email message arrives
@@ -42,23 +44,24 @@ class project_tasks(osv.osv):
subject = msg.get('subject')
body = msg.get('body')
msg_from = msg.get('from')
- priority = msg.get('priority')
+ #TODO map email priority with openerp task priority
+ priority = msg.get('priority')
- data = {
+ data = {
'name': subject,
'description': body,
- 'planned_hours' : 0.0,
+ 'planned_hours': 0.0,
}
res = mailgate_obj.get_partner(cr, uid, msg_from)
if res:
data.update(res)
- res = self.create(cr, uid, data)
-
+ res = self.create(cr, uid, data)
+
attachments = msg.get('attachments', [])
for attachment in attachments or []:
data_attach = {
'name': attachment,
- 'datas':binascii.b2a_base64(str(attachments.get(attachment))),
+ 'datas': binascii.b2a_base64(str(attachments.get(attachment))),
'datas_fname': attachment,
'description': 'Mail attachment',
'res_model': self._name,
@@ -66,31 +69,31 @@ class project_tasks(osv.osv):
}
self.pool.get('ir.attachment').create(cr, uid, data_attach)
- return res
-
- def message_update(self, cr, uid, id, msg, data={}, default_act='pending'):
+ return res
+
+ def message_update(self, cr, uid, id, msg, data={}, default_act='pending'):
mailgate_obj = self.pool.get('email.server.tools')
- msg_actions, body_data = mailgate_obj.msg_act_get(msg)
+ msg_actions, body_data = mailgate_obj.msg_act_get(msg)
data.update({
- 'description': body_data,
+ 'description': body_data,
})
act = 'do_'+default_act
if 'state' in msg_actions:
- if msg_actions['state'] in ['draft','close','cancel','open','pending']:
+ if msg_actions['state'] in ['draft', 'close', 'cancel', 'open', 'pending']:
act = 'do_' + msg_actions['state']
-
- for k1,k2 in [('cost','planned_hours')]:
+
+ for k1, k2 in [('cost', 'planned_hours')]:
try:
data[k2] = float(msg_actions[k1])
except:
pass
if 'priority' in msg_actions:
- if msg_actions['priority'] in ('1','2','3','4','5'):
+ if msg_actions['priority'] in ('1', '2', '3', '4', '5'):
data['priority'] = msg_actions['priority']
-
+
self.write(cr, uid, [id], data)
- getattr(self,act)(cr, uid, [id])
+ getattr(self, act)(cr, uid, [id])
return True
def message_followers(self, cr, uid, ids, context=None):
@@ -108,7 +111,7 @@ class project_tasks(osv.osv):
def msg_send(self, cr, uid, id, *args, **argv):
return True
-
+
def _history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=[], context=None):
mailgate_pool = self.pool.get('mailgate.thread')
return mailgate_pool.history(cr, uid, cases, keyword, history=history,\
@@ -116,37 +119,37 @@ class project_tasks(osv.osv):
details=details, email_from=email_from,\
message_id=message_id, attach=attach, \
context=context)
-
- def do_draft(self, cr, uid, ids, *args, **kwargs):
- res = super(project_tasks, self).do_draft(cr, uid, ids, *args, **kwargs)
- tasks = self.browse(cr, uid, ids)
- self._history(cr, uid, tasks, _('Draft'))
+
+ def do_draft(self, cr, uid, ids, context=None):
+ res = super(project_tasks, self).do_draft(cr, uid, ids, context)
+ tasks = self.browse(cr, uid, ids, context=context)
+ self._history(cr, uid, tasks, _('Draft'), context=context)
return res
-
- def do_open(self, cr, uid, ids, *args, **kwargs):
- res = super(project_tasks, self).do_open(cr, uid, ids, *args, **kwargs)
- tasks = self.browse(cr, uid, ids)
- self._history(cr, uid, tasks, _('Open'))
+
+ def do_open(self, cr, uid, ids, context=None):
+ res = super(project_tasks, self).do_open(cr, uid, ids, context)
+ tasks = self.browse(cr, uid, ids, context=context)
+ self._history(cr, uid, tasks, _('Open'), context=context)
return res
-
- def do_pending(self, cr, uid, ids, *args, **kwargs):
- res = super(project_tasks, self).do_pending(cr, uid, ids, *args, **kwargs)
- tasks = self.browse(cr, uid, ids)
- self._history(cr, uid, tasks, _('Pending'))
+
+ def do_pending(self, cr, uid, ids, context=None):
+ res = super(project_tasks, self).do_pending(cr, uid, ids, context)
+ tasks = self.browse(cr, uid, ids, context=context)
+ self._history(cr, uid, tasks, _('Pending'), context=context)
return res
-
- def do_close(self, cr, uid, ids, *args, **kwargs):
- res = super(project_tasks, self).do_close(cr, uid, ids, *args, **kwargs)
- tasks = self.browse(cr, uid, ids)
+
+ def do_close(self, cr, uid, ids, context=None):
+ res = super(project_tasks, self).do_close(cr, uid, ids, context)
+ tasks = self.browse(cr, uid, ids, context=context)
for task in tasks:
if task.state == 'done':
- self._history(cr, uid, tasks, _('Done'))
+ self._history(cr, uid, tasks, _('Done'), context=context)
return res
-
- def do_cancel(self, cr, uid, ids, *args, **kwargs):
- res = super(project_tasks, self).do_cancel(cr, uid, ids, *args, **kwargs)
- tasks = self.browse(cr, uid, ids)
- self._history(cr, uid, tasks, _('Cancel'))
+
+ def do_cancel(self, cr, uid, ids, context=None):
+ res = super(project_tasks, self).do_cancel(cr, uid, ids, context=context)
+ tasks = self.browse(cr, uid, ids, context=context)
+ self._history(cr, uid, tasks, _('Cancel'), context=context)
return res
project_tasks()
diff --git a/addons/project_messages/i18n/zh_CN.po b/addons/project_messages/i18n/zh_CN.po
new file mode 100644
index 00000000000..51983dae2b3
--- /dev/null
+++ b/addons/project_messages/i18n/zh_CN.po
@@ -0,0 +1,138 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-07-02 15:15+0000\n"
+"Last-Translator: Wei \"oldrev\" Li \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-07-03 04:47+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: project_messages
+#: field:project.messages,to_id:0
+msgid "To"
+msgstr "收件人"
+
+#. module: project_messages
+#: model:ir.model,name:project_messages.model_project_messages
+msgid "project.messages"
+msgstr "project.messages"
+
+#. module: project_messages
+#: field:project.messages,from_id:0
+msgid "From"
+msgstr "发件人"
+
+#. module: project_messages
+#: model:ir.actions.act_window,name:project_messages.messages_form
+#: model:ir.ui.menu,name:project_messages.menu_messages_form
+msgid "Communication Messages"
+msgstr "通信消息管理"
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Group By..."
+msgstr "分组..."
+
+#. module: project_messages
+#: field:project.messages,create_date:0
+msgid "Creation Date"
+msgstr "创建日期"
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Today"
+msgstr "今天"
+
+#. module: project_messages
+#: help:project.messages,to_id:0
+msgid "Keep this empty to broadcast the message."
+msgstr "不输入则广播此消息"
+
+#. module: project_messages
+#: model:ir.actions.act_window,name:project_messages.act_project_messages
+#: model:ir.actions.act_window,name:project_messages.action_view_project_editable_messages_tree
+#: view:project.messages:0
+#: view:project.project:0
+#: field:project.project,message_ids:0
+msgid "Messages"
+msgstr "消息"
+
+#. module: project_messages
+#: model:ir.model,name:project_messages.model_project_project
+#: view:project.messages:0
+#: field:project.messages,project_id:0
+msgid "Project"
+msgstr "项目"
+
+#. module: project_messages
+#: model:ir.actions.act_window,help:project_messages.messages_form
+msgid ""
+"An in-project messaging system allows for an efficient and trackable "
+"communication between project members. The messages are stored in the system "
+"and can be used for post analysis."
+msgstr "一个项目内的消息系统,以便项目成员间内部高效可控地沟通。消息存储在系统中可以做历史记录分析。"
+
+#. module: project_messages
+#: model:ir.module.module,description:project_messages.module_meta_information
+msgid ""
+"\n"
+" This module provides the functionality to send messages within a "
+"project.\n"
+" A user can send messages individually to other user. He can even "
+"broadcast\n"
+" it to all the users.\n"
+" "
+msgstr ""
+"\n"
+" 此模块允许在项目内部发送消息。\n"
+"用户可以给另一个用户发消息。也可以对所有成员广播消息。\n"
+" "
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Message To"
+msgstr "收件人"
+
+#. module: project_messages
+#: constraint:project.project:0
+msgid "Error! You cannot assign escalation to the same project!"
+msgstr "不能升级到相同的项目"
+
+#. module: project_messages
+#: view:project.messages:0
+#: field:project.messages,message:0
+#: view:project.project:0
+msgid "Message"
+msgstr "消息"
+
+#. module: project_messages
+#: view:project.messages:0
+msgid "Message From"
+msgstr "发件人"
+
+#. module: project_messages
+#: model:ir.actions.act_window,name:project_messages.messages_form
+#: model:ir.ui.menu,name:project_messages.menu_messages_form
+#: view:project.messages:0
+msgid "Project Messages"
+msgstr "项目消息"
+
+#. module: project_messages
+#: constraint:project.project:0
+msgid "Error! project start-date must be lower then project end-date."
+msgstr "错误!项目的开始日期必须小于项目的结束日期"
+
+#. module: project_messages
+#: model:ir.module.module,shortdesc:project_messages.module_meta_information
+msgid "In-Project Messaging System"
+msgstr "项目内部消息系统"
diff --git a/addons/project_planning/i18n/fi.po b/addons/project_planning/i18n/fi.po
new file mode 100644
index 00000000000..bda70796e5e
--- /dev/null
+++ b/addons/project_planning/i18n/fi.po
@@ -0,0 +1,597 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-27 07:31+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-28 04:40+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: project_planning
+#: constraint:account.analytic.account:0
+msgid ""
+"Error! The currency has to be the same as the currency of the selected "
+"company"
+msgstr "Virhe! Valuutan tulee olla sama kun valitun yrityksen valutta."
+
+#. module: project_planning
+#: help:report_account_analytic.planning.account,tasks:0
+#: help:report_account_analytic.planning.user,tasks:0
+msgid ""
+"This value is given by the sum of work remaining to do on the task for this "
+"planning, expressed in days."
+msgstr ""
+"Tämä arvo annetaan jäljelläolevan työn määränä tehtävän suorittamiseksi, "
+"määriteltynä päivinä."
+
+#. module: project_planning
+#: model:ir.actions.act_window,name:project_planning.action_account_analytic_planning_stat_form
+#: model:ir.ui.menu,name:project_planning.menu_board_planning
+#: model:ir.ui.menu,name:project_planning.menu_report_account_analytic_planning_stat
+msgid "Planning Statistics"
+msgstr "Suunnittelutilastot"
+
+#. module: project_planning
+#: model:ir.model,name:project_planning.model_report_account_analytic_planning_line
+#: view:report_account_analytic.planning.line:0
+msgid "Planning Line"
+msgstr "Suunnittelulinja"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Total Unallocated Time"
+msgstr "Allokoimaton aika yhteensä"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,name:0
+msgid "Planning Name"
+msgstr "Suunnitelman nimi"
+
+#. module: project_planning
+#: constraint:project.task:0
+msgid "Error ! You cannot create recursive tasks."
+msgstr "Virhe ! Et voi luoda rekursiivisiä tehtäviä."
+
+#. module: project_planning
+#: view:board.board:0
+msgid "My Project's planning"
+msgstr "Omien projetien suunnittelu"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.account,timesheet:0
+#: report:report_account_analytic.planning.print:0
+#: field:report_account_analytic.planning.stat,sum_amount_real:0
+#: field:report_account_analytic.planning.user,timesheet:0
+msgid "Timesheet"
+msgstr "Tuntilista"
+
+#. module: project_planning
+#: model:ir.module.module,shortdesc:project_planning.module_meta_information
+msgid "Planning Management Module"
+msgstr "Suunnittelun hallintamoduuli"
+
+#. module: project_planning
+#: model:ir.actions.act_window,help:project_planning.action_account_analytic_planning_form
+msgid ""
+"With its global system to schedule all resources of a company (people and "
+"material), OpenERP allows you to encode and then automatically compute tasks "
+"and phases scheduling, track resource allocation and availability."
+msgstr ""
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "Total planned tasks"
+msgstr "Suunnitellut tehtävät yhteensä"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.stat,account_id:0
+msgid "Account"
+msgstr "Tili"
+
+#. module: project_planning
+#: model:ir.model,name:project_planning.model_project_task
+msgid "Task"
+msgstr "Tehtävä"
+
+#. module: project_planning
+#: view:account.analytic.account:0
+#: view:report_account_analytic.planning:0
+#: view:report_account_analytic.planning.line:0
+msgid "Notes"
+msgstr "Huomautukset"
+
+#. module: project_planning
+#: field:account.analytic.account,planning_ids:0
+#: model:ir.actions.act_window,name:project_planning.action_account_analytic_planning_form
+#: model:ir.ui.menu,name:project_planning.menu_report_account_analytic_planning
+msgid "Plannings"
+msgstr "Suunnitelmat"
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "Project"
+msgstr "Projekti"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Start Task"
+msgstr "Aloita tehtävä"
+
+#. module: project_planning
+#: selection:report_account_analytic.planning,state:0
+msgid "Cancelled"
+msgstr "Peruttu"
+
+#. module: project_planning
+#: view:account.analytic.account:0
+#: view:report_account_analytic.planning:0
+#: view:report_account_analytic.planning.line:0
+msgid "Total Planned (in Days)"
+msgstr "Suunniteltu yhteensä (päiviä)"
+
+#. module: project_planning
+#: constraint:report_account_analytic.planning:0
+msgid ""
+"Invalid planning ! Planning dates can't overlap for the same responsible. "
+msgstr ""
+"Virheellinen suunnitelmat ! Suunnitellut päivät eivät voi mennä päällekkäin "
+"samalla vastuuhenkilöllä. "
+
+#. module: project_planning
+#: field:report_account_analytic.planning,planning_account:0
+msgid "Planning By Account"
+msgstr "Suunnitelmat tileittäin"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Current Plannings"
+msgstr "Nykyiset suunnitelmat"
+
+#. module: project_planning
+#: model:ir.model,name:project_planning.model_account_analytic_account
+msgid "Analytic Account"
+msgstr "Analyyttinen tili"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Reset to Draft"
+msgstr "Palauta luonnokseksi"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Extra Info"
+msgstr "Lisätiedot"
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "To :"
+msgstr "Vastanottaja :"
+
+#. module: project_planning
+#: help:report_account_analytic.planning.account,timesheet:0
+#: help:report_account_analytic.planning.user,timesheet:0
+msgid ""
+"This value is given by the sum of all work encoded in the timesheet(s) "
+"between the 'Date From' and 'Date To' of the planning."
+msgstr ""
+"Tämä arvo annetaan summana tuntilistoille merkityistä tunniesta alkupäivän "
+"ja loppupäivän väliseltä ajalta"
+
+#. module: project_planning
+#: constraint:account.analytic.account:0
+msgid "Error! You can not create recursive analytic accounts."
+msgstr "Virhe! Et voi luoda sisäkkäisiä analyyttisiä tilejä."
+
+#. module: project_planning
+#: field:report_account_analytic.planning.account,plan_open:0
+#: field:report_account_analytic.planning.user,plan_open:0
+msgid "Time Allocation without Tasks"
+msgstr "Ajan allokointi ilman tehtäviä"
+
+#. module: project_planning
+#: view:account.analytic.account:0
+#: view:report_account_analytic.planning:0
+msgid "Planning Lines"
+msgstr "Suunnitelmarivit"
+
+#. module: project_planning
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr "Virhe! Et voi luoda sisäkkäisiä yrityksiä."
+
+#. module: project_planning
+#: field:report_account_analytic.planning.account,account_id:0
+#: field:report_account_analytic.planning.line,account_id:0
+msgid "Analytic account"
+msgstr "Analyyttinen tili"
+
+#. module: project_planning
+#: help:report_account_analytic.planning.account,plan_open:0
+msgid ""
+"This value is given by the sum of time allocation with the checkbox "
+"'Assigned in Taks' set to FALSE, expressed in days."
+msgstr ""
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Miscelleanous"
+msgstr "Muut"
+
+#. module: project_planning
+#: help:res.company,planning_time_mode_id:0
+msgid "This will set the unit of measure used in plannings."
+msgstr "Asettaa mittayksikön jota käytetään suunnitelmissa."
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "HR Planning"
+msgstr "HR suunnittelu"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.account,tasks:0
+#: field:report_account_analytic.planning.user,tasks:0
+msgid "Remaining Tasks"
+msgstr "Jäljelläolevat tehtävät"
+
+#. module: project_planning
+#: view:account.analytic.account:0
+#: model:ir.actions.report.xml,name:project_planning.report_planning
+#: model:ir.model,name:project_planning.model_report_account_analytic_planning
+#: model:ir.ui.menu,name:project_planning.next_id_85
+#: field:project.task,planning_line_id:0
+#: view:report_account_analytic.planning:0
+#: field:report_account_analytic.planning.account,planning_id:0
+#: field:report_account_analytic.planning.line,planning_id:0
+#: field:report_account_analytic.planning.stat,planning_id:0
+#: field:report_account_analytic.planning.user,planning_id:0
+msgid "Planning"
+msgstr "Suunnittelu"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,total_planned:0
+msgid "Total Planned"
+msgstr "Suunniteltu yhteensä"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Time Encoding"
+msgstr "Ajan syöttö"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.user,free:0
+msgid "Unallocated Time"
+msgstr "Määrittelemätän aika"
+
+#. module: project_planning
+#: help:report_account_analytic.planning.user,plan_open:0
+msgid ""
+"This value is given by the sum of time allocation without task(s) linked, "
+"expressed in days."
+msgstr ""
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Delegate"
+msgstr "Delegoi"
+
+#. module: project_planning
+#: help:report_account_analytic.planning.user,free:0
+msgid ""
+"Computed as Business Days - (Time Allocation of Tasks + Time Allocation "
+"without Tasks + Holiday Leaves)"
+msgstr ""
+
+#. module: project_planning
+#: help:report_account_analytic.planning,business_days:0
+msgid ""
+"Set here the number of working days within this planning for one person full "
+"time"
+msgstr ""
+"Aseta tähän työpäivien määrä suunnitelmassa yhden täysaikaisen henkilön "
+"osalta."
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "["
+msgstr ""
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "From :"
+msgstr "Lähettäjä :"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,planning_user_ids:0
+msgid "Planning By User"
+msgstr "Suunnitelu käyttäjittäin"
+
+#. module: project_planning
+#: model:ir.actions.act_window,name:project_planning.act_task_of_lines
+#: view:report_account_analytic.planning:0
+#: field:report_account_analytic.planning.stat,sum_amount_tasks:0
+msgid "Tasks"
+msgstr "Tehtävät"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Planning By Account (in Days)"
+msgstr "Suunnittelu tileittäin (päiviä)"
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "Time without tasks"
+msgstr "Aika ilman tehtäiä"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,date_from:0
+msgid "Start Date"
+msgstr "Aloituspvm"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,total_free:0
+msgid "Total Free"
+msgstr "Yhteensä vapaana"
+
+#. module: project_planning
+#: help:report_account_analytic.planning.account,plan_tasks:0
+msgid ""
+"This value is given by the sum of time allocation with the checkbox "
+"'Assigned in Taks' set to TRUE expressed in days."
+msgstr ""
+
+#. module: project_planning
+#: field:report_account_analytic.planning,stat_ids:0
+msgid "Planning analysis"
+msgstr "Suunnitteluanalyysi"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.line,amount_unit:0
+msgid "Qty UoM"
+msgstr "Määrän mittayksikkö"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.line,note:0
+msgid "Note"
+msgstr "Huomautus"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+#: selection:report_account_analytic.planning,state:0
+msgid "Draft"
+msgstr "Luonnos"
+
+#. module: project_planning
+#: model:ir.model,name:project_planning.model_report_account_analytic_planning_account
+#: view:report_account_analytic.planning:0
+msgid "Planning by Account"
+msgstr "Suunnittelu tileittäin"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Pending"
+msgstr "Odottava"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.stat,sum_amount:0
+msgid "Planned Days"
+msgstr "Suunnitellut päivät"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,state:0
+msgid "Status"
+msgstr "Tila"
+
+#. module: project_planning
+#: help:report_account_analytic.planning.user,holiday:0
+msgid ""
+"This value is given by the total of validated leaves into the 'Date From' "
+"and 'Date To' of the planning."
+msgstr ""
+"Arvo annetaan hyväksyttyjen lomapäivien määränä alkupäivän ja loppupäivän "
+"välissä suunnitelmassa."
+
+#. module: project_planning
+#: field:report_account_analytic.planning.line,user_id:0
+#: report:report_account_analytic.planning.print:0
+#: field:report_account_analytic.planning.stat,user_id:0
+#: field:report_account_analytic.planning.user,user_id:0
+msgid "User"
+msgstr "Käyttäjä"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Total Remaining Tasks"
+msgstr "Jäljelläolevat tehtävät yhteensä"
+
+#. module: project_planning
+#: model:ir.module.module,description:project_planning.module_meta_information
+msgid ""
+"\n"
+"This module helps you to manage your plannings.\n"
+"\n"
+"This module is based on the analytic accounting and is totally integrated "
+"with\n"
+"* the timesheets encoding\n"
+"* the holidays management\n"
+"* the project management\n"
+"\n"
+"So that, each department manager can know if someone in his team has still "
+"unallocated time for a given planning (taking in consideration the validated "
+"leaves) or if he still needs to encode tasks.\n"
+"\n"
+"At the end of the month, the planning manager can also check if the encoded "
+"timesheets are respecting the planned time on each analytic account.\n"
+msgstr ""
+
+#. module: project_planning
+#: model:ir.model,name:project_planning.model_res_company
+msgid "Companies"
+msgstr "Yritykset"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.line,amount_in_base_uom:0
+msgid "Quantity in base uom"
+msgstr "Määrä perusmittayksikössä"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.user,plan_tasks:0
+msgid "Time Planned on Tasks"
+msgstr "Suunniteltu aika tehtäville"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.line,amount:0
+msgid "Quantity"
+msgstr "Määrä"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,code:0
+msgid "Code"
+msgstr "Koodi"
+
+#. module: project_planning
+#: view:account.analytic.account:0
+#: field:report_account_analytic.planning,line_ids:0
+msgid "Planning lines"
+msgstr "Suunnittelurivit"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+#: selection:report_account_analytic.planning,state:0
+msgid "Done"
+msgstr "Valmis"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Cancel"
+msgstr "Peruuta"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Planning By User (in Days)"
+msgstr "Suunnittelu käyttäjittäin (päiviä)"
+
+#. module: project_planning
+#: view:report_account_analytic.planning.stat:0
+msgid "Planning statistics"
+msgstr "Suunnittelutilastot"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+#: selection:report_account_analytic.planning,state:0
+msgid "Open"
+msgstr "Avaa"
+
+#. module: project_planning
+#: model:ir.model,name:project_planning.model_report_account_analytic_planning_user
+#: view:report_account_analytic.planning:0
+msgid "Planning by User"
+msgstr "Sunnittelu käyttäjittäin"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Information"
+msgstr "Tiedot"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,business_days:0
+msgid "Business Days"
+msgstr "Työpäiviä"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Reactivate"
+msgstr "Aktivoi uudelleen"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,user_id:0
+msgid "Responsible"
+msgstr "Vastuuhenkilö"
+
+#. module: project_planning
+#: model:ir.model,name:project_planning.model_report_account_analytic_planning_stat
+msgid "Planning stat"
+msgstr "Suunnittelun tila"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.account,plan_tasks:0
+msgid "Time Allocation of Tasks"
+msgstr "Ajan allokointi tehtäville"
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "Summary by user"
+msgstr "Käyttäjän yhteenveto"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Total Time Allocation without Tasks"
+msgstr "Kokonais ajan allokointi ilman tehtäviä"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.user,holiday:0
+msgid "Leaves"
+msgstr "Lomat"
+
+#. module: project_planning
+#: view:report_account_analytic.planning:0
+msgid "Total Time Allocation of Tasks"
+msgstr "Ajan kokonais allokaatio tehtäville"
+
+#. module: project_planning
+#: field:report_account_analytic.planning,date_to:0
+msgid "End Date"
+msgstr "Loppupvm"
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "Remaining tasks"
+msgstr "Jäljelläolevat tehtävät"
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "Summary by project"
+msgstr "Yhteenveto projekteittain"
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "Responsible :"
+msgstr "Vastuuhenkilö :"
+
+#. module: project_planning
+#: report:report_account_analytic.planning.print:0
+msgid "]"
+msgstr ""
+
+#. module: project_planning
+#: field:res.company,planning_time_mode_id:0
+msgid "Planning Time Unit"
+msgstr "Suunnittelun mittayksikkö"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.line,task_ids:0
+msgid "Planning Tasks"
+msgstr "Suunnittelutehtävät"
+
+#. module: project_planning
+#: field:report_account_analytic.planning.stat,manager_id:0
+msgid "Manager"
+msgstr "Päällikkö"
+
+#. module: project_planning
+#: help:report_account_analytic.planning.user,plan_tasks:0
+msgid ""
+"This value is given by the sum of time allocation with task(s) linked, "
+"expressed in days."
+msgstr ""
+"Arvo määritellään linkitettyjen tehtävien ajanvarauksen summana, "
+"määritettynä päivinä."
diff --git a/addons/project_planning/project_planning.py b/addons/project_planning/project_planning.py
index 46cc225153e..701a9a12cd6 100644
--- a/addons/project_planning/project_planning.py
+++ b/addons/project_planning/project_planning.py
@@ -128,8 +128,8 @@ class report_account_analytic_planning(osv.osv):
'business_days': fields.integer('Business Days', required=True, states={'done':[('readonly', True)]}, help='Set here the number of working days within this planning for one person full time'),
'planning_user_ids': one2many_mod3('report_account_analytic.planning.user', 'planning_id', 'Planning By User'),
'planning_account': fields.one2many('report_account_analytic.planning.account', 'planning_id', 'Planning By Account'),
- 'total_planned': fields.function(_get_total_planned, method=True, string='Total Planned'),
- 'total_free': fields.function(_get_total_free, method=True, string='Total Free'),
+ 'total_planned': fields.function(_get_total_planned, string='Total Planned'),
+ 'total_free': fields.function(_get_total_free, string='Total Free'),
}
_defaults = {
'date_from': lambda *a: time.strftime('%Y-%m-01'),
@@ -202,7 +202,7 @@ class report_account_analytic_planning_line(osv.osv):
'amount': fields.float('Quantity', required=True),
'amount_unit': fields.many2one('product.uom', 'Qty UoM', required=True),
'note': fields.text('Note', size=64),
- 'amount_in_base_uom': fields.function(_amount_base_uom, method=True, string='Quantity in base uom', store=True),
+ 'amount_in_base_uom': fields.function(_amount_base_uom, string='Quantity in base uom', store=True),
'task_ids': fields.one2many('project.task', 'planning_line_id', 'Planning Tasks'),
}
_order = 'user_id, account_id'
@@ -301,13 +301,13 @@ class report_account_analytic_planning_user(osv.osv):
_columns = {
'planning_id': fields.many2one('report_account_analytic.planning', 'Planning'),
'user_id': fields.many2one('res.users', 'User', readonly=True),
- 'tasks': fields.function(_get_tasks, method=True, string='Remaining Tasks', help='This value is given by the sum of work remaining to do on the task for this planning, expressed in days.'),
+ 'tasks': fields.function(_get_tasks, string='Remaining Tasks', help='This value is given by the sum of work remaining to do on the task for this planning, expressed in days.'),
'plan_tasks': fields.float('Time Planned on Tasks', readonly=True, help='This value is given by the sum of time allocation with task(s) linked, expressed in days.'),
- 'free': fields.function(_get_free, method=True, string='Unallocated Time', readonly=True, help='Computed as \
+ 'free': fields.function(_get_free, string='Unallocated Time', readonly=True, help='Computed as \
Business Days - (Time Allocation of Tasks + Time Allocation without Tasks + Holiday Leaves)'),
'plan_open': fields.float('Time Allocation without Tasks', readonly=True,help='This value is given by the sum of time allocation without task(s) linked, expressed in days.'),
'holiday': fields.float('Leaves',help='This value is given by the total of validated leaves into the \'Date From\' and \'Date To\' of the planning.'),
- 'timesheet': fields.function(_get_timesheets, method=True, string='Timesheet', help='This value is given by the sum of all work encoded in the timesheet(s) between the \'Date From\' and \'Date To\' of the planning.'),
+ 'timesheet': fields.function(_get_timesheets, string='Timesheet', help='This value is given by the sum of all work encoded in the timesheet(s) between the \'Date From\' and \'Date To\' of the planning.'),
}
def init(self, cr):
@@ -435,10 +435,10 @@ class report_account_analytic_planning_account(osv.osv):
_columns = {
'planning_id': fields.many2one('report_account_analytic.planning', 'Planning'),
'account_id': fields.many2one('account.analytic.account', 'Analytic account', readonly=True),
- 'tasks': fields.function(_get_tasks, method=True, string='Remaining Tasks', help='This value is given by the sum of work remaining to do on the task for this planning, expressed in days.'),
+ 'tasks': fields.function(_get_tasks, string='Remaining Tasks', help='This value is given by the sum of work remaining to do on the task for this planning, expressed in days.'),
'plan_tasks': fields.float('Time Allocation of Tasks', readonly=True, help='This value is given by the sum of time allocation with the checkbox \'Assigned in Taks\' set to TRUE expressed in days.'),
'plan_open': fields.float('Time Allocation without Tasks', readonly=True, help='This value is given by the sum of time allocation with the checkbox \'Assigned in Taks\' set to FALSE, expressed in days.'),
- 'timesheet': fields.function(_get_timesheets, method=True, string='Timesheet', help='This value is given by the sum of all work encoded in the timesheet(s) between the \'Date From\' and \'Date To\' of the planning.'),
+ 'timesheet': fields.function(_get_timesheets, string='Timesheet', help='This value is given by the sum of all work encoded in the timesheet(s) between the \'Date From\' and \'Date To\' of the planning.'),
}
def init(self, cr):
@@ -546,8 +546,8 @@ WHERE user_id=%s and account_id=%s and date>=%s and date<=%s''', (line.user_id.i
'manager_id': fields.many2one('res.users', 'Manager'),
'account_id': fields.many2one('account.analytic.account', 'Account'),
'sum_amount': fields.float('Planned Days', required=True),
- 'sum_amount_real': fields.function(_sum_amount_real, method=True, string='Timesheet'),
- 'sum_amount_tasks': fields.function(_sum_amount_tasks, method=True, string='Tasks'),
+ 'sum_amount_real': fields.function(_sum_amount_real, string='Timesheet'),
+ 'sum_amount_tasks': fields.function(_sum_amount_tasks, string='Tasks'),
}
def init(self, cr):
diff --git a/addons/project_scrum/project_scrum.py b/addons/project_scrum/project_scrum.py
index 6c274aa3f6a..334a415982d 100644
--- a/addons/project_scrum/project_scrum.py
+++ b/addons/project_scrum/project_scrum.py
@@ -106,9 +106,9 @@ class project_scrum_sprint(osv.osv):
'review': fields.text('Sprint Review'),
'retrospective': fields.text('Sprint Retrospective'),
'backlog_ids': fields.one2many('project.scrum.product.backlog', 'sprint_id', 'Sprint Backlog'),
- 'progress': fields.function(_compute, group_operator="avg", type='float', multi="progress", method=True, string='Progress (0-100)', help="Computed as: Time Spent / Total Time."),
- 'effective_hours': fields.function(_compute, multi="effective_hours", method=True, string='Effective hours', help="Computed using the sum of the task work done."),
- 'expected_hours': fields.function(_compute, multi="expected_hours", method=True, string='Planned Hours', help='Estimated time to do the task.'),
+ 'progress': fields.function(_compute, group_operator="avg", type='float', multi="progress", string='Progress (0-100)', help="Computed as: Time Spent / Total Time."),
+ 'effective_hours': fields.function(_compute, multi="effective_hours", string='Effective hours', help="Computed using the sum of the task work done."),
+ 'expected_hours': fields.function(_compute, multi="expected_hours", string='Planned Hours', help='Estimated time to do the task.'),
'state': fields.selection([('draft','Draft'),('open','Open'),('pending','Pending'),('cancel','Cancelled'),('done','Done')], 'State', required=True),
}
_defaults = {
@@ -230,11 +230,11 @@ class project_scrum_product_backlog(osv.osv):
'sequence' : fields.integer('Sequence', help="Gives the sequence order when displaying a list of product backlog."),
'tasks_id': fields.one2many('project.task', 'product_backlog_id', 'Tasks Details'),
'state': fields.selection([('draft','Draft'),('open','Open'),('pending','Pending'),('done','Done'),('cancel','Cancelled')], 'State', required=True),
- 'progress': fields.function(_compute, multi="progress", group_operator="avg", type='float', method=True, string='Progress', help="Computed as: Time Spent / Total Time."),
- 'effective_hours': fields.function(_compute, multi="effective_hours", method=True, string='Spent Hours', help="Computed using the sum of the time spent on every related tasks", store=True),
+ 'progress': fields.function(_compute, multi="progress", group_operator="avg", type='float', string='Progress', help="Computed as: Time Spent / Total Time."),
+ 'effective_hours': fields.function(_compute, multi="effective_hours", string='Spent Hours', help="Computed using the sum of the time spent on every related tasks", store=True),
'expected_hours': fields.float('Planned Hours', help='Estimated total time to do the Backlog'),
'create_date': fields.datetime("Creation Date", readonly=True),
- 'task_hours': fields.function(_compute, multi="task_hours", method=True, string='Task Hours', help='Estimated time of the total hours of the tasks')
+ 'task_hours': fields.function(_compute, multi="task_hours", string='Task Hours', help='Estimated time of the total hours of the tasks')
}
_defaults = {
'state': 'draft',
diff --git a/addons/project_timesheet/report/task_report.py b/addons/project_timesheet/report/task_report.py
index 623d4e4a5cd..3c223ab6b07 100644
--- a/addons/project_timesheet/report/task_report.py
+++ b/addons/project_timesheet/report/task_report.py
@@ -62,8 +62,8 @@ class report_timesheet_task_user(osv.osv):
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
'user_id': fields.many2one('res.users', 'User',readonly=True),
- 'timesheet_hrs': fields.function(get_hrs_timesheet, method=True, string="Timesheet Hours"),
- 'task_hrs': fields.function(_get_task_hours, method=True, string="Task Hours"),
+ 'timesheet_hrs': fields.function(get_hrs_timesheet, string="Timesheet Hours"),
+ 'task_hrs': fields.function(_get_task_hours, string="Task Hours"),
}
def init(self, cr):
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 6f6ab0c1b44..6ec558acc97 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -185,29 +185,29 @@ class purchase_order(osv.osv):
'invoice_ids': fields.many2many('account.invoice', 'purchase_invoice_rel', 'purchase_id', 'invoice_id', 'Invoices', help="Invoices generated for a purchase order"),
'picking_ids': fields.one2many('stock.picking', 'purchase_id', 'Picking List', readonly=True, help="This is the list of picking list that have been generated for this purchase"),
'shipped':fields.boolean('Received', readonly=True, select=True, help="It indicates that a picking has been done"),
- 'shipped_rate': fields.function(_shipped_rate, method=True, string='Received', type='float'),
- 'invoiced': fields.function(_invoiced, method=True, string='Invoiced & Paid', type='boolean', help="It indicates that an invoice has been paid"),
- 'invoiced_rate': fields.function(_invoiced_rate, method=True, string='Invoiced', type='float'),
+ 'shipped_rate': fields.function(_shipped_rate, string='Received', type='float'),
+ 'invoiced': fields.function(_invoiced, string='Invoiced & Paid', type='boolean', help="It indicates that an invoice has been paid"),
+ 'invoiced_rate': fields.function(_invoiced_rate, string='Invoiced', type='float'),
'invoice_method': fields.selection([('manual','Manual'),('order','From Order'),('picking','From Picking')], 'Invoicing Control', required=True,
help="From Order: a draft invoice will be pre-generated based on the purchase order. The accountant " \
"will just have to validate this invoice for control.\n" \
"From Picking: a draft invoice will be pre-generated based on validated receptions.\n" \
"Manual: allows you to generate suppliers invoices by chosing in the uninvoiced lines of all manual purchase orders."
),
- 'minimum_planned_date':fields.function(_minimum_planned_date, fnct_inv=_set_minimum_planned_date, method=True, string='Expected Date', type='date', select=True, help="This is computed as the minimum scheduled date of all purchase order lines' products.",
+ 'minimum_planned_date':fields.function(_minimum_planned_date, fnct_inv=_set_minimum_planned_date, string='Expected Date', type='date', select=True, help="This is computed as the minimum scheduled date of all purchase order lines' products.",
store = {
'purchase.order.line': (_get_order, ['date_planned'], 10),
}
),
- 'amount_untaxed': fields.function(_amount_all, method=True, digits_compute= dp.get_precision('Purchase Price'), string='Untaxed Amount',
+ 'amount_untaxed': fields.function(_amount_all, digits_compute= dp.get_precision('Purchase Price'), string='Untaxed Amount',
store={
'purchase.order.line': (_get_order, None, 10),
}, multi="sums", help="The amount without tax"),
- 'amount_tax': fields.function(_amount_all, method=True, digits_compute= dp.get_precision('Purchase Price'), string='Taxes',
+ 'amount_tax': fields.function(_amount_all, digits_compute= dp.get_precision('Purchase Price'), string='Taxes',
store={
'purchase.order.line': (_get_order, None, 10),
}, multi="sums", help="The tax amount"),
- 'amount_total': fields.function(_amount_all, method=True, digits_compute= dp.get_precision('Purchase Price'), string='Total',
+ 'amount_total': fields.function(_amount_all, digits_compute= dp.get_precision('Purchase Price'), string='Total',
store={
'purchase.order.line': (_get_order, None, 10),
}, multi="sums",help="The total amount"),
@@ -622,7 +622,7 @@ class purchase_order_line(osv.osv):
'move_ids': fields.one2many('stock.move', 'purchase_line_id', 'Reservation', readonly=True, ondelete='set null'),
'move_dest_id': fields.many2one('stock.move', 'Reservation Destination', ondelete='set null'),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Purchase Price')),
- 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute= dp.get_precision('Purchase Price')),
+ 'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Purchase Price')),
'notes': fields.text('Notes'),
'order_id': fields.many2one('purchase.order', 'Order Reference', select=True, required=True, ondelete='cascade'),
'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',),
diff --git a/addons/purchase_double_validation/i18n/fi.po b/addons/purchase_double_validation/i18n/fi.po
new file mode 100644
index 00000000000..645ea26abf4
--- /dev/null
+++ b/addons/purchase_double_validation/i18n/fi.po
@@ -0,0 +1,83 @@
+# Finnish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-06-28 09:16+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Finnish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: purchase_double_validation
+#: view:purchase.double.validation.installer:0
+msgid "Purchase Application Configuration"
+msgstr "Hankintaohjelmiston konfiguraatio"
+
+#. module: purchase_double_validation
+#: field:purchase.double.validation.installer,progress:0
+msgid "Configuration Progress"
+msgstr "Konfiguraation eteneminen"
+
+#. module: purchase_double_validation
+#: view:purchase.double.validation.installer:0
+msgid "Define minimum amount after which puchase is needed to be validated."
+msgstr "Määrittele minimiarvo jota suuremmat hankinnat pitää tarkistaa"
+
+#. module: purchase_double_validation
+#: view:purchase.double.validation.installer:0
+msgid "title"
+msgstr "otsikko"
+
+#. module: purchase_double_validation
+#: model:ir.module.module,shortdesc:purchase_double_validation.module_meta_information
+msgid "purchase_double_validation"
+msgstr ""
+
+#. module: purchase_double_validation
+#: field:purchase.double.validation.installer,config_logo:0
+msgid "Image"
+msgstr "Kuva"
+
+#. module: purchase_double_validation
+#: model:ir.module.module,description:purchase_double_validation.module_meta_information
+msgid ""
+"\n"
+"\tThis module modifies the purchase workflow in order to validate purchases "
+"that exceeds minimum amount set by configuration wizard\n"
+" "
+msgstr ""
+
+#. module: purchase_double_validation
+#: model:ir.actions.act_window,name:purchase_double_validation.action_config_purchase_limit_amount
+#: view:purchase.double.validation.installer:0
+msgid "Configure Limit Amount for Purchase"
+msgstr "Konfiguroi hankintojen rajamäärä"
+
+#. module: purchase_double_validation
+#: view:purchase.double.validation.installer:0
+msgid "res_config_contents"
+msgstr ""
+
+#. module: purchase_double_validation
+#: help:purchase.double.validation.installer,limit_amount:0
+msgid "Maximum amount after which validation of purchase is required."
+msgstr "Maksimimäärä jota suurempien hankintojen osalta tarkistus vaaditaan."
+
+#. module: purchase_double_validation
+#: model:ir.model,name:purchase_double_validation.model_purchase_double_validation_installer
+msgid "purchase.double.validation.installer"
+msgstr ""
+
+#. module: purchase_double_validation
+#: field:purchase.double.validation.installer,limit_amount:0
+msgid "Maximum Purchase Amount"
+msgstr "Maksimi hankintamäärä"
diff --git a/addons/report_webkit_sample/i18n/de.po b/addons/report_webkit_sample/i18n/de.po
index f89a9216dc4..14b87dbdadb 100644
--- a/addons/report_webkit_sample/i18n/de.po
+++ b/addons/report_webkit_sample/i18n/de.po
@@ -8,15 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-01-11 11:16+0000\n"
-"PO-Revision-Date: 2010-12-31 10:19+0000\n"
-"Last-Translator: Thorsten Vocks (OpenBig.org) \n"
+"PO-Revision-Date: 2011-07-02 13:05+0000\n"
+"Last-Translator: Ferdinand @ Camptocamp \n"
"Language-Team: German \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-04-29 05:54+0000\n"
-"X-Generator: Launchpad (build 12758)\n"
+"X-Launchpad-Export-Date: 2011-07-03 04:47+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
#. module: report_webkit_sample
#: model:ir.actions.report.xml,name:report_webkit_sample.report_webkit_html
@@ -24,12 +23,12 @@ msgid "WebKit invoice"
msgstr "Webkit Rechnung"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35
+#: report:report.webkitaccount.invoice:35
msgid "Supplier Invoice"
msgstr "Lieferanten Rechnung"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49
+#: report:report.webkitaccount.invoice:49
msgid "Unit Price"
msgstr "Preis/ME"
@@ -65,92 +64,92 @@ msgid "Webkit Report Samples"
msgstr "Beispiele Webkit Reports"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49
+#: report:report.webkitaccount.invoice:49
msgid "Disc.(%)"
msgstr "Rabatt (%)"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22
+#: report:report.webkitaccount.invoice:22
msgid "Fax"
msgstr "Fax"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44
+#: report:report.webkitaccount.invoice:44
msgid "Document"
msgstr "Dokument"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49
+#: report:report.webkitaccount.invoice:49
msgid "Description"
msgstr "Beschreibung"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49
+#: report:report.webkitaccount.invoice:49
msgid "Price"
msgstr "Preis"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44
+#: report:report.webkitaccount.invoice:44
msgid "Invoice Date"
msgstr "Datum Rechnung"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49
+#: report:report.webkitaccount.invoice:49
msgid "QTY"
msgstr "Anz."
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64
+#: report:report.webkitaccount.invoice:64
msgid "Base"
msgstr "Steuergrundbetrag"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44
+#: report:report.webkitaccount.invoice:44
msgid "Partner Ref."
msgstr "Partner Ref."
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49
+#: report:report.webkitaccount.invoice:49
msgid "Taxes"
msgstr "Steuern"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64
+#: report:report.webkitaccount.invoice:64
msgid "Amount"
msgstr "Betrag"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28
+#: report:report.webkitaccount.invoice:28
msgid "VAT"
-msgstr "USt."
+msgstr "UID"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37
+#: report:report.webkitaccount.invoice:37
msgid "Refund"
msgstr "Gutschrift"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19
+#: report:report.webkitaccount.invoice:19
msgid "Tel"
msgstr "Tel."
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25
+#: report:report.webkitaccount.invoice:25
msgid "E-mail"
msgstr "E-Mail"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33
+#: report:report.webkitaccount.invoice:33
msgid "Invoice"
msgstr "Rechnung"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39
+#: report:report.webkitaccount.invoice:39
msgid "Supplier Refund"
msgstr "Lieferanten Gutschrift"
#. module: report_webkit_sample
-#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76
+#: report:report.webkitaccount.invoice:76
msgid "Total"
msgstr "Summe"
diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py
index aaaec228d7b..e4f917ba063 100644
--- a/addons/sale/report/sale_report.py
+++ b/addons/sale/report/sale_report.py
@@ -31,7 +31,7 @@ class sale_report(osv.osv):
'date': fields.date('Date Order', readonly=True),
'date_confirm': fields.date('Date Confirm', readonly=True),
'shipped': fields.boolean('Shipped', readonly=True),
- 'shipped_qty_1': fields.integer('Shipped Qty', readonly=True),
+ 'shipped_qty_1': fields.integer('Shipped', readonly=True),
'year': fields.char('Year', size=4, readonly=True),
'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'),
('05', 'May'), ('06', 'June'), ('07', 'July'), ('08', 'August'), ('09', 'September'),
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index 41cdecee0ea..c62510e9ab6 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -21,7 +21,7 @@
-
+
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 0b436f0dc91..e9a670cdaaf 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -236,25 +236,25 @@ class sale_order(osv.osv):
'invoice_ids': fields.many2many('account.invoice', 'sale_order_invoice_rel', 'order_id', 'invoice_id', 'Invoices', readonly=True, help="This is the list of invoices that have been generated for this sales order. The same sales order may have been invoiced in several times (by line for example)."),
'picking_ids': fields.one2many('stock.picking', 'sale_id', 'Related Picking', readonly=True, help="This is a list of picking that has been generated for this sales order."),
'shipped': fields.boolean('Delivered', readonly=True, help="It indicates that the sales order has been delivered. This field is updated only after the scheduler(s) have been launched."),
- 'picked_rate': fields.function(_picked_rate, method=True, string='Picked', type='float'),
- 'invoiced_rate': fields.function(_invoiced_rate, method=True, string='Invoiced', type='float'),
- 'invoiced': fields.function(_invoiced, method=True, string='Paid',
+ 'picked_rate': fields.function(_picked_rate, string='Picked', type='float'),
+ 'invoiced_rate': fields.function(_invoiced_rate, string='Invoiced', type='float'),
+ 'invoiced': fields.function(_invoiced, string='Paid',
fnct_search=_invoiced_search, type='boolean', help="It indicates that an invoice has been paid."),
'note': fields.text('Notes'),
- 'amount_untaxed': fields.function(_amount_all, method=True, digits_compute= dp.get_precision('Sale Price'), string='Untaxed Amount',
+ 'amount_untaxed': fields.function(_amount_all, digits_compute= dp.get_precision('Sale Price'), string='Untaxed Amount',
store = {
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
},
multi='sums', help="The amount without tax."),
- 'amount_tax': fields.function(_amount_all, method=True, digits_compute= dp.get_precision('Sale Price'), string='Taxes',
+ 'amount_tax': fields.function(_amount_all, digits_compute= dp.get_precision('Sale Price'), string='Taxes',
store = {
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
},
multi='sums', help="The tax amount."),
- 'amount_total': fields.function(_amount_all, method=True, digits_compute= dp.get_precision('Sale Price'), string='Total',
+ 'amount_total': fields.function(_amount_all, digits_compute= dp.get_precision('Sale Price'), string='Total',
store = {
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10),
'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10),
@@ -851,7 +851,7 @@ class sale_order_line(osv.osv):
'invoiced': fields.boolean('Invoiced', readonly=True),
'procurement_id': fields.many2one('procurement.order', 'Procurement'),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price'), readonly=True, states={'draft': [('readonly', False)]}),
- 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute= dp.get_precision('Sale Price')),
+ 'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Sale Price')),
'tax_id': fields.many2many('account.tax', 'sale_order_tax', 'order_line_id', 'tax_id', 'Taxes', readonly=True, states={'draft': [('readonly', False)]}),
'type': fields.selection([('make_to_stock', 'from stock'), ('make_to_order', 'on order')], 'Procurement Method', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'property_ids': fields.many2many('mrp.property', 'sale_order_line_property_rel', 'order_id', 'property_id', 'Properties', readonly=True, states={'draft': [('readonly', False)]}),
@@ -863,7 +863,7 @@ class sale_order_line(osv.osv):
'product_packaging': fields.many2one('product.packaging', 'Packaging'),
'move_ids': fields.one2many('stock.move', 'sale_line_id', 'Inventory Moves', readonly=True),
'discount': fields.float('Discount (%)', digits=(16, 2), readonly=True, states={'draft': [('readonly', False)]}),
- 'number_packages': fields.function(_number_packages, method=True, type='integer', string='Number Packages'),
+ 'number_packages': fields.function(_number_packages, type='integer', string='Number Packages'),
'notes': fields.text('Notes'),
'th_weight': fields.float('Weight', readonly=True, states={'draft': [('readonly', False)]}),
'state': fields.selection([('draft', 'Draft'),('confirmed', 'Confirmed'),('done', 'Done'),('cancel', 'Cancelled'),('exception', 'Exception')], 'State', required=True, readonly=True,
diff --git a/addons/sale_journal/sale_journal.py b/addons/sale_journal/sale_journal.py
index 8d5d219537f..136e7d68198 100644
--- a/addons/sale_journal/sale_journal.py
+++ b/addons/sale_journal/sale_journal.py
@@ -48,7 +48,6 @@ class res_partner(osv.osv):
type = 'many2one',
relation = 'sale_journal.invoice.type',
string = "Invoicing Method",
- method = True,
view_load = True,
group_name = "Accounting Properties",
help = "The type of journal used for sales and picking."),
diff --git a/addons/sale_margin/i18n/zh_CN.po b/addons/sale_margin/i18n/zh_CN.po
new file mode 100644
index 00000000000..9397a2b316d
--- /dev/null
+++ b/addons/sale_margin/i18n/zh_CN.po
@@ -0,0 +1,405 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2011-06-28 05:05+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Category"
+msgstr "类别"
+
+#. module: sale_margin
+#: selection:report.account.invoice,type:0
+#: selection:report.account.invoice.category,type:0
+#: selection:report.account.invoice.partner,type:0
+#: selection:report.account.invoice.partner.product,type:0
+#: selection:report.account.invoice.product,type:0
+msgid "Customer Refund"
+msgstr "客户退款"
+
+#. module: sale_margin
+#: selection:report.account.invoice,type:0
+#: selection:report.account.invoice.category,type:0
+#: selection:report.account.invoice.partner,type:0
+#: selection:report.account.invoice.partner.product,type:0
+#: selection:report.account.invoice.product,type:0
+msgid "Customer Invoice"
+msgstr "客户发票"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "February"
+msgstr "2月"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Current"
+msgstr "目前"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Group By..."
+msgstr "分组..."
+
+#. module: sale_margin
+#: field:report.account.invoice,state:0
+#: field:report.account.invoice.category,state:0
+#: field:report.account.invoice.partner,state:0
+#: field:report.account.invoice.partner.product,state:0
+#: field:report.account.invoice.product,state:0
+msgid "State"
+msgstr "状态"
+
+#. module: sale_margin
+#: model:ir.module.module,description:sale_margin.module_meta_information
+msgid ""
+" \n"
+" This module adds the 'Margin' on sales order,\n"
+" which gives the profitability by calculating the difference between the "
+"Unit Price and Cost Price\n"
+" "
+msgstr ""
+
+#. module: sale_margin
+#: selection:report.account.invoice,state:0
+#: selection:report.account.invoice.category,state:0
+#: selection:report.account.invoice.partner,state:0
+#: selection:report.account.invoice.partner.product,state:0
+#: selection:report.account.invoice.product,state:0
+msgid "Draft"
+msgstr "草稿"
+
+#. module: sale_margin
+#: selection:report.account.invoice,state:0
+#: selection:report.account.invoice.category,state:0
+#: selection:report.account.invoice.partner,state:0
+#: selection:report.account.invoice.partner.product,state:0
+#: selection:report.account.invoice.product,state:0
+msgid "Paid"
+msgstr "已付"
+
+#. module: sale_margin
+#: model:ir.model,name:sale_margin.model_stock_picking
+msgid "Picking List"
+msgstr "分拣单"
+
+#. module: sale_margin
+#: help:sale.order,margin:0
+msgid ""
+"It gives profitability by calculating the difference between the Unit Price "
+"and Cost Price."
+msgstr ""
+
+#. module: sale_margin
+#: field:report.account.invoice,type:0
+#: field:report.account.invoice.category,type:0
+#: field:report.account.invoice.partner,type:0
+#: field:report.account.invoice.partner.product,type:0
+#: field:report.account.invoice.product,type:0
+#: wizard_field:stock.invoice_onshipping,init,type:0
+msgid "Type"
+msgstr "类别"
+
+#. module: sale_margin
+#: model:ir.model,name:sale_margin.model_report_account_invoice_product
+msgid "Invoice Statistics"
+msgstr ""
+
+#. module: sale_margin
+#: field:report.account.invoice.partner.product,product_id:0
+#: field:report.account.invoice.product,product_id:0
+msgid "Product"
+msgstr "产品"
+
+#. module: sale_margin
+#: sql_constraint:sale.order:0
+msgid "Order Reference must be unique !"
+msgstr "单号必须唯一!"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Invoice by Partner"
+msgstr ""
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "August"
+msgstr "8月"
+
+#. module: sale_margin
+#: selection:report.account.invoice,state:0
+#: selection:report.account.invoice.category,state:0
+#: selection:report.account.invoice.partner,state:0
+#: selection:report.account.invoice.partner.product,state:0
+#: selection:report.account.invoice.product,state:0
+msgid "Pro-forma"
+msgstr "形式发票"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "May"
+msgstr "5月"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "June"
+msgstr "6月"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Date Invoiced"
+msgstr "开票日期"
+
+#. module: sale_margin
+#: model:ir.module.module,shortdesc:sale_margin.module_meta_information
+msgid "Margins in Sales Order"
+msgstr "销售订单利润率"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Search Margin"
+msgstr "查询利润率"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "This Year"
+msgstr "本年"
+
+#. module: sale_margin
+#: field:report.account.invoice.product,date:0
+msgid "Date"
+msgstr "日期"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "July"
+msgstr "7月"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Extended Filters..."
+msgstr "扩展过滤器..."
+
+#. module: sale_margin
+#: model:ir.ui.menu,name:sale_margin.menu_report_account_this_month_product
+msgid "This Month"
+msgstr "本月"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+#: field:report.account.invoice.product,day:0
+msgid "Day"
+msgstr "日"
+
+#. module: sale_margin
+#: field:report.account.invoice.category,categ_id:0
+msgid "Categories"
+msgstr "类别"
+
+#. module: sale_margin
+#: field:account.invoice.line,cost_price:0
+#: field:report.account.invoice,cost_price:0
+#: field:report.account.invoice.category,cost_price:0
+#: field:report.account.invoice.partner,cost_price:0
+#: field:report.account.invoice.partner.product,cost_price:0
+#: field:report.account.invoice.product,cost_price:0
+#: field:sale.order.line,purchase_price:0
+msgid "Cost Price"
+msgstr "成本价"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "October"
+msgstr "10月"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "January"
+msgstr "1月"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+#: field:report.account.invoice.product,year:0
+msgid "Year"
+msgstr "年"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "September"
+msgstr "9月"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "April"
+msgstr "4月"
+
+#. module: sale_margin
+#: field:report.account.invoice,amount:0
+#: field:report.account.invoice.category,amount:0
+#: field:report.account.invoice.partner,amount:0
+#: field:report.account.invoice.partner.product,amount:0
+#: field:report.account.invoice.product,amount:0
+msgid "Amount"
+msgstr "金额"
+
+#. module: sale_margin
+#: selection:report.account.invoice,type:0
+#: selection:report.account.invoice.category,type:0
+#: selection:report.account.invoice.partner,type:0
+#: selection:report.account.invoice.partner.product,type:0
+#: selection:report.account.invoice.product,type:0
+msgid "Supplier Refund"
+msgstr "供应商退款"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "March"
+msgstr "3月"
+
+#. module: sale_margin
+#: field:report.account.invoice,margin:0
+#: field:report.account.invoice.category,margin:0
+#: field:report.account.invoice.partner,margin:0
+#: field:report.account.invoice.partner.product,margin:0
+#: field:report.account.invoice.product,margin:0
+#: field:sale.order,margin:0
+#: field:sale.order.line,margin:0
+msgid "Margin"
+msgstr "毛利"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "November"
+msgstr "11月"
+
+#. module: sale_margin
+#: field:report.account.invoice,quantity:0
+#: field:report.account.invoice.category,quantity:0
+#: field:report.account.invoice.partner,quantity:0
+#: field:report.account.invoice.partner.product,quantity:0
+#: field:report.account.invoice.product,quantity:0
+msgid "Quantity"
+msgstr "数量"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Invoices by product"
+msgstr "产品发票"
+
+#. module: sale_margin
+#: selection:report.account.invoice,type:0
+#: selection:report.account.invoice.category,type:0
+#: selection:report.account.invoice.partner,type:0
+#: selection:report.account.invoice.partner.product,type:0
+#: selection:report.account.invoice.product,type:0
+msgid "Supplier Invoice"
+msgstr "供应商发票"
+
+#. module: sale_margin
+#: model:ir.ui.menu,name:sale_margin.menu_report_account_all_invoice_by_invoices
+#: model:ir.ui.menu,name:sale_margin.menu_report_account_invoice_by_invoices
+#: view:report.account.invoice:0
+#: view:stock.picking:0
+#: field:stock.picking,invoice_ids:0
+msgid "Invoices"
+msgstr "发票"
+
+#. module: sale_margin
+#: selection:report.account.invoice.product,month:0
+msgid "December"
+msgstr "12月"
+
+#. module: sale_margin
+#: model:ir.model,name:sale_margin.model_account_invoice_line
+msgid "Invoice Line"
+msgstr "发票明细"
+
+#. module: sale_margin
+#: field:report.account.invoice,name:0
+#: field:report.account.invoice.category,name:0
+#: field:report.account.invoice.partner,name:0
+#: field:report.account.invoice.partner.product,name:0
+#: field:report.account.invoice.product,name:0
+msgid "Month"
+msgstr "月份"
+
+#. module: sale_margin
+#: selection:report.account.invoice,state:0
+#: selection:report.account.invoice.category,state:0
+#: selection:report.account.invoice.partner,state:0
+#: selection:report.account.invoice.partner.product,state:0
+#: selection:report.account.invoice.product,state:0
+msgid "Canceled"
+msgstr "已取消"
+
+#. module: sale_margin
+#: model:ir.actions.act_window,help:sale_margin.action_report_account_invoice_report
+msgid ""
+"This report gives you an overview of all the invoices generated by the "
+"system. You can sort and group your results by specific selection criteria "
+"to quickly find what you are looking for."
+msgstr ""
+
+#. module: sale_margin
+#: model:ir.ui.menu,name:sale_margin.menu_report_account_invoice_product
+msgid "Invoice Report"
+msgstr "发票报表"
+
+#. module: sale_margin
+#: view:report.account.invoice.product:0
+msgid "Done"
+msgstr "已完成"
+
+#. module: sale_margin
+#: model:ir.ui.menu,name:sale_margin.menu_report_account_invoice_product
+msgid "Invoice"
+msgstr "发票"
+
+#. module: sale_margin
+#: view:stock.picking:0
+msgid "Customer Invoices"
+msgstr "客户发票"
+
+#. module: sale_margin
+#: field:report.account.invoice.partner,partner_id:0
+#: field:report.account.invoice.partner.product,partner_id:0
+msgid "Partner"
+msgstr "业务伙伴"
+
+#. module: sale_margin
+#: model:ir.model,name:sale_margin.model_sale_order
+msgid "Sales Order"
+msgstr "销售订单"
+
+#. module: sale_margin
+#: selection:report.account.invoice,state:0
+#: selection:report.account.invoice.category,state:0
+#: selection:report.account.invoice.partner,state:0
+#: selection:report.account.invoice.partner.product,state:0
+#: selection:report.account.invoice.product,state:0
+msgid "Open"
+msgstr ""
+
+#. module: sale_margin
+#: model:ir.actions.act_window,name:sale_margin.action_report_account_invoice_report
+msgid "Invoice Analysis"
+msgstr ""
+
+#. module: sale_margin
+#: model:ir.model,name:sale_margin.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "销售订单明细"
diff --git a/addons/sale_margin/sale_margin.py b/addons/sale_margin/sale_margin.py
index 8f1cb8027ae..24f36b9f94b 100644
--- a/addons/sale_margin/sale_margin.py
+++ b/addons/sale_margin/sale_margin.py
@@ -49,7 +49,7 @@ class sale_order_line(osv.osv):
return res
_columns = {
- 'margin': fields.function(_product_margin, method=True, string='Margin', store=True),
+ 'margin': fields.function(_product_margin, string='Margin', store=True),
'purchase_price': fields.float('Cost Price', digits=(16,2))
}
@@ -67,7 +67,7 @@ class sale_order(osv.osv):
return result
_columns = {
- 'margin': fields.function(_product_margin, method=True, string='Margin', store=True, help="It gives profitability by calculating the difference between the Unit Price and Cost Price."),
+ 'margin': fields.function(_product_margin, string='Margin', store=True, help="It gives profitability by calculating the difference between the Unit Price and Cost Price."),
}
sale_order()
diff --git a/addons/sale_mrp/i18n/zh_CN.po b/addons/sale_mrp/i18n/zh_CN.po
new file mode 100644
index 00000000000..121e60bffee
--- /dev/null
+++ b/addons/sale_mrp/i18n/zh_CN.po
@@ -0,0 +1,66 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2011-06-28 05:04+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: sale_mrp
+#: help:mrp.production,sale_ref:0
+msgid "Indicate the Customer Reference from sales order."
+msgstr ""
+
+#. module: sale_mrp
+#: field:mrp.production,sale_ref:0
+msgid "Sales Reference"
+msgstr ""
+
+#. module: sale_mrp
+#: model:ir.model,name:sale_mrp.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "生成订单"
+
+#. module: sale_mrp
+#: model:ir.module.module,description:sale_mrp.module_meta_information
+msgid ""
+"\n"
+" This module provides facility to the user to install mrp and sales "
+"modules\n"
+" at a time. It is basically used when we want to keep track of "
+"production\n"
+" orders generated from sales order.\n"
+" It adds sales name and sales Reference on production order\n"
+" "
+msgstr ""
+
+#. module: sale_mrp
+#: field:mrp.production,sale_name:0
+msgid "Sales Name"
+msgstr ""
+
+#. module: sale_mrp
+#: model:ir.module.module,shortdesc:sale_mrp.module_meta_information
+msgid "Sales and MRP Management"
+msgstr "销售和MRP管理"
+
+#. module: sale_mrp
+#: constraint:mrp.production:0
+msgid "Order quantity cannot be negative or zero !"
+msgstr "订单数量不能为0或者负数!"
+
+#. module: sale_mrp
+#: help:mrp.production,sale_name:0
+msgid "Indicate the name of sales order."
+msgstr ""
diff --git a/addons/sale_mrp/sale_mrp.py b/addons/sale_mrp/sale_mrp.py
index ae1df1eb946..840c33770a7 100644
--- a/addons/sale_mrp/sale_mrp.py
+++ b/addons/sale_mrp/sale_mrp.py
@@ -70,8 +70,8 @@ class mrp_production(osv.osv):
return res
_columns = {
- 'sale_name': fields.function(_ref_calc, method=True, multi='sale_name', type='char', string='Sales Name', help='Indicate the name of sales order.'),
- 'sale_ref': fields.function(_ref_calc, method=True, multi='sale_name', type='char', string='Sales Reference', help='Indicate the Customer Reference from sales order.'),
+ 'sale_name': fields.function(_ref_calc, multi='sale_name', type='char', string='Sales Name', help='Indicate the name of sales order.'),
+ 'sale_ref': fields.function(_ref_calc, multi='sale_name', type='char', string='Sales Reference', help='Indicate the Customer Reference from sales order.'),
}
mrp_production()
diff --git a/addons/sale_order_dates/i18n/zh_CN.po b/addons/sale_order_dates/i18n/zh_CN.po
new file mode 100644
index 00000000000..1f886800e9f
--- /dev/null
+++ b/addons/sale_order_dates/i18n/zh_CN.po
@@ -0,0 +1,70 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2011-06-28 05:03+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Chinese (Simplified) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
+"X-Generator: Launchpad (build 13168)\n"
+
+#. module: sale_order_dates
+#: sql_constraint:sale.order:0
+msgid "Order Reference must be unique !"
+msgstr "单号必须唯一!"
+
+#. module: sale_order_dates
+#: help:sale.order,requested_date:0
+msgid "Date on which customer has requested for sales."
+msgstr "客户申请销售订单的日期"
+
+#. module: sale_order_dates
+#: field:sale.order,commitment_date:0
+msgid "Commitment Date"
+msgstr ""
+
+#. module: sale_order_dates
+#: field:sale.order,effective_date:0
+msgid "Effective Date"
+msgstr "生效日期"
+
+#. module: sale_order_dates
+#: model:ir.module.module,shortdesc:sale_order_dates.module_meta_information
+msgid "Sales Order Dates"
+msgstr "销售订单日期"
+
+#. module: sale_order_dates
+#: help:sale.order,effective_date:0
+msgid "Date on which picking is created."
+msgstr "创建分拣单日期"
+
+#. module: sale_order_dates
+#: field:sale.order,requested_date:0
+msgid "Requested Date"
+msgstr "申请日期"
+
+#. module: sale_order_dates
+#: model:ir.model,name:sale_order_dates.model_sale_order
+msgid "Sales Order"
+msgstr "销售订单"
+
+#. module: sale_order_dates
+#: model:ir.module.module,description:sale_order_dates.module_meta_information
+msgid ""
+"\n"
+"Add commitment, requested and effective dates on the sales order.\n"
+msgstr ""
+
+#. module: sale_order_dates
+#: help:sale.order,commitment_date:0
+msgid "Date on which delivery of products is to be made."
+msgstr "发货单生成日期"
diff --git a/addons/sale_order_dates/sale_order_dates.py b/addons/sale_order_dates/sale_order_dates.py
index 60595903ab8..ceb6d48755c 100644
--- a/addons/sale_order_dates/sale_order_dates.py
+++ b/addons/sale_order_dates/sale_order_dates.py
@@ -54,9 +54,9 @@ class sale_order_dates(osv.osv):
return res
_columns = {
- 'commitment_date': fields.function(_get_commitment_date, method=True, store=True, type='date', string='Commitment Date', help="Date on which delivery of products is to be made."),
+ 'commitment_date': fields.function(_get_commitment_date, store=True, type='date', string='Commitment Date', help="Date on which delivery of products is to be made."),
'requested_date': fields.date('Requested Date', help="Date on which customer has requested for sales."),
- 'effective_date': fields.function(_get_effective_date, method=True, type='date', store=True, string='Effective Date',help="Date on which picking is created."),
+ 'effective_date': fields.function(_get_effective_date, type='date', store=True, string='Effective Date',help="Date on which picking is created."),
}
sale_order_dates()
diff --git a/addons/share/__init__.py b/addons/share/__init__.py
index 9c0c7bf7da2..e3c3acf1bc5 100644
--- a/addons/share/__init__.py
+++ b/addons/share/__init__.py
@@ -19,5 +19,6 @@
#
##############################################################################
+import ir_model
import res_users
import wizard
diff --git a/addons/share/__openerp__.py b/addons/share/__openerp__.py
index 085266b4dae..104b2561c97 100644
--- a/addons/share/__openerp__.py
+++ b/addons/share/__openerp__.py
@@ -22,7 +22,7 @@
{
"name" : "Sharing Tools",
- "version" : "1.3",
+ "version" : "1.5",
"depends" : ["base"],
"author" : "OpenERP SA",
"category": 'Tools',
diff --git a/addons/share/ir_model.py b/addons/share/ir_model.py
new file mode 100644
index 00000000000..437a0c51095
--- /dev/null
+++ b/addons/share/ir_model.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2011 OpenERP S.A. ().
+#
+# 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 .
+#
+##############################################################################
+from osv import fields, osv
+
+class ir_model_access(osv.osv):
+ _inherit = 'ir.model.access'
+
+ # overload group_names_with_access() to avoid returning sharing groups
+ # by filtering out groups with share=true.
+ def group_names_with_access(self, cr, model_name, access_mode):
+ """Returns the names of visible groups which have been granted ``access_mode`` on
+ the model ``model_name``.
+ :rtype: list
+ """
+ assert access_mode in ['read','write','create','unlink'], 'Invalid access mode: %s' % access_mode
+ cr.execute('''SELECT
+ g.name
+ FROM
+ ir_model_access a
+ JOIN ir_model m ON (a.model_id=m.id)
+ JOIN res_groups g ON (a.group_id=g.id)
+ WHERE
+ m.model=%s AND
+ (g.share IS NULL or g.share IS false) AND
+ a.perm_''' + access_mode, (model_name,))
+ return [x[0] for x in cr.fetchall()]
+
+ir_model_access()
\ No newline at end of file
diff --git a/addons/share/res_users_view.xml b/addons/share/res_users_view.xml
index 990bf29a84a..b70afda6152 100644
--- a/addons/share/res_users_view.xml
+++ b/addons/share/res_users_view.xml
@@ -10,16 +10,29 @@
+ domain="[('share','=',False)]" default="1"/>
+
Users
{'search_default_no_share': 1}
+
+ res.users.form
+ res.users
+ form
+
+
+
+ {'search_default_no_share':1}
+
+
+
+
res.groups.search.share
@@ -31,16 +44,27 @@
+ domain="[('share','=',False)]" default="1"/>
+
Groups
{'search_default_no_share': 1}
-
+
+ res.groups.form
+ res.groups
+ form
+
+
+
+ {'search_default_no_share':1}
+
+
+
\ No newline at end of file
diff --git a/addons/share/security/share_security.xml b/addons/share/security/share_security.xml
index ea27101fd53..a5405dbcb48 100644
--- a/addons/share/security/share_security.xml
+++ b/addons/share/security/share_security.xml
@@ -3,7 +3,8 @@
Sharing / User
+
+Members of this groups have access to the sharing wizard, which allows them to invite external users to view or edit some of their documents.
-
-
+
\ No newline at end of file
diff --git a/addons/share/web/controllers.py b/addons/share/web/controllers.py
index 4b723f225da..e682c8d9709 100644
--- a/addons/share/web/controllers.py
+++ b/addons/share/web/controllers.py
@@ -12,7 +12,7 @@ class ShareWizardController(openerp.controllers.SecuredController):
_cp_path = "/share"
@expose()
- def index(self, domain, search_domain, context, view_id, action_id=None):
+ def index(self, domain, context, view_id, search_domain='[]', action_id=None):
context = ast.literal_eval(context)
if not action_id:
@@ -34,11 +34,9 @@ class ShareWizardController(openerp.controllers.SecuredController):
scheme, netloc, '/openerp/login',
'db=%(dbname)s&user=%(login)s&password=%(password)s', ''))
- share_wiz_id = rpc.RPCProxy('ir.ui.menu').search(
- [('name','=', 'Share Wizard')])
context.update(
- active_ids=share_wiz_id,
- active_id=share_wiz_id[0],
+ #active_ids=share_wiz_id,
+ #active_id=share_wiz_id[0],
_terp_view_name='Share Wizard',
share_root_url=share_root_url)
Share = rpc.RPCProxy('share.wizard')
diff --git a/addons/share/web/editors.py b/addons/share/web/editors.py
index fd6199a4fd6..677de4a8317 100644
--- a/addons/share/web/editors.py
+++ b/addons/share/web/editors.py
@@ -1,41 +1,94 @@
# -*- coding: utf-8 -*-
import openobject.templating
-class ShareActionEditor(openobject.templating.TemplateEditor):
+class FormEditor(openobject.templating.TemplateEditor):
+ templates = ['/openerp/controllers/templates/form.mako']
+ MAIN_FORM_BODY = u'id="main_form_body"'
+
+ def insert_share_button(self, output):
+ # Insert the share button on the form title H1 line, at the very end,
+ # but only if the user is a member of the sharing group
+ share_opener_insertion = output.index('% endif', output.index(
+ '/view_diagram/process',
+ output.index(self.MAIN_FORM_BODY))) + len('% endif')
+ return output[:share_opener_insertion] + '''
+ <%
+ if 'has_share' not in cp.session:
+ cp.session['has_share'] = rpc.RPCProxy('share.wizard').has_share()
+ %>
+ % if cp.session['has_share'] and buttons.toolbar and not is_dashboard:
+
+
+
+
+ \n
+ % endif
+''' + output[share_opener_insertion:]
+
+ def edit(self, template, template_text):
+ return self.insert_share_button(
+ super(FormEditor, self).edit(template, template_text))
+
+
+class SidebarEditor(openobject.templating.TemplateEditor):
templates = ['/openerp/widgets/templates/sidebar.mako']
ADD_SHARE_SECTION = u'id="sidebar"'
def insert_share_link(self, output):
- # Insert the link on the line right after the link to open the
- # attachment form
+ # Insert the link on the line, right after the link to open the
+ # attachment form, but only if the user is a member of the sharing group
share_opener_insertion = output.index(
'\n',
output.index(self.ADD_SHARE_SECTION)) + 1
- return output[:share_opener_insertion] + \
- '''
-
-
- \n''' + \
- output[share_opener_insertion:]
+ return output[:share_opener_insertion] + '''
+ <%
+ if 'has_share' not in cp.session:
+ cp.session['has_share'] = rpc.RPCProxy('share.wizard').has_share()
+ %>
+ % if cp.session['has_share']:
+
+
+
+ \n
+ % endif
+''' + output[share_opener_insertion:]
def edit(self, template, template_text):
return self.insert_share_link(
- super(ShareActionEditor, self).edit(template, template_text))
+ super(SidebarEditor, self).edit(template, template_text))
diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py
index 6eda2360d2b..eec8b440dfa 100644
--- a/addons/share/wizard/share_wizard.py
+++ b/addons/share/wizard/share_wizard.py
@@ -21,97 +21,186 @@
import logging
import random
import time
+from urllib import quote_plus
import tools
from osv import osv, fields
-from osv.expression import expression
+from osv import expression
from tools.translate import _
from tools.safe_eval import safe_eval
FULL_ACCESS = ('perm_read', 'perm_write', 'perm_create', 'perm_unlink')
+READ_WRITE_ACCESS = ('perm_read', 'perm_write')
READ_ONLY_ACCESS = ('perm_read',)
+UID_ROOT = 1
+# Pseudo-domain to represent an empty filter, constructed using
+# osv.expression's DUMMY_LEAF
+DOMAIN_ALL = [(1, '=', 1)]
-RANDOM_PASS_CHARACTERS = [chr(x) for x in range(48, 58) + range(97, 123) + range(65, 91)]
-RANDOM_PASS_CHARACTERS.remove('l') #lowercase l, easily mistaken as one or capital i
-RANDOM_PASS_CHARACTERS.remove('I') #uppercase i, easily mistaken as one or lowercase L
-RANDOM_PASS_CHARACTERS.remove('O') #uppercase o, mistaken with zero
-RANDOM_PASS_CHARACTERS.remove('o') #lowercase o, mistaken with zero
-RANDOM_PASS_CHARACTERS.remove('0') #zero, mistaken with o-letter
-RANDOM_PASS_CHARACTERS.remove('1') #one, mistaken with lowercase-L or capital i
+# A good selection of easy to read password characters (e.g. no '0' vs 'O', etc.)
+RANDOM_PASS_CHARACTERS = 'aaaabcdeeeefghjkmnpqrstuvwxyzAAAABCDEEEEFGHJKLMNPQRSTUVWXYZ23456789'
def generate_random_pass():
- pass_chars = RANDOM_PASS_CHARACTERS[:]
- random.shuffle(pass_chars)
- return ''.join(pass_chars[0:10])
+ return ''.join(random.sample(RANDOM_PASS_CHARACTERS,10))
-class share_create(osv.osv_memory):
- __logger = logging.getLogger('share.wizard')
+# Utils for introspecting the ORM - could be moved to server someday
+class column_info(object):
+ """Struct containing details about an osv column, either one local to
+ its model, or one inherited via _inherits.
+
+ :attr name: name of the column
+ :attr column: column instance, subclass of osv.fields.column
+ :attr parent_model: if the column is inherited, name of the model
+ that contains it, None for local columns.
+ :attr parent_column: the name of the column containing the m2o
+ relationship to the parent model that contains
+ this column, None for local columns.
+ """
+ def __init__(self, name, column, parent_model=None, parent_column=None):
+ self.name = name
+ self.column = column
+ self.parent_model = parent_model
+ self.parent_column = parent_column
+
+def get_column_infos(osv_model):
+ """Returns a dict mapping all fields names (direct fields and
+ inherited field via _inherits) to a ``column_info`` struct
+ giving detailed columns """
+ result = {}
+ for k, (parent,m2o,col) in osv_model._inherit_fields.iteritems():
+ result[k] = column_info(k, col, parent, m2o)
+ for k, v in osv_model._columns.iteritems():
+ result[k] = column_info(k,v)
+ return result
+
+
+class share_wizard(osv.osv_memory):
+ _logger = logging.getLogger('share.wizard')
_name = 'share.wizard'
_description = 'Share Wizard'
+ def _assert(self, condition, error_message, context=None):
+ """Raise a user error with the given message if condition is not met.
+ The error_message should have been translated with _().
+ """
+ if not condition:
+ raise osv.except_osv(_('Sharing access could not be created'), error_message)
+
+ def has_group(self, cr, uid, module, group_xml_id, context=None):
+ """Returns True if current user is a member of the group identified by the module, group_xml_id pair."""
+ # if the group was deleted or does not exist, we say NO (better safe than sorry)
+ try:
+ model, group_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module, group_xml_id)
+ except ValueError:
+ return False
+ return group_id in self.pool.get('res.users').read(cr, uid, uid, ['groups_id'], context=context)['groups_id']
+
+ def has_share(self, cr, uid, context=None):
+ return self.has_group(cr, uid, module='share', group_xml_id='group_share_user', context=context)
+
+ def has_email(self, cr, uid, context=None):
+ return bool(self.pool.get('res.users').browse(cr, uid, uid, context=context).user_email)
+
+ def view_init(self, cr, uid, fields_list, context=None):
+ if not self.has_email(cr, uid, context=context):
+ raise osv.except_osv(_('No e-mail address configured'),
+ _('You must configure your e-mail address in the user preferences before using the Share button.'))
+ return super(share_wizard, self).view_init(cr, uid, fields_list, context=context)
+
+ def _user_type_selection(self, cr, uid, context=None):
+ """Selection values may be easily overridden/extended via inheritance"""
+ return [('emails','List of emails')]
+
+ """Override of create() to auto-compute the action name"""
+ def create(self, cr, uid, values, context=None):
+ if 'action_id' in values and not 'name' in values:
+ action = self.pool.get('ir.actions.actions').browse(cr, uid, values['action_id'], context=context)
+ values['name'] = action.name
+ return super(share_wizard,self).create(cr, uid, values, context=context)
+
_columns = {
'action_id': fields.many2one('ir.actions.act_window', 'Action to share', required=True,
help="The action that opens the screen containing the data you wish to share."),
'domain': fields.char('Domain', size=256, help="Optional domain for further data filtering"),
- 'user_type': fields.selection([('existing','Existing external users'),('new','New users (emails required)')],'Users to share with',
- help="Select the type of user(s) you would like to share data with."),
- 'user_ids': fields.many2many('res.users', 'share_wizard_res_user_rel', 'share_id', 'user_id', 'Existing users', domain=[('share', '=', True)]),
- 'new_users': fields.text("New users"),
- 'access_mode': fields.selection([('readwrite','Read & Write'),('readonly','Read-only')],'Access Mode'),
+ 'user_type': fields.selection(_user_type_selection,'Users to share with',
+ help="Select the type of user(s) you would like to share data with."),
+ 'new_users': fields.text("Emails"),
+ 'access_mode': fields.selection([('readonly','Can view'),('readwrite','Can edit')],'Access Mode', required=True,
+ help="Access rights to be granted on the shared documents."),
'result_line_ids': fields.one2many('share.wizard.result.line', 'share_wizard_id', 'Summary', readonly=True),
- 'share_root_url': fields.char('Generic Share Access URL', size=512, readonly=True, tooltip='Main access page for users that are granted shared access')
+ 'share_root_url': fields.char('Share Access URL', size=512, readonly=True, tooltip='Main access page for users that are granted shared access'),
+ 'name': fields.char('Share Title', size=64, required=True, help="Title for the share (displayed to users as menu and shortcut name)"),
+ 'message': fields.text("Personal Message", help="An optional personal message, to be included in the e-mail notification."),
}
_defaults = {
- 'user_type' : lambda self, cr, uid, *a: 'existing' if self.pool.get('res.users').search(cr, uid, [('share', '=', True)]) else 'new',
+ 'user_type' : 'new',
'domain': lambda self, cr, uid, context, *a: context.get('domain', '[]'),
'share_root_url': lambda self, cr, uid, context, *a: context.get('share_root_url') or _('Please specify "share_root_url" in context'),
'action_id': lambda self, cr, uid, context, *a: context.get('action_id'),
- 'access_mode': 'readonly'
+ 'access_mode': 'readonly',
}
def go_step_1(self, cr, uid, ids, context=None):
dummy, step1_form_view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'share', 'share_step1_form')
return {
- 'name': _('Sharing Wizard - Step 1'),
+ 'name': _('Grant instant access to your documents'),
'view_type': 'form',
'view_mode': 'form',
'res_model': 'share.wizard',
'view_id': False,
'res_id': ids[0],
- 'views': [(step1_form_view_id, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
+ 'views': [(step1_form_view_id, 'form')],
'type': 'ir.actions.act_window',
'target': 'new'
}
def _create_share_group(self, cr, uid, wizard_data, context=None):
group_obj = self.pool.get('res.groups')
- share_group_name = '%s: %s (%d-%s)' %('Sharing', wizard_data.action_id.res_model, uid, time.time())
+ share_group_name = '%s: %s (%d-%s)' %('Shared', wizard_data.name, uid, time.time())
# create share group without putting admin in it
- return group_obj.create(cr, 1, {'name': share_group_name, 'share': True}, {'noadmin': True})
+ return group_obj.create(cr, UID_ROOT, {'name': share_group_name, 'share': True}, {'noadmin': True})
def _create_new_share_users(self, cr, uid, wizard_data, group_id, context=None):
+ """Create one new res.users record for each email address provided in
+ wizard_data.new_users, ignoring already existing users.
+ Populates wizard_data.result_line_ids with one new line for
+ each user (existing or not). New users will also have a value
+ for the password field, so they can receive it by email.
+ Returns the ids of the created users, and the ids of the
+ ignored, existing ones."""
user_obj = self.pool.get('res.users')
- current_user = user_obj.browse(cr, uid, uid, context=context)
- user_ids = []
- if wizard_data.user_type == 'new':
- for new_user in wizard_data.new_users.split('\n'):
- # attempt to show more user-friendly msg than default constraint error
- existing = user_obj.search(cr, 1, [('login', '=', new_user)])
- if existing:
- raise osv.except_osv(_('User already exists'),
- _('This username (%s) already exists, perhaps data has already been shared with this person.\nYou may want to try selecting existing shared users instead.') % new_user)
- user_id = user_obj.create(cr, 1, {
- 'login': new_user,
- 'password': generate_random_pass(),
- 'name': new_user,
- 'user_email': new_user,
- 'groups_id': [(6,0,[group_id])],
- 'share': True,
- 'company_id': current_user.company_id and current_user.company_id.id
- })
- user_ids.append(user_id)
- return user_ids
+ current_user = user_obj.browse(cr, UID_ROOT, uid, context=context)
+ created_ids = []
+ existing_ids = []
+ for new_user in (wizard_data.new_users or '').split('\n'):
+ # Ignore blank lines
+ new_user = new_user.strip()
+ if not new_user: continue
+ # Ignore the user if it already exists.
+ existing = user_obj.search(cr, UID_ROOT, [('login', '=', new_user)])
+ existing_ids.extend(existing)
+ if existing:
+ new_line = { 'user_id': existing[0],
+ 'newly_created': False}
+ wizard_data.write({'result_line_ids': [(0,0,new_line)]})
+ continue
+ new_pass = generate_random_pass()
+ user_id = user_obj.create(cr, UID_ROOT, {
+ 'login': new_user,
+ 'password': new_pass,
+ 'name': new_user,
+ 'user_email': new_user,
+ 'groups_id': [(6,0,[group_id])],
+ 'share': True,
+ 'company_id': current_user.company_id.id
+ })
+ new_line = { 'user_id': user_id,
+ 'password': new_pass,
+ 'newly_created': True}
+ wizard_data.write({'result_line_ids': [(0,0,new_line)]})
+ created_ids.append(user_id)
+ return created_ids, existing_ids
def _create_shortcut(self, cr, uid, values, context=None):
if context is None:
@@ -124,81 +213,165 @@ class share_create(osv.osv_memory):
dataobj = self.pool.get('ir.model.data')
menu_id = dataobj._get_id(cr, uid, 'base', 'menu_administration_shortcut', new_context)
shortcut_menu_id = int(dataobj.read(cr, uid, menu_id, ['res_id'], new_context)['res_id'])
- action_id = self.pool.get('ir.actions.act_window').create(cr, 1, values, new_context)
+ action_id = self.pool.get('ir.actions.act_window').create(cr, UID_ROOT, values, new_context)
menu_data = {'name': values['name'],
'sequence': 10,
'action': 'ir.actions.act_window,'+str(action_id),
'parent_id': shortcut_menu_id,
'icon': 'STOCK_JUSTIFY_FILL'}
menu_obj = self.pool.get('ir.ui.menu')
- menu_id = menu_obj.create(cr, 1, menu_data)
- sc_data= {'name': values['name'], 'sequence': 1,'res_id': menu_id }
- sc_menu_id = self.pool.get('ir.ui.view_sc').create(cr, uid, sc_data, new_context)
+ menu_id = menu_obj.create(cr, UID_ROOT, menu_data)
+ sc_data = {'name': values['name'], 'sequence': UID_ROOT,'res_id': menu_id }
+ self.pool.get('ir.ui.view_sc').create(cr, uid, sc_data, new_context)
# update menu cache
- user_groups = set(self.pool.get('res.users').read(cr, 1, uid, ['groups_id'])['groups_id'])
+ user_groups = set(self.pool.get('res.users').read(cr, UID_ROOT, uid, ['groups_id'])['groups_id'])
key = (cr.dbname, shortcut_menu_id, tuple(user_groups))
menu_obj._cache[key] = True
return action_id
+ def _cleanup_action_context(self, context_str, user_id):
+ """Returns a dict representing the context_str evaluated (safe_eval) as
+ a dict where items that are not useful for shared actions
+ have been removed. If the evaluation of context_str as a
+ dict fails, context_str is returned unaltered.
- def _setup_action_and_shortcut(self, cr, uid, wizard_data, user_ids, new_users, context=None):
- user_obj = self.pool.get('res.users')
- menu_action_id = user_obj._get_menu(cr, uid, context=context)
- values = {
- 'name': (_('%s (Shared)') % wizard_data.action_id.name)[:64],
- 'domain': wizard_data.domain,
- 'context': wizard_data.action_id.context,
- 'res_model': wizard_data.action_id.res_model,
- 'view_mode': wizard_data.action_id.view_mode,
- 'view_type': wizard_data.action_id.view_type,
- 'search_view_id': wizard_data.action_id.search_view_id.id,
+ :param user_id: the integer uid to be passed as 'uid' in the
+ evaluation context
+ """
+ result = False
+ if context_str:
+ try:
+ context = safe_eval(context_str, tools.UnquoteEvalContext(), nocopy=True)
+ result = dict(context)
+ for key in context:
+ # Remove all context keys that seem to toggle default
+ # filters based on the current user, as it makes no sense
+ # for shared users, who would not see any data by default.
+ if key and key.startswith('search_default_') and 'user_id' in key:
+ result.pop(key)
+ except Exception:
+ # Note: must catch all exceptions, as UnquoteEvalContext may cause many
+ # different exceptions, as it shadows builtins.
+ self._logger.debug("Failed to cleanup action context as it does not parse server-side", exc_info=True)
+ result = context_str
+ return result
+
+ def _shared_action_def(self, cr, uid, wizard_data, context=None):
+ copied_action = wizard_data.action_id
+ action_def = {
+ 'name': wizard_data.name,
+ 'domain': copied_action.domain,
+ 'context': self._cleanup_action_context(wizard_data.action_id.context, uid),
+ 'res_model': copied_action.res_model,
+ 'view_mode': copied_action.view_mode,
+ 'view_type': copied_action.view_type,
+ 'search_view_id': copied_action.search_view_id.id,
+ 'view_id': copied_action.view_id.id,
}
+ if copied_action.view_ids:
+ action_def['view_ids'] = [(0,0,{'sequence': x.sequence,
+ 'view_mode': x.view_mode,
+ 'view_id': x.view_id.id })
+ for x in copied_action.view_ids]
+ return action_def
+
+ def _setup_action_and_shortcut(self, cr, uid, wizard_data, user_ids, make_home, context=None):
+ """Create a shortcut to reach the shared data, as well as the corresponding action, for
+ each user in ``user_ids``, and assign it as their home action if ``make_home`` is True.
+ Meant to be overridden for special cases.
+ """
+ values = self._shared_action_def(cr, uid, wizard_data, context=None)
+ user_obj = self.pool.get('res.users')
for user_id in user_ids:
action_id = self._create_shortcut(cr, user_id, values)
- if new_users:
- user_obj.write(cr, 1, [user_id], {'action_id': action_id})
- else:
- user_obj.write(cr, 1, [user_id], {'action_id': menu_action_id})
+ if make_home:
+ # We do this only for new share users, as existing ones already have their initial home
+ # action. Resetting to the default menu does not work well as the menu is rather empty
+ # and does not contain the shortcuts in most cases.
+ user_obj.write(cr, UID_ROOT, [user_id], {'action_id': action_id})
def _get_recursive_relations(self, cr, uid, model, ttypes, relation_fields=None, suffix=None, context=None):
"""Returns list of tuples representing recursive relationships of type ``ttypes`` starting from
model with ID ``model_id``.
- @param model: browsable model to start loading relationships from
- @param ttypes: list of relationship types to follow (e.g: ['one2many','many2many'])
- @param relation_fields: list of previously followed relationship tuples - to avoid duplicates
+ :param model: browsable model to start loading relationships from
+ :param ttypes: list of relationship types to follow (e.g: ['one2many','many2many'])
+ :param relation_fields: list of previously followed relationship tuples - to avoid duplicates
during recursion
- @param suffix: optional suffix to append to the field path to reach the main object
+ :param suffix: optional suffix to append to the field path to reach the main object
"""
-
if relation_fields is None:
relation_fields = []
local_rel_fields = []
models = [x[1].model for x in relation_fields]
model_obj = self.pool.get('ir.model')
model_osv = self.pool.get(model.model)
- for field in model_osv._columns.values() + [x[2] for x in model_osv._inherit_fields.itervalues()]:
- if field._type in ttypes and field._obj not in models:
- relation_model_id = model_obj.search(cr, uid, [('model','=',field._obj)])[0]
- if field._type == 'one2many':
- relation_field = '%s.%s'%(field._fields_id, suffix) if suffix else field._fields_id
- else:
- relation_field = None # TODO: add some filtering for m2m and m2o - not always possible...
- model_browse = model_obj.browse(cr, uid, relation_model_id, context=context)
- local_rel_fields.append((relation_field, model_browse))
- if relation_model_id != model.id and field._type in ['one2many', 'many2many']:
- local_rel_fields += self._get_recursive_relations(cr, uid, model_browse,
- [field._type], relation_fields + local_rel_fields, suffix=relation_field, context=context)
+ for colinfo in get_column_infos(model_osv).itervalues():
+ coldef = colinfo.column
+ coltype = coldef._type
+ relation_field = None
+ if coltype in ttypes and colinfo.column._obj not in models:
+ relation_model_id = model_obj.search(cr, UID_ROOT, [('model','=',coldef._obj)])[0]
+ relation_model_browse = model_obj.browse(cr, UID_ROOT, relation_model_id, context=context)
+ relation_osv = self.pool.get(coldef._obj)
+ if coltype == 'one2many':
+ # don't record reverse path if it's not a real m2o (that happens, but rarely)
+ dest_model_ci = get_column_infos(relation_osv)
+ reverse_rel = coldef._fields_id
+ if reverse_rel in dest_model_ci and dest_model_ci[reverse_rel].column._type == 'many2one':
+ relation_field = ('%s.%s'%(reverse_rel, suffix)) if suffix else reverse_rel
+ local_rel_fields.append((relation_field, relation_model_browse))
+ for parent in relation_osv._inherits:
+ if parent not in models:
+ parent_model = self.pool.get(parent)
+ parent_colinfos = get_column_infos(parent_model)
+ parent_model_browse = model_obj.browse(cr, UID_ROOT,
+ model_obj.search(cr, UID_ROOT, [('model','=',parent)]))[0]
+ if relation_field and coldef._fields_id in parent_colinfos:
+ # inverse relationship is available in the parent
+ local_rel_fields.append((relation_field, parent_model_browse))
+ else:
+ # TODO: can we setup a proper rule to restrict inherited models
+ # in case the parent does not contain the reverse m2o?
+ local_rel_fields.append((None, parent_model_browse))
+ if relation_model_id != model.id and coltype in ['one2many', 'many2many']:
+ local_rel_fields += self._get_recursive_relations(cr, uid, relation_model_browse,
+ [coltype], relation_fields + local_rel_fields, suffix=relation_field, context=context)
return local_rel_fields
def _get_relationship_classes(self, cr, uid, model, context=None):
+ """Computes the *relationship classes* reachable from the given
+ model. The 4 relationship classes are:
+ - [obj0]: the given model itself (and its parents via _inherits, if any)
+ - [obj1]: obj0 and all other models recursively accessible from
+ obj0 via one2many relationships
+ - [obj2]: obj0 and all other models recursively accessible from
+ obj0 via one2many and many2many relationships
+ - [obj3]: all models recursively accessible from obj1 via many2one
+ relationships
+
+ Each class is returned as a list of pairs [(field,model_browse)], where
+ ``model`` is the browse_record of a reachable ir.model, and ``field`` is
+ the dot-notation reverse relationship path coming from that model to obj0,
+ or None if there is no reverse path.
+
+ :return: ([obj0], [obj1], [obj2], [obj3])
+ """
+ # obj0 class and its parents
obj0 = [(None, model)]
- obj1 = self._get_recursive_relations(cr, uid, model, ['one2many'], context=context)
- obj2 = self._get_recursive_relations(cr, uid, model, ['one2many', 'many2many'], context=context)
- obj3 = self._get_recursive_relations(cr, uid, model, ['many2one'], context=context)
+ model_obj = self.pool.get(model.model)
+ ir_model_obj = self.pool.get('ir.model')
+ for parent in model_obj._inherits:
+ parent_model_browse = ir_model_obj.browse(cr, UID_ROOT,
+ ir_model_obj.search(cr, UID_ROOT, [('model','=',parent)]))[0]
+ obj0 += [(None, parent_model_browse)]
+
+ obj1 = self._get_recursive_relations(cr, uid, model, ['one2many'], relation_fields=obj0, context=context)
+ obj2 = self._get_recursive_relations(cr, uid, model, ['one2many', 'many2many'], relation_fields=obj0, context=context)
+ obj3 = self._get_recursive_relations(cr, uid, model, ['many2one'], relation_fields=obj0, context=context)
for dummy, model in obj1:
- obj3 += self._get_recursive_relations(cr, uid, model, ['many2one'], context=context)
+ obj3 += self._get_recursive_relations(cr, uid, model, ['many2one'], relation_fields=obj0, context=context)
return obj0, obj1, obj2, obj3
def _get_access_map_for_groups_and_models(self, cr, uid, group_ids, model_ids, context=None):
@@ -215,23 +388,22 @@ class share_create(osv.osv_memory):
access_line.add(perm)
return user_access_matrix
- def _add_access_rights_for_share_group(self, cr, uid, group_id, mode,
- fields_relations, context=None):
+ def _add_access_rights_for_share_group(self, cr, uid, group_id, mode, fields_relations, context=None):
"""Adds access rights to group_id on object models referenced in ``fields_relations``,
intersecting with access rights of current user to avoid granting too much rights
"""
model_access_obj = self.pool.get('ir.model.access')
user_obj = self.pool.get('res.users')
- target_model_ids = [x[1].id for x in fields_relations]
- perms_to_add = (mode == 'readonly') and READ_ONLY_ACCESS or FULL_ACCESS
+ target_model_ids = [x[1].id for x in fields_relations]
+ perms_to_add = (mode == 'readonly') and READ_ONLY_ACCESS or READ_WRITE_ACCESS
current_user = user_obj.browse(cr, uid, uid, context=context)
current_user_access_map = self._get_access_map_for_groups_and_models(cr, uid,
[x.id for x in current_user.groups_id], target_model_ids, context=context)
group_access_map = self._get_access_map_for_groups_and_models(cr, uid,
[group_id], target_model_ids, context=context)
- self.__logger.debug("Current user access matrix: %r", current_user_access_map)
- self.__logger.debug("New group current access matrix: %r", group_access_map)
+ self._logger.debug("Current user access matrix: %r", current_user_access_map)
+ self._logger.debug("New group current access matrix: %r", group_access_map)
# Create required rights if allowed by current user rights and not
# already granted
@@ -251,126 +423,193 @@ class share_create(osv.osv_memory):
group_access_map.setdefault(model.model, set()).add(perm)
need_creation = True
if need_creation:
- model_access_obj.create(cr, 1, values)
- self.__logger.debug("Creating access right for model %s with values: %r", model.model, values)
+ model_access_obj.create(cr, UID_ROOT, values)
+ self._logger.debug("Creating access right for model %s with values: %r", model.model, values)
- def _link_or_copy_current_user_rules(self, cr, uid, group_id, fields_relations, context=None):
- user_obj = self.pool.get('res.users')
+ def _link_or_copy_current_user_rules(self, cr, current_user, group_id, fields_relations, context=None):
rule_obj = self.pool.get('ir.rule')
- current_user = user_obj.browse(cr, uid, uid, context=context)
- completed_models = set()
+ rules_done = set()
for group in current_user.groups_id:
for dummy, model in fields_relations:
- if model.id in completed_models:
- continue
- completed_models.add(model.id)
for rule in group.rule_groups:
- if rule.model_id == model.id:
+ if rule.id in rules_done:
+ continue
+ rules_done.add(rule.id)
+ if rule.model_id.id == model.id:
if 'user.' in rule.domain_force:
# Above pattern means there is likely a condition
# specific to current user, so we must copy the rule using
# the evaluated version of the domain.
# And it's better to copy one time too much than too few
- rule_obj.copy(cr, 1, rule.id, default={
- 'name': '%s (%s)' %(rule.name, _('(Copy for sharing)')),
+ rule_obj.copy(cr, UID_ROOT, rule.id, default={
+ 'name': '%s %s' %(rule.name, _('(Copy for sharing)')),
'groups': [(6,0,[group_id])],
'domain_force': rule.domain, # evaluated version!
})
- self.__logger.debug("Copying rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force)
+ self._logger.debug("Copying rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force)
else:
# otherwise we can simply link the rule to keep it dynamic
rule_obj.write(cr, 1, [rule.id], {
'groups': [(4,group_id)]
})
- self.__logger.debug("Linking rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force)
+ self._logger.debug("Linking rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force)
- def _create_indirect_sharing_rules(self, cr, uid, wizard_data, group_id, fields_relations, context=None):
- user_obj = self.pool.get('res.users')
- current_user = user_obj.browse(cr, uid, uid, context=context)
+ def _check_personal_rule_or_duplicate(self, cr, group_id, rule, context=None):
+ """Verifies that the given rule only belongs to the given group_id, otherwise
+ duplicate it for the current group, and unlink the previous one.
+ The duplicated rule has the original domain copied verbatim, without
+ any evaluation.
+ Returns the final rule to use (browse_record), either the original one if it
+ only belongs to this group, or the copy."""
+ if len(rule.groups) == 1:
+ return rule
+ # duplicate it first:
rule_obj = self.pool.get('ir.rule')
+ new_id = rule_obj.copy(cr, UID_ROOT, rule.id,
+ default={
+ 'name': '%s %s' %(rule.name, _('(Duplicated for modified sharing permissions)')),
+ 'groups': [(6,0,[group_id])],
+ 'domain_force': rule.domain_force, # non evaluated!
+ })
+ self._logger.debug("Duplicating rule %s (%s) (domain: %s) for modified access ", rule.name, rule.id, rule.domain_force)
+ # then disconnect from group_id:
+ rule.write({'groups':[(3,group_id)]}) # disconnects, does not delete!
+ return rule_obj.browse(cr, UID_ROOT, new_id, context=context)
+
+ def _create_or_combine_sharing_rule(self, cr, current_user, wizard_data, group_id, model_id, domain, restrict=False, rule_name=None, context=None):
+ """Add a new ir.rule entry for model_id and domain on the target group_id.
+ If ``restrict`` is True, instead of adding a rule, the domain is
+ combined with AND operator with all existing rules in the group, to implement
+ an additional restriction (as of 6.1, multiple rules in the same group are
+ OR'ed by default, so a restriction must alter all existing rules)
+
+ This is necessary because the personal rules of the user that is sharing
+ are first copied to the new share group. Afterwards the filters used for
+ sharing are applied as an additional layer of rules, which are likely to
+ apply to the same model. The default rule algorithm would OR them (as of 6.1),
+ which would result in a combined set of permission that could be larger
+ than those of the user that is sharing! Hence we must forcefully AND the
+ rules at this stage.
+ One possibly undesirable effect can appear when sharing with a
+ pre-existing group, in which case altering pre-existing rules would not
+ be desired. This is addressed in the portal module.
+ """
+ if rule_name is None:
+ rule_name = _('Sharing filter created by user %s (%s) for group %s') % \
+ (current_user.name, current_user.login, group_id)
+ rule_obj = self.pool.get('ir.rule')
+ rule_ids = rule_obj.search(cr, UID_ROOT, [('groups', 'in', group_id), ('model_id', '=', model_id)])
+ if rule_ids:
+ for rule in rule_obj.browse(cr, UID_ROOT, rule_ids, context=context):
+ if rule.domain_force == domain:
+ # don't create it twice!
+ if restrict:
+ continue
+ else:
+ self._logger.debug("Ignoring sharing rule on model %s with domain: %s the same rule exists already", model_id, domain)
+ return
+ if restrict:
+ # restricting existing rules is done by adding the clause
+ # with an AND, but we can't alter the rule if it belongs to
+ # other groups, so we duplicate if needed
+ rule = self._check_personal_rule_or_duplicate(cr, group_id, rule, context=context)
+ eval_ctx = rule_obj._eval_context_for_combinations()
+ org_domain = expression.normalize(eval(rule.domain_force, eval_ctx))
+ new_clause = expression.normalize(eval(domain, eval_ctx))
+ combined_domain = expression.AND([new_clause, org_domain])
+ rule.write({'domain_force': combined_domain, 'name': rule.name + _('(Modified)')})
+ self._logger.debug("Combining sharing rule %s on model %s with domain: %s", rule.id, model_id, domain)
+ if not restrict:
+ # Adding the new rule in the group is ok for normal cases, because rules
+ # in the same group and for the same model will be combined with OR
+ # (as of v6.1), so the desired effect is achieved.
+ rule_obj.create(cr, UID_ROOT, {
+ 'name': rule_name,
+ 'model_id': model_id,
+ 'domain_force': domain,
+ 'groups': [(4,group_id)]
+ })
+ self._logger.debug("Created sharing rule on model %s with domain: %s", model_id, domain)
+
+ def _create_indirect_sharing_rules(self, cr, current_user, wizard_data, group_id, fields_relations, context=None):
+ rule_name = _('Indirect sharing filter created by user %s (%s) for group %s') % \
+ (current_user.name, current_user.login, group_id)
try:
domain = safe_eval(wizard_data.domain)
if domain:
- domain_expr = expression(domain)
+ domain_expr = expression.expression(domain)
for rel_field, model in fields_relations:
related_domain = []
+ if not rel_field: continue
for element in domain:
if domain_expr._is_leaf(element):
- left, operator, right = element
+ left, operator, right = element
left = '%s.%s'%(rel_field, left)
element = left, operator, right
related_domain.append(element)
- rule_obj.create(cr, 1, {
- 'name': _('Indirect sharing filter created by user %s (%s) for group %s') % \
- (current_user.name, current_user.login, group_id),
- 'model_id': model.id,
- 'domain_force': str(related_domain),
- 'groups': [(4,group_id)]
- })
- self.__logger.debug("Created indirect rule on model %s with domain: %s", model.model, repr(related_domain))
+ self._create_or_combine_sharing_rule(cr, current_user, wizard_data,
+ group_id, model_id=model.id, domain=str(related_domain),
+ rule_name=rule_name, restrict=True, context=context)
except Exception:
- self.__logger.exception('Failed to create share access')
- raise osv.except_osv(_('Sharing access could not be setup'),
+ self._logger.exception('Failed to create share access')
+ raise osv.except_osv(_('Sharing access could not be created'),
_('Sorry, the current screen and filter you are trying to share are not supported at the moment.\nYou may want to try a simpler filter.'))
- def _create_result_lines(self, cr, uid, wizard_data, context=None):
- user_obj = self.pool.get('res.users')
- result_obj = self.pool.get('share.wizard.result.line')
+ def _finish_result_lines(self, cr, uid, wizard_data, share_group_id, context=None):
+ """Perform finalization of the share, and populate the summary"""
share_root_url = wizard_data.share_root_url
- format_url = '%(login)s' in share_root_url\
- and '%(password)s' in share_root_url\
- and '%(dbname)s' in share_root_url
- existing_passwd_str = _('*usual password*')
- if wizard_data.user_type == 'new':
- for email in wizard_data.new_users.split('\n'):
- user_id = user_obj.search(cr, 1, [('login', '=', email)], context=context)
- password = user_obj.read(cr, 1, user_id[0], ['password'])['password']
- share_url = share_root_url % \
- {'login': email,
- 'password': password,
- 'dbname': cr.dbname} if format_url else share_root_url
- result_obj.create(cr, uid, {
- 'share_wizard_id': wizard_data.id,
- 'login': email,
- 'password': password,
- 'share_url': share_url,
- }, context=context)
- else:
- # existing users
- for user in wizard_data.user_ids:
- share_url = share_root_url % \
- {'login': user.login,
- 'password': '',
- 'dbname': cr.dbname} if format_url else share_root_url
- result_obj.create(cr, uid, {
- 'share_wizard_id': wizard_data.id,
- 'login': user.login,
- 'password': existing_passwd_str,
- 'share_url': share_url,
- 'newly_created': False,
- }, context=context)
+ format_url = '%(dbname)s' in share_root_url
+ for result in wizard_data.result_line_ids:
+ # share_root_url may contain placeholders for dbname, login and password
+ share_url = (share_root_url % \
+ {'login': quote_plus(result.user_id.login),
+ 'password': '', # kept empty for security reasons
+ 'dbname': quote_plus(cr.dbname)}) \
+ if format_url else share_root_url
+ result.write({'share_url': share_url}, context=context)
+
+ def _check_preconditions(self, cr, uid, wizard_data, context=None):
+ self._assert(wizard_data.action_id and wizard_data.access_mode,
+ _('Action and Access Mode are required to create a shared access'),
+ context=context)
+ self._assert(self.has_share(cr, uid, context=context),
+ _('You must be a member of the Share/User group to use the share wizard'),
+ context=context)
+ if wizard_data.user_type == 'emails':
+ self._assert(wizard_data.new_users,
+ _('Please indicate the emails of the persons to share with, one per line'),
+ context=context)
+
+ def _create_share_users_group(self, cr, uid, wizard_data, context=None):
+ """Creates the appropriate share group and share users, and populates
+ result_line_ids of wizard_data with one line for each user.
+
+ :return: the new group id (to which the shared access should be granted)
+ """
+ group_id = self._create_share_group(cr, uid, wizard_data, context=context)
+ # First create any missing user, based on the email addresses provided
+ new_ids, existing_ids = self._create_new_share_users(cr, uid, wizard_data, group_id, context=context)
+ # Finally, setup the new action and shortcut for the users.
+ if existing_ids:
+ # existing users still need to join the new group
+ self.pool.get('res.users').write(cr, UID_ROOT, existing_ids, {
+ 'groups_id': [(4,group_id)],
+ })
+ # existing user don't need their home action replaced, only a new shortcut
+ self._setup_action_and_shortcut(cr, uid, wizard_data, existing_ids, make_home=False, context=context)
+ if new_ids:
+ # new users need a new shortcut AND a home action
+ self._setup_action_and_shortcut(cr, uid, wizard_data, new_ids, make_home=True, context=context)
+ return group_id
def go_step_2(self, cr, uid, ids, context=None):
- wizard_data = self.browse(cr, uid, ids and ids[0], context=context)
- assert wizard_data.action_id and wizard_data.access_mode and \
- ((wizard_data.user_type == 'new' and wizard_data.new_users) or \
- (wizard_data.user_type == 'existing' and wizard_data.user_ids))
+ wizard_data = self.browse(cr, uid, ids[0], context=context)
+ self._check_preconditions(cr, uid, wizard_data, context=context)
# Create shared group and users
- group_id = self._create_share_group(cr, uid, wizard_data, context=context)
- user_obj = self.pool.get('res.users')
- current_user = user_obj.browse(cr, uid, uid, context=context)
- if wizard_data.user_type == 'new':
- user_ids = self._create_new_share_users(cr, uid, wizard_data, group_id, context=context)
- else:
- user_ids = [x.id for x in wizard_data.user_ids]
- # reset home action to regular menu as user needs access to multiple items
- user_obj.write(cr, 1, user_ids, {
- 'groups_id': [(4,group_id)],
- })
- self._setup_action_and_shortcut(cr, uid, wizard_data, user_ids,
- (wizard_data.user_type == 'new'), context=context)
+ group_id = self._create_share_users_group(cr, uid, wizard_data, context=context)
+ current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
model_obj = self.pool.get('ir.model')
model_id = model_obj.search(cr, uid, [('model','=', wizard_data.action_id.res_model)])[0]
@@ -379,59 +618,68 @@ class share_create(osv.osv_memory):
# ACCESS RIGHTS
# We have several classes of objects that should receive different access rights:
# Let:
- # - [obj0] be the target model itself
+ # - [obj0] be the target model itself (and its parents via _inherits, if any)
# - [obj1] be the target model and all other models recursively accessible from
# obj0 via one2many relationships
# - [obj2] be the target model and all other models recursively accessible from
# obj0 via one2many and many2many relationships
# - [obj3] be all models recursively accessible from obj1 via many2one relationships
+ # (currently not used)
obj0, obj1, obj2, obj3 = self._get_relationship_classes(cr, uid, model, context=context)
mode = wizard_data.access_mode
- # Add access to [obj0] and [obj1] according to chosen mode
+ # Add access to [obj0] and [obj1] according to chosen mode
self._add_access_rights_for_share_group(cr, uid, group_id, mode, obj0, context=context)
self._add_access_rights_for_share_group(cr, uid, group_id, mode, obj1, context=context)
- # Add read-only access (always) to [obj2] and [obj3]
+ # Add read-only access (always) to [obj2]
self._add_access_rights_for_share_group(cr, uid, group_id, 'readonly', obj2, context=context)
- self._add_access_rights_for_share_group(cr, uid, group_id, 'readonly', obj3, context=context)
-
# IR.RULES
- # A. On [obj0]: 1 rule with domain of shared action
- # B. For each model in [obj1]: 1 rule in the form:
+ # A. On [obj0], [obj1], [obj2]: add all rules from all groups of
+ # the user that is sharing
+ # Warning: rules must be copied instead of linked if they contain a reference
+ # to uid or if the rule is shared with other groups (and it must be replaced correctly)
+ # B. On [obj0]: 1 rule with domain of shared action
+ # C. For each model in [obj1]: 1 rule in the form:
# many2one_rel.domain_of_obj0
# where many2one_rel is the many2one used in the definition of the
# one2many, and domain_of_obj0 is the sharing domain
- # For example if [obj0] is project.project with a domain of
+ # For example if [obj0] is project.project with a domain of
# ['id', 'in', [1,2]]
- # then we will have project.task in [obj1] and we need to create this
+ # then we will have project.task in [obj1] and we need to create this
# ir.rule on project.task:
# ['project_id.id', 'in', [1,2]]
- # C. And on [obj0], [obj1], [obj2], [obj3]: add all rules from all groups of
- # the user that is sharing
- # (Warning: rules must be copied instead of linked if they contain a reference
- # to uid, and it must be replaced correctly)
- rule_obj = self.pool.get('ir.rule')
+
# A.
- rule_obj.create(cr, 1, {
- 'name': _('Sharing filter created by user %s (%s) for group %s') % \
- (current_user.name, current_user.login, group_id),
- 'model_id': model.id,
- 'domain_force': wizard_data.domain,
- 'groups': [(4,group_id)]
- })
+ all_relations = obj0 + obj1 + obj2
+ self._link_or_copy_current_user_rules(cr, current_user, group_id, all_relations, context=context)
# B.
- self._create_indirect_sharing_rules(cr, uid, wizard_data, group_id, obj1, context=context)
+ main_domain = wizard_data.domain if wizard_data.domain != '[]' else DOMAIN_ALL
+ self._create_or_combine_sharing_rule(cr, current_user, wizard_data,
+ group_id, model_id=model.id, domain=main_domain,
+ restrict=True, context=context)
# C.
- all_relations = obj0 + obj1 + obj2 + obj3
- self._link_or_copy_current_user_rules(cr, uid, group_id, all_relations, context=context)
- # so far, so good -> populate summary results and return them
- self._create_result_lines(cr, uid, wizard_data, context=context)
+ self._create_indirect_sharing_rules(cr, current_user, wizard_data, group_id, obj1, context=context)
+
+ # so far, so good -> check summary results and return them
+ self._finish_result_lines(cr, uid, wizard_data, group_id, context=context)
+
+ # update share URL to make it generic
+ generic_share_url = wizard_data.share_root_url % {'dbname': cr.dbname,
+ 'login': '',
+ 'password': ''}
+ wizard_data.write({'share_root_url': generic_share_url}, context=context)
+
+ # refresh wizard_data
+ wizard_data = self.browse(cr, uid, ids[0], context=context)
+
+ # send the confirmation emails:
+ self.send_emails(cr, uid, wizard_data, context=context)
dummy, step2_form_view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'share', 'share_step2_form')
return {
- 'name': _('Sharing Wizard - Step 2'),
+ 'name': _('Shared access created!'),
'view_type': 'form',
'view_mode': 'form',
'res_model': 'share.wizard',
@@ -442,40 +690,55 @@ class share_create(osv.osv_memory):
'target': 'new'
}
- def send_emails(self, cr, uid, ids, context=None):
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ def send_emails(self, cr, uid, wizard_data, context=None):
+ self._logger.info('Sending share notifications by email...')
+ user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
if not user.user_email:
raise osv.except_osv(_('Email required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.'))
- for wizard_data in self.browse(cr, uid, ids, context=context):
- for result_line in wizard_data.result_line_ids:
- email_to = result_line.login
- subject = _('%s has shared OpenERP %s information with you') % (user.name, wizard_data.action_id.name)
- body = _("Dear,\n\n%s\n\n") % subject
- body += _("To access it, you can go to the following URL:\n %s") % result_line.share_url
- body += "\n\n"
- if result_line.newly_created:
- body += _("You may use the following login and password to get access to this protected area:\n")
- body += "%s: %s" % (_("Username"), result_line.login) + "\n"
- body += "%s: %s" % (_("Password"), result_line.password) + "\n"
- body += "%s: %s" % (_("Database"), cr.dbname) + "\n"
- else:
- body += _("This additional data has been automatically added to your current access.\n")
- body += _("You may use your existing login and password to view it. As a reminder, your login is %s.\n") % result_line.login
- if not tools.email_send(
- user.user_email,
- [email_to],
- subject,
- body):
- self.__logger.warning('Failed to send sharing email from %s to %s', user.user_email, email_to)
- return {'type': 'ir.actions.act_window_close'}
-share_create()
+ # TODO: also send an HTML version of this mail
+ emails_sent = 0
+ for result_line in wizard_data.result_line_ids:
+ email_to = result_line.user_id.user_email
+ subject = wizard_data.name
+ body = _("Hello,")
+ body += "\n\n"
+ body += _("I've shared %s with you!") % wizard_data.name
+ body += "\n\n"
+ body += _("The documents are not attached, you can view them online directly on my OpenERP server at:")
+ body += "\n " + result_line.share_url
+ body += "\n\n"
+ if wizard_data.message:
+ body += wizard_data.message
+ body += "\n\n"
+ if result_line.newly_created:
+ body += _("These are your credentials to access this protected area:\n")
+ body += "%s: %s" % (_("Username"), result_line.user_id.login) + "\n"
+ body += "%s: %s" % (_("Password"), result_line.password) + "\n"
+ body += "%s: %s" % (_("Database"), cr.dbname) + "\n"
+ else:
+ body += _("The documents have been automatically added to your current OpenERP documents.\n")
+ body += _("You may use your current login (%s) and password to view them.\n") % result_line.user_id.login
+ body += "\n\n"
+ body += user.signature
+ body += "\n\n"
+ body += "--\n"
+ body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\n"
+ "It is open source and can be found on http://www.openerp.com.")
+
+ if tools.email_send(user.user_email, [email_to], subject, body):
+ emails_sent += 1
+ else:
+ self._logger.warning('Failed to send share notification from %s to %s, ignored', user.user_email, email_to)
+ self._logger.info('%s share notification(s) successfully sent.', emails_sent)
+share_wizard()
class share_result_line(osv.osv_memory):
_name = 'share.wizard.result.line'
- _rec_name = 'login'
+ _rec_name = 'user_id'
_columns = {
- 'login': fields.char('Username', size=64, required=True, readonly=True),
+ 'user_id': fields.many2one('res.users', required=True, readonly=True),
+ 'login': fields.related('user_id', 'login', string='Login', type='char', size=64, required=True, readonly=True),
'password': fields.char('Password', size=64, readonly=True),
'share_url': fields.char('Share URL', size=512, required=True),
'share_wizard_id': fields.many2one('share.wizard', 'Share Wizard', required=True),
diff --git a/addons/share/wizard/share_wizard_view.xml b/addons/share/wizard/share_wizard_view.xml
index bd281c7e97a..5087b85d7bd 100644
--- a/addons/share/wizard/share_wizard_view.xml
+++ b/addons/share/wizard/share_wizard_view.xml
@@ -7,7 +7,7 @@
share.wizard
form
-